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:

", + "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:

", + "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:

", + "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 :

", + "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:

", + "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 パラメーターの型は次のとおりです。

", + "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 매개 변수 형식은 다음과 같습니다.

", + "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:

", + "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 参数类型包括:

", + "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 參數類型包括:

", + "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 = []; + + switch (currentState) { + case (JobState.New): { + possibleStates = [JobState.Locating, JobState.Streaming, JobState.Joined, JobState.Cut]; + break; + } + + case (JobState.Locating): { + possibleStates = [JobState.Streaming, JobState.Joined, JobState.Cut]; + break; + } + + case (JobState.Streaming): { + possibleStates = [JobState.Finishing]; + break; + } + + case (JobState.Finishing): { + possibleStates = [JobState.Downloading, JobState.Queued, JobState.Done, JobState.Killed]; + break; + } + + case (JobState.Downloading): { + possibleStates = [JobState.Done]; + break; + } + + case (JobState.Done): + case (JobState.Joined): + case (JobState.Queued): + case (JobState.Cut): + case (JobState.Killed): { + break; + } + + default: { + throw new Error(`No transition rules defined for the ${currentState} state!`); + } + } + + if (possibleStates.length > 0) { + isValidTransition = (possibleStates.indexOf(newState) !== -1); + } + + return isValidTransition; +} diff --git a/_generated/JenkinsQueueJobV2/task.json b/_generated/JenkinsQueueJobV2/task.json new file mode 100644 index 000000000000..9087b81ea8fb --- /dev/null +++ b/_generated/JenkinsQueueJobV2/task.json @@ -0,0 +1,171 @@ +{ + "id": "c24b86d4-4256-4925-9a29-246f81aa64a7", + "name": "JenkinsQueueJob", + "friendlyName": "Jenkins queue job", + "description": "Queue a job on a Jenkins server", + "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/build/jenkins-queue-job", + "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.", + "category": "Build", + "visibility": [ + "Build", + "Release" + ], + "author": "Microsoft", + "demands": [], + "version": { + "Major": 2, + "Minor": 229, + "Patch": 3 + }, + "groups": [ + { + "name": "advanced", + "displayName": "Advanced", + "isExpanded": true + } + ], + "minimumAgentVersion": "2.144.0", + "instanceNameFormat": "Queue Jenkins job: $(jobName)", + "inputs": [ + { + "name": "serverEndpoint", + "type": "connectedService:Jenkins", + "label": "Jenkins service connection", + "defaultValue": "", + "required": true, + "helpMarkDown": "Select the service connection for your Jenkins instance. To create one, click the Manage link and create a new Jenkins service connection." + }, + { + "name": "jobName", + "type": "string", + "label": "Job name", + "defaultValue": "", + "required": true, + "helpMarkDown": "The name of the Jenkins job to queue. This must exactly match the job name on the Jenkins server." + }, + { + "name": "isMultibranchJob", + "type": "boolean", + "label": "Job is of multibranch pipeline type", + "defaultValue": false, + "required": false, + "helpMarkDown": "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." + }, + { + "name": "multibranchPipelineBranch", + "type": "string", + "label": "Multibranch pipeline branch", + "defaultValue": "", + "required": true, + "visibleRule": "isMultibranchJob = true", + "helpMarkDown": "Queue this multibranch pipeline job on the specified branch. This requires Team Foundation Server Plugin for Jenkins v5.3.4 or later." + }, + { + "name": "captureConsole", + "type": "boolean", + "label": "Capture console output and wait for completion", + "defaultValue": true, + "required": true, + "helpMarkDown": "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." + }, + { + "name": "capturePipeline", + "type": "boolean", + "label": "Capture pipeline output and wait for pipeline completion", + "defaultValue": true, + "required": true, + "helpMarkDown": "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.", + "visibleRule": "captureConsole = true" + }, + { + "name": "parameterizedJob", + "aliases": [ + "isParameterizedJob" + ], + "type": "boolean", + "label": "Parameterized job", + "defaultValue": false, + "required": true, + "helpMarkDown": "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.", + "groupName": "advanced" + }, + { + "name": "jobParameters", + "type": "multiLine", + "label": "Job parameters", + "defaultValue": "", + "required": false, + "helpMarkDown": "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`
", + "groupName": "advanced", + "visibleRule": "parameterizedJob = true", + "properties": { + "resizable": "true", + "rows": "4" + } + }, + { + "name": "failOnUnstableResult", + "type": "boolean", + "label": "Fail on unstable result", + "defaultValue": false, + "required": false, + "helpMarkDown": "Specifies strictness of a success definition: whether to consider unstable as a failure or not. False for non-strict, and true for strict version.", + "groupName": "advanced" + }, + { + "name": "retryCount", + "type": "string", + "label": "Number of retries for failed connection", + "defaultValue": "3", + "required": false, + "helpMarkDown": "Specify number of retries on errors or failures", + "groupName": "advanced" + }, + { + "name": "delayBetweenRetries", + "type": "string", + "label": "Time between retries", + "defaultValue": "60", + "required": false, + "helpMarkDown": "Specify time between retries. This is specified in seconds", + "groupName": "advanced" + } + ], + "outputVariables": [ + { + "name": "JENKINS_JOB_ID", + "description": "The ID of the Jenkins job instance queued by this task. Use this variable in the Jenkins Download Artifacts task to download the artifacts for this particular job instance." + } + ], + "execution": { + "Node10": { + "target": "jenkinsqueuejobtask.js", + "argumentFormat": "" + }, + "Node16": { + "target": "jenkinsqueuejobtask.js", + "argumentFormat": "" + } + }, + "messages": { + "FailedToGenerateSummary": "Failed to generate build summary.", + "succeeded": "succeeded", + "unstable": "unstable", + "failed": "failed", + "notbuilt": "not built", + "aborted": "aborted", + "unknown": "unknown", + "console": "console", + "JenkinsPipelineComplete": "Jenkins pipeline complete", + "JenkinsJobComplete": "Jenkins job complete", + "JenkinsJobQueued": "Jenkins job queued", + "JenkinsPipelineFailed": "Jenkins pipeline failed", + "JenkinsJobFailed": "Jenkins job failed", + "JenkinsJobFailedtoQueue": "Jenkins job failed to queue", + "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" + }, + "_buildConfigMapping": { + "Default": "2.229.3", + "Node20-225": "2.229.4" + } +} \ No newline at end of file diff --git a/_generated/JenkinsQueueJobV2/task.loc.json b/_generated/JenkinsQueueJobV2/task.loc.json new file mode 100644 index 000000000000..7a49e70de745 --- /dev/null +++ b/_generated/JenkinsQueueJobV2/task.loc.json @@ -0,0 +1,171 @@ +{ + "id": "c24b86d4-4256-4925-9a29-246f81aa64a7", + "name": "JenkinsQueueJob", + "friendlyName": "ms-resource:loc.friendlyName", + "description": "ms-resource:loc.description", + "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/build/jenkins-queue-job", + "helpMarkDown": "ms-resource:loc.helpMarkDown", + "category": "Build", + "visibility": [ + "Build", + "Release" + ], + "author": "Microsoft", + "demands": [], + "version": { + "Major": 2, + "Minor": 229, + "Patch": 3 + }, + "groups": [ + { + "name": "advanced", + "displayName": "ms-resource:loc.group.displayName.advanced", + "isExpanded": true + } + ], + "minimumAgentVersion": "2.144.0", + "instanceNameFormat": "ms-resource:loc.instanceNameFormat", + "inputs": [ + { + "name": "serverEndpoint", + "type": "connectedService:Jenkins", + "label": "ms-resource:loc.input.label.serverEndpoint", + "defaultValue": "", + "required": true, + "helpMarkDown": "ms-resource:loc.input.help.serverEndpoint" + }, + { + "name": "jobName", + "type": "string", + "label": "ms-resource:loc.input.label.jobName", + "defaultValue": "", + "required": true, + "helpMarkDown": "ms-resource:loc.input.help.jobName" + }, + { + "name": "isMultibranchJob", + "type": "boolean", + "label": "ms-resource:loc.input.label.isMultibranchJob", + "defaultValue": false, + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.isMultibranchJob" + }, + { + "name": "multibranchPipelineBranch", + "type": "string", + "label": "ms-resource:loc.input.label.multibranchPipelineBranch", + "defaultValue": "", + "required": true, + "visibleRule": "isMultibranchJob = true", + "helpMarkDown": "ms-resource:loc.input.help.multibranchPipelineBranch" + }, + { + "name": "captureConsole", + "type": "boolean", + "label": "ms-resource:loc.input.label.captureConsole", + "defaultValue": true, + "required": true, + "helpMarkDown": "ms-resource:loc.input.help.captureConsole" + }, + { + "name": "capturePipeline", + "type": "boolean", + "label": "ms-resource:loc.input.label.capturePipeline", + "defaultValue": true, + "required": true, + "helpMarkDown": "ms-resource:loc.input.help.capturePipeline", + "visibleRule": "captureConsole = true" + }, + { + "name": "parameterizedJob", + "aliases": [ + "isParameterizedJob" + ], + "type": "boolean", + "label": "ms-resource:loc.input.label.parameterizedJob", + "defaultValue": false, + "required": true, + "helpMarkDown": "ms-resource:loc.input.help.parameterizedJob", + "groupName": "advanced" + }, + { + "name": "jobParameters", + "type": "multiLine", + "label": "ms-resource:loc.input.label.jobParameters", + "defaultValue": "", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.jobParameters", + "groupName": "advanced", + "visibleRule": "parameterizedJob = true", + "properties": { + "resizable": "true", + "rows": "4" + } + }, + { + "name": "failOnUnstableResult", + "type": "boolean", + "label": "ms-resource:loc.input.label.failOnUnstableResult", + "defaultValue": false, + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.failOnUnstableResult", + "groupName": "advanced" + }, + { + "name": "retryCount", + "type": "string", + "label": "ms-resource:loc.input.label.retryCount", + "defaultValue": "3", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.retryCount", + "groupName": "advanced" + }, + { + "name": "delayBetweenRetries", + "type": "string", + "label": "ms-resource:loc.input.label.delayBetweenRetries", + "defaultValue": "60", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.delayBetweenRetries", + "groupName": "advanced" + } + ], + "outputVariables": [ + { + "name": "JENKINS_JOB_ID", + "description": "The ID of the Jenkins job instance queued by this task. Use this variable in the Jenkins Download Artifacts task to download the artifacts for this particular job instance." + } + ], + "execution": { + "Node10": { + "target": "jenkinsqueuejobtask.js", + "argumentFormat": "" + }, + "Node16": { + "target": "jenkinsqueuejobtask.js", + "argumentFormat": "" + } + }, + "messages": { + "FailedToGenerateSummary": "ms-resource:loc.messages.FailedToGenerateSummary", + "succeeded": "ms-resource:loc.messages.succeeded", + "unstable": "ms-resource:loc.messages.unstable", + "failed": "ms-resource:loc.messages.failed", + "notbuilt": "ms-resource:loc.messages.notbuilt", + "aborted": "ms-resource:loc.messages.aborted", + "unknown": "ms-resource:loc.messages.unknown", + "console": "ms-resource:loc.messages.console", + "JenkinsPipelineComplete": "ms-resource:loc.messages.JenkinsPipelineComplete", + "JenkinsJobComplete": "ms-resource:loc.messages.JenkinsJobComplete", + "JenkinsJobQueued": "ms-resource:loc.messages.JenkinsJobQueued", + "JenkinsPipelineFailed": "ms-resource:loc.messages.JenkinsPipelineFailed", + "JenkinsJobFailed": "ms-resource:loc.messages.JenkinsJobFailed", + "JenkinsJobFailedtoQueue": "ms-resource:loc.messages.JenkinsJobFailedtoQueue", + "JenkinsJobQueueUriInvalid": "ms-resource:loc.messages.JenkinsJobQueueUriInvalid" + }, + "_buildConfigMapping": { + "Default": "2.229.3", + "Node20-225": "2.229.4" + } +} \ No newline at end of file diff --git a/_generated/JenkinsQueueJobV2/tsconfig.json b/_generated/JenkinsQueueJobV2/tsconfig.json new file mode 100644 index 000000000000..0438b79f69ac --- /dev/null +++ b/_generated/JenkinsQueueJobV2/tsconfig.json @@ -0,0 +1,6 @@ +{ + "compilerOptions": { + "target": "ES6", + "module": "commonjs" + } +} \ No newline at end of file diff --git a/_generated/JenkinsQueueJobV2/tslint.json b/_generated/JenkinsQueueJobV2/tslint.json new file mode 100644 index 000000000000..98e3e60421e5 --- /dev/null +++ b/_generated/JenkinsQueueJobV2/tslint.json @@ -0,0 +1,56 @@ +{ + "rules": { + "align": [true, + "parameters", + "statements" + ], + "arrow-parens": true, + "class-name": true, + "curly": true, + "eofline": true, + "indent": [true, "spaces", 4], + "label-position": true, + "max-line-length": [false, 160], + "no-arg": true, + "no-bitwise": true, + "no-console": [true, + "debug", + "info", + "time", + "timeEnd", + "trace" + ], + "no-consecutive-blank-lines": true, + "no-construct": true, + "no-debugger": true, + "no-duplicate-variable": true, + "no-empty": true, + "no-eval": true, + "no-null-keyword": false, + "no-string-literal": false, + "no-switch-case-fall-through": true, + "no-trailing-whitespace": true, + "no-var-keyword": true, + "one-line": [true, + "check-open-brace", + "check-catch", + "check-else", + "check-whitespace" + ], + "one-variable-per-declaration": true, + "quotemark": [true, "single", "avoid-escape"], + "radix": false, + "semicolon": true, + "trailing-comma": [false, { "multiline": "never", "singleline": "never" }], + "variable-name": [true, + "allow-leading-underscore", + "ban-keywords" + ], + "whitespace": [true, + "check-branch", + "check-decl", + "check-operator", + "check-separator" + ] + } +} diff --git a/_generated/JenkinsQueueJobV2/unzip.ts b/_generated/JenkinsQueueJobV2/unzip.ts new file mode 100644 index 000000000000..b3291ad6b4e7 --- /dev/null +++ b/_generated/JenkinsQueueJobV2/unzip.ts @@ -0,0 +1,70 @@ +// 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 tr = require('azure-pipelines-task-lib/toolrunner'); + +import path = require('path'); + +import * as Util from './util'; + +const win = tl.osType().match(/^Win/); +tl.debug('win: ' + win); + +// extractors +let xpUnzipLocation: string = win ? null : tl.which('unzip', false); +let winSevenZipLocation: string = path.join(__dirname, '7zip/7z.exe'); + +export function unzip(file: string, destinationFolder: string): void { + if (win) { + sevenZipExtract(file, destinationFolder); + } else { + unzipExtract(file, destinationFolder); + } +} + +function unzipExtract(file: string, destinationFolder: string): void { + tl.debug('Extracting file: ' + file); + if (typeof xpUnzipLocation == 'undefined') { + xpUnzipLocation = tl.which('unzip', true); + } + const unzip: tr.ToolRunner = tl.tool(xpUnzipLocation); + unzip.arg(file); + unzip.arg('-d'); + unzip.arg(destinationFolder); + + return handleExecResult(unzip.execSync(getOptions()), file); +} + +function sevenZipExtract(file: string, destinationFolder: string): void { + tl.debug('Extracting file: ' + file); + const sevenZip: tr.ToolRunner = tl.tool(winSevenZipLocation); + sevenZip.arg('x'); + sevenZip.arg('-o' + destinationFolder); + sevenZip.arg(file); + return handleExecResult(sevenZip.execSync(getOptions()), file); +} + +function handleExecResult(execResult: tr.IExecSyncResult, file: string): void { + if (execResult.code != tl.TaskResult.Succeeded) { + tl.debug('execResult: ' + JSON.stringify(execResult)); + const message: string = 'Extraction failed for file: ' + file + + '\ncode: ' + execResult.code + + '\nstdout: ' + execResult.stdout + + '\nstderr: ' + execResult.stderr + + '\nerror: ' + execResult.error; + throw new UnzipError(message); + } +} + +function getOptions(): tr.IExecOptions { + const execOptions: tr.IExecOptions = { + silent: true, + outStream: new Util.StringWritable({ decodeStrings: false }), + errStream: new Util.StringWritable({ decodeStrings: false }), + }; + return execOptions; +} + +export class UnzipError extends Error { +} diff --git a/_generated/JenkinsQueueJobV2/util.ts b/_generated/JenkinsQueueJobV2/util.ts new file mode 100644 index 000000000000..1dbbc902cba7 --- /dev/null +++ b/_generated/JenkinsQueueJobV2/util.ts @@ -0,0 +1,440 @@ +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +import stream = require('stream'); +import tl = require('azure-pipelines-task-lib/task'); +import os = require('os'); +import Q = require('q'); +import request = require('request'); +import url = require('url'); + +import { Job } from './job'; +import { JobQueue } from './jobqueue'; +import { TaskOptions } from './jenkinsqueuejobtask'; + +export function getFullErrorMessage(httpResponse, message: string): string { + const fullMessage: string = `${message}\nHttpResponse.statusCode=${httpResponse.statusCode}\nHttpResponse.statusMessage=${httpResponse.statusMessage}`; + return fullMessage; +} + +export function failReturnCode(httpResponse, message: string): void { + const fullMessage = getFullErrorMessage(httpResponse, message); + console.error(fullMessage); + tl.setResult(tl.TaskResult.Failed, message); +} + +export function handleConnectionResetError(err): void { + if (err.code == 'ECONNRESET') { + tl.debug(err); + } else { + fail(err); + } +} + +export function fail(message: string): void { + throw new FailTaskError(message); +} + +export class FailTaskError extends Error { +} + +/** + * @class Represents error based on HttpResponse + * @extends {Error} Error class + */ +export class HttpError extends Error { + public body: string; + public fullMessage: string; + + constructor(httpResponse: any, message: string) { + super(); + this.fullMessage = getFullErrorMessage(httpResponse, message); + this.message = message; + this.body = httpResponse.body; + } +} + +export function convertJobName(jobName: string): string { + return '/job/' + jobName.replace(/\//g, '/job/'); +} + +export function addUrlSegment(baseUrl: string, segment: string): string { + let resultUrl: string; + if (baseUrl.endsWith('/') && segment.startsWith('/')) { + resultUrl = baseUrl + segment.slice(1); + } else if (baseUrl.endsWith('/') || segment.startsWith('/')) { + resultUrl = baseUrl + segment; + } else { + resultUrl = baseUrl + '/' + segment; + } + return resultUrl; +} + +export function isPipelineJob(job: Job, taskOptions: TaskOptions): Q.Promise { + const deferred: Q.Deferred = Q.defer(); + const wfapiUrl: string = `${job.TaskUrl}/wfapi`; + request.get({ url: wfapiUrl, strictSSL: taskOptions.strictSSL }, (err, response, body) => { + if (response.statusCode === 200) { + deferred.resolve(true); + } else { + deferred.resolve(false); + } + }); + + return deferred.promise; +} + +export function getPipelineReport(job: Job, taskOptions: TaskOptions): Q.Promise { + const deferred: Q.Deferred = Q.defer(); + const wfapiUrl: string = `${job.TaskUrl}/${job.ExecutableNumber}/wfapi/describe`; + request.get({ url: wfapiUrl, strictSSL: taskOptions.strictSSL }, (err, response, body) => { + if (response.statusCode === 200) { + deferred.resolve(body); + } else { + deferred.reject(err); + } + }); + + return deferred.promise; +} + +export function getUrlAuthority(myUrl: string): string { + const parsed: url.Url = url.parse(myUrl); + + let result: string = ''; + if (parsed.auth) { + result += parsed.auth; + } else { + if (parsed.protocol && parsed.host) { + result = `${parsed.protocol}//${parsed.host}`; + } + } + + return result; +} + +export function pollCreateRootJob(queueUri: string, jobQueue: JobQueue, taskOptions: TaskOptions): Q.Promise { + const defer: Q.Deferred = Q.defer(); + + const poll = async () => { + await createRootJob(queueUri, jobQueue, taskOptions).then((job: Job) => { + if (job != null) { + defer.resolve(job); + } else { + // no job yet, but no failure either, so keep trying + setTimeout(poll, taskOptions.pollIntervalMillis); + } + }).fail((err: any) => { + defer.reject(err); + }); + }; + + poll(); + + return defer.promise; +} + +function createRootJob(queueUri: string, jobQueue: JobQueue, taskOptions: TaskOptions): Q.Promise { + const defer: Q.Deferred = Q.defer(); + tl.debug('createRootJob(): ' + queueUri); + + request.get({ url: queueUri, strictSSL: taskOptions.strictSSL }, function requestCallback(err, httpResponse, body) { + tl.debug('createRootJob().requestCallback()'); + if (err) { + tl.debug(err); + if (err.code == 'ECONNRESET') { + defer.resolve(null); + } else { + const error = { message: tl.loc('JenkinsJobQueueUriInvalid', queueUri, JSON.stringify(err)) }; + defer.reject(error); + } + } else if (httpResponse.statusCode !== 200) { + defer.reject(new HttpError(httpResponse, 'Job progress tracking failed to read job queue')); + } else { + const parsedBody: any = JSON.parse(body); + tl.debug(`parsedBody for: ${queueUri} : ${JSON.stringify(parsedBody)}`); + + // canceled is spelled wrong in the body with 2 Ls (checking correct spelling also in case they fix it) + if (parsedBody.cancelled || parsedBody.canceled) { + defer.reject('Jenkins job canceled.'); + } else { + const executable: any = parsedBody.executable; + if (!executable) { + // job has not actually been queued yet + defer.resolve(null); + } else { + const rootJob: Job = new Job(jobQueue, null, parsedBody.task.url, parsedBody.executable.url, parsedBody.executable.number, parsedBody.task.name); + defer.resolve(rootJob); + } + } + } + }).auth(taskOptions.username, taskOptions.password, true); + + return defer.promise; +} + +export function pollSubmitJob(taskOptions: TaskOptions): Q.Promise { + const defer: Q.Deferred = Q.defer(); + + const poll = async () => { + await getCrumb(taskOptions).then(async (crumb: string) => { + if (crumb != null) { + await submitJob(taskOptions).then((queueUri: string) => { + if (queueUri != null) { + defer.resolve(queueUri); + } else { + // no queueUri yet, but no failure either, so keep trying + setTimeout(poll, taskOptions.pollIntervalMillis); + } + }).fail((err: any) => { + defer.reject(err); + }); + } else { + // no crumb yet, but no failure either, so keep trying + setTimeout(poll, taskOptions.pollIntervalMillis); + } + }).fail((err: any) => { + defer.reject(err); + }); + }; + + poll(); + + return defer.promise; +} + +function submitJob(taskOptions: TaskOptions): Q.Promise { + const defer: Q.Deferred = Q.defer(); + tl.debug('submitJob(): ' + JSON.stringify(taskOptions)); + + function addCrumb(json: any): any { + if (taskOptions.crumb && taskOptions.crumb != taskOptions.NO_CRUMB) { + json.headers = {}; + const splitIndex: number = taskOptions.crumb.indexOf(':'); + const crumbName: string = taskOptions.crumb.substr(0, splitIndex); + const crumbValue: string = taskOptions.crumb.slice(splitIndex + 1); + json.headers[crumbName] = crumbValue; + } + return json; + } + + const teamBuildPostData: any = addCrumb( + { + url: taskOptions.teamJobQueueUrl, + form: { + json: JSON.stringify({ + 'team-build': getTeamParameters(taskOptions), + 'parameter': parseJobParametersTeamBuild(taskOptions.jobParameters) + }) + }, + strictSSL: taskOptions.strictSSL + } + ); + + tl.debug('teamBuildPostData = ' + JSON.stringify(teamBuildPostData)); + // first try team-build plugin endpoint, if that fails, then try the default endpoint + request.post(teamBuildPostData, function teamBuildRequestCallback(err, httpResponse, body) { + tl.debug('submitJob().teamBuildRequestCallback(teamBuildPostData)'); + if (err) { + if (err.code == 'ECONNRESET') { + tl.debug(err); + defer.resolve(null); + } else { + defer.reject(err); + } + } else if (httpResponse.statusCode === 404) { // team-build plugin endpoint failed because it is not installed + console.log('Install the "Team Foundation Server Plug-in" for improved Jenkins integration\n' + taskOptions.teamPluginUrl); + taskOptions.teamBuildPluginAvailable = false; + + tl.debug('httpResponse: ' + JSON.stringify(httpResponse)); + const jobQueuePostData: any = addCrumb(taskOptions.parameterizedJob ? + { + url: taskOptions.jobQueueUrl, + formData: parseJobParameters(taskOptions.jobParameters), + strictSSL: taskOptions.strictSSL + } : + { + url: taskOptions.jobQueueUrl, + strictSSL: taskOptions.strictSSL + } + ); + tl.debug('jobQueuePostData = ' + JSON.stringify(jobQueuePostData)); + + request.post(jobQueuePostData, function jobQueueRequestCallback(err, httpResponse, body) { + tl.debug('submitJob().jobQueueRequestCallback(jobQueuePostData)'); + if (err) { + if (err.code == 'ECONNRESET') { + tl.debug(err); + defer.resolve(null); + } else { + defer.reject(err); + } + } else if (httpResponse.statusCode !== 201) { + defer.reject(new HttpError(httpResponse, 'Job creation failed.')); + } else { + const queueUri: string = addUrlSegment(httpResponse.headers.location, 'api/json'); + defer.resolve(queueUri); + } + }).auth(taskOptions.username, taskOptions.password, true); + } else if (httpResponse.statusCode !== 201) { + defer.reject(new HttpError(httpResponse, 'Job creation failed.')); + } else { + taskOptions.teamBuildPluginAvailable = true; + const jsonBody: any = JSON.parse(body); + const queueUri: string = addUrlSegment(jsonBody.created, 'api/json'); + defer.resolve(queueUri); + } + }).auth(taskOptions.username, taskOptions.password, true); + + return defer.promise; +} + +function getCrumb(taskOptions: TaskOptions): Q.Promise { + const defer: Q.Deferred = Q.defer(); + const crumbRequestUrl: string = addUrlSegment(taskOptions.serverEndpointUrl, '/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,%22:%22,//crumb)'); + tl.debug('crumbRequestUrl: ' + crumbRequestUrl); + + request.get({ url: crumbRequestUrl, strictSSL: taskOptions.strictSSL }, function (err, httpResponse, body) { + if (err) { + if (err.code == 'ECONNRESET') { + tl.debug(err); + defer.resolve(null); + } else { + defer.reject(err); + } + } else if (httpResponse.statusCode === 404) { + tl.debug('crumb endpoint not found'); + taskOptions.crumb = taskOptions.NO_CRUMB; + defer.resolve(taskOptions.NO_CRUMB); + } else if (httpResponse.statusCode !== 200) { + defer.reject(new HttpError(httpResponse, 'Crumb request failed.')); + } else { + taskOptions.crumb = body; + tl.debug('crumb: ' + taskOptions.crumb); + defer.resolve(taskOptions.crumb); + } + }).auth(taskOptions.username, taskOptions.password, true); + + return defer.promise; +} + +export class StringWritable extends stream.Writable { + private value: string = ''; + + constructor(options) { + super(options); + } + + _write(data: any, encoding: string, callback: Function): void { + tl.debug(data); + this.value += data; + if (callback) { + callback(); + } + } + + toString(): string { + return this.value; + } +} + +/** + * Supported parameter types: boolean, string, choice, password + * + * - If a parameter is not defined by Jenkins it is fine to pass it anyway + * - Anything passed to a boolean parameter other than 'true' (case insenstive) becomes false. + * - Invalid choice parameters result in a 500 response. + * + */ +function parseJobParameters(jobParameters: string[]): any { + let formData: any = {}; + for (let i: number = 0; i < jobParameters.length; i++) { + const paramLine: string = jobParameters[i].trim(); + const splitIndex: number = paramLine.indexOf('='); + if (splitIndex <= 0) { // either no paramValue (-1), or no paramName (0) + throw 'Job parameters should be specified as "parameterName=parameterValue" with one name, value pair per line. Invalid parameter line: ' + jobParameters[i]; + } + const paramName: string = paramLine.substr(0, splitIndex).trim(); + const paramValue: string = paramLine.slice(splitIndex + 1).trim(); + formData[paramName] = paramValue; + } + return formData; +} + +function parseJobParametersTeamBuild(jobParameters: string[]): any { + const formData: any = parseJobParameters(jobParameters); + const jsonArray: any[] = []; + + for (const paramName in formData) { + let json = {}; + json['name'] = paramName; + json['value'] = formData[paramName]; + jsonArray.push(json); + } + return jsonArray; +} + +function getTeamParameters(taskOptions: TaskOptions): any { + const formData: any = {}; + allTeamBuildVariables.forEach((variableName) => { + const paramValue: string = tl.getVariable(variableName); + if (paramValue) { + formData[variableName] = paramValue; + } + }); + + // add task specific options + if (taskOptions.isMultibranchPipelineJob) { + formData['QueueJobTask.MultibranchPipelineBranch'] = taskOptions.multibranchPipelineBranch; + } + + return formData; +} + +//https://www.visualstudio.com/docs/build/define/variables +const allTeamBuildVariables: string[] = [ + //control variables + 'Build.Clean', + 'Build.SyncSources', + 'System.Debug', + //predefined variables + 'Agent.BuildDirectory', + 'Agent.HomeDirectory', + 'Agent.Id', + 'Agent.MachineName', + 'Agent.Name', + 'Agent.WorkFolder', + 'Build.ArtifactStagingDirectory', + 'Build.BuildId', + 'Build.BuildNumber', + 'Build.BuildUri', + 'Build.BinariesDirectory', + 'Build.DefinitionName', + 'Build.DefinitionVersion', + 'Build.QueuedBy', + 'Build.QueuedById', + 'Build.Repository.Clean', + 'Build.Repository.LocalPath', + 'Build.Repository.Name', + 'Build.Repository.Provider', + 'Build.Repository.Tfvc.Workspace', + 'Build.Repository.Uri', + 'Build.RequestedFor', + 'Build.RequestedForId', + 'Build.SourceBranch', + 'Build.SourceBranchName', + 'Build.SourcesDirectory', + 'Build.SourceVersion', + 'Build.StagingDirectory', + 'Build.Repository.Git.SubmoduleCheckout', + 'Build.SourceTfvcShelveset', + 'Common.TestResultsDirectory', + //'System.AccessToken', -- holding this one back, Jenkins has it's own access mechamisms to TFS + 'System.CollectionId', + 'System.DefaultWorkingDirectory', + 'System.DefinitionId', + 'System.TeamFoundationCollectionUri', + 'System.TeamProject', + 'System.TeamProjectId', + 'TF_BUILD' +]; diff --git a/_generated/JenkinsQueueJobV2_Node20/.npmrc b/_generated/JenkinsQueueJobV2_Node20/.npmrc new file mode 100644 index 000000000000..5fca0d518be7 --- /dev/null +++ b/_generated/JenkinsQueueJobV2_Node20/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true diff --git a/_generated/JenkinsQueueJobV2_Node20/Strings/resources.resjson/de-DE/resources.resjson b/_generated/JenkinsQueueJobV2_Node20/Strings/resources.resjson/de-DE/resources.resjson new file mode 100644 index 000000000000..983a9a6e2dfd --- /dev/null +++ b/_generated/JenkinsQueueJobV2_Node20/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_Node20/Strings/resources.resjson/en-US/resources.resjson b/_generated/JenkinsQueueJobV2_Node20/Strings/resources.resjson/en-US/resources.resjson new file mode 100644 index 000000000000..206dbe37ea62 --- /dev/null +++ b/_generated/JenkinsQueueJobV2_Node20/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_Node20/Strings/resources.resjson/es-ES/resources.resjson b/_generated/JenkinsQueueJobV2_Node20/Strings/resources.resjson/es-ES/resources.resjson new file mode 100644 index 000000000000..a7c41310dd71 --- /dev/null +++ b/_generated/JenkinsQueueJobV2_Node20/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_Node20/Strings/resources.resjson/fr-FR/resources.resjson b/_generated/JenkinsQueueJobV2_Node20/Strings/resources.resjson/fr-FR/resources.resjson new file mode 100644 index 000000000000..47b90b411617 --- /dev/null +++ b/_generated/JenkinsQueueJobV2_Node20/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_Node20/Strings/resources.resjson/it-IT/resources.resjson b/_generated/JenkinsQueueJobV2_Node20/Strings/resources.resjson/it-IT/resources.resjson new file mode 100644 index 000000000000..3b2cf45e8ded --- /dev/null +++ b/_generated/JenkinsQueueJobV2_Node20/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_Node20/Strings/resources.resjson/ja-JP/resources.resjson b/_generated/JenkinsQueueJobV2_Node20/Strings/resources.resjson/ja-JP/resources.resjson new file mode 100644 index 000000000000..549c82520286 --- /dev/null +++ b/_generated/JenkinsQueueJobV2_Node20/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_Node20/Strings/resources.resjson/ko-KR/resources.resjson b/_generated/JenkinsQueueJobV2_Node20/Strings/resources.resjson/ko-KR/resources.resjson new file mode 100644 index 000000000000..e08178f4b8a9 --- /dev/null +++ b/_generated/JenkinsQueueJobV2_Node20/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_Node20/Strings/resources.resjson/ru-RU/resources.resjson b/_generated/JenkinsQueueJobV2_Node20/Strings/resources.resjson/ru-RU/resources.resjson new file mode 100644 index 000000000000..c44285d26c34 --- /dev/null +++ b/_generated/JenkinsQueueJobV2_Node20/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_Node20/Strings/resources.resjson/zh-CN/resources.resjson b/_generated/JenkinsQueueJobV2_Node20/Strings/resources.resjson/zh-CN/resources.resjson new file mode 100644 index 000000000000..c3bfe1c2a1d3 --- /dev/null +++ b/_generated/JenkinsQueueJobV2_Node20/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_Node20/Strings/resources.resjson/zh-TW/resources.resjson b/_generated/JenkinsQueueJobV2_Node20/Strings/resources.resjson/zh-TW/resources.resjson new file mode 100644 index 000000000000..b2f0da6804a7 --- /dev/null +++ b/_generated/JenkinsQueueJobV2_Node20/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_Node20/Tests/L0.ts b/_generated/JenkinsQueueJobV2_Node20/Tests/L0.ts new file mode 100644 index 000000000000..25af05eea143 --- /dev/null +++ b/_generated/JenkinsQueueJobV2_Node20/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_Node20/Tests/L0BogusUrlNoParameters.ts b/_generated/JenkinsQueueJobV2_Node20/Tests/L0BogusUrlNoParameters.ts new file mode 100644 index 000000000000..6969542e00df --- /dev/null +++ b/_generated/JenkinsQueueJobV2_Node20/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_Node20/Tests/L0BogusUrlParameters.ts b/_generated/JenkinsQueueJobV2_Node20/Tests/L0BogusUrlParameters.ts new file mode 100644 index 000000000000..823a2118e053 --- /dev/null +++ b/_generated/JenkinsQueueJobV2_Node20/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_Node20/Tests/L0NoCaptureConsole.ts b/_generated/JenkinsQueueJobV2_Node20/Tests/L0NoCaptureConsole.ts new file mode 100644 index 000000000000..9c647e168b74 --- /dev/null +++ b/_generated/JenkinsQueueJobV2_Node20/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_Node20/Tests/L0NoCapturePipeline.ts b/_generated/JenkinsQueueJobV2_Node20/Tests/L0NoCapturePipeline.ts new file mode 100644 index 000000000000..604dfbe44941 --- /dev/null +++ b/_generated/JenkinsQueueJobV2_Node20/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_Node20/Tests/L0NoJobName.ts b/_generated/JenkinsQueueJobV2_Node20/Tests/L0NoJobName.ts new file mode 100644 index 000000000000..39e7414bd881 --- /dev/null +++ b/_generated/JenkinsQueueJobV2_Node20/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_Node20/Tests/L0NoParameterizedJob.ts b/_generated/JenkinsQueueJobV2_Node20/Tests/L0NoParameterizedJob.ts new file mode 100644 index 000000000000..62d7c172637b --- /dev/null +++ b/_generated/JenkinsQueueJobV2_Node20/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_Node20/Tests/L0NoServerEndpoint.ts b/_generated/JenkinsQueueJobV2_Node20/Tests/L0NoServerEndpoint.ts new file mode 100644 index 000000000000..5a85d3692d10 --- /dev/null +++ b/_generated/JenkinsQueueJobV2_Node20/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_Node20/ThirdPartyNotices.txt b/_generated/JenkinsQueueJobV2_Node20/ThirdPartyNotices.txt new file mode 100644 index 000000000000..9a2e18af57bd --- /dev/null +++ b/_generated/JenkinsQueueJobV2_Node20/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_Node20/icon.png b/_generated/JenkinsQueueJobV2_Node20/icon.png new file mode 100644 index 000000000000..98e8dd36934d Binary files /dev/null and b/_generated/JenkinsQueueJobV2_Node20/icon.png differ diff --git a/_generated/JenkinsQueueJobV2_Node20/icon.svg b/_generated/JenkinsQueueJobV2_Node20/icon.svg new file mode 100644 index 000000000000..c8d02339e185 --- /dev/null +++ b/_generated/JenkinsQueueJobV2_Node20/icon.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_generated/JenkinsQueueJobV2_Node20/jenkinsqueuejobtask.ts b/_generated/JenkinsQueueJobV2_Node20/jenkinsqueuejobtask.ts new file mode 100644 index 000000000000..a83e4ea2b6da --- /dev/null +++ b/_generated/JenkinsQueueJobV2_Node20/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_Node20/job.ts b/_generated/JenkinsQueueJobV2_Node20/job.ts new file mode 100644 index 000000000000..1c2ceaf8746a --- /dev/null +++ b/_generated/JenkinsQueueJobV2_Node20/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_Node20/jobqueue.ts b/_generated/JenkinsQueueJobV2_Node20/jobqueue.ts new file mode 100644 index 000000000000..2d3c1d90a22c --- /dev/null +++ b/_generated/JenkinsQueueJobV2_Node20/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.Timeout; + 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_Node20/jobsearch.ts b/_generated/JenkinsQueueJobV2_Node20/jobsearch.ts new file mode 100644 index 000000000000..d66e83e97553 --- /dev/null +++ b/_generated/JenkinsQueueJobV2_Node20/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_Node20/make.json b/_generated/JenkinsQueueJobV2_Node20/make.json new file mode 100644 index 000000000000..ae5c6f5e3111 --- /dev/null +++ b/_generated/JenkinsQueueJobV2_Node20/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_Node20/package-lock.json b/_generated/JenkinsQueueJobV2_Node20/package-lock.json new file mode 100644 index 000000000000..3cf4ec2f13d4 --- /dev/null +++ b/_generated/JenkinsQueueJobV2_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/_generated/JenkinsQueueJobV2_Node20/package.json b/_generated/JenkinsQueueJobV2_Node20/package.json new file mode 100644 index 000000000000..fe0d2e9b5581 --- /dev/null +++ b/_generated/JenkinsQueueJobV2_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/_generated/JenkinsQueueJobV2_Node20/states.ts b/_generated/JenkinsQueueJobV2_Node20/states.ts new file mode 100644 index 000000000000..617dfb8b751a --- /dev/null +++ b/_generated/JenkinsQueueJobV2_Node20/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 = []; + + switch (currentState) { + case (JobState.New): { + possibleStates = [JobState.Locating, JobState.Streaming, JobState.Joined, JobState.Cut]; + break; + } + + case (JobState.Locating): { + possibleStates = [JobState.Streaming, JobState.Joined, JobState.Cut]; + break; + } + + case (JobState.Streaming): { + possibleStates = [JobState.Finishing]; + break; + } + + case (JobState.Finishing): { + possibleStates = [JobState.Downloading, JobState.Queued, JobState.Done, JobState.Killed]; + break; + } + + case (JobState.Downloading): { + possibleStates = [JobState.Done]; + break; + } + + case (JobState.Done): + case (JobState.Joined): + case (JobState.Queued): + case (JobState.Cut): + case (JobState.Killed): { + break; + } + + default: { + throw new Error(`No transition rules defined for the ${currentState} state!`); + } + } + + if (possibleStates.length > 0) { + isValidTransition = (possibleStates.indexOf(newState) !== -1); + } + + return isValidTransition; +} diff --git a/_generated/JenkinsQueueJobV2_Node20/task.json b/_generated/JenkinsQueueJobV2_Node20/task.json new file mode 100644 index 000000000000..f0f8485598e5 --- /dev/null +++ b/_generated/JenkinsQueueJobV2_Node20/task.json @@ -0,0 +1,175 @@ +{ + "id": "c24b86d4-4256-4925-9a29-246f81aa64a7", + "name": "JenkinsQueueJob", + "friendlyName": "Jenkins queue job", + "description": "Queue a job on a Jenkins server", + "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/build/jenkins-queue-job", + "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.", + "category": "Build", + "visibility": [ + "Build", + "Release" + ], + "author": "Microsoft", + "demands": [], + "version": { + "Major": 2, + "Minor": 229, + "Patch": 4 + }, + "groups": [ + { + "name": "advanced", + "displayName": "Advanced", + "isExpanded": true + } + ], + "minimumAgentVersion": "2.144.0", + "instanceNameFormat": "Queue Jenkins job: $(jobName)", + "inputs": [ + { + "name": "serverEndpoint", + "type": "connectedService:Jenkins", + "label": "Jenkins service connection", + "defaultValue": "", + "required": true, + "helpMarkDown": "Select the service connection for your Jenkins instance. To create one, click the Manage link and create a new Jenkins service connection." + }, + { + "name": "jobName", + "type": "string", + "label": "Job name", + "defaultValue": "", + "required": true, + "helpMarkDown": "The name of the Jenkins job to queue. This must exactly match the job name on the Jenkins server." + }, + { + "name": "isMultibranchJob", + "type": "boolean", + "label": "Job is of multibranch pipeline type", + "defaultValue": false, + "required": false, + "helpMarkDown": "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." + }, + { + "name": "multibranchPipelineBranch", + "type": "string", + "label": "Multibranch pipeline branch", + "defaultValue": "", + "required": true, + "visibleRule": "isMultibranchJob = true", + "helpMarkDown": "Queue this multibranch pipeline job on the specified branch. This requires Team Foundation Server Plugin for Jenkins v5.3.4 or later." + }, + { + "name": "captureConsole", + "type": "boolean", + "label": "Capture console output and wait for completion", + "defaultValue": true, + "required": true, + "helpMarkDown": "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." + }, + { + "name": "capturePipeline", + "type": "boolean", + "label": "Capture pipeline output and wait for pipeline completion", + "defaultValue": true, + "required": true, + "helpMarkDown": "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.", + "visibleRule": "captureConsole = true" + }, + { + "name": "parameterizedJob", + "aliases": [ + "isParameterizedJob" + ], + "type": "boolean", + "label": "Parameterized job", + "defaultValue": false, + "required": true, + "helpMarkDown": "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.", + "groupName": "advanced" + }, + { + "name": "jobParameters", + "type": "multiLine", + "label": "Job parameters", + "defaultValue": "", + "required": false, + "helpMarkDown": "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`
", + "groupName": "advanced", + "visibleRule": "parameterizedJob = true", + "properties": { + "resizable": "true", + "rows": "4" + } + }, + { + "name": "failOnUnstableResult", + "type": "boolean", + "label": "Fail on unstable result", + "defaultValue": false, + "required": false, + "helpMarkDown": "Specifies strictness of a success definition: whether to consider unstable as a failure or not. False for non-strict, and true for strict version.", + "groupName": "advanced" + }, + { + "name": "retryCount", + "type": "string", + "label": "Number of retries for failed connection", + "defaultValue": "3", + "required": false, + "helpMarkDown": "Specify number of retries on errors or failures", + "groupName": "advanced" + }, + { + "name": "delayBetweenRetries", + "type": "string", + "label": "Time between retries", + "defaultValue": "60", + "required": false, + "helpMarkDown": "Specify time between retries. This is specified in seconds", + "groupName": "advanced" + } + ], + "outputVariables": [ + { + "name": "JENKINS_JOB_ID", + "description": "The ID of the Jenkins job instance queued by this task. Use this variable in the Jenkins Download Artifacts task to download the artifacts for this particular job instance." + } + ], + "execution": { + "Node10": { + "target": "jenkinsqueuejobtask.js", + "argumentFormat": "" + }, + "Node16": { + "target": "jenkinsqueuejobtask.js", + "argumentFormat": "" + }, + "Node20": { + "target": "jenkinsqueuejobtask.js", + "argumentFormat": "" + } + }, + "messages": { + "FailedToGenerateSummary": "Failed to generate build summary.", + "succeeded": "succeeded", + "unstable": "unstable", + "failed": "failed", + "notbuilt": "not built", + "aborted": "aborted", + "unknown": "unknown", + "console": "console", + "JenkinsPipelineComplete": "Jenkins pipeline complete", + "JenkinsJobComplete": "Jenkins job complete", + "JenkinsJobQueued": "Jenkins job queued", + "JenkinsPipelineFailed": "Jenkins pipeline failed", + "JenkinsJobFailed": "Jenkins job failed", + "JenkinsJobFailedtoQueue": "Jenkins job failed to queue", + "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" + }, + "_buildConfigMapping": { + "Default": "2.229.3", + "Node20-225": "2.229.4" + } +} \ No newline at end of file diff --git a/_generated/JenkinsQueueJobV2_Node20/task.loc.json b/_generated/JenkinsQueueJobV2_Node20/task.loc.json new file mode 100644 index 000000000000..8bb86497c828 --- /dev/null +++ b/_generated/JenkinsQueueJobV2_Node20/task.loc.json @@ -0,0 +1,175 @@ +{ + "id": "c24b86d4-4256-4925-9a29-246f81aa64a7", + "name": "JenkinsQueueJob", + "friendlyName": "ms-resource:loc.friendlyName", + "description": "ms-resource:loc.description", + "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/build/jenkins-queue-job", + "helpMarkDown": "ms-resource:loc.helpMarkDown", + "category": "Build", + "visibility": [ + "Build", + "Release" + ], + "author": "Microsoft", + "demands": [], + "version": { + "Major": 2, + "Minor": 229, + "Patch": 4 + }, + "groups": [ + { + "name": "advanced", + "displayName": "ms-resource:loc.group.displayName.advanced", + "isExpanded": true + } + ], + "minimumAgentVersion": "2.144.0", + "instanceNameFormat": "ms-resource:loc.instanceNameFormat", + "inputs": [ + { + "name": "serverEndpoint", + "type": "connectedService:Jenkins", + "label": "ms-resource:loc.input.label.serverEndpoint", + "defaultValue": "", + "required": true, + "helpMarkDown": "ms-resource:loc.input.help.serverEndpoint" + }, + { + "name": "jobName", + "type": "string", + "label": "ms-resource:loc.input.label.jobName", + "defaultValue": "", + "required": true, + "helpMarkDown": "ms-resource:loc.input.help.jobName" + }, + { + "name": "isMultibranchJob", + "type": "boolean", + "label": "ms-resource:loc.input.label.isMultibranchJob", + "defaultValue": false, + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.isMultibranchJob" + }, + { + "name": "multibranchPipelineBranch", + "type": "string", + "label": "ms-resource:loc.input.label.multibranchPipelineBranch", + "defaultValue": "", + "required": true, + "visibleRule": "isMultibranchJob = true", + "helpMarkDown": "ms-resource:loc.input.help.multibranchPipelineBranch" + }, + { + "name": "captureConsole", + "type": "boolean", + "label": "ms-resource:loc.input.label.captureConsole", + "defaultValue": true, + "required": true, + "helpMarkDown": "ms-resource:loc.input.help.captureConsole" + }, + { + "name": "capturePipeline", + "type": "boolean", + "label": "ms-resource:loc.input.label.capturePipeline", + "defaultValue": true, + "required": true, + "helpMarkDown": "ms-resource:loc.input.help.capturePipeline", + "visibleRule": "captureConsole = true" + }, + { + "name": "parameterizedJob", + "aliases": [ + "isParameterizedJob" + ], + "type": "boolean", + "label": "ms-resource:loc.input.label.parameterizedJob", + "defaultValue": false, + "required": true, + "helpMarkDown": "ms-resource:loc.input.help.parameterizedJob", + "groupName": "advanced" + }, + { + "name": "jobParameters", + "type": "multiLine", + "label": "ms-resource:loc.input.label.jobParameters", + "defaultValue": "", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.jobParameters", + "groupName": "advanced", + "visibleRule": "parameterizedJob = true", + "properties": { + "resizable": "true", + "rows": "4" + } + }, + { + "name": "failOnUnstableResult", + "type": "boolean", + "label": "ms-resource:loc.input.label.failOnUnstableResult", + "defaultValue": false, + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.failOnUnstableResult", + "groupName": "advanced" + }, + { + "name": "retryCount", + "type": "string", + "label": "ms-resource:loc.input.label.retryCount", + "defaultValue": "3", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.retryCount", + "groupName": "advanced" + }, + { + "name": "delayBetweenRetries", + "type": "string", + "label": "ms-resource:loc.input.label.delayBetweenRetries", + "defaultValue": "60", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.delayBetweenRetries", + "groupName": "advanced" + } + ], + "outputVariables": [ + { + "name": "JENKINS_JOB_ID", + "description": "The ID of the Jenkins job instance queued by this task. Use this variable in the Jenkins Download Artifacts task to download the artifacts for this particular job instance." + } + ], + "execution": { + "Node10": { + "target": "jenkinsqueuejobtask.js", + "argumentFormat": "" + }, + "Node16": { + "target": "jenkinsqueuejobtask.js", + "argumentFormat": "" + }, + "Node20": { + "target": "jenkinsqueuejobtask.js", + "argumentFormat": "" + } + }, + "messages": { + "FailedToGenerateSummary": "ms-resource:loc.messages.FailedToGenerateSummary", + "succeeded": "ms-resource:loc.messages.succeeded", + "unstable": "ms-resource:loc.messages.unstable", + "failed": "ms-resource:loc.messages.failed", + "notbuilt": "ms-resource:loc.messages.notbuilt", + "aborted": "ms-resource:loc.messages.aborted", + "unknown": "ms-resource:loc.messages.unknown", + "console": "ms-resource:loc.messages.console", + "JenkinsPipelineComplete": "ms-resource:loc.messages.JenkinsPipelineComplete", + "JenkinsJobComplete": "ms-resource:loc.messages.JenkinsJobComplete", + "JenkinsJobQueued": "ms-resource:loc.messages.JenkinsJobQueued", + "JenkinsPipelineFailed": "ms-resource:loc.messages.JenkinsPipelineFailed", + "JenkinsJobFailed": "ms-resource:loc.messages.JenkinsJobFailed", + "JenkinsJobFailedtoQueue": "ms-resource:loc.messages.JenkinsJobFailedtoQueue", + "JenkinsJobQueueUriInvalid": "ms-resource:loc.messages.JenkinsJobQueueUriInvalid" + }, + "_buildConfigMapping": { + "Default": "2.229.3", + "Node20-225": "2.229.4" + } +} \ No newline at end of file diff --git a/_generated/JenkinsQueueJobV2_Node20/tsconfig.json b/_generated/JenkinsQueueJobV2_Node20/tsconfig.json new file mode 100644 index 000000000000..0438b79f69ac --- /dev/null +++ b/_generated/JenkinsQueueJobV2_Node20/tsconfig.json @@ -0,0 +1,6 @@ +{ + "compilerOptions": { + "target": "ES6", + "module": "commonjs" + } +} \ No newline at end of file diff --git a/_generated/JenkinsQueueJobV2_Node20/tslint.json b/_generated/JenkinsQueueJobV2_Node20/tslint.json new file mode 100644 index 000000000000..98e3e60421e5 --- /dev/null +++ b/_generated/JenkinsQueueJobV2_Node20/tslint.json @@ -0,0 +1,56 @@ +{ + "rules": { + "align": [true, + "parameters", + "statements" + ], + "arrow-parens": true, + "class-name": true, + "curly": true, + "eofline": true, + "indent": [true, "spaces", 4], + "label-position": true, + "max-line-length": [false, 160], + "no-arg": true, + "no-bitwise": true, + "no-console": [true, + "debug", + "info", + "time", + "timeEnd", + "trace" + ], + "no-consecutive-blank-lines": true, + "no-construct": true, + "no-debugger": true, + "no-duplicate-variable": true, + "no-empty": true, + "no-eval": true, + "no-null-keyword": false, + "no-string-literal": false, + "no-switch-case-fall-through": true, + "no-trailing-whitespace": true, + "no-var-keyword": true, + "one-line": [true, + "check-open-brace", + "check-catch", + "check-else", + "check-whitespace" + ], + "one-variable-per-declaration": true, + "quotemark": [true, "single", "avoid-escape"], + "radix": false, + "semicolon": true, + "trailing-comma": [false, { "multiline": "never", "singleline": "never" }], + "variable-name": [true, + "allow-leading-underscore", + "ban-keywords" + ], + "whitespace": [true, + "check-branch", + "check-decl", + "check-operator", + "check-separator" + ] + } +} diff --git a/_generated/JenkinsQueueJobV2_Node20/unzip.ts b/_generated/JenkinsQueueJobV2_Node20/unzip.ts new file mode 100644 index 000000000000..b3291ad6b4e7 --- /dev/null +++ b/_generated/JenkinsQueueJobV2_Node20/unzip.ts @@ -0,0 +1,70 @@ +// 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 tr = require('azure-pipelines-task-lib/toolrunner'); + +import path = require('path'); + +import * as Util from './util'; + +const win = tl.osType().match(/^Win/); +tl.debug('win: ' + win); + +// extractors +let xpUnzipLocation: string = win ? null : tl.which('unzip', false); +let winSevenZipLocation: string = path.join(__dirname, '7zip/7z.exe'); + +export function unzip(file: string, destinationFolder: string): void { + if (win) { + sevenZipExtract(file, destinationFolder); + } else { + unzipExtract(file, destinationFolder); + } +} + +function unzipExtract(file: string, destinationFolder: string): void { + tl.debug('Extracting file: ' + file); + if (typeof xpUnzipLocation == 'undefined') { + xpUnzipLocation = tl.which('unzip', true); + } + const unzip: tr.ToolRunner = tl.tool(xpUnzipLocation); + unzip.arg(file); + unzip.arg('-d'); + unzip.arg(destinationFolder); + + return handleExecResult(unzip.execSync(getOptions()), file); +} + +function sevenZipExtract(file: string, destinationFolder: string): void { + tl.debug('Extracting file: ' + file); + const sevenZip: tr.ToolRunner = tl.tool(winSevenZipLocation); + sevenZip.arg('x'); + sevenZip.arg('-o' + destinationFolder); + sevenZip.arg(file); + return handleExecResult(sevenZip.execSync(getOptions()), file); +} + +function handleExecResult(execResult: tr.IExecSyncResult, file: string): void { + if (execResult.code != tl.TaskResult.Succeeded) { + tl.debug('execResult: ' + JSON.stringify(execResult)); + const message: string = 'Extraction failed for file: ' + file + + '\ncode: ' + execResult.code + + '\nstdout: ' + execResult.stdout + + '\nstderr: ' + execResult.stderr + + '\nerror: ' + execResult.error; + throw new UnzipError(message); + } +} + +function getOptions(): tr.IExecOptions { + const execOptions: tr.IExecOptions = { + silent: true, + outStream: new Util.StringWritable({ decodeStrings: false }), + errStream: new Util.StringWritable({ decodeStrings: false }), + }; + return execOptions; +} + +export class UnzipError extends Error { +} diff --git a/_generated/JenkinsQueueJobV2_Node20/util.ts b/_generated/JenkinsQueueJobV2_Node20/util.ts new file mode 100644 index 000000000000..1dbbc902cba7 --- /dev/null +++ b/_generated/JenkinsQueueJobV2_Node20/util.ts @@ -0,0 +1,440 @@ +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. + +import stream = require('stream'); +import tl = require('azure-pipelines-task-lib/task'); +import os = require('os'); +import Q = require('q'); +import request = require('request'); +import url = require('url'); + +import { Job } from './job'; +import { JobQueue } from './jobqueue'; +import { TaskOptions } from './jenkinsqueuejobtask'; + +export function getFullErrorMessage(httpResponse, message: string): string { + const fullMessage: string = `${message}\nHttpResponse.statusCode=${httpResponse.statusCode}\nHttpResponse.statusMessage=${httpResponse.statusMessage}`; + return fullMessage; +} + +export function failReturnCode(httpResponse, message: string): void { + const fullMessage = getFullErrorMessage(httpResponse, message); + console.error(fullMessage); + tl.setResult(tl.TaskResult.Failed, message); +} + +export function handleConnectionResetError(err): void { + if (err.code == 'ECONNRESET') { + tl.debug(err); + } else { + fail(err); + } +} + +export function fail(message: string): void { + throw new FailTaskError(message); +} + +export class FailTaskError extends Error { +} + +/** + * @class Represents error based on HttpResponse + * @extends {Error} Error class + */ +export class HttpError extends Error { + public body: string; + public fullMessage: string; + + constructor(httpResponse: any, message: string) { + super(); + this.fullMessage = getFullErrorMessage(httpResponse, message); + this.message = message; + this.body = httpResponse.body; + } +} + +export function convertJobName(jobName: string): string { + return '/job/' + jobName.replace(/\//g, '/job/'); +} + +export function addUrlSegment(baseUrl: string, segment: string): string { + let resultUrl: string; + if (baseUrl.endsWith('/') && segment.startsWith('/')) { + resultUrl = baseUrl + segment.slice(1); + } else if (baseUrl.endsWith('/') || segment.startsWith('/')) { + resultUrl = baseUrl + segment; + } else { + resultUrl = baseUrl + '/' + segment; + } + return resultUrl; +} + +export function isPipelineJob(job: Job, taskOptions: TaskOptions): Q.Promise { + const deferred: Q.Deferred = Q.defer(); + const wfapiUrl: string = `${job.TaskUrl}/wfapi`; + request.get({ url: wfapiUrl, strictSSL: taskOptions.strictSSL }, (err, response, body) => { + if (response.statusCode === 200) { + deferred.resolve(true); + } else { + deferred.resolve(false); + } + }); + + return deferred.promise; +} + +export function getPipelineReport(job: Job, taskOptions: TaskOptions): Q.Promise { + const deferred: Q.Deferred = Q.defer(); + const wfapiUrl: string = `${job.TaskUrl}/${job.ExecutableNumber}/wfapi/describe`; + request.get({ url: wfapiUrl, strictSSL: taskOptions.strictSSL }, (err, response, body) => { + if (response.statusCode === 200) { + deferred.resolve(body); + } else { + deferred.reject(err); + } + }); + + return deferred.promise; +} + +export function getUrlAuthority(myUrl: string): string { + const parsed: url.Url = url.parse(myUrl); + + let result: string = ''; + if (parsed.auth) { + result += parsed.auth; + } else { + if (parsed.protocol && parsed.host) { + result = `${parsed.protocol}//${parsed.host}`; + } + } + + return result; +} + +export function pollCreateRootJob(queueUri: string, jobQueue: JobQueue, taskOptions: TaskOptions): Q.Promise { + const defer: Q.Deferred = Q.defer(); + + const poll = async () => { + await createRootJob(queueUri, jobQueue, taskOptions).then((job: Job) => { + if (job != null) { + defer.resolve(job); + } else { + // no job yet, but no failure either, so keep trying + setTimeout(poll, taskOptions.pollIntervalMillis); + } + }).fail((err: any) => { + defer.reject(err); + }); + }; + + poll(); + + return defer.promise; +} + +function createRootJob(queueUri: string, jobQueue: JobQueue, taskOptions: TaskOptions): Q.Promise { + const defer: Q.Deferred = Q.defer(); + tl.debug('createRootJob(): ' + queueUri); + + request.get({ url: queueUri, strictSSL: taskOptions.strictSSL }, function requestCallback(err, httpResponse, body) { + tl.debug('createRootJob().requestCallback()'); + if (err) { + tl.debug(err); + if (err.code == 'ECONNRESET') { + defer.resolve(null); + } else { + const error = { message: tl.loc('JenkinsJobQueueUriInvalid', queueUri, JSON.stringify(err)) }; + defer.reject(error); + } + } else if (httpResponse.statusCode !== 200) { + defer.reject(new HttpError(httpResponse, 'Job progress tracking failed to read job queue')); + } else { + const parsedBody: any = JSON.parse(body); + tl.debug(`parsedBody for: ${queueUri} : ${JSON.stringify(parsedBody)}`); + + // canceled is spelled wrong in the body with 2 Ls (checking correct spelling also in case they fix it) + if (parsedBody.cancelled || parsedBody.canceled) { + defer.reject('Jenkins job canceled.'); + } else { + const executable: any = parsedBody.executable; + if (!executable) { + // job has not actually been queued yet + defer.resolve(null); + } else { + const rootJob: Job = new Job(jobQueue, null, parsedBody.task.url, parsedBody.executable.url, parsedBody.executable.number, parsedBody.task.name); + defer.resolve(rootJob); + } + } + } + }).auth(taskOptions.username, taskOptions.password, true); + + return defer.promise; +} + +export function pollSubmitJob(taskOptions: TaskOptions): Q.Promise { + const defer: Q.Deferred = Q.defer(); + + const poll = async () => { + await getCrumb(taskOptions).then(async (crumb: string) => { + if (crumb != null) { + await submitJob(taskOptions).then((queueUri: string) => { + if (queueUri != null) { + defer.resolve(queueUri); + } else { + // no queueUri yet, but no failure either, so keep trying + setTimeout(poll, taskOptions.pollIntervalMillis); + } + }).fail((err: any) => { + defer.reject(err); + }); + } else { + // no crumb yet, but no failure either, so keep trying + setTimeout(poll, taskOptions.pollIntervalMillis); + } + }).fail((err: any) => { + defer.reject(err); + }); + }; + + poll(); + + return defer.promise; +} + +function submitJob(taskOptions: TaskOptions): Q.Promise { + const defer: Q.Deferred = Q.defer(); + tl.debug('submitJob(): ' + JSON.stringify(taskOptions)); + + function addCrumb(json: any): any { + if (taskOptions.crumb && taskOptions.crumb != taskOptions.NO_CRUMB) { + json.headers = {}; + const splitIndex: number = taskOptions.crumb.indexOf(':'); + const crumbName: string = taskOptions.crumb.substr(0, splitIndex); + const crumbValue: string = taskOptions.crumb.slice(splitIndex + 1); + json.headers[crumbName] = crumbValue; + } + return json; + } + + const teamBuildPostData: any = addCrumb( + { + url: taskOptions.teamJobQueueUrl, + form: { + json: JSON.stringify({ + 'team-build': getTeamParameters(taskOptions), + 'parameter': parseJobParametersTeamBuild(taskOptions.jobParameters) + }) + }, + strictSSL: taskOptions.strictSSL + } + ); + + tl.debug('teamBuildPostData = ' + JSON.stringify(teamBuildPostData)); + // first try team-build plugin endpoint, if that fails, then try the default endpoint + request.post(teamBuildPostData, function teamBuildRequestCallback(err, httpResponse, body) { + tl.debug('submitJob().teamBuildRequestCallback(teamBuildPostData)'); + if (err) { + if (err.code == 'ECONNRESET') { + tl.debug(err); + defer.resolve(null); + } else { + defer.reject(err); + } + } else if (httpResponse.statusCode === 404) { // team-build plugin endpoint failed because it is not installed + console.log('Install the "Team Foundation Server Plug-in" for improved Jenkins integration\n' + taskOptions.teamPluginUrl); + taskOptions.teamBuildPluginAvailable = false; + + tl.debug('httpResponse: ' + JSON.stringify(httpResponse)); + const jobQueuePostData: any = addCrumb(taskOptions.parameterizedJob ? + { + url: taskOptions.jobQueueUrl, + formData: parseJobParameters(taskOptions.jobParameters), + strictSSL: taskOptions.strictSSL + } : + { + url: taskOptions.jobQueueUrl, + strictSSL: taskOptions.strictSSL + } + ); + tl.debug('jobQueuePostData = ' + JSON.stringify(jobQueuePostData)); + + request.post(jobQueuePostData, function jobQueueRequestCallback(err, httpResponse, body) { + tl.debug('submitJob().jobQueueRequestCallback(jobQueuePostData)'); + if (err) { + if (err.code == 'ECONNRESET') { + tl.debug(err); + defer.resolve(null); + } else { + defer.reject(err); + } + } else if (httpResponse.statusCode !== 201) { + defer.reject(new HttpError(httpResponse, 'Job creation failed.')); + } else { + const queueUri: string = addUrlSegment(httpResponse.headers.location, 'api/json'); + defer.resolve(queueUri); + } + }).auth(taskOptions.username, taskOptions.password, true); + } else if (httpResponse.statusCode !== 201) { + defer.reject(new HttpError(httpResponse, 'Job creation failed.')); + } else { + taskOptions.teamBuildPluginAvailable = true; + const jsonBody: any = JSON.parse(body); + const queueUri: string = addUrlSegment(jsonBody.created, 'api/json'); + defer.resolve(queueUri); + } + }).auth(taskOptions.username, taskOptions.password, true); + + return defer.promise; +} + +function getCrumb(taskOptions: TaskOptions): Q.Promise { + const defer: Q.Deferred = Q.defer(); + const crumbRequestUrl: string = addUrlSegment(taskOptions.serverEndpointUrl, '/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,%22:%22,//crumb)'); + tl.debug('crumbRequestUrl: ' + crumbRequestUrl); + + request.get({ url: crumbRequestUrl, strictSSL: taskOptions.strictSSL }, function (err, httpResponse, body) { + if (err) { + if (err.code == 'ECONNRESET') { + tl.debug(err); + defer.resolve(null); + } else { + defer.reject(err); + } + } else if (httpResponse.statusCode === 404) { + tl.debug('crumb endpoint not found'); + taskOptions.crumb = taskOptions.NO_CRUMB; + defer.resolve(taskOptions.NO_CRUMB); + } else if (httpResponse.statusCode !== 200) { + defer.reject(new HttpError(httpResponse, 'Crumb request failed.')); + } else { + taskOptions.crumb = body; + tl.debug('crumb: ' + taskOptions.crumb); + defer.resolve(taskOptions.crumb); + } + }).auth(taskOptions.username, taskOptions.password, true); + + return defer.promise; +} + +export class StringWritable extends stream.Writable { + private value: string = ''; + + constructor(options) { + super(options); + } + + _write(data: any, encoding: string, callback: Function): void { + tl.debug(data); + this.value += data; + if (callback) { + callback(); + } + } + + toString(): string { + return this.value; + } +} + +/** + * Supported parameter types: boolean, string, choice, password + * + * - If a parameter is not defined by Jenkins it is fine to pass it anyway + * - Anything passed to a boolean parameter other than 'true' (case insenstive) becomes false. + * - Invalid choice parameters result in a 500 response. + * + */ +function parseJobParameters(jobParameters: string[]): any { + let formData: any = {}; + for (let i: number = 0; i < jobParameters.length; i++) { + const paramLine: string = jobParameters[i].trim(); + const splitIndex: number = paramLine.indexOf('='); + if (splitIndex <= 0) { // either no paramValue (-1), or no paramName (0) + throw 'Job parameters should be specified as "parameterName=parameterValue" with one name, value pair per line. Invalid parameter line: ' + jobParameters[i]; + } + const paramName: string = paramLine.substr(0, splitIndex).trim(); + const paramValue: string = paramLine.slice(splitIndex + 1).trim(); + formData[paramName] = paramValue; + } + return formData; +} + +function parseJobParametersTeamBuild(jobParameters: string[]): any { + const formData: any = parseJobParameters(jobParameters); + const jsonArray: any[] = []; + + for (const paramName in formData) { + let json = {}; + json['name'] = paramName; + json['value'] = formData[paramName]; + jsonArray.push(json); + } + return jsonArray; +} + +function getTeamParameters(taskOptions: TaskOptions): any { + const formData: any = {}; + allTeamBuildVariables.forEach((variableName) => { + const paramValue: string = tl.getVariable(variableName); + if (paramValue) { + formData[variableName] = paramValue; + } + }); + + // add task specific options + if (taskOptions.isMultibranchPipelineJob) { + formData['QueueJobTask.MultibranchPipelineBranch'] = taskOptions.multibranchPipelineBranch; + } + + return formData; +} + +//https://www.visualstudio.com/docs/build/define/variables +const allTeamBuildVariables: string[] = [ + //control variables + 'Build.Clean', + 'Build.SyncSources', + 'System.Debug', + //predefined variables + 'Agent.BuildDirectory', + 'Agent.HomeDirectory', + 'Agent.Id', + 'Agent.MachineName', + 'Agent.Name', + 'Agent.WorkFolder', + 'Build.ArtifactStagingDirectory', + 'Build.BuildId', + 'Build.BuildNumber', + 'Build.BuildUri', + 'Build.BinariesDirectory', + 'Build.DefinitionName', + 'Build.DefinitionVersion', + 'Build.QueuedBy', + 'Build.QueuedById', + 'Build.Repository.Clean', + 'Build.Repository.LocalPath', + 'Build.Repository.Name', + 'Build.Repository.Provider', + 'Build.Repository.Tfvc.Workspace', + 'Build.Repository.Uri', + 'Build.RequestedFor', + 'Build.RequestedForId', + 'Build.SourceBranch', + 'Build.SourceBranchName', + 'Build.SourcesDirectory', + 'Build.SourceVersion', + 'Build.StagingDirectory', + 'Build.Repository.Git.SubmoduleCheckout', + 'Build.SourceTfvcShelveset', + 'Common.TestResultsDirectory', + //'System.AccessToken', -- holding this one back, Jenkins has it's own access mechamisms to TFS + 'System.CollectionId', + 'System.DefaultWorkingDirectory', + 'System.DefinitionId', + 'System.TeamFoundationCollectionUri', + 'System.TeamProject', + 'System.TeamProjectId', + 'TF_BUILD' +]; diff --git a/_generated/MSBuildV1.versionmap.txt b/_generated/MSBuildV1.versionmap.txt new file mode 100644 index 000000000000..0cc6a72668be --- /dev/null +++ b/_generated/MSBuildV1.versionmap.txt @@ -0,0 +1,2 @@ +Default|1.229.3 +Node20-225|1.229.4 diff --git a/_generated/MSBuildV1/MSBuild.ps1 b/_generated/MSBuildV1/MSBuild.ps1 new file mode 100644 index 000000000000..adfc6997e1f6 --- /dev/null +++ b/_generated/MSBuildV1/MSBuild.ps1 @@ -0,0 +1,70 @@ +[CmdletBinding()] +param() + +Trace-VstsEnteringInvocation $MyInvocation +$msbuildTelemetry = [PSCustomObject]@{ + MSBuildVersion = "" + MSBuildLocationMethod = "" + Platform = "" + Configuration = "" + MSBuildExecutionTimeSeconds = "" +} + +# Import the helpers. +Import-Module -Name "$PSScriptRoot\node_modules\azure-pipelines-tasks-msbuildhelpers\MSBuildHelpers.psm1" + +try { + Import-VstsLocStrings "$PSScriptRoot\Task.json" + + # Get task variables. + [bool]$debug = Get-VstsTaskVariable -Name System.Debug -AsBool + + # Get the inputs. + [string]$msBuildLocationMethod = Get-VstsInput -Name MSBuildLocationMethod + [string]$msBuildLocation = Get-VstsInput -Name MSBuildLocation + [string]$msBuildArguments = Get-VstsInput -Name MSBuildArguments + [string]$solution = Get-VstsInput -Name Solution -Require + [string]$platform = Get-VstsInput -Name Platform + [string]$configuration = Get-VstsInput -Name Configuration + [bool]$clean = Get-VstsInput -Name Clean -AsBool + [bool]$maximumCpuCount = Get-VstsInput -Name MaximumCpuCount -AsBool + [bool]$restoreNuGetPackages = Get-VstsInput -Name RestoreNuGetPackages -AsBool + [bool]$logProjectEvents = Get-VstsInput -Name LogProjectEvents -AsBool + [bool]$createLogFile = (Get-VstsInput -Name CreateLogFile -AsBool) + [string]$logFileVerbosity = if ($debug) { "diagnostic" } else { Get-VstsInput -Name LogFileVerbosity } + [string]$msBuildVersion = Get-VstsInput -Name MSBuildVersion + [string]$msBuildArchitecture = Get-VstsInput -Name MSBuildArchitecture + + $msbuildTelemetry.MSBuildVersion = "$msBuildVersion" + $msbuildTelemetry.MSBuildLocationMethod = "$msBuildLocationMethod" + $msbuildTelemetry.Platform = "$platform" + $msbuildTelemetry.Configuration = "$configuration" + + # Resolve match patterns. + $solutionFiles = Get-SolutionFiles -Solution $solution + + # Format the MSBuild args. + $msBuildArguments = Format-MSBuildArguments -MSBuildArguments $msBuildArguments -Platform $platform -Configuration $configuration -MaximumCpuCount:$maximumCpuCount + + # Resolve the MSBuild location. + $msBuildLocation = Select-MSBuildPath -Method $msBuildLocationMethod -Location $msBuildLocation -PreferredVersion $msBuildVersion -Architecture $msBuildArchitecture + + # Change the error action preference to 'Continue' so that each solution will build even if + # one fails. Since the error action preference is being changed from 'Stop' (the default for + # PowerShell3 handler) to 'Continue', errors will no longer be terminating and "Write-VstsSetResult" + # needs to explicitly be called to fail the task. Invoke-BuildTools handles calling + # "Write-VstsSetResult" on nuget.exe/msbuild.exe failure. + $global:ErrorActionPreference = 'Continue' + + # Build each solution. + $stopwatch = New-Object System.Diagnostics.Stopwatch + $stopwatch.Start() + + Invoke-BuildTools -NuGetRestore:$restoreNuGetPackages -SolutionFiles $solutionFiles -MSBuildLocation $msBuildLocation -MSBuildArguments $msBuildArguments -Clean:$clean -NoTimelineLogger:(!$logProjectEvents) -CreateLogFile:$createLogFile -LogFileVerbosity:$logFileVerbosity + + $stopwatch.Stop() + $msbuildTelemetry.MSBuildExecutionTimeSeconds = $stopwatch.ElapsedMilliseconds / 1000 +} finally { + EmitTelemetry -TelemetryPayload $msbuildTelemetry -TaskName "MSBuildV1" + Trace-VstsLeavingInvocation $MyInvocation +} diff --git a/_generated/MSBuildV1/Strings/resources.resjson/de-DE/resources.resjson b/_generated/MSBuildV1/Strings/resources.resjson/de-DE/resources.resjson new file mode 100644 index 000000000000..7b00de0127e1 --- /dev/null +++ b/_generated/MSBuildV1/Strings/resources.resjson/de-DE/resources.resjson @@ -0,0 +1,35 @@ +{ + "loc.friendlyName": "MSBuild", + "loc.helpMarkDown": "[Weitere Informationen zu dieser Aufgabe](https://go.microsoft.com/fwlink/?LinkID=613724)", + "loc.description": "Führt Buildvorgänge mit MSBuild aus.", + "loc.instanceNameFormat": "Projektmappe $(solution) erstellen", + "loc.group.displayName.advanced": "Erweitert", + "loc.input.label.solution": "Projekt", + "loc.input.help.solution": "Der relative Pfad vom Repositorystamm der auszuführenden Projekte oder Lösungen. Es können Platzhalter verwendet werden. Beispiel: \"**\\*.csproj\" für alle CSPROJ-Dateien in allen Unterordnern.", + "loc.input.label.msbuildLocationMethod": "MSBuild", + "loc.input.label.msbuildVersion": "MSBuild-Version", + "loc.input.help.msbuildVersion": "Wenn die bevorzugte Version nicht gefunden werden kann, wird stattdessen die neueste gefundene Version verwendet. Auf einem macOS-Agent wird \"xbuild (Mono)\" verwendet, wenn die Version niedriger ist als 15.0.", + "loc.input.label.msbuildArchitecture": "MSBuild-Architektur", + "loc.input.help.msbuildArchitecture": "Geben Sie optional die auszuführende MSBuild-Architektur an (x86, x64).", + "loc.input.label.msbuildLocation": "Pfad zu MSBuild", + "loc.input.help.msbuildLocation": "Geben Sie optional den Pfad zu MSBuild an.", + "loc.input.label.platform": "Plattform", + "loc.input.label.configuration": "Konfiguration", + "loc.input.label.msbuildArguments": "MSBuild-Argumente", + "loc.input.help.msbuildArguments": "Zusätzliche Argumente, die an MSBuild (unter Windows) und xbuild (unter macOS) übergeben werden.", + "loc.input.label.clean": "Bereinigen", + "loc.input.help.clean": "Führt einen bereinigten Build (\"/t:clean\") vor dem Build aus.", + "loc.input.label.maximumCpuCount": "Parallel erstellen", + "loc.input.help.maximumCpuCount": "Wenn die MSBuild-Zielkonfiguration mit parallelem Erstellen kompatibel ist, können Sie optional diese Option aktivieren, um das Kennzeichen \"/m\" an MSBuild zu übergeben (nur Windows). Wenn die Zielkonfiguration nicht mit parallelem Erstellen kompatibel ist, kann das Aktivieren dieser Option bewirken, dass der Build Fehler des Typs \"Datei in Gebrauch\" oder zeitweilige oder inkonsistente Buildfehler aufweist.", + "loc.input.label.restoreNugetPackages": "NuGet-Pakete wiederherstellen", + "loc.input.help.restoreNugetPackages": "Diese Option ist veraltet. Um NuGet-Pakete wiederherzustellen, fügen Sie vor der Builderstellung eine [NuGet](https://docs.microsoft.com/azure/devops/pipelines/tasks/package/nuget)-Aufgabe hinzu.", + "loc.input.label.logProjectEvents": "Projektdetails aufzeichnen", + "loc.input.help.logProjectEvents": "Optional Zeitachsendetails für jedes Projekt aufzeichnen (nur Windows).", + "loc.input.label.createLogFile": "Protokolldatei erstellen", + "loc.input.help.createLogFile": "Erstellen Sie optional eine Protokolldatei (nur Windows).", + "loc.input.label.logFileVerbosity": "Ausführlichkeit der Protokolldatei", + "loc.input.help.logFileVerbosity": "Optionaler Ausführlichkeitsgrad der Protokolldatei.", + "loc.messages.RecordProjectDetailsOnlySupportedOnWindows": "\"Projektdetails aufzeichnen\" wird nur für Windows unterstützt.", + "loc.messages.CreateLogFileOnlySupportedOnWindows": "\"Protokolldatei erstellen\" wird nur für Windows unterstützt.", + "loc.messages.MSB_BuildToolNotFound": "MSBuild oder Xbuild (Mono) wurden auf dem MacOS oder Linux-Agent nicht gefunden." +} \ No newline at end of file diff --git a/_generated/MSBuildV1/Strings/resources.resjson/en-US/resources.resjson b/_generated/MSBuildV1/Strings/resources.resjson/en-US/resources.resjson new file mode 100644 index 000000000000..3a70b1428c3f --- /dev/null +++ b/_generated/MSBuildV1/Strings/resources.resjson/en-US/resources.resjson @@ -0,0 +1,35 @@ +{ + "loc.friendlyName": "MSBuild", + "loc.helpMarkDown": "[Learn more about this task](https://go.microsoft.com/fwlink/?LinkID=613724)", + "loc.description": "Build with MSBuild", + "loc.instanceNameFormat": "Build solution $(solution)", + "loc.group.displayName.advanced": "Advanced", + "loc.input.label.solution": "Project", + "loc.input.help.solution": "Relative path from repo root of the project(s) or solution(s) to run. Wildcards can be used. For example, `**/*.csproj` for all csproj files in all sub folders.", + "loc.input.label.msbuildLocationMethod": "MSBuild", + "loc.input.label.msbuildVersion": "MSBuild Version", + "loc.input.help.msbuildVersion": "If the preferred version cannot be found, the latest version found will be used instead. On an macOS agent, xbuild (Mono) will be used if version is lower than 15.0.", + "loc.input.label.msbuildArchitecture": "MSBuild Architecture", + "loc.input.help.msbuildArchitecture": "Optionally supply the architecture (x86, x64) of MSBuild to run.", + "loc.input.label.msbuildLocation": "Path to MSBuild", + "loc.input.help.msbuildLocation": "Optionally supply the path to MSBuild.", + "loc.input.label.platform": "Platform", + "loc.input.label.configuration": "Configuration", + "loc.input.label.msbuildArguments": "MSBuild Arguments", + "loc.input.help.msbuildArguments": "Additional arguments passed to MSBuild (on Windows) and xbuild (on macOS).", + "loc.input.label.clean": "Clean", + "loc.input.help.clean": "Run a clean build (/t:clean) prior to the build.", + "loc.input.label.maximumCpuCount": "Build in Parallel", + "loc.input.help.maximumCpuCount": "If your MSBuild target configuration is compatible with building in parallel, you can optionally check this input to pass the /m switch to MSBuild (Windows only). If your target configuration is not compatible with building in parallel, checking this option may cause your build to result in file-in-use errors, or intermittent or inconsistent build failures.", + "loc.input.label.restoreNugetPackages": "Restore NuGet Packages", + "loc.input.help.restoreNugetPackages": "This option is deprecated. To restore NuGet packages, add a [NuGet](https://docs.microsoft.com/azure/devops/pipelines/tasks/package/nuget) task before the build.", + "loc.input.label.logProjectEvents": "Record Project Details", + "loc.input.help.logProjectEvents": "Optionally record timeline details for each project (Windows only).", + "loc.input.label.createLogFile": "Create Log File", + "loc.input.help.createLogFile": "Optionally create a log file (Windows only).", + "loc.input.label.logFileVerbosity": "Log File Verbosity", + "loc.input.help.logFileVerbosity": "Optional log file verbosity.", + "loc.messages.RecordProjectDetailsOnlySupportedOnWindows": "`Record Project Details` is only supported on Windows.", + "loc.messages.CreateLogFileOnlySupportedOnWindows": "`Create Log File` is only supported on Windows.", + "loc.messages.MSB_BuildToolNotFound": "MSBuild or xbuild (Mono) were not found on the macOS or Linux agent." +} \ No newline at end of file diff --git a/_generated/MSBuildV1/Strings/resources.resjson/es-ES/resources.resjson b/_generated/MSBuildV1/Strings/resources.resjson/es-ES/resources.resjson new file mode 100644 index 000000000000..5b4d2efc74f3 --- /dev/null +++ b/_generated/MSBuildV1/Strings/resources.resjson/es-ES/resources.resjson @@ -0,0 +1,35 @@ +{ + "loc.friendlyName": "MSBuild", + "loc.helpMarkDown": "[Obtener más información acerca de esta tarea](https://go.microsoft.com/fwlink/?LinkID=613724)", + "loc.description": "Compilar con MSBuild", + "loc.instanceNameFormat": "Compilar solución $(solution)", + "loc.group.displayName.advanced": "Avanzado", + "loc.input.label.solution": "Proyecto", + "loc.input.help.solution": "Ruta de acceso relativa de la raíz del repositorio de los proyectos o las soluciones que se van a ejecutar. Se pueden usar caracteres comodín. Por ejemplo, \"**\\*.csproj\" para todos los archivos csproj de todas las subcarpetas.", + "loc.input.label.msbuildLocationMethod": "MSBuild", + "loc.input.label.msbuildVersion": "Versión de MSBuild", + "loc.input.help.msbuildVersion": "Si no se encuentra la versión preferida, se usa la versión más reciente que se encuentre. En un agente de macOS, se usa xbuild (Mono) si la versión es anterior a la 15.0.", + "loc.input.label.msbuildArchitecture": "Arquitectura MSBuild", + "loc.input.help.msbuildArchitecture": "Indique opcionalmente la arquitectura (x86, x64) de MSBuild que se va a ejecutar.", + "loc.input.label.msbuildLocation": "Ruta de acceso de MSBuild", + "loc.input.help.msbuildLocation": "Indique opcionalmente la ruta de acceso a MSBuild.", + "loc.input.label.platform": "Plataforma", + "loc.input.label.configuration": "Configuración", + "loc.input.label.msbuildArguments": "Argumentos de MSBuild", + "loc.input.help.msbuildArguments": "Argumentos adicionales pasados a MSBuild (en Windows) y xbuild (en macOS).", + "loc.input.label.clean": "Limpiar", + "loc.input.help.clean": "Ejecute una compilación limpia (/t:clean) antes de realizar la compilación.", + "loc.input.label.maximumCpuCount": "Compilar en paralelo", + "loc.input.help.maximumCpuCount": "Si la configuración de destino de MSBuild es compatible con la compilación en paralelo, puede activar esta entrada para pasar el modificador /m a MSBuild (solo en Windows). Si la configuración de destino no es compatible con la compilación en paralelo y activa esta opción, la compilación puede generar errores de archivo en uso o de compilación intermitente o incoherente.", + "loc.input.label.restoreNugetPackages": "Restaurar paquetes NuGet", + "loc.input.help.restoreNugetPackages": "Esta opción está en desuso. Para restaurar paquetes NuGet, agregue una tarea de [NuGet](https://docs.microsoft.com/azure/devops/pipelines/tasks/package/nuget) antes de la compilación.", + "loc.input.label.logProjectEvents": "Registrar detalles del proyecto", + "loc.input.help.logProjectEvents": "De manera opcional, se registran los detalles de la escala de tiempo de cada proyecto (solo Windows).", + "loc.input.label.createLogFile": "Crear archivo de registro", + "loc.input.help.createLogFile": "Si quiere, puede crear un archivo de registro (solo en Windows).", + "loc.input.label.logFileVerbosity": "Nivel de detalle del archivo de registro", + "loc.input.help.logFileVerbosity": "Nivel de detalle del archivo de registro opcional.", + "loc.messages.RecordProjectDetailsOnlySupportedOnWindows": "\"Registrar detalles del proyecto\" solo se admite en Windows.", + "loc.messages.CreateLogFileOnlySupportedOnWindows": "\"Crear archivo de registro\" solo se admite en Windows.", + "loc.messages.MSB_BuildToolNotFound": "No se ha encontrado MSBuild o xbuild (Mono) en el agente de macOS o Linux." +} \ No newline at end of file diff --git a/_generated/MSBuildV1/Strings/resources.resjson/fr-FR/resources.resjson b/_generated/MSBuildV1/Strings/resources.resjson/fr-FR/resources.resjson new file mode 100644 index 000000000000..1e9bc09b00d5 --- /dev/null +++ b/_generated/MSBuildV1/Strings/resources.resjson/fr-FR/resources.resjson @@ -0,0 +1,35 @@ +{ + "loc.friendlyName": "MSBuild", + "loc.helpMarkDown": "[En savoir plus sur cette tâche](https://go.microsoft.com/fwlink/?LinkID=613724)", + "loc.description": "Générer avec MSBuild", + "loc.instanceNameFormat": "Générer la solution $(solution)", + "loc.group.displayName.advanced": "Avancé", + "loc.input.label.solution": "Projet", + "loc.input.help.solution": "Chemin relatif de la racine de dépôt des projets ou solutions à exécuter. Les caractères génériques sont autorisés. Par exemple, '**\\*.csproj' correspond à tous les fichiers csproj dans tous les sous-dossiers.", + "loc.input.label.msbuildLocationMethod": "MSBuild", + "loc.input.label.msbuildVersion": "Version de MSBuild", + "loc.input.help.msbuildVersion": "Si la version par défaut est introuvable, la dernière version trouvée est utilisée à la place. Sur un agent macOS, xbuild (Mono) est utilisé si la version est inférieure à la version 15.0.", + "loc.input.label.msbuildArchitecture": "Architecture MSBuild", + "loc.input.help.msbuildArchitecture": "Indiquez éventuellement l'architecture (x86, x64) de MSBuild à exécuter.", + "loc.input.label.msbuildLocation": "Chemin d'accès de MSBuild", + "loc.input.help.msbuildLocation": "Indiquez éventuellement le chemin d'accès à MSBuild.", + "loc.input.label.platform": "Plateforme", + "loc.input.label.configuration": "Configuration", + "loc.input.label.msbuildArguments": "Arguments MSBuild", + "loc.input.help.msbuildArguments": "Arguments supplémentaires passés à MSBuild (sur Windows) et xbuild (sur macOS).", + "loc.input.label.clean": "Nettoyer", + "loc.input.help.clean": "Exécutez un nettoyage de build (/t:clean) avant d'effectuer la génération.", + "loc.input.label.maximumCpuCount": "Build en parallèle", + "loc.input.help.maximumCpuCount": "Si votre configuration cible MSBuild est compatible avec la génération en parallèle, vous pouvez éventuellement cocher cette option pour passer le commutateur /m à MSBuild (Windows uniquement). Si votre configuration cible n'est pas compatible avec la génération en parallèle, l'activation de cette option risque d'entraîner des erreurs de type fichier en cours d'utilisation, ou bien des échecs de build intermittents ou incohérents.", + "loc.input.label.restoreNugetPackages": "Restaurer des packages NuGet", + "loc.input.help.restoreNugetPackages": "Cette option est dépréciée. Pour restaurer des packages NuGet, ajoutez une tâche [NuGet](https://docs.microsoft.com/azure/devops/pipelines/tasks/package/nuget) avant la build.", + "loc.input.label.logProjectEvents": "Enregistrer les détails du projet", + "loc.input.help.logProjectEvents": "Enregistrez éventuellement les détails de la chronologie de chaque projet (Windows uniquement).", + "loc.input.label.createLogFile": "Créer le fichier journal", + "loc.input.help.createLogFile": "Créez éventuellement un fichier journal (Windows uniquement).", + "loc.input.label.logFileVerbosity": "Verbosité du fichier journal", + "loc.input.help.logFileVerbosity": "Verbosité facultative du fichier journal.", + "loc.messages.RecordProjectDetailsOnlySupportedOnWindows": "'Enregistrer les détails du projet' est uniquement pris en charge sur Windows.", + "loc.messages.CreateLogFileOnlySupportedOnWindows": "'Créer le fichier journal' est uniquement pris en charge sur Windows.", + "loc.messages.MSB_BuildToolNotFound": "MSBuild ou xbuild (Mono) sont introuvables sur l'agent macOS ou Linux." +} \ No newline at end of file diff --git a/_generated/MSBuildV1/Strings/resources.resjson/it-IT/resources.resjson b/_generated/MSBuildV1/Strings/resources.resjson/it-IT/resources.resjson new file mode 100644 index 000000000000..d9000d5c394a --- /dev/null +++ b/_generated/MSBuildV1/Strings/resources.resjson/it-IT/resources.resjson @@ -0,0 +1,35 @@ +{ + "loc.friendlyName": "MSBuild", + "loc.helpMarkDown": "[Altre informazioni su questa attività](https://go.microsoft.com/fwlink/?LinkID=613724)", + "loc.description": "Consente di compilare con MSBuild", + "loc.instanceNameFormat": "Compila la soluzione $(solution)", + "loc.group.displayName.advanced": "Avanzate", + "loc.input.label.solution": "Progetto", + "loc.input.help.solution": "Percorso relativo dalla radice del repository dei progetti o delle soluzioni da eseguire. È possibile usare i caratteri jolly, ad esempio `**/*.csproj` per indicare tutti i file csproj in tutte le sottocartelle.", + "loc.input.label.msbuildLocationMethod": "MSBuild", + "loc.input.label.msbuildVersion": "Versione MSBuild", + "loc.input.help.msbuildVersion": "Se non viene trovata la versione preferita, verrà usata quella più recente. In un agente macOS verrà usato xbuild (Mono) se la versione è inferiore alla 15.0.", + "loc.input.label.msbuildArchitecture": "Architettura MSBuild", + "loc.input.help.msbuildArchitecture": "Consente, facoltativamente, di specificare l'architettura (x86, x64) di MSBuild da eseguire.", + "loc.input.label.msbuildLocation": "Percorso di MSBuild", + "loc.input.help.msbuildLocation": "Consente, facoltativamente, di specificare il percorso di MSBuild.", + "loc.input.label.platform": "Piattaforma", + "loc.input.label.configuration": "Configurazione", + "loc.input.label.msbuildArguments": "Argomenti MSBuild", + "loc.input.help.msbuildArguments": "Argomenti aggiuntivi passati a MSBuild (in Windows) e xbuild (in MacOS).", + "loc.input.label.clean": "Pulisci", + "loc.input.help.clean": "Esegue una compilazione pulita (/t:clean) prima della compilazione.", + "loc.input.label.maximumCpuCount": "Compilazione in parallelo", + "loc.input.help.maximumCpuCount": "Se la configurazione di destinazione di MSBuild è compatibile con la compilazione in parallelo, è possibile selezionare facoltativamente questa opzione di input per passare l'opzione /m a MSBuild (solo Windows). Se la configurazione di destinazione non è compatibile con la compilazione in parallelo, selezionando questa opzione durante la compilazione potrebbero verificarsi errori di file in uso oppure errori di compilazioni intermittenti o incoerenti.", + "loc.input.label.restoreNugetPackages": "Ripristina pacchetti NuGet", + "loc.input.help.restoreNugetPackages": "Questa opzione è deprecata. Per ripristinare pacchetti NuGet, aggiungere un'attività [NuGet](https://docs.microsoft.com/azure/devops/pipelines/tasks/package/nuget) prima della compilazione.", + "loc.input.label.logProjectEvents": "Registra dettagli progetto", + "loc.input.help.logProjectEvents": "Registra facoltativamente i dettagli della sequenza temporale per ogni progetto (solo Windows).", + "loc.input.label.createLogFile": "Crea file di log", + "loc.input.help.createLogFile": "Consente facoltativamente di creare un file di log (solo Windows).", + "loc.input.label.logFileVerbosity": "Livello di dettaglio file di log", + "loc.input.help.logFileVerbosity": "Livello di dettaglio facoltativo del file di log.", + "loc.messages.RecordProjectDetailsOnlySupportedOnWindows": "L'opzione `Registra dettagli progetto` è supportata solo in Windows.", + "loc.messages.CreateLogFileOnlySupportedOnWindows": "L'opzione `Crea file di log` è supportata solo in Windows.", + "loc.messages.MSB_BuildToolNotFound": "MSBuild o xbuild (Mono) non è stato trovato nell'agente MacOS o Linux." +} \ No newline at end of file diff --git a/_generated/MSBuildV1/Strings/resources.resjson/ja-JP/resources.resjson b/_generated/MSBuildV1/Strings/resources.resjson/ja-JP/resources.resjson new file mode 100644 index 000000000000..0c7adafc7bb3 --- /dev/null +++ b/_generated/MSBuildV1/Strings/resources.resjson/ja-JP/resources.resjson @@ -0,0 +1,35 @@ +{ + "loc.friendlyName": "MSBuild", + "loc.helpMarkDown": "[このタスクの詳細を表示](https://go.microsoft.com/fwlink/?LinkID=613724)", + "loc.description": "MSBuild で作成する", + "loc.instanceNameFormat": "ソリューション $(solution) のビルド", + "loc.group.displayName.advanced": "詳細設定", + "loc.input.label.solution": "プロジェクト", + "loc.input.help.solution": "リポジトリのルートを基準に指定する、実行するプロジェクトまたはソリューションの相対パス。ワイルドカードを使用できます。たとえば、全サブフォルダー内のすべての csproj ファイルの場合は `**/*.csproj` です。", + "loc.input.label.msbuildLocationMethod": "MSBuild", + "loc.input.label.msbuildVersion": "MSBuild のバージョン", + "loc.input.help.msbuildVersion": "優先するバージョンが見つからない場合は、見つかった最新のバージョンが代わりに使用されます。macOS エージェントでは、バージョンが 15.0 より前の場合は xbuild (Mono) が使用されます。", + "loc.input.label.msbuildArchitecture": "MSBuild アーキテクチャ", + "loc.input.help.msbuildArchitecture": "必要に応じて、実行する MSBuild のアーキテクチャ (x86、x64) を指定します。", + "loc.input.label.msbuildLocation": "MSBuild へのパス", + "loc.input.help.msbuildLocation": "(省略可能) MSBuild へのパスを指定します。", + "loc.input.label.platform": "プラットフォーム", + "loc.input.label.configuration": "構成", + "loc.input.label.msbuildArguments": "MSBuild 引数", + "loc.input.help.msbuildArguments": "MSBuild (Windows) と xbuild (macOS) に渡す追加の引数。", + "loc.input.label.clean": "消去", + "loc.input.help.clean": "ビルドの前に、クリーン ビルド (/t:clean) を実行します。", + "loc.input.label.maximumCpuCount": "並列ビルド", + "loc.input.help.maximumCpuCount": "MSBuild ターゲット構成が並列ビルドと互換性がある場合、この入力を任意にチェックし、/m スイッチを MSBuild に渡すことができます (Windows のみ)。ターゲット構成が並列ビルドと互換性がない場合、このオプションをオンにすると、ビルドに \"ファイル使用中\" エラーが発生するか、ビルドの断続的エラーまたは不整合エラーになることがあります。", + "loc.input.label.restoreNugetPackages": "NuGet パッケージの復元", + "loc.input.help.restoreNugetPackages": "このオプションは非推奨です。NuGet パッケージを復元するには、ビルドの前に [NuGet](https://docs.microsoft.com/azure/devops/pipelines/tasks/package/nuget) タスクを追加します。", + "loc.input.label.logProjectEvents": "プロジェクトの詳細の記録", + "loc.input.help.logProjectEvents": "オプションで、各プロジェクトのタイムライン詳細を記録します (Windows のみ)。", + "loc.input.label.createLogFile": "ログ ファイルを作成する", + "loc.input.help.createLogFile": "必要に応じて、ログ ファイルを作成します (Windows のみ)。", + "loc.input.label.logFileVerbosity": "ログ ファイルの詳細度", + "loc.input.help.logFileVerbosity": "オプションのログ ファイルの詳細度。", + "loc.messages.RecordProjectDetailsOnlySupportedOnWindows": "`プロジェクトの詳細の記録` は Windows でのみサポートされています。", + "loc.messages.CreateLogFileOnlySupportedOnWindows": "`ログ ファイルを作成する` は Windows でのみサポートされます。", + "loc.messages.MSB_BuildToolNotFound": "MSBuild または xbuild (Mono) が macOS または Linux エージェントに見つかりませんでした。" +} \ No newline at end of file diff --git a/_generated/MSBuildV1/Strings/resources.resjson/ko-KR/resources.resjson b/_generated/MSBuildV1/Strings/resources.resjson/ko-KR/resources.resjson new file mode 100644 index 000000000000..31948e9ca540 --- /dev/null +++ b/_generated/MSBuildV1/Strings/resources.resjson/ko-KR/resources.resjson @@ -0,0 +1,35 @@ +{ + "loc.friendlyName": "MSBuild", + "loc.helpMarkDown": "[이 작업에 대한 자세한 정보](https://go.microsoft.com/fwlink/?LinkID=613724)", + "loc.description": "MSBuild로 빌드", + "loc.instanceNameFormat": "솔루션 $(solution) 빌드", + "loc.group.displayName.advanced": "고급", + "loc.input.label.solution": "프로젝트", + "loc.input.help.solution": "실행할 프로젝트 또는 솔루션의 리포 루트로부터의 상대 경로입니다. 와일드카드를 사용할 수 있습니다. 예를 들어, 모든 하위 폴더에 있는 모든 csproj 파일을 표시하기 위해 `**/*.csproj`를 사용할 수 있습니다.", + "loc.input.label.msbuildLocationMethod": "MSBuild", + "loc.input.label.msbuildVersion": "MSBuild 버전", + "loc.input.help.msbuildVersion": "기본 설정 버전을 찾을 수 없는 경우 발견된 최신 버전이 대신 사용됩니다. macOS 에이전트에서는 버전이 15.0 미만인 경우 xbuild(Mono)가 사용됩니다.", + "loc.input.label.msbuildArchitecture": "MSBuild 아키텍처", + "loc.input.help.msbuildArchitecture": "원하는 경우 실행할 MSBuild의 아키텍처(x86, x64)를 제공하세요.", + "loc.input.label.msbuildLocation": "MSBuild 경로", + "loc.input.help.msbuildLocation": "원하는 경우 MSBuild의 경로를 제공하세요.", + "loc.input.label.platform": "플랫폼", + "loc.input.label.configuration": "구성", + "loc.input.label.msbuildArguments": "MSBuild 인수", + "loc.input.help.msbuildArguments": "추가 인수가 MSBuild(Windows) 및 xbuild(macOS)에 전달되었습니다.", + "loc.input.label.clean": "클린", + "loc.input.help.clean": "빌드에 앞서 클린 빌드(/t:clean)를 실행합니다.", + "loc.input.label.maximumCpuCount": "병렬 빌드", + "loc.input.help.maximumCpuCount": "MSBuild 대상 구성이 병렬 빌드 작업과 호환되는 경우 선택적으로 이 입력을 선택하여 /m 스위치를 MSBuild로 전달할 수 있습니다(Windows만 해당). 대상 구성이 병렬 빌드 작업과 호환되지 않는 경우 이 옵션을 선택하면 빌드에서 파일 사용 중 오류 또는 일시적이거나 일관되지 않은 빌드 오류가 발생할 수 있습니다.", + "loc.input.label.restoreNugetPackages": "NuGet 패키지 복원", + "loc.input.help.restoreNugetPackages": "이 옵션은 사용되지 않습니다. NuGet 패키지를 복원하려면 빌드 앞에 [NuGet](https://docs.microsoft.com/azure/devops/pipelines/tasks/package/nuget) 작업을 추가하세요.", + "loc.input.label.logProjectEvents": "프로젝트 정보 기록", + "loc.input.help.logProjectEvents": "원하는 경우 각 프로젝트의 타임라인 세부 정보를 기록합니다(Windows만 해당).", + "loc.input.label.createLogFile": "로그 파일 만들기", + "loc.input.help.createLogFile": "선택적으로 로그 파일을 만드세요(Windows만 해당).", + "loc.input.label.logFileVerbosity": "로그 파일의 세부 정보 표시", + "loc.input.help.logFileVerbosity": "선택 사항으로, 로그 파일의 세부 정보 표시입니다.", + "loc.messages.RecordProjectDetailsOnlySupportedOnWindows": "`프로젝트 세부 정보 기록`은 Windows에서만 지원됩니다.", + "loc.messages.CreateLogFileOnlySupportedOnWindows": "`로그 파일 만들기`는 Windows에서만 지원됩니다.", + "loc.messages.MSB_BuildToolNotFound": "macOS 또는 Linux 에이전트에서 MSBuild 또는 xbuild(Mono)를 찾을 수 없습니다." +} \ No newline at end of file diff --git a/_generated/MSBuildV1/Strings/resources.resjson/ru-RU/resources.resjson b/_generated/MSBuildV1/Strings/resources.resjson/ru-RU/resources.resjson new file mode 100644 index 000000000000..b0873dcd7f18 --- /dev/null +++ b/_generated/MSBuildV1/Strings/resources.resjson/ru-RU/resources.resjson @@ -0,0 +1,35 @@ +{ + "loc.friendlyName": "MSBuild", + "loc.helpMarkDown": "[См. дополнительные сведения об этой задаче](https://go.microsoft.com/fwlink/?LinkID=613724)", + "loc.description": "Сборка с помощью MSBuild", + "loc.instanceNameFormat": "Сборка решения $(solution)", + "loc.group.displayName.advanced": "Дополнительно", + "loc.input.label.solution": "Проект", + "loc.input.help.solution": "Относительный путь от корня репозитория запускаемых проектов или решений. Можно использовать подстановочные знаки. Пример: \"**/*.csproj\" для всех CSPROJ-файлов во всех вложенных папках.", + "loc.input.label.msbuildLocationMethod": "MSBuild", + "loc.input.label.msbuildVersion": "Версия MSBuild", + "loc.input.help.msbuildVersion": "Если не удастся найти предпочтительную версию, будет использоваться последняя найденная версия. В агенте macOS будет использоваться xbuild (Mono) (если версия ниже, чем 15.0).", + "loc.input.label.msbuildArchitecture": "Архитектура MSBuild", + "loc.input.help.msbuildArchitecture": "При необходимости укажите архитектуру используемого средства MSBuild (x86, x64).", + "loc.input.label.msbuildLocation": "Путь к MSBuild", + "loc.input.help.msbuildLocation": "При необходимости укажите путь к MSBuild.", + "loc.input.label.platform": "Платформа", + "loc.input.label.configuration": "Конфигурация", + "loc.input.label.msbuildArguments": "Аргументы MSBuild", + "loc.input.help.msbuildArguments": "Дополнительные аргументы, передаваемые в MSBuild (в Windows) и xbuild (в macOS).", + "loc.input.label.clean": "Очистить", + "loc.input.help.clean": "Выполните очистку сборки (/t:clean) перед сборкой.", + "loc.input.label.maximumCpuCount": "Параллельная сборка", + "loc.input.help.maximumCpuCount": "Если целевая конфигурация MSBuild совместима с параллельной сборкой, при необходимости можно установить этот флажок для передачи параметра /m в MSBuild (только для Windows). Если целевая конфигурация несовместима с параллельной сборкой, выбор этого варианта может привести к возникновению ошибок \"Файл занят\" в сборке, а также к периодическим или противоречивым сбоям сборки.", + "loc.input.label.restoreNugetPackages": "Восстановить пакеты NuGet", + "loc.input.help.restoreNugetPackages": "Этот параметр является нерекомендуемым. Чтобы восстановить пакеты NuGet, добавьте задачу [NuGet](https://docs.microsoft.com/azure/devops/pipelines/tasks/package/nuget) перед сборкой.", + "loc.input.label.logProjectEvents": "Записать сведения о проекте", + "loc.input.help.logProjectEvents": "Запись данных о хронологии для каждого проекта (необязательно, только для Windows).", + "loc.input.label.createLogFile": "Создать файл журнала", + "loc.input.help.createLogFile": "При необходимости создайте файл журнала (только в Windows).", + "loc.input.label.logFileVerbosity": "Детализация файла журнала", + "loc.input.help.logFileVerbosity": "Необязательный параметр детализации файла журнала.", + "loc.messages.RecordProjectDetailsOnlySupportedOnWindows": "Команда \"Записать сведения о проекте\" поддерживается только в Windows.", + "loc.messages.CreateLogFileOnlySupportedOnWindows": "Команда \"Создать файл журнала\" поддерживается только в Windows.", + "loc.messages.MSB_BuildToolNotFound": "В агенте macOS или Linux не удалось найти MSBuild или xbuild (Mono)." +} \ No newline at end of file diff --git a/_generated/MSBuildV1/Strings/resources.resjson/zh-CN/resources.resjson b/_generated/MSBuildV1/Strings/resources.resjson/zh-CN/resources.resjson new file mode 100644 index 000000000000..6e9df6317907 --- /dev/null +++ b/_generated/MSBuildV1/Strings/resources.resjson/zh-CN/resources.resjson @@ -0,0 +1,35 @@ +{ + "loc.friendlyName": "MSBuild", + "loc.helpMarkDown": "[详细了解此任务](https://go.microsoft.com/fwlink/?LinkID=613724)", + "loc.description": "使用 MSBuild 生成", + "loc.instanceNameFormat": "生成解决方案 $(solution)", + "loc.group.displayName.advanced": "高级", + "loc.input.label.solution": "项目", + "loc.input.help.solution": "要运行的项目或解决方案的存储库根路径的相对路径。可以使用通配符。例如,\"**\\*.csproj\" 表示所有子文件夹中的所有 csproj 文件。", + "loc.input.label.msbuildLocationMethod": "MSBuild", + "loc.input.label.msbuildVersion": "MSBuild 版本", + "loc.input.help.msbuildVersion": "如果找不到首选版本,将改为使用找到的最新版本。在 macOS 代理上,如果版本低于 15.0,则将使用 xbuild (Mono)。", + "loc.input.label.msbuildArchitecture": "MSBuild 体系结构", + "loc.input.help.msbuildArchitecture": "可以选择提供 MSBuild 的体系结构(x86、x64)进行运行。", + "loc.input.label.msbuildLocation": "MSBuild 的路径", + "loc.input.help.msbuildLocation": "可以选择提供 MSBuild 的路径。", + "loc.input.label.platform": "平台", + "loc.input.label.configuration": "配置", + "loc.input.label.msbuildArguments": "MSBuild 参数", + "loc.input.help.msbuildArguments": "传递给 MSBuild (Windows 上)和 xbuild (Mac 上)的其他参数。", + "loc.input.label.clean": "清理", + "loc.input.help.clean": "在生成前运行清理生成(/t:clean)。", + "loc.input.label.maximumCpuCount": "并行生成", + "loc.input.help.maximumCpuCount": "如果 MSBuild 目标配置与并行生成兼容,可以选择此输入,将 /m 开关传递给 MSBuild (仅限 Windows)。如果目标配置与并行生成不兼容,选中此选项可能会导致你的生成出现“文件正在使用”错误,或出现间歇性或不一致的生成错误。", + "loc.input.label.restoreNugetPackages": "还原 NuGet 包", + "loc.input.help.restoreNugetPackages": "已弃用此选项。若要恢复 NuGet 包,请在生成之前添加[NuGet](https://docs.microsoft.com/azure/devops/pipelines/tasks/package/nuget)任务。", + "loc.input.label.logProjectEvents": "记录项目详情", + "loc.input.help.logProjectEvents": "可以选择记录每个项目的时间线详细信息(仅 Windows)。", + "loc.input.label.createLogFile": "创建日志文件", + "loc.input.help.createLogFile": "选择创建一个日志文件(仅限 Windows)。", + "loc.input.label.logFileVerbosity": "日志文件详细程度", + "loc.input.help.logFileVerbosity": "可选日志文件详细程度。", + "loc.messages.RecordProjectDetailsOnlySupportedOnWindows": "仅在 Windows 上支持“记录项目详细信息”。", + "loc.messages.CreateLogFileOnlySupportedOnWindows": "仅在 Windows 上支持“创建日志文件”。", + "loc.messages.MSB_BuildToolNotFound": "macOS 或 Linux 代理上找不到 MSBuild 或 xbuild (Mono)。" +} \ No newline at end of file diff --git a/_generated/MSBuildV1/Strings/resources.resjson/zh-TW/resources.resjson b/_generated/MSBuildV1/Strings/resources.resjson/zh-TW/resources.resjson new file mode 100644 index 000000000000..2140ffcff543 --- /dev/null +++ b/_generated/MSBuildV1/Strings/resources.resjson/zh-TW/resources.resjson @@ -0,0 +1,35 @@ +{ + "loc.friendlyName": "MSBuild", + "loc.helpMarkDown": "[深入了解此工作](https://go.microsoft.com/fwlink/?LinkID=613724)", + "loc.description": "使用 MSBuild 建置", + "loc.instanceNameFormat": "建置方案 $(solution)", + "loc.group.displayName.advanced": "進階", + "loc.input.label.solution": "專案", + "loc.input.help.solution": "要執行之專案或解決方案存放庫根路徑的相對路徑。可使用萬用字元。例如,`**/*.csproj` 即適用於所有子資料夾中的所有 csproj 檔。", + "loc.input.label.msbuildLocationMethod": "MSBuild", + "loc.input.label.msbuildVersion": "MSBuild 版本", + "loc.input.help.msbuildVersion": "若找不到所需的版本,將會改用所能找到的最新版本。在 MacOS 代理程式上,若版本低於 15.0,將會使用 xbuild (Mono)。", + "loc.input.label.msbuildArchitecture": "MSBuild 架構", + "loc.input.help.msbuildArchitecture": "選擇性地提供 MSBuild 的架構 (x86、x64) 以執行。", + "loc.input.label.msbuildLocation": "MSBuild 的路徑", + "loc.input.help.msbuildLocation": "選擇性地提供 MSBuild 的路徑。", + "loc.input.label.platform": "平台", + "loc.input.label.configuration": "組態", + "loc.input.label.msbuildArguments": "MSBuild 引數", + "loc.input.help.msbuildArguments": "傳遞給 MSBuild (Windows) 及 xbuild (MacOS) 的其他引數。", + "loc.input.label.clean": "清除", + "loc.input.help.clean": "在組建之前執行乾淨的組建 (/t:clean)。", + "loc.input.label.maximumCpuCount": "以平行方式建置", + "loc.input.help.maximumCpuCount": "如果您的 MSBuild 目標組態與平行建置相容,您就可以選擇選取此輸入,以將 /m 參數傳遞至 MSBuild (僅限 Windows)。如果您的目標組態與平行建置不相容,選取此選項可能會導致您的組建產生檔案使用中的錯誤,或組建間歇或不一致的失敗。", + "loc.input.label.restoreNugetPackages": "還原 NuGet 套件", + "loc.input.help.restoreNugetPackages": "此選項已淘汰,若要還原 NuGet 套件,請先新增 [NuGet](https://docs.microsoft.com/azure/devops/pipelines/tasks/package/nuget) 工作再建置。", + "loc.input.label.logProjectEvents": "記錄專案詳細資料", + "loc.input.help.logProjectEvents": "選擇性地記錄各專案的時間軸詳細資料 (僅 Windows)。", + "loc.input.label.createLogFile": "建立記錄檔", + "loc.input.help.createLogFile": "選擇性地建立記錄檔 (僅限 Windows)。", + "loc.input.label.logFileVerbosity": "記錄檔詳細程度", + "loc.input.help.logFileVerbosity": "選擇性記錄檔詳細程度。", + "loc.messages.RecordProjectDetailsOnlySupportedOnWindows": "只有 Windows 才支援 [記錄專案詳細資料]。", + "loc.messages.CreateLogFileOnlySupportedOnWindows": "只有 Windows 才支援 [建立記錄檔]。", + "loc.messages.MSB_BuildToolNotFound": "在 macOS 或 Linux 代理程式上找不到 MSBuild 或 xbuild (Mono)。" +} \ No newline at end of file diff --git a/_generated/MSBuildV1/Tests/L0.ts b/_generated/MSBuildV1/Tests/L0.ts new file mode 100644 index 000000000000..0aa6056909fe --- /dev/null +++ b/_generated/MSBuildV1/Tests/L0.ts @@ -0,0 +1,100 @@ +import assert = require('assert'); +import path = require('path'); +import * as ttm from 'azure-pipelines-task-lib/mock-test'; +var psm = require('../../../Tests/lib/psRunner'); +var psr = null; + +describe('MSBuild Suite', function () { + this.timeout(parseInt(process.env.TASK_TEST_TIMEOUT) || 20000); + before((done: Mocha.Done) => { + if (psm.testSupported()) { + psr = new psm.PSRunner(); + psr.start(); + } + + done(); + }); + + after(function () { + if (psr) { + psr.kill(); + } + }); + + if (psm.testSupported()) { + it('passes arguments', (done: Mocha.Done) => { + psr.run(path.join(__dirname, 'PassesArguments.ps1'), done); + }) + } + + it('Xplat MSBuild: Defaults', (done: Mocha.Done) => { + this.timeout(1000); + + let tp: string = path.join(__dirname, 'L0MSBuildDefaults.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + //build + assert(tr.ran('/home/bin/xbuild /user/build/fun.sln /p:Platform=$(Platform) /p:Configuration=$(Configuration)'), + 'xbuild should have been run for building the solution.'); + + assert(tr.invokedToolCount === 1, 'should have run xbuild for solution.'); + assert(tr.stderr.length === 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + + done(); + }); + + it('Xplat MSBuild: Clean and Build', (done: Mocha.Done) => { + this.timeout(1000); + + let tp: string = path.join(__dirname, 'L0MSBuildClean.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + //clean + assert(tr.ran('/home/bin/xbuild /user/build/fun.sln /t:Clean /p:Platform=$(Platform) /p:Configuration=$(Configuration) ' + + '/p:TestProp=TestValue /p:TestProp1=TestValue'), 'xbuild clean should have been run on the solution.'); + + //build + assert(tr.ran('/home/bin/xbuild /user/build/fun.sln /p:Platform=$(Platform) /p:Configuration=$(Configuration) ' + + '/p:TestProp=TestValue /p:TestProp1=TestValue'), 'xbuild should have been run for building the solution.'); + + assert(tr.invokedToolCount === 2, 'should have run xbuild for solution.'); + assert(tr.stderr.length === 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + + done(); + }); + + it('Xplat MSBuild: Multiple solutions', (done: Mocha.Done) => { + this.timeout(1000); + + let tp: string = path.join(__dirname, 'L0MSBuildMultipleSolutions.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + //clean + assert(tr.ran('/home/bin/xbuild /user/build/fun.sln /t:Clean /p:Platform=$(Platform) /p:Configuration=$(Configuration) ' + + '/p:TestProp=TestValue /p:TestProp1=TestValue'), 'xbuild clean should have been run on the solution.'); + + assert(tr.ran('/home/bin/xbuild /user/build/test/fun.sln /t:Clean /p:Platform=$(Platform) /p:Configuration=$(Configuration) ' + + '/p:TestProp=TestValue /p:TestProp1=TestValue'), 'xbuild clean should have been run on the solution.'); + + //build + assert(tr.ran('/home/bin/xbuild /user/build/fun.sln /p:Platform=$(Platform) /p:Configuration=$(Configuration) ' + + '/p:TestProp=TestValue /p:TestProp1=TestValue'), 'xbuild should have been run for building the solution.'); + + assert(tr.ran('/home/bin/xbuild /user/build/test/fun.sln /p:Platform=$(Platform) /p:Configuration=$(Configuration) ' + + '/p:TestProp=TestValue /p:TestProp1=TestValue'), 'xbuild should have been run for building the solution.'); + + assert(tr.invokedToolCount === 4, 'should have run xbuild for solution.'); + assert(tr.stderr.length === 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + + done(); + }); +}); \ No newline at end of file diff --git a/_generated/MSBuildV1/Tests/L0MSBuildClean.ts b/_generated/MSBuildV1/Tests/L0MSBuildClean.ts new file mode 100644 index 000000000000..2169d977a3ee --- /dev/null +++ b/_generated/MSBuildV1/Tests/L0MSBuildClean.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, '..', 'msbuild.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tr.setInput('solution', '**/*.sln'); +tr.setInput('platform', '$(Platform)'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('clean', 'true'); +tr.setInput('msbuildArguments', '/p:TestProp=TestValue /p:TestProp1=TestValue'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xbuild": "/home/bin/xbuild" + }, + "checkPath": { + "/home/bin/xbuild": true + }, + "findMatch": { + "**/*.sln": [ + "/user/build/fun.sln" + ] + }, + "exec": { + "/home/bin/xbuild /user/build/fun.sln /t:Clean /p:Platform=$(Platform) /p:Configuration=$(Configuration) /p:TestProp=TestValue /p:TestProp1=TestValue": { + "code": 0, + "stdout": "xbuild output here" + }, + "/home/bin/xbuild /user/build/fun.sln /p:Platform=$(Platform) /p:Configuration=$(Configuration) /p:TestProp=TestValue /p:TestProp1=TestValue": { + "code": 0, + "stdout": "xbuild output here" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/MSBuildV1/Tests/L0MSBuildDefaults.ts b/_generated/MSBuildV1/Tests/L0MSBuildDefaults.ts new file mode 100644 index 000000000000..bc1f7a4e23ff --- /dev/null +++ b/_generated/MSBuildV1/Tests/L0MSBuildDefaults.ts @@ -0,0 +1,35 @@ +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, '..', 'msbuild.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tr.setInput('solution', '**/*.sln'); +tr.setInput('platform', '$(Platform)'); +tr.setInput('configuration', '$(Configuration)'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xbuild": "/home/bin/xbuild" + }, + "checkPath": { + "/home/bin/xbuild": true + }, + "findMatch": { + "**/*.sln": [ + "/user/build/fun.sln" + ] + }, + "exec": { + "/home/bin/xbuild /user/build/fun.sln /p:Platform=$(Platform) /p:Configuration=$(Configuration)": { + "code": 0, + "stdout": "xbuild output here" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/MSBuildV1/Tests/L0MSBuildMultipleSolutions.ts b/_generated/MSBuildV1/Tests/L0MSBuildMultipleSolutions.ts new file mode 100644 index 000000000000..0a5d96a18cf4 --- /dev/null +++ b/_generated/MSBuildV1/Tests/L0MSBuildMultipleSolutions.ts @@ -0,0 +1,50 @@ +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, '..', 'msbuild.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tr.setInput('solution', '**/*.sln'); +tr.setInput('platform', '$(Platform)'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('clean', 'true'); +tr.setInput('msbuildArguments', '/p:TestProp=TestValue /p:TestProp1=TestValue'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xbuild": "/home/bin/xbuild" + }, + "checkPath": { + "/home/bin/xbuild": true + }, + "findMatch": { + "**/*.sln": [ + "/user/build/fun.sln", + "/user/build/test/fun.sln" + ] + }, + "exec": { + "/home/bin/xbuild /user/build/fun.sln /t:Clean /p:Platform=$(Platform) /p:Configuration=$(Configuration) /p:TestProp=TestValue /p:TestProp1=TestValue": { + "code": 0, + "stdout": "xbuild output here" + }, + "/home/bin/xbuild /user/build/test/fun.sln /t:Clean /p:Platform=$(Platform) /p:Configuration=$(Configuration) /p:TestProp=TestValue /p:TestProp1=TestValue": { + "code": 0, + "stdout": "xbuild output here" + }, + "/home/bin/xbuild /user/build/fun.sln /p:Platform=$(Platform) /p:Configuration=$(Configuration) /p:TestProp=TestValue /p:TestProp1=TestValue": { + "code": 0, + "stdout": "xbuild output here" + }, + "/home/bin/xbuild /user/build/test/fun.sln /p:Platform=$(Platform) /p:Configuration=$(Configuration) /p:TestProp=TestValue /p:TestProp1=TestValue": { + "code": 0, + "stdout": "xbuild output here" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/MSBuildV1/Tests/PassesArguments.ps1 b/_generated/MSBuildV1/Tests/PassesArguments.ps1 new file mode 100644 index 000000000000..9a197b7e84f4 --- /dev/null +++ b/_generated/MSBuildV1/Tests/PassesArguments.ps1 @@ -0,0 +1,57 @@ +[cmdletbinding()] +param() + +# Arrange. +. $PSScriptRoot\..\..\..\Tests\lib\Initialize-Test.ps1 +Register-Mock Trace-VstsEnteringInvocation +Register-Mock Trace-VstsLeavingInvocation +Register-Mock Import-VstsLocStrings +Register-Mock EmitTelemetry +$variableSets = @( + @{ Clean = $false ; MaximumCpuCount = $false ; RestoreNugetPackages = $false ; LogProjectEvents = $false ; CreateLogFile = $false ; LogFileVerbosity = '' ; Debug = $false } + @{ Clean = $false ; MaximumCpuCount = $false ; RestoreNugetPackages = $false ; LogProjectEvents = $false ; CreateLogFile = $true ; LogFileVerbosity = '' ; Debug = $false } + @{ Clean = $false ; MaximumCpuCount = $false ; RestoreNugetPackages = $false ; LogProjectEvents = $true ; CreateLogFile = $false ; LogFileVerbosity = '' ; Debug = $false } + @{ Clean = $false ; MaximumCpuCount = $false ; RestoreNugetPackages = $true ; LogProjectEvents = $false ; CreateLogFile = $false ; LogFileVerbosity = '' ; Debug = $false } + @{ Clean = $false ; MaximumCpuCount = $true ; RestoreNugetPackages = $false ; LogProjectEvents = $false ; CreateLogFile = $false ; LogFileVerbosity = '' ; Debug = $false } + @{ Clean = $true ; MaximumCpuCount = $false ; RestoreNugetPackages = $false ; LogProjectEvents = $false ; CreateLogFile = $false ; LogFileVerbosity = '' ; Debug = $false } + @{ Clean = $false ; MaximumCpuCount = $false ; RestoreNuGetPackages = $false ; LogProjectEvents = $false ; CreateLogFile = $false ; LogFileVerbosity = '' ; Debug = $true } + @{ Clean = $false ; MaximumCpuCount = $false ; RestoreNuGetPackages = $false ; LogProjectEvents = $false ; CreateLogFile = $true ; LogFileVerbosity = 'detailed' ; Debug = $false } + @{ Clean = $false ; MaximumCpuCount = $false ; RestoreNuGetPackages = $false ; LogProjectEvents = $false ; CreateLogFile = $true ; LogFileVerbosity = 'detailed' ; Debug = $true } +) +foreach ($variableSet in $variableSets) { + Unregister-Mock Get-VstsInput + Unregister-Mock Get-VstsTaskVariable + Unregister-Mock Get-SolutionFiles + Unregister-Mock Format-MSBuildArguments + Unregister-Mock Select-MSBuildPath + Unregister-Mock Invoke-BuildTools + Register-Mock Get-VstsInput { 'Some input method' } -- -Name MSBuildLocationMethod + Register-Mock Get-VstsInput { 'Some input location' } -- -Name MSBuildLocation + Register-Mock Get-VstsInput { 'Some input arguments' } -- -Name MSBuildArguments + Register-Mock Get-VstsInput { 'Some input solution' } -- -Name Solution -Require + Register-Mock Get-VstsInput { 'Some input platform' } -- -Name Platform + Register-Mock Get-VstsInput { 'Some input configuration' } -- -Name Configuration + Register-Mock Get-VstsInput { $variableSet.Clean } -- -Name Clean -AsBool + Register-Mock Get-VstsInput { $variableSet.MaximumCpuCount } -- -Name MaximumCpuCount -AsBool + Register-Mock Get-VstsInput { $variableSet.RestoreNuGetPackages } -- -Name RestoreNuGetPackages -AsBool + Register-Mock Get-VstsInput { $variableSet.LogProjectEvents } -- -Name LogProjectEvents -AsBool + Register-Mock Get-VstsInput { $variableSet.CreateLogFile } -- -Name CreateLogFile -AsBool + Register-Mock Get-VstsInput { 'Some input version' } -- -Name MSBuildVersion + Register-Mock Get-VstsInput { 'Some input architecture' } -- -Name MSBuildArchitecture + Register-Mock Get-VstsInput { $variableSet.LogFileVerbosity } -- -Name LogFileVerbosity + Register-Mock Get-VstsTaskVariable { $variableSet.Debug } -- -Name System.Debug -AsBool + Register-Mock Get-SolutionFiles { 'Some solution 1', 'Some solution 2' } -- -Solution 'Some input solution' + Register-Mock Format-MSBuildArguments { 'Some formatted arguments' } -- -MSBuildArguments 'Some input arguments' -Platform 'Some input platform' -Configuration 'Some input configuration' -MaximumCpuCount: $variableSet.MaximumCpuCount + Register-Mock Select-MSBuildPath { 'Some location' } -- -Method 'Some input method' -Location 'Some input location' -PreferredVersion 'Some input version' -Architecture 'Some input architecture' + Register-Mock Invoke-BuildTools { 'Some build output line 1', 'Some build output line 2' } + + $ExpectedCreateLogFile = $variableSet.CreateLogFile + $ExpectedLogFileVerbosity = if ($variableSet.Debug) { 'diagnostic' } else { $variableSet.LogFileVerbosity } + + # Act. + $output = & $PSScriptRoot\..\MSBuild.ps1 + + # Assert. + Assert-AreEqual ('Some build output line 1', 'Some build output line 2') $output + Assert-WasCalled Invoke-BuildTools -- -NuGetRestore: $variableSet.RestoreNuGetPackages -SolutionFiles @('Some solution 1', 'Some solution 2') -MSBuildLocation 'Some location' -MSBuildArguments 'Some formatted arguments' -Clean: $variableSet.Clean -NoTimelineLogger: $(!$variableSet.LogProjectEvents) -CreateLogFile: $ExpectedCreateLogFile -LogFileVerbosity: $ExpectedLogFileVerbosity +} diff --git a/_generated/MSBuildV1/icon.png b/_generated/MSBuildV1/icon.png new file mode 100644 index 000000000000..b3ea2b5e7a30 Binary files /dev/null and b/_generated/MSBuildV1/icon.png differ diff --git a/_generated/MSBuildV1/icon.svg b/_generated/MSBuildV1/icon.svg new file mode 100644 index 000000000000..f08188b71022 --- /dev/null +++ b/_generated/MSBuildV1/icon.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/_generated/MSBuildV1/make.json b/_generated/MSBuildV1/make.json new file mode 100644 index 000000000000..5093abeb19ab --- /dev/null +++ b/_generated/MSBuildV1/make.json @@ -0,0 +1,33 @@ +{ + "rm": [ + { + "items": [ + "node_modules/azure-pipelines-tasks-msbuildhelpers/node_modules/azure-pipelines-task-lib" + ], + "options": "-Rf" + } + ], + "externals": { + "nugetv2": [ + { + "name": "VstsTaskSdk", + "version": "0.11.0", + "repository": "https://www.powershellgallery.com/api/v2/", + "cp": [ + { + "source": [ + "*.dll", + "*.ps1", + "*.psd1", + "*.psm1", + "lib.json", + "Strings" + ], + "dest": "ps_modules/VstsTaskSdk/", + "options": "-R" + } + ] + } + ] + } +} \ No newline at end of file diff --git a/_generated/MSBuildV1/msbuild.ts b/_generated/MSBuildV1/msbuild.ts new file mode 100644 index 000000000000..965eaa007572 --- /dev/null +++ b/_generated/MSBuildV1/msbuild.ts @@ -0,0 +1,85 @@ +import path = require('path'); +import tl = require('azure-pipelines-task-lib/task'); +import { ToolRunner } from 'azure-pipelines-task-lib/toolrunner'; +import msbuildHelpers = require('azure-pipelines-tasks-msbuildhelpers/msbuildhelpers'); +import { TelemetryPayload, emitTelemetry } from './telemetryHelper'; + +async function run() { + const telemetry = {} as TelemetryPayload; + try { + tl.setResourcePath(path.join(__dirname, 'task.json')); + + //read inputs + let solution: string = tl.getPathInput('solution', true, false); + let platform: string = tl.getInput('platform'); + let configuration: string = tl.getInput('configuration'); + let msbuildArguments: string = tl.getInput('msbuildArguments'); + let clean: boolean = tl.getBoolInput('clean'); + + // pass inputs to telemetry object + telemetry.configuration = configuration; + telemetry.platform = platform; + + let logsolutionEvents: boolean = tl.getBoolInput('logsolutionEvents'); + if (logsolutionEvents) { + tl.warning(tl.loc('RecordProjectDetailsOnlySupportedOnWindows')); + } + + let createLogFile: boolean = tl.getBoolInput('createLogFile'); + if (createLogFile) { + tl.warning(tl.loc('CreateLogFileOnlySupportedOnWindows')); + } + + let msbuildLocationMethod: string = tl.getInput('msbuildLocationMethod'); + if (!msbuildLocationMethod) { + msbuildLocationMethod = 'version'; + } + telemetry.msBuildLocationMethod = msbuildLocationMethod; + + let msbuildTool: string; + if (msbuildLocationMethod === 'version') { + let msbuildVersion: string = tl.getInput('msbuildVersion'); + telemetry.msBuildVersion = msbuildVersion; + msbuildTool = await msbuildHelpers.getMSBuildPath(msbuildVersion); + } + if (msbuildLocationMethod === 'location') { + msbuildTool = tl.getInput('msbuildLocation'); + } + + let filesList: string[] = tl.findMatch(null, solution, { followSymbolicLinks: false, followSpecifiedSymbolicLink: false, allowBrokenSymbolicLinks: false }, { matchBase: true }); + for (let file of filesList) { + if (clean) { + let cleanTool: ToolRunner = tl.tool(msbuildTool); + cleanTool.arg(file); + cleanTool.argIf(clean, '/t:Clean'); + cleanTool.argIf(platform, '/p:Platform=' + platform); + cleanTool.argIf(configuration, '/p:Configuration=' + configuration); + if (msbuildArguments) { + cleanTool.line(msbuildArguments); + } + await cleanTool.exec(); + } + + let buildTool: ToolRunner = tl.tool(msbuildTool); + buildTool.arg(file); + buildTool.argIf(platform, '/p:Platform=' + platform); + buildTool.argIf(configuration, '/p:Configuration=' + configuration); + if (msbuildArguments) { + buildTool.line(msbuildArguments); + } + + const startExecTime = new Date().getTime(); + await buildTool.exec(); + const endExecTime = new Date().getTime(); + + const executionTime = (endExecTime - startExecTime) / 1000; // need to convert from milliseconds to seconds + telemetry.msbuildExectionTimeSeconds = executionTime; + } + } catch (err) { + tl.setResult(tl.TaskResult.Failed, err); + } finally { + emitTelemetry(telemetry); + } +} + +run(); diff --git a/_generated/MSBuildV1/package-lock.json b/_generated/MSBuildV1/package-lock.json new file mode 100644 index 000000000000..59c2429b8d46 --- /dev/null +++ b/_generated/MSBuildV1/package-lock.json @@ -0,0 +1,517 @@ +{ + "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": "16.11.65", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.65.tgz", + "integrity": "sha512-Vfz7wGMOr4jbQGiQHVJm8VjeQwM9Ya7mHe9LtQ264/Epf5n1KiZShOFqk++nBzw6a/ubgYdB9Od7P+MH/LjoWw==" + }, + "@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-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-msbuildhelpers": { + "version": "3.210.1", + "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-msbuildhelpers/-/azure-pipelines-tasks-msbuildhelpers-3.210.1.tgz", + "integrity": "sha512-A1o27RKXYkH36WtPZk9TwZQzYBWHb84g9OYHZzdiQyXLTHfnnILmAoowTjQAkWl1jbhTDWsPBROQ7DUCIJ5/hA==", + "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.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==" + } + } + }, + "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/MSBuildV1/package.json b/_generated/MSBuildV1/package.json new file mode 100644 index 000000000000..c368ff303ef4 --- /dev/null +++ b/_generated/MSBuildV1/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": "^16.11.39", + "azure-pipelines-task-lib": "^5.0.0-preview.0", + "azure-pipelines-tasks-msbuildhelpers": "^3.210.1" + }, + "devDependencies": { + "typescript": "4.0.2" + } +} diff --git a/_generated/MSBuildV1/task.json b/_generated/MSBuildV1/task.json new file mode 100644 index 000000000000..55822ae307b0 --- /dev/null +++ b/_generated/MSBuildV1/task.json @@ -0,0 +1,199 @@ +{ + "id": "C6C4C611-AA2E-4A33-B606-5EABA2196824", + "name": "MSBuild", + "friendlyName": "MSBuild", + "description": "Build with MSBuild", + "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/build/msbuild", + "helpMarkDown": "[Learn more about this task](https://go.microsoft.com/fwlink/?LinkID=613724)", + "category": "Build", + "visibility": [ + "Build" + ], + "author": "Microsoft Corporation", + "version": { + "Major": 1, + "Minor": 229, + "Patch": 3 + }, + "demands": [ + "msbuild" + ], + "minimumAgentVersion": "1.95.0", + "groups": [ + { + "name": "advanced", + "displayName": "Advanced", + "isExpanded": false + } + ], + "inputs": [ + { + "name": "solution", + "type": "filePath", + "label": "Project", + "defaultValue": "**/*.sln", + "required": true, + "helpMarkDown": "Relative path from repo root of the project(s) or solution(s) to run. Wildcards can be used. For example, `**/*.csproj` for all csproj files in all sub folders." + }, + { + "name": "msbuildLocationMethod", + "type": "radio", + "label": "MSBuild", + "required": false, + "defaultValue": "version", + "options": { + "version": "Version", + "location": "Specify Location" + } + }, + { + "name": "msbuildVersion", + "type": "pickList", + "label": "MSBuild Version", + "required": false, + "defaultValue": "latest", + "helpMarkDown": "If the preferred version cannot be found, the latest version found will be used instead. On an macOS agent, xbuild (Mono) will be used if version is lower than 15.0.", + "visibleRule": "msbuildLocationMethod = version", + "options": { + "latest": "Latest", + "17.0": "MSBuild 17.0", + "16.0": "MSBuild 16.0", + "15.0": "MSBuild 15.0", + "14.0": "MSBuild 14.0", + "12.0": "MSBuild 12.0", + "4.0": "MSBuild 4.0" + } + }, + { + "name": "msbuildArchitecture", + "type": "pickList", + "label": "MSBuild Architecture", + "defaultValue": "x86", + "required": false, + "helpMarkDown": "Optionally supply the architecture (x86, x64) of MSBuild to run.", + "visibleRule": "msbuildLocationMethod = version", + "options": { + "x86": "MSBuild x86", + "x64": "MSBuild x64" + } + }, + { + "name": "msbuildLocation", + "type": "string", + "label": "Path to MSBuild", + "defaultValue": "", + "required": false, + "helpMarkDown": "Optionally supply the path to MSBuild.", + "visibleRule": "msbuildLocationMethod = location" + }, + { + "name": "platform", + "type": "string", + "label": "Platform", + "defaultValue": "", + "required": false + }, + { + "name": "configuration", + "type": "string", + "label": "Configuration", + "defaultValue": "", + "required": false + }, + { + "name": "msbuildArguments", + "type": "string", + "label": "MSBuild Arguments", + "defaultValue": "", + "required": false, + "helpMarkDown": "Additional arguments passed to MSBuild (on Windows) and xbuild (on macOS)." + }, + { + "name": "clean", + "type": "boolean", + "label": "Clean", + "defaultValue": "false", + "required": false, + "helpMarkDown": "Run a clean build (/t:clean) prior to the build." + }, + { + "name": "maximumCpuCount", + "type": "boolean", + "label": "Build in Parallel", + "defaultValue": "false", + "required": false, + "groupName": "advanced", + "helpMarkDown": "If your MSBuild target configuration is compatible with building in parallel, you can optionally check this input to pass the /m switch to MSBuild (Windows only). If your target configuration is not compatible with building in parallel, checking this option may cause your build to result in file-in-use errors, or intermittent or inconsistent build failures." + }, + { + "name": "restoreNugetPackages", + "type": "boolean", + "label": "Restore NuGet Packages", + "defaultValue": "false", + "required": false, + "groupName": "advanced", + "helpMarkDown": "This option is deprecated. To restore NuGet packages, add a [NuGet](https://docs.microsoft.com/azure/devops/pipelines/tasks/package/nuget) task before the build." + }, + { + "name": "logProjectEvents", + "type": "boolean", + "label": "Record Project Details", + "defaultValue": "false", + "required": false, + "groupName": "advanced", + "helpMarkDown": "Optionally record timeline details for each project (Windows only)." + }, + { + "name": "createLogFile", + "type": "boolean", + "label": "Create Log File", + "defaultValue": "false", + "required": false, + "helpMarkDown": "Optionally create a log file (Windows only).", + "groupName": "advanced" + }, + { + "name": "logFileVerbosity", + "type": "pickList", + "label": "Log File Verbosity", + "defaultValue": "normal", + "required": false, + "helpMarkDown": "Optional log file verbosity.", + "groupName": "advanced", + "options": { + "quiet": "Quiet", + "minimal": "Minimal", + "normal": "Normal", + "detailed": "Detailed", + "diagnostic": "Diagnostic" + }, + "visibleRule": "createLogFile = true" + } + ], + "instanceNameFormat": "Build solution $(solution)", + "execution": { + "PowerShell3": { + "target": "MSBuild.ps1", + "platforms": [ + "windows" + ] + }, + "Node10": { + "target": "msbuild.js", + "argumentFormat": "" + }, + "Node16": { + "target": "msbuild.js", + "argumentFormat": "" + } + }, + "messages": { + "RecordProjectDetailsOnlySupportedOnWindows": "`Record Project Details` is only supported on Windows.", + "CreateLogFileOnlySupportedOnWindows": "`Create Log File` is only supported on Windows.", + "MSB_BuildToolNotFound": "MSBuild or xbuild (Mono) were not found on the macOS or Linux agent." + }, + "_buildConfigMapping": { + "Default": "1.229.3", + "Node20-225": "1.229.4" + } +} \ No newline at end of file diff --git a/_generated/MSBuildV1/task.loc.json b/_generated/MSBuildV1/task.loc.json new file mode 100644 index 000000000000..c17f879c834d --- /dev/null +++ b/_generated/MSBuildV1/task.loc.json @@ -0,0 +1,199 @@ +{ + "id": "C6C4C611-AA2E-4A33-B606-5EABA2196824", + "name": "MSBuild", + "friendlyName": "ms-resource:loc.friendlyName", + "description": "ms-resource:loc.description", + "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/build/msbuild", + "helpMarkDown": "ms-resource:loc.helpMarkDown", + "category": "Build", + "visibility": [ + "Build" + ], + "author": "Microsoft Corporation", + "version": { + "Major": 1, + "Minor": 229, + "Patch": 3 + }, + "demands": [ + "msbuild" + ], + "minimumAgentVersion": "1.95.0", + "groups": [ + { + "name": "advanced", + "displayName": "ms-resource:loc.group.displayName.advanced", + "isExpanded": false + } + ], + "inputs": [ + { + "name": "solution", + "type": "filePath", + "label": "ms-resource:loc.input.label.solution", + "defaultValue": "**/*.sln", + "required": true, + "helpMarkDown": "ms-resource:loc.input.help.solution" + }, + { + "name": "msbuildLocationMethod", + "type": "radio", + "label": "ms-resource:loc.input.label.msbuildLocationMethod", + "required": false, + "defaultValue": "version", + "options": { + "version": "Version", + "location": "Specify Location" + } + }, + { + "name": "msbuildVersion", + "type": "pickList", + "label": "ms-resource:loc.input.label.msbuildVersion", + "required": false, + "defaultValue": "latest", + "helpMarkDown": "ms-resource:loc.input.help.msbuildVersion", + "visibleRule": "msbuildLocationMethod = version", + "options": { + "latest": "Latest", + "17.0": "MSBuild 17.0", + "16.0": "MSBuild 16.0", + "15.0": "MSBuild 15.0", + "14.0": "MSBuild 14.0", + "12.0": "MSBuild 12.0", + "4.0": "MSBuild 4.0" + } + }, + { + "name": "msbuildArchitecture", + "type": "pickList", + "label": "ms-resource:loc.input.label.msbuildArchitecture", + "defaultValue": "x86", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.msbuildArchitecture", + "visibleRule": "msbuildLocationMethod = version", + "options": { + "x86": "MSBuild x86", + "x64": "MSBuild x64" + } + }, + { + "name": "msbuildLocation", + "type": "string", + "label": "ms-resource:loc.input.label.msbuildLocation", + "defaultValue": "", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.msbuildLocation", + "visibleRule": "msbuildLocationMethod = location" + }, + { + "name": "platform", + "type": "string", + "label": "ms-resource:loc.input.label.platform", + "defaultValue": "", + "required": false + }, + { + "name": "configuration", + "type": "string", + "label": "ms-resource:loc.input.label.configuration", + "defaultValue": "", + "required": false + }, + { + "name": "msbuildArguments", + "type": "string", + "label": "ms-resource:loc.input.label.msbuildArguments", + "defaultValue": "", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.msbuildArguments" + }, + { + "name": "clean", + "type": "boolean", + "label": "ms-resource:loc.input.label.clean", + "defaultValue": "false", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.clean" + }, + { + "name": "maximumCpuCount", + "type": "boolean", + "label": "ms-resource:loc.input.label.maximumCpuCount", + "defaultValue": "false", + "required": false, + "groupName": "advanced", + "helpMarkDown": "ms-resource:loc.input.help.maximumCpuCount" + }, + { + "name": "restoreNugetPackages", + "type": "boolean", + "label": "ms-resource:loc.input.label.restoreNugetPackages", + "defaultValue": "false", + "required": false, + "groupName": "advanced", + "helpMarkDown": "ms-resource:loc.input.help.restoreNugetPackages" + }, + { + "name": "logProjectEvents", + "type": "boolean", + "label": "ms-resource:loc.input.label.logProjectEvents", + "defaultValue": "false", + "required": false, + "groupName": "advanced", + "helpMarkDown": "ms-resource:loc.input.help.logProjectEvents" + }, + { + "name": "createLogFile", + "type": "boolean", + "label": "ms-resource:loc.input.label.createLogFile", + "defaultValue": "false", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.createLogFile", + "groupName": "advanced" + }, + { + "name": "logFileVerbosity", + "type": "pickList", + "label": "ms-resource:loc.input.label.logFileVerbosity", + "defaultValue": "normal", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.logFileVerbosity", + "groupName": "advanced", + "options": { + "quiet": "Quiet", + "minimal": "Minimal", + "normal": "Normal", + "detailed": "Detailed", + "diagnostic": "Diagnostic" + }, + "visibleRule": "createLogFile = true" + } + ], + "instanceNameFormat": "ms-resource:loc.instanceNameFormat", + "execution": { + "PowerShell3": { + "target": "MSBuild.ps1", + "platforms": [ + "windows" + ] + }, + "Node10": { + "target": "msbuild.js", + "argumentFormat": "" + }, + "Node16": { + "target": "msbuild.js", + "argumentFormat": "" + } + }, + "messages": { + "RecordProjectDetailsOnlySupportedOnWindows": "ms-resource:loc.messages.RecordProjectDetailsOnlySupportedOnWindows", + "CreateLogFileOnlySupportedOnWindows": "ms-resource:loc.messages.CreateLogFileOnlySupportedOnWindows", + "MSB_BuildToolNotFound": "ms-resource:loc.messages.MSB_BuildToolNotFound" + }, + "_buildConfigMapping": { + "Default": "1.229.3", + "Node20-225": "1.229.4" + } +} \ No newline at end of file diff --git a/_generated/MSBuildV1/telemetryHelper.ts b/_generated/MSBuildV1/telemetryHelper.ts new file mode 100644 index 000000000000..2b613226d108 --- /dev/null +++ b/_generated/MSBuildV1/telemetryHelper.ts @@ -0,0 +1,25 @@ +import tl = require('azure-pipelines-task-lib/task'); +import * as semver from 'semver'; + +export interface TelemetryPayload { + msBuildVersion: string; + msBuildLocationMethod: string; + platform: string; + configuration: string; + msbuildExectionTimeSeconds: number; +} + +export function emitTelemetry(telemetryData: TelemetryPayload) { + try { + let agentVersion = tl.getVariable('Agent.Version'); + if (semver.gte(agentVersion, '2.120.0')) { + let telemetry = JSON.stringify(telemetryData); + + console.log(`##vso[telemetry.publish area=TaskHub;feature=MSBuildV1]${telemetry}`); + } else { + tl.debug(`Agent version of ( ${agentVersion} ) does not meet minimum requirements for telemetry`); + } + } catch (err) { + tl.debug(`Unable to log telemetry. Err:( ${err} )`); + } +} diff --git a/_generated/MSBuildV1/tsconfig.json b/_generated/MSBuildV1/tsconfig.json new file mode 100644 index 000000000000..0438b79f69ac --- /dev/null +++ b/_generated/MSBuildV1/tsconfig.json @@ -0,0 +1,6 @@ +{ + "compilerOptions": { + "target": "ES6", + "module": "commonjs" + } +} \ No newline at end of file diff --git a/_generated/MSBuildV1_Node20/.npmrc b/_generated/MSBuildV1_Node20/.npmrc new file mode 100644 index 000000000000..5fca0d518be7 --- /dev/null +++ b/_generated/MSBuildV1_Node20/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true diff --git a/_generated/MSBuildV1_Node20/MSBuild.ps1 b/_generated/MSBuildV1_Node20/MSBuild.ps1 new file mode 100644 index 000000000000..adfc6997e1f6 --- /dev/null +++ b/_generated/MSBuildV1_Node20/MSBuild.ps1 @@ -0,0 +1,70 @@ +[CmdletBinding()] +param() + +Trace-VstsEnteringInvocation $MyInvocation +$msbuildTelemetry = [PSCustomObject]@{ + MSBuildVersion = "" + MSBuildLocationMethod = "" + Platform = "" + Configuration = "" + MSBuildExecutionTimeSeconds = "" +} + +# Import the helpers. +Import-Module -Name "$PSScriptRoot\node_modules\azure-pipelines-tasks-msbuildhelpers\MSBuildHelpers.psm1" + +try { + Import-VstsLocStrings "$PSScriptRoot\Task.json" + + # Get task variables. + [bool]$debug = Get-VstsTaskVariable -Name System.Debug -AsBool + + # Get the inputs. + [string]$msBuildLocationMethod = Get-VstsInput -Name MSBuildLocationMethod + [string]$msBuildLocation = Get-VstsInput -Name MSBuildLocation + [string]$msBuildArguments = Get-VstsInput -Name MSBuildArguments + [string]$solution = Get-VstsInput -Name Solution -Require + [string]$platform = Get-VstsInput -Name Platform + [string]$configuration = Get-VstsInput -Name Configuration + [bool]$clean = Get-VstsInput -Name Clean -AsBool + [bool]$maximumCpuCount = Get-VstsInput -Name MaximumCpuCount -AsBool + [bool]$restoreNuGetPackages = Get-VstsInput -Name RestoreNuGetPackages -AsBool + [bool]$logProjectEvents = Get-VstsInput -Name LogProjectEvents -AsBool + [bool]$createLogFile = (Get-VstsInput -Name CreateLogFile -AsBool) + [string]$logFileVerbosity = if ($debug) { "diagnostic" } else { Get-VstsInput -Name LogFileVerbosity } + [string]$msBuildVersion = Get-VstsInput -Name MSBuildVersion + [string]$msBuildArchitecture = Get-VstsInput -Name MSBuildArchitecture + + $msbuildTelemetry.MSBuildVersion = "$msBuildVersion" + $msbuildTelemetry.MSBuildLocationMethod = "$msBuildLocationMethod" + $msbuildTelemetry.Platform = "$platform" + $msbuildTelemetry.Configuration = "$configuration" + + # Resolve match patterns. + $solutionFiles = Get-SolutionFiles -Solution $solution + + # Format the MSBuild args. + $msBuildArguments = Format-MSBuildArguments -MSBuildArguments $msBuildArguments -Platform $platform -Configuration $configuration -MaximumCpuCount:$maximumCpuCount + + # Resolve the MSBuild location. + $msBuildLocation = Select-MSBuildPath -Method $msBuildLocationMethod -Location $msBuildLocation -PreferredVersion $msBuildVersion -Architecture $msBuildArchitecture + + # Change the error action preference to 'Continue' so that each solution will build even if + # one fails. Since the error action preference is being changed from 'Stop' (the default for + # PowerShell3 handler) to 'Continue', errors will no longer be terminating and "Write-VstsSetResult" + # needs to explicitly be called to fail the task. Invoke-BuildTools handles calling + # "Write-VstsSetResult" on nuget.exe/msbuild.exe failure. + $global:ErrorActionPreference = 'Continue' + + # Build each solution. + $stopwatch = New-Object System.Diagnostics.Stopwatch + $stopwatch.Start() + + Invoke-BuildTools -NuGetRestore:$restoreNuGetPackages -SolutionFiles $solutionFiles -MSBuildLocation $msBuildLocation -MSBuildArguments $msBuildArguments -Clean:$clean -NoTimelineLogger:(!$logProjectEvents) -CreateLogFile:$createLogFile -LogFileVerbosity:$logFileVerbosity + + $stopwatch.Stop() + $msbuildTelemetry.MSBuildExecutionTimeSeconds = $stopwatch.ElapsedMilliseconds / 1000 +} finally { + EmitTelemetry -TelemetryPayload $msbuildTelemetry -TaskName "MSBuildV1" + Trace-VstsLeavingInvocation $MyInvocation +} diff --git a/_generated/MSBuildV1_Node20/Strings/resources.resjson/de-DE/resources.resjson b/_generated/MSBuildV1_Node20/Strings/resources.resjson/de-DE/resources.resjson new file mode 100644 index 000000000000..7b00de0127e1 --- /dev/null +++ b/_generated/MSBuildV1_Node20/Strings/resources.resjson/de-DE/resources.resjson @@ -0,0 +1,35 @@ +{ + "loc.friendlyName": "MSBuild", + "loc.helpMarkDown": "[Weitere Informationen zu dieser Aufgabe](https://go.microsoft.com/fwlink/?LinkID=613724)", + "loc.description": "Führt Buildvorgänge mit MSBuild aus.", + "loc.instanceNameFormat": "Projektmappe $(solution) erstellen", + "loc.group.displayName.advanced": "Erweitert", + "loc.input.label.solution": "Projekt", + "loc.input.help.solution": "Der relative Pfad vom Repositorystamm der auszuführenden Projekte oder Lösungen. Es können Platzhalter verwendet werden. Beispiel: \"**\\*.csproj\" für alle CSPROJ-Dateien in allen Unterordnern.", + "loc.input.label.msbuildLocationMethod": "MSBuild", + "loc.input.label.msbuildVersion": "MSBuild-Version", + "loc.input.help.msbuildVersion": "Wenn die bevorzugte Version nicht gefunden werden kann, wird stattdessen die neueste gefundene Version verwendet. Auf einem macOS-Agent wird \"xbuild (Mono)\" verwendet, wenn die Version niedriger ist als 15.0.", + "loc.input.label.msbuildArchitecture": "MSBuild-Architektur", + "loc.input.help.msbuildArchitecture": "Geben Sie optional die auszuführende MSBuild-Architektur an (x86, x64).", + "loc.input.label.msbuildLocation": "Pfad zu MSBuild", + "loc.input.help.msbuildLocation": "Geben Sie optional den Pfad zu MSBuild an.", + "loc.input.label.platform": "Plattform", + "loc.input.label.configuration": "Konfiguration", + "loc.input.label.msbuildArguments": "MSBuild-Argumente", + "loc.input.help.msbuildArguments": "Zusätzliche Argumente, die an MSBuild (unter Windows) und xbuild (unter macOS) übergeben werden.", + "loc.input.label.clean": "Bereinigen", + "loc.input.help.clean": "Führt einen bereinigten Build (\"/t:clean\") vor dem Build aus.", + "loc.input.label.maximumCpuCount": "Parallel erstellen", + "loc.input.help.maximumCpuCount": "Wenn die MSBuild-Zielkonfiguration mit parallelem Erstellen kompatibel ist, können Sie optional diese Option aktivieren, um das Kennzeichen \"/m\" an MSBuild zu übergeben (nur Windows). Wenn die Zielkonfiguration nicht mit parallelem Erstellen kompatibel ist, kann das Aktivieren dieser Option bewirken, dass der Build Fehler des Typs \"Datei in Gebrauch\" oder zeitweilige oder inkonsistente Buildfehler aufweist.", + "loc.input.label.restoreNugetPackages": "NuGet-Pakete wiederherstellen", + "loc.input.help.restoreNugetPackages": "Diese Option ist veraltet. Um NuGet-Pakete wiederherzustellen, fügen Sie vor der Builderstellung eine [NuGet](https://docs.microsoft.com/azure/devops/pipelines/tasks/package/nuget)-Aufgabe hinzu.", + "loc.input.label.logProjectEvents": "Projektdetails aufzeichnen", + "loc.input.help.logProjectEvents": "Optional Zeitachsendetails für jedes Projekt aufzeichnen (nur Windows).", + "loc.input.label.createLogFile": "Protokolldatei erstellen", + "loc.input.help.createLogFile": "Erstellen Sie optional eine Protokolldatei (nur Windows).", + "loc.input.label.logFileVerbosity": "Ausführlichkeit der Protokolldatei", + "loc.input.help.logFileVerbosity": "Optionaler Ausführlichkeitsgrad der Protokolldatei.", + "loc.messages.RecordProjectDetailsOnlySupportedOnWindows": "\"Projektdetails aufzeichnen\" wird nur für Windows unterstützt.", + "loc.messages.CreateLogFileOnlySupportedOnWindows": "\"Protokolldatei erstellen\" wird nur für Windows unterstützt.", + "loc.messages.MSB_BuildToolNotFound": "MSBuild oder Xbuild (Mono) wurden auf dem MacOS oder Linux-Agent nicht gefunden." +} \ No newline at end of file diff --git a/_generated/MSBuildV1_Node20/Strings/resources.resjson/en-US/resources.resjson b/_generated/MSBuildV1_Node20/Strings/resources.resjson/en-US/resources.resjson new file mode 100644 index 000000000000..3a70b1428c3f --- /dev/null +++ b/_generated/MSBuildV1_Node20/Strings/resources.resjson/en-US/resources.resjson @@ -0,0 +1,35 @@ +{ + "loc.friendlyName": "MSBuild", + "loc.helpMarkDown": "[Learn more about this task](https://go.microsoft.com/fwlink/?LinkID=613724)", + "loc.description": "Build with MSBuild", + "loc.instanceNameFormat": "Build solution $(solution)", + "loc.group.displayName.advanced": "Advanced", + "loc.input.label.solution": "Project", + "loc.input.help.solution": "Relative path from repo root of the project(s) or solution(s) to run. Wildcards can be used. For example, `**/*.csproj` for all csproj files in all sub folders.", + "loc.input.label.msbuildLocationMethod": "MSBuild", + "loc.input.label.msbuildVersion": "MSBuild Version", + "loc.input.help.msbuildVersion": "If the preferred version cannot be found, the latest version found will be used instead. On an macOS agent, xbuild (Mono) will be used if version is lower than 15.0.", + "loc.input.label.msbuildArchitecture": "MSBuild Architecture", + "loc.input.help.msbuildArchitecture": "Optionally supply the architecture (x86, x64) of MSBuild to run.", + "loc.input.label.msbuildLocation": "Path to MSBuild", + "loc.input.help.msbuildLocation": "Optionally supply the path to MSBuild.", + "loc.input.label.platform": "Platform", + "loc.input.label.configuration": "Configuration", + "loc.input.label.msbuildArguments": "MSBuild Arguments", + "loc.input.help.msbuildArguments": "Additional arguments passed to MSBuild (on Windows) and xbuild (on macOS).", + "loc.input.label.clean": "Clean", + "loc.input.help.clean": "Run a clean build (/t:clean) prior to the build.", + "loc.input.label.maximumCpuCount": "Build in Parallel", + "loc.input.help.maximumCpuCount": "If your MSBuild target configuration is compatible with building in parallel, you can optionally check this input to pass the /m switch to MSBuild (Windows only). If your target configuration is not compatible with building in parallel, checking this option may cause your build to result in file-in-use errors, or intermittent or inconsistent build failures.", + "loc.input.label.restoreNugetPackages": "Restore NuGet Packages", + "loc.input.help.restoreNugetPackages": "This option is deprecated. To restore NuGet packages, add a [NuGet](https://docs.microsoft.com/azure/devops/pipelines/tasks/package/nuget) task before the build.", + "loc.input.label.logProjectEvents": "Record Project Details", + "loc.input.help.logProjectEvents": "Optionally record timeline details for each project (Windows only).", + "loc.input.label.createLogFile": "Create Log File", + "loc.input.help.createLogFile": "Optionally create a log file (Windows only).", + "loc.input.label.logFileVerbosity": "Log File Verbosity", + "loc.input.help.logFileVerbosity": "Optional log file verbosity.", + "loc.messages.RecordProjectDetailsOnlySupportedOnWindows": "`Record Project Details` is only supported on Windows.", + "loc.messages.CreateLogFileOnlySupportedOnWindows": "`Create Log File` is only supported on Windows.", + "loc.messages.MSB_BuildToolNotFound": "MSBuild or xbuild (Mono) were not found on the macOS or Linux agent." +} \ No newline at end of file diff --git a/_generated/MSBuildV1_Node20/Strings/resources.resjson/es-ES/resources.resjson b/_generated/MSBuildV1_Node20/Strings/resources.resjson/es-ES/resources.resjson new file mode 100644 index 000000000000..5b4d2efc74f3 --- /dev/null +++ b/_generated/MSBuildV1_Node20/Strings/resources.resjson/es-ES/resources.resjson @@ -0,0 +1,35 @@ +{ + "loc.friendlyName": "MSBuild", + "loc.helpMarkDown": "[Obtener más información acerca de esta tarea](https://go.microsoft.com/fwlink/?LinkID=613724)", + "loc.description": "Compilar con MSBuild", + "loc.instanceNameFormat": "Compilar solución $(solution)", + "loc.group.displayName.advanced": "Avanzado", + "loc.input.label.solution": "Proyecto", + "loc.input.help.solution": "Ruta de acceso relativa de la raíz del repositorio de los proyectos o las soluciones que se van a ejecutar. Se pueden usar caracteres comodín. Por ejemplo, \"**\\*.csproj\" para todos los archivos csproj de todas las subcarpetas.", + "loc.input.label.msbuildLocationMethod": "MSBuild", + "loc.input.label.msbuildVersion": "Versión de MSBuild", + "loc.input.help.msbuildVersion": "Si no se encuentra la versión preferida, se usa la versión más reciente que se encuentre. En un agente de macOS, se usa xbuild (Mono) si la versión es anterior a la 15.0.", + "loc.input.label.msbuildArchitecture": "Arquitectura MSBuild", + "loc.input.help.msbuildArchitecture": "Indique opcionalmente la arquitectura (x86, x64) de MSBuild que se va a ejecutar.", + "loc.input.label.msbuildLocation": "Ruta de acceso de MSBuild", + "loc.input.help.msbuildLocation": "Indique opcionalmente la ruta de acceso a MSBuild.", + "loc.input.label.platform": "Plataforma", + "loc.input.label.configuration": "Configuración", + "loc.input.label.msbuildArguments": "Argumentos de MSBuild", + "loc.input.help.msbuildArguments": "Argumentos adicionales pasados a MSBuild (en Windows) y xbuild (en macOS).", + "loc.input.label.clean": "Limpiar", + "loc.input.help.clean": "Ejecute una compilación limpia (/t:clean) antes de realizar la compilación.", + "loc.input.label.maximumCpuCount": "Compilar en paralelo", + "loc.input.help.maximumCpuCount": "Si la configuración de destino de MSBuild es compatible con la compilación en paralelo, puede activar esta entrada para pasar el modificador /m a MSBuild (solo en Windows). Si la configuración de destino no es compatible con la compilación en paralelo y activa esta opción, la compilación puede generar errores de archivo en uso o de compilación intermitente o incoherente.", + "loc.input.label.restoreNugetPackages": "Restaurar paquetes NuGet", + "loc.input.help.restoreNugetPackages": "Esta opción está en desuso. Para restaurar paquetes NuGet, agregue una tarea de [NuGet](https://docs.microsoft.com/azure/devops/pipelines/tasks/package/nuget) antes de la compilación.", + "loc.input.label.logProjectEvents": "Registrar detalles del proyecto", + "loc.input.help.logProjectEvents": "De manera opcional, se registran los detalles de la escala de tiempo de cada proyecto (solo Windows).", + "loc.input.label.createLogFile": "Crear archivo de registro", + "loc.input.help.createLogFile": "Si quiere, puede crear un archivo de registro (solo en Windows).", + "loc.input.label.logFileVerbosity": "Nivel de detalle del archivo de registro", + "loc.input.help.logFileVerbosity": "Nivel de detalle del archivo de registro opcional.", + "loc.messages.RecordProjectDetailsOnlySupportedOnWindows": "\"Registrar detalles del proyecto\" solo se admite en Windows.", + "loc.messages.CreateLogFileOnlySupportedOnWindows": "\"Crear archivo de registro\" solo se admite en Windows.", + "loc.messages.MSB_BuildToolNotFound": "No se ha encontrado MSBuild o xbuild (Mono) en el agente de macOS o Linux." +} \ No newline at end of file diff --git a/_generated/MSBuildV1_Node20/Strings/resources.resjson/fr-FR/resources.resjson b/_generated/MSBuildV1_Node20/Strings/resources.resjson/fr-FR/resources.resjson new file mode 100644 index 000000000000..1e9bc09b00d5 --- /dev/null +++ b/_generated/MSBuildV1_Node20/Strings/resources.resjson/fr-FR/resources.resjson @@ -0,0 +1,35 @@ +{ + "loc.friendlyName": "MSBuild", + "loc.helpMarkDown": "[En savoir plus sur cette tâche](https://go.microsoft.com/fwlink/?LinkID=613724)", + "loc.description": "Générer avec MSBuild", + "loc.instanceNameFormat": "Générer la solution $(solution)", + "loc.group.displayName.advanced": "Avancé", + "loc.input.label.solution": "Projet", + "loc.input.help.solution": "Chemin relatif de la racine de dépôt des projets ou solutions à exécuter. Les caractères génériques sont autorisés. Par exemple, '**\\*.csproj' correspond à tous les fichiers csproj dans tous les sous-dossiers.", + "loc.input.label.msbuildLocationMethod": "MSBuild", + "loc.input.label.msbuildVersion": "Version de MSBuild", + "loc.input.help.msbuildVersion": "Si la version par défaut est introuvable, la dernière version trouvée est utilisée à la place. Sur un agent macOS, xbuild (Mono) est utilisé si la version est inférieure à la version 15.0.", + "loc.input.label.msbuildArchitecture": "Architecture MSBuild", + "loc.input.help.msbuildArchitecture": "Indiquez éventuellement l'architecture (x86, x64) de MSBuild à exécuter.", + "loc.input.label.msbuildLocation": "Chemin d'accès de MSBuild", + "loc.input.help.msbuildLocation": "Indiquez éventuellement le chemin d'accès à MSBuild.", + "loc.input.label.platform": "Plateforme", + "loc.input.label.configuration": "Configuration", + "loc.input.label.msbuildArguments": "Arguments MSBuild", + "loc.input.help.msbuildArguments": "Arguments supplémentaires passés à MSBuild (sur Windows) et xbuild (sur macOS).", + "loc.input.label.clean": "Nettoyer", + "loc.input.help.clean": "Exécutez un nettoyage de build (/t:clean) avant d'effectuer la génération.", + "loc.input.label.maximumCpuCount": "Build en parallèle", + "loc.input.help.maximumCpuCount": "Si votre configuration cible MSBuild est compatible avec la génération en parallèle, vous pouvez éventuellement cocher cette option pour passer le commutateur /m à MSBuild (Windows uniquement). Si votre configuration cible n'est pas compatible avec la génération en parallèle, l'activation de cette option risque d'entraîner des erreurs de type fichier en cours d'utilisation, ou bien des échecs de build intermittents ou incohérents.", + "loc.input.label.restoreNugetPackages": "Restaurer des packages NuGet", + "loc.input.help.restoreNugetPackages": "Cette option est dépréciée. Pour restaurer des packages NuGet, ajoutez une tâche [NuGet](https://docs.microsoft.com/azure/devops/pipelines/tasks/package/nuget) avant la build.", + "loc.input.label.logProjectEvents": "Enregistrer les détails du projet", + "loc.input.help.logProjectEvents": "Enregistrez éventuellement les détails de la chronologie de chaque projet (Windows uniquement).", + "loc.input.label.createLogFile": "Créer le fichier journal", + "loc.input.help.createLogFile": "Créez éventuellement un fichier journal (Windows uniquement).", + "loc.input.label.logFileVerbosity": "Verbosité du fichier journal", + "loc.input.help.logFileVerbosity": "Verbosité facultative du fichier journal.", + "loc.messages.RecordProjectDetailsOnlySupportedOnWindows": "'Enregistrer les détails du projet' est uniquement pris en charge sur Windows.", + "loc.messages.CreateLogFileOnlySupportedOnWindows": "'Créer le fichier journal' est uniquement pris en charge sur Windows.", + "loc.messages.MSB_BuildToolNotFound": "MSBuild ou xbuild (Mono) sont introuvables sur l'agent macOS ou Linux." +} \ No newline at end of file diff --git a/_generated/MSBuildV1_Node20/Strings/resources.resjson/it-IT/resources.resjson b/_generated/MSBuildV1_Node20/Strings/resources.resjson/it-IT/resources.resjson new file mode 100644 index 000000000000..d9000d5c394a --- /dev/null +++ b/_generated/MSBuildV1_Node20/Strings/resources.resjson/it-IT/resources.resjson @@ -0,0 +1,35 @@ +{ + "loc.friendlyName": "MSBuild", + "loc.helpMarkDown": "[Altre informazioni su questa attività](https://go.microsoft.com/fwlink/?LinkID=613724)", + "loc.description": "Consente di compilare con MSBuild", + "loc.instanceNameFormat": "Compila la soluzione $(solution)", + "loc.group.displayName.advanced": "Avanzate", + "loc.input.label.solution": "Progetto", + "loc.input.help.solution": "Percorso relativo dalla radice del repository dei progetti o delle soluzioni da eseguire. È possibile usare i caratteri jolly, ad esempio `**/*.csproj` per indicare tutti i file csproj in tutte le sottocartelle.", + "loc.input.label.msbuildLocationMethod": "MSBuild", + "loc.input.label.msbuildVersion": "Versione MSBuild", + "loc.input.help.msbuildVersion": "Se non viene trovata la versione preferita, verrà usata quella più recente. In un agente macOS verrà usato xbuild (Mono) se la versione è inferiore alla 15.0.", + "loc.input.label.msbuildArchitecture": "Architettura MSBuild", + "loc.input.help.msbuildArchitecture": "Consente, facoltativamente, di specificare l'architettura (x86, x64) di MSBuild da eseguire.", + "loc.input.label.msbuildLocation": "Percorso di MSBuild", + "loc.input.help.msbuildLocation": "Consente, facoltativamente, di specificare il percorso di MSBuild.", + "loc.input.label.platform": "Piattaforma", + "loc.input.label.configuration": "Configurazione", + "loc.input.label.msbuildArguments": "Argomenti MSBuild", + "loc.input.help.msbuildArguments": "Argomenti aggiuntivi passati a MSBuild (in Windows) e xbuild (in MacOS).", + "loc.input.label.clean": "Pulisci", + "loc.input.help.clean": "Esegue una compilazione pulita (/t:clean) prima della compilazione.", + "loc.input.label.maximumCpuCount": "Compilazione in parallelo", + "loc.input.help.maximumCpuCount": "Se la configurazione di destinazione di MSBuild è compatibile con la compilazione in parallelo, è possibile selezionare facoltativamente questa opzione di input per passare l'opzione /m a MSBuild (solo Windows). Se la configurazione di destinazione non è compatibile con la compilazione in parallelo, selezionando questa opzione durante la compilazione potrebbero verificarsi errori di file in uso oppure errori di compilazioni intermittenti o incoerenti.", + "loc.input.label.restoreNugetPackages": "Ripristina pacchetti NuGet", + "loc.input.help.restoreNugetPackages": "Questa opzione è deprecata. Per ripristinare pacchetti NuGet, aggiungere un'attività [NuGet](https://docs.microsoft.com/azure/devops/pipelines/tasks/package/nuget) prima della compilazione.", + "loc.input.label.logProjectEvents": "Registra dettagli progetto", + "loc.input.help.logProjectEvents": "Registra facoltativamente i dettagli della sequenza temporale per ogni progetto (solo Windows).", + "loc.input.label.createLogFile": "Crea file di log", + "loc.input.help.createLogFile": "Consente facoltativamente di creare un file di log (solo Windows).", + "loc.input.label.logFileVerbosity": "Livello di dettaglio file di log", + "loc.input.help.logFileVerbosity": "Livello di dettaglio facoltativo del file di log.", + "loc.messages.RecordProjectDetailsOnlySupportedOnWindows": "L'opzione `Registra dettagli progetto` è supportata solo in Windows.", + "loc.messages.CreateLogFileOnlySupportedOnWindows": "L'opzione `Crea file di log` è supportata solo in Windows.", + "loc.messages.MSB_BuildToolNotFound": "MSBuild o xbuild (Mono) non è stato trovato nell'agente MacOS o Linux." +} \ No newline at end of file diff --git a/_generated/MSBuildV1_Node20/Strings/resources.resjson/ja-JP/resources.resjson b/_generated/MSBuildV1_Node20/Strings/resources.resjson/ja-JP/resources.resjson new file mode 100644 index 000000000000..0c7adafc7bb3 --- /dev/null +++ b/_generated/MSBuildV1_Node20/Strings/resources.resjson/ja-JP/resources.resjson @@ -0,0 +1,35 @@ +{ + "loc.friendlyName": "MSBuild", + "loc.helpMarkDown": "[このタスクの詳細を表示](https://go.microsoft.com/fwlink/?LinkID=613724)", + "loc.description": "MSBuild で作成する", + "loc.instanceNameFormat": "ソリューション $(solution) のビルド", + "loc.group.displayName.advanced": "詳細設定", + "loc.input.label.solution": "プロジェクト", + "loc.input.help.solution": "リポジトリのルートを基準に指定する、実行するプロジェクトまたはソリューションの相対パス。ワイルドカードを使用できます。たとえば、全サブフォルダー内のすべての csproj ファイルの場合は `**/*.csproj` です。", + "loc.input.label.msbuildLocationMethod": "MSBuild", + "loc.input.label.msbuildVersion": "MSBuild のバージョン", + "loc.input.help.msbuildVersion": "優先するバージョンが見つからない場合は、見つかった最新のバージョンが代わりに使用されます。macOS エージェントでは、バージョンが 15.0 より前の場合は xbuild (Mono) が使用されます。", + "loc.input.label.msbuildArchitecture": "MSBuild アーキテクチャ", + "loc.input.help.msbuildArchitecture": "必要に応じて、実行する MSBuild のアーキテクチャ (x86、x64) を指定します。", + "loc.input.label.msbuildLocation": "MSBuild へのパス", + "loc.input.help.msbuildLocation": "(省略可能) MSBuild へのパスを指定します。", + "loc.input.label.platform": "プラットフォーム", + "loc.input.label.configuration": "構成", + "loc.input.label.msbuildArguments": "MSBuild 引数", + "loc.input.help.msbuildArguments": "MSBuild (Windows) と xbuild (macOS) に渡す追加の引数。", + "loc.input.label.clean": "消去", + "loc.input.help.clean": "ビルドの前に、クリーン ビルド (/t:clean) を実行します。", + "loc.input.label.maximumCpuCount": "並列ビルド", + "loc.input.help.maximumCpuCount": "MSBuild ターゲット構成が並列ビルドと互換性がある場合、この入力を任意にチェックし、/m スイッチを MSBuild に渡すことができます (Windows のみ)。ターゲット構成が並列ビルドと互換性がない場合、このオプションをオンにすると、ビルドに \"ファイル使用中\" エラーが発生するか、ビルドの断続的エラーまたは不整合エラーになることがあります。", + "loc.input.label.restoreNugetPackages": "NuGet パッケージの復元", + "loc.input.help.restoreNugetPackages": "このオプションは非推奨です。NuGet パッケージを復元するには、ビルドの前に [NuGet](https://docs.microsoft.com/azure/devops/pipelines/tasks/package/nuget) タスクを追加します。", + "loc.input.label.logProjectEvents": "プロジェクトの詳細の記録", + "loc.input.help.logProjectEvents": "オプションで、各プロジェクトのタイムライン詳細を記録します (Windows のみ)。", + "loc.input.label.createLogFile": "ログ ファイルを作成する", + "loc.input.help.createLogFile": "必要に応じて、ログ ファイルを作成します (Windows のみ)。", + "loc.input.label.logFileVerbosity": "ログ ファイルの詳細度", + "loc.input.help.logFileVerbosity": "オプションのログ ファイルの詳細度。", + "loc.messages.RecordProjectDetailsOnlySupportedOnWindows": "`プロジェクトの詳細の記録` は Windows でのみサポートされています。", + "loc.messages.CreateLogFileOnlySupportedOnWindows": "`ログ ファイルを作成する` は Windows でのみサポートされます。", + "loc.messages.MSB_BuildToolNotFound": "MSBuild または xbuild (Mono) が macOS または Linux エージェントに見つかりませんでした。" +} \ No newline at end of file diff --git a/_generated/MSBuildV1_Node20/Strings/resources.resjson/ko-KR/resources.resjson b/_generated/MSBuildV1_Node20/Strings/resources.resjson/ko-KR/resources.resjson new file mode 100644 index 000000000000..31948e9ca540 --- /dev/null +++ b/_generated/MSBuildV1_Node20/Strings/resources.resjson/ko-KR/resources.resjson @@ -0,0 +1,35 @@ +{ + "loc.friendlyName": "MSBuild", + "loc.helpMarkDown": "[이 작업에 대한 자세한 정보](https://go.microsoft.com/fwlink/?LinkID=613724)", + "loc.description": "MSBuild로 빌드", + "loc.instanceNameFormat": "솔루션 $(solution) 빌드", + "loc.group.displayName.advanced": "고급", + "loc.input.label.solution": "프로젝트", + "loc.input.help.solution": "실행할 프로젝트 또는 솔루션의 리포 루트로부터의 상대 경로입니다. 와일드카드를 사용할 수 있습니다. 예를 들어, 모든 하위 폴더에 있는 모든 csproj 파일을 표시하기 위해 `**/*.csproj`를 사용할 수 있습니다.", + "loc.input.label.msbuildLocationMethod": "MSBuild", + "loc.input.label.msbuildVersion": "MSBuild 버전", + "loc.input.help.msbuildVersion": "기본 설정 버전을 찾을 수 없는 경우 발견된 최신 버전이 대신 사용됩니다. macOS 에이전트에서는 버전이 15.0 미만인 경우 xbuild(Mono)가 사용됩니다.", + "loc.input.label.msbuildArchitecture": "MSBuild 아키텍처", + "loc.input.help.msbuildArchitecture": "원하는 경우 실행할 MSBuild의 아키텍처(x86, x64)를 제공하세요.", + "loc.input.label.msbuildLocation": "MSBuild 경로", + "loc.input.help.msbuildLocation": "원하는 경우 MSBuild의 경로를 제공하세요.", + "loc.input.label.platform": "플랫폼", + "loc.input.label.configuration": "구성", + "loc.input.label.msbuildArguments": "MSBuild 인수", + "loc.input.help.msbuildArguments": "추가 인수가 MSBuild(Windows) 및 xbuild(macOS)에 전달되었습니다.", + "loc.input.label.clean": "클린", + "loc.input.help.clean": "빌드에 앞서 클린 빌드(/t:clean)를 실행합니다.", + "loc.input.label.maximumCpuCount": "병렬 빌드", + "loc.input.help.maximumCpuCount": "MSBuild 대상 구성이 병렬 빌드 작업과 호환되는 경우 선택적으로 이 입력을 선택하여 /m 스위치를 MSBuild로 전달할 수 있습니다(Windows만 해당). 대상 구성이 병렬 빌드 작업과 호환되지 않는 경우 이 옵션을 선택하면 빌드에서 파일 사용 중 오류 또는 일시적이거나 일관되지 않은 빌드 오류가 발생할 수 있습니다.", + "loc.input.label.restoreNugetPackages": "NuGet 패키지 복원", + "loc.input.help.restoreNugetPackages": "이 옵션은 사용되지 않습니다. NuGet 패키지를 복원하려면 빌드 앞에 [NuGet](https://docs.microsoft.com/azure/devops/pipelines/tasks/package/nuget) 작업을 추가하세요.", + "loc.input.label.logProjectEvents": "프로젝트 정보 기록", + "loc.input.help.logProjectEvents": "원하는 경우 각 프로젝트의 타임라인 세부 정보를 기록합니다(Windows만 해당).", + "loc.input.label.createLogFile": "로그 파일 만들기", + "loc.input.help.createLogFile": "선택적으로 로그 파일을 만드세요(Windows만 해당).", + "loc.input.label.logFileVerbosity": "로그 파일의 세부 정보 표시", + "loc.input.help.logFileVerbosity": "선택 사항으로, 로그 파일의 세부 정보 표시입니다.", + "loc.messages.RecordProjectDetailsOnlySupportedOnWindows": "`프로젝트 세부 정보 기록`은 Windows에서만 지원됩니다.", + "loc.messages.CreateLogFileOnlySupportedOnWindows": "`로그 파일 만들기`는 Windows에서만 지원됩니다.", + "loc.messages.MSB_BuildToolNotFound": "macOS 또는 Linux 에이전트에서 MSBuild 또는 xbuild(Mono)를 찾을 수 없습니다." +} \ No newline at end of file diff --git a/_generated/MSBuildV1_Node20/Strings/resources.resjson/ru-RU/resources.resjson b/_generated/MSBuildV1_Node20/Strings/resources.resjson/ru-RU/resources.resjson new file mode 100644 index 000000000000..b0873dcd7f18 --- /dev/null +++ b/_generated/MSBuildV1_Node20/Strings/resources.resjson/ru-RU/resources.resjson @@ -0,0 +1,35 @@ +{ + "loc.friendlyName": "MSBuild", + "loc.helpMarkDown": "[См. дополнительные сведения об этой задаче](https://go.microsoft.com/fwlink/?LinkID=613724)", + "loc.description": "Сборка с помощью MSBuild", + "loc.instanceNameFormat": "Сборка решения $(solution)", + "loc.group.displayName.advanced": "Дополнительно", + "loc.input.label.solution": "Проект", + "loc.input.help.solution": "Относительный путь от корня репозитория запускаемых проектов или решений. Можно использовать подстановочные знаки. Пример: \"**/*.csproj\" для всех CSPROJ-файлов во всех вложенных папках.", + "loc.input.label.msbuildLocationMethod": "MSBuild", + "loc.input.label.msbuildVersion": "Версия MSBuild", + "loc.input.help.msbuildVersion": "Если не удастся найти предпочтительную версию, будет использоваться последняя найденная версия. В агенте macOS будет использоваться xbuild (Mono) (если версия ниже, чем 15.0).", + "loc.input.label.msbuildArchitecture": "Архитектура MSBuild", + "loc.input.help.msbuildArchitecture": "При необходимости укажите архитектуру используемого средства MSBuild (x86, x64).", + "loc.input.label.msbuildLocation": "Путь к MSBuild", + "loc.input.help.msbuildLocation": "При необходимости укажите путь к MSBuild.", + "loc.input.label.platform": "Платформа", + "loc.input.label.configuration": "Конфигурация", + "loc.input.label.msbuildArguments": "Аргументы MSBuild", + "loc.input.help.msbuildArguments": "Дополнительные аргументы, передаваемые в MSBuild (в Windows) и xbuild (в macOS).", + "loc.input.label.clean": "Очистить", + "loc.input.help.clean": "Выполните очистку сборки (/t:clean) перед сборкой.", + "loc.input.label.maximumCpuCount": "Параллельная сборка", + "loc.input.help.maximumCpuCount": "Если целевая конфигурация MSBuild совместима с параллельной сборкой, при необходимости можно установить этот флажок для передачи параметра /m в MSBuild (только для Windows). Если целевая конфигурация несовместима с параллельной сборкой, выбор этого варианта может привести к возникновению ошибок \"Файл занят\" в сборке, а также к периодическим или противоречивым сбоям сборки.", + "loc.input.label.restoreNugetPackages": "Восстановить пакеты NuGet", + "loc.input.help.restoreNugetPackages": "Этот параметр является нерекомендуемым. Чтобы восстановить пакеты NuGet, добавьте задачу [NuGet](https://docs.microsoft.com/azure/devops/pipelines/tasks/package/nuget) перед сборкой.", + "loc.input.label.logProjectEvents": "Записать сведения о проекте", + "loc.input.help.logProjectEvents": "Запись данных о хронологии для каждого проекта (необязательно, только для Windows).", + "loc.input.label.createLogFile": "Создать файл журнала", + "loc.input.help.createLogFile": "При необходимости создайте файл журнала (только в Windows).", + "loc.input.label.logFileVerbosity": "Детализация файла журнала", + "loc.input.help.logFileVerbosity": "Необязательный параметр детализации файла журнала.", + "loc.messages.RecordProjectDetailsOnlySupportedOnWindows": "Команда \"Записать сведения о проекте\" поддерживается только в Windows.", + "loc.messages.CreateLogFileOnlySupportedOnWindows": "Команда \"Создать файл журнала\" поддерживается только в Windows.", + "loc.messages.MSB_BuildToolNotFound": "В агенте macOS или Linux не удалось найти MSBuild или xbuild (Mono)." +} \ No newline at end of file diff --git a/_generated/MSBuildV1_Node20/Strings/resources.resjson/zh-CN/resources.resjson b/_generated/MSBuildV1_Node20/Strings/resources.resjson/zh-CN/resources.resjson new file mode 100644 index 000000000000..6e9df6317907 --- /dev/null +++ b/_generated/MSBuildV1_Node20/Strings/resources.resjson/zh-CN/resources.resjson @@ -0,0 +1,35 @@ +{ + "loc.friendlyName": "MSBuild", + "loc.helpMarkDown": "[详细了解此任务](https://go.microsoft.com/fwlink/?LinkID=613724)", + "loc.description": "使用 MSBuild 生成", + "loc.instanceNameFormat": "生成解决方案 $(solution)", + "loc.group.displayName.advanced": "高级", + "loc.input.label.solution": "项目", + "loc.input.help.solution": "要运行的项目或解决方案的存储库根路径的相对路径。可以使用通配符。例如,\"**\\*.csproj\" 表示所有子文件夹中的所有 csproj 文件。", + "loc.input.label.msbuildLocationMethod": "MSBuild", + "loc.input.label.msbuildVersion": "MSBuild 版本", + "loc.input.help.msbuildVersion": "如果找不到首选版本,将改为使用找到的最新版本。在 macOS 代理上,如果版本低于 15.0,则将使用 xbuild (Mono)。", + "loc.input.label.msbuildArchitecture": "MSBuild 体系结构", + "loc.input.help.msbuildArchitecture": "可以选择提供 MSBuild 的体系结构(x86、x64)进行运行。", + "loc.input.label.msbuildLocation": "MSBuild 的路径", + "loc.input.help.msbuildLocation": "可以选择提供 MSBuild 的路径。", + "loc.input.label.platform": "平台", + "loc.input.label.configuration": "配置", + "loc.input.label.msbuildArguments": "MSBuild 参数", + "loc.input.help.msbuildArguments": "传递给 MSBuild (Windows 上)和 xbuild (Mac 上)的其他参数。", + "loc.input.label.clean": "清理", + "loc.input.help.clean": "在生成前运行清理生成(/t:clean)。", + "loc.input.label.maximumCpuCount": "并行生成", + "loc.input.help.maximumCpuCount": "如果 MSBuild 目标配置与并行生成兼容,可以选择此输入,将 /m 开关传递给 MSBuild (仅限 Windows)。如果目标配置与并行生成不兼容,选中此选项可能会导致你的生成出现“文件正在使用”错误,或出现间歇性或不一致的生成错误。", + "loc.input.label.restoreNugetPackages": "还原 NuGet 包", + "loc.input.help.restoreNugetPackages": "已弃用此选项。若要恢复 NuGet 包,请在生成之前添加[NuGet](https://docs.microsoft.com/azure/devops/pipelines/tasks/package/nuget)任务。", + "loc.input.label.logProjectEvents": "记录项目详情", + "loc.input.help.logProjectEvents": "可以选择记录每个项目的时间线详细信息(仅 Windows)。", + "loc.input.label.createLogFile": "创建日志文件", + "loc.input.help.createLogFile": "选择创建一个日志文件(仅限 Windows)。", + "loc.input.label.logFileVerbosity": "日志文件详细程度", + "loc.input.help.logFileVerbosity": "可选日志文件详细程度。", + "loc.messages.RecordProjectDetailsOnlySupportedOnWindows": "仅在 Windows 上支持“记录项目详细信息”。", + "loc.messages.CreateLogFileOnlySupportedOnWindows": "仅在 Windows 上支持“创建日志文件”。", + "loc.messages.MSB_BuildToolNotFound": "macOS 或 Linux 代理上找不到 MSBuild 或 xbuild (Mono)。" +} \ No newline at end of file diff --git a/_generated/MSBuildV1_Node20/Strings/resources.resjson/zh-TW/resources.resjson b/_generated/MSBuildV1_Node20/Strings/resources.resjson/zh-TW/resources.resjson new file mode 100644 index 000000000000..2140ffcff543 --- /dev/null +++ b/_generated/MSBuildV1_Node20/Strings/resources.resjson/zh-TW/resources.resjson @@ -0,0 +1,35 @@ +{ + "loc.friendlyName": "MSBuild", + "loc.helpMarkDown": "[深入了解此工作](https://go.microsoft.com/fwlink/?LinkID=613724)", + "loc.description": "使用 MSBuild 建置", + "loc.instanceNameFormat": "建置方案 $(solution)", + "loc.group.displayName.advanced": "進階", + "loc.input.label.solution": "專案", + "loc.input.help.solution": "要執行之專案或解決方案存放庫根路徑的相對路徑。可使用萬用字元。例如,`**/*.csproj` 即適用於所有子資料夾中的所有 csproj 檔。", + "loc.input.label.msbuildLocationMethod": "MSBuild", + "loc.input.label.msbuildVersion": "MSBuild 版本", + "loc.input.help.msbuildVersion": "若找不到所需的版本,將會改用所能找到的最新版本。在 MacOS 代理程式上,若版本低於 15.0,將會使用 xbuild (Mono)。", + "loc.input.label.msbuildArchitecture": "MSBuild 架構", + "loc.input.help.msbuildArchitecture": "選擇性地提供 MSBuild 的架構 (x86、x64) 以執行。", + "loc.input.label.msbuildLocation": "MSBuild 的路徑", + "loc.input.help.msbuildLocation": "選擇性地提供 MSBuild 的路徑。", + "loc.input.label.platform": "平台", + "loc.input.label.configuration": "組態", + "loc.input.label.msbuildArguments": "MSBuild 引數", + "loc.input.help.msbuildArguments": "傳遞給 MSBuild (Windows) 及 xbuild (MacOS) 的其他引數。", + "loc.input.label.clean": "清除", + "loc.input.help.clean": "在組建之前執行乾淨的組建 (/t:clean)。", + "loc.input.label.maximumCpuCount": "以平行方式建置", + "loc.input.help.maximumCpuCount": "如果您的 MSBuild 目標組態與平行建置相容,您就可以選擇選取此輸入,以將 /m 參數傳遞至 MSBuild (僅限 Windows)。如果您的目標組態與平行建置不相容,選取此選項可能會導致您的組建產生檔案使用中的錯誤,或組建間歇或不一致的失敗。", + "loc.input.label.restoreNugetPackages": "還原 NuGet 套件", + "loc.input.help.restoreNugetPackages": "此選項已淘汰,若要還原 NuGet 套件,請先新增 [NuGet](https://docs.microsoft.com/azure/devops/pipelines/tasks/package/nuget) 工作再建置。", + "loc.input.label.logProjectEvents": "記錄專案詳細資料", + "loc.input.help.logProjectEvents": "選擇性地記錄各專案的時間軸詳細資料 (僅 Windows)。", + "loc.input.label.createLogFile": "建立記錄檔", + "loc.input.help.createLogFile": "選擇性地建立記錄檔 (僅限 Windows)。", + "loc.input.label.logFileVerbosity": "記錄檔詳細程度", + "loc.input.help.logFileVerbosity": "選擇性記錄檔詳細程度。", + "loc.messages.RecordProjectDetailsOnlySupportedOnWindows": "只有 Windows 才支援 [記錄專案詳細資料]。", + "loc.messages.CreateLogFileOnlySupportedOnWindows": "只有 Windows 才支援 [建立記錄檔]。", + "loc.messages.MSB_BuildToolNotFound": "在 macOS 或 Linux 代理程式上找不到 MSBuild 或 xbuild (Mono)。" +} \ No newline at end of file diff --git a/_generated/MSBuildV1_Node20/Tests/L0.ts b/_generated/MSBuildV1_Node20/Tests/L0.ts new file mode 100644 index 000000000000..0aa6056909fe --- /dev/null +++ b/_generated/MSBuildV1_Node20/Tests/L0.ts @@ -0,0 +1,100 @@ +import assert = require('assert'); +import path = require('path'); +import * as ttm from 'azure-pipelines-task-lib/mock-test'; +var psm = require('../../../Tests/lib/psRunner'); +var psr = null; + +describe('MSBuild Suite', function () { + this.timeout(parseInt(process.env.TASK_TEST_TIMEOUT) || 20000); + before((done: Mocha.Done) => { + if (psm.testSupported()) { + psr = new psm.PSRunner(); + psr.start(); + } + + done(); + }); + + after(function () { + if (psr) { + psr.kill(); + } + }); + + if (psm.testSupported()) { + it('passes arguments', (done: Mocha.Done) => { + psr.run(path.join(__dirname, 'PassesArguments.ps1'), done); + }) + } + + it('Xplat MSBuild: Defaults', (done: Mocha.Done) => { + this.timeout(1000); + + let tp: string = path.join(__dirname, 'L0MSBuildDefaults.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + //build + assert(tr.ran('/home/bin/xbuild /user/build/fun.sln /p:Platform=$(Platform) /p:Configuration=$(Configuration)'), + 'xbuild should have been run for building the solution.'); + + assert(tr.invokedToolCount === 1, 'should have run xbuild for solution.'); + assert(tr.stderr.length === 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + + done(); + }); + + it('Xplat MSBuild: Clean and Build', (done: Mocha.Done) => { + this.timeout(1000); + + let tp: string = path.join(__dirname, 'L0MSBuildClean.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + //clean + assert(tr.ran('/home/bin/xbuild /user/build/fun.sln /t:Clean /p:Platform=$(Platform) /p:Configuration=$(Configuration) ' + + '/p:TestProp=TestValue /p:TestProp1=TestValue'), 'xbuild clean should have been run on the solution.'); + + //build + assert(tr.ran('/home/bin/xbuild /user/build/fun.sln /p:Platform=$(Platform) /p:Configuration=$(Configuration) ' + + '/p:TestProp=TestValue /p:TestProp1=TestValue'), 'xbuild should have been run for building the solution.'); + + assert(tr.invokedToolCount === 2, 'should have run xbuild for solution.'); + assert(tr.stderr.length === 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + + done(); + }); + + it('Xplat MSBuild: Multiple solutions', (done: Mocha.Done) => { + this.timeout(1000); + + let tp: string = path.join(__dirname, 'L0MSBuildMultipleSolutions.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + //clean + assert(tr.ran('/home/bin/xbuild /user/build/fun.sln /t:Clean /p:Platform=$(Platform) /p:Configuration=$(Configuration) ' + + '/p:TestProp=TestValue /p:TestProp1=TestValue'), 'xbuild clean should have been run on the solution.'); + + assert(tr.ran('/home/bin/xbuild /user/build/test/fun.sln /t:Clean /p:Platform=$(Platform) /p:Configuration=$(Configuration) ' + + '/p:TestProp=TestValue /p:TestProp1=TestValue'), 'xbuild clean should have been run on the solution.'); + + //build + assert(tr.ran('/home/bin/xbuild /user/build/fun.sln /p:Platform=$(Platform) /p:Configuration=$(Configuration) ' + + '/p:TestProp=TestValue /p:TestProp1=TestValue'), 'xbuild should have been run for building the solution.'); + + assert(tr.ran('/home/bin/xbuild /user/build/test/fun.sln /p:Platform=$(Platform) /p:Configuration=$(Configuration) ' + + '/p:TestProp=TestValue /p:TestProp1=TestValue'), 'xbuild should have been run for building the solution.'); + + assert(tr.invokedToolCount === 4, 'should have run xbuild for solution.'); + assert(tr.stderr.length === 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + + done(); + }); +}); \ No newline at end of file diff --git a/_generated/MSBuildV1_Node20/Tests/L0MSBuildClean.ts b/_generated/MSBuildV1_Node20/Tests/L0MSBuildClean.ts new file mode 100644 index 000000000000..2169d977a3ee --- /dev/null +++ b/_generated/MSBuildV1_Node20/Tests/L0MSBuildClean.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, '..', 'msbuild.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tr.setInput('solution', '**/*.sln'); +tr.setInput('platform', '$(Platform)'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('clean', 'true'); +tr.setInput('msbuildArguments', '/p:TestProp=TestValue /p:TestProp1=TestValue'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xbuild": "/home/bin/xbuild" + }, + "checkPath": { + "/home/bin/xbuild": true + }, + "findMatch": { + "**/*.sln": [ + "/user/build/fun.sln" + ] + }, + "exec": { + "/home/bin/xbuild /user/build/fun.sln /t:Clean /p:Platform=$(Platform) /p:Configuration=$(Configuration) /p:TestProp=TestValue /p:TestProp1=TestValue": { + "code": 0, + "stdout": "xbuild output here" + }, + "/home/bin/xbuild /user/build/fun.sln /p:Platform=$(Platform) /p:Configuration=$(Configuration) /p:TestProp=TestValue /p:TestProp1=TestValue": { + "code": 0, + "stdout": "xbuild output here" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/MSBuildV1_Node20/Tests/L0MSBuildDefaults.ts b/_generated/MSBuildV1_Node20/Tests/L0MSBuildDefaults.ts new file mode 100644 index 000000000000..bc1f7a4e23ff --- /dev/null +++ b/_generated/MSBuildV1_Node20/Tests/L0MSBuildDefaults.ts @@ -0,0 +1,35 @@ +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, '..', 'msbuild.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tr.setInput('solution', '**/*.sln'); +tr.setInput('platform', '$(Platform)'); +tr.setInput('configuration', '$(Configuration)'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xbuild": "/home/bin/xbuild" + }, + "checkPath": { + "/home/bin/xbuild": true + }, + "findMatch": { + "**/*.sln": [ + "/user/build/fun.sln" + ] + }, + "exec": { + "/home/bin/xbuild /user/build/fun.sln /p:Platform=$(Platform) /p:Configuration=$(Configuration)": { + "code": 0, + "stdout": "xbuild output here" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/MSBuildV1_Node20/Tests/L0MSBuildMultipleSolutions.ts b/_generated/MSBuildV1_Node20/Tests/L0MSBuildMultipleSolutions.ts new file mode 100644 index 000000000000..0a5d96a18cf4 --- /dev/null +++ b/_generated/MSBuildV1_Node20/Tests/L0MSBuildMultipleSolutions.ts @@ -0,0 +1,50 @@ +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, '..', 'msbuild.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tr.setInput('solution', '**/*.sln'); +tr.setInput('platform', '$(Platform)'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('clean', 'true'); +tr.setInput('msbuildArguments', '/p:TestProp=TestValue /p:TestProp1=TestValue'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xbuild": "/home/bin/xbuild" + }, + "checkPath": { + "/home/bin/xbuild": true + }, + "findMatch": { + "**/*.sln": [ + "/user/build/fun.sln", + "/user/build/test/fun.sln" + ] + }, + "exec": { + "/home/bin/xbuild /user/build/fun.sln /t:Clean /p:Platform=$(Platform) /p:Configuration=$(Configuration) /p:TestProp=TestValue /p:TestProp1=TestValue": { + "code": 0, + "stdout": "xbuild output here" + }, + "/home/bin/xbuild /user/build/test/fun.sln /t:Clean /p:Platform=$(Platform) /p:Configuration=$(Configuration) /p:TestProp=TestValue /p:TestProp1=TestValue": { + "code": 0, + "stdout": "xbuild output here" + }, + "/home/bin/xbuild /user/build/fun.sln /p:Platform=$(Platform) /p:Configuration=$(Configuration) /p:TestProp=TestValue /p:TestProp1=TestValue": { + "code": 0, + "stdout": "xbuild output here" + }, + "/home/bin/xbuild /user/build/test/fun.sln /p:Platform=$(Platform) /p:Configuration=$(Configuration) /p:TestProp=TestValue /p:TestProp1=TestValue": { + "code": 0, + "stdout": "xbuild output here" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/MSBuildV1_Node20/Tests/PassesArguments.ps1 b/_generated/MSBuildV1_Node20/Tests/PassesArguments.ps1 new file mode 100644 index 000000000000..9a197b7e84f4 --- /dev/null +++ b/_generated/MSBuildV1_Node20/Tests/PassesArguments.ps1 @@ -0,0 +1,57 @@ +[cmdletbinding()] +param() + +# Arrange. +. $PSScriptRoot\..\..\..\Tests\lib\Initialize-Test.ps1 +Register-Mock Trace-VstsEnteringInvocation +Register-Mock Trace-VstsLeavingInvocation +Register-Mock Import-VstsLocStrings +Register-Mock EmitTelemetry +$variableSets = @( + @{ Clean = $false ; MaximumCpuCount = $false ; RestoreNugetPackages = $false ; LogProjectEvents = $false ; CreateLogFile = $false ; LogFileVerbosity = '' ; Debug = $false } + @{ Clean = $false ; MaximumCpuCount = $false ; RestoreNugetPackages = $false ; LogProjectEvents = $false ; CreateLogFile = $true ; LogFileVerbosity = '' ; Debug = $false } + @{ Clean = $false ; MaximumCpuCount = $false ; RestoreNugetPackages = $false ; LogProjectEvents = $true ; CreateLogFile = $false ; LogFileVerbosity = '' ; Debug = $false } + @{ Clean = $false ; MaximumCpuCount = $false ; RestoreNugetPackages = $true ; LogProjectEvents = $false ; CreateLogFile = $false ; LogFileVerbosity = '' ; Debug = $false } + @{ Clean = $false ; MaximumCpuCount = $true ; RestoreNugetPackages = $false ; LogProjectEvents = $false ; CreateLogFile = $false ; LogFileVerbosity = '' ; Debug = $false } + @{ Clean = $true ; MaximumCpuCount = $false ; RestoreNugetPackages = $false ; LogProjectEvents = $false ; CreateLogFile = $false ; LogFileVerbosity = '' ; Debug = $false } + @{ Clean = $false ; MaximumCpuCount = $false ; RestoreNuGetPackages = $false ; LogProjectEvents = $false ; CreateLogFile = $false ; LogFileVerbosity = '' ; Debug = $true } + @{ Clean = $false ; MaximumCpuCount = $false ; RestoreNuGetPackages = $false ; LogProjectEvents = $false ; CreateLogFile = $true ; LogFileVerbosity = 'detailed' ; Debug = $false } + @{ Clean = $false ; MaximumCpuCount = $false ; RestoreNuGetPackages = $false ; LogProjectEvents = $false ; CreateLogFile = $true ; LogFileVerbosity = 'detailed' ; Debug = $true } +) +foreach ($variableSet in $variableSets) { + Unregister-Mock Get-VstsInput + Unregister-Mock Get-VstsTaskVariable + Unregister-Mock Get-SolutionFiles + Unregister-Mock Format-MSBuildArguments + Unregister-Mock Select-MSBuildPath + Unregister-Mock Invoke-BuildTools + Register-Mock Get-VstsInput { 'Some input method' } -- -Name MSBuildLocationMethod + Register-Mock Get-VstsInput { 'Some input location' } -- -Name MSBuildLocation + Register-Mock Get-VstsInput { 'Some input arguments' } -- -Name MSBuildArguments + Register-Mock Get-VstsInput { 'Some input solution' } -- -Name Solution -Require + Register-Mock Get-VstsInput { 'Some input platform' } -- -Name Platform + Register-Mock Get-VstsInput { 'Some input configuration' } -- -Name Configuration + Register-Mock Get-VstsInput { $variableSet.Clean } -- -Name Clean -AsBool + Register-Mock Get-VstsInput { $variableSet.MaximumCpuCount } -- -Name MaximumCpuCount -AsBool + Register-Mock Get-VstsInput { $variableSet.RestoreNuGetPackages } -- -Name RestoreNuGetPackages -AsBool + Register-Mock Get-VstsInput { $variableSet.LogProjectEvents } -- -Name LogProjectEvents -AsBool + Register-Mock Get-VstsInput { $variableSet.CreateLogFile } -- -Name CreateLogFile -AsBool + Register-Mock Get-VstsInput { 'Some input version' } -- -Name MSBuildVersion + Register-Mock Get-VstsInput { 'Some input architecture' } -- -Name MSBuildArchitecture + Register-Mock Get-VstsInput { $variableSet.LogFileVerbosity } -- -Name LogFileVerbosity + Register-Mock Get-VstsTaskVariable { $variableSet.Debug } -- -Name System.Debug -AsBool + Register-Mock Get-SolutionFiles { 'Some solution 1', 'Some solution 2' } -- -Solution 'Some input solution' + Register-Mock Format-MSBuildArguments { 'Some formatted arguments' } -- -MSBuildArguments 'Some input arguments' -Platform 'Some input platform' -Configuration 'Some input configuration' -MaximumCpuCount: $variableSet.MaximumCpuCount + Register-Mock Select-MSBuildPath { 'Some location' } -- -Method 'Some input method' -Location 'Some input location' -PreferredVersion 'Some input version' -Architecture 'Some input architecture' + Register-Mock Invoke-BuildTools { 'Some build output line 1', 'Some build output line 2' } + + $ExpectedCreateLogFile = $variableSet.CreateLogFile + $ExpectedLogFileVerbosity = if ($variableSet.Debug) { 'diagnostic' } else { $variableSet.LogFileVerbosity } + + # Act. + $output = & $PSScriptRoot\..\MSBuild.ps1 + + # Assert. + Assert-AreEqual ('Some build output line 1', 'Some build output line 2') $output + Assert-WasCalled Invoke-BuildTools -- -NuGetRestore: $variableSet.RestoreNuGetPackages -SolutionFiles @('Some solution 1', 'Some solution 2') -MSBuildLocation 'Some location' -MSBuildArguments 'Some formatted arguments' -Clean: $variableSet.Clean -NoTimelineLogger: $(!$variableSet.LogProjectEvents) -CreateLogFile: $ExpectedCreateLogFile -LogFileVerbosity: $ExpectedLogFileVerbosity +} diff --git a/_generated/MSBuildV1_Node20/icon.png b/_generated/MSBuildV1_Node20/icon.png new file mode 100644 index 000000000000..b3ea2b5e7a30 Binary files /dev/null and b/_generated/MSBuildV1_Node20/icon.png differ diff --git a/_generated/MSBuildV1_Node20/icon.svg b/_generated/MSBuildV1_Node20/icon.svg new file mode 100644 index 000000000000..f08188b71022 --- /dev/null +++ b/_generated/MSBuildV1_Node20/icon.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/_generated/MSBuildV1_Node20/make.json b/_generated/MSBuildV1_Node20/make.json new file mode 100644 index 000000000000..5093abeb19ab --- /dev/null +++ b/_generated/MSBuildV1_Node20/make.json @@ -0,0 +1,33 @@ +{ + "rm": [ + { + "items": [ + "node_modules/azure-pipelines-tasks-msbuildhelpers/node_modules/azure-pipelines-task-lib" + ], + "options": "-Rf" + } + ], + "externals": { + "nugetv2": [ + { + "name": "VstsTaskSdk", + "version": "0.11.0", + "repository": "https://www.powershellgallery.com/api/v2/", + "cp": [ + { + "source": [ + "*.dll", + "*.ps1", + "*.psd1", + "*.psm1", + "lib.json", + "Strings" + ], + "dest": "ps_modules/VstsTaskSdk/", + "options": "-R" + } + ] + } + ] + } +} \ No newline at end of file diff --git a/_generated/MSBuildV1_Node20/msbuild.ts b/_generated/MSBuildV1_Node20/msbuild.ts new file mode 100644 index 000000000000..965eaa007572 --- /dev/null +++ b/_generated/MSBuildV1_Node20/msbuild.ts @@ -0,0 +1,85 @@ +import path = require('path'); +import tl = require('azure-pipelines-task-lib/task'); +import { ToolRunner } from 'azure-pipelines-task-lib/toolrunner'; +import msbuildHelpers = require('azure-pipelines-tasks-msbuildhelpers/msbuildhelpers'); +import { TelemetryPayload, emitTelemetry } from './telemetryHelper'; + +async function run() { + const telemetry = {} as TelemetryPayload; + try { + tl.setResourcePath(path.join(__dirname, 'task.json')); + + //read inputs + let solution: string = tl.getPathInput('solution', true, false); + let platform: string = tl.getInput('platform'); + let configuration: string = tl.getInput('configuration'); + let msbuildArguments: string = tl.getInput('msbuildArguments'); + let clean: boolean = tl.getBoolInput('clean'); + + // pass inputs to telemetry object + telemetry.configuration = configuration; + telemetry.platform = platform; + + let logsolutionEvents: boolean = tl.getBoolInput('logsolutionEvents'); + if (logsolutionEvents) { + tl.warning(tl.loc('RecordProjectDetailsOnlySupportedOnWindows')); + } + + let createLogFile: boolean = tl.getBoolInput('createLogFile'); + if (createLogFile) { + tl.warning(tl.loc('CreateLogFileOnlySupportedOnWindows')); + } + + let msbuildLocationMethod: string = tl.getInput('msbuildLocationMethod'); + if (!msbuildLocationMethod) { + msbuildLocationMethod = 'version'; + } + telemetry.msBuildLocationMethod = msbuildLocationMethod; + + let msbuildTool: string; + if (msbuildLocationMethod === 'version') { + let msbuildVersion: string = tl.getInput('msbuildVersion'); + telemetry.msBuildVersion = msbuildVersion; + msbuildTool = await msbuildHelpers.getMSBuildPath(msbuildVersion); + } + if (msbuildLocationMethod === 'location') { + msbuildTool = tl.getInput('msbuildLocation'); + } + + let filesList: string[] = tl.findMatch(null, solution, { followSymbolicLinks: false, followSpecifiedSymbolicLink: false, allowBrokenSymbolicLinks: false }, { matchBase: true }); + for (let file of filesList) { + if (clean) { + let cleanTool: ToolRunner = tl.tool(msbuildTool); + cleanTool.arg(file); + cleanTool.argIf(clean, '/t:Clean'); + cleanTool.argIf(platform, '/p:Platform=' + platform); + cleanTool.argIf(configuration, '/p:Configuration=' + configuration); + if (msbuildArguments) { + cleanTool.line(msbuildArguments); + } + await cleanTool.exec(); + } + + let buildTool: ToolRunner = tl.tool(msbuildTool); + buildTool.arg(file); + buildTool.argIf(platform, '/p:Platform=' + platform); + buildTool.argIf(configuration, '/p:Configuration=' + configuration); + if (msbuildArguments) { + buildTool.line(msbuildArguments); + } + + const startExecTime = new Date().getTime(); + await buildTool.exec(); + const endExecTime = new Date().getTime(); + + const executionTime = (endExecTime - startExecTime) / 1000; // need to convert from milliseconds to seconds + telemetry.msbuildExectionTimeSeconds = executionTime; + } + } catch (err) { + tl.setResult(tl.TaskResult.Failed, err); + } finally { + emitTelemetry(telemetry); + } +} + +run(); diff --git a/_generated/MSBuildV1_Node20/package-lock.json b/_generated/MSBuildV1_Node20/package-lock.json new file mode 100644 index 000000000000..c86547498753 --- /dev/null +++ b/_generated/MSBuildV1_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/_generated/MSBuildV1_Node20/package.json b/_generated/MSBuildV1_Node20/package.json new file mode 100644 index 000000000000..49fc8a112cb6 --- /dev/null +++ b/_generated/MSBuildV1_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/_generated/MSBuildV1_Node20/task.json b/_generated/MSBuildV1_Node20/task.json new file mode 100644 index 000000000000..4e7c30b97653 --- /dev/null +++ b/_generated/MSBuildV1_Node20/task.json @@ -0,0 +1,203 @@ +{ + "id": "C6C4C611-AA2E-4A33-B606-5EABA2196824", + "name": "MSBuild", + "friendlyName": "MSBuild", + "description": "Build with MSBuild", + "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/build/msbuild", + "helpMarkDown": "[Learn more about this task](https://go.microsoft.com/fwlink/?LinkID=613724)", + "category": "Build", + "visibility": [ + "Build" + ], + "author": "Microsoft Corporation", + "version": { + "Major": 1, + "Minor": 229, + "Patch": 4 + }, + "demands": [ + "msbuild" + ], + "minimumAgentVersion": "1.95.0", + "groups": [ + { + "name": "advanced", + "displayName": "Advanced", + "isExpanded": false + } + ], + "inputs": [ + { + "name": "solution", + "type": "filePath", + "label": "Project", + "defaultValue": "**/*.sln", + "required": true, + "helpMarkDown": "Relative path from repo root of the project(s) or solution(s) to run. Wildcards can be used. For example, `**/*.csproj` for all csproj files in all sub folders." + }, + { + "name": "msbuildLocationMethod", + "type": "radio", + "label": "MSBuild", + "required": false, + "defaultValue": "version", + "options": { + "version": "Version", + "location": "Specify Location" + } + }, + { + "name": "msbuildVersion", + "type": "pickList", + "label": "MSBuild Version", + "required": false, + "defaultValue": "latest", + "helpMarkDown": "If the preferred version cannot be found, the latest version found will be used instead. On an macOS agent, xbuild (Mono) will be used if version is lower than 15.0.", + "visibleRule": "msbuildLocationMethod = version", + "options": { + "latest": "Latest", + "17.0": "MSBuild 17.0", + "16.0": "MSBuild 16.0", + "15.0": "MSBuild 15.0", + "14.0": "MSBuild 14.0", + "12.0": "MSBuild 12.0", + "4.0": "MSBuild 4.0" + } + }, + { + "name": "msbuildArchitecture", + "type": "pickList", + "label": "MSBuild Architecture", + "defaultValue": "x86", + "required": false, + "helpMarkDown": "Optionally supply the architecture (x86, x64) of MSBuild to run.", + "visibleRule": "msbuildLocationMethod = version", + "options": { + "x86": "MSBuild x86", + "x64": "MSBuild x64" + } + }, + { + "name": "msbuildLocation", + "type": "string", + "label": "Path to MSBuild", + "defaultValue": "", + "required": false, + "helpMarkDown": "Optionally supply the path to MSBuild.", + "visibleRule": "msbuildLocationMethod = location" + }, + { + "name": "platform", + "type": "string", + "label": "Platform", + "defaultValue": "", + "required": false + }, + { + "name": "configuration", + "type": "string", + "label": "Configuration", + "defaultValue": "", + "required": false + }, + { + "name": "msbuildArguments", + "type": "string", + "label": "MSBuild Arguments", + "defaultValue": "", + "required": false, + "helpMarkDown": "Additional arguments passed to MSBuild (on Windows) and xbuild (on macOS)." + }, + { + "name": "clean", + "type": "boolean", + "label": "Clean", + "defaultValue": "false", + "required": false, + "helpMarkDown": "Run a clean build (/t:clean) prior to the build." + }, + { + "name": "maximumCpuCount", + "type": "boolean", + "label": "Build in Parallel", + "defaultValue": "false", + "required": false, + "groupName": "advanced", + "helpMarkDown": "If your MSBuild target configuration is compatible with building in parallel, you can optionally check this input to pass the /m switch to MSBuild (Windows only). If your target configuration is not compatible with building in parallel, checking this option may cause your build to result in file-in-use errors, or intermittent or inconsistent build failures." + }, + { + "name": "restoreNugetPackages", + "type": "boolean", + "label": "Restore NuGet Packages", + "defaultValue": "false", + "required": false, + "groupName": "advanced", + "helpMarkDown": "This option is deprecated. To restore NuGet packages, add a [NuGet](https://docs.microsoft.com/azure/devops/pipelines/tasks/package/nuget) task before the build." + }, + { + "name": "logProjectEvents", + "type": "boolean", + "label": "Record Project Details", + "defaultValue": "false", + "required": false, + "groupName": "advanced", + "helpMarkDown": "Optionally record timeline details for each project (Windows only)." + }, + { + "name": "createLogFile", + "type": "boolean", + "label": "Create Log File", + "defaultValue": "false", + "required": false, + "helpMarkDown": "Optionally create a log file (Windows only).", + "groupName": "advanced" + }, + { + "name": "logFileVerbosity", + "type": "pickList", + "label": "Log File Verbosity", + "defaultValue": "normal", + "required": false, + "helpMarkDown": "Optional log file verbosity.", + "groupName": "advanced", + "options": { + "quiet": "Quiet", + "minimal": "Minimal", + "normal": "Normal", + "detailed": "Detailed", + "diagnostic": "Diagnostic" + }, + "visibleRule": "createLogFile = true" + } + ], + "instanceNameFormat": "Build solution $(solution)", + "execution": { + "PowerShell3": { + "target": "MSBuild.ps1", + "platforms": [ + "windows" + ] + }, + "Node10": { + "target": "msbuild.js", + "argumentFormat": "" + }, + "Node16": { + "target": "msbuild.js", + "argumentFormat": "" + }, + "Node20": { + "target": "msbuild.js", + "argumentFormat": "" + } + }, + "messages": { + "RecordProjectDetailsOnlySupportedOnWindows": "`Record Project Details` is only supported on Windows.", + "CreateLogFileOnlySupportedOnWindows": "`Create Log File` is only supported on Windows.", + "MSB_BuildToolNotFound": "MSBuild or xbuild (Mono) were not found on the macOS or Linux agent." + }, + "_buildConfigMapping": { + "Default": "1.229.3", + "Node20-225": "1.229.4" + } +} \ No newline at end of file diff --git a/_generated/MSBuildV1_Node20/task.loc.json b/_generated/MSBuildV1_Node20/task.loc.json new file mode 100644 index 000000000000..c89c8d4eb150 --- /dev/null +++ b/_generated/MSBuildV1_Node20/task.loc.json @@ -0,0 +1,203 @@ +{ + "id": "C6C4C611-AA2E-4A33-B606-5EABA2196824", + "name": "MSBuild", + "friendlyName": "ms-resource:loc.friendlyName", + "description": "ms-resource:loc.description", + "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/build/msbuild", + "helpMarkDown": "ms-resource:loc.helpMarkDown", + "category": "Build", + "visibility": [ + "Build" + ], + "author": "Microsoft Corporation", + "version": { + "Major": 1, + "Minor": 229, + "Patch": 4 + }, + "demands": [ + "msbuild" + ], + "minimumAgentVersion": "1.95.0", + "groups": [ + { + "name": "advanced", + "displayName": "ms-resource:loc.group.displayName.advanced", + "isExpanded": false + } + ], + "inputs": [ + { + "name": "solution", + "type": "filePath", + "label": "ms-resource:loc.input.label.solution", + "defaultValue": "**/*.sln", + "required": true, + "helpMarkDown": "ms-resource:loc.input.help.solution" + }, + { + "name": "msbuildLocationMethod", + "type": "radio", + "label": "ms-resource:loc.input.label.msbuildLocationMethod", + "required": false, + "defaultValue": "version", + "options": { + "version": "Version", + "location": "Specify Location" + } + }, + { + "name": "msbuildVersion", + "type": "pickList", + "label": "ms-resource:loc.input.label.msbuildVersion", + "required": false, + "defaultValue": "latest", + "helpMarkDown": "ms-resource:loc.input.help.msbuildVersion", + "visibleRule": "msbuildLocationMethod = version", + "options": { + "latest": "Latest", + "17.0": "MSBuild 17.0", + "16.0": "MSBuild 16.0", + "15.0": "MSBuild 15.0", + "14.0": "MSBuild 14.0", + "12.0": "MSBuild 12.0", + "4.0": "MSBuild 4.0" + } + }, + { + "name": "msbuildArchitecture", + "type": "pickList", + "label": "ms-resource:loc.input.label.msbuildArchitecture", + "defaultValue": "x86", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.msbuildArchitecture", + "visibleRule": "msbuildLocationMethod = version", + "options": { + "x86": "MSBuild x86", + "x64": "MSBuild x64" + } + }, + { + "name": "msbuildLocation", + "type": "string", + "label": "ms-resource:loc.input.label.msbuildLocation", + "defaultValue": "", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.msbuildLocation", + "visibleRule": "msbuildLocationMethod = location" + }, + { + "name": "platform", + "type": "string", + "label": "ms-resource:loc.input.label.platform", + "defaultValue": "", + "required": false + }, + { + "name": "configuration", + "type": "string", + "label": "ms-resource:loc.input.label.configuration", + "defaultValue": "", + "required": false + }, + { + "name": "msbuildArguments", + "type": "string", + "label": "ms-resource:loc.input.label.msbuildArguments", + "defaultValue": "", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.msbuildArguments" + }, + { + "name": "clean", + "type": "boolean", + "label": "ms-resource:loc.input.label.clean", + "defaultValue": "false", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.clean" + }, + { + "name": "maximumCpuCount", + "type": "boolean", + "label": "ms-resource:loc.input.label.maximumCpuCount", + "defaultValue": "false", + "required": false, + "groupName": "advanced", + "helpMarkDown": "ms-resource:loc.input.help.maximumCpuCount" + }, + { + "name": "restoreNugetPackages", + "type": "boolean", + "label": "ms-resource:loc.input.label.restoreNugetPackages", + "defaultValue": "false", + "required": false, + "groupName": "advanced", + "helpMarkDown": "ms-resource:loc.input.help.restoreNugetPackages" + }, + { + "name": "logProjectEvents", + "type": "boolean", + "label": "ms-resource:loc.input.label.logProjectEvents", + "defaultValue": "false", + "required": false, + "groupName": "advanced", + "helpMarkDown": "ms-resource:loc.input.help.logProjectEvents" + }, + { + "name": "createLogFile", + "type": "boolean", + "label": "ms-resource:loc.input.label.createLogFile", + "defaultValue": "false", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.createLogFile", + "groupName": "advanced" + }, + { + "name": "logFileVerbosity", + "type": "pickList", + "label": "ms-resource:loc.input.label.logFileVerbosity", + "defaultValue": "normal", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.logFileVerbosity", + "groupName": "advanced", + "options": { + "quiet": "Quiet", + "minimal": "Minimal", + "normal": "Normal", + "detailed": "Detailed", + "diagnostic": "Diagnostic" + }, + "visibleRule": "createLogFile = true" + } + ], + "instanceNameFormat": "ms-resource:loc.instanceNameFormat", + "execution": { + "PowerShell3": { + "target": "MSBuild.ps1", + "platforms": [ + "windows" + ] + }, + "Node10": { + "target": "msbuild.js", + "argumentFormat": "" + }, + "Node16": { + "target": "msbuild.js", + "argumentFormat": "" + }, + "Node20": { + "target": "msbuild.js", + "argumentFormat": "" + } + }, + "messages": { + "RecordProjectDetailsOnlySupportedOnWindows": "ms-resource:loc.messages.RecordProjectDetailsOnlySupportedOnWindows", + "CreateLogFileOnlySupportedOnWindows": "ms-resource:loc.messages.CreateLogFileOnlySupportedOnWindows", + "MSB_BuildToolNotFound": "ms-resource:loc.messages.MSB_BuildToolNotFound" + }, + "_buildConfigMapping": { + "Default": "1.229.3", + "Node20-225": "1.229.4" + } +} \ No newline at end of file diff --git a/_generated/MSBuildV1_Node20/telemetryHelper.ts b/_generated/MSBuildV1_Node20/telemetryHelper.ts new file mode 100644 index 000000000000..2b613226d108 --- /dev/null +++ b/_generated/MSBuildV1_Node20/telemetryHelper.ts @@ -0,0 +1,25 @@ +import tl = require('azure-pipelines-task-lib/task'); +import * as semver from 'semver'; + +export interface TelemetryPayload { + msBuildVersion: string; + msBuildLocationMethod: string; + platform: string; + configuration: string; + msbuildExectionTimeSeconds: number; +} + +export function emitTelemetry(telemetryData: TelemetryPayload) { + try { + let agentVersion = tl.getVariable('Agent.Version'); + if (semver.gte(agentVersion, '2.120.0')) { + let telemetry = JSON.stringify(telemetryData); + + console.log(`##vso[telemetry.publish area=TaskHub;feature=MSBuildV1]${telemetry}`); + } else { + tl.debug(`Agent version of ( ${agentVersion} ) does not meet minimum requirements for telemetry`); + } + } catch (err) { + tl.debug(`Unable to log telemetry. Err:( ${err} )`); + } +} diff --git a/_generated/MSBuildV1_Node20/tsconfig.json b/_generated/MSBuildV1_Node20/tsconfig.json new file mode 100644 index 000000000000..0438b79f69ac --- /dev/null +++ b/_generated/MSBuildV1_Node20/tsconfig.json @@ -0,0 +1,6 @@ +{ + "compilerOptions": { + "target": "ES6", + "module": "commonjs" + } +} \ No newline at end of file diff --git a/_generated/MavenV3.versionmap.txt b/_generated/MavenV3.versionmap.txt index 17ff42b0c908..bf0393472d2a 100644 --- a/_generated/MavenV3.versionmap.txt +++ b/_generated/MavenV3.versionmap.txt @@ -1,2 +1,2 @@ -Default|3.229.0 -Node20-225|3.229.1 +Default|3.229.1 +Node20-225|3.229.2 diff --git a/_generated/MavenV3_Node20/task.json b/_generated/MavenV3_Node20/task.json index 2af689b9e8d8..b42abe7b240a 100644 --- a/_generated/MavenV3_Node20/task.json +++ b/_generated/MavenV3_Node20/task.json @@ -18,7 +18,7 @@ "version": { "Major": 3, "Minor": 229, - "Patch": 1 + "Patch": 2 }, "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": [ @@ -521,7 +521,7 @@ "NoTestResults": "No test result files matching %s were found, so publishing JUnit test results is being skipped." }, "_buildConfigMapping": { - "Default": "3.229.0", - "Node20-225": "3.229.1" + "Default": "3.229.1", + "Node20-225": "3.229.2" } } \ No newline at end of file diff --git a/_generated/MavenV3_Node20/task.loc.json b/_generated/MavenV3_Node20/task.loc.json index da90aeb95d2a..e6231a35b8b3 100644 --- a/_generated/MavenV3_Node20/task.loc.json +++ b/_generated/MavenV3_Node20/task.loc.json @@ -18,7 +18,7 @@ "version": { "Major": 3, "Minor": 229, - "Patch": 1 + "Patch": 2 }, "releaseNotes": "ms-resource:loc.releaseNotes", "demands": [ @@ -521,7 +521,7 @@ "NoTestResults": "ms-resource:loc.messages.NoTestResults" }, "_buildConfigMapping": { - "Default": "3.229.0", - "Node20-225": "3.229.1" + "Default": "3.229.1", + "Node20-225": "3.229.2" } } \ No newline at end of file diff --git a/_generated/NodeToolV0.versionmap.txt b/_generated/NodeToolV0.versionmap.txt new file mode 100644 index 000000000000..623498f87a5e --- /dev/null +++ b/_generated/NodeToolV0.versionmap.txt @@ -0,0 +1,2 @@ +Default|0.229.3 +Node20-225|0.229.4 diff --git a/_generated/NodeToolV0/Strings/resources.resjson/de-DE/resources.resjson b/_generated/NodeToolV0/Strings/resources.resjson/de-DE/resources.resjson new file mode 100644 index 000000000000..2d1a54311c21 --- /dev/null +++ b/_generated/NodeToolV0/Strings/resources.resjson/de-DE/resources.resjson @@ -0,0 +1,23 @@ +{ + "loc.friendlyName": "Installer für Node. js-Tools", + "loc.helpMarkDown": "[Weitere Informationen zu dieser Aufgabe](https://docs.microsoft.com/azure/devops/pipelines/tasks/tool/node-js) oder [Node-Dokumentation anzeigen](https://nodejs.org/docs/latest/api/documentation.html)", + "loc.description": "Hiermit wird die angegebene Versionsspezifikation von Node.js ermittelt oder heruntergeladen, zwischengespeichert und zu PATH hinzugefügt.", + "loc.instanceNameFormat": "Node $(versionSpec) verwenden", + "loc.group.displayName.advanced": "Erweitert", + "loc.input.label.versionSource": "Quelle der Version", + "loc.input.label.versionSpec": "Versionsangabe", + "loc.input.help.versionSpec": "Versionsangabe der abzurufenden Version. Beispiele: 6.x, 4.x, 6.10.0, >=6.10.0", + "loc.input.label.versionFilePath": "Pfad zur NVMRC-Datei", + "loc.input.help.versionFilePath": "Dateipfad zum Abrufen der Version. Beispiel: src/.nvmrc", + "loc.input.label.checkLatest": "Auf aktuelle Version überprüfen", + "loc.input.help.checkLatest": "Sucht online immer nach der letzten verfügbaren Version, die die Versionsangabe erfüllt. Dies ist in der Regel \"false\", sofern Sie nicht über ein spezifisches Szenario verfügen, bei dem Sie immer die aktuelle Version abrufen. Dadurch entstehen Downloadkosten, die unter Umständen nicht erforderlich sind, insbesondere beim gehosteten Buildpool.", + "loc.input.label.force32bit": "32-Bit-Version für x64-Agents verwenden", + "loc.input.help.force32bit": "Installiert die x86-Version von Node unabhängig von der CPU-Architektur des Agents.", + "loc.input.label.nodejsMirror": "Quelle für Node.js-Binärdateien festlegen", + "loc.input.help.nodejsMirror": "Verwenden Sie eine alternative Installationsspiegelung, wenn Sie die Node.js-Binärdateien beziehen.", + "loc.messages.ToolFailed": "Fehler bei der Toolinstallation: %s", + "loc.messages.TryRosetta": "Der Knoten für die Plattform \"%s\" und die Architektur \"%s\" wurde nicht gefunden. Es wird versucht, mit Rosetta2 zu installieren.", + "loc.messages.NodeVersionNotFound": "Die Knotenversion %s für die Plattform \"%s\" und die Architektur \"%s\" wurde nicht gefunden.", + "loc.messages.UnexpectedOS": "Unerwartetes Betriebssystem %s", + "loc.messages.AgentTempDirNotSet": "\"Agent.TempDirectory\" muss festgelegt werden." +} \ No newline at end of file diff --git a/_generated/NodeToolV0/Strings/resources.resjson/en-US/resources.resjson b/_generated/NodeToolV0/Strings/resources.resjson/en-US/resources.resjson new file mode 100644 index 000000000000..511d6e51e8a8 --- /dev/null +++ b/_generated/NodeToolV0/Strings/resources.resjson/en-US/resources.resjson @@ -0,0 +1,23 @@ +{ + "loc.friendlyName": "Node.js tool installer", + "loc.helpMarkDown": "[Learn more about this task](https://docs.microsoft.com/azure/devops/pipelines/tasks/tool/node-js) or [see the Node documentation](https://nodejs.org/docs/latest/api/documentation.html)", + "loc.description": "Finds or downloads and caches the specified version spec of Node.js and adds it to the PATH", + "loc.instanceNameFormat": "Use Node $(versionSpec)", + "loc.group.displayName.advanced": "Advanced", + "loc.input.label.versionSource": "Source of version", + "loc.input.label.versionSpec": "Version Spec", + "loc.input.help.versionSpec": "Version Spec of version to get. Examples: 6.x, 4.x, 6.10.0, >=6.10.0", + "loc.input.label.versionFilePath": "Path to the .nvmrc file", + "loc.input.help.versionFilePath": "File path to get version. Example: src/.nvmrc", + "loc.input.label.checkLatest": "Check for Latest Version", + "loc.input.help.checkLatest": "Always checks online for the latest available version that satisfies the version spec. This is typically false unless you have a specific scenario to always get latest. This will cause it to incur download costs when potentially not necessary, especially with the hosted build pool.", + "loc.input.label.force32bit": "Use 32 bit version on x64 agents", + "loc.input.help.force32bit": "Installs the x86 version of Node regardless of the CPU architecture of the agent.", + "loc.input.label.nodejsMirror": "Set source for Node.js binaries", + "loc.input.help.nodejsMirror": "Use an alternative installation mirror when sourcing the Node.js binaries.", + "loc.messages.ToolFailed": "Tool install failed: %s", + "loc.messages.TryRosetta": "Unable to find Node for platform %s and architecture %s. Trying to install with Rosetta2", + "loc.messages.NodeVersionNotFound": "Unable to find Node version %s for platform %s and architecture %s.", + "loc.messages.UnexpectedOS": "Unexpected OS %s", + "loc.messages.AgentTempDirNotSet": "Expected Agent.TempDirectory to be set." +} \ No newline at end of file diff --git a/_generated/NodeToolV0/Strings/resources.resjson/es-ES/resources.resjson b/_generated/NodeToolV0/Strings/resources.resjson/es-ES/resources.resjson new file mode 100644 index 000000000000..1e60a6103434 --- /dev/null +++ b/_generated/NodeToolV0/Strings/resources.resjson/es-ES/resources.resjson @@ -0,0 +1,23 @@ +{ + "loc.friendlyName": "Instalador de la herramienta Node.js", + "loc.helpMarkDown": "[Obtener más información acerca de esta tarea](https://docs.microsoft.com/azure/devops/pipelines/tasks/tool/node-js) o [consultar la documentación de Node](https://nodejs.org/docs/latest/api/documentation.html)", + "loc.description": "Busca o descarga y almacena en caché la especificación de versión indicada de Node.js y la agrega a PATH.", + "loc.instanceNameFormat": "Usar Node $(versionSpec)", + "loc.group.displayName.advanced": "Avanzado", + "loc.input.label.versionSource": "Origen de la versión", + "loc.input.label.versionSpec": "Especificación de versión", + "loc.input.help.versionSpec": "Especificación de la versión que debe obtenerse. Ejemplos: 6.x, 4.x, 6.10.0, >=6.10.0", + "loc.input.label.versionFilePath": "Ruta de acceso al archivo .nvmrc", + "loc.input.help.versionFilePath": "Ruta de acceso del archivo para obtener la versión. Ejemplo: src/.nvmrc", + "loc.input.label.checkLatest": "Comprobar la última versión", + "loc.input.help.checkLatest": "Comprueba siempre en línea la última versión disponible que cumple la especificación de versión. Este valor suele ser false a menos que tenga un escenario específico que deba obtener siempre la última versión. Esto dará lugar a costos de descarga, cuando puede que no sea necesario, especialmente con el grupo de compilación hospedado.", + "loc.input.label.force32bit": "Usar la versión de 32 bits en agentes x64", + "loc.input.help.force32bit": "Instala la versión x86 de Node, independientemente de la arquitectura de CPU del agente.", + "loc.input.label.nodejsMirror": "Establecimiento del origen de los archivos binarios de Node.js", + "loc.input.help.nodejsMirror": "Use un reflejo de instalación alternativo al obtener los archivos binarios de Node.js.", + "loc.messages.ToolFailed": "No se pudo instalar la herramienta: %s", + "loc.messages.TryRosetta": "No se encuentra ningún node para la plataforma %s ni la arquitectura %s. Intentando instalar con Rosetta2", + "loc.messages.NodeVersionNotFound": "No se encuentra el %s de versión del nodo para la plataforma %s y la arquitectura %s.", + "loc.messages.UnexpectedOS": "Sistema operativo %s inesperado", + "loc.messages.AgentTempDirNotSet": "Se esperaba que Agent.TempDirectory estuviera establecido." +} \ No newline at end of file diff --git a/_generated/NodeToolV0/Strings/resources.resjson/fr-FR/resources.resjson b/_generated/NodeToolV0/Strings/resources.resjson/fr-FR/resources.resjson new file mode 100644 index 000000000000..6ee06c83d67c --- /dev/null +++ b/_generated/NodeToolV0/Strings/resources.resjson/fr-FR/resources.resjson @@ -0,0 +1,23 @@ +{ + "loc.friendlyName": "Programme d'installation de l'outil Node.js", + "loc.helpMarkDown": "[En savoir plus sur cette tâche](https://docs.microsoft.com/azure/devops/pipelines/tasks/tool/node-js) ou [consulter la documentation de Node](https://nodejs.org/docs/latest/api/documentation.html)", + "loc.description": "Recherche ou télécharge et met en cache la version spécifiée de Node.js, puis l'ajoute à PATH", + "loc.instanceNameFormat": "Utiliser Node $(versionSpec)", + "loc.group.displayName.advanced": "Avancé", + "loc.input.label.versionSource": "Source de la version", + "loc.input.label.versionSpec": "Spécification de version", + "loc.input.help.versionSpec": "Spécification de version de la version à obtenir. Exemples : 6.x, 4.x, 6.10.0, >=6.10.0", + "loc.input.label.versionFilePath": "Chemin du fichier .nvmrc", + "loc.input.help.versionFilePath": "Chemin d’accès au fichier pour obtenir la version. Exemple : src/.nvmrc", + "loc.input.label.checkLatest": "Rechercher la dernière version", + "loc.input.help.checkLatest": "Recherche toujours en ligne la dernière version disponible répondant à la spécification de version. Cela n'est généralement pas le cas, sauf si vous disposez d'un scénario spécifique visant à obtenir toujours la dernière version. Cela peut entraîner des coûts de téléchargement inutiles, en particulier avec le pool de builds hébergé.", + "loc.input.label.force32bit": "Utiliser la version 32 bits sur les agents x64", + "loc.input.help.force32bit": "Installe la version x86 de Node quelle que soit l'architecture du processeur de l'agent.", + "loc.input.label.nodejsMirror": "Définir la source des fichiers binaires Node.js", + "loc.input.help.nodejsMirror": "Utilisez un autre miroir d’installation pour approvisionner les fichiers binaires Node.js.", + "loc.messages.ToolFailed": "Échec de l'installation de l'outil : %s", + "loc.messages.TryRosetta": "Nœud introuvable pour la %s de plateforme et l'%s d’architecture. Tentative d’installation avec Rosetta2", + "loc.messages.NodeVersionNotFound": "Impossible de trouver le %s de version du nœud pour la %s d’architecture et de %s de plateforme.", + "loc.messages.UnexpectedOS": "Système d’exploitation inattendu %s", + "loc.messages.AgentTempDirNotSet": "Agent.TempDirectory est censé être défini." +} \ No newline at end of file diff --git a/_generated/NodeToolV0/Strings/resources.resjson/it-IT/resources.resjson b/_generated/NodeToolV0/Strings/resources.resjson/it-IT/resources.resjson new file mode 100644 index 000000000000..4a893ae4b854 --- /dev/null +++ b/_generated/NodeToolV0/Strings/resources.resjson/it-IT/resources.resjson @@ -0,0 +1,23 @@ +{ + "loc.friendlyName": "Programma di installazione strumento Node.js", + "loc.helpMarkDown": "[Altre informazioni su questa attività](https://docs.microsoft.com/azure/devops/pipelines/tasks/tool/node-js). In alternativa [vedere la documentazione di Node](https://nodejs.org/docs/latest/api/documentation.html)", + "loc.description": "Trova o scarica e memorizza nella cache l'identificatore di versione specificato di Node.js lo aggiunge a PATH.", + "loc.instanceNameFormat": "Usa Node $(versionSpec)", + "loc.group.displayName.advanced": "Avanzate", + "loc.input.label.versionSource": "Origine della versione", + "loc.input.label.versionSpec": "Identificatore di versione", + "loc.input.help.versionSpec": "Identificatore della versione da scaricare, ad esempio: 6.x, 4.x, 6.10.0, >=6.10.0", + "loc.input.label.versionFilePath": "Percorso del file con estensione nvmrc", + "loc.input.help.versionFilePath": "Percorso del file per ottenere la versione. Esempio: src/.nvmrc", + "loc.input.label.checkLatest": "Controlla disponibilità di versioni più recenti", + "loc.input.help.checkLatest": "Verifica sempre online se è disponibile una versione più recente che soddisfi l'identificatore di versione. Il valore di questa opzione è in genere false a meno che non sia stato predisposto uno scenario specifico per scaricare sempre la versione più recente. Questa opzione può comportare costi di download potenzialmente non necessari, in particolare con il pool di compilazione ospitato.", + "loc.input.label.force32bit": "Usa la versione a 32 bit in agenti x64", + "loc.input.help.force32bit": "Installa la versione x86 di Node indipendentemente dall'architettura della CPU dell'agente.", + "loc.input.label.nodejsMirror": "Imposta origine per file binari Node.js", + "loc.input.help.nodejsMirror": "Usare un mirror di installazione alternativo per l'acquisizione dei file binari di Node.js.", + "loc.messages.ToolFailed": "L'installazione dello strumento non è riuscita: %s", + "loc.messages.TryRosetta": "Non è possibile trovare il nodo per la piattaforma %s e l'architettura %s. Tentativo di installazione con Rosetta2", + "loc.messages.NodeVersionNotFound": "Non è possibile trovare la versione %s del nodo per la piattaforma %s e l'architettura %s.", + "loc.messages.UnexpectedOS": "Sistema operativo imprevisto %s", + "loc.messages.AgentTempDirNotSet": "Elemento Agent.TempDirectory previsto da impostare." +} \ No newline at end of file diff --git a/_generated/NodeToolV0/Strings/resources.resjson/ja-JP/resources.resjson b/_generated/NodeToolV0/Strings/resources.resjson/ja-JP/resources.resjson new file mode 100644 index 000000000000..d99fe14423ef --- /dev/null +++ b/_generated/NodeToolV0/Strings/resources.resjson/ja-JP/resources.resjson @@ -0,0 +1,23 @@ +{ + "loc.friendlyName": "Node.js ツール インストーラー", + "loc.helpMarkDown": "[このタスクの詳細を表示](https://docs.microsoft.com/azure/devops/pipelines/tasks/tool/node-js)、または [Node ドキュメントを参照](https://nodejs.org/docs/latest/api/documentation.html)", + "loc.description": "Node.js の指定されたバージョン仕様を検索またはダウンロードしてキャッシュし、それを PATH に追加します", + "loc.instanceNameFormat": "Node $(versionSpec) の使用", + "loc.group.displayName.advanced": "詳細", + "loc.input.label.versionSource": "バージョンのソース", + "loc.input.label.versionSpec": "バージョンの仕様", + "loc.input.help.versionSpec": "取得するバージョンのバージョン仕様。例: 6.x、4.x、6.10.0、6.10.0 以上", + "loc.input.label.versionFilePath": ".nvmrc ファイルへのパス", + "loc.input.help.versionFilePath": "バージョンを取得するためのファイル パス。 例: src/.nvmrc", + "loc.input.label.checkLatest": "最新バージョンのチェック", + "loc.input.help.checkLatest": "バージョン仕様を満たす利用可能な最新バージョンを常にオンラインで確認します。これは false にするのが一般的ですが、常に最新版を取得する特定のシナリオの場合は例外です。これにより、実際には必要でない場合にもダウンロードのコストが発生することになります (ホストされたビルド プールの場合は特にそう言えます)。", + "loc.input.label.force32bit": "x64 エージェントで 32 ビット バージョンを使用する", + "loc.input.help.force32bit": "エージェントの CPU アーキテクチャに関係なく、Node の x86 バージョンをインストールします。", + "loc.input.label.nodejsMirror": "Node.js バイナリのソースを設定する", + "loc.input.help.nodejsMirror": "Node.js バイナリをソース化するときは、代替インストール ミラーを使用します。", + "loc.messages.ToolFailed": "ツールをインストールできませんでした: %s", + "loc.messages.TryRosetta": "プラットフォーム %s およびアーキテクチャ %s のノードが見つかりません。Rosetta2 でインストールしようとしています", + "loc.messages.NodeVersionNotFound": "プラットフォーム %s とアーキテクチャ %s のノード バージョン %s が見つかりません。", + "loc.messages.UnexpectedOS": "予期しない OS %s", + "loc.messages.AgentTempDirNotSet": "Agent.TempDirectory を設定する必要があります。" +} \ No newline at end of file diff --git a/_generated/NodeToolV0/Strings/resources.resjson/ko-KR/resources.resjson b/_generated/NodeToolV0/Strings/resources.resjson/ko-KR/resources.resjson new file mode 100644 index 000000000000..c8f7a6d3e5f6 --- /dev/null +++ b/_generated/NodeToolV0/Strings/resources.resjson/ko-KR/resources.resjson @@ -0,0 +1,23 @@ +{ + "loc.friendlyName": "Node.js 도구 설치 관리자", + "loc.helpMarkDown": "[이 작업에 대한 자세한 정보](https://docs.microsoft.com/azure/devops/pipelines/tasks/tool/node-js) 또는 [Node 설명서 참조](https://nodejs.org/docs/latest/api/documentation.html)", + "loc.description": "지정된 버전 사양의 Node.js를 찾거나 다운로드하여 캐시하고 PATH에 추가합니다.", + "loc.instanceNameFormat": "노드 $(versionSpec) 사용", + "loc.group.displayName.advanced": "고급", + "loc.input.label.versionSource": "버전 원본", + "loc.input.label.versionSpec": "버전 사양", + "loc.input.help.versionSpec": "다운로드할 버전의 버전 사양입니다. 예: 6.x, 4.x, 6.10.0, >=6.10.0", + "loc.input.label.versionFilePath": ".nvmrc 파일의 경로", + "loc.input.help.versionFilePath": "버전을 가져올 파일 경로입니다. 예: src/.nvmrc", + "loc.input.label.checkLatest": "최신 버전 확인", + "loc.input.help.checkLatest": "버전 사양을 충족하는 최신 사용 가능 버전인지 항상 온라인으로 검사합니다. 항상 최신 버전을 다운로드하는 특정 시나리오가 아닌 한 일반적으로 false로 지정됩니다. 이로 인해 잠재적으로 필요하지 않은 경우, 특히 호스팅된 빌드 풀에서는 다운로드 비용이 발생할 수 있습니다.", + "loc.input.label.force32bit": "x64 에이전트에서 32비트 버전 사용", + "loc.input.help.force32bit": "에이전트의 CPU 아키텍처와 관계없이 x86 버전의 Node를 설치합니다.", + "loc.input.label.nodejsMirror": "Node.js 이진 파일의 원본 설정", + "loc.input.help.nodejsMirror": "Node.js 이진 파일을 소싱할 때 대체 설치 미러를 사용합니다.", + "loc.messages.ToolFailed": "도구 설치 실패: %s", + "loc.messages.TryRosetta": "플랫폼 %s 및 아키텍처 %s에 대한 노드를 찾을 수 없습니다. Rosetta2로 설치하는 중", + "loc.messages.NodeVersionNotFound": "플랫폼 %s 및 아키텍처 %s에 대한 노드 버전 %s을(를) 찾을 수 없습니다.", + "loc.messages.UnexpectedOS": "예기치 않은 OS %s", + "loc.messages.AgentTempDirNotSet": "Agent.TempDirectory가 설정될 것으로 예상됩니다." +} \ No newline at end of file diff --git a/_generated/NodeToolV0/Strings/resources.resjson/ru-RU/resources.resjson b/_generated/NodeToolV0/Strings/resources.resjson/ru-RU/resources.resjson new file mode 100644 index 000000000000..030c9bb303d7 --- /dev/null +++ b/_generated/NodeToolV0/Strings/resources.resjson/ru-RU/resources.resjson @@ -0,0 +1,23 @@ +{ + "loc.friendlyName": "Установщик средств Node.js", + "loc.helpMarkDown": "[См. дополнительные сведения об этой задаче](https://docs.microsoft.com/azure/devops/pipelines/tasks/tool/node-js) или [документацию по Node](https://nodejs.org/docs/latest/api/documentation.html)", + "loc.description": "Находит либо скачивает и кэширует указанную спецификацию версии Node.js и добавляет ее в PATH", + "loc.instanceNameFormat": "Использовать Node $(versionSpec)", + "loc.group.displayName.advanced": "Дополнительно", + "loc.input.label.versionSource": "Источник версии", + "loc.input.label.versionSpec": "Спецификатор версии", + "loc.input.help.versionSpec": "Спецификатор для версии, которую необходимо получить. Примеры: 6.x, 4.x, 6.10.0, >=6.10.0", + "loc.input.label.versionFilePath": "Путь к NVMRC-файлу", + "loc.input.help.versionFilePath": "Путь к файлу для получения версии. Пример: src/.nvmrc", + "loc.input.label.checkLatest": "Проверить наличие последней версии", + "loc.input.help.checkLatest": "Всегда проверяет наличие в Интернете актуальной версии, соответствующей спецификатору версии. Обычно задано значение \"false\", кроме случаев, когда имеется определенный сценарий всегда получать актуальную версию. Когда практическая необходимость в этом отсутствует, особенно в случае размещенного пула сборок, может взиматься дополнительная плата за загрузку.", + "loc.input.label.force32bit": "Использовать 32-разрядную версию на 64-разрядных агентах", + "loc.input.help.force32bit": "Устанавливает 32-разрядную версию Node независимо от архитектуры ЦП агента.", + "loc.input.label.nodejsMirror": "Настроить источник для двоичных файлов Node.js", + "loc.input.help.nodejsMirror": "Используйте альтернативное зеркало установки при использовании двоичных файлов Node.js в качестве источников.", + "loc.messages.ToolFailed": "Сбой установки инструмента: %s", + "loc.messages.TryRosetta": "Не удалось найти Node для платформы %s и архитектуры %s. Попытка установки с помощью Rosetta2", + "loc.messages.NodeVersionNotFound": "Не удалось найти версию Node %s для платформы %s и архитектуры %s.", + "loc.messages.UnexpectedOS": "Непредвиденная ОС %s", + "loc.messages.AgentTempDirNotSet": "Переменная Agent.TempDirectory должна быть задана." +} \ No newline at end of file diff --git a/_generated/NodeToolV0/Strings/resources.resjson/zh-CN/resources.resjson b/_generated/NodeToolV0/Strings/resources.resjson/zh-CN/resources.resjson new file mode 100644 index 000000000000..3402e7284e65 --- /dev/null +++ b/_generated/NodeToolV0/Strings/resources.resjson/zh-CN/resources.resjson @@ -0,0 +1,23 @@ +{ + "loc.friendlyName": "Node.js 工具安装程序", + "loc.helpMarkDown": "[详细了解此任务](https://docs.microsoft.com/azure/devops/pipelines/tasks/tool/node-js)或[参阅 Node 文档](https://nodejs.org/docs/latest/api/documentation.html)", + "loc.description": "查找或下载并缓存指定的 Node.js 版本规范,并将其添加到 PATH", + "loc.instanceNameFormat": "使用节点 $(versionSpec)", + "loc.group.displayName.advanced": "高级", + "loc.input.label.versionSource": "版本源", + "loc.input.label.versionSpec": "版本规范", + "loc.input.help.versionSpec": "要获取的版本的版本规范。例如: 6.x, 4.x, 6.10.0, >=6.10.0", + "loc.input.label.versionFilePath": ".nvmrc 文件的路径", + "loc.input.help.versionFilePath": "用于获取版本的文件路径。示例: src/.nvmrc", + "loc.input.label.checkLatest": "检查是否有最新版本", + "loc.input.help.checkLatest": "始终联机检查是否有满足版本规范的最新可用版本。这通常无法实现,除非有特定的解决方案可以始终获取最新版本。这样会在可能没有必要的情况下,特别是在使用托管生成池时产生下载费用。", + "loc.input.label.force32bit": "在 x64 代理上使用 32 位版本", + "loc.input.help.force32bit": "安装 x86 版本的 Node,不考虑代理的 CPU 体系结构。", + "loc.input.label.nodejsMirror": "设置 Node.js 二进制文件的源", + "loc.input.help.nodejsMirror": "在采购 Node.js 二进制文件时,请使用备用安装镜像。", + "loc.messages.ToolFailed": "工具安装失败: %s", + "loc.messages.TryRosetta": "找不到平台 %s 和体系结构 %s 的节点。尝试使用 Rosetta2 进行安装", + "loc.messages.NodeVersionNotFound": "找不到平台 %s 和体系结构 %s 的节点版本 %s。", + "loc.messages.UnexpectedOS": "意外的 OS %s", + "loc.messages.AgentTempDirNotSet": "应设置 Agent.TempDirectory。" +} \ No newline at end of file diff --git a/_generated/NodeToolV0/Strings/resources.resjson/zh-TW/resources.resjson b/_generated/NodeToolV0/Strings/resources.resjson/zh-TW/resources.resjson new file mode 100644 index 000000000000..08bb75d894fd --- /dev/null +++ b/_generated/NodeToolV0/Strings/resources.resjson/zh-TW/resources.resjson @@ -0,0 +1,23 @@ +{ + "loc.friendlyName": "Node.js 工具安裝程式", + "loc.helpMarkDown": "[深入了解此工作](https://docs.microsoft.com/azure/devops/pipelines/tasks/tool/node-js)或[參閱 Node 文件](https://nodejs.org/docs/latest/api/documentation.html)", + "loc.description": "尋找或下載並快取指定版本規格的 Node.js,然後將其新增到 PATH。", + "loc.instanceNameFormat": "使用 Node $(versionSpec)", + "loc.group.displayName.advanced": "進階", + "loc.input.label.versionSource": "版本來源", + "loc.input.label.versionSpec": "版本指定", + "loc.input.help.versionSpec": "要取得之版本的版本規格。例如: 6.x、4.x、6.10.0、>=6.10.0", + "loc.input.label.versionFilePath": ".nvmrc 檔案的路徑", + "loc.input.help.versionFilePath": "要取得版本的檔案路徑。範例: src/.nvmrc", + "loc.input.label.checkLatest": "檢查最新版本", + "loc.input.help.checkLatest": "一律檢查網路上有無最新的版本符合版本規格。除非特定的情況必須取得最新版本,否則不建議執行此動作。若非必要,這可能會衍生下載費用,特別是對託管的組建集區。", + "loc.input.label.force32bit": "在 x64 代理程式上使用 32 位元版本", + "loc.input.help.force32bit": "無論代理程式的 CPU 結構為何,皆安裝 x86 版的節點。", + "loc.input.label.nodejsMirror": "設定 Node.js 二進位檔的來源", + "loc.input.help.nodejsMirror": "取得 Node.js 二進位檔時,請使用替代的安裝鏡像。", + "loc.messages.ToolFailed": "工具安裝失敗: %s", + "loc.messages.TryRosetta": "找不到適用於平台 %s 與架構 %s 的 Node。正在嘗試使用 Rosetta2 安裝", + "loc.messages.NodeVersionNotFound": "找不到適用於平台 %s 與架構 %s 的 Node 版本 %s。", + "loc.messages.UnexpectedOS": "未預期的作業系統 %s", + "loc.messages.AgentTempDirNotSet": "應設定 Agent.TempDirectorty。" +} \ No newline at end of file diff --git a/_generated/NodeToolV0/Tests/L0.ts b/_generated/NodeToolV0/Tests/L0.ts new file mode 100644 index 000000000000..6eceb92895d9 --- /dev/null +++ b/_generated/NodeToolV0/Tests/L0.ts @@ -0,0 +1,100 @@ +import assert = require('assert'); +import os = require('os'); +import path = require('path'); +import * as ttm from 'azure-pipelines-task-lib/mock-test'; + +describe('NodeTool Suite', function () { + this.timeout(60000); + + function runValidations(validator: () => void, tr, done) { + try { + validator(); + done(); + } + catch (error) { + console.log("STDERR", tr.stderr); + console.log("STDOUT", tr.stdout); + done(error); + } + } + + it('Succeeds when the first download is available', (done: Mocha.Done) => { + this.timeout(5000); + + let tp: string = path.join(__dirname, 'L0FirstDownloadSuccess.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + runValidations(() => { + assert(tr.succeeded, 'NodeTool should have succeeded.'); + assert(tr.stderr.length === 0, 'NodeTool should not have written to stderr'); + }, tr, done); + }); + + it('Succeeds when the second download is available', (done: Mocha.Done) => { + this.timeout(5000); + + let tp: string = path.join(__dirname, 'L0SecondDownloadSuccess.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + runValidations(() => { + if (os.platform() === 'win32') { + assert(tr.succeeded, 'NodeTool should have succeeded.'); + assert(tr.stderr.length === 0, 'NodeTool should not have written to stderr'); + } else { + assert(tr.failed, 'NodeTool should have failed after the first download failure for non-Windows platforms.'); + } + }, tr, done); + }); + + it('Succeeds when the third download is available', (done: Mocha.Done) => { + this.timeout(5000); + + let tp: string = path.join(__dirname, 'L0ThirdDownloadSuccess.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + runValidations(() => { + if (os.platform() === 'win32') { + assert(tr.succeeded, 'NodeTool should have succeeded.'); + assert(tr.stderr.length === 0, 'NodeTool should not have written to stderr'); + } else { + assert(tr.failed, 'NodeTool should have failed after the first download failure for non-Windows platforms.'); + } + }, tr, done); + }); + + it('Removes "v" prefixes when evaluating latest version', (done: Mocha.Done) => { + this.timeout(5000); + + let tp: string = path.join(__dirname, 'L0GetsLatestVersion.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + runValidations(() => { + assert(tr.succeeded, 'NodeTool should have succeeded.'); + assert(tr.stderr.length === 0, 'NodeTool should not have written to stderr'); + }, tr, done); + }); + + it('Read node version from file', (done: Mocha.Done) => { + this.timeout(5000); + + let tp: string = path.join(__dirname, 'L0ReadVersionFromFileSuccess.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + runValidations(() => { + assert(tr.succeeded, 'NodeTool should have succeeded.'); + assert(tr.stderr.length === 0, 'NodeTool should not have written to stderr'); + }, tr, done); + }); + + +}); \ No newline at end of file diff --git a/_generated/NodeToolV0/Tests/L0FirstDownloadSuccess.ts b/_generated/NodeToolV0/Tests/L0FirstDownloadSuccess.ts new file mode 100644 index 000000000000..eaa25eb003b3 --- /dev/null +++ b/_generated/NodeToolV0/Tests/L0FirstDownloadSuccess.ts @@ -0,0 +1,84 @@ +import ma = require('azure-pipelines-task-lib/mock-answer'); +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import os = require('os'); +import path = require('path'); + +let taskPath = path.join(__dirname, '..', 'nodetool.js'); +let tmr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tmr.setInput('versionSource', 'spec'); +tmr.setInput('versionSpec', '11.3.0'); +tmr.setInput('checkLatest', 'false'); +tmr.setInput('nodejsMirror', 'https://nodejs.org/dist'); + +let a: ma.TaskLibAnswers = { + "assertAgent": { + "2.115.1": true + }}; +tmr.setAnswers(a); + + +//Create assertAgent and getVariable mocks +const tl = require('azure-pipelines-task-lib/mock-task'); +const tlClone = Object.assign({}, tl); +tlClone.getVariable = function(variable: string) { + if (variable.toLowerCase() == 'agent.tempdirectory') { + return 'temp'; + } + return null; +}; +tlClone.assertAgent = function(variable: string) { + return; +}; +tmr.registerMock('azure-pipelines-task-lib/mock-task', tlClone); + +//Create tool-lib mock +tmr.registerMock('azure-pipelines-tool-lib/tool', { + isExplicitVersion: function(versionSpec) { + return false; + }, + findLocalTool: function(toolName, versionSpec) { + if (toolName != 'node') { + throw new Error('Searching for wrong tool'); + } + return false; + }, + evaluateVersions: function(versions, versionSpec) { + let version: string; + for (let i = versions.length - 1; i >= 0; i--) { + let potential: string = versions[i]; + let satisfied: boolean = potential === '11.3.0'; + if (satisfied) { + version = potential; + break; + } + } + return version; + }, + cleanVersion: function(version) { + return '11.3.0'; + }, + downloadTool(url) { + if (url === `https://nodejs.org/dist/v11.3.0/node-v11.3.0-win-${os.arch()}.7z` || + url === `https://nodejs.org/dist/v11.3.0/node-v11.3.0-${os.platform()}-${os.arch()}.tar.gz`) { + return 'location'; + } + else { + throw new Error('Incorrect URL'); + } + }, + extract7z(downloadPath, extPath, _7zPath) { + return 'extPath'; + }, + extractTar(downloadPath, extPath, _7zPath) { + return 'extPath'; + }, + cacheDir(dir, tool, version) { + return 'path to tool'; + }, + prependPath(toolPath) { + return; + } +}); + +tmr.run(); \ No newline at end of file diff --git a/_generated/NodeToolV0/Tests/L0GetsLatestVersion.ts b/_generated/NodeToolV0/Tests/L0GetsLatestVersion.ts new file mode 100644 index 000000000000..a3c31d7417f7 --- /dev/null +++ b/_generated/NodeToolV0/Tests/L0GetsLatestVersion.ts @@ -0,0 +1,54 @@ +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import assert = require('assert'); +import path = require('path'); + +let taskPath = path.join(__dirname, '..', 'nodetool.js'); +let tmr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tmr.setInput('versionSource', 'spec'); +tmr.setInput('versionSpec', '>=12.0.0'); +tmr.setInput('checkLatest', 'true'); +tmr.setInput('nodejsMirror', 'https://nodejs.org/dist'); + +//Create tool-lib mock +tmr.registerMock('azure-pipelines-tool-lib/tool', { + isExplicitVersion: function() { + return false; + }, + evaluateVersions: function(versions: string[], versionSpec) { + const invalidVersions = versions.filter(v => !/^\d+\.\d+\.\d+$/.test(v)); + assert(invalidVersions.length === 0, "Invalid versions passed to evaluateVersions"); + return "12.8.0"; + }, + cleanVersion: function(version: string) { + return version.replace(/^v/i, ""); + }, + findLocalTool: function(toolName, versionSpec) { + assert(versionSpec === "v12.8.0", "Version returned should begin with 'v'"); + return "/path/to/node"; + }, + prependPath(toolPath) { + return; + } +}); + +tmr.registerMock('typed-rest-client/RestClient', { + RestClient: function() { + return { + get: async function(url, options) { + const versions = [ + {"version":"v12.8.0","date":"2019-08-06","files":["aix-ppc64","headers","linux-arm64","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-x64-pkg","osx-x64-tar","src","sunos-x64","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"npm":"6.10.2","v8":"7.5.288.22","uv":"1.30.1","zlib":"1.2.11","openssl":"1.1.1c","modules":"72","lts":false,"security":false}, + {"version":"v12.7.0","date":"2019-07-23","files":["aix-ppc64","headers","linux-arm64","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-x64-pkg","osx-x64-tar","src","sunos-x64","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"npm":"6.10.0","v8":"7.5.288.22","uv":"1.30.1","zlib":"1.2.11","openssl":"1.1.1c","modules":"72","lts":false,"security":false}, + {"version":"v11.15.0","date":"2019-04-30","files":["aix-ppc64","headers","linux-arm64","linux-armv6l","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-x64-pkg","osx-x64-tar","src","sunos-x64","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"npm":"6.7.0","v8":"7.0.276.38","uv":"1.27.0","zlib":"1.2.11","openssl":"1.1.1b","modules":"67","lts":false,"security":false}, + {"version":"v11.14.0","date":"2019-04-10","files":["aix-ppc64","headers","linux-arm64","linux-armv6l","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-x64-pkg","osx-x64-tar","src","sunos-x64","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"npm":"6.7.0","v8":"7.0.276.38","uv":"1.27.0","zlib":"1.2.11","openssl":"1.1.1b","modules":"67","lts":false,"security":false} + ] + + return { + result: versions + }; + } + } + } +}); + +tmr.run(); \ No newline at end of file diff --git a/_generated/NodeToolV0/Tests/L0ReadVersionFromFileSuccess.ts b/_generated/NodeToolV0/Tests/L0ReadVersionFromFileSuccess.ts new file mode 100644 index 000000000000..bd6bc7a07d67 --- /dev/null +++ b/_generated/NodeToolV0/Tests/L0ReadVersionFromFileSuccess.ts @@ -0,0 +1,91 @@ +import ma = require('azure-pipelines-task-lib/mock-answer'); +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import os = require('os'); +import path = require('path'); +import fs = require('fs'); + +let taskPath = path.join(__dirname, '..', 'nodetool.js'); +let tmr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tmr.setInput('versionSource', 'fromFile'); +tmr.setInput('versionFilePath', 'src/.nvmrc'); +tmr.setInput('checkLatest', 'false'); +tmr.setInput('nodejsMirror', 'https://nodejs.org/dist'); + +let a: ma.TaskLibAnswers = { + "assertAgent": { + "2.115.1": true + }}; +tmr.setAnswers(a); + + +//Create assertAgent and getVariable mocks +const tl = require('azure-pipelines-task-lib/mock-task'); +const tlClone = Object.assign({}, tl); +tlClone.getVariable = function(variable: string) { + if (variable.toLowerCase() == 'agent.tempdirectory') { + return 'temp'; + } + return null; +}; +tlClone.assertAgent = function(variable: string) { + return; +}; +tmr.registerMock('azure-pipelines-task-lib/mock-task', tlClone); + +//create fs mock +tmr.registerMock('fs', { + ...fs, + readFileSync: function (path, options) { + if (path != 'src/.nvmrc') { + return fs.readFileSync(path, options); + } + + return '11.3.0'; + } +}); + +//Create tool-lib mock +tmr.registerMock('azure-pipelines-tool-lib/tool', { + isExplicitVersion: function(versionSpec) { + return false; + }, + findLocalTool: function(toolName, versionSpec) { + if (toolName != 'node') { + throw new Error('Searching for wrong tool'); + } + return false; + }, + evaluateVersions: function(versions, versionSpec) { + if (versionSpec !== '11.3.0') { + throw new Error(`Incorrect versionSpec: ${versionSpec}`); + } + return versionSpec; + }, + cleanVersion: function(version) { + return '11.3.0'; + }, + downloadTool(url) { + if (url === `https://nodejs.org/dist/v11.3.0/node-v11.3.0-win-${os.arch()}.7z` || + url === `https://nodejs.org/dist/v11.3.0/node-v11.3.0-${os.platform()}-${os.arch()}.tar.gz`) { + return 'location'; + } + else { + throw new Error('Incorrect URL'); + } + }, + extract7z(downloadPath, extPath, _7zPath) { + return 'extPath'; + }, + extractTar(downloadPath, extPath, _7zPath) { + return 'extPath'; + }, + cacheDir(dir, tool, version) { + return 'path to tool'; + }, + prependPath(toolPath) { + return; + } +}); + +tmr.run(); \ No newline at end of file diff --git a/_generated/NodeToolV0/Tests/L0SecondDownloadSuccess.ts b/_generated/NodeToolV0/Tests/L0SecondDownloadSuccess.ts new file mode 100644 index 000000000000..222fe8861f92 --- /dev/null +++ b/_generated/NodeToolV0/Tests/L0SecondDownloadSuccess.ts @@ -0,0 +1,92 @@ +import ma = require('azure-pipelines-task-lib/mock-answer'); +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import os = require('os'); +import path = require('path'); + +let taskPath = path.join(__dirname, '..', 'nodetool.js'); +let tmr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tmr.setInput('versionSource', 'spec'); +tmr.setInput('versionSpec', '5.10.1'); +tmr.setInput('checkLatest', 'false'); +tmr.setInput('nodejsMirror', 'https://nodejs.org/dist'); + +let a: ma.TaskLibAnswers = { + "assertAgent": { + "2.115.1": true + }}; +tmr.setAnswers(a); + + +//Create assertAgent and getVariable mocks +const tl = require('azure-pipelines-task-lib/mock-task'); +const tlClone = Object.assign({}, tl); +tlClone.getVariable = function(variable: string) { + if (variable.toLowerCase() == 'agent.tempdirectory') { + return 'temp'; + } + return null; +}; +tlClone.assertAgent = function(variable: string) { + return; +}; +tmr.registerMock('azure-pipelines-task-lib/mock-task', tlClone); + +//Create tool-lib mock +tmr.registerMock('azure-pipelines-tool-lib/tool', { + isExplicitVersion: function(versionSpec) { + return false; + }, + findLocalTool: function(toolName, versionSpec) { + if (toolName != 'node') { + throw new Error('Searching for wrong tool'); + } + return false; + }, + evaluateVersions: function(versions, versionSpec) { + let version: string; + for (let i = versions.length - 1; i >= 0; i--) { + let potential: string = versions[i]; + let satisfied: boolean = potential === '5.10.1'; + if (satisfied) { + version = potential; + break; + } + } + return version; + }, + cleanVersion: function(version) { + return '5.10.1'; + }, + downloadTool(url) { + if (url === `https://nodejs.org/dist/v5.10.1/node-v5.10.1-win-${os.arch()}.7z` || + url === `https://nodejs.org/dist/v5.10.1/node-v5.10.1-${os.platform()}-${os.arch()}.tar.gz`) { + let err = new Error(); + err['httpStatusCode'] = 404; + throw err; + } + else if (url === `https://nodejs.org/dist/v5.10.1/win-${os.arch()}/node.exe`) { + return 'exe_loc'; + } + else if (url === `https://nodejs.org/dist/v5.10.1/win-${os.arch()}/node.lib`) { + return 'exe_lib'; + } + else { + throw new Error('Incorrect URL'); + } + }, + extract7z(downloadPath, extPath, _7zPath) { + return 'extPath'; + }, + extractTar(downloadPath, extPath, _7zPath) { + return 'extPath'; + }, + cacheDir(dir, tool, version) { + return 'path to tool'; + }, + prependPath(toolPath) { + return; + } +}); + +tmr.run(); \ No newline at end of file diff --git a/_generated/NodeToolV0/Tests/L0ThirdDownloadSuccess.ts b/_generated/NodeToolV0/Tests/L0ThirdDownloadSuccess.ts new file mode 100644 index 000000000000..fbab92c0909d --- /dev/null +++ b/_generated/NodeToolV0/Tests/L0ThirdDownloadSuccess.ts @@ -0,0 +1,98 @@ +import ma = require('azure-pipelines-task-lib/mock-answer'); +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import os = require('os'); +import path = require('path'); + +let taskPath = path.join(__dirname, '..', 'nodetool.js'); +let tmr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tmr.setInput('versionSource', 'spec'); +tmr.setInput('versionSpec', '0.12.18'); +tmr.setInput('checkLatest', 'false'); +tmr.setInput('nodejsMirror', 'https://nodejs.org/dist'); + +let a: ma.TaskLibAnswers = { + "assertAgent": { + "2.115.1": true + }}; +tmr.setAnswers(a); + + +//Create assertAgent and getVariable mocks +const tl = require('azure-pipelines-task-lib/mock-task'); +const tlClone = Object.assign({}, tl); +tlClone.getVariable = function(variable: string) { + if (variable.toLowerCase() == 'agent.tempdirectory') { + return 'temp'; + } + return null; +}; +tlClone.assertAgent = function(variable: string) { + return; +}; +tmr.registerMock('azure-pipelines-task-lib/mock-task', tlClone); + +//Create tool-lib mock +tmr.registerMock('azure-pipelines-tool-lib/tool', { + isExplicitVersion: function(versionSpec) { + return false; + }, + findLocalTool: function(toolName, versionSpec) { + if (toolName != 'node') { + throw new Error('Searching for wrong tool'); + } + return false; + }, + evaluateVersions: function(versions, versionSpec) { + let version: string; + for (let i = versions.length - 1; i >= 0; i--) { + let potential: string = versions[i]; + let satisfied: boolean = potential === '0.12.18'; + if (satisfied) { + version = potential; + break; + } + } + return version; + }, + cleanVersion: function(version) { + return '0.12.18'; + }, + downloadTool(url) { + let err = new Error(); + err['httpStatusCode'] = '404'; + if (url === `https://nodejs.org/dist/v0.12.18/node-v0.12.18-win-${os.arch()}.7z` || + url === `https://nodejs.org/dist/v0.12.18/node-v0.12.18-${os.platform()}-${os.arch()}.tar.gz`) { + throw err; + } + else if (url === `https://nodejs.org/dist/v0.12.18/win-${os.arch()}/node.exe`) { + throw err; + } + else if (url === `https://nodejs.org/dist/v0.12.18/win-${os.arch()}/node.lib`) { + throw err; + } + else if (url === `https://nodejs.org/dist/v0.12.18/node.exe`) { + return 'exe_loc'; + } + else if (url === `https://nodejs.org/dist/v0.12.18/node.lib`) { + return 'exe_lib'; + } + else { + throw new Error('Incorrect URL'); + } + }, + extract7z(downloadPath, extPath, _7zPath) { + return 'extPath'; + }, + extractTar(downloadPath, extPath, _7zPath) { + return 'extPath'; + }, + cacheDir(dir, tool, version) { + return 'path to tool'; + }, + prependPath(toolPath) { + return; + } +}); + +tmr.run(); \ No newline at end of file diff --git a/_generated/NodeToolV0/icon.png b/_generated/NodeToolV0/icon.png new file mode 100644 index 000000000000..ccbddf54c6c9 Binary files /dev/null and b/_generated/NodeToolV0/icon.png differ diff --git a/_generated/NodeToolV0/icon.svg b/_generated/NodeToolV0/icon.svg new file mode 100644 index 000000000000..9522fcc4bbb6 --- /dev/null +++ b/_generated/NodeToolV0/icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/_generated/NodeToolV0/make.json b/_generated/NodeToolV0/make.json new file mode 100644 index 000000000000..9df0d9774107 --- /dev/null +++ b/_generated/NodeToolV0/make.json @@ -0,0 +1,20 @@ +{ + "externals": { + "archivePackages": [ + { + "archiveName": "7zr.zip", + "url": "https://vstsagenttools.blob.core.windows.net/tools/7zr/1805_x86/7zr.zip", + "dest": "./" + } + ] + }, + "rm": [ + { + "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" + ], + "options": "-Rf" + } + ] +} \ No newline at end of file diff --git a/_generated/NodeToolV0/nodetool.ts b/_generated/NodeToolV0/nodetool.ts new file mode 100644 index 000000000000..db7a6ffe1c1f --- /dev/null +++ b/_generated/NodeToolV0/nodetool.ts @@ -0,0 +1,272 @@ +import * as taskLib from 'azure-pipelines-task-lib/task'; +import * as toolLib from 'azure-pipelines-tool-lib/tool'; +import * as restm from 'typed-rest-client/RestClient'; +import * as telemetry from 'azure-pipelines-tasks-utility-common/telemetry'; +import * as os from 'os'; +import * as path from 'path'; +import * as fs from 'fs'; + +const force32bit: boolean = taskLib.getBoolInput('force32bit', false); +let osPlat: string = os.platform(); +let osArch: string = getArch(); + +async function run() { + try { + taskLib.setResourcePath(path.join(__dirname, 'task.json')); + let versionSource = taskLib.getInput('versionSource', true); + let versionSpecInput = taskLib.getInput('versionSpec', versionSource == 'spec'); + let versionFilePathInput = taskLib.getInput('versionFilePath', versionSource == 'fromFile'); + let nodejsMirror = taskLib.getInput('nodejsMirror', false); + let versionSpec = getNodeVersion(versionSource, versionSpecInput, versionFilePathInput); + let checkLatest: boolean = taskLib.getBoolInput('checkLatest', false); + await getNode(versionSpec, checkLatest, nodejsMirror.replace(/\/$/, '')); + telemetry.emitTelemetry('TaskHub', 'NodeToolV0', { versionSource, versionSpec, checkLatest, force32bit }); + } + catch (error) { + taskLib.setResult(taskLib.TaskResult.Failed, error.message); + } +} + +// +// Node versions interface +// see https://nodejs.org/dist/index.json +// +interface INodeVersion { + version: string, + files: string[], + semanticVersion: string +} + +// +// Basic pattern: +// if !checkLatest +// toolPath = check cache +// if !toolPath +// if version is a range +// match = query nodejs.org +// if !match +// fail +// toolPath = check cache +// if !toolPath +// download, extract, and cache +// toolPath = cacheDir +// PATH = cacheDir + PATH +// +async function getNode(versionSpec: string, checkLatest: boolean, nodejsMirror: string) { + let installedArch = osArch; + if (toolLib.isExplicitVersion(versionSpec)) { + checkLatest = false; // check latest doesn't make sense when explicit version + } + + // check cache + let toolPath: string; + if (!checkLatest) { + toolPath = toolLib.findLocalTool('node', versionSpec, installedArch); + + // In case if it's darwin arm and toolPath is empty trying to find x64 version + if (!toolPath && isDarwinArm(osPlat, installedArch)) { + toolPath = toolLib.findLocalTool('node', versionSpec, 'x64'); + } + } + + if (!toolPath) { + let version: string; + if (toolLib.isExplicitVersion(versionSpec)) { + // version to download + version = versionSpec; + } else { + // query nodejs.org for a matching version + version = await queryLatestMatch(versionSpec, installedArch, nodejsMirror); + + if (!version && isDarwinArm(osPlat, installedArch)) { + // nodejs.org does not have an arm64 build for macOS, so we fall back to x64 + console.log(taskLib.loc('TryRosetta', osPlat, installedArch)); + + version = await queryLatestMatch(versionSpec, 'x64', nodejsMirror); + installedArch = 'x64'; + } + + if (!version) { + throw new Error(taskLib.loc('NodeVersionNotFound', versionSpec, osPlat, installedArch)); + } + + // check cache + toolPath = toolLib.findLocalTool('node', version, installedArch) + } + + if (!toolPath) { + // download, extract, cache + toolPath = await acquireNode(version, installedArch, nodejsMirror); + } + } + + // + // a tool installer initimately knows details about the layout of that tool + // for example, node binary is in the bin folder after the extract on Mac/Linux. + // layouts could change by version, by platform etc... but that's the tool installers job + // + if (osPlat != 'win32') { + toolPath = path.join(toolPath, 'bin'); + } + + // + // prepend the tools path. instructs the agent to prepend for future tasks + // + toolLib.prependPath(toolPath); +} + +async function queryLatestMatch(versionSpec: string, installedArch: string, nodejsMirror: string): Promise { + // node offers a json list of versions + let dataFileName: string; + switch (osPlat) { + case "linux": dataFileName = "linux-" + installedArch; break; + case "darwin": dataFileName = "osx-" + installedArch + '-tar'; break; + case "win32": dataFileName = "win-" + installedArch + '-exe'; break; + default: throw new Error(taskLib.loc('UnexpectedOS', osPlat)); + } + + let versions: string[] = []; + let dataUrl = nodejsMirror + "/index.json"; + let rest: restm.RestClient = new restm.RestClient('vsts-node-tool'); + let nodeVersions: INodeVersion[] = (await rest.get(dataUrl)).result; + nodeVersions.forEach((nodeVersion:INodeVersion) => { + // ensure this version supports your os and platform + if (nodeVersion.files.indexOf(dataFileName) >= 0) { + // versions in the file are prefixed with 'v', which is not valid SemVer + // remove 'v' so that toolLib.evaluateVersions behaves properly + nodeVersion.semanticVersion = toolLib.cleanVersion(nodeVersion.version); + versions.push(nodeVersion.semanticVersion); + } + }); + + // get the latest version that matches the version spec + let latestVersion: string = toolLib.evaluateVersions(versions, versionSpec); + // In case if that we had not found version that match + if (!latestVersion) return null; + + return nodeVersions.find(v => v.semanticVersion === latestVersion).version; +} + +async function acquireNode(version: string, installedArch: string, nodejsMirror: string): Promise { + // + // Download - a tool installer intimately knows how to get the tool (and construct urls) + // + version = toolLib.cleanVersion(version); + + const isWin32: boolean = osPlat == 'win32'; + + const platform: string = isWin32 ? 'win' : osPlat; + + const fileName: string = `node-v${version}-${platform}-${installedArch}`; + + const fileExtension: string = isWin32 ? '.7z' : '.tar.gz'; + + const downloadUrl: string = `${nodejsMirror}/v${version}/${fileName}${fileExtension}`; + + let downloadPath: string; + + try { + downloadPath = await toolLib.downloadTool(downloadUrl); + } catch (err) { + if (isWin32 && err['httpStatusCode'] == 404) { + return await acquireNodeFromFallbackLocation(version, nodejsMirror); + } + + throw err; + } + + // + // Extract + // + let extPath: string; + + if (isWin32) { + taskLib.assertAgent('2.115.0'); + extPath = taskLib.getVariable('Agent.TempDirectory'); + if (!extPath) { + throw new Error(taskLib.loc('AgentTempDirNotSet')); + } + + let _7zPath = path.join(__dirname, '7zr.exe'); + extPath = await toolLib.extract7z(downloadPath, extPath, _7zPath); + } + else { + extPath = await toolLib.extractTar(downloadPath); + } + + // + // Install into the local tool cache - node extracts with a root folder that matches the fileName downloaded + // + let toolRoot = path.join(extPath, fileName); + return await toolLib.cacheDir(toolRoot, 'node', version, installedArch); +} + +// For non LTS versions of Node, the files we need (for Windows) are sometimes located +// in a different folder than they normally are for other versions. +// Normally the format is similar to: https://nodejs.org/dist/v5.10.1/node-v5.10.1-win-x64.7z +// In this case, there will be two files located at: +// /dist/v5.10.1/win-x64/node.exe +// /dist/v5.10.1/win-x64/node.lib +// If this is not the structure, there may also be two files located at: +// /dist/v0.12.18/node.exe +// /dist/v0.12.18/node.lib +// This method attempts to download and cache the resources from these alternative locations. +// Note also that the files are normally zipped but in this case they are just an exe +// and lib file in a folder, not zipped. +async function acquireNodeFromFallbackLocation(version: string, nodejsMirror: string): Promise { + // Create temporary folder to download in to + let tempDownloadFolder: string = 'temp_' + Math.floor(Math.random() * 2000000000); + let tempDir: string = path.join(taskLib.getVariable('agent.tempDirectory'), tempDownloadFolder); + taskLib.mkdirP(tempDir); + let exeUrl: string; + let libUrl: string; + try { + exeUrl = `${nodejsMirror}/v${version}/win-${osArch}/node.exe`; + libUrl = `${nodejsMirror}/v${version}/win-${osArch}/node.lib`; + + await toolLib.downloadTool(exeUrl, path.join(tempDir, "node.exe")); + await toolLib.downloadTool(libUrl, path.join(tempDir, "node.lib")); + } + catch (err) { + if (err['httpStatusCode'] && + err['httpStatusCode'] == 404) + { + exeUrl = `${nodejsMirror}/v${version}/node.exe`; + libUrl = `${nodejsMirror}/v${version}/node.lib`; + + await toolLib.downloadTool(exeUrl, path.join(tempDir, "node.exe")); + await toolLib.downloadTool(libUrl, path.join(tempDir, "node.lib")); + } + else { + throw err; + } + } + return await toolLib.cacheDir(tempDir, 'node', version, osArch); +} + +// Check is the system are darwin arm and rosetta is installed +function isDarwinArm(osPlat: string, installedArch: string): boolean { + if (osPlat === 'darwin' && installedArch === 'arm64') { + // Check that Rosetta is installed and returns some pid + const execResult = taskLib.execSync('pgrep', 'oahd'); + return execResult.code === 0 && !!execResult.stdout; + } + return false; +} + +function getArch(): string { + let arch: string = os.arch(); + if (arch === 'ia32' || force32bit) { + arch = 'x86'; + } + return arch; +} + +function getNodeVersion(versionSource: string, versionSpecInput: string, versionFilePathInput: string) { + if (versionSource == 'spec') + return versionSpecInput + + return fs.readFileSync(versionFilePathInput, { 'encoding': 'utf8' }); +} + +run(); diff --git a/_generated/NodeToolV0/package-lock.json b/_generated/NodeToolV0/package-lock.json new file mode 100644 index 000000000000..7a5899752696 --- /dev/null +++ b/_generated/NodeToolV0/package-lock.json @@ -0,0 +1,651 @@ +{ + "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": "16.11.65", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.65.tgz", + "integrity": "sha512-Vfz7wGMOr4jbQGiQHVJm8VjeQwM9Ya7mHe9LtQ264/Epf5n1KiZShOFqk++nBzw6a/ubgYdB9Od7P+MH/LjoWw==" + }, + "@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==" + }, + "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": "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-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" + } + }, + "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.3", + "resolved": "https://registry.npmjs.org/azure-pipelines-tool-lib/-/azure-pipelines-tool-lib-2.0.3.tgz", + "integrity": "sha512-HS3iGJrRph6lzweCKtexX0RfuwBBh9mPADxLKipG5ICGKHOGRu7nRXlfL0HUdvOTiTwbCVdsSE/LigE75+1Muw==", + "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": { + "azure-pipelines-task-lib": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.3.0.tgz", + "integrity": "sha512-kmOyGE1kuRaWwXYZ5MfA8Q8Awt7aAUExG6w40aos6Y3G0/RlTCeB+5H4oYpoiNB0g8MPYhWG7SM5i6PLycWs1A==", + "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==" + }, + "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==" + }, + "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.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==" + }, + "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.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==" + }, + "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": "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/NodeToolV0/package.json b/_generated/NodeToolV0/package.json new file mode 100644 index 000000000000..4164dde09908 --- /dev/null +++ b/_generated/NodeToolV0/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": "^16.11.39", + "@types/mocha": "^5.2.7", + "@types/q": "^1.0.7", + "typed-rest-client": "1.8.4", + "azure-pipelines-task-lib": "^5.0.0-preview.0", + "azure-pipelines-tool-lib": "^2.0.3", + "azure-pipelines-tasks-utility-common": "^3.0.3" + }, + "devDependencies": { + "typescript": "4.0.2" + } +} diff --git a/_generated/NodeToolV0/task.json b/_generated/NodeToolV0/task.json new file mode 100644 index 000000000000..9682145f558c --- /dev/null +++ b/_generated/NodeToolV0/task.json @@ -0,0 +1,118 @@ +{ + "id": "31C75BBB-BCDF-4706-8D7C-4DA6A1959BC2", + "name": "NodeTool", + "friendlyName": "Node.js tool installer", + "description": "Finds or downloads and caches the specified version spec of Node.js and adds it to the PATH", + "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/tool/node-js", + "helpMarkDown": "[Learn more about this task](https://docs.microsoft.com/azure/devops/pipelines/tasks/tool/node-js) or [see the Node documentation](https://nodejs.org/docs/latest/api/documentation.html)", + "category": "Tool", + "runsOn": [ + "Agent", + "DeploymentGroup" + ], + "author": "Microsoft Corporation", + "version": { + "Major": 0, + "Minor": 229, + "Patch": 3 + }, + "satisfies": [ + "Node", + "npm", + "node.js" + ], + "demands": [], + "minimumAgentVersion": "2.182.1", + "instanceNameFormat": "Use Node $(versionSpec)", + "groups": [ + { + "name": "advanced", + "displayName": "Advanced", + "isExpanded": false + } + ], + "inputs": [ + { + "name": "versionSource", + "type": "radio", + "label": "Source of version", + "required": true, + "defaultValue": "spec", + "options": { + "spec": "Specify Node version", + "fromFile": "Get version from file" + } + }, + { + "name": "versionSpec", + "type": "string", + "label": "Version Spec", + "defaultValue": "6.x", + "helpMarkDown": "Version Spec of version to get. Examples: 6.x, 4.x, 6.10.0, >=6.10.0", + "visibleRule": "versionSource = spec" + }, + { + "name": "versionFilePath", + "type": "string", + "label": "Path to the .nvmrc file", + "helpMarkDown": "File path to get version. Example: src/.nvmrc", + "visibleRule": "versionSource = fromFile" + }, + { + "name": "checkLatest", + "type": "boolean", + "label": "Check for Latest Version", + "defaultValue": "false", + "required": false, + "helpMarkDown": "Always checks online for the latest available version that satisfies the version spec. This is typically false unless you have a specific scenario to always get latest. This will cause it to incur download costs when potentially not necessary, especially with the hosted build pool." + }, + { + "name": "force32bit", + "type": "boolean", + "label": "Use 32 bit version on x64 agents", + "defaultValue": "false", + "required": false, + "helpMarkDown": "Installs the x86 version of Node regardless of the CPU architecture of the agent." + }, + { + "name": "nodejsMirror", + "type": "string", + "label": "Set source for Node.js binaries", + "defaultValue": "https://nodejs.org/dist", + "required": false, + "groupName": "advanced", + "helpMarkDown": "Use an alternative installation mirror when sourcing the Node.js binaries." + } + ], + "execution": { + "Node10": { + "target": "nodetool.js", + "argumentFormat": "" + }, + "Node16": { + "target": "nodetool.js", + "argumentFormat": "" + } + }, + "restrictions": { + "commands": { + "mode": "restricted" + }, + "settableVariables": { + "allowed": [ + "PATH" + ] + } + }, + "messages": { + "ToolFailed": "Tool install failed: %s", + "TryRosetta": "Unable to find Node for platform %s and architecture %s. Trying to install with Rosetta2", + "NodeVersionNotFound": "Unable to find Node version %s for platform %s and architecture %s.", + "UnexpectedOS": "Unexpected OS %s", + "AgentTempDirNotSet": "Expected Agent.TempDirectory to be set." + }, + "_buildConfigMapping": { + "Default": "0.229.3", + "Node20-225": "0.229.4" + } +} \ No newline at end of file diff --git a/_generated/NodeToolV0/task.loc.json b/_generated/NodeToolV0/task.loc.json new file mode 100644 index 000000000000..3a48ae776c37 --- /dev/null +++ b/_generated/NodeToolV0/task.loc.json @@ -0,0 +1,118 @@ +{ + "id": "31C75BBB-BCDF-4706-8D7C-4DA6A1959BC2", + "name": "NodeTool", + "friendlyName": "ms-resource:loc.friendlyName", + "description": "ms-resource:loc.description", + "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/tool/node-js", + "helpMarkDown": "ms-resource:loc.helpMarkDown", + "category": "Tool", + "runsOn": [ + "Agent", + "DeploymentGroup" + ], + "author": "Microsoft Corporation", + "version": { + "Major": 0, + "Minor": 229, + "Patch": 3 + }, + "satisfies": [ + "Node", + "npm", + "node.js" + ], + "demands": [], + "minimumAgentVersion": "2.182.1", + "instanceNameFormat": "ms-resource:loc.instanceNameFormat", + "groups": [ + { + "name": "advanced", + "displayName": "ms-resource:loc.group.displayName.advanced", + "isExpanded": false + } + ], + "inputs": [ + { + "name": "versionSource", + "type": "radio", + "label": "ms-resource:loc.input.label.versionSource", + "required": true, + "defaultValue": "spec", + "options": { + "spec": "Specify Node version", + "fromFile": "Get version from file" + } + }, + { + "name": "versionSpec", + "type": "string", + "label": "ms-resource:loc.input.label.versionSpec", + "defaultValue": "6.x", + "helpMarkDown": "ms-resource:loc.input.help.versionSpec", + "visibleRule": "versionSource = spec" + }, + { + "name": "versionFilePath", + "type": "string", + "label": "ms-resource:loc.input.label.versionFilePath", + "helpMarkDown": "ms-resource:loc.input.help.versionFilePath", + "visibleRule": "versionSource = fromFile" + }, + { + "name": "checkLatest", + "type": "boolean", + "label": "ms-resource:loc.input.label.checkLatest", + "defaultValue": "false", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.checkLatest" + }, + { + "name": "force32bit", + "type": "boolean", + "label": "ms-resource:loc.input.label.force32bit", + "defaultValue": "false", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.force32bit" + }, + { + "name": "nodejsMirror", + "type": "string", + "label": "ms-resource:loc.input.label.nodejsMirror", + "defaultValue": "https://nodejs.org/dist", + "required": false, + "groupName": "advanced", + "helpMarkDown": "ms-resource:loc.input.help.nodejsMirror" + } + ], + "execution": { + "Node10": { + "target": "nodetool.js", + "argumentFormat": "" + }, + "Node16": { + "target": "nodetool.js", + "argumentFormat": "" + } + }, + "restrictions": { + "commands": { + "mode": "restricted" + }, + "settableVariables": { + "allowed": [ + "PATH" + ] + } + }, + "messages": { + "ToolFailed": "ms-resource:loc.messages.ToolFailed", + "TryRosetta": "ms-resource:loc.messages.TryRosetta", + "NodeVersionNotFound": "ms-resource:loc.messages.NodeVersionNotFound", + "UnexpectedOS": "ms-resource:loc.messages.UnexpectedOS", + "AgentTempDirNotSet": "ms-resource:loc.messages.AgentTempDirNotSet" + }, + "_buildConfigMapping": { + "Default": "0.229.3", + "Node20-225": "0.229.4" + } +} \ No newline at end of file diff --git a/_generated/NodeToolV0/tsconfig.json b/_generated/NodeToolV0/tsconfig.json new file mode 100644 index 000000000000..0438b79f69ac --- /dev/null +++ b/_generated/NodeToolV0/tsconfig.json @@ -0,0 +1,6 @@ +{ + "compilerOptions": { + "target": "ES6", + "module": "commonjs" + } +} \ No newline at end of file diff --git a/_generated/NodeToolV0_Node20/.npmrc b/_generated/NodeToolV0_Node20/.npmrc new file mode 100644 index 000000000000..5fca0d518be7 --- /dev/null +++ b/_generated/NodeToolV0_Node20/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true diff --git a/_generated/NodeToolV0_Node20/Strings/resources.resjson/de-DE/resources.resjson b/_generated/NodeToolV0_Node20/Strings/resources.resjson/de-DE/resources.resjson new file mode 100644 index 000000000000..2d1a54311c21 --- /dev/null +++ b/_generated/NodeToolV0_Node20/Strings/resources.resjson/de-DE/resources.resjson @@ -0,0 +1,23 @@ +{ + "loc.friendlyName": "Installer für Node. js-Tools", + "loc.helpMarkDown": "[Weitere Informationen zu dieser Aufgabe](https://docs.microsoft.com/azure/devops/pipelines/tasks/tool/node-js) oder [Node-Dokumentation anzeigen](https://nodejs.org/docs/latest/api/documentation.html)", + "loc.description": "Hiermit wird die angegebene Versionsspezifikation von Node.js ermittelt oder heruntergeladen, zwischengespeichert und zu PATH hinzugefügt.", + "loc.instanceNameFormat": "Node $(versionSpec) verwenden", + "loc.group.displayName.advanced": "Erweitert", + "loc.input.label.versionSource": "Quelle der Version", + "loc.input.label.versionSpec": "Versionsangabe", + "loc.input.help.versionSpec": "Versionsangabe der abzurufenden Version. Beispiele: 6.x, 4.x, 6.10.0, >=6.10.0", + "loc.input.label.versionFilePath": "Pfad zur NVMRC-Datei", + "loc.input.help.versionFilePath": "Dateipfad zum Abrufen der Version. Beispiel: src/.nvmrc", + "loc.input.label.checkLatest": "Auf aktuelle Version überprüfen", + "loc.input.help.checkLatest": "Sucht online immer nach der letzten verfügbaren Version, die die Versionsangabe erfüllt. Dies ist in der Regel \"false\", sofern Sie nicht über ein spezifisches Szenario verfügen, bei dem Sie immer die aktuelle Version abrufen. Dadurch entstehen Downloadkosten, die unter Umständen nicht erforderlich sind, insbesondere beim gehosteten Buildpool.", + "loc.input.label.force32bit": "32-Bit-Version für x64-Agents verwenden", + "loc.input.help.force32bit": "Installiert die x86-Version von Node unabhängig von der CPU-Architektur des Agents.", + "loc.input.label.nodejsMirror": "Quelle für Node.js-Binärdateien festlegen", + "loc.input.help.nodejsMirror": "Verwenden Sie eine alternative Installationsspiegelung, wenn Sie die Node.js-Binärdateien beziehen.", + "loc.messages.ToolFailed": "Fehler bei der Toolinstallation: %s", + "loc.messages.TryRosetta": "Der Knoten für die Plattform \"%s\" und die Architektur \"%s\" wurde nicht gefunden. Es wird versucht, mit Rosetta2 zu installieren.", + "loc.messages.NodeVersionNotFound": "Die Knotenversion %s für die Plattform \"%s\" und die Architektur \"%s\" wurde nicht gefunden.", + "loc.messages.UnexpectedOS": "Unerwartetes Betriebssystem %s", + "loc.messages.AgentTempDirNotSet": "\"Agent.TempDirectory\" muss festgelegt werden." +} \ No newline at end of file diff --git a/_generated/NodeToolV0_Node20/Strings/resources.resjson/en-US/resources.resjson b/_generated/NodeToolV0_Node20/Strings/resources.resjson/en-US/resources.resjson new file mode 100644 index 000000000000..511d6e51e8a8 --- /dev/null +++ b/_generated/NodeToolV0_Node20/Strings/resources.resjson/en-US/resources.resjson @@ -0,0 +1,23 @@ +{ + "loc.friendlyName": "Node.js tool installer", + "loc.helpMarkDown": "[Learn more about this task](https://docs.microsoft.com/azure/devops/pipelines/tasks/tool/node-js) or [see the Node documentation](https://nodejs.org/docs/latest/api/documentation.html)", + "loc.description": "Finds or downloads and caches the specified version spec of Node.js and adds it to the PATH", + "loc.instanceNameFormat": "Use Node $(versionSpec)", + "loc.group.displayName.advanced": "Advanced", + "loc.input.label.versionSource": "Source of version", + "loc.input.label.versionSpec": "Version Spec", + "loc.input.help.versionSpec": "Version Spec of version to get. Examples: 6.x, 4.x, 6.10.0, >=6.10.0", + "loc.input.label.versionFilePath": "Path to the .nvmrc file", + "loc.input.help.versionFilePath": "File path to get version. Example: src/.nvmrc", + "loc.input.label.checkLatest": "Check for Latest Version", + "loc.input.help.checkLatest": "Always checks online for the latest available version that satisfies the version spec. This is typically false unless you have a specific scenario to always get latest. This will cause it to incur download costs when potentially not necessary, especially with the hosted build pool.", + "loc.input.label.force32bit": "Use 32 bit version on x64 agents", + "loc.input.help.force32bit": "Installs the x86 version of Node regardless of the CPU architecture of the agent.", + "loc.input.label.nodejsMirror": "Set source for Node.js binaries", + "loc.input.help.nodejsMirror": "Use an alternative installation mirror when sourcing the Node.js binaries.", + "loc.messages.ToolFailed": "Tool install failed: %s", + "loc.messages.TryRosetta": "Unable to find Node for platform %s and architecture %s. Trying to install with Rosetta2", + "loc.messages.NodeVersionNotFound": "Unable to find Node version %s for platform %s and architecture %s.", + "loc.messages.UnexpectedOS": "Unexpected OS %s", + "loc.messages.AgentTempDirNotSet": "Expected Agent.TempDirectory to be set." +} \ No newline at end of file diff --git a/_generated/NodeToolV0_Node20/Strings/resources.resjson/es-ES/resources.resjson b/_generated/NodeToolV0_Node20/Strings/resources.resjson/es-ES/resources.resjson new file mode 100644 index 000000000000..1e60a6103434 --- /dev/null +++ b/_generated/NodeToolV0_Node20/Strings/resources.resjson/es-ES/resources.resjson @@ -0,0 +1,23 @@ +{ + "loc.friendlyName": "Instalador de la herramienta Node.js", + "loc.helpMarkDown": "[Obtener más información acerca de esta tarea](https://docs.microsoft.com/azure/devops/pipelines/tasks/tool/node-js) o [consultar la documentación de Node](https://nodejs.org/docs/latest/api/documentation.html)", + "loc.description": "Busca o descarga y almacena en caché la especificación de versión indicada de Node.js y la agrega a PATH.", + "loc.instanceNameFormat": "Usar Node $(versionSpec)", + "loc.group.displayName.advanced": "Avanzado", + "loc.input.label.versionSource": "Origen de la versión", + "loc.input.label.versionSpec": "Especificación de versión", + "loc.input.help.versionSpec": "Especificación de la versión que debe obtenerse. Ejemplos: 6.x, 4.x, 6.10.0, >=6.10.0", + "loc.input.label.versionFilePath": "Ruta de acceso al archivo .nvmrc", + "loc.input.help.versionFilePath": "Ruta de acceso del archivo para obtener la versión. Ejemplo: src/.nvmrc", + "loc.input.label.checkLatest": "Comprobar la última versión", + "loc.input.help.checkLatest": "Comprueba siempre en línea la última versión disponible que cumple la especificación de versión. Este valor suele ser false a menos que tenga un escenario específico que deba obtener siempre la última versión. Esto dará lugar a costos de descarga, cuando puede que no sea necesario, especialmente con el grupo de compilación hospedado.", + "loc.input.label.force32bit": "Usar la versión de 32 bits en agentes x64", + "loc.input.help.force32bit": "Instala la versión x86 de Node, independientemente de la arquitectura de CPU del agente.", + "loc.input.label.nodejsMirror": "Establecimiento del origen de los archivos binarios de Node.js", + "loc.input.help.nodejsMirror": "Use un reflejo de instalación alternativo al obtener los archivos binarios de Node.js.", + "loc.messages.ToolFailed": "No se pudo instalar la herramienta: %s", + "loc.messages.TryRosetta": "No se encuentra ningún node para la plataforma %s ni la arquitectura %s. Intentando instalar con Rosetta2", + "loc.messages.NodeVersionNotFound": "No se encuentra el %s de versión del nodo para la plataforma %s y la arquitectura %s.", + "loc.messages.UnexpectedOS": "Sistema operativo %s inesperado", + "loc.messages.AgentTempDirNotSet": "Se esperaba que Agent.TempDirectory estuviera establecido." +} \ No newline at end of file diff --git a/_generated/NodeToolV0_Node20/Strings/resources.resjson/fr-FR/resources.resjson b/_generated/NodeToolV0_Node20/Strings/resources.resjson/fr-FR/resources.resjson new file mode 100644 index 000000000000..6ee06c83d67c --- /dev/null +++ b/_generated/NodeToolV0_Node20/Strings/resources.resjson/fr-FR/resources.resjson @@ -0,0 +1,23 @@ +{ + "loc.friendlyName": "Programme d'installation de l'outil Node.js", + "loc.helpMarkDown": "[En savoir plus sur cette tâche](https://docs.microsoft.com/azure/devops/pipelines/tasks/tool/node-js) ou [consulter la documentation de Node](https://nodejs.org/docs/latest/api/documentation.html)", + "loc.description": "Recherche ou télécharge et met en cache la version spécifiée de Node.js, puis l'ajoute à PATH", + "loc.instanceNameFormat": "Utiliser Node $(versionSpec)", + "loc.group.displayName.advanced": "Avancé", + "loc.input.label.versionSource": "Source de la version", + "loc.input.label.versionSpec": "Spécification de version", + "loc.input.help.versionSpec": "Spécification de version de la version à obtenir. Exemples : 6.x, 4.x, 6.10.0, >=6.10.0", + "loc.input.label.versionFilePath": "Chemin du fichier .nvmrc", + "loc.input.help.versionFilePath": "Chemin d’accès au fichier pour obtenir la version. Exemple : src/.nvmrc", + "loc.input.label.checkLatest": "Rechercher la dernière version", + "loc.input.help.checkLatest": "Recherche toujours en ligne la dernière version disponible répondant à la spécification de version. Cela n'est généralement pas le cas, sauf si vous disposez d'un scénario spécifique visant à obtenir toujours la dernière version. Cela peut entraîner des coûts de téléchargement inutiles, en particulier avec le pool de builds hébergé.", + "loc.input.label.force32bit": "Utiliser la version 32 bits sur les agents x64", + "loc.input.help.force32bit": "Installe la version x86 de Node quelle que soit l'architecture du processeur de l'agent.", + "loc.input.label.nodejsMirror": "Définir la source des fichiers binaires Node.js", + "loc.input.help.nodejsMirror": "Utilisez un autre miroir d’installation pour approvisionner les fichiers binaires Node.js.", + "loc.messages.ToolFailed": "Échec de l'installation de l'outil : %s", + "loc.messages.TryRosetta": "Nœud introuvable pour la %s de plateforme et l'%s d’architecture. Tentative d’installation avec Rosetta2", + "loc.messages.NodeVersionNotFound": "Impossible de trouver le %s de version du nœud pour la %s d’architecture et de %s de plateforme.", + "loc.messages.UnexpectedOS": "Système d’exploitation inattendu %s", + "loc.messages.AgentTempDirNotSet": "Agent.TempDirectory est censé être défini." +} \ No newline at end of file diff --git a/_generated/NodeToolV0_Node20/Strings/resources.resjson/it-IT/resources.resjson b/_generated/NodeToolV0_Node20/Strings/resources.resjson/it-IT/resources.resjson new file mode 100644 index 000000000000..4a893ae4b854 --- /dev/null +++ b/_generated/NodeToolV0_Node20/Strings/resources.resjson/it-IT/resources.resjson @@ -0,0 +1,23 @@ +{ + "loc.friendlyName": "Programma di installazione strumento Node.js", + "loc.helpMarkDown": "[Altre informazioni su questa attività](https://docs.microsoft.com/azure/devops/pipelines/tasks/tool/node-js). In alternativa [vedere la documentazione di Node](https://nodejs.org/docs/latest/api/documentation.html)", + "loc.description": "Trova o scarica e memorizza nella cache l'identificatore di versione specificato di Node.js lo aggiunge a PATH.", + "loc.instanceNameFormat": "Usa Node $(versionSpec)", + "loc.group.displayName.advanced": "Avanzate", + "loc.input.label.versionSource": "Origine della versione", + "loc.input.label.versionSpec": "Identificatore di versione", + "loc.input.help.versionSpec": "Identificatore della versione da scaricare, ad esempio: 6.x, 4.x, 6.10.0, >=6.10.0", + "loc.input.label.versionFilePath": "Percorso del file con estensione nvmrc", + "loc.input.help.versionFilePath": "Percorso del file per ottenere la versione. Esempio: src/.nvmrc", + "loc.input.label.checkLatest": "Controlla disponibilità di versioni più recenti", + "loc.input.help.checkLatest": "Verifica sempre online se è disponibile una versione più recente che soddisfi l'identificatore di versione. Il valore di questa opzione è in genere false a meno che non sia stato predisposto uno scenario specifico per scaricare sempre la versione più recente. Questa opzione può comportare costi di download potenzialmente non necessari, in particolare con il pool di compilazione ospitato.", + "loc.input.label.force32bit": "Usa la versione a 32 bit in agenti x64", + "loc.input.help.force32bit": "Installa la versione x86 di Node indipendentemente dall'architettura della CPU dell'agente.", + "loc.input.label.nodejsMirror": "Imposta origine per file binari Node.js", + "loc.input.help.nodejsMirror": "Usare un mirror di installazione alternativo per l'acquisizione dei file binari di Node.js.", + "loc.messages.ToolFailed": "L'installazione dello strumento non è riuscita: %s", + "loc.messages.TryRosetta": "Non è possibile trovare il nodo per la piattaforma %s e l'architettura %s. Tentativo di installazione con Rosetta2", + "loc.messages.NodeVersionNotFound": "Non è possibile trovare la versione %s del nodo per la piattaforma %s e l'architettura %s.", + "loc.messages.UnexpectedOS": "Sistema operativo imprevisto %s", + "loc.messages.AgentTempDirNotSet": "Elemento Agent.TempDirectory previsto da impostare." +} \ No newline at end of file diff --git a/_generated/NodeToolV0_Node20/Strings/resources.resjson/ja-JP/resources.resjson b/_generated/NodeToolV0_Node20/Strings/resources.resjson/ja-JP/resources.resjson new file mode 100644 index 000000000000..d99fe14423ef --- /dev/null +++ b/_generated/NodeToolV0_Node20/Strings/resources.resjson/ja-JP/resources.resjson @@ -0,0 +1,23 @@ +{ + "loc.friendlyName": "Node.js ツール インストーラー", + "loc.helpMarkDown": "[このタスクの詳細を表示](https://docs.microsoft.com/azure/devops/pipelines/tasks/tool/node-js)、または [Node ドキュメントを参照](https://nodejs.org/docs/latest/api/documentation.html)", + "loc.description": "Node.js の指定されたバージョン仕様を検索またはダウンロードしてキャッシュし、それを PATH に追加します", + "loc.instanceNameFormat": "Node $(versionSpec) の使用", + "loc.group.displayName.advanced": "詳細", + "loc.input.label.versionSource": "バージョンのソース", + "loc.input.label.versionSpec": "バージョンの仕様", + "loc.input.help.versionSpec": "取得するバージョンのバージョン仕様。例: 6.x、4.x、6.10.0、6.10.0 以上", + "loc.input.label.versionFilePath": ".nvmrc ファイルへのパス", + "loc.input.help.versionFilePath": "バージョンを取得するためのファイル パス。 例: src/.nvmrc", + "loc.input.label.checkLatest": "最新バージョンのチェック", + "loc.input.help.checkLatest": "バージョン仕様を満たす利用可能な最新バージョンを常にオンラインで確認します。これは false にするのが一般的ですが、常に最新版を取得する特定のシナリオの場合は例外です。これにより、実際には必要でない場合にもダウンロードのコストが発生することになります (ホストされたビルド プールの場合は特にそう言えます)。", + "loc.input.label.force32bit": "x64 エージェントで 32 ビット バージョンを使用する", + "loc.input.help.force32bit": "エージェントの CPU アーキテクチャに関係なく、Node の x86 バージョンをインストールします。", + "loc.input.label.nodejsMirror": "Node.js バイナリのソースを設定する", + "loc.input.help.nodejsMirror": "Node.js バイナリをソース化するときは、代替インストール ミラーを使用します。", + "loc.messages.ToolFailed": "ツールをインストールできませんでした: %s", + "loc.messages.TryRosetta": "プラットフォーム %s およびアーキテクチャ %s のノードが見つかりません。Rosetta2 でインストールしようとしています", + "loc.messages.NodeVersionNotFound": "プラットフォーム %s とアーキテクチャ %s のノード バージョン %s が見つかりません。", + "loc.messages.UnexpectedOS": "予期しない OS %s", + "loc.messages.AgentTempDirNotSet": "Agent.TempDirectory を設定する必要があります。" +} \ No newline at end of file diff --git a/_generated/NodeToolV0_Node20/Strings/resources.resjson/ko-KR/resources.resjson b/_generated/NodeToolV0_Node20/Strings/resources.resjson/ko-KR/resources.resjson new file mode 100644 index 000000000000..c8f7a6d3e5f6 --- /dev/null +++ b/_generated/NodeToolV0_Node20/Strings/resources.resjson/ko-KR/resources.resjson @@ -0,0 +1,23 @@ +{ + "loc.friendlyName": "Node.js 도구 설치 관리자", + "loc.helpMarkDown": "[이 작업에 대한 자세한 정보](https://docs.microsoft.com/azure/devops/pipelines/tasks/tool/node-js) 또는 [Node 설명서 참조](https://nodejs.org/docs/latest/api/documentation.html)", + "loc.description": "지정된 버전 사양의 Node.js를 찾거나 다운로드하여 캐시하고 PATH에 추가합니다.", + "loc.instanceNameFormat": "노드 $(versionSpec) 사용", + "loc.group.displayName.advanced": "고급", + "loc.input.label.versionSource": "버전 원본", + "loc.input.label.versionSpec": "버전 사양", + "loc.input.help.versionSpec": "다운로드할 버전의 버전 사양입니다. 예: 6.x, 4.x, 6.10.0, >=6.10.0", + "loc.input.label.versionFilePath": ".nvmrc 파일의 경로", + "loc.input.help.versionFilePath": "버전을 가져올 파일 경로입니다. 예: src/.nvmrc", + "loc.input.label.checkLatest": "최신 버전 확인", + "loc.input.help.checkLatest": "버전 사양을 충족하는 최신 사용 가능 버전인지 항상 온라인으로 검사합니다. 항상 최신 버전을 다운로드하는 특정 시나리오가 아닌 한 일반적으로 false로 지정됩니다. 이로 인해 잠재적으로 필요하지 않은 경우, 특히 호스팅된 빌드 풀에서는 다운로드 비용이 발생할 수 있습니다.", + "loc.input.label.force32bit": "x64 에이전트에서 32비트 버전 사용", + "loc.input.help.force32bit": "에이전트의 CPU 아키텍처와 관계없이 x86 버전의 Node를 설치합니다.", + "loc.input.label.nodejsMirror": "Node.js 이진 파일의 원본 설정", + "loc.input.help.nodejsMirror": "Node.js 이진 파일을 소싱할 때 대체 설치 미러를 사용합니다.", + "loc.messages.ToolFailed": "도구 설치 실패: %s", + "loc.messages.TryRosetta": "플랫폼 %s 및 아키텍처 %s에 대한 노드를 찾을 수 없습니다. Rosetta2로 설치하는 중", + "loc.messages.NodeVersionNotFound": "플랫폼 %s 및 아키텍처 %s에 대한 노드 버전 %s을(를) 찾을 수 없습니다.", + "loc.messages.UnexpectedOS": "예기치 않은 OS %s", + "loc.messages.AgentTempDirNotSet": "Agent.TempDirectory가 설정될 것으로 예상됩니다." +} \ No newline at end of file diff --git a/_generated/NodeToolV0_Node20/Strings/resources.resjson/ru-RU/resources.resjson b/_generated/NodeToolV0_Node20/Strings/resources.resjson/ru-RU/resources.resjson new file mode 100644 index 000000000000..030c9bb303d7 --- /dev/null +++ b/_generated/NodeToolV0_Node20/Strings/resources.resjson/ru-RU/resources.resjson @@ -0,0 +1,23 @@ +{ + "loc.friendlyName": "Установщик средств Node.js", + "loc.helpMarkDown": "[См. дополнительные сведения об этой задаче](https://docs.microsoft.com/azure/devops/pipelines/tasks/tool/node-js) или [документацию по Node](https://nodejs.org/docs/latest/api/documentation.html)", + "loc.description": "Находит либо скачивает и кэширует указанную спецификацию версии Node.js и добавляет ее в PATH", + "loc.instanceNameFormat": "Использовать Node $(versionSpec)", + "loc.group.displayName.advanced": "Дополнительно", + "loc.input.label.versionSource": "Источник версии", + "loc.input.label.versionSpec": "Спецификатор версии", + "loc.input.help.versionSpec": "Спецификатор для версии, которую необходимо получить. Примеры: 6.x, 4.x, 6.10.0, >=6.10.0", + "loc.input.label.versionFilePath": "Путь к NVMRC-файлу", + "loc.input.help.versionFilePath": "Путь к файлу для получения версии. Пример: src/.nvmrc", + "loc.input.label.checkLatest": "Проверить наличие последней версии", + "loc.input.help.checkLatest": "Всегда проверяет наличие в Интернете актуальной версии, соответствующей спецификатору версии. Обычно задано значение \"false\", кроме случаев, когда имеется определенный сценарий всегда получать актуальную версию. Когда практическая необходимость в этом отсутствует, особенно в случае размещенного пула сборок, может взиматься дополнительная плата за загрузку.", + "loc.input.label.force32bit": "Использовать 32-разрядную версию на 64-разрядных агентах", + "loc.input.help.force32bit": "Устанавливает 32-разрядную версию Node независимо от архитектуры ЦП агента.", + "loc.input.label.nodejsMirror": "Настроить источник для двоичных файлов Node.js", + "loc.input.help.nodejsMirror": "Используйте альтернативное зеркало установки при использовании двоичных файлов Node.js в качестве источников.", + "loc.messages.ToolFailed": "Сбой установки инструмента: %s", + "loc.messages.TryRosetta": "Не удалось найти Node для платформы %s и архитектуры %s. Попытка установки с помощью Rosetta2", + "loc.messages.NodeVersionNotFound": "Не удалось найти версию Node %s для платформы %s и архитектуры %s.", + "loc.messages.UnexpectedOS": "Непредвиденная ОС %s", + "loc.messages.AgentTempDirNotSet": "Переменная Agent.TempDirectory должна быть задана." +} \ No newline at end of file diff --git a/_generated/NodeToolV0_Node20/Strings/resources.resjson/zh-CN/resources.resjson b/_generated/NodeToolV0_Node20/Strings/resources.resjson/zh-CN/resources.resjson new file mode 100644 index 000000000000..3402e7284e65 --- /dev/null +++ b/_generated/NodeToolV0_Node20/Strings/resources.resjson/zh-CN/resources.resjson @@ -0,0 +1,23 @@ +{ + "loc.friendlyName": "Node.js 工具安装程序", + "loc.helpMarkDown": "[详细了解此任务](https://docs.microsoft.com/azure/devops/pipelines/tasks/tool/node-js)或[参阅 Node 文档](https://nodejs.org/docs/latest/api/documentation.html)", + "loc.description": "查找或下载并缓存指定的 Node.js 版本规范,并将其添加到 PATH", + "loc.instanceNameFormat": "使用节点 $(versionSpec)", + "loc.group.displayName.advanced": "高级", + "loc.input.label.versionSource": "版本源", + "loc.input.label.versionSpec": "版本规范", + "loc.input.help.versionSpec": "要获取的版本的版本规范。例如: 6.x, 4.x, 6.10.0, >=6.10.0", + "loc.input.label.versionFilePath": ".nvmrc 文件的路径", + "loc.input.help.versionFilePath": "用于获取版本的文件路径。示例: src/.nvmrc", + "loc.input.label.checkLatest": "检查是否有最新版本", + "loc.input.help.checkLatest": "始终联机检查是否有满足版本规范的最新可用版本。这通常无法实现,除非有特定的解决方案可以始终获取最新版本。这样会在可能没有必要的情况下,特别是在使用托管生成池时产生下载费用。", + "loc.input.label.force32bit": "在 x64 代理上使用 32 位版本", + "loc.input.help.force32bit": "安装 x86 版本的 Node,不考虑代理的 CPU 体系结构。", + "loc.input.label.nodejsMirror": "设置 Node.js 二进制文件的源", + "loc.input.help.nodejsMirror": "在采购 Node.js 二进制文件时,请使用备用安装镜像。", + "loc.messages.ToolFailed": "工具安装失败: %s", + "loc.messages.TryRosetta": "找不到平台 %s 和体系结构 %s 的节点。尝试使用 Rosetta2 进行安装", + "loc.messages.NodeVersionNotFound": "找不到平台 %s 和体系结构 %s 的节点版本 %s。", + "loc.messages.UnexpectedOS": "意外的 OS %s", + "loc.messages.AgentTempDirNotSet": "应设置 Agent.TempDirectory。" +} \ No newline at end of file diff --git a/_generated/NodeToolV0_Node20/Strings/resources.resjson/zh-TW/resources.resjson b/_generated/NodeToolV0_Node20/Strings/resources.resjson/zh-TW/resources.resjson new file mode 100644 index 000000000000..08bb75d894fd --- /dev/null +++ b/_generated/NodeToolV0_Node20/Strings/resources.resjson/zh-TW/resources.resjson @@ -0,0 +1,23 @@ +{ + "loc.friendlyName": "Node.js 工具安裝程式", + "loc.helpMarkDown": "[深入了解此工作](https://docs.microsoft.com/azure/devops/pipelines/tasks/tool/node-js)或[參閱 Node 文件](https://nodejs.org/docs/latest/api/documentation.html)", + "loc.description": "尋找或下載並快取指定版本規格的 Node.js,然後將其新增到 PATH。", + "loc.instanceNameFormat": "使用 Node $(versionSpec)", + "loc.group.displayName.advanced": "進階", + "loc.input.label.versionSource": "版本來源", + "loc.input.label.versionSpec": "版本指定", + "loc.input.help.versionSpec": "要取得之版本的版本規格。例如: 6.x、4.x、6.10.0、>=6.10.0", + "loc.input.label.versionFilePath": ".nvmrc 檔案的路徑", + "loc.input.help.versionFilePath": "要取得版本的檔案路徑。範例: src/.nvmrc", + "loc.input.label.checkLatest": "檢查最新版本", + "loc.input.help.checkLatest": "一律檢查網路上有無最新的版本符合版本規格。除非特定的情況必須取得最新版本,否則不建議執行此動作。若非必要,這可能會衍生下載費用,特別是對託管的組建集區。", + "loc.input.label.force32bit": "在 x64 代理程式上使用 32 位元版本", + "loc.input.help.force32bit": "無論代理程式的 CPU 結構為何,皆安裝 x86 版的節點。", + "loc.input.label.nodejsMirror": "設定 Node.js 二進位檔的來源", + "loc.input.help.nodejsMirror": "取得 Node.js 二進位檔時,請使用替代的安裝鏡像。", + "loc.messages.ToolFailed": "工具安裝失敗: %s", + "loc.messages.TryRosetta": "找不到適用於平台 %s 與架構 %s 的 Node。正在嘗試使用 Rosetta2 安裝", + "loc.messages.NodeVersionNotFound": "找不到適用於平台 %s 與架構 %s 的 Node 版本 %s。", + "loc.messages.UnexpectedOS": "未預期的作業系統 %s", + "loc.messages.AgentTempDirNotSet": "應設定 Agent.TempDirectorty。" +} \ No newline at end of file diff --git a/_generated/NodeToolV0_Node20/Tests/L0.ts b/_generated/NodeToolV0_Node20/Tests/L0.ts new file mode 100644 index 000000000000..6eceb92895d9 --- /dev/null +++ b/_generated/NodeToolV0_Node20/Tests/L0.ts @@ -0,0 +1,100 @@ +import assert = require('assert'); +import os = require('os'); +import path = require('path'); +import * as ttm from 'azure-pipelines-task-lib/mock-test'; + +describe('NodeTool Suite', function () { + this.timeout(60000); + + function runValidations(validator: () => void, tr, done) { + try { + validator(); + done(); + } + catch (error) { + console.log("STDERR", tr.stderr); + console.log("STDOUT", tr.stdout); + done(error); + } + } + + it('Succeeds when the first download is available', (done: Mocha.Done) => { + this.timeout(5000); + + let tp: string = path.join(__dirname, 'L0FirstDownloadSuccess.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + runValidations(() => { + assert(tr.succeeded, 'NodeTool should have succeeded.'); + assert(tr.stderr.length === 0, 'NodeTool should not have written to stderr'); + }, tr, done); + }); + + it('Succeeds when the second download is available', (done: Mocha.Done) => { + this.timeout(5000); + + let tp: string = path.join(__dirname, 'L0SecondDownloadSuccess.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + runValidations(() => { + if (os.platform() === 'win32') { + assert(tr.succeeded, 'NodeTool should have succeeded.'); + assert(tr.stderr.length === 0, 'NodeTool should not have written to stderr'); + } else { + assert(tr.failed, 'NodeTool should have failed after the first download failure for non-Windows platforms.'); + } + }, tr, done); + }); + + it('Succeeds when the third download is available', (done: Mocha.Done) => { + this.timeout(5000); + + let tp: string = path.join(__dirname, 'L0ThirdDownloadSuccess.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + runValidations(() => { + if (os.platform() === 'win32') { + assert(tr.succeeded, 'NodeTool should have succeeded.'); + assert(tr.stderr.length === 0, 'NodeTool should not have written to stderr'); + } else { + assert(tr.failed, 'NodeTool should have failed after the first download failure for non-Windows platforms.'); + } + }, tr, done); + }); + + it('Removes "v" prefixes when evaluating latest version', (done: Mocha.Done) => { + this.timeout(5000); + + let tp: string = path.join(__dirname, 'L0GetsLatestVersion.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + runValidations(() => { + assert(tr.succeeded, 'NodeTool should have succeeded.'); + assert(tr.stderr.length === 0, 'NodeTool should not have written to stderr'); + }, tr, done); + }); + + it('Read node version from file', (done: Mocha.Done) => { + this.timeout(5000); + + let tp: string = path.join(__dirname, 'L0ReadVersionFromFileSuccess.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + runValidations(() => { + assert(tr.succeeded, 'NodeTool should have succeeded.'); + assert(tr.stderr.length === 0, 'NodeTool should not have written to stderr'); + }, tr, done); + }); + + +}); \ No newline at end of file diff --git a/_generated/NodeToolV0_Node20/Tests/L0FirstDownloadSuccess.ts b/_generated/NodeToolV0_Node20/Tests/L0FirstDownloadSuccess.ts new file mode 100644 index 000000000000..eaa25eb003b3 --- /dev/null +++ b/_generated/NodeToolV0_Node20/Tests/L0FirstDownloadSuccess.ts @@ -0,0 +1,84 @@ +import ma = require('azure-pipelines-task-lib/mock-answer'); +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import os = require('os'); +import path = require('path'); + +let taskPath = path.join(__dirname, '..', 'nodetool.js'); +let tmr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tmr.setInput('versionSource', 'spec'); +tmr.setInput('versionSpec', '11.3.0'); +tmr.setInput('checkLatest', 'false'); +tmr.setInput('nodejsMirror', 'https://nodejs.org/dist'); + +let a: ma.TaskLibAnswers = { + "assertAgent": { + "2.115.1": true + }}; +tmr.setAnswers(a); + + +//Create assertAgent and getVariable mocks +const tl = require('azure-pipelines-task-lib/mock-task'); +const tlClone = Object.assign({}, tl); +tlClone.getVariable = function(variable: string) { + if (variable.toLowerCase() == 'agent.tempdirectory') { + return 'temp'; + } + return null; +}; +tlClone.assertAgent = function(variable: string) { + return; +}; +tmr.registerMock('azure-pipelines-task-lib/mock-task', tlClone); + +//Create tool-lib mock +tmr.registerMock('azure-pipelines-tool-lib/tool', { + isExplicitVersion: function(versionSpec) { + return false; + }, + findLocalTool: function(toolName, versionSpec) { + if (toolName != 'node') { + throw new Error('Searching for wrong tool'); + } + return false; + }, + evaluateVersions: function(versions, versionSpec) { + let version: string; + for (let i = versions.length - 1; i >= 0; i--) { + let potential: string = versions[i]; + let satisfied: boolean = potential === '11.3.0'; + if (satisfied) { + version = potential; + break; + } + } + return version; + }, + cleanVersion: function(version) { + return '11.3.0'; + }, + downloadTool(url) { + if (url === `https://nodejs.org/dist/v11.3.0/node-v11.3.0-win-${os.arch()}.7z` || + url === `https://nodejs.org/dist/v11.3.0/node-v11.3.0-${os.platform()}-${os.arch()}.tar.gz`) { + return 'location'; + } + else { + throw new Error('Incorrect URL'); + } + }, + extract7z(downloadPath, extPath, _7zPath) { + return 'extPath'; + }, + extractTar(downloadPath, extPath, _7zPath) { + return 'extPath'; + }, + cacheDir(dir, tool, version) { + return 'path to tool'; + }, + prependPath(toolPath) { + return; + } +}); + +tmr.run(); \ No newline at end of file diff --git a/_generated/NodeToolV0_Node20/Tests/L0GetsLatestVersion.ts b/_generated/NodeToolV0_Node20/Tests/L0GetsLatestVersion.ts new file mode 100644 index 000000000000..a3c31d7417f7 --- /dev/null +++ b/_generated/NodeToolV0_Node20/Tests/L0GetsLatestVersion.ts @@ -0,0 +1,54 @@ +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import assert = require('assert'); +import path = require('path'); + +let taskPath = path.join(__dirname, '..', 'nodetool.js'); +let tmr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tmr.setInput('versionSource', 'spec'); +tmr.setInput('versionSpec', '>=12.0.0'); +tmr.setInput('checkLatest', 'true'); +tmr.setInput('nodejsMirror', 'https://nodejs.org/dist'); + +//Create tool-lib mock +tmr.registerMock('azure-pipelines-tool-lib/tool', { + isExplicitVersion: function() { + return false; + }, + evaluateVersions: function(versions: string[], versionSpec) { + const invalidVersions = versions.filter(v => !/^\d+\.\d+\.\d+$/.test(v)); + assert(invalidVersions.length === 0, "Invalid versions passed to evaluateVersions"); + return "12.8.0"; + }, + cleanVersion: function(version: string) { + return version.replace(/^v/i, ""); + }, + findLocalTool: function(toolName, versionSpec) { + assert(versionSpec === "v12.8.0", "Version returned should begin with 'v'"); + return "/path/to/node"; + }, + prependPath(toolPath) { + return; + } +}); + +tmr.registerMock('typed-rest-client/RestClient', { + RestClient: function() { + return { + get: async function(url, options) { + const versions = [ + {"version":"v12.8.0","date":"2019-08-06","files":["aix-ppc64","headers","linux-arm64","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-x64-pkg","osx-x64-tar","src","sunos-x64","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"npm":"6.10.2","v8":"7.5.288.22","uv":"1.30.1","zlib":"1.2.11","openssl":"1.1.1c","modules":"72","lts":false,"security":false}, + {"version":"v12.7.0","date":"2019-07-23","files":["aix-ppc64","headers","linux-arm64","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-x64-pkg","osx-x64-tar","src","sunos-x64","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"npm":"6.10.0","v8":"7.5.288.22","uv":"1.30.1","zlib":"1.2.11","openssl":"1.1.1c","modules":"72","lts":false,"security":false}, + {"version":"v11.15.0","date":"2019-04-30","files":["aix-ppc64","headers","linux-arm64","linux-armv6l","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-x64-pkg","osx-x64-tar","src","sunos-x64","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"npm":"6.7.0","v8":"7.0.276.38","uv":"1.27.0","zlib":"1.2.11","openssl":"1.1.1b","modules":"67","lts":false,"security":false}, + {"version":"v11.14.0","date":"2019-04-10","files":["aix-ppc64","headers","linux-arm64","linux-armv6l","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-x64-pkg","osx-x64-tar","src","sunos-x64","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"npm":"6.7.0","v8":"7.0.276.38","uv":"1.27.0","zlib":"1.2.11","openssl":"1.1.1b","modules":"67","lts":false,"security":false} + ] + + return { + result: versions + }; + } + } + } +}); + +tmr.run(); \ No newline at end of file diff --git a/_generated/NodeToolV0_Node20/Tests/L0ReadVersionFromFileSuccess.ts b/_generated/NodeToolV0_Node20/Tests/L0ReadVersionFromFileSuccess.ts new file mode 100644 index 000000000000..bd6bc7a07d67 --- /dev/null +++ b/_generated/NodeToolV0_Node20/Tests/L0ReadVersionFromFileSuccess.ts @@ -0,0 +1,91 @@ +import ma = require('azure-pipelines-task-lib/mock-answer'); +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import os = require('os'); +import path = require('path'); +import fs = require('fs'); + +let taskPath = path.join(__dirname, '..', 'nodetool.js'); +let tmr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tmr.setInput('versionSource', 'fromFile'); +tmr.setInput('versionFilePath', 'src/.nvmrc'); +tmr.setInput('checkLatest', 'false'); +tmr.setInput('nodejsMirror', 'https://nodejs.org/dist'); + +let a: ma.TaskLibAnswers = { + "assertAgent": { + "2.115.1": true + }}; +tmr.setAnswers(a); + + +//Create assertAgent and getVariable mocks +const tl = require('azure-pipelines-task-lib/mock-task'); +const tlClone = Object.assign({}, tl); +tlClone.getVariable = function(variable: string) { + if (variable.toLowerCase() == 'agent.tempdirectory') { + return 'temp'; + } + return null; +}; +tlClone.assertAgent = function(variable: string) { + return; +}; +tmr.registerMock('azure-pipelines-task-lib/mock-task', tlClone); + +//create fs mock +tmr.registerMock('fs', { + ...fs, + readFileSync: function (path, options) { + if (path != 'src/.nvmrc') { + return fs.readFileSync(path, options); + } + + return '11.3.0'; + } +}); + +//Create tool-lib mock +tmr.registerMock('azure-pipelines-tool-lib/tool', { + isExplicitVersion: function(versionSpec) { + return false; + }, + findLocalTool: function(toolName, versionSpec) { + if (toolName != 'node') { + throw new Error('Searching for wrong tool'); + } + return false; + }, + evaluateVersions: function(versions, versionSpec) { + if (versionSpec !== '11.3.0') { + throw new Error(`Incorrect versionSpec: ${versionSpec}`); + } + return versionSpec; + }, + cleanVersion: function(version) { + return '11.3.0'; + }, + downloadTool(url) { + if (url === `https://nodejs.org/dist/v11.3.0/node-v11.3.0-win-${os.arch()}.7z` || + url === `https://nodejs.org/dist/v11.3.0/node-v11.3.0-${os.platform()}-${os.arch()}.tar.gz`) { + return 'location'; + } + else { + throw new Error('Incorrect URL'); + } + }, + extract7z(downloadPath, extPath, _7zPath) { + return 'extPath'; + }, + extractTar(downloadPath, extPath, _7zPath) { + return 'extPath'; + }, + cacheDir(dir, tool, version) { + return 'path to tool'; + }, + prependPath(toolPath) { + return; + } +}); + +tmr.run(); \ No newline at end of file diff --git a/_generated/NodeToolV0_Node20/Tests/L0SecondDownloadSuccess.ts b/_generated/NodeToolV0_Node20/Tests/L0SecondDownloadSuccess.ts new file mode 100644 index 000000000000..222fe8861f92 --- /dev/null +++ b/_generated/NodeToolV0_Node20/Tests/L0SecondDownloadSuccess.ts @@ -0,0 +1,92 @@ +import ma = require('azure-pipelines-task-lib/mock-answer'); +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import os = require('os'); +import path = require('path'); + +let taskPath = path.join(__dirname, '..', 'nodetool.js'); +let tmr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tmr.setInput('versionSource', 'spec'); +tmr.setInput('versionSpec', '5.10.1'); +tmr.setInput('checkLatest', 'false'); +tmr.setInput('nodejsMirror', 'https://nodejs.org/dist'); + +let a: ma.TaskLibAnswers = { + "assertAgent": { + "2.115.1": true + }}; +tmr.setAnswers(a); + + +//Create assertAgent and getVariable mocks +const tl = require('azure-pipelines-task-lib/mock-task'); +const tlClone = Object.assign({}, tl); +tlClone.getVariable = function(variable: string) { + if (variable.toLowerCase() == 'agent.tempdirectory') { + return 'temp'; + } + return null; +}; +tlClone.assertAgent = function(variable: string) { + return; +}; +tmr.registerMock('azure-pipelines-task-lib/mock-task', tlClone); + +//Create tool-lib mock +tmr.registerMock('azure-pipelines-tool-lib/tool', { + isExplicitVersion: function(versionSpec) { + return false; + }, + findLocalTool: function(toolName, versionSpec) { + if (toolName != 'node') { + throw new Error('Searching for wrong tool'); + } + return false; + }, + evaluateVersions: function(versions, versionSpec) { + let version: string; + for (let i = versions.length - 1; i >= 0; i--) { + let potential: string = versions[i]; + let satisfied: boolean = potential === '5.10.1'; + if (satisfied) { + version = potential; + break; + } + } + return version; + }, + cleanVersion: function(version) { + return '5.10.1'; + }, + downloadTool(url) { + if (url === `https://nodejs.org/dist/v5.10.1/node-v5.10.1-win-${os.arch()}.7z` || + url === `https://nodejs.org/dist/v5.10.1/node-v5.10.1-${os.platform()}-${os.arch()}.tar.gz`) { + let err = new Error(); + err['httpStatusCode'] = 404; + throw err; + } + else if (url === `https://nodejs.org/dist/v5.10.1/win-${os.arch()}/node.exe`) { + return 'exe_loc'; + } + else if (url === `https://nodejs.org/dist/v5.10.1/win-${os.arch()}/node.lib`) { + return 'exe_lib'; + } + else { + throw new Error('Incorrect URL'); + } + }, + extract7z(downloadPath, extPath, _7zPath) { + return 'extPath'; + }, + extractTar(downloadPath, extPath, _7zPath) { + return 'extPath'; + }, + cacheDir(dir, tool, version) { + return 'path to tool'; + }, + prependPath(toolPath) { + return; + } +}); + +tmr.run(); \ No newline at end of file diff --git a/_generated/NodeToolV0_Node20/Tests/L0ThirdDownloadSuccess.ts b/_generated/NodeToolV0_Node20/Tests/L0ThirdDownloadSuccess.ts new file mode 100644 index 000000000000..fbab92c0909d --- /dev/null +++ b/_generated/NodeToolV0_Node20/Tests/L0ThirdDownloadSuccess.ts @@ -0,0 +1,98 @@ +import ma = require('azure-pipelines-task-lib/mock-answer'); +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import os = require('os'); +import path = require('path'); + +let taskPath = path.join(__dirname, '..', 'nodetool.js'); +let tmr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tmr.setInput('versionSource', 'spec'); +tmr.setInput('versionSpec', '0.12.18'); +tmr.setInput('checkLatest', 'false'); +tmr.setInput('nodejsMirror', 'https://nodejs.org/dist'); + +let a: ma.TaskLibAnswers = { + "assertAgent": { + "2.115.1": true + }}; +tmr.setAnswers(a); + + +//Create assertAgent and getVariable mocks +const tl = require('azure-pipelines-task-lib/mock-task'); +const tlClone = Object.assign({}, tl); +tlClone.getVariable = function(variable: string) { + if (variable.toLowerCase() == 'agent.tempdirectory') { + return 'temp'; + } + return null; +}; +tlClone.assertAgent = function(variable: string) { + return; +}; +tmr.registerMock('azure-pipelines-task-lib/mock-task', tlClone); + +//Create tool-lib mock +tmr.registerMock('azure-pipelines-tool-lib/tool', { + isExplicitVersion: function(versionSpec) { + return false; + }, + findLocalTool: function(toolName, versionSpec) { + if (toolName != 'node') { + throw new Error('Searching for wrong tool'); + } + return false; + }, + evaluateVersions: function(versions, versionSpec) { + let version: string; + for (let i = versions.length - 1; i >= 0; i--) { + let potential: string = versions[i]; + let satisfied: boolean = potential === '0.12.18'; + if (satisfied) { + version = potential; + break; + } + } + return version; + }, + cleanVersion: function(version) { + return '0.12.18'; + }, + downloadTool(url) { + let err = new Error(); + err['httpStatusCode'] = '404'; + if (url === `https://nodejs.org/dist/v0.12.18/node-v0.12.18-win-${os.arch()}.7z` || + url === `https://nodejs.org/dist/v0.12.18/node-v0.12.18-${os.platform()}-${os.arch()}.tar.gz`) { + throw err; + } + else if (url === `https://nodejs.org/dist/v0.12.18/win-${os.arch()}/node.exe`) { + throw err; + } + else if (url === `https://nodejs.org/dist/v0.12.18/win-${os.arch()}/node.lib`) { + throw err; + } + else if (url === `https://nodejs.org/dist/v0.12.18/node.exe`) { + return 'exe_loc'; + } + else if (url === `https://nodejs.org/dist/v0.12.18/node.lib`) { + return 'exe_lib'; + } + else { + throw new Error('Incorrect URL'); + } + }, + extract7z(downloadPath, extPath, _7zPath) { + return 'extPath'; + }, + extractTar(downloadPath, extPath, _7zPath) { + return 'extPath'; + }, + cacheDir(dir, tool, version) { + return 'path to tool'; + }, + prependPath(toolPath) { + return; + } +}); + +tmr.run(); \ No newline at end of file diff --git a/_generated/NodeToolV0_Node20/icon.png b/_generated/NodeToolV0_Node20/icon.png new file mode 100644 index 000000000000..ccbddf54c6c9 Binary files /dev/null and b/_generated/NodeToolV0_Node20/icon.png differ diff --git a/_generated/NodeToolV0_Node20/icon.svg b/_generated/NodeToolV0_Node20/icon.svg new file mode 100644 index 000000000000..9522fcc4bbb6 --- /dev/null +++ b/_generated/NodeToolV0_Node20/icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/_generated/NodeToolV0_Node20/make.json b/_generated/NodeToolV0_Node20/make.json new file mode 100644 index 000000000000..9df0d9774107 --- /dev/null +++ b/_generated/NodeToolV0_Node20/make.json @@ -0,0 +1,20 @@ +{ + "externals": { + "archivePackages": [ + { + "archiveName": "7zr.zip", + "url": "https://vstsagenttools.blob.core.windows.net/tools/7zr/1805_x86/7zr.zip", + "dest": "./" + } + ] + }, + "rm": [ + { + "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" + ], + "options": "-Rf" + } + ] +} \ No newline at end of file diff --git a/_generated/NodeToolV0_Node20/nodetool.ts b/_generated/NodeToolV0_Node20/nodetool.ts new file mode 100644 index 000000000000..db7a6ffe1c1f --- /dev/null +++ b/_generated/NodeToolV0_Node20/nodetool.ts @@ -0,0 +1,272 @@ +import * as taskLib from 'azure-pipelines-task-lib/task'; +import * as toolLib from 'azure-pipelines-tool-lib/tool'; +import * as restm from 'typed-rest-client/RestClient'; +import * as telemetry from 'azure-pipelines-tasks-utility-common/telemetry'; +import * as os from 'os'; +import * as path from 'path'; +import * as fs from 'fs'; + +const force32bit: boolean = taskLib.getBoolInput('force32bit', false); +let osPlat: string = os.platform(); +let osArch: string = getArch(); + +async function run() { + try { + taskLib.setResourcePath(path.join(__dirname, 'task.json')); + let versionSource = taskLib.getInput('versionSource', true); + let versionSpecInput = taskLib.getInput('versionSpec', versionSource == 'spec'); + let versionFilePathInput = taskLib.getInput('versionFilePath', versionSource == 'fromFile'); + let nodejsMirror = taskLib.getInput('nodejsMirror', false); + let versionSpec = getNodeVersion(versionSource, versionSpecInput, versionFilePathInput); + let checkLatest: boolean = taskLib.getBoolInput('checkLatest', false); + await getNode(versionSpec, checkLatest, nodejsMirror.replace(/\/$/, '')); + telemetry.emitTelemetry('TaskHub', 'NodeToolV0', { versionSource, versionSpec, checkLatest, force32bit }); + } + catch (error) { + taskLib.setResult(taskLib.TaskResult.Failed, error.message); + } +} + +// +// Node versions interface +// see https://nodejs.org/dist/index.json +// +interface INodeVersion { + version: string, + files: string[], + semanticVersion: string +} + +// +// Basic pattern: +// if !checkLatest +// toolPath = check cache +// if !toolPath +// if version is a range +// match = query nodejs.org +// if !match +// fail +// toolPath = check cache +// if !toolPath +// download, extract, and cache +// toolPath = cacheDir +// PATH = cacheDir + PATH +// +async function getNode(versionSpec: string, checkLatest: boolean, nodejsMirror: string) { + let installedArch = osArch; + if (toolLib.isExplicitVersion(versionSpec)) { + checkLatest = false; // check latest doesn't make sense when explicit version + } + + // check cache + let toolPath: string; + if (!checkLatest) { + toolPath = toolLib.findLocalTool('node', versionSpec, installedArch); + + // In case if it's darwin arm and toolPath is empty trying to find x64 version + if (!toolPath && isDarwinArm(osPlat, installedArch)) { + toolPath = toolLib.findLocalTool('node', versionSpec, 'x64'); + } + } + + if (!toolPath) { + let version: string; + if (toolLib.isExplicitVersion(versionSpec)) { + // version to download + version = versionSpec; + } else { + // query nodejs.org for a matching version + version = await queryLatestMatch(versionSpec, installedArch, nodejsMirror); + + if (!version && isDarwinArm(osPlat, installedArch)) { + // nodejs.org does not have an arm64 build for macOS, so we fall back to x64 + console.log(taskLib.loc('TryRosetta', osPlat, installedArch)); + + version = await queryLatestMatch(versionSpec, 'x64', nodejsMirror); + installedArch = 'x64'; + } + + if (!version) { + throw new Error(taskLib.loc('NodeVersionNotFound', versionSpec, osPlat, installedArch)); + } + + // check cache + toolPath = toolLib.findLocalTool('node', version, installedArch) + } + + if (!toolPath) { + // download, extract, cache + toolPath = await acquireNode(version, installedArch, nodejsMirror); + } + } + + // + // a tool installer initimately knows details about the layout of that tool + // for example, node binary is in the bin folder after the extract on Mac/Linux. + // layouts could change by version, by platform etc... but that's the tool installers job + // + if (osPlat != 'win32') { + toolPath = path.join(toolPath, 'bin'); + } + + // + // prepend the tools path. instructs the agent to prepend for future tasks + // + toolLib.prependPath(toolPath); +} + +async function queryLatestMatch(versionSpec: string, installedArch: string, nodejsMirror: string): Promise { + // node offers a json list of versions + let dataFileName: string; + switch (osPlat) { + case "linux": dataFileName = "linux-" + installedArch; break; + case "darwin": dataFileName = "osx-" + installedArch + '-tar'; break; + case "win32": dataFileName = "win-" + installedArch + '-exe'; break; + default: throw new Error(taskLib.loc('UnexpectedOS', osPlat)); + } + + let versions: string[] = []; + let dataUrl = nodejsMirror + "/index.json"; + let rest: restm.RestClient = new restm.RestClient('vsts-node-tool'); + let nodeVersions: INodeVersion[] = (await rest.get(dataUrl)).result; + nodeVersions.forEach((nodeVersion:INodeVersion) => { + // ensure this version supports your os and platform + if (nodeVersion.files.indexOf(dataFileName) >= 0) { + // versions in the file are prefixed with 'v', which is not valid SemVer + // remove 'v' so that toolLib.evaluateVersions behaves properly + nodeVersion.semanticVersion = toolLib.cleanVersion(nodeVersion.version); + versions.push(nodeVersion.semanticVersion); + } + }); + + // get the latest version that matches the version spec + let latestVersion: string = toolLib.evaluateVersions(versions, versionSpec); + // In case if that we had not found version that match + if (!latestVersion) return null; + + return nodeVersions.find(v => v.semanticVersion === latestVersion).version; +} + +async function acquireNode(version: string, installedArch: string, nodejsMirror: string): Promise { + // + // Download - a tool installer intimately knows how to get the tool (and construct urls) + // + version = toolLib.cleanVersion(version); + + const isWin32: boolean = osPlat == 'win32'; + + const platform: string = isWin32 ? 'win' : osPlat; + + const fileName: string = `node-v${version}-${platform}-${installedArch}`; + + const fileExtension: string = isWin32 ? '.7z' : '.tar.gz'; + + const downloadUrl: string = `${nodejsMirror}/v${version}/${fileName}${fileExtension}`; + + let downloadPath: string; + + try { + downloadPath = await toolLib.downloadTool(downloadUrl); + } catch (err) { + if (isWin32 && err['httpStatusCode'] == 404) { + return await acquireNodeFromFallbackLocation(version, nodejsMirror); + } + + throw err; + } + + // + // Extract + // + let extPath: string; + + if (isWin32) { + taskLib.assertAgent('2.115.0'); + extPath = taskLib.getVariable('Agent.TempDirectory'); + if (!extPath) { + throw new Error(taskLib.loc('AgentTempDirNotSet')); + } + + let _7zPath = path.join(__dirname, '7zr.exe'); + extPath = await toolLib.extract7z(downloadPath, extPath, _7zPath); + } + else { + extPath = await toolLib.extractTar(downloadPath); + } + + // + // Install into the local tool cache - node extracts with a root folder that matches the fileName downloaded + // + let toolRoot = path.join(extPath, fileName); + return await toolLib.cacheDir(toolRoot, 'node', version, installedArch); +} + +// For non LTS versions of Node, the files we need (for Windows) are sometimes located +// in a different folder than they normally are for other versions. +// Normally the format is similar to: https://nodejs.org/dist/v5.10.1/node-v5.10.1-win-x64.7z +// In this case, there will be two files located at: +// /dist/v5.10.1/win-x64/node.exe +// /dist/v5.10.1/win-x64/node.lib +// If this is not the structure, there may also be two files located at: +// /dist/v0.12.18/node.exe +// /dist/v0.12.18/node.lib +// This method attempts to download and cache the resources from these alternative locations. +// Note also that the files are normally zipped but in this case they are just an exe +// and lib file in a folder, not zipped. +async function acquireNodeFromFallbackLocation(version: string, nodejsMirror: string): Promise { + // Create temporary folder to download in to + let tempDownloadFolder: string = 'temp_' + Math.floor(Math.random() * 2000000000); + let tempDir: string = path.join(taskLib.getVariable('agent.tempDirectory'), tempDownloadFolder); + taskLib.mkdirP(tempDir); + let exeUrl: string; + let libUrl: string; + try { + exeUrl = `${nodejsMirror}/v${version}/win-${osArch}/node.exe`; + libUrl = `${nodejsMirror}/v${version}/win-${osArch}/node.lib`; + + await toolLib.downloadTool(exeUrl, path.join(tempDir, "node.exe")); + await toolLib.downloadTool(libUrl, path.join(tempDir, "node.lib")); + } + catch (err) { + if (err['httpStatusCode'] && + err['httpStatusCode'] == 404) + { + exeUrl = `${nodejsMirror}/v${version}/node.exe`; + libUrl = `${nodejsMirror}/v${version}/node.lib`; + + await toolLib.downloadTool(exeUrl, path.join(tempDir, "node.exe")); + await toolLib.downloadTool(libUrl, path.join(tempDir, "node.lib")); + } + else { + throw err; + } + } + return await toolLib.cacheDir(tempDir, 'node', version, osArch); +} + +// Check is the system are darwin arm and rosetta is installed +function isDarwinArm(osPlat: string, installedArch: string): boolean { + if (osPlat === 'darwin' && installedArch === 'arm64') { + // Check that Rosetta is installed and returns some pid + const execResult = taskLib.execSync('pgrep', 'oahd'); + return execResult.code === 0 && !!execResult.stdout; + } + return false; +} + +function getArch(): string { + let arch: string = os.arch(); + if (arch === 'ia32' || force32bit) { + arch = 'x86'; + } + return arch; +} + +function getNodeVersion(versionSource: string, versionSpecInput: string, versionFilePathInput: string) { + if (versionSource == 'spec') + return versionSpecInput + + return fs.readFileSync(versionFilePathInput, { 'encoding': 'utf8' }); +} + +run(); diff --git a/_generated/NodeToolV0_Node20/package-lock.json b/_generated/NodeToolV0_Node20/package-lock.json new file mode 100644 index 000000000000..45a09146af9a --- /dev/null +++ b/_generated/NodeToolV0_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/_generated/NodeToolV0_Node20/package.json b/_generated/NodeToolV0_Node20/package.json new file mode 100644 index 000000000000..25ab0ab2f217 --- /dev/null +++ b/_generated/NodeToolV0_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/_generated/NodeToolV0_Node20/task.json b/_generated/NodeToolV0_Node20/task.json new file mode 100644 index 000000000000..2fc1c5b5e222 --- /dev/null +++ b/_generated/NodeToolV0_Node20/task.json @@ -0,0 +1,122 @@ +{ + "id": "31C75BBB-BCDF-4706-8D7C-4DA6A1959BC2", + "name": "NodeTool", + "friendlyName": "Node.js tool installer", + "description": "Finds or downloads and caches the specified version spec of Node.js and adds it to the PATH", + "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/tool/node-js", + "helpMarkDown": "[Learn more about this task](https://docs.microsoft.com/azure/devops/pipelines/tasks/tool/node-js) or [see the Node documentation](https://nodejs.org/docs/latest/api/documentation.html)", + "category": "Tool", + "runsOn": [ + "Agent", + "DeploymentGroup" + ], + "author": "Microsoft Corporation", + "version": { + "Major": 0, + "Minor": 229, + "Patch": 4 + }, + "satisfies": [ + "Node", + "npm", + "node.js" + ], + "demands": [], + "minimumAgentVersion": "2.182.1", + "instanceNameFormat": "Use Node $(versionSpec)", + "groups": [ + { + "name": "advanced", + "displayName": "Advanced", + "isExpanded": false + } + ], + "inputs": [ + { + "name": "versionSource", + "type": "radio", + "label": "Source of version", + "required": true, + "defaultValue": "spec", + "options": { + "spec": "Specify Node version", + "fromFile": "Get version from file" + } + }, + { + "name": "versionSpec", + "type": "string", + "label": "Version Spec", + "defaultValue": "6.x", + "helpMarkDown": "Version Spec of version to get. Examples: 6.x, 4.x, 6.10.0, >=6.10.0", + "visibleRule": "versionSource = spec" + }, + { + "name": "versionFilePath", + "type": "string", + "label": "Path to the .nvmrc file", + "helpMarkDown": "File path to get version. Example: src/.nvmrc", + "visibleRule": "versionSource = fromFile" + }, + { + "name": "checkLatest", + "type": "boolean", + "label": "Check for Latest Version", + "defaultValue": "false", + "required": false, + "helpMarkDown": "Always checks online for the latest available version that satisfies the version spec. This is typically false unless you have a specific scenario to always get latest. This will cause it to incur download costs when potentially not necessary, especially with the hosted build pool." + }, + { + "name": "force32bit", + "type": "boolean", + "label": "Use 32 bit version on x64 agents", + "defaultValue": "false", + "required": false, + "helpMarkDown": "Installs the x86 version of Node regardless of the CPU architecture of the agent." + }, + { + "name": "nodejsMirror", + "type": "string", + "label": "Set source for Node.js binaries", + "defaultValue": "https://nodejs.org/dist", + "required": false, + "groupName": "advanced", + "helpMarkDown": "Use an alternative installation mirror when sourcing the Node.js binaries." + } + ], + "execution": { + "Node10": { + "target": "nodetool.js", + "argumentFormat": "" + }, + "Node16": { + "target": "nodetool.js", + "argumentFormat": "" + }, + "Node20": { + "target": "nodetool.js", + "argumentFormat": "" + } + }, + "restrictions": { + "commands": { + "mode": "restricted" + }, + "settableVariables": { + "allowed": [ + "PATH" + ] + } + }, + "messages": { + "ToolFailed": "Tool install failed: %s", + "TryRosetta": "Unable to find Node for platform %s and architecture %s. Trying to install with Rosetta2", + "NodeVersionNotFound": "Unable to find Node version %s for platform %s and architecture %s.", + "UnexpectedOS": "Unexpected OS %s", + "AgentTempDirNotSet": "Expected Agent.TempDirectory to be set." + }, + "_buildConfigMapping": { + "Default": "0.229.3", + "Node20-225": "0.229.4" + } +} \ No newline at end of file diff --git a/_generated/NodeToolV0_Node20/task.loc.json b/_generated/NodeToolV0_Node20/task.loc.json new file mode 100644 index 000000000000..089344e2c4e9 --- /dev/null +++ b/_generated/NodeToolV0_Node20/task.loc.json @@ -0,0 +1,122 @@ +{ + "id": "31C75BBB-BCDF-4706-8D7C-4DA6A1959BC2", + "name": "NodeTool", + "friendlyName": "ms-resource:loc.friendlyName", + "description": "ms-resource:loc.description", + "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/tool/node-js", + "helpMarkDown": "ms-resource:loc.helpMarkDown", + "category": "Tool", + "runsOn": [ + "Agent", + "DeploymentGroup" + ], + "author": "Microsoft Corporation", + "version": { + "Major": 0, + "Minor": 229, + "Patch": 4 + }, + "satisfies": [ + "Node", + "npm", + "node.js" + ], + "demands": [], + "minimumAgentVersion": "2.182.1", + "instanceNameFormat": "ms-resource:loc.instanceNameFormat", + "groups": [ + { + "name": "advanced", + "displayName": "ms-resource:loc.group.displayName.advanced", + "isExpanded": false + } + ], + "inputs": [ + { + "name": "versionSource", + "type": "radio", + "label": "ms-resource:loc.input.label.versionSource", + "required": true, + "defaultValue": "spec", + "options": { + "spec": "Specify Node version", + "fromFile": "Get version from file" + } + }, + { + "name": "versionSpec", + "type": "string", + "label": "ms-resource:loc.input.label.versionSpec", + "defaultValue": "6.x", + "helpMarkDown": "ms-resource:loc.input.help.versionSpec", + "visibleRule": "versionSource = spec" + }, + { + "name": "versionFilePath", + "type": "string", + "label": "ms-resource:loc.input.label.versionFilePath", + "helpMarkDown": "ms-resource:loc.input.help.versionFilePath", + "visibleRule": "versionSource = fromFile" + }, + { + "name": "checkLatest", + "type": "boolean", + "label": "ms-resource:loc.input.label.checkLatest", + "defaultValue": "false", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.checkLatest" + }, + { + "name": "force32bit", + "type": "boolean", + "label": "ms-resource:loc.input.label.force32bit", + "defaultValue": "false", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.force32bit" + }, + { + "name": "nodejsMirror", + "type": "string", + "label": "ms-resource:loc.input.label.nodejsMirror", + "defaultValue": "https://nodejs.org/dist", + "required": false, + "groupName": "advanced", + "helpMarkDown": "ms-resource:loc.input.help.nodejsMirror" + } + ], + "execution": { + "Node10": { + "target": "nodetool.js", + "argumentFormat": "" + }, + "Node16": { + "target": "nodetool.js", + "argumentFormat": "" + }, + "Node20": { + "target": "nodetool.js", + "argumentFormat": "" + } + }, + "restrictions": { + "commands": { + "mode": "restricted" + }, + "settableVariables": { + "allowed": [ + "PATH" + ] + } + }, + "messages": { + "ToolFailed": "ms-resource:loc.messages.ToolFailed", + "TryRosetta": "ms-resource:loc.messages.TryRosetta", + "NodeVersionNotFound": "ms-resource:loc.messages.NodeVersionNotFound", + "UnexpectedOS": "ms-resource:loc.messages.UnexpectedOS", + "AgentTempDirNotSet": "ms-resource:loc.messages.AgentTempDirNotSet" + }, + "_buildConfigMapping": { + "Default": "0.229.3", + "Node20-225": "0.229.4" + } +} \ No newline at end of file diff --git a/_generated/NodeToolV0_Node20/tsconfig.json b/_generated/NodeToolV0_Node20/tsconfig.json new file mode 100644 index 000000000000..0438b79f69ac --- /dev/null +++ b/_generated/NodeToolV0_Node20/tsconfig.json @@ -0,0 +1,6 @@ +{ + "compilerOptions": { + "target": "ES6", + "module": "commonjs" + } +} \ No newline at end of file diff --git a/_generated/PowerShellV2.versionmap.txt b/_generated/PowerShellV2.versionmap.txt new file mode 100644 index 000000000000..49a926b71576 --- /dev/null +++ b/_generated/PowerShellV2.versionmap.txt @@ -0,0 +1,2 @@ +Default|2.229.4 +Node20-225|2.229.5 diff --git a/_generated/PowerShellV2/Strings/resources.resjson/de-DE/resources.resjson b/_generated/PowerShellV2/Strings/resources.resjson/de-DE/resources.resjson new file mode 100644 index 000000000000..4317e629d754 --- /dev/null +++ b/_generated/PowerShellV2/Strings/resources.resjson/de-DE/resources.resjson @@ -0,0 +1,54 @@ +{ + "loc.friendlyName": "PowerShell", + "loc.helpMarkDown": "[Weitere Informationen zu dieser Aufgabe](https://go.microsoft.com/fwlink/?LinkID=613736)", + "loc.description": "Hiermit wird ein PowerShell-Skript für Linux, macOS oder Windows ausgeführt.", + "loc.instanceNameFormat": "PowerShell-Skript", + "loc.releaseNotes": "Skriptaufgabenkonsistenz. Unterstützung für macOS und Linux wurde hinzugefügt.", + "loc.group.displayName.preferenceVariables": "Einstellungsvariablen", + "loc.group.displayName.advanced": "Erweitert", + "loc.input.label.targetType": "Typ", + "loc.input.help.targetType": "Zielskripttyp: Dateipfad oder Inline", + "loc.input.label.filePath": "Skriptpfad", + "loc.input.help.filePath": "Der Pfad des auszuführenden Skripts. Es muss sich um einen vollqualifizierten Pfad oder einen Pfad relativ zu \"$(System.DefaultWorkingDirectory)\" handeln.", + "loc.input.label.arguments": "Argumente", + "loc.input.help.arguments": "An das PowerShell-Skript übergebene Argumente. Entweder Ordnungszahlparameter oder benannte Parameter.", + "loc.input.label.script": "Skript", + "loc.input.label.errorActionPreference": "ErrorActionPreference", + "loc.input.help.errorActionPreference": "Wenn nicht „Default“ wird die Zeile `$ErrorActionPreference = 'VALUE'` am Anfang des Skripts vorangestellt.", + "loc.input.label.warningPreference": "WarningPreference", + "loc.input.help.warningPreference": "Wenn nicht „Default“ wird die Zeile `$WarningPreference = 'VALUE'` am Anfang des Skripts vorangestellt..", + "loc.input.label.informationPreference": "InformationPreference", + "loc.input.help.informationPreference": "Wenn nicht „Default“ wird die Zeile `$InformationPreference = 'VALUE'` am Anfang des Skripts vorangestellt.", + "loc.input.label.verbosePreference": "VerbosePreference", + "loc.input.help.verbosePreference": "Wenn nicht „Default“ wird die Zeile `$VerbosePreference = 'VALUE'` am Anfang des Skripts vorangestellt..", + "loc.input.label.debugPreference": "DebugPreference", + "loc.input.help.debugPreference": "Wenn nicht „Default“ wird die Zeile `$DebugPreference = 'VALUE'` am Anfang des Skripts vorangestellt.", + "loc.input.label.progressPreference": "ProgressPreference", + "loc.input.help.progressPreference": "Wenn nicht \"Default\" wird die Zeile \"$ProgressPreference = 'VALUE'\" am Anfang des Skripts vorangestellt..", + "loc.input.label.failOnStderr": "Fehler aufgrund von Standardfehler.", + "loc.input.help.failOnStderr": "Wenn dieser Wert TRUE ist, tritt ein Aufgabenfehler auf, wenn Fehler in die Fehlerpipeline oder Daten in den Standard-Fehlerdatenstrom geschrieben werden. Andernfalls verwendet die Aufgabe ausschließlich den Exitcode zum Ermitteln von Fehlern.", + "loc.input.label.showWarnings": "Warnungen als Azure DevOps-Warnungen anzeigen", + "loc.input.help.showWarnings": "Wenn diese Option auf TRUE festgelegt ist und Ihr Skript Warnungen schreibt, werden diese auch in Pipelineprotokollen als Warnungen angezeigt.", + "loc.input.label.ignoreLASTEXITCODE": "$LASTEXITCODE ignorieren", + "loc.input.help.ignoreLASTEXITCODE": "Wenn dieser Wert FALSE ist, wird am Ende Ihres Skripts die Zeile \"if ((Test-Path -LiteralPath variable:\\LASTEXITCODE)) { exit $LASTEXITCODE }\" angehängt. Dadurch wird der letzte Exitcode aus einem externen Befehl als Exitcode der PowerShell weitergegeben. Andernfalls wird die Zeile nicht an das Ende Ihres Skripts angehängt.", + "loc.input.label.pwsh": "PowerShell Core verwenden", + "loc.input.help.pwsh": "Sofern TRUE, verwendet die Aufgabe unter Windows anstelle von \"powershell.exe\" die in PATH festgelegte \"pwsh.exe\".", + "loc.input.label.workingDirectory": "Arbeitsverzeichnis", + "loc.input.help.workingDirectory": "Arbeitsverzeichnis zum Ausführen des Skripts.", + "loc.input.label.runScriptInSeparateScope": "Skript im separaten Bereich ausführen", + "loc.input.help.runScriptInSeparateScope": "Diese Eingabe ermöglicht das Ausführen von PowerShell-Skripts mithilfe des Operators \"&\", statt mit dem Standard \".\". Wenn dieser Eingabesatz auf das true-Skript festgelegt wird, wird er in einem separaten Bereich ausgeführt, und PowerShell-Variablen mit globalem Bereich werden nicht aktualisiert.", + "loc.messages.GeneratingScript": "Skript wird erstellt.", + "loc.messages.JS_ExitCode": "PowerShell wurde beendet mit dem Code \"%s\".", + "loc.messages.JS_FormattedCommand": "Formatierter Befehl: %s", + "loc.messages.JS_InvalidActionPreference": "Ungültige Aktionseinstellung für %s: „%s“. Der Wert muss einer der folgenden Werte sein: %s", + "loc.messages.JS_InvalidFilePath": "Ungültiger Dateipfad \"%s\". Ein Pfad zu einer PS1-Datei ist erforderlich.", + "loc.messages.JS_Stderr": "PowerShell hat mindestens eine Zeile in den Standardfehlerstream geschrieben.", + "loc.messages.JS_InvalidTargetType": "Ungültiger Zieltyp \"%s\". Der Wert muss einem der Werte \"filepath\" oder \"inline\" entsprechen", + "loc.messages.PS_ExitCode": "PowerShell wurde beendet mit dem Code \"{0}\".", + "loc.messages.PS_FormattedCommand": "Formatierter Befehl: {0}", + "loc.messages.PS_InvalidActionPreference": "Ungültige Aktionseinstellung für {0}: „{1}“. Der Wert muss einer der folgenden Werte sein: {2}", + "loc.messages.PS_InvalidFilePath": "Ungültiger Dateipfad \"{0}\". Ein Pfad zu einer PS1-Datei ist erforderlich.", + "loc.messages.PS_UnableToDetermineExitCode": "Unerwartete Ausnahme. Der Exitcode von PowerShell konnte nicht bestimmt werden.", + "loc.messages.PS_InvalidTargetType": "Ungültiger Zieltyp \"{0}\". Der Wert muss einem der Werte \"filepath\" oder \"inline\" entsprechen", + "loc.messages.ScriptArgsSanitized": "Erkannte Zeichen in Argumenten, die von der Shell möglicherweise nicht ordnungsgemäß ausgeführt werden. Verwenden Sie einen Backtick (`), um Sonderzeichen mit Escapezeichen zu versehen. Weitere Informationen finden Sie hier: https://aka.ms/ado/75787" +} \ No newline at end of file diff --git a/_generated/PowerShellV2/Strings/resources.resjson/en-US/resources.resjson b/_generated/PowerShellV2/Strings/resources.resjson/en-US/resources.resjson new file mode 100644 index 000000000000..f4b03fe1b455 --- /dev/null +++ b/_generated/PowerShellV2/Strings/resources.resjson/en-US/resources.resjson @@ -0,0 +1,54 @@ +{ + "loc.friendlyName": "PowerShell", + "loc.helpMarkDown": "[Learn more about this task](https://go.microsoft.com/fwlink/?LinkID=613736)", + "loc.description": "Run a PowerShell script on Linux, macOS, or Windows", + "loc.instanceNameFormat": "PowerShell Script", + "loc.releaseNotes": "Script task consistency. Added support for macOS and Linux.", + "loc.group.displayName.preferenceVariables": "Preference Variables", + "loc.group.displayName.advanced": "Advanced", + "loc.input.label.targetType": "Type", + "loc.input.help.targetType": "Target script type: File Path or Inline", + "loc.input.label.filePath": "Script Path", + "loc.input.help.filePath": "Path of the script to execute. Must be a fully qualified path or relative to $(System.DefaultWorkingDirectory).", + "loc.input.label.arguments": "Arguments", + "loc.input.help.arguments": "Arguments passed to the PowerShell script. Either ordinal parameters or named parameters.", + "loc.input.label.script": "Script", + "loc.input.label.errorActionPreference": "ErrorActionPreference", + "loc.input.help.errorActionPreference": "When not `Default`, prepends the line `$ErrorActionPreference = 'VALUE'` at the top of your script.", + "loc.input.label.warningPreference": "WarningPreference", + "loc.input.help.warningPreference": "When not `Default`, prepends the line `$WarningPreference = 'VALUE'` at the top of your script.", + "loc.input.label.informationPreference": "InformationPreference", + "loc.input.help.informationPreference": "When not `Default`, prepends the line `$InformationPreference = 'VALUE'` at the top of your script.", + "loc.input.label.verbosePreference": "VerbosePreference", + "loc.input.help.verbosePreference": "When not `Default`, prepends the line `$VerbosePreference = 'VALUE'` at the top of your script.", + "loc.input.label.debugPreference": "DebugPreference", + "loc.input.help.debugPreference": "When not `Default`, prepends the line `$DebugPreference = 'VALUE'` at the top of your script.", + "loc.input.label.progressPreference": "ProgressPreference", + "loc.input.help.progressPreference": "When not `Default`, prepends the line `$ProgressPreference = 'VALUE'` at the top of your script.", + "loc.input.label.failOnStderr": "Fail on Standard Error", + "loc.input.help.failOnStderr": "If this is true, this task will fail if any errors are written to the error pipeline, or if any data is written to the Standard Error stream. Otherwise the task will rely on the exit code to determine failure.", + "loc.input.label.showWarnings": "Show warnings as Azure DevOps warnings", + "loc.input.help.showWarnings": "If this is true, and your script writes a warnings - they are shown as warnings also in pipeline logs", + "loc.input.label.ignoreLASTEXITCODE": "Ignore $LASTEXITCODE", + "loc.input.help.ignoreLASTEXITCODE": "If this is false, the line `if ((Test-Path -LiteralPath variable:\\LASTEXITCODE)) { exit $LASTEXITCODE }` is appended to the end of your script. This will cause the last exit code from an external command to be propagated as the exit code of powershell. Otherwise the line is not appended to the end of your script.", + "loc.input.label.pwsh": "Use PowerShell Core", + "loc.input.help.pwsh": "If this is true, then on Windows the task will use pwsh.exe from your PATH instead of powershell.exe.", + "loc.input.label.workingDirectory": "Working Directory", + "loc.input.help.workingDirectory": "Working directory where the script is run.", + "loc.input.label.runScriptInSeparateScope": "Run script in the separate scope", + "loc.input.help.runScriptInSeparateScope": "This input allows executing PowerShell scripts using '&' operator instead of the default '.'. If this input set to the true script will be executed in separate scope and globally scoped PowerShell variables won't be updated", + "loc.messages.GeneratingScript": "Generating script.", + "loc.messages.JS_ExitCode": "PowerShell exited with code '%s'.", + "loc.messages.JS_FormattedCommand": "Formatted command: %s", + "loc.messages.JS_InvalidActionPreference": "Invalid action preference for %s: '%s'. The value must be one of: %s", + "loc.messages.JS_InvalidFilePath": "Invalid file path '%s'. A path to a .ps1 file is required.", + "loc.messages.JS_Stderr": "PowerShell wrote one or more lines to the standard error stream.", + "loc.messages.JS_InvalidTargetType": "Invalid target type '%s'. The value must be one of: 'filepath' or 'inline'", + "loc.messages.PS_ExitCode": "PowerShell exited with code '{0}'.", + "loc.messages.PS_FormattedCommand": "Formatted command: {0}", + "loc.messages.PS_InvalidActionPreference": "Invalid action preference for {0}: '{1}'. The value must be one of: {2}", + "loc.messages.PS_InvalidFilePath": "Invalid file path '{0}'. A path to a .ps1 file is required.", + "loc.messages.PS_UnableToDetermineExitCode": "Unexpected exception. Unable to determine the exit code from powershell.", + "loc.messages.PS_InvalidTargetType": "Invalid target type '{0}'. The value must be one of: 'filepath' or 'inline'", + "loc.messages.ScriptArgsSanitized": "Detected characters in arguments that may not be executed correctly by the shell. Please escape special characters using backtick (`). More information is available here: https://aka.ms/ado/75787" +} \ No newline at end of file diff --git a/_generated/PowerShellV2/Strings/resources.resjson/es-ES/resources.resjson b/_generated/PowerShellV2/Strings/resources.resjson/es-ES/resources.resjson new file mode 100644 index 000000000000..02b1fd0260da --- /dev/null +++ b/_generated/PowerShellV2/Strings/resources.resjson/es-ES/resources.resjson @@ -0,0 +1,54 @@ +{ + "loc.friendlyName": "PowerShell", + "loc.helpMarkDown": "[Obtener más información acerca de esta tarea](https://go.microsoft.com/fwlink/?LinkID=613736)", + "loc.description": "Ejecuta un script de PowerShell en Linux, macOS o Windows.", + "loc.instanceNameFormat": "Script de PowerShell", + "loc.releaseNotes": "Coherencia de la tarea Script. Se ha agregado compatibilidad con macOS y Linux.", + "loc.group.displayName.preferenceVariables": "Variables de preferencia", + "loc.group.displayName.advanced": "Avanzado", + "loc.input.label.targetType": "Tipo", + "loc.input.help.targetType": "Tipo de script de destino: ruta de acceso de archivo o insertado", + "loc.input.label.filePath": "Ruta de acceso del script", + "loc.input.help.filePath": "Ruta de acceso del script que se va a ejecutar. Debe ser una ruta de acceso completa o relativa a $(System.DefaultWorkingDirectory).", + "loc.input.label.arguments": "Argumentos", + "loc.input.help.arguments": "Argumentos pasados al script de PowerShell. Pueden ser parámetros ordinales o parámetros con nombre.", + "loc.input.label.script": "Script", + "loc.input.label.errorActionPreference": "ErrorActionPreference", + "loc.input.help.errorActionPreference": "Cuando no es \"Valor predeterminado\", antepone la línea \"$ErrorActionPreference = 'VALOR'\" al principio del script.", + "loc.input.label.warningPreference": "WarningPreference", + "loc.input.help.warningPreference": "Cuando no es \"Valor predeterminado\", antepone la línea \"$WarningPreference = 'VALOR'\" al principio del script.", + "loc.input.label.informationPreference": "InformationPreference", + "loc.input.help.informationPreference": "Cuando no es \"Valor predeterminado\", antepone la línea \"$InformationPreference = 'VALOR'\" al principio del script.", + "loc.input.label.verbosePreference": "VerbosePreference", + "loc.input.help.verbosePreference": "Cuando no es \"Valor predeterminado\", antepone la línea \"$VerbosePreference = 'VALOR'\" al principio del script.", + "loc.input.label.debugPreference": "DebugPreference", + "loc.input.help.debugPreference": "Cuando no es \"Valor predeterminado\", antepone la línea \"$DebugPreference = 'VALOR'\" al principio del script.", + "loc.input.label.progressPreference": "ProgressPreference", + "loc.input.help.progressPreference": "Cuando no es \"Valor predeterminado\", antepone la línea \"$ProgressPreference = 'VALOR'\" al principio del script.", + "loc.input.label.failOnStderr": "Error si se produce un error estándar", + "loc.input.help.failOnStderr": "Si es true, se producirá un error en la tarea si se escriben errores en la canalización de errores o si se escriben datos en la secuencia de error estándar. De lo contrario, la tarea se basará en el código de salida para determinar el error.", + "loc.input.label.showWarnings": "Mostrar advertencias como advertencias de Azure DevOps", + "loc.input.help.showWarnings": "Si es true y el script escribe advertencias, se muestran también como advertencias en los registros de canalización.", + "loc.input.label.ignoreLASTEXITCODE": "Omitir $LASTEXITCODE", + "loc.input.help.ignoreLASTEXITCODE": "Si es false, se anexa la línea \"if ((Test-Path -LiteralPath variable:\\LASTEXITCODE)) { exit $LASTEXITCODE }\" al final del script. Esto hará que se propague el último código de salida de un comando externo como código de salida de PowerShell. De lo contrario, no se anexa la línea al final del script.", + "loc.input.label.pwsh": "Usar PowerShell Core", + "loc.input.help.pwsh": "Si es true, la tarea usará pwsh.exe desde PATH en lugar de powershell.exe en Windows.", + "loc.input.label.workingDirectory": "Directorio de trabajo", + "loc.input.help.workingDirectory": "Directorio de trabajo donde se ejecuta el script.", + "loc.input.label.runScriptInSeparateScope": "Ejecutar el script en el ámbito independiente", + "loc.input.help.runScriptInSeparateScope": "Esta entrada permite ejecutar scripts de PowerShell utilizando el operador '&' en lugar del predeterminado '.'. Si esta entrada se establece como verdadera, el script se ejecutará en un ámbito separado y las variables PowerShell de ámbito global no se actualizarán", + "loc.messages.GeneratingScript": "Generando script.", + "loc.messages.JS_ExitCode": "PowerShell se cerró con el código \"%s\".", + "loc.messages.JS_FormattedCommand": "Comando con formato: %s", + "loc.messages.JS_InvalidActionPreference": "Preferencia de acción no válida para %s: \"%s\". El valor debe ser uno de los siguientes: %s", + "loc.messages.JS_InvalidFilePath": "La ruta de acceso de archivo \"%s\" no es válida. Se necesita una ruta de acceso a un archivo .ps1.", + "loc.messages.JS_Stderr": "PowerShell escribió una o varias líneas en la secuencia de error estándar.", + "loc.messages.JS_InvalidTargetType": "Tipo de destino «%s» no válido. El valor debe ser uno de los siguientes: «FilePath» o «inline»", + "loc.messages.PS_ExitCode": "PowerShell se cerró con el código \"{0}\".", + "loc.messages.PS_FormattedCommand": "Comando con formato: {0}", + "loc.messages.PS_InvalidActionPreference": "Preferencia de acción no válida para {0}: \"{1}\". El valor debe ser uno de los siguientes: {2}", + "loc.messages.PS_InvalidFilePath": "La ruta de acceso de archivo \"{0}\" no es válida. Se necesita una ruta de acceso a un archivo .ps1.", + "loc.messages.PS_UnableToDetermineExitCode": "Excepción inesperada. No se puede determinar el código de salida de PowerShell.", + "loc.messages.PS_InvalidTargetType": "Tipo de destino «{0}» no válido. El valor debe ser uno de los siguientes: «FilePath» o «inline»", + "loc.messages.ScriptArgsSanitized": "Se detectaron caracteres en argumentos que el shell no puede ejecutar correctamente. Escape de los caracteres especiales mediante el acento grave ('). Puede encontrar más información aquí: https://aka.ms/ado/75787" +} \ No newline at end of file diff --git a/_generated/PowerShellV2/Strings/resources.resjson/fr-FR/resources.resjson b/_generated/PowerShellV2/Strings/resources.resjson/fr-FR/resources.resjson new file mode 100644 index 000000000000..9b3f6ab74d46 --- /dev/null +++ b/_generated/PowerShellV2/Strings/resources.resjson/fr-FR/resources.resjson @@ -0,0 +1,54 @@ +{ + "loc.friendlyName": "PowerShell", + "loc.helpMarkDown": "[En savoir plus sur cette tâche](https://go.microsoft.com/fwlink/?LinkID=613736)", + "loc.description": "Exécuter un script PowerShell sur Linux, macOS ou Windows", + "loc.instanceNameFormat": "Script PowerShell", + "loc.releaseNotes": "Cohérence de la tâche de script. Ajout de la prise en charge de macOS et de Linux.", + "loc.group.displayName.preferenceVariables": "Variables de préférence", + "loc.group.displayName.advanced": "Avancé", + "loc.input.label.targetType": "Type", + "loc.input.help.targetType": "Type de script cible : chemin de fichier ou inline", + "loc.input.label.filePath": "Chemin du script", + "loc.input.help.filePath": "Chemin du script à exécuter. Il doit s'agir d'un chemin complet ou d'un chemin relatif à $(System.DefaultWorkingDirectory).", + "loc.input.label.arguments": "Arguments", + "loc.input.help.arguments": "Arguments passés au script PowerShell. Il s'agit de paramètres ordinaux ou nommés.", + "loc.input.label.script": "Script", + "loc.input.label.errorActionPreference": "ErrorActionPreference", + "loc.input.help.errorActionPreference": "Si ce n’est pas le cas, ajoute la ligne « $ErrorActionPreference = 'VALUE'» en haut de votre script.", + "loc.input.label.warningPreference": "WarningPreference", + "loc.input.help.warningPreference": "Si ce n’est pas le cas, ajoute la ligne « $WarningPreference = 'VALUE'» en haut de votre script.", + "loc.input.label.informationPreference": "InformationPreference", + "loc.input.help.informationPreference": "Si ce n’est pas le cas, ajoute la ligne « $InformationPreference = 'VALUE» en haut de votre script.", + "loc.input.label.verbosePreference": "VerbosePreference", + "loc.input.help.verbosePreference": "Si ce n’est pas le cas, ajoute la ligne « $VerbosePreference = 'VALUE'» en haut de votre script.", + "loc.input.label.debugPreference": "DebugPreference", + "loc.input.help.debugPreference": "Si ce n’est pas le cas, ajoute la ligne « $DebugPreference = 'VALUE» en haut de votre script.", + "loc.input.label.progressPreference": "ProgressPreference", + "loc.input.help.progressPreference": "Lorsqu’il n’est pas « Default », ajoute la ligne « $ProgressPreference = « VALUE » en haut de votre script.", + "loc.input.label.failOnStderr": "Échec sur une erreur standard", + "loc.input.help.failOnStderr": "Si la valeur est true, et si des erreurs sont écrites dans le pipeline d'erreurs ou si des données sont écrites dans le flux d'erreurs standard, cette tâche se solde par un échec. Sinon, la tâche se base sur le code de sortie pour déterminer la cause de l'échec.", + "loc.input.label.showWarnings": "Afficher les avertissements en tant qu'avertissements Azure DevOps", + "loc.input.help.showWarnings": "Si cette condition est vérifiée, et si votre script écrit des avertissements, ces derniers sont également affichés en tant qu'avertissements dans les journaux de pipeline", + "loc.input.label.ignoreLASTEXITCODE": "Ignorer $LASTEXITCODE", + "loc.input.help.ignoreLASTEXITCODE": "Si cette valeur est false, la ligne 'if ((Test-Path -LiteralPath variable:\\LASTEXITCODE)) { exit $LASTEXITCODE }' est ajoutée à la fin de votre script. Cela entraîne la propagation du dernier code de sortie d'une commande externe en tant que code de sortie de PowerShell. Sinon, la ligne n'est pas ajoutée à la fin de votre script.", + "loc.input.label.pwsh": "Utilisez PowerShell Core", + "loc.input.help.pwsh": "Si la valeur est true, dans Windows, la tâche utilise pwsh.exe à partir de votre variable PATH au lieu de powershell.exe.", + "loc.input.label.workingDirectory": "Répertoire de travail", + "loc.input.help.workingDirectory": "Répertoire de travail où le script est exécuté.", + "loc.input.label.runScriptInSeparateScope": "Exécuter un script dans l’étendue distincte", + "loc.input.help.runScriptInSeparateScope": "Cette entrée permet d’exécuter des scripts PowerShell à l’aide de l’opérateur « & » au lieu du script « ». Si cette entrée définie sur le script réel est exécutée dans une étendue distincte et que les variables PowerShell à l’étendue globale ne sont pas mises à jour", + "loc.messages.GeneratingScript": "Génération du script.", + "loc.messages.JS_ExitCode": "Arrêt de PowerShell. Code de sortie : '%s'.", + "loc.messages.JS_FormattedCommand": "Commande mise en forme : %s", + "loc.messages.JS_InvalidActionPreference": "Préférence d’action non valide pour %s : «%s». La valeur doit être l’une des suivantes : %s", + "loc.messages.JS_InvalidFilePath": "Chemin de fichier non valide : '%s'. Le chemin d'un fichier .ps1 est obligatoire.", + "loc.messages.JS_Stderr": "PowerShell a écrit une ou plusieurs lignes dans le flux d'erreurs standard.", + "loc.messages.JS_InvalidTargetType": "Type de cible « %s » non valide. La valeur doit être l’une des suivantes : 'FilePath’ou’inline'", + "loc.messages.PS_ExitCode": "Arrêt de PowerShell. Code de sortie : '{0}'.", + "loc.messages.PS_FormattedCommand": "Commande mise en forme : {0}", + "loc.messages.PS_InvalidActionPreference": "Préférence d’action non valide pour {0}: «{1}». La valeur doit être l’une des suivantes : {2}", + "loc.messages.PS_InvalidFilePath": "Chemin de fichier '{0}' non valide. Le chemin d'un fichier .ps1 est obligatoire.", + "loc.messages.PS_UnableToDetermineExitCode": "Exception inattendue. Impossible de déterminer le code de sortie de PowerShell.", + "loc.messages.PS_InvalidTargetType": "Type de cible « {0} » non valide. La valeur doit être l’une des suivantes : 'FilePath’ou’inline'", + "loc.messages.ScriptArgsSanitized": "Caractères détectés dans les arguments qui peuvent ne pas être exécutés correctement par le shell. Veuillez échapper les caractères spéciaux en utilisant le backtick (`). Plus d'informations sont disponibles ici: https://aka.ms/ado/75787" +} \ No newline at end of file diff --git a/_generated/PowerShellV2/Strings/resources.resjson/it-IT/resources.resjson b/_generated/PowerShellV2/Strings/resources.resjson/it-IT/resources.resjson new file mode 100644 index 000000000000..7bcecb2ea4d0 --- /dev/null +++ b/_generated/PowerShellV2/Strings/resources.resjson/it-IT/resources.resjson @@ -0,0 +1,54 @@ +{ + "loc.friendlyName": "PowerShell", + "loc.helpMarkDown": "[Altre informazioni su questa attività](https://go.microsoft.com/fwlink/?LinkID=613736)", + "loc.description": "Consente di eseguire uno script PowerShell in Linux, macOS o Windows", + "loc.instanceNameFormat": "Script PowerShell", + "loc.releaseNotes": "Coerenza delle attività per gli script. Aggiunta del supporto per macOS e Linux.", + "loc.group.displayName.preferenceVariables": "Variabili di preferenza", + "loc.group.displayName.advanced": "Avanzate", + "loc.input.label.targetType": "Tipo", + "loc.input.help.targetType": "Tipo di script di destinazione: percorso file o inline", + "loc.input.label.filePath": "Percorso script", + "loc.input.help.filePath": "Percorso dello script da eseguire. Deve essere un percorso completo o relativo rispetto a $(System.DefaultWorkingDirectory).", + "loc.input.label.arguments": "Argomenti", + "loc.input.help.arguments": "Argomenti passati allo script PowerShell. Parametri ordinali o denominati.", + "loc.input.label.script": "Script", + "loc.input.label.errorActionPreference": "ErrorActionPreference", + "loc.input.help.errorActionPreference": "Se non è `Default`, antepone la riga `$ErrorActionPreference = 'VALUE'` all'inizio dello script.", + "loc.input.label.warningPreference": "WarningPreference", + "loc.input.help.warningPreference": "Se non è `Default`, antepone la riga `$WarningPreference = 'VALUE'` all'inizio dello script.", + "loc.input.label.informationPreference": "InformationPreference", + "loc.input.help.informationPreference": "Se non è `Default`, antepone la riga `$InformationPreference = 'VALUE'` all'inizio dello script.", + "loc.input.label.verbosePreference": "VerbosePreference", + "loc.input.help.verbosePreference": "Se non è `Default`, antepone la riga `$VerbosePreference = 'VALUE'` all'inizio dello script.", + "loc.input.label.debugPreference": "DebugPreference", + "loc.input.help.debugPreference": "Se non è `Default`, antepone la riga `$DebugPreference = 'VALUE'` all'inizio dello script.", + "loc.input.label.progressPreference": "ProgressPreference", + "loc.input.help.progressPreference": "Se non è `Default`, antepone la riga '$ProgressPreference = 'VALUE'' all'inizio dello script.", + "loc.input.label.failOnStderr": "Interrompi in caso di errore standard", + "loc.input.help.failOnStderr": "Se il valore è true, questa attività non riuscirà nel caso in cui vengano scritti errori nella pipeline degli errori oppure se vengono scritti dati nel flusso Errore standard. In caso contrario, l'attività si baserà sul codice di uscita per determinare l'errore.", + "loc.input.label.showWarnings": "Mostra avvisi come avvisi di Azure DevOps", + "loc.input.help.showWarnings": "Se è true, gli avvisi scritti dallo script vengono visualizzati come tali anche nei log della pipeline", + "loc.input.label.ignoreLASTEXITCODE": "Ignora $LASTEXITCODE", + "loc.input.help.ignoreLASTEXITCODE": "Se è false, la riga 'if ((Test-Path -LiteralPath variable:\\LASTEXITCODE)) { exit $LASTEXITCODE }' viene aggiunta alla fine dello script. In questo modo l'ultimo codice di uscita da un comando esterno verrà propagato come codice di uscita di PowerShell. In caso contrario, la riga non viene aggiunta alla fine dello script.", + "loc.input.label.pwsh": "Usa PowerShell Core", + "loc.input.help.pwsh": "Se è impostata su true, in Windows l'attività userà pwsh.exe da PATH invece di powershell.exe.", + "loc.input.label.workingDirectory": "Directory di lavoro", + "loc.input.help.workingDirectory": "Directory di lavoro in cui viene eseguito lo script.", + "loc.input.label.runScriptInSeparateScope": "Esegui lo script in ambito separato", + "loc.input.help.runScriptInSeparateScope": "Questo input consente di eseguire gli script di PowerShell usando l'operatore '&' invece del valore predefinito '.'. Se l'input è impostato su true, lo script verrà eseguito in ambito separato e le variabili PowerShell con ambito globale non verranno aggiornate", + "loc.messages.GeneratingScript": "Generazione dello script.", + "loc.messages.JS_ExitCode": "PowerShell terminato con codice '%s'.", + "loc.messages.JS_FormattedCommand": "Comando formattato: %s", + "loc.messages.JS_InvalidActionPreference": "Preferenza di azione non valida per %s: '%s. Il valore deve essere uno dei seguenti: %s", + "loc.messages.JS_InvalidFilePath": "Il percorso file '%s' non è valido. È necessario un percorso di un file con estensione ps1.", + "loc.messages.JS_Stderr": "PowerShell ha scritto una o più righe nel flusso di errore standard.", + "loc.messages.JS_InvalidTargetType": "Il tipo di destinazione '%s' non è valido. Il valore deve essere uno dei seguenti: 'filepath' o 'inline'", + "loc.messages.PS_ExitCode": "PowerShell terminato con codice '{0}'.", + "loc.messages.PS_FormattedCommand": "Comando formattato: {0}", + "loc.messages.PS_InvalidActionPreference": "Preferenza di azione non valida per {0}: '{1}'. Il valore deve essere uno dei seguenti: {2}", + "loc.messages.PS_InvalidFilePath": "Il percorso file '{0}' non è valido. È necessario un percorso di un file con estensione ps1.", + "loc.messages.PS_UnableToDetermineExitCode": "Eccezione imprevista. Non è possibile determinare il codice di uscita da PowerShell.", + "loc.messages.PS_InvalidTargetType": "Il tipo di destinazione '{0}' non è valido. Il valore deve essere uno dei seguenti: 'filepath' o 'inline'", + "loc.messages.ScriptArgsSanitized": "Sono stati rilevati caratteri negli argomenti che potrebbero non essere eseguiti correttamente dalla shell. Eseguire l'escape dei caratteri speciali usando l’apice inverso (`). Ulteriori informazioni sono disponibili qui: https://aka.ms/ado/75787" +} \ No newline at end of file diff --git a/_generated/PowerShellV2/Strings/resources.resjson/ja-JP/resources.resjson b/_generated/PowerShellV2/Strings/resources.resjson/ja-JP/resources.resjson new file mode 100644 index 000000000000..20338419acb7 --- /dev/null +++ b/_generated/PowerShellV2/Strings/resources.resjson/ja-JP/resources.resjson @@ -0,0 +1,54 @@ +{ + "loc.friendlyName": "PowerShell", + "loc.helpMarkDown": "[このタスクの詳細を表示](https://go.microsoft.com/fwlink/?LinkID=613736)", + "loc.description": "Linux、macOS、Windows で PowerShell スクリプトを実行します", + "loc.instanceNameFormat": "PowerShell スクリプト", + "loc.releaseNotes": "スクリプト タスクの一貫性。macOS と Linux のサポートが追加されました。", + "loc.group.displayName.preferenceVariables": "参照変数", + "loc.group.displayName.advanced": "詳細設定", + "loc.input.label.targetType": "種類", + "loc.input.help.targetType": "ターゲット スクリプトの種類: ファイル パスまたはインライン", + "loc.input.label.filePath": "スクリプト パス", + "loc.input.help.filePath": "実行するスクリプトのパス。完全修飾パスか、または $(System.DefaultWorkingDirectory) からの相対パスを指定する必要があります。", + "loc.input.label.arguments": "引数", + "loc.input.help.arguments": "PowerShell スクリプトに渡す引数。順序によるパラメーターまたは名前指定されたパラメーターのいずれかです。", + "loc.input.label.script": "スクリプト", + "loc.input.label.errorActionPreference": "ErrorActionPreference", + "loc.input.help.errorActionPreference": "`Default` でない場合は、スクリプトの先頭に、`$ErrorActionPreference = 'VALUE'` という行を追加します。", + "loc.input.label.warningPreference": "WarningPreference", + "loc.input.help.warningPreference": "`Default` でない場合は、スクリプトの先頭に、`$WarningPreference = 'VALUE'` という行を追加します。", + "loc.input.label.informationPreference": "InformationPreference", + "loc.input.help.informationPreference": "`Default` でない場合は、スクリプトの先頭に、`$InformationPreference = 'VALUE'` という行を追加します。", + "loc.input.label.verbosePreference": "VerbosePreference", + "loc.input.help.verbosePreference": "`Default` でない場合は、スクリプトの先頭に、`$VerbosePreference = 'VALUE'` という行を追加します。", + "loc.input.label.debugPreference": "DebugPreference", + "loc.input.help.debugPreference": "`Default` でない場合は、スクリプトの先頭に、`$DebugPreference = 'VALUE'` という行を追加します。", + "loc.input.label.progressPreference": "ProgressPreference", + "loc.input.help.progressPreference": "`Default` でない場合は、スクリプトの先頭に、`$ProgressPreference = 'VALUE'` という行を追加します。", + "loc.input.label.failOnStderr": "標準エラーで失敗", + "loc.input.help.failOnStderr": "これが true の場合、エラーがエラー パイプラインに書き込まれるか、データが標準エラー ストリームに書き込まれると、このタスクは失敗します。それ以外の場合、タスクは終了コードに応じて失敗を判別します。", + "loc.input.label.showWarnings": "警告を Azure DevOps 警告として表示する", + "loc.input.help.showWarnings": "これが true であり、スクリプトが警告を書き込む場合は、パイプライン ログにも警告として表示されます", + "loc.input.label.ignoreLASTEXITCODE": "$LASTEXITCODE を無視する", + "loc.input.help.ignoreLASTEXITCODE": "これが false の場合、行 `if ((Test-Path -LiteralPath variable:\\LASTEXITCODE)) { exit $LASTEXITCODE }` がスクリプトの末尾に追加されます。この行があると、外部コマンドからの最後の終了コードが PowerShell の終了コードとして伝達されます。それ以外の場合、スクリプトの末尾にこの行が追加されることはありません。", + "loc.input.label.pwsh": "PowerShell Core を使用する", + "loc.input.help.pwsh": "これが true の場合、Windows 上のタスクは powershell.exe ではなく PATH からの pwsh.exe を使用します。", + "loc.input.label.workingDirectory": "作業ディレクトリ", + "loc.input.help.workingDirectory": "スクリプトが実行される作業ディレクトリ。", + "loc.input.label.runScriptInSeparateScope": "別のスコープでスクリプトを実行", + "loc.input.help.runScriptInSeparateScope": "この入力により、既定の '. ' の代わりに '&' 演算子を使用して PowerShell スクリプトを実行できます。この入力が true スクリプトに設定されている場合、別のスコープで実行され、グローバルスコープの PowerShell 変数は更新されません", + "loc.messages.GeneratingScript": "スクリプトを生成しています。", + "loc.messages.JS_ExitCode": "PowerShell がコード '%s' で終了しました。", + "loc.messages.JS_FormattedCommand": "フォーマット後のコマンド: %s", + "loc.messages.JS_InvalidActionPreference": "%s の無効なアクション設定: '%s'。値は次のいずれかである必要があります: %s", + "loc.messages.JS_InvalidFilePath": "ファイル パス '%s' が無効です。.ps1 ファイルへのパスが必要です。", + "loc.messages.JS_Stderr": "PowerShell が標準エラー ストリームに 1 行以上を書き込みました。", + "loc.messages.JS_InvalidTargetType": "無効なターゲット型 '%s' です。値は 'filepath' または 'inline' のどちらかである必要があります", + "loc.messages.PS_ExitCode": "PowerShell がコード '{0}' で終了しました。", + "loc.messages.PS_FormattedCommand": "フォーマット後のコマンド: {0}", + "loc.messages.PS_InvalidActionPreference": "{0} の無効なアクション設定: '{1}'。値は次のいずれかである必要があります: {2}", + "loc.messages.PS_InvalidFilePath": "ファイル パス '{0}' が無効です。.ps1 ファイルへのパスが必要です。", + "loc.messages.PS_UnableToDetermineExitCode": "予期しない例外が発生しました。PowerShell からの終了コードを判別できません。", + "loc.messages.PS_InvalidTargetType": "無効なターゲット型 '{0}' です。値は 'filepath' または 'inline' のどちらかである必要があります", + "loc.messages.ScriptArgsSanitized": "シェルによって正しく実行されない可能性のある引数の文字が検出されました。バックティック (`) を使用して特殊文字をエスケープしてください。詳細についてはこちら: https://aka.ms/ado/75787" +} \ No newline at end of file diff --git a/_generated/PowerShellV2/Strings/resources.resjson/ko-KR/resources.resjson b/_generated/PowerShellV2/Strings/resources.resjson/ko-KR/resources.resjson new file mode 100644 index 000000000000..d6b35207a665 --- /dev/null +++ b/_generated/PowerShellV2/Strings/resources.resjson/ko-KR/resources.resjson @@ -0,0 +1,54 @@ +{ + "loc.friendlyName": "PowerShell", + "loc.helpMarkDown": "[이 작업에 대한 자세한 정보](https://go.microsoft.com/fwlink/?LinkID=613736)", + "loc.description": "Linux, macOS 또는 Windows에서 PowerShell 스크립트를 실행합니다.", + "loc.instanceNameFormat": "PowerShell 스크립트", + "loc.releaseNotes": "스크립트 작업 일관성입니다. macOS 및 Linux에 대한 지원이 추가되었습니다.", + "loc.group.displayName.preferenceVariables": "기본 설정 변수", + "loc.group.displayName.advanced": "고급", + "loc.input.label.targetType": "유형", + "loc.input.help.targetType": "대상 스크립트 유형: 파일 경로 또는 인라인", + "loc.input.label.filePath": "스크립트 경로", + "loc.input.help.filePath": "실행할 스크립트의 경로입니다. 정규화된 경로이거나 $(System.DefaultWorkingDirectory)의 상대 경로여야 합니다.", + "loc.input.label.arguments": "인수", + "loc.input.help.arguments": "인수가 PowerShell 스크립트에 전달되었습니다. 서수 매개 변수나 명명된 매개 변수 중 하나입니다.", + "loc.input.label.script": "스크립트", + "loc.input.label.errorActionPreference": "ErrorActionPreference", + "loc.input.help.errorActionPreference": "`Default`가 아닌 경우 스크립트 맨 위에 `$ErrorActionPreference = 'VALUE'` 행을 추가합니다.", + "loc.input.label.warningPreference": "WarningPreference", + "loc.input.help.warningPreference": "`Default`가 아닌 경우 스크립트 맨 위에 `$WarningPreference = 'VALUE'` 행을 추가합니다.", + "loc.input.label.informationPreference": "InformationPreference", + "loc.input.help.informationPreference": "`Default`가 아닌 경우 스크립트 맨 위에 `$InformationPreference = 'VALUE'` 행을 추가합니다.", + "loc.input.label.verbosePreference": "VerbosePreference", + "loc.input.help.verbosePreference": "`Default`가 아닌 경우 스크립트 맨 위에 `$VerbosePreference = 'VALUE'` 행을 추가합니다.", + "loc.input.label.debugPreference": "DebugPreference", + "loc.input.help.debugPreference": "`Default`가 아닌 경우 스크립트 맨 위에 `$DebugPreference = 'VALUE'` 행을 추가합니다.", + "loc.input.label.progressPreference": "ProgressPreference", + "loc.input.help.progressPreference": "`Default`가 아닌 경우 스크립트 상단에 `$ProgressPreference = 'VALUE'` 행을 추가합니다.", + "loc.input.label.failOnStderr": "표준 오류 시 실패", + "loc.input.help.failOnStderr": "true이면 오류 파이프라인에 오류가 작성되거나 표준 오류 스트림에 데이터가 작성될 경우 이 작업이 실패하게 됩니다. false이면 작업이 종료 코드를 사용하여 실패를 결정합니다.", + "loc.input.label.showWarnings": "경고를 Azure DevOps 경고로 표시", + "loc.input.help.showWarnings": "true이면 스크립트가 경고를 씁니다. 파이프라인 로그에도 경고로 표시됩니다.", + "loc.input.label.ignoreLASTEXITCODE": "$LASTEXITCODE 무시", + "loc.input.help.ignoreLASTEXITCODE": "false이면 스크립트의 끝에 `if ((Test-Path -LiteralPath variable:\\LASTEXITCODE)) { exit $LASTEXITCODE }` 줄이 추가됩니다. 이 줄로 인해 외부 명령의 마지막 종료 코드가 PowerShell의 종료 코드로 전파됩니다. true이면 줄이 스크립트의 끝에 추가되지 않습니다.", + "loc.input.label.pwsh": "PowerShell Core 사용", + "loc.input.help.pwsh": "true이면, Windows에서 작업이 powershell.exe 대신 PATH의 pwsh.exe를 사용합니다.", + "loc.input.label.workingDirectory": "작업 디렉터리", + "loc.input.help.workingDirectory": "스크립트가 실행되는 작업 디렉터리입니다.", + "loc.input.label.runScriptInSeparateScope": "별도의 범위에서 스크립트 실행", + "loc.input.help.runScriptInSeparateScope": "이 입력은 기본 '.' 대신 '&' 연산자를 사용하여 PowerShell 스크립트를 실행할 수 있습니다. 이 입력이 true 스크립트로 설정된 경우 별도의 범위에서 실행되고 전역 범위의 PowerShell 변수가 업데이트되지 않습니다", + "loc.messages.GeneratingScript": "스크립트를 생성 중입니다.", + "loc.messages.JS_ExitCode": "PowerShell이 코드 '%s'(으)로 종료되었습니다.", + "loc.messages.JS_FormattedCommand": "형식이 지정된 명령: %s", + "loc.messages.JS_InvalidActionPreference": "%s에 대한 잘못된 작업 기본 설정: '%s'. 값은 다음 중 하나여야 합니다. %s", + "loc.messages.JS_InvalidFilePath": "잘못된 파일 경로 '%s'입니다. .ps1 파일의 경로가 필요합니다.", + "loc.messages.JS_Stderr": "PowerShell이 표준 오류 스트림에 하나 이상의 줄을 썼습니다.", + "loc.messages.JS_InvalidTargetType": "대상 유형 '%s'이(가) 잘못되었습니다. 값은 'filepath' 또는 'inline' 중 하나여야 합니다.", + "loc.messages.PS_ExitCode": "PowerShell이 코드 '{0}'(으)로 종료되었습니다.", + "loc.messages.PS_FormattedCommand": "형식이 지정된 명령: {0}", + "loc.messages.PS_InvalidActionPreference": "{0}에 대한 잘못된 작업 기본 설정: '{1}'. 값은 다음 중 하나여야 합니다. {2}", + "loc.messages.PS_InvalidFilePath": "잘못된 파일 경로 '{0}'입니다. .ps1 파일의 경로가 필요합니다.", + "loc.messages.PS_UnableToDetermineExitCode": "예기치 않은 예외가 발생했습니다. PowerShell의 종료 코드를 확인할 수 없습니다.", + "loc.messages.PS_InvalidTargetType": "잘못된 대상 유형 '{0}'. 값은 'filepath' 또는 'inline' 중 하나여야 합니다.", + "loc.messages.ScriptArgsSanitized": "셸에서 올바르게 실행되지 않을 수 있는 인수에서 검색된 문자입니다. 백틱(`)을 사용하여 이스케이프 특수 문자를 만드세요. 자세한 내용은 https://aka.ms/ado/75787을 참조하세요." +} \ No newline at end of file diff --git a/_generated/PowerShellV2/Strings/resources.resjson/ru-RU/resources.resjson b/_generated/PowerShellV2/Strings/resources.resjson/ru-RU/resources.resjson new file mode 100644 index 000000000000..32b79b7e6ee7 --- /dev/null +++ b/_generated/PowerShellV2/Strings/resources.resjson/ru-RU/resources.resjson @@ -0,0 +1,54 @@ +{ + "loc.friendlyName": "PowerShell", + "loc.helpMarkDown": "[См. дополнительные сведения об этой задаче](https://go.microsoft.com/fwlink/?LinkID=613736)", + "loc.description": "Выполнение скрипта PowerShell в Linux, macOS или Windows", + "loc.instanceNameFormat": "Скрипт PowerShell", + "loc.releaseNotes": "Создавайте скрипты для обеспечения согласованности задач. Добавлена поддержка macOS и Linux.", + "loc.group.displayName.preferenceVariables": "Переменные настройки", + "loc.group.displayName.advanced": "Дополнительно", + "loc.input.label.targetType": "Тип", + "loc.input.help.targetType": "Тип целевого скрипта: путь к файлу или встроенный", + "loc.input.label.filePath": "Путь к скрипту", + "loc.input.help.filePath": "Путь к выполняемому скрипту. Это должен быть полный путь или путь относительно $(System.DefaultWorkingDirectory).", + "loc.input.label.arguments": "Аргументы", + "loc.input.help.arguments": "Аргументы, передаваемые в скрипт PowerShell. Параметры могут быть порядковыми или именованными.", + "loc.input.label.script": "Скрипт", + "loc.input.label.errorActionPreference": "ErrorActionPreference", + "loc.input.help.errorActionPreference": "Если значение отлично от \"Default\", добавляет строку \"$ErrorActionPreference = 'VALUE'\" в начало скрипта.", + "loc.input.label.warningPreference": "WarningPreference", + "loc.input.help.warningPreference": "Если значение отлично от \"Default\", добавляет строку \"$WarningPreference = 'VALUE'\" в начало скрипта.", + "loc.input.label.informationPreference": "InformationPreference", + "loc.input.help.informationPreference": "Если значение отлично от \"Default\", добавляет строку \"$InformationPreference = 'VALUE'\" в начало скрипта.", + "loc.input.label.verbosePreference": "VerbosePreference", + "loc.input.help.verbosePreference": "Если значение отлично от \"Default\", добавляет строку \"$VerbosePreference = 'VALUE'\" в начало скрипта.", + "loc.input.label.debugPreference": "DebugPreference", + "loc.input.help.debugPreference": "Если значение отлично от \"Default\", добавляет строку \"$DebugPreference = 'VALUE'\" в начало скрипта.", + "loc.input.label.progressPreference": "ProgressPreference", + "loc.input.help.progressPreference": "Если значение отлично от \"Default\", добавляет строку \"$ProgressPreference = 'VALUE'\" в начало скрипта.", + "loc.input.label.failOnStderr": "Сбой со стандартной ошибкой", + "loc.input.help.failOnStderr": "Если задано значение True, задача будет завершаться сбоем при записи каких-либо ошибок в конвейер ошибок или записи каких-либо данных в стандартный поток ошибок. В противном случае для определения сбоя задача будет использовать код выхода.", + "loc.input.label.showWarnings": "Отображать предупреждения как предупреждения Azure DevOps", + "loc.input.help.showWarnings": "Если задано значение true и скрипт записывает предупреждения, они также отображаются в виде предупреждений в журналах конвейеров.", + "loc.input.label.ignoreLASTEXITCODE": "Игнорировать $LASTEXITCODE", + "loc.input.help.ignoreLASTEXITCODE": "Если задано значение False, в конец скрипта добавляется строка \"if ((Test-Path -LiteralPath variable:\\LASTEXITCODE)) { exit $LASTEXITCODE }\". Это приведет к тому, что последний код выхода из внешней команды будет использоваться как код выхода PowerShell. В противном случае эта строка не добавляется в конец скрипта.", + "loc.input.label.pwsh": "Использовать PowerShell Core", + "loc.input.help.pwsh": "Если задано значение True, в Windows задача будет использовать программу pwsh.exe, указанную в переменной PATH, вместо powershell.exe.", + "loc.input.label.workingDirectory": "Рабочий каталог", + "loc.input.help.workingDirectory": "Рабочий каталог, в котором выполняется скрипт.", + "loc.input.label.runScriptInSeparateScope": "Запустить скрипт в отдельной области", + "loc.input.help.runScriptInSeparateScope": "Эти входные данные позволяют выполнять скрипты PowerShell с помощью оператора \"&\" вместо \".\" по умолчанию. Если для этих входных данных задано значение true, скрипт будет выполняться в отдельной области, а переменные PowerShell в глобальной области не будут обновлены", + "loc.messages.GeneratingScript": "Формируется скрипт.", + "loc.messages.JS_ExitCode": "Завершение работы PowerShell с кодом \"%s\".", + "loc.messages.JS_FormattedCommand": "Отформатирована команда: %s", + "loc.messages.JS_InvalidActionPreference": "Недопустимая настройка действия для %s: \"%s\". Должно применяться одно из следующих значений: %s", + "loc.messages.JS_InvalidFilePath": "Недопустимый путь к файлу \"%s\". Требуется путь к файлу PS1.", + "loc.messages.JS_Stderr": "Оболочка PowerShell записала одну или несколько строк в стандартный поток ошибок.", + "loc.messages.JS_InvalidTargetType": "Недопустимый тип целевого объекта \"%s\". Должно использоваться одно из следующих значений: filepath или inline", + "loc.messages.PS_ExitCode": "Завершение работы PowerShell с кодом \"{0}\".", + "loc.messages.PS_FormattedCommand": "Отформатирована команда: {0}", + "loc.messages.PS_InvalidActionPreference": "Недопустимая настройка действия для {0}: \"{1}\". Должно применяться одно из следующих значений: {2}", + "loc.messages.PS_InvalidFilePath": "Недопустимый путь к файлу \"{0}\". Требуется путь к файлу PS1.", + "loc.messages.PS_UnableToDetermineExitCode": "Непредвиденное исключение. Не удается определить код выхода из PowerShell.", + "loc.messages.PS_InvalidTargetType": "Недопустимый тип целевого объекта \"{0}\". Должно использоваться одно из следующих значений: filepath или inline", + "loc.messages.ScriptArgsSanitized": "Обнаружены символы в аргументах, которые могут быть неправильно интерпретированы оболочкой. Экранируйте специальные символы с помощью обратного апострофа (`). Дополнительные сведения см. на следующей странице: https://aka.ms/ado/75787" +} \ No newline at end of file diff --git a/_generated/PowerShellV2/Strings/resources.resjson/zh-CN/resources.resjson b/_generated/PowerShellV2/Strings/resources.resjson/zh-CN/resources.resjson new file mode 100644 index 000000000000..b33d34fb7c0b --- /dev/null +++ b/_generated/PowerShellV2/Strings/resources.resjson/zh-CN/resources.resjson @@ -0,0 +1,54 @@ +{ + "loc.friendlyName": "PowerShell", + "loc.helpMarkDown": "[详细了解此任务](https://go.microsoft.com/fwlink/?LinkID=613736)", + "loc.description": "在 Linux、macOS 或 Windows 上运行 PowerShell 脚本", + "loc.instanceNameFormat": "PowerShell 脚本", + "loc.releaseNotes": "脚本任务一致性。添加了对 macOS 和 Linux 的支持。", + "loc.group.displayName.preferenceVariables": "首选项变量", + "loc.group.displayName.advanced": "高级", + "loc.input.label.targetType": "类型", + "loc.input.help.targetType": "目标脚本类型: 文件路径或内联", + "loc.input.label.filePath": "脚本路径", + "loc.input.help.filePath": "要执行的脚本的路径。必须为完全限定的路径或相对于 $(System.DefaultWorkingDirectory)。", + "loc.input.label.arguments": "参数", + "loc.input.help.arguments": "传递给 PowerShell 脚本的参数。是序号参数或命名参数。", + "loc.input.label.script": "脚本", + "loc.input.label.errorActionPreference": "ErrorActionPreference", + "loc.input.help.errorActionPreference": "如果不是“默认值”,则追加在脚本顶部的行 `$ErrorActionPreference = 'VALUE'` 前面。", + "loc.input.label.warningPreference": "WarningPreference", + "loc.input.help.warningPreference": "如果不是“默认值”,则追加在脚本顶部的行 `$WarningPreference = 'VALUE'` 前面。", + "loc.input.label.informationPreference": "InformationPreference", + "loc.input.help.informationPreference": "如果不是“默认值”,则追加在脚本顶部的行 `$InformationPreference = 'VALUE'` 前面。", + "loc.input.label.verbosePreference": "VerbosePreference", + "loc.input.help.verbosePreference": "如果不是“默认值”,则追加在脚本顶部的行 `$VerbosePreference = 'VALUE'` 前面。", + "loc.input.label.debugPreference": "DebugPreference", + "loc.input.help.debugPreference": "如果不是“默认值”,则追加在脚本顶部的行 `$DebugPreference = 'VALUE'` 前面。", + "loc.input.label.progressPreference": "ProgressPreference", + "loc.input.help.progressPreference": "如果不是 `默认`,则在脚本顶部前面追加行 `$ProgressPreference = 'VALUE'`。", + "loc.input.label.failOnStderr": "因标准错误而失败", + "loc.input.help.failOnStderr": "如果为 true,那么将任何错误写入错误管道或将任何数据写入标准错误流时,此任务会失败。否则,此任务将仅依靠退出代码来确定故障。", + "loc.input.label.showWarnings": "以 Azure DevOps 警告的形式显示警告", + "loc.input.help.showWarnings": "如果为 true,并且脚本写入警告,则它们在管道日志中也显示为警告", + "loc.input.label.ignoreLASTEXITCODE": "忽略 $LASTEXITCODE", + "loc.input.help.ignoreLASTEXITCODE": "如果为 false,行 \"if ((Test-Path -LiteralPath variable:\\LASTEXITCODE)) { exit $LASTEXITCODE }\" 将追加到脚本的末尾。这将导致外部命令中的最后一个退出代码传播为 powershell 的退出代码。否则,行将不会追加到脚本的末尾。", + "loc.input.label.pwsh": "使用 PowerShell Core", + "loc.input.help.pwsh": "如果为 true,则在 Windows 上,任务将使用来自 PATH 的 pwsh.exe,而不是 powershell.exe。", + "loc.input.label.workingDirectory": "工作目录", + "loc.input.help.workingDirectory": "在其中运行脚本的工作目录。", + "loc.input.label.runScriptInSeparateScope": "在单独范围内运行脚本", + "loc.input.help.runScriptInSeparateScope": "此输入允许使用 “&” 运算符而不是默认的 “.” 执行 PowerShell 脚本。如果此输入设置为 true,脚本将在单独的范围内执行,并且将不更新作用于全局的 PowerShell 变量", + "loc.messages.GeneratingScript": "正在生成脚本。", + "loc.messages.JS_ExitCode": "PowerShell 已退出,代码为“%s”。", + "loc.messages.JS_FormattedCommand": "已设置格式的命令: %s", + "loc.messages.JS_InvalidActionPreference": "%s 的操作首选项无效:“%s”。该值必须是以下值之一: %s", + "loc.messages.JS_InvalidFilePath": "无效的文件路径“%s”。需要 .ps1 文件的路径。", + "loc.messages.JS_Stderr": "PowerShell 向标准错误流写入一个或多个行。", + "loc.messages.JS_InvalidTargetType": "目标类型“%s”无效。该值必须是以下值之一: “filepath” 或 “inline”", + "loc.messages.PS_ExitCode": "PowerShell 已退出,代码为“{0}”。", + "loc.messages.PS_FormattedCommand": "已设置格式的命令: {0}", + "loc.messages.PS_InvalidActionPreference": "{0} 的操纵首选项无效:“{1}”。值必须为以下值之一: {2}", + "loc.messages.PS_InvalidFilePath": "无效的文件路径“{0}”。需要 .ps1 文件的路径。", + "loc.messages.PS_UnableToDetermineExitCode": "出现意外异常。无法确定 powershell 的退出代码。", + "loc.messages.PS_InvalidTargetType": "目标类型“{0}”无效。该值必须是以下值之一: “filepath” 或 “inline”", + "loc.messages.ScriptArgsSanitized": "在参数中检测到可能无法由 shell 正确执行的字符。请使用反引号斜杠 (`) 转义特殊字符。有关详细信息,请访问此处: https://aka.ms/ado/75787" +} \ No newline at end of file diff --git a/_generated/PowerShellV2/Strings/resources.resjson/zh-TW/resources.resjson b/_generated/PowerShellV2/Strings/resources.resjson/zh-TW/resources.resjson new file mode 100644 index 000000000000..adbafd70daeb --- /dev/null +++ b/_generated/PowerShellV2/Strings/resources.resjson/zh-TW/resources.resjson @@ -0,0 +1,54 @@ +{ + "loc.friendlyName": "PowerShell", + "loc.helpMarkDown": "[深入了解此工作](https://go.microsoft.com/fwlink/?LinkID=613736)", + "loc.description": "在 Linux、macOS 或 Windows 執行 PowerShell 指令碼", + "loc.instanceNameFormat": "PowerShell 指令碼", + "loc.releaseNotes": "指令碼工作一致性。已新增 macOS 與 Linux 的支援。", + "loc.group.displayName.preferenceVariables": "喜好設定變數", + "loc.group.displayName.advanced": "進階", + "loc.input.label.targetType": "類型", + "loc.input.help.targetType": "目標指令碼類型: 檔案路徑或內嵌", + "loc.input.label.filePath": "指令碼路徑", + "loc.input.help.filePath": "要執行的指令碼之路徑。必須是完整路徑或相對於 $(System.DefaultWorkingDirectory) 的路徑。", + "loc.input.label.arguments": "引數", + "loc.input.help.arguments": "傳遞至 PowerShell 指令碼的引數。可以是序號參數或具名參數。", + "loc.input.label.script": "指令碼", + "loc.input.label.errorActionPreference": "ErrorActionPreference", + "loc.input.help.errorActionPreference": "當不是 ‘Default’ 時,在指令碼頂端加上 `$ErrorActionPreference = ‘VALUE’` 行。", + "loc.input.label.warningPreference": "WarningPreference", + "loc.input.help.warningPreference": "當不是 ‘Default’ 時,在指令碼頂端加上 `$WarningPreference = 'VALUE'` 行。", + "loc.input.label.informationPreference": "InformationPreference", + "loc.input.help.informationPreference": "當不是 ‘Default’ 時,在指令碼頂端加上 `$InformationPreference = ‘VALUE’` 行。", + "loc.input.label.verbosePreference": "VerbosePreference", + "loc.input.help.verbosePreference": "當不是 ‘Default’ 時,在指令碼頂端加上 `$VerbosePreference = ‘VALUE’` 行。", + "loc.input.label.debugPreference": "DebugPreference", + "loc.input.help.debugPreference": "當不是 ‘Default’ 時,在指令碼頂端加上 `$DebugPreference = ‘VALUE’` 行。", + "loc.input.label.progressPreference": "ProgressPreference", + "loc.input.help.progressPreference": "當不是 `Default` 時,在指令碼頂端加上 `$ProgressPreference = 'VALUE'` 行。", + "loc.input.label.failOnStderr": "發生標準錯誤的失敗", + "loc.input.help.failOnStderr": "若此為 true,如果在錯誤管線中寫入任何錯誤,或對標準錯誤資料流寫入任何資料,此工作即會失敗。否則,工作將依據結束代碼來判斷失敗。", + "loc.input.label.showWarnings": "將警告顯示為 Azure DevOps 警告", + "loc.input.help.showWarnings": "若為 true,且您的指令碼寫入警告,則在管線記錄中也會顯示為警告", + "loc.input.label.ignoreLASTEXITCODE": "略過 $LASTEXITCODE", + "loc.input.help.ignoreLASTEXITCODE": "若此為 false,則會將 `if ((Test-Path -LiteralPath variable:\\LASTEXITCODE)) { exit $LASTEXITCODE }` 附加至您指令碼的結尾。如此會讓來自外部命令中的最後一個結束代碼,以 PowerShell 的結束代碼散佈。否則,不會將此行附加至您的指令碼結尾。", + "loc.input.label.pwsh": "使用 PowerShell Core", + "loc.input.help.pwsh": "若此為 true,那麼在 Windows 上,工作就會使用 PATH 中的 pwsh.exe 而非 powershell.exe。", + "loc.input.label.workingDirectory": "工作目錄", + "loc.input.help.workingDirectory": "指令碼執行所在的工作目錄。", + "loc.input.label.runScriptInSeparateScope": "在不同的範圍中執行指令碼", + "loc.input.help.runScriptInSeparateScope": "此輸入允許使用 '&' 運算子而不是預設的 '.' 來執行 PowerShell 指令碼。若此輸入設定為 true,指令碼將會在不同的範圍內執行,而且全域範圍的 PowerShell 變數將不會更新", + "loc.messages.GeneratingScript": "正在產生指令碼。", + "loc.messages.JS_ExitCode": "PowerShell 已結束,代碼為 '%s'。", + "loc.messages.JS_FormattedCommand": "經過格式化的命令: %s", + "loc.messages.JS_InvalidActionPreference": "%s 的動作喜好設定無效: ‘%s’。值必須是以下其中之一: %s", + "loc.messages.JS_InvalidFilePath": "檔案路徑 '%s' 無效。需要到達 .ps1 檔案的路徑。", + "loc.messages.JS_Stderr": "PowerShell 已將一或多行寫入標準錯誤資料流。", + "loc.messages.JS_InvalidTargetType": "無效的目標型別 '%s'。值必須是下列其中一個: 'filepath' 或 'inline'", + "loc.messages.PS_ExitCode": "PowerShell 已結束,代碼為 '{0}'。", + "loc.messages.PS_FormattedCommand": "經過格式化的命令: {0}", + "loc.messages.PS_InvalidActionPreference": "{0} 的動作喜好設定無效: ‘{1}’。值必須是以下其中之一: {2}", + "loc.messages.PS_InvalidFilePath": "檔案路徑 '{0}' 無效。需要到達 .ps1 檔案的路徑。", + "loc.messages.PS_UnableToDetermineExitCode": "未預期的例外狀況。無法從 PowerShell 判斷結束代碼。", + "loc.messages.PS_InvalidTargetType": "無效的目標型別 '{0}'。值必須是下列其中一個: 'filepath' 或 'inline'", + "loc.messages.ScriptArgsSanitized": "偵測到引數中可能無法由殼層正確執行的字元。請使用反單引號 (') 逸出特殊字元。如需詳細資訊,請參閱: https://aka.ms/ado/75787" +} \ No newline at end of file diff --git a/_generated/PowerShellV2/Tests/L0.ts b/_generated/PowerShellV2/Tests/L0.ts new file mode 100644 index 000000000000..9577e4e7516a --- /dev/null +++ b/_generated/PowerShellV2/Tests/L0.ts @@ -0,0 +1,107 @@ +import assert = require('assert'); +import os = require('os'); +import path = require('path'); +import * as ttm from 'azure-pipelines-task-lib/mock-test'; +import { testEnvExpansion } from './L0EnvExpansion'; +import { testPowerShellImpl } from './powershellImpl/L0'; +import { runValidateFileArgsTests } from './L0ValidateFileArgs'; + +describe('PowerShell Suite', function () { + this.timeout(60000); + + function runValidations(validator: () => void, tr, done: Mocha.Done) { + try { + validator(); + done(); + } + catch (error) { + console.log("STDERR", tr.stderr); + console.log("STDOUT", tr.stdout); + done(error); + } + } + + it('Runs an inline script correctly', (done: Mocha.Done) => { + this.timeout(5000); + + let tp: string = path.join(__dirname, 'L0Inline.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + runValidations(() => { + assert(tr.succeeded, 'PowerShell should have succeeded.'); + assert(tr.stderr.length === 0, 'PowerShell should not have written to stderr'); + assert(tr.stdout.indexOf(`Writing \ufeff$ErrorActionPreference = 'Stop'${os.EOL}$ProgressPreference = 'SilentlyContinue'${os.EOL}Write-Host "my script output" to temp/path/fileName.ps1`) > 0, 'PowerShell should have written the script to a file'); + assert(tr.stdout.indexOf('my script output') > 0, 'PowerShell should have correctly run the script'); + }, tr, done); + }); + + it('Runs a checked in script correctly', (done: Mocha.Done) => { + this.timeout(5000); + + let tp: string = path.join(__dirname, 'L0External.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + runValidations(() => { + assert(tr.succeeded, 'PowerShell should have succeeded.'); + assert(tr.stderr.length === 0, 'PowerShell should not have written to stderr'); + assert(tr.stdout.indexOf(`Writing \ufeff$ErrorActionPreference = 'Stop'${os.EOL}$ProgressPreference = 'SilentlyContinue'${os.EOL}. 'path/to/script.ps1' to temp/path/fileName.ps1`) > 0, 'PowerShell should have written the script to a file'); + assert(tr.stdout.indexOf('my script output') > 0, 'PowerShell should have correctly run the script'); + }, tr, done); + }); + + it('Adds arguments to the script', (done: Mocha.Done) => { + this.timeout(5000); + + let tp: string = path.join(__dirname, 'L0Args.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + runValidations(() => { + assert(tr.succeeded, 'PowerShell should have succeeded.'); + assert(tr.stderr.length === 0, 'PowerShell should not have written to stderr'); + assert(tr.stdout.indexOf(`Writing \ufeff$ErrorActionPreference = 'Stop'${os.EOL}$ProgressPreference = 'SilentlyContinue'${os.EOL}. 'path/to/script.ps1' myCustomArg to temp/path/fileName.ps1`) > 0, 'PowerShell should have written the script to a file'); + assert(tr.stdout.indexOf('my script output') > 0, 'PowerShell should have correctly run the script'); + }, tr, done); + }); + + it('Reports stderr correctly', (done: Mocha.Done) => { + this.timeout(5000); + + let tp: string = path.join(__dirname, 'L0StdErr.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + runValidations(() => { + assert(tr.failed, 'Powershell should have failed'); + assert(tr.stdout.indexOf('##vso[task.issue type=error;]myErrorTest') > 0, 'Powershell should have correctly written myErrorTest'); + assert(tr.stdout.length > 1000, 'Powershell stderr output is not truncated'); + }, tr, done); + }); + + it('Runs scripts with & operator', (done: Mocha.Done) => { + this.timeout(5000); + + let tp: string = path.join(__dirname, 'L0RunScriptInSeparateScope.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + runValidations(() => { + assert(tr.succeeded, 'PowerShell should have succeeded.'); + assert(tr.stderr.length === 0, 'PowerShell should not have written to stderr'); + assert(tr.stdout.indexOf(`Writing \ufeff$ErrorActionPreference = 'Stop'${os.EOL}$ProgressPreference = 'SilentlyContinue'${os.EOL}. 'path/to/script.ps1' to temp/path/fileName.ps1`) > 0, 'PowerShell should have written the script to a file'); + assert(tr.stdout.indexOf('my script output') > 0, 'PowerShell should have correctly run the script'); + }, tr, done); + }); + + describe('Environment variable expansion', testEnvExpansion); + describe('Validate file arguments', runValidateFileArgsTests) + + describe('PowerShell implementation tests', testPowerShellImpl); +}); diff --git a/_generated/PowerShellV2/Tests/L0Args.ts b/_generated/PowerShellV2/Tests/L0Args.ts new file mode 100644 index 000000000000..d280edebc5fa --- /dev/null +++ b/_generated/PowerShellV2/Tests/L0Args.ts @@ -0,0 +1,79 @@ +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, '..', 'powershell.js'); +let tmr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tmr.setInput('targetType', 'filepath'); +tmr.setInput('filePath', 'path/to/script.ps1'); +tmr.setInput('workingDirectory', '/fakecwd'); +tmr.setInput('ignoreLASTEXITCODE', 'true'); +tmr.setInput('arguments', 'myCustomArg'); + +//Create assertAgent and getVariable mocks, support not added in this version of task-lib +const tl = require('azure-pipelines-task-lib/mock-task'); +const tlClone = Object.assign({}, tl); +tlClone.getVariable = function(variable: string) { + if (variable.toLowerCase() == 'agent.tempdirectory') { + return 'temp/path'; + } + return null; +}; +tlClone.assertAgent = function(variable: string) { + return; +}; +tmr.registerMock('azure-pipelines-task-lib/mock-task', tlClone); + +// Mock task-lib +let a: ma.TaskLibAnswers = { + 'checkPath' : { + '/fakecwd' : true, + 'path/to/powershell': true, + 'temp/path': true + }, + 'which': { + 'powershell': 'path/to/powershell' + }, + 'assertAgent': { + '2.115.0': true + }, + 'exec': { + 'path/to/powershell --noprofile --norc -c pwd': { + "code": 0, + "stdout": "temp/path" + }, + "path/to/powershell -NoLogo -NoProfile -NonInteractive -Command . 'temp\\path\\fileName.ps1'": { + "code": 0, + "stdout": "my script output" + }, + "path/to/powershell -NoLogo -NoProfile -NonInteractive -Command . 'temp/path/fileName.ps1'": { + "code": 0, + "stdout": "my script output" + } + }, + 'stats': { + 'path/to/script.ps1': { + isFile() { + return true; + } + } + } +}; +tmr.setAnswers(a); + +// Mock fs +const fs = require('fs'); +const fsClone = Object.assign({}, fs); +fsClone.writeFileSync = function(filePath, contents, options) { + // Normalize to linux paths for logs we check + console.log(`Writing ${contents} to ${filePath.replace(/\\/g, '/')}`); +} +tmr.registerMock('fs', fsClone); + +// Mock uuidv4 +tmr.registerMock('uuid/v4', function () { + return 'fileName'; +}); + +tmr.run(); \ No newline at end of file diff --git a/_generated/PowerShellV2/Tests/L0EnvExpansion.ts b/_generated/PowerShellV2/Tests/L0EnvExpansion.ts new file mode 100644 index 000000000000..851da0126aca --- /dev/null +++ b/_generated/PowerShellV2/Tests/L0EnvExpansion.ts @@ -0,0 +1,117 @@ +import assert = require('assert'); +import { expandPowerShellEnvVariables } from '../helpers'; + +export const testEnvExpansion = () => { + const testSuites: [string, string, string[], string][] = [ + [ + "Handles empty line", + "", [], "" + ], + [ + "Expanding known env variables", + "$env:VAR1 2", ["VAR1=1"], "1 2" + ], + [ + 'Expanding env variables with brace syntax', + '${env:VAR1} 2', ['VAR1=1'], '1 2' + ], + [ + 'Expanding multiple env variables', + '1 $env:VAR1 $env:VAR2', ['VAR1=val1', 'VAR2=val2'], '1 val1 val2' + ], + [ + 'Expanding multiple env variables 2', + '$env:VAR1 $env:VAR2', ['VAR1=1', 'VAR2=2'], '1 2' + ], + [ + 'Expanding multiple close env variables', + '$env:VAR1 $env:VAR2$env:VAR3', ['VAR1=1', 'VAR2=2', 'VAR3=3'], '1 23' + ], + [ + 'Expanding multiple close env variables 2', + '$env:VAR1 ${env:VAR2}_$env:VAR3', ['VAR1=1', 'VAR2=2', 'VAR3=3'], '1 2_3' + ], + [ + 'Expanding multiple close env variables 3', + '${env:VAR1}$env:VAR2', ['VAR1=1', 'VAR2=2',], '12' + ], + [ + 'Expanding multiple close env variables 3', + '$env:VAR1$env:VAR2$env:VAR3', ['VAR1=1', 'VAR2=2', 'VAR3=3'], '123' + ], + [ + 'Not expanding nested env variables', + '$env:VAR1 $env:VAR2', ['VAR1=$env:NESTED', 'VAR2=2', 'NESTED=nested'], '$env:NESTED 2' + ], + [ + 'Not expanding if backtick before env var', + '`$env:VAR1', ['VAR1=val1'], '$env:VAR1' + ], + [ + 'Not expanding if backtick at start of env var', + '$`env:VAR1', ['VAR1=val1'], '$`env:VAR1' + ], + [ + 'Not expanding if backtick inside env var', + '$env:VA`R1', ['VAR1=val1'], '$env:VA`R1' + ], + [ + 'If variable inside single quotes, it should be ignored', + '$env:VAR1 \'$env:VAR2\'', ['VAR1=val1', 'VAR2=val2'], 'val1 \'$env:VAR2\'' + ], + [ + 'If variable inside single quotes, it should be ignored 2', + '$env:VAR1 \' _ $env:VAR2 _ \'', ['VAR1=val1', 'VAR2=val2'], 'val1 \' _ $env:VAR2 _ \'' + ], + [ + 'If variable inside single quotes, it should be ignored 3', + '$env:VAR1 \' _ $env:VAR2 _ \'\'$env:VAR3\'', ['VAR1=val1', 'VAR2=val2', 'VAR3=val3'], 'val1 \' _ $env:VAR2 _ \'\'$env:VAR3\'' + ], + [ + 'If variable inside double quotes, it should be expanded', + '$env:VAR1 "$env:VAR2"', ['VAR1=val1', 'VAR2=val2'], 'val1 "val2"' + ], + [ + 'If quotes closed, variable should be expanded', + '\'\'$env:VAR1', ['VAR1=val1'], '\'\'val1' + ], + [ + 'If quotes closed, variable should be expanded 2', + '\'\'$env:VAR1\'\'', ['VAR1=val1'], '\'\'val1\'\'' + ], + [ + 'If variable is does not exists, it should not be expanded', + '$env:VAR1 2', ['VAR1='], '$env:VAR1 2' + ], + [ + 'If variable syntax is incorrect, it should leave it as is', + '$venv:VAR1 ${_env:VAR2}', ['VAR1=val1', 'VAR2=val2'], '$venv:VAR1 ${_env:VAR2}' + ], + [ + 'If closing brace is not present, it should leave it as is', + '$env:VAR1 ${env:VAR2', ['VAR1=val1', 'VAR2=val2'], 'val1 ${env:VAR2', + ], + [ + 'If closing brace is not present, it should leave it as is 2', + '${env:VAR1 ${env:VAR2}', ['VAR1=val1', 'VAR2=val2'], '${env:VAR1 ${env:VAR2}', + ] + ] + + for (const [testName, input, variables, expected] of testSuites) { + it(testName, () => { + for (const variable of variables) { + const [name, value] = variable.split('='); + if (value) { + process.env[name] = value; + } + else { + delete process.env[name]; + } + } + + const [actual] = expandPowerShellEnvVariables(input); + + assert.deepStrictEqual(actual, expected); + }); + } +} diff --git a/_generated/PowerShellV2/Tests/L0External.ts b/_generated/PowerShellV2/Tests/L0External.ts new file mode 100644 index 000000000000..e43d55e3b07d --- /dev/null +++ b/_generated/PowerShellV2/Tests/L0External.ts @@ -0,0 +1,78 @@ +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, '..', 'powershell.js'); +let tmr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tmr.setInput('targetType', 'filepath'); +tmr.setInput('filePath', 'path/to/script.ps1'); +tmr.setInput('workingDirectory', '/fakecwd'); +tmr.setInput('ignoreLASTEXITCODE', 'true'); + +//Create assertAgent and getVariable mocks, support not added in this version of task-lib +const tl = require('azure-pipelines-task-lib/mock-task'); +const tlClone = Object.assign({}, tl); +tlClone.getVariable = function(variable: string) { + if (variable.toLowerCase() == 'agent.tempdirectory') { + return 'temp/path'; + } + return null; +}; +tlClone.assertAgent = function(variable: string) { + return; +}; +tmr.registerMock('azure-pipelines-task-lib/mock-task', tlClone); + +// Mock task-lib +let a: ma.TaskLibAnswers = { + 'checkPath' : { + '/fakecwd' : true, + 'path/to/powershell': true, + 'temp/path': true + }, + 'which': { + 'powershell': 'path/to/powershell' + }, + 'assertAgent': { + '2.115.0': true + }, + 'exec': { + 'path/to/powershell --noprofile --norc -c pwd': { + "code": 0, + "stdout": "temp/path" + }, + "path/to/powershell -NoLogo -NoProfile -NonInteractive -Command . 'temp\\path\\fileName.ps1'": { + "code": 0, + "stdout": "my script output" + }, + "path/to/powershell -NoLogo -NoProfile -NonInteractive -Command . 'temp/path/fileName.ps1'": { + "code": 0, + "stdout": "my script output" + } + }, + 'stats': { + 'path/to/script.ps1': { + isFile() { + return true; + } + } + } +}; +tmr.setAnswers(a); + +// Mock fs +const fs = require('fs'); +const fsClone = Object.assign({}, fs); +fsClone.writeFileSync = function(filePath, contents, options) { + // Normalize to linux paths for logs we check + console.log(`Writing ${contents} to ${filePath.replace(/\\/g, '/')}`); +} +tmr.registerMock('fs', fsClone); + +// Mock uuidv4 +tmr.registerMock('uuid/v4', function () { + return 'fileName'; +}); + +tmr.run(); \ No newline at end of file diff --git a/_generated/PowerShellV2/Tests/L0Inline.ts b/_generated/PowerShellV2/Tests/L0Inline.ts new file mode 100644 index 000000000000..cfa8b48a8816 --- /dev/null +++ b/_generated/PowerShellV2/Tests/L0Inline.ts @@ -0,0 +1,78 @@ +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, '..', 'powershell.js'); +let tmr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tmr.setInput('targetType', 'inline'); +tmr.setInput('script', 'Write-Host "my script output"'); +tmr.setInput('workingDirectory', '/fakecwd'); +tmr.setInput('ignoreLASTEXITCODE', 'true'); + +//Create assertAgent and getVariable mocks, support not added in this version of task-lib +const tl = require('azure-pipelines-task-lib/mock-task'); +const tlClone = Object.assign({}, tl); +tlClone.getVariable = function(variable: string) { + if (variable.toLowerCase() == 'agent.tempdirectory') { + return 'temp/path'; + } + return null; +}; +tlClone.assertAgent = function(variable: string) { + return; +}; +tmr.registerMock('azure-pipelines-task-lib/mock-task', tlClone); + +// Mock task-lib +let a: ma.TaskLibAnswers = { + 'checkPath' : { + '/fakecwd' : true, + 'path/to/powershell': true, + 'temp/path': true + }, + 'which': { + 'powershell': 'path/to/powershell' + }, + 'assertAgent': { + '2.115.0': true + }, + 'exec': { + 'path/to/powershell --noprofile --norc -c pwd': { + "code": 0, + "stdout": "temp/path" + }, + "path/to/powershell -NoLogo -NoProfile -NonInteractive -Command . 'temp\\path\\fileName.ps1'": { + "code": 0, + "stdout": "my script output" + }, + "path/to/powershell -NoLogo -NoProfile -NonInteractive -Command . 'temp/path/fileName.ps1'": { + "code": 0, + "stdout": "my script output" + } + }, + 'stats': { + 'path/to/script.ps1': { + isFile() { + return true; + } + } + } +}; +tmr.setAnswers(a); + +// Mock fs +const fs = require('fs'); +const fsClone = Object.assign({}, fs); +fsClone.writeFileSync = function(filePath, contents, options) { + // Normalize to linux paths for logs we check + console.log(`Writing ${contents} to ${filePath.replace(/\\/g, '/')}`); +} +tmr.registerMock('fs', fsClone); + +// Mock uuidv4 +tmr.registerMock('uuid/v4', function () { + return 'fileName'; +}); + +tmr.run(); \ No newline at end of file diff --git a/_generated/PowerShellV2/Tests/L0RunScriptInSeparateScope.ts b/_generated/PowerShellV2/Tests/L0RunScriptInSeparateScope.ts new file mode 100644 index 000000000000..f64b6b848b25 --- /dev/null +++ b/_generated/PowerShellV2/Tests/L0RunScriptInSeparateScope.ts @@ -0,0 +1,79 @@ +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, '..', 'powershell.js'); +let tmr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tmr.setInput('targetType', 'filepath'); +tmr.setInput('filePath', 'path/to/script.ps1'); +tmr.setInput('workingDirectory', '/fakecwd'); +tmr.setInput('ignoreLASTEXITCODE', 'true'); +tmr.setInput('runScriptInSeparateScope', 'true') + +//Create assertAgent and getVariable mocks, support not added in this version of task-lib +const tl = require('azure-pipelines-task-lib/mock-task'); +const tlClone = Object.assign({}, tl); +tlClone.getVariable = function(variable: string) { + if (variable.toLowerCase() == 'agent.tempdirectory') { + return 'temp/path'; + } + return null; +}; +tlClone.assertAgent = function(variable: string) { + return; +}; +tmr.registerMock('azure-pipelines-task-lib/mock-task', tlClone); + +// Mock task-lib +let a: ma.TaskLibAnswers = { + 'checkPath' : { + '/fakecwd' : true, + 'path/to/powershell': true, + 'temp/path': true + }, + 'which': { + 'powershell': 'path/to/powershell' + }, + 'assertAgent': { + '2.115.0': true + }, + 'exec': { + 'path/to/powershell --noprofile --norc -c pwd': { + "code": 0, + "stdout": "temp/path" + }, + "path/to/powershell -NoLogo -NoProfile -NonInteractive -Command & 'temp\\path\\fileName.ps1'": { + "code": 0, + "stdout": "my script output" + }, + "path/to/powershell -NoLogo -NoProfile -NonInteractive -Command & 'temp/path/fileName.ps1'": { + "code": 0, + "stdout": "my script output" + } + }, + 'stats': { + 'path/to/script.ps1': { + isFile() { + return true; + } + } + } +}; +tmr.setAnswers(a); + +// Mock fs +const fs = require('fs'); +const fsClone = Object.assign({}, fs); +fsClone.writeFileSync = function(filePath, contents, options) { + // Normalize to linux paths for logs we check + console.log(`Writing ${contents} to ${filePath.replace(/\\/g, '/')}`); +} +tmr.registerMock('fs', fsClone); + +// Mock uuidv4 +tmr.registerMock('uuid/v4', function () { + return 'fileName'; +}); + +tmr.run(); diff --git a/_generated/PowerShellV2/Tests/L0StdErr.ts b/_generated/PowerShellV2/Tests/L0StdErr.ts new file mode 100644 index 000000000000..5bacdf039f73 --- /dev/null +++ b/_generated/PowerShellV2/Tests/L0StdErr.ts @@ -0,0 +1,89 @@ +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, '..', 'powershell.js'); +let tmr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tmr.setInput('targetType', 'inline'); +tmr.setInput('script', 'Write-Host "my script output"'); +tmr.setInput('workingDirectory', '/fakecwd'); +tmr.setInput('ignoreLASTEXITCODE', 'true'); +tmr.setInput('failOnStderr', 'true'); + +//Create assertAgent and getVariable mocks, support not added in this version of task-lib +const tl = require('azure-pipelines-task-lib/mock-task'); +const tlClone = Object.assign({}, tl); +tlClone.getVariable = function(variable: string) { + if (variable.toLowerCase() == 'agent.tempdirectory') { + return 'temp/path'; + } + return null; +}; +tlClone.assertAgent = function(variable: string) { + return; +}; +tmr.registerMock('azure-pipelines-task-lib/mock-task', tlClone); + +function generateBigString(size: number) { + let result:string = ''; + while (result.length < size) { + result += 'a'; + } + return result; +} + +// Mock task-lib +let a: ma.TaskLibAnswers = { + 'checkPath' : { + '/fakecwd' : true, + 'path/to/powershell': true, + 'temp/path': true + }, + 'which': { + 'powershell': 'path/to/powershell' + }, + 'assertAgent': { + '2.115.0': true + }, + 'exec': { + 'path/to/powershell --noprofile --norc -c pwd': { + "code": 0, + "stdout": "temp/path" + }, + "path/to/powershell -NoLogo -NoProfile -NonInteractive -Command . 'temp\\path\\fileName.ps1'": { + "code": 0, + "stdout": "", + "stderr": "myErrorTest" + generateBigString(1000) + }, + "path/to/powershell -NoLogo -NoProfile -NonInteractive -Command . 'temp/path/fileName.ps1'": { + "code": 0, + "stdout": "", + "stderr": "myErrorTest" + generateBigString(1000) + } + }, + 'stats': { + 'path/to/script.ps1': { + isFile() { + return true; + } + } + } +}; +tmr.setAnswers(a); + +// Mock fs +const fs = require('fs'); +const fsClone = Object.assign({}, fs); +fsClone.writeFileSync = function(filePath, contents, options) { + // Normalize to linux paths for logs we check + console.log(`Writing ${contents} to ${filePath.replace(/\\/g, '/')}`); +} +tmr.registerMock('fs', fsClone); + +// Mock uuidv4 +tmr.registerMock('uuid/v4', function () { + return 'fileName'; +}); + +tmr.run(); \ No newline at end of file diff --git a/_generated/PowerShellV2/Tests/L0ValidateFileArgs.ts b/_generated/PowerShellV2/Tests/L0ValidateFileArgs.ts new file mode 100644 index 000000000000..a84f76cfc37a --- /dev/null +++ b/_generated/PowerShellV2/Tests/L0ValidateFileArgs.ts @@ -0,0 +1,78 @@ +import assert = require('assert'); +import { validateFileArgs } from '../helpers'; +import { ArgsSanitizingError } from '../errors'; + +export const runValidateFileArgsTests = () => { + const notThrowTestSuites: [string, string, string[]][] = [ + [ + "Handles empty line", + "", [] + ], + [ + "If no dangerous symbol in present, and FF is on", + "test 1", ["AZP_75787_ENABLE_NEW_LOGIC=true"] + ], + [ + "If dangerous symbols are present, and FF is off", + "test; test", ['AZP_75787_ENABLE_NEW_LOGIC=false'] + ], + [ + "If inside the args line is env variable with no dangerous symbols", + "test $env:VAR1 test", ["VAR1=1", "AZP_75787_ENABLE_NEW_LOGIC=true"] + ], + [ + "Accepts allowed symbols", + "a A 1 \\ ` _ ' \" - = / : . * , + ~ ? %", ["AZP_75787_ENABLE_NEW_LOGIC=true"] + ] + ]; + + for (const [testName, inputArguments, envVariables] of notThrowTestSuites) { + it(testName, () => { + envVariables.forEach(envVariable => { + const [envName, envValue] = envVariable.split("="); + process.env[envName] = envValue; + }); + + try { + assert.doesNotThrow(() => validateFileArgs(inputArguments)); + } + finally { + envVariables.forEach(envVariable => { + const [envName] = envVariable.split("="); + delete process.env[envName]; + }); + } + }) + } + + const throwTestSuites: [string, string, string[]][] = [ + [ + "If dangerous symbols are present, and FF is on", + "test; whoami", ['AZP_75787_ENABLE_NEW_LOGIC=true'] + ], [ + "If inside args line is env variable with dangerous symbols", + "test $env:VAR1 test", ["VAR1=12;3", "AZP_75787_ENABLE_NEW_LOGIC=true"] + ], [ + "If inside args line not correct env syntax", + "test $venv:VAR1 test", ["VAR1=123", "AZP_75787_ENABLE_NEW_LOGIC=true"] + ] + ] + for (const [testName, inputArguments, envVariables] of throwTestSuites) { + it(testName, () => { + envVariables.forEach(envVariable => { + const [envName, envValue] = envVariable.split("="); + process.env[envName] = envValue; + }); + + try { + assert.throws(() => validateFileArgs(inputArguments), ArgsSanitizingError); + } + finally { + envVariables.forEach(envVariable => { + const [envName] = envVariable.split("="); + delete process.env[envName]; + }); + } + }) + } +} \ No newline at end of file diff --git a/_generated/PowerShellV2/Tests/powershellImpl/L0.ts b/_generated/PowerShellV2/Tests/powershellImpl/L0.ts new file mode 100644 index 000000000000..d6ad2e4db39e --- /dev/null +++ b/_generated/PowerShellV2/Tests/powershellImpl/L0.ts @@ -0,0 +1,32 @@ +import path = require('path'); +var psm = require('../../../../Tests/lib/psRunner'); +var psr = null; + +export function testPowerShellImpl() { + this.timeout(parseInt(process.env.TASK_TEST_TIMEOUT) || 20000); + + before((done) => { + if (psm.testSupported()) { + psr = new psm.PSRunner(); + psr.start(); + } + + done(); + }); + + after(() => { + if (psr) { + psr.kill(); + } + }); + + if (psm.testSupported()) { + it('Run of L0Expand-EnvVariables tests suite.', (done) => { + psr.run(path.join(__dirname, 'L0Expand-EnvVariables.ps1'), done); + }) + + it('Run of L0Test-FileArgs tests suite.', (done) => { + psr.run(path.join(__dirname, 'L0Test-FileArgs.ps1'), done); + }) + } +} diff --git a/_generated/PowerShellV2/Tests/powershellImpl/L0Expand-EnvVariables.ps1 b/_generated/PowerShellV2/Tests/powershellImpl/L0Expand-EnvVariables.ps1 new file mode 100644 index 000000000000..a3d173f723a6 --- /dev/null +++ b/_generated/PowerShellV2/Tests/powershellImpl/L0Expand-EnvVariables.ps1 @@ -0,0 +1,166 @@ +[CmdletBinding()] +param() + +. $PSScriptRoot\..\..\..\..\Tests\lib\Initialize-Test.ps1 +. $PSScriptRoot\..\..\helpers.ps1 + +$testSuites = @( + @{ + Name = 'Handles empty line' + Input = '' + Variables = @() + Expected = '' + }, + @{ + Name = 'Expanding known env variables' + Input = '$env:VAR1 2' + Variables = @('VAR1=1') + Expected = '1 2' + }, + @{ + Name = 'Expanding env variables with brace syntax' + Input = '${env:VAR1} 2' + Variables = @('VAR1=1') + Expected = '1 2' + }, + @{ + Name = 'Expanding multiple env variables' + Input = '1 $env:VAR1 $env:VAR2' + Variables = @('VAR1=2', 'VAR2=3') + Expected = '1 2 3' + }, + @{ + Name = 'Expanding multiple env variables 2' + Input = '$env:VAR1 $env:VAR2' + Variables = @('VAR1=1', 'VAR2=2') + Expected = '1 2' + }, + @{ + Name = 'Expanding multiple close env variables' + Input = '$env:VAR1 $env:VAR2$env:VAR3' + Variables = @('VAR1=1', 'VAR2=2', 'VAR3=3') + Expected = '1 23' + }, + @{ + Name = 'Expanding multiple close env variables 2' + Input = '$env:VAR1${env:VAR2}_$env:VAR3' + Variables = @('VAR1=1', 'VAR2=2', 'VAR3=3') + Expected = '12_3' + }, + @{ + Name = 'Expanding multiple close env variables 3' + Input = '${env:VAR1}$env:VAR2' + Variables = @('VAR1=1', 'VAR2=2') + Expected = '12' + }, + @{ + Name = 'Not expanding nested env variables' + Input = '$env:VAR1 $env:VAR2' + Variables = @('VAR1=$env:NESTED', 'VAR2=2', 'NESTED=nested') + Expected = '$env:NESTED 2' + }, + @{ + Name = 'Not expanding if backtick before env var' + Input = '`$env:VAR1' + Variables = @('VAR1=val1') + Expected = '$env:VAR1' + }, + @{ + Name = 'Not expanding if backtick at start of env var' + Input = '$`env:VAR1' + Variables = @('VAR1=val1') + Expected = '$`env:VAR1' + }, + @{ + Name = 'Not expanding if backtick inside env var' + Input = '$env:VA`R1' + Variables = @('VAR1=val1') + Expected = '$env:VA`R1' + }, + @{ + Name = 'If variable inside single quotes, it should be ignored' + Input = '$env:VAR1 ''$env:VAR2''' + Variables = @('VAR1=val1', 'VAR2=val2') + Expected = 'val1 ''$env:VAR2''' + }, + @{ + Name = 'If variable inside single quotes, it should be ignored 2' + Input = '$env:VAR1 '' _ ${env:VAR2} _ ''' + Variables = @('VAR1=val1', 'VAR2=val2') + Expected = 'val1 '' _ ${env:VAR2} _ ''' + }, + @{ + Name = 'If variable inside single quotes, it should be ignored 3' + Input = '$env:VAR1 '' _ $env:VAR2 _ $env:VAR3''' + Variables = @('VAR1=val1', 'VAR2=val2', 'VAR3=val3') + Expected = 'val1 '' _ $env:VAR2 _ $env:VAR3''' + }, + @{ + Name = 'If variable inside double quotes, it should be expanded' + Input = '$env:VAR1 "$env:VAR2"' + Variables = @('VAR1=val1', 'VAR2=val2') + Expected = 'val1 "val2"' + }, + @{ + Name = 'If quotes closed, variable should be expanded' + Input = '''''$env:VAR1' + Variables = @('VAR1=val1') + Expected = '''''val1' + }, + @{ + Name = 'If quotes closed, variable should be expanded 2' + Input = '''''$env:VAR1''''' + Variables = @('VAR1=val1') + Expected = '''''val1''''' + }, + @{ + Name = 'If variable does not exists, it should not expand' + Input = '$env:VAR1 2' + Variables = @('VAR1=') + Expected = '$env:VAR1 2' + }, + @{ + Name = 'If variable syntax is incorrect, it should leave it as is' + Input = '$venv:VAR1 ${_env:VAR2}' + Variables = @('VAR1=val1', 'VAR2=val2') + Expected = '$venv:VAR1 ${_env:VAR2}' + }, + @{ + Name = 'If closing brace is not present, it should leave it as is' + Input = '$env:VAR1 ${env:VAR2' + Variables = @('VAR1=val1', 'VAR2=val2') + Expected = 'val1 ${env:VAR2' + }, + @{ + Name = 'If closing brace is not present, it should leave it as is 2' + Input = '${env:VAR1 ${env:VAR2}' + Variables = @('VAR1=val1', 'VAR2=val2') + Expected = '${env:VAR1 ${env:VAR2}' + } +) + +foreach ($test in $testSuites) { + $test.Variables | ForEach-Object { + $name, $value = $_.Split('=') + if ($value) { + Set-Item -Path env:$name -Value $value + } + else { + Remove-Item env:$name -ErrorAction SilentlyContinue + } + } + + Write-Host "Input = $($test.Input)" + + $actual, $telemetry = Expand-EnvVariables $test.Input + + try { + Assert-AreEqual -Expected $test.Expected -Actual $actual -Message "Error occured in '$($test.Name)' suite." + } + finally { + $test.Variables | ForEach-Object { + $name, $value = $_.Split('=') + Remove-Item env:$name -ErrorAction SilentlyContinue + } + } +} diff --git a/_generated/PowerShellV2/Tests/powershellImpl/L0Test-FileArgs.ps1 b/_generated/PowerShellV2/Tests/powershellImpl/L0Test-FileArgs.ps1 new file mode 100644 index 000000000000..0c40c78ab449 --- /dev/null +++ b/_generated/PowerShellV2/Tests/powershellImpl/L0Test-FileArgs.ps1 @@ -0,0 +1,102 @@ +[CmdletBinding()] +param() + +. $PSScriptRoot\..\..\..\..\Tests\lib\Initialize-Test.ps1 +. $PSScriptRoot\..\..\helpers.ps1 + +$notThrowTestSuites = @( + @{ + Name = 'Handles empty line' + Input = '' + Variables = @() + }, + @{ + Name = 'If no dangerous symbol in present, and FF is on' + Input = 'test 1' + Variables = @('AZP_75787_ENABLE_NEW_LOGIC=true') + }, + @{ + Name = 'If dangerous symbols are present, and FF is off' + Input = 'test; test' + Variables = @('AZP_75787_ENABLE_NEW_LOGIC=false') + }, + @{ + Name = 'If inside the args line is env variable with no dangerous symbols' + Input = 'test $env:VAR1 test' + Variables = @('VAR1=1', 'AZP_75787_ENABLE_NEW_LOGIC=true') + }, + @{ + Name = 'Accepts allowed symbols' + Input = 'a A 1 \ ` _ '' " - = / : . * , + ~ ? %' + Variables = @('AZP_75787_ENABLE_NEW_LOGIC=true') + } +) +foreach ($test in $notThrowTestSuites) { + $test.Variables | ForEach-Object { + $name, $value = $_.Split('=') + if ($value) { + Set-Item -Path env:$name -Value $value + } + else { + Remove-Item env:$name -ErrorAction SilentlyContinue + } + } + + try { + Test-FileArgs $test.Input + } + catch { + throw "Error occured in '$($test.Name)' suite: $($_.Exception.Message)" + } + finally { + $test.Variables | ForEach-Object { + $name, $value = $_.Split('=') + Remove-Item env:$name -ErrorAction SilentlyContinue + } + } +} + +$throwTestSuites = @( + @{ + Name = 'If dangerous symbols are present, and FF is on' + Input = 'test; whoami' + Variables = @('AZP_75787_ENABLE_NEW_LOGIC=true') + }, + @{ + Name = 'If inside args line is env variable with dangerous symbols' + Input = 'test $env:VAR1 test' + Variables = @('VAR1=12;3', 'AZP_75787_ENABLE_NEW_LOGIC=true') + }, + @{ + Name = 'If inside args line not correct env syntax' + Input = 'test $venv:VAR1 test' + Variables = @('VAR1=123', 'AZP_75787_ENABLE_NEW_LOGIC=true') + } +) +foreach ($test in $throwTestSuites) { + $test.Variables | ForEach-Object { + $name, $value = $_.Split('=') + if ($value) { + Set-Item -Path env:$name -Value $value + } + else { + Remove-Item env:$name -ErrorAction SilentlyContinue + } + } + + try { + $msg = Get-VstsLocString -Key 'ScriptArgsSanitized' + Assert-Throws { + Test-FileArgs $test.Input + } -MessagePattern $msg + } + catch { + throw "Error occured in '$($test.Name)' suite: $($_.Exception.Message)" + } + finally { + $test.Variables | ForEach-Object { + $name, $value = $_.Split('=') + Remove-Item env:$name -ErrorAction SilentlyContinue + } + } +} diff --git a/_generated/PowerShellV2/errors.ts b/_generated/PowerShellV2/errors.ts new file mode 100644 index 000000000000..b86763d43eee --- /dev/null +++ b/_generated/PowerShellV2/errors.ts @@ -0,0 +1,5 @@ +export class ArgsSanitizingError extends Error { + constructor(message: string) { + super(message); + } +} diff --git a/_generated/PowerShellV2/helpers.ps1 b/_generated/PowerShellV2/helpers.ps1 new file mode 100644 index 000000000000..e12c8e309c16 --- /dev/null +++ b/_generated/PowerShellV2/helpers.ps1 @@ -0,0 +1,249 @@ +function Publish-Telemetry($Telemetry) { + $area = 'TaskHub' + $feature = 'PowerShellV2' + $telemetryJson = $Telemetry | ConvertTo-Json -Compress + Write-Host "##vso[telemetry.publish area=$area;feature=$feature]$telemetryJson" +} + +function Merge-Matches { + param ( + [Parameter(Mandatory = $true)] + [String[]]$Matches + ) + + $matchesData = @{} + foreach ($m in $Matches) { + if ($matchesData.ContainsKey($m)) { + $matchesData[$m]++ + } + else { + $matchesData[$m] = 1 + } + } + + return $matchesData +} + +function Sanitize-Arguments([string]$InputArgs) { + $removedSymbolSign = '_#removed#_'; + $argsSplitSymbols = '``'; + [string[][]]$matchesChunks = @() + + # We're splitting by ``, removing all suspicious characters and then join + $argsArr = $InputArgs -split $argsSplitSymbols; + + ## '? i >= 0) + if (foundPrefixes.length === 0) { + break; + } + + const prefixIndex = Math.min(...foundPrefixes) + + const isBraceSyntax = prefixIndex === bracedPrefixIndex + if (isBraceSyntax) { + telemetry.braceSyntaxEntries++; + } + + if (prefixIndex < 0) { + break; + } + + telemetry.foundPrefixes++ + + if (result[prefixIndex - 1] === escapingSymbol) { + if (!result[prefixIndex - 2] || result[prefixIndex - 2] !== escapingSymbol) { + startIndex++ + result = result.substring(0, prefixIndex - 1) + result.substring(prefixIndex) + + telemetry.escapedVariables++ + + continue + } + + telemetry.escapedEscapingSymbols++ + } + + const quoteIndex = result.indexOf(quote, startIndex) + if (quoteIndex >= 0 && prefixIndex > quoteIndex) { + const nextQuoteIndex = result.indexOf(quote, quoteIndex + 1) + if (nextQuoteIndex < 0) { + break + } + + startIndex = nextQuoteIndex + 1 + + continue + } + + let envName = ''; + let envEndIndex = 0; + + const envStartIndex = prefixIndex + (isBraceSyntax ? bracedEnvPrefix.length : basicEnvPrefix.length) + + if (isBraceSyntax) { + envEndIndex = findEnclosingBraceIndex(result, prefixIndex) + if (envEndIndex === 0) { + telemetry.notClosedBraceSyntaxPosition = prefixIndex + 1 // +{ + + break; + } + + envName = result.substring(envStartIndex, envEndIndex) + + telemetry.bracedVariables++ + } else { + envName = result.substring(envStartIndex).split(/[ |"|'|;|$]/)[0] + envEndIndex = envStartIndex + envName.length + } + + if (envName.startsWith(escapingSymbol)) { + const sanitizedEnvName = basicEnvPrefix + envName.substring(1) + result = result.substring(0, prefixIndex) + sanitizedEnvName + result.substring(envEndIndex) + startIndex = prefixIndex + sanitizedEnvName.length + + telemetry.variableStartsFromBacktick++ + + continue + } + + let head = result.substring(0, prefixIndex) + if (envName.includes(escapingSymbol)) { + head = head + envName.split(escapingSymbol)[1] + envName = envName.split(escapingSymbol)[0] + + telemetry.variablesWithBacktickInside++ + } + + const envValue = process.env[envName]; + // in case we don't have such variable, we just leave it as is + if (!envValue) { + telemetry.notExistingEnv++ + startIndex = envEndIndex + continue + } + + const tail = result.substring(isBraceSyntax ? envEndIndex + 1 : envEndIndex) + + result = head + envValue + tail; + startIndex = prefixIndex + envValue.length + + telemetry.variablesExpanded++ + + continue + } + + return [result, telemetry] +} + +function findEnclosingBraceIndex(input: string, targetIndex: number) { + for (let i = 0; i < input.length; i++) { + if (input[i] === "}" && i > targetIndex) { + return i + } + } + return 0 +} + +export function validateFileArgs(inputArguments: string): void { + const featureFlags = { + audit: tl.getBoolFeatureFlag('AZP_75787_ENABLE_NEW_LOGIC_LOG'), + activate: tl.getBoolFeatureFlag('AZP_75787_ENABLE_NEW_LOGIC'), + telemetry: tl.getBoolFeatureFlag('AZP_75787_ENABLE_COLLECT') + }; + + if (featureFlags.activate || featureFlags.audit || featureFlags.telemetry) { + tl.debug('Validating file args'); + const [expandedArgs, expandTelemetry] = expandPowerShellEnvVariables(inputArguments); + + tl.debug(`Expanded args: ${expandedArgs}`); + + const [sanitizedArgs, sanitizeTelemetry] = sanitizeArgs( + expandedArgs, + { + argsSplitSymbols: '``', + saniziteRegExp: new RegExp('(? + + + + + + + + + + + + + + + + + + + diff --git a/_generated/PowerShellV2/make.json b/_generated/PowerShellV2/make.json new file mode 100644 index 000000000000..03fd38de4049 --- /dev/null +++ b/_generated/PowerShellV2/make.json @@ -0,0 +1,34 @@ +{ + "externals": { + "nugetv2": [ + { + "name": "VstsTaskSdk", + "version": "0.11.0", + "repository": "https://www.powershellgallery.com/api/v2/", + "cp": [ + { + "source": [ + "*.dll", + "*.ps1", + "*.psd1", + "*.psm1", + "lib.json", + "Strings" + ], + "dest": "ps_modules/VstsTaskSdk/", + "options": "-R" + } + ] + } + ] + }, + "rm": [ + { + "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" + ], + "options": "-Rf" + } + ] +} \ No newline at end of file diff --git a/_generated/PowerShellV2/package-lock.json b/_generated/PowerShellV2/package-lock.json new file mode 100644 index 000000000000..09e958f3728b --- /dev/null +++ b/_generated/PowerShellV2/package-lock.json @@ -0,0 +1,608 @@ +{ + "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": "16.11.64", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.64.tgz", + "integrity": "sha512-z5hPTlVFzNwtJ2LNozTpJcD1Cu44c4LNuzaq1mwxmiHWQh2ULdR6Vjwo1UGldzRpzL0yUEdZddnfqGW2G70z6Q==" + }, + "@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.10", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.10.tgz", + "integrity": "sha512-BgeaZuElf7DEYZhWYDTc/XcLZXdVgFkVSTa13BqKvbnmUrxr3TJFKofUxCtDO9UQOdhnV+HPOESdHiHKZOJV1A==" + }, + "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": "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-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": { + "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-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": { + "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==" + }, + "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.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==" + }, + "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": "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/PowerShellV2/package.json b/_generated/PowerShellV2/package.json new file mode 100644 index 000000000000..4481c214e52e --- /dev/null +++ b/_generated/PowerShellV2/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": "^16.11.39", + "azure-pipelines-task-lib": "^5.0.0-preview.0", + "azure-pipelines-tasks-utility-common": "^3.225.1", + "uuid": "^3.0.1" + }, + "devDependencies": { + "typescript": "4.0.2" + } +} diff --git a/_generated/PowerShellV2/powershell.ps1 b/_generated/PowerShellV2/powershell.ps1 new file mode 100644 index 000000000000..0e42acbe708d --- /dev/null +++ b/_generated/PowerShellV2/powershell.ps1 @@ -0,0 +1,255 @@ +[CmdletBinding()] +param() + +. $PSScriptRoot\helpers.ps1 + +function Get-ActionPreference { + param ( + [Parameter(Mandatory)] + [string] + $VstsInputName, + + [Parameter()] + [string] + $DefaultAction = 'Default', + + [Parameter()] + [string[]] + $ValidActions = @( 'Default', 'Stop', 'Continue', 'SilentlyContinue' ) + ) + + $result = Get-VstsInput -Name $VstsInputName -Default $DefaultAction + + if (-not $ValidActions -contains $result) { + Write-Error (Get-VstsLocString -Key 'PS_InvalidActionPreference' -ArgumentList @( $VstsInputName, $result, ($ValidActions -join ', ') )) + } + + return $result +} + +Trace-VstsEnteringInvocation $MyInvocation +try { + Import-VstsLocStrings "$PSScriptRoot\task.json" + + # Get inputs. + $input_errorActionPreference = Get-ActionPreference -VstsInputName 'errorActionPreference' -DefaultAction 'Stop' + $input_warningPreference = Get-ActionPreference -VstsInputName 'warningPreference' -DefaultAction 'Default' + $input_informationPreference = Get-ActionPreference -VstsInputName 'informationPreference' -DefaultAction 'Default' + $input_verbosePreference = Get-ActionPreference -VstsInputName 'verbosePreference' -DefaultAction 'Default' + $input_debugPreference = Get-ActionPreference -VstsInputName 'debugPreference' -DefaultAction 'Default' + $input_progressPreference = Get-ActionPreference -VstsInputName 'progressPreference' -DefaultAction 'SilentlyContinue' + + $input_showWarnings = Get-VstsInput -Name 'showWarnings' -AsBool + $input_failOnStderr = Get-VstsInput -Name 'failOnStderr' -AsBool + $input_ignoreLASTEXITCODE = Get-VstsInput -Name 'ignoreLASTEXITCODE' -AsBool + $input_pwsh = Get-VstsInput -Name 'pwsh' -AsBool + $input_workingDirectory = Get-VstsInput -Name 'workingDirectory' -Require + Assert-VstsPath -LiteralPath $input_workingDirectory -PathType 'Container' + $input_targetType = Get-VstsInput -Name 'targetType' + if ("$input_targetType".ToUpperInvariant() -eq "FILEPATH") { + $input_filePath = Get-VstsInput -Name 'filePath' -Require + try { + Assert-VstsPath -LiteralPath $input_filePath -PathType Leaf + } + catch { + Write-Error (Get-VstsLocString -Key 'PS_InvalidFilePath' -ArgumentList $input_filePath) + } + + if (!$input_filePath.ToUpperInvariant().EndsWith('.PS1')) { + Write-Error (Get-VstsLocString -Key 'PS_InvalidFilePath' -ArgumentList $input_filePath) + } + + $input_arguments = Get-VstsInput -Name 'arguments' + } + elseif ("$input_targetType".ToUpperInvariant() -eq "INLINE") { + $input_script = Get-VstsInput -Name 'script' + } + else { + Write-Error (Get-VstsLocString -Key 'PS_InvalidTargetType' -ArgumentList $input_targetType) + } + $input_runScriptInSeparateScope = Get-VstsInput -Name 'runScriptInSeparateScope' -AsBool + + # Generate the script contents. + Write-Host (Get-VstsLocString -Key 'GeneratingScript') + $contents = @() + if ($input_errorActionPreference -ne 'Default') { + $contents += "`$ErrorActionPreference = '$input_errorActionPreference'" + } + if ($input_warningPreference -ne 'Default') { + $contents += "`$WarningPreference = '$input_warningPreference'" + } + if ($input_informationPreference -ne 'Default') { + $contents += "`$InformationPreference = '$input_informationPreference'" + } + if ($input_verbosePreference -ne 'Default') { + $contents += "`$VerbosePreference = '$input_verbosePreference'" + } + if ($input_debugPreference -ne 'Default') { + $contents += "`$DebugPreference = '$input_debugPreference'" + } + if ($input_progressPreference -ne 'Default') { + $contents += "`$ProgressPreference = '$input_progressPreference'" + } + # Change default error view to normal view. We need this for error handling since we pipe stdout and stderr to the same stream + # and we rely on PowerShell piping back NormalView error records (required because PowerShell Core changed the default to ConciseView) + $contents += "`$ErrorView = 'NormalView'" + if ("$input_targetType".ToUpperInvariant() -eq 'FILEPATH') { + + try { + Test-FileArgs $input_arguments + } + catch { + $message = $_.Exception.Message + + if ($message -eq (Get-VstsLocString -Key 'ScriptArgsSanitized')) { + throw $message; + } + + $telemetry = @{ + 'UnexpectedError' = $message + 'ErrorStackTrace' = $_.Exception.StackTrace + } + Publish-Telemetry $telemetry + } + + $contents += ". '$("$input_filePath".Replace("'", "''"))' $input_arguments".Trim() + Write-Host (Get-VstsLocString -Key 'PS_FormattedCommand' -ArgumentList ($contents[-1])) + } + else { + $contents += "$input_script".Replace("`r`n", "`n").Replace("`n", "`r`n") + } + + if (!$input_ignoreLASTEXITCODE) { + $contents += 'if (!(Test-Path -LiteralPath variable:\LASTEXITCODE)) {' + $contents += ' Write-Host ''##vso[task.debug]$LASTEXITCODE is not set.''' + $contents += '} else {' + $contents += ' Write-Host (''##vso[task.debug]$LASTEXITCODE: {0}'' -f $LASTEXITCODE)' + $contents += ' exit $LASTEXITCODE' + $contents += '}' + } + + $joinedContents = [System.String]::Join( + ([System.Environment]::NewLine), + $contents); + if ($input_showWarnings) { + $joinedContents = ' + $warnings = New-Object System.Collections.ObjectModel.ObservableCollection[System.Management.Automation.WarningRecord]; + Register-ObjectEvent -InputObject $warnings -EventName CollectionChanged -Action { + if($Event.SourceEventArgs.Action -like "Add"){ + $Event.SourceEventArgs.NewItems | ForEach-Object { + Write-Host "##vso[task.logissue type=warning;]$_"; + } + } + }; + Invoke-Command {' + $joinedContents + '} -WarningVariable +warnings'; + } + + # Write the script to disk. + Assert-VstsAgent -Minimum '2.115.0' + $tempDirectory = Get-VstsTaskVariable -Name 'agent.tempDirectory' -Require + Assert-VstsPath -LiteralPath $tempDirectory -PathType 'Container' + $filePath = [System.IO.Path]::Combine($tempDirectory, "$([System.Guid]::NewGuid()).ps1") + $null = [System.IO.File]::WriteAllText( + $filePath, + $joinedContents, + ([System.Text.Encoding]::UTF8)) + + # Prepare the external command values. + # + # Note, use "-Command" instead of "-File". On PowerShell v4 and V3 when using "-File", terminating + # errors do not cause a non-zero exit code. + if ($input_pwsh) { + $powershellPath = Get-Command -Name pwsh.exe -CommandType Application | Select-Object -First 1 -ExpandProperty Path + } + else { + $powershellPath = Get-Command -Name powershell.exe -CommandType Application | Select-Object -First 1 -ExpandProperty Path + } + $executionOperator; + if ($input_runScriptInSeparateScope) { + $executionOperator = '&'; + } + else { + $executionOperator = '.'; + } + Assert-VstsPath -LiteralPath $powershellPath -PathType 'Leaf' + $arguments = "-NoLogo -NoProfile -NonInteractive -ExecutionPolicy Unrestricted -Command `"$executionOperator '$($filePath.Replace("'", "''"))'`"" + $splat = @{ + 'FileName' = $powershellPath + 'Arguments' = $arguments + 'WorkingDirectory' = $input_workingDirectory + } + + # Switch to "Continue". + $global:ErrorActionPreference = 'Continue' + $failed = $false + + # Run the script. + Write-Host '========================== Starting Command Output ===========================' + if (!$input_failOnStderr) { + Invoke-VstsTool @splat + } + else { + $inError = $false + $errorLines = New-Object System.Text.StringBuilder + Invoke-VstsTool @splat 2>&1 | + ForEach-Object { + if ($_ -is [System.Management.Automation.ErrorRecord]) { + # Buffer the error lines. + $failed = $true + $inError = $true + $null = $errorLines.AppendLine("$($_.Exception.Message)") + + # Write to verbose to mitigate if the process hangs. + Write-Verbose "STDERR: $($_.Exception.Message)" + } + else { + # Flush the error buffer. + if ($inError) { + $inError = $false + $message = $errorLines.ToString().Trim() + $null = $errorLines.Clear() + if ($message) { + Write-VstsTaskError -Message $message + } + } + + Write-Host "$_" + } + } + + # Flush the error buffer one last time. + if ($inError) { + $inError = $false + $message = $errorLines.ToString().Trim() + $null = $errorLines.Clear() + if ($message) { + Write-VstsTaskError -Message $message + } + } + } + + # Fail on $LASTEXITCODE + if (!(Test-Path -LiteralPath 'variable:\LASTEXITCODE')) { + $failed = $true + Write-Verbose "Unable to determine exit code" + Write-VstsTaskError -Message (Get-VstsLocString -Key 'PS_UnableToDetermineExitCode') + } + else { + if ($LASTEXITCODE -ne 0) { + $failed = $true + Write-VstsTaskError -Message (Get-VstsLocString -Key 'PS_ExitCode' -ArgumentList $LASTEXITCODE) + } + } + + # Fail if any errors. + if ($failed) { + Write-VstsSetResult -Result 'Failed' -Message "Error detected" -DoNotThrow + } +} +catch { + Write-VstsTaskError -Message $_.Exception.Message + Write-VstsSetResult -Result 'Failed' -Message "Error detected" -DoNotThrow +} +finally { + Trace-VstsLeavingInvocation $MyInvocation +} diff --git a/_generated/PowerShellV2/powershell.ts b/_generated/PowerShellV2/powershell.ts new file mode 100644 index 000000000000..b711542677db --- /dev/null +++ b/_generated/PowerShellV2/powershell.ts @@ -0,0 +1,192 @@ +import fs = require('fs'); +import path = require('path'); +import os = require('os'); +import tl = require('azure-pipelines-task-lib/task'); +import tr = require('azure-pipelines-task-lib/toolrunner'); +import { validateFileArgs } from './helpers'; +import { ArgsSanitizingError } from './errors'; +import { emitTelemetry } from 'azure-pipelines-tasks-utility-common/telemetry'; +var uuidV4 = require('uuid/v4'); + +function getActionPreference(vstsInputName: string, defaultAction: string = 'Default', validActions: string[] = ['Default', 'Stop', 'Continue', 'SilentlyContinue']) { + let result: string = tl.getInput(vstsInputName, false) || defaultAction; + + if (validActions.map(actionPreference => actionPreference.toUpperCase()).indexOf(result.toUpperCase()) < 0) { + throw new Error(tl.loc('JS_InvalidActionPreference', vstsInputName, result, validActions.join(', '))) + } + + return result +} + +async function run() { + try { + tl.setResourcePath(path.join(__dirname, 'task.json')); + + // Get inputs. + let input_errorActionPreference: string = getActionPreference('errorActionPreference', 'Stop'); + let input_warningPreference: string = getActionPreference('warningPreference', 'Default'); + let input_informationPreference: string = getActionPreference('informationPreference', 'Default'); + let input_verbosePreference: string = getActionPreference('verbosePreference', 'Default'); + let input_debugPreference: string = getActionPreference('debugPreference', 'Default'); + let input_progressPreference: string = getActionPreference('progressPreference', 'SilentlyContinue'); + + let input_showWarnings = tl.getBoolInput('showWarnings', false); + let input_failOnStderr = tl.getBoolInput('failOnStderr', false); + let input_ignoreLASTEXITCODE = tl.getBoolInput('ignoreLASTEXITCODE', false); + let input_workingDirectory = tl.getPathInput('workingDirectory', /*required*/ true, /*check*/ true); + let input_filePath: string; + let input_arguments: string; + let input_script: string; + let input_targetType: string = tl.getInput('targetType') || ''; + if (input_targetType.toUpperCase() == 'FILEPATH') { + input_filePath = tl.getPathInput('filePath', /*required*/ true); + if (!tl.stats(input_filePath).isFile() || !input_filePath.toUpperCase().match(/\.PS1$/)) { + throw new Error(tl.loc('JS_InvalidFilePath', input_filePath)); + } + + input_arguments = tl.getInput('arguments') || ''; + } + else if (input_targetType.toUpperCase() == 'INLINE') { + input_script = tl.getInput('script', false) || ''; + } + else { + throw new Error(tl.loc('JS_InvalidTargetType', input_targetType)); + } + const input_runScriptInSeparateScope = tl.getBoolInput('runScriptInSeparateScope'); + + // Generate the script contents. + console.log(tl.loc('GeneratingScript')); + let contents: string[] = []; + if (input_errorActionPreference.toUpperCase() != 'DEFAULT') { + contents.push(`$ErrorActionPreference = '${input_errorActionPreference}'`); + } + if (input_warningPreference.toUpperCase() != 'DEFAULT') { + contents.push(`$WarningPreference = '${input_warningPreference}'`); + } + if (input_informationPreference.toUpperCase() != 'DEFAULT') { + contents.push(`$InformationPreference = '${input_informationPreference}'`); + } + if (input_verbosePreference.toUpperCase() != 'DEFAULT') { + contents.push(`$VerbosePreference = '${input_verbosePreference}'`); + } + if (input_debugPreference.toUpperCase() != 'DEFAULT') { + contents.push(`$DebugPreference = '${input_debugPreference}'`); + } + if (input_progressPreference.toUpperCase() != 'DEFAULT') { + contents.push(`$ProgressPreference = '${input_progressPreference}'`); + } + + let script = ''; + if (input_targetType.toUpperCase() == 'FILEPATH') { + + try { + validateFileArgs(input_arguments); + } + catch (error) { + if (error instanceof ArgsSanitizingError) { + throw error; + } + + emitTelemetry('TaskHub', 'PowerShellV2', + { + UnexpectedError: error?.message ?? JSON.stringify(error) ?? null, + ErrorStackTrace: error?.stack ?? null + } + ); + } + + script = `. '${input_filePath.replace(/'/g, "''")}' ${input_arguments}`.trim(); + } else { + script = `${input_script}`; + } + if (input_showWarnings) { + script = ` + $warnings = New-Object System.Collections.ObjectModel.ObservableCollection[System.Management.Automation.WarningRecord]; + Register-ObjectEvent -InputObject $warnings -EventName CollectionChanged -Action { + if($Event.SourceEventArgs.Action -like "Add"){ + $Event.SourceEventArgs.NewItems | ForEach-Object { + Write-Host "##vso[task.logissue type=warning;]$_"; + } + } + }; + Invoke-Command {${script}} -WarningVariable +warnings; + `; + } + contents.push(script); + // log with detail to avoid a warning output. + tl.logDetail(uuidV4(), tl.loc('JS_FormattedCommand', script), null, 'command', 'command', 0); + + if (!input_ignoreLASTEXITCODE) { + contents.push(`if (!(Test-Path -LiteralPath variable:\LASTEXITCODE)) {`); + contents.push(` Write-Host '##vso[task.debug]$LASTEXITCODE is not set.'`); + contents.push(`} else {`); + contents.push(` Write-Host ('##vso[task.debug]$LASTEXITCODE: {0}' -f $LASTEXITCODE)`); + contents.push(` exit $LASTEXITCODE`); + contents.push(`}`); + } + + // Write the script to disk. + tl.assertAgent('2.115.0'); + let tempDirectory = tl.getVariable('agent.tempDirectory'); + tl.checkPath(tempDirectory, `${tempDirectory} (agent.tempDirectory)`); + let filePath = path.join(tempDirectory, uuidV4() + '.ps1'); + fs.writeFileSync( + filePath, + '\ufeff' + contents.join(os.EOL), // Prepend the Unicode BOM character. + { encoding: 'utf8' }); // Since UTF8 encoding is specified, node will + // // encode the BOM into its UTF8 binary sequence. + + // Run the script. + // + // Note, prefer "pwsh" over "powershell". At some point we can remove support for "powershell". + // + // Note, use "-Command" instead of "-File" to match the Windows implementation. Refer to + // comment on Windows implementation for an explanation why "-Command" is preferred. + console.log('========================== Starting Command Output ==========================='); + + const executionOperator = input_runScriptInSeparateScope ? '&' : '.'; + let powershell = tl.tool(tl.which('pwsh') || tl.which('powershell') || tl.which('pwsh', true)) + .arg('-NoLogo') + .arg('-NoProfile') + .arg('-NonInteractive') + .arg('-Command') + .arg(`${executionOperator} '${filePath.replace(/'/g, "''")}'`); + let options = { + cwd: input_workingDirectory, + failOnStdErr: false, + errStream: process.stdout, // Direct all output to STDOUT, otherwise the output may appear out + outStream: process.stdout, // of order since Node buffers it's own STDOUT but not STDERR. + ignoreReturnCode: true + }; + + // Listen for stderr. + let stderrFailure = false; + const aggregatedStderr: string[] = []; + if (input_failOnStderr) { + powershell.on('stderr', (data: Buffer) => { + stderrFailure = true; + aggregatedStderr.push(data.toString('utf8')); + }); + } + + // Run bash. + let exitCode: number = await powershell.exec(options); + // Fail on exit code. + if (exitCode !== 0) { + tl.setResult(tl.TaskResult.Failed, tl.loc('JS_ExitCode', exitCode)); + } + + // Fail on stderr. + if (stderrFailure) { + tl.setResult(tl.TaskResult.Failed, tl.loc('JS_Stderr')); + aggregatedStderr.forEach((err: string) => { + tl.error(err); + }); + } + } + catch (err) { + tl.setResult(tl.TaskResult.Failed, err.message || 'run() failed'); + } +} + +run(); diff --git a/_generated/PowerShellV2/task.json b/_generated/PowerShellV2/task.json new file mode 100644 index 000000000000..d55e8a4b0682 --- /dev/null +++ b/_generated/PowerShellV2/task.json @@ -0,0 +1,265 @@ +{ + "id": "E213FF0F-5D5C-4791-802D-52EA3E7BE1F1", + "name": "PowerShell", + "friendlyName": "PowerShell", + "description": "Run a PowerShell script on Linux, macOS, or Windows", + "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/powershell", + "helpMarkDown": "[Learn more about this task](https://go.microsoft.com/fwlink/?LinkID=613736)", + "category": "Utility", + "visibility": [ + "Build", + "Release" + ], + "runsOn": [ + "Agent", + "DeploymentGroup" + ], + "author": "Microsoft Corporation", + "version": { + "Major": 2, + "Minor": 229, + "Patch": 4 + }, + "releaseNotes": "Script task consistency. Added support for macOS and Linux.", + "minimumAgentVersion": "2.115.0", + "showEnvironmentVariables": true, + "groups": [ + { + "name": "preferenceVariables", + "displayName": "Preference Variables", + "isExpanded": false + }, + { + "name": "advanced", + "displayName": "Advanced", + "isExpanded": false + } + ], + "inputs": [ + { + "name": "targetType", + "type": "radio", + "label": "Type", + "required": false, + "defaultValue": "filePath", + "helpMarkDown": "Target script type: File Path or Inline", + "options": { + "filePath": "File Path", + "inline": "Inline" + } + }, + { + "name": "filePath", + "type": "filePath", + "label": "Script Path", + "visibleRule": "targetType = filePath", + "required": true, + "defaultValue": "", + "helpMarkDown": "Path of the script to execute. Must be a fully qualified path or relative to $(System.DefaultWorkingDirectory)." + }, + { + "name": "arguments", + "type": "string", + "label": "Arguments", + "visibleRule": "targetType = filePath", + "required": false, + "defaultValue": "", + "helpMarkDown": "Arguments passed to the PowerShell script. Either ordinal parameters or named parameters." + }, + { + "name": "script", + "type": "multiLine", + "label": "Script", + "visibleRule": "targetType = inline", + "required": true, + "defaultValue": "# Write your PowerShell commands here.\n\nWrite-Host \"Hello World\"\n", + "properties": { + "resizable": "true", + "rows": "10", + "maxLength": "20000" + }, + "helpMarkDown": "" + }, + { + "name": "errorActionPreference", + "type": "pickList", + "label": "ErrorActionPreference", + "required": false, + "defaultValue": "stop", + "options": { + "default": "Default", + "stop": "Stop", + "continue": "Continue", + "silentlyContinue": "SilentlyContinue" + }, + "helpMarkDown": "When not `Default`, prepends the line `$ErrorActionPreference = 'VALUE'` at the top of your script.", + "groupName": "preferenceVariables" + }, + { + "name": "warningPreference", + "type": "pickList", + "label": "WarningPreference", + "required": false, + "defaultValue": "default", + "options": { + "default": "Default", + "stop": "Stop", + "continue": "Continue", + "silentlyContinue": "SilentlyContinue" + }, + "helpMarkDown": "When not `Default`, prepends the line `$WarningPreference = 'VALUE'` at the top of your script.", + "groupName": "preferenceVariables" + }, + { + "name": "informationPreference", + "type": "pickList", + "label": "InformationPreference", + "required": false, + "defaultValue": "default", + "options": { + "default": "Default", + "stop": "Stop", + "continue": "Continue", + "silentlyContinue": "SilentlyContinue" + }, + "helpMarkDown": "When not `Default`, prepends the line `$InformationPreference = 'VALUE'` at the top of your script.", + "groupName": "preferenceVariables" + }, + { + "name": "verbosePreference", + "type": "pickList", + "label": "VerbosePreference", + "required": false, + "defaultValue": "default", + "options": { + "default": "Default", + "stop": "Stop", + "continue": "Continue", + "silentlyContinue": "SilentlyContinue" + }, + "helpMarkDown": "When not `Default`, prepends the line `$VerbosePreference = 'VALUE'` at the top of your script.", + "groupName": "preferenceVariables" + }, + { + "name": "debugPreference", + "type": "pickList", + "label": "DebugPreference", + "required": false, + "defaultValue": "default", + "options": { + "default": "Default", + "stop": "Stop", + "continue": "Continue", + "silentlyContinue": "SilentlyContinue" + }, + "helpMarkDown": "When not `Default`, prepends the line `$DebugPreference = 'VALUE'` at the top of your script.", + "groupName": "preferenceVariables" + }, + { + "name": "progressPreference", + "type": "pickList", + "label": "ProgressPreference", + "required": false, + "defaultValue": "silentlyContinue", + "options": { + "default": "Default", + "stop": "Stop", + "continue": "Continue", + "silentlyContinue": "SilentlyContinue" + }, + "helpMarkDown": "When not `Default`, prepends the line `$ProgressPreference = 'VALUE'` at the top of your script.", + "groupName": "preferenceVariables" + }, + { + "name": "failOnStderr", + "type": "boolean", + "label": "Fail on Standard Error", + "required": false, + "defaultValue": "false", + "helpMarkDown": "If this is true, this task will fail if any errors are written to the error pipeline, or if any data is written to the Standard Error stream. Otherwise the task will rely on the exit code to determine failure.", + "groupName": "advanced" + }, + { + "name": "showWarnings", + "type": "boolean", + "label": "Show warnings as Azure DevOps warnings", + "required": false, + "defaultValue": "false", + "helpMarkDown": "If this is true, and your script writes a warnings - they are shown as warnings also in pipeline logs", + "groupName": "advanced" + }, + { + "name": "ignoreLASTEXITCODE", + "type": "boolean", + "label": "Ignore $LASTEXITCODE", + "required": false, + "defaultValue": "false", + "helpMarkDown": "If this is false, the line `if ((Test-Path -LiteralPath variable:\\LASTEXITCODE)) { exit $LASTEXITCODE }` is appended to the end of your script. This will cause the last exit code from an external command to be propagated as the exit code of powershell. Otherwise the line is not appended to the end of your script.", + "groupName": "advanced" + }, + { + "name": "pwsh", + "type": "boolean", + "label": "Use PowerShell Core", + "required": false, + "defaultValue": "false", + "helpMarkDown": "If this is true, then on Windows the task will use pwsh.exe from your PATH instead of powershell.exe.", + "groupName": "advanced" + }, + { + "name": "workingDirectory", + "type": "filePath", + "label": "Working Directory", + "required": false, + "defaultValue": "", + "helpMarkDown": "Working directory where the script is run.", + "groupName": "advanced" + }, + { + "name": "runScriptInSeparateScope", + "type": "boolean", + "label": "Run script in the separate scope", + "required": false, + "defaultValue": "false", + "helpMarkDown": "This input allows executing PowerShell scripts using '&' operator instead of the default '.'. If this input set to the true script will be executed in separate scope and globally scoped PowerShell variables won't be updated", + "groupName": "advanced" + } + ], + "instanceNameFormat": "PowerShell Script", + "execution": { + "PowerShell3": { + "target": "powershell.ps1", + "platforms": [ + "windows" + ] + }, + "Node10": { + "target": "powershell.js", + "argumentFormat": "" + }, + "Node16": { + "target": "powershell.js", + "argumentFormat": "" + } + }, + "messages": { + "GeneratingScript": "Generating script.", + "JS_ExitCode": "PowerShell exited with code '%s'.", + "JS_FormattedCommand": "Formatted command: %s", + "JS_InvalidActionPreference": "Invalid action preference for %s: '%s'. The value must be one of: %s", + "JS_InvalidFilePath": "Invalid file path '%s'. A path to a .ps1 file is required.", + "JS_Stderr": "PowerShell wrote one or more lines to the standard error stream.", + "JS_InvalidTargetType": "Invalid target type '%s'. The value must be one of: 'filepath' or 'inline'", + "PS_ExitCode": "PowerShell exited with code '{0}'.", + "PS_FormattedCommand": "Formatted command: {0}", + "PS_InvalidActionPreference": "Invalid action preference for {0}: '{1}'. The value must be one of: {2}", + "PS_InvalidFilePath": "Invalid file path '{0}'. A path to a .ps1 file is required.", + "PS_UnableToDetermineExitCode": "Unexpected exception. Unable to determine the exit code from powershell.", + "PS_InvalidTargetType": "Invalid target type '{0}'. The value must be one of: 'filepath' or 'inline'", + "ScriptArgsSanitized": "Detected characters in arguments that may not be executed correctly by the shell. Please escape special characters using backtick (`). More information is available here: https://aka.ms/ado/75787" + }, + "_buildConfigMapping": { + "Default": "2.229.4", + "Node20-225": "2.229.5" + } +} \ No newline at end of file diff --git a/_generated/PowerShellV2/task.loc.json b/_generated/PowerShellV2/task.loc.json new file mode 100644 index 000000000000..28fa5dd8f0bc --- /dev/null +++ b/_generated/PowerShellV2/task.loc.json @@ -0,0 +1,265 @@ +{ + "id": "E213FF0F-5D5C-4791-802D-52EA3E7BE1F1", + "name": "PowerShell", + "friendlyName": "ms-resource:loc.friendlyName", + "description": "ms-resource:loc.description", + "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/powershell", + "helpMarkDown": "ms-resource:loc.helpMarkDown", + "category": "Utility", + "visibility": [ + "Build", + "Release" + ], + "runsOn": [ + "Agent", + "DeploymentGroup" + ], + "author": "Microsoft Corporation", + "version": { + "Major": 2, + "Minor": 229, + "Patch": 4 + }, + "releaseNotes": "ms-resource:loc.releaseNotes", + "minimumAgentVersion": "2.115.0", + "showEnvironmentVariables": true, + "groups": [ + { + "name": "preferenceVariables", + "displayName": "ms-resource:loc.group.displayName.preferenceVariables", + "isExpanded": false + }, + { + "name": "advanced", + "displayName": "ms-resource:loc.group.displayName.advanced", + "isExpanded": false + } + ], + "inputs": [ + { + "name": "targetType", + "type": "radio", + "label": "ms-resource:loc.input.label.targetType", + "required": false, + "defaultValue": "filePath", + "helpMarkDown": "ms-resource:loc.input.help.targetType", + "options": { + "filePath": "File Path", + "inline": "Inline" + } + }, + { + "name": "filePath", + "type": "filePath", + "label": "ms-resource:loc.input.label.filePath", + "visibleRule": "targetType = filePath", + "required": true, + "defaultValue": "", + "helpMarkDown": "ms-resource:loc.input.help.filePath" + }, + { + "name": "arguments", + "type": "string", + "label": "ms-resource:loc.input.label.arguments", + "visibleRule": "targetType = filePath", + "required": false, + "defaultValue": "", + "helpMarkDown": "ms-resource:loc.input.help.arguments" + }, + { + "name": "script", + "type": "multiLine", + "label": "ms-resource:loc.input.label.script", + "visibleRule": "targetType = inline", + "required": true, + "defaultValue": "# Write your PowerShell commands here.\n\nWrite-Host \"Hello World\"\n", + "properties": { + "resizable": "true", + "rows": "10", + "maxLength": "20000" + }, + "helpMarkDown": "" + }, + { + "name": "errorActionPreference", + "type": "pickList", + "label": "ms-resource:loc.input.label.errorActionPreference", + "required": false, + "defaultValue": "stop", + "options": { + "default": "Default", + "stop": "Stop", + "continue": "Continue", + "silentlyContinue": "SilentlyContinue" + }, + "helpMarkDown": "ms-resource:loc.input.help.errorActionPreference", + "groupName": "preferenceVariables" + }, + { + "name": "warningPreference", + "type": "pickList", + "label": "ms-resource:loc.input.label.warningPreference", + "required": false, + "defaultValue": "default", + "options": { + "default": "Default", + "stop": "Stop", + "continue": "Continue", + "silentlyContinue": "SilentlyContinue" + }, + "helpMarkDown": "ms-resource:loc.input.help.warningPreference", + "groupName": "preferenceVariables" + }, + { + "name": "informationPreference", + "type": "pickList", + "label": "ms-resource:loc.input.label.informationPreference", + "required": false, + "defaultValue": "default", + "options": { + "default": "Default", + "stop": "Stop", + "continue": "Continue", + "silentlyContinue": "SilentlyContinue" + }, + "helpMarkDown": "ms-resource:loc.input.help.informationPreference", + "groupName": "preferenceVariables" + }, + { + "name": "verbosePreference", + "type": "pickList", + "label": "ms-resource:loc.input.label.verbosePreference", + "required": false, + "defaultValue": "default", + "options": { + "default": "Default", + "stop": "Stop", + "continue": "Continue", + "silentlyContinue": "SilentlyContinue" + }, + "helpMarkDown": "ms-resource:loc.input.help.verbosePreference", + "groupName": "preferenceVariables" + }, + { + "name": "debugPreference", + "type": "pickList", + "label": "ms-resource:loc.input.label.debugPreference", + "required": false, + "defaultValue": "default", + "options": { + "default": "Default", + "stop": "Stop", + "continue": "Continue", + "silentlyContinue": "SilentlyContinue" + }, + "helpMarkDown": "ms-resource:loc.input.help.debugPreference", + "groupName": "preferenceVariables" + }, + { + "name": "progressPreference", + "type": "pickList", + "label": "ms-resource:loc.input.label.progressPreference", + "required": false, + "defaultValue": "silentlyContinue", + "options": { + "default": "Default", + "stop": "Stop", + "continue": "Continue", + "silentlyContinue": "SilentlyContinue" + }, + "helpMarkDown": "ms-resource:loc.input.help.progressPreference", + "groupName": "preferenceVariables" + }, + { + "name": "failOnStderr", + "type": "boolean", + "label": "ms-resource:loc.input.label.failOnStderr", + "required": false, + "defaultValue": "false", + "helpMarkDown": "ms-resource:loc.input.help.failOnStderr", + "groupName": "advanced" + }, + { + "name": "showWarnings", + "type": "boolean", + "label": "ms-resource:loc.input.label.showWarnings", + "required": false, + "defaultValue": "false", + "helpMarkDown": "ms-resource:loc.input.help.showWarnings", + "groupName": "advanced" + }, + { + "name": "ignoreLASTEXITCODE", + "type": "boolean", + "label": "ms-resource:loc.input.label.ignoreLASTEXITCODE", + "required": false, + "defaultValue": "false", + "helpMarkDown": "ms-resource:loc.input.help.ignoreLASTEXITCODE", + "groupName": "advanced" + }, + { + "name": "pwsh", + "type": "boolean", + "label": "ms-resource:loc.input.label.pwsh", + "required": false, + "defaultValue": "false", + "helpMarkDown": "ms-resource:loc.input.help.pwsh", + "groupName": "advanced" + }, + { + "name": "workingDirectory", + "type": "filePath", + "label": "ms-resource:loc.input.label.workingDirectory", + "required": false, + "defaultValue": "", + "helpMarkDown": "ms-resource:loc.input.help.workingDirectory", + "groupName": "advanced" + }, + { + "name": "runScriptInSeparateScope", + "type": "boolean", + "label": "ms-resource:loc.input.label.runScriptInSeparateScope", + "required": false, + "defaultValue": "false", + "helpMarkDown": "ms-resource:loc.input.help.runScriptInSeparateScope", + "groupName": "advanced" + } + ], + "instanceNameFormat": "ms-resource:loc.instanceNameFormat", + "execution": { + "PowerShell3": { + "target": "powershell.ps1", + "platforms": [ + "windows" + ] + }, + "Node10": { + "target": "powershell.js", + "argumentFormat": "" + }, + "Node16": { + "target": "powershell.js", + "argumentFormat": "" + } + }, + "messages": { + "GeneratingScript": "ms-resource:loc.messages.GeneratingScript", + "JS_ExitCode": "ms-resource:loc.messages.JS_ExitCode", + "JS_FormattedCommand": "ms-resource:loc.messages.JS_FormattedCommand", + "JS_InvalidActionPreference": "ms-resource:loc.messages.JS_InvalidActionPreference", + "JS_InvalidFilePath": "ms-resource:loc.messages.JS_InvalidFilePath", + "JS_Stderr": "ms-resource:loc.messages.JS_Stderr", + "JS_InvalidTargetType": "ms-resource:loc.messages.JS_InvalidTargetType", + "PS_ExitCode": "ms-resource:loc.messages.PS_ExitCode", + "PS_FormattedCommand": "ms-resource:loc.messages.PS_FormattedCommand", + "PS_InvalidActionPreference": "ms-resource:loc.messages.PS_InvalidActionPreference", + "PS_InvalidFilePath": "ms-resource:loc.messages.PS_InvalidFilePath", + "PS_UnableToDetermineExitCode": "ms-resource:loc.messages.PS_UnableToDetermineExitCode", + "PS_InvalidTargetType": "ms-resource:loc.messages.PS_InvalidTargetType", + "ScriptArgsSanitized": "ms-resource:loc.messages.ScriptArgsSanitized" + }, + "_buildConfigMapping": { + "Default": "2.229.4", + "Node20-225": "2.229.5" + } +} \ No newline at end of file diff --git a/_generated/PowerShellV2/tsconfig.json b/_generated/PowerShellV2/tsconfig.json new file mode 100644 index 000000000000..0438b79f69ac --- /dev/null +++ b/_generated/PowerShellV2/tsconfig.json @@ -0,0 +1,6 @@ +{ + "compilerOptions": { + "target": "ES6", + "module": "commonjs" + } +} \ No newline at end of file diff --git a/_generated/PowerShellV2_Node20/.npmrc b/_generated/PowerShellV2_Node20/.npmrc new file mode 100644 index 000000000000..5fca0d518be7 --- /dev/null +++ b/_generated/PowerShellV2_Node20/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true diff --git a/_generated/PowerShellV2_Node20/Strings/resources.resjson/de-DE/resources.resjson b/_generated/PowerShellV2_Node20/Strings/resources.resjson/de-DE/resources.resjson new file mode 100644 index 000000000000..4317e629d754 --- /dev/null +++ b/_generated/PowerShellV2_Node20/Strings/resources.resjson/de-DE/resources.resjson @@ -0,0 +1,54 @@ +{ + "loc.friendlyName": "PowerShell", + "loc.helpMarkDown": "[Weitere Informationen zu dieser Aufgabe](https://go.microsoft.com/fwlink/?LinkID=613736)", + "loc.description": "Hiermit wird ein PowerShell-Skript für Linux, macOS oder Windows ausgeführt.", + "loc.instanceNameFormat": "PowerShell-Skript", + "loc.releaseNotes": "Skriptaufgabenkonsistenz. Unterstützung für macOS und Linux wurde hinzugefügt.", + "loc.group.displayName.preferenceVariables": "Einstellungsvariablen", + "loc.group.displayName.advanced": "Erweitert", + "loc.input.label.targetType": "Typ", + "loc.input.help.targetType": "Zielskripttyp: Dateipfad oder Inline", + "loc.input.label.filePath": "Skriptpfad", + "loc.input.help.filePath": "Der Pfad des auszuführenden Skripts. Es muss sich um einen vollqualifizierten Pfad oder einen Pfad relativ zu \"$(System.DefaultWorkingDirectory)\" handeln.", + "loc.input.label.arguments": "Argumente", + "loc.input.help.arguments": "An das PowerShell-Skript übergebene Argumente. Entweder Ordnungszahlparameter oder benannte Parameter.", + "loc.input.label.script": "Skript", + "loc.input.label.errorActionPreference": "ErrorActionPreference", + "loc.input.help.errorActionPreference": "Wenn nicht „Default“ wird die Zeile `$ErrorActionPreference = 'VALUE'` am Anfang des Skripts vorangestellt.", + "loc.input.label.warningPreference": "WarningPreference", + "loc.input.help.warningPreference": "Wenn nicht „Default“ wird die Zeile `$WarningPreference = 'VALUE'` am Anfang des Skripts vorangestellt..", + "loc.input.label.informationPreference": "InformationPreference", + "loc.input.help.informationPreference": "Wenn nicht „Default“ wird die Zeile `$InformationPreference = 'VALUE'` am Anfang des Skripts vorangestellt.", + "loc.input.label.verbosePreference": "VerbosePreference", + "loc.input.help.verbosePreference": "Wenn nicht „Default“ wird die Zeile `$VerbosePreference = 'VALUE'` am Anfang des Skripts vorangestellt..", + "loc.input.label.debugPreference": "DebugPreference", + "loc.input.help.debugPreference": "Wenn nicht „Default“ wird die Zeile `$DebugPreference = 'VALUE'` am Anfang des Skripts vorangestellt.", + "loc.input.label.progressPreference": "ProgressPreference", + "loc.input.help.progressPreference": "Wenn nicht \"Default\" wird die Zeile \"$ProgressPreference = 'VALUE'\" am Anfang des Skripts vorangestellt..", + "loc.input.label.failOnStderr": "Fehler aufgrund von Standardfehler.", + "loc.input.help.failOnStderr": "Wenn dieser Wert TRUE ist, tritt ein Aufgabenfehler auf, wenn Fehler in die Fehlerpipeline oder Daten in den Standard-Fehlerdatenstrom geschrieben werden. Andernfalls verwendet die Aufgabe ausschließlich den Exitcode zum Ermitteln von Fehlern.", + "loc.input.label.showWarnings": "Warnungen als Azure DevOps-Warnungen anzeigen", + "loc.input.help.showWarnings": "Wenn diese Option auf TRUE festgelegt ist und Ihr Skript Warnungen schreibt, werden diese auch in Pipelineprotokollen als Warnungen angezeigt.", + "loc.input.label.ignoreLASTEXITCODE": "$LASTEXITCODE ignorieren", + "loc.input.help.ignoreLASTEXITCODE": "Wenn dieser Wert FALSE ist, wird am Ende Ihres Skripts die Zeile \"if ((Test-Path -LiteralPath variable:\\LASTEXITCODE)) { exit $LASTEXITCODE }\" angehängt. Dadurch wird der letzte Exitcode aus einem externen Befehl als Exitcode der PowerShell weitergegeben. Andernfalls wird die Zeile nicht an das Ende Ihres Skripts angehängt.", + "loc.input.label.pwsh": "PowerShell Core verwenden", + "loc.input.help.pwsh": "Sofern TRUE, verwendet die Aufgabe unter Windows anstelle von \"powershell.exe\" die in PATH festgelegte \"pwsh.exe\".", + "loc.input.label.workingDirectory": "Arbeitsverzeichnis", + "loc.input.help.workingDirectory": "Arbeitsverzeichnis zum Ausführen des Skripts.", + "loc.input.label.runScriptInSeparateScope": "Skript im separaten Bereich ausführen", + "loc.input.help.runScriptInSeparateScope": "Diese Eingabe ermöglicht das Ausführen von PowerShell-Skripts mithilfe des Operators \"&\", statt mit dem Standard \".\". Wenn dieser Eingabesatz auf das true-Skript festgelegt wird, wird er in einem separaten Bereich ausgeführt, und PowerShell-Variablen mit globalem Bereich werden nicht aktualisiert.", + "loc.messages.GeneratingScript": "Skript wird erstellt.", + "loc.messages.JS_ExitCode": "PowerShell wurde beendet mit dem Code \"%s\".", + "loc.messages.JS_FormattedCommand": "Formatierter Befehl: %s", + "loc.messages.JS_InvalidActionPreference": "Ungültige Aktionseinstellung für %s: „%s“. Der Wert muss einer der folgenden Werte sein: %s", + "loc.messages.JS_InvalidFilePath": "Ungültiger Dateipfad \"%s\". Ein Pfad zu einer PS1-Datei ist erforderlich.", + "loc.messages.JS_Stderr": "PowerShell hat mindestens eine Zeile in den Standardfehlerstream geschrieben.", + "loc.messages.JS_InvalidTargetType": "Ungültiger Zieltyp \"%s\". Der Wert muss einem der Werte \"filepath\" oder \"inline\" entsprechen", + "loc.messages.PS_ExitCode": "PowerShell wurde beendet mit dem Code \"{0}\".", + "loc.messages.PS_FormattedCommand": "Formatierter Befehl: {0}", + "loc.messages.PS_InvalidActionPreference": "Ungültige Aktionseinstellung für {0}: „{1}“. Der Wert muss einer der folgenden Werte sein: {2}", + "loc.messages.PS_InvalidFilePath": "Ungültiger Dateipfad \"{0}\". Ein Pfad zu einer PS1-Datei ist erforderlich.", + "loc.messages.PS_UnableToDetermineExitCode": "Unerwartete Ausnahme. Der Exitcode von PowerShell konnte nicht bestimmt werden.", + "loc.messages.PS_InvalidTargetType": "Ungültiger Zieltyp \"{0}\". Der Wert muss einem der Werte \"filepath\" oder \"inline\" entsprechen", + "loc.messages.ScriptArgsSanitized": "Erkannte Zeichen in Argumenten, die von der Shell möglicherweise nicht ordnungsgemäß ausgeführt werden. Verwenden Sie einen Backtick (`), um Sonderzeichen mit Escapezeichen zu versehen. Weitere Informationen finden Sie hier: https://aka.ms/ado/75787" +} \ No newline at end of file diff --git a/_generated/PowerShellV2_Node20/Strings/resources.resjson/en-US/resources.resjson b/_generated/PowerShellV2_Node20/Strings/resources.resjson/en-US/resources.resjson new file mode 100644 index 000000000000..f4b03fe1b455 --- /dev/null +++ b/_generated/PowerShellV2_Node20/Strings/resources.resjson/en-US/resources.resjson @@ -0,0 +1,54 @@ +{ + "loc.friendlyName": "PowerShell", + "loc.helpMarkDown": "[Learn more about this task](https://go.microsoft.com/fwlink/?LinkID=613736)", + "loc.description": "Run a PowerShell script on Linux, macOS, or Windows", + "loc.instanceNameFormat": "PowerShell Script", + "loc.releaseNotes": "Script task consistency. Added support for macOS and Linux.", + "loc.group.displayName.preferenceVariables": "Preference Variables", + "loc.group.displayName.advanced": "Advanced", + "loc.input.label.targetType": "Type", + "loc.input.help.targetType": "Target script type: File Path or Inline", + "loc.input.label.filePath": "Script Path", + "loc.input.help.filePath": "Path of the script to execute. Must be a fully qualified path or relative to $(System.DefaultWorkingDirectory).", + "loc.input.label.arguments": "Arguments", + "loc.input.help.arguments": "Arguments passed to the PowerShell script. Either ordinal parameters or named parameters.", + "loc.input.label.script": "Script", + "loc.input.label.errorActionPreference": "ErrorActionPreference", + "loc.input.help.errorActionPreference": "When not `Default`, prepends the line `$ErrorActionPreference = 'VALUE'` at the top of your script.", + "loc.input.label.warningPreference": "WarningPreference", + "loc.input.help.warningPreference": "When not `Default`, prepends the line `$WarningPreference = 'VALUE'` at the top of your script.", + "loc.input.label.informationPreference": "InformationPreference", + "loc.input.help.informationPreference": "When not `Default`, prepends the line `$InformationPreference = 'VALUE'` at the top of your script.", + "loc.input.label.verbosePreference": "VerbosePreference", + "loc.input.help.verbosePreference": "When not `Default`, prepends the line `$VerbosePreference = 'VALUE'` at the top of your script.", + "loc.input.label.debugPreference": "DebugPreference", + "loc.input.help.debugPreference": "When not `Default`, prepends the line `$DebugPreference = 'VALUE'` at the top of your script.", + "loc.input.label.progressPreference": "ProgressPreference", + "loc.input.help.progressPreference": "When not `Default`, prepends the line `$ProgressPreference = 'VALUE'` at the top of your script.", + "loc.input.label.failOnStderr": "Fail on Standard Error", + "loc.input.help.failOnStderr": "If this is true, this task will fail if any errors are written to the error pipeline, or if any data is written to the Standard Error stream. Otherwise the task will rely on the exit code to determine failure.", + "loc.input.label.showWarnings": "Show warnings as Azure DevOps warnings", + "loc.input.help.showWarnings": "If this is true, and your script writes a warnings - they are shown as warnings also in pipeline logs", + "loc.input.label.ignoreLASTEXITCODE": "Ignore $LASTEXITCODE", + "loc.input.help.ignoreLASTEXITCODE": "If this is false, the line `if ((Test-Path -LiteralPath variable:\\LASTEXITCODE)) { exit $LASTEXITCODE }` is appended to the end of your script. This will cause the last exit code from an external command to be propagated as the exit code of powershell. Otherwise the line is not appended to the end of your script.", + "loc.input.label.pwsh": "Use PowerShell Core", + "loc.input.help.pwsh": "If this is true, then on Windows the task will use pwsh.exe from your PATH instead of powershell.exe.", + "loc.input.label.workingDirectory": "Working Directory", + "loc.input.help.workingDirectory": "Working directory where the script is run.", + "loc.input.label.runScriptInSeparateScope": "Run script in the separate scope", + "loc.input.help.runScriptInSeparateScope": "This input allows executing PowerShell scripts using '&' operator instead of the default '.'. If this input set to the true script will be executed in separate scope and globally scoped PowerShell variables won't be updated", + "loc.messages.GeneratingScript": "Generating script.", + "loc.messages.JS_ExitCode": "PowerShell exited with code '%s'.", + "loc.messages.JS_FormattedCommand": "Formatted command: %s", + "loc.messages.JS_InvalidActionPreference": "Invalid action preference for %s: '%s'. The value must be one of: %s", + "loc.messages.JS_InvalidFilePath": "Invalid file path '%s'. A path to a .ps1 file is required.", + "loc.messages.JS_Stderr": "PowerShell wrote one or more lines to the standard error stream.", + "loc.messages.JS_InvalidTargetType": "Invalid target type '%s'. The value must be one of: 'filepath' or 'inline'", + "loc.messages.PS_ExitCode": "PowerShell exited with code '{0}'.", + "loc.messages.PS_FormattedCommand": "Formatted command: {0}", + "loc.messages.PS_InvalidActionPreference": "Invalid action preference for {0}: '{1}'. The value must be one of: {2}", + "loc.messages.PS_InvalidFilePath": "Invalid file path '{0}'. A path to a .ps1 file is required.", + "loc.messages.PS_UnableToDetermineExitCode": "Unexpected exception. Unable to determine the exit code from powershell.", + "loc.messages.PS_InvalidTargetType": "Invalid target type '{0}'. The value must be one of: 'filepath' or 'inline'", + "loc.messages.ScriptArgsSanitized": "Detected characters in arguments that may not be executed correctly by the shell. Please escape special characters using backtick (`). More information is available here: https://aka.ms/ado/75787" +} \ No newline at end of file diff --git a/_generated/PowerShellV2_Node20/Strings/resources.resjson/es-ES/resources.resjson b/_generated/PowerShellV2_Node20/Strings/resources.resjson/es-ES/resources.resjson new file mode 100644 index 000000000000..02b1fd0260da --- /dev/null +++ b/_generated/PowerShellV2_Node20/Strings/resources.resjson/es-ES/resources.resjson @@ -0,0 +1,54 @@ +{ + "loc.friendlyName": "PowerShell", + "loc.helpMarkDown": "[Obtener más información acerca de esta tarea](https://go.microsoft.com/fwlink/?LinkID=613736)", + "loc.description": "Ejecuta un script de PowerShell en Linux, macOS o Windows.", + "loc.instanceNameFormat": "Script de PowerShell", + "loc.releaseNotes": "Coherencia de la tarea Script. Se ha agregado compatibilidad con macOS y Linux.", + "loc.group.displayName.preferenceVariables": "Variables de preferencia", + "loc.group.displayName.advanced": "Avanzado", + "loc.input.label.targetType": "Tipo", + "loc.input.help.targetType": "Tipo de script de destino: ruta de acceso de archivo o insertado", + "loc.input.label.filePath": "Ruta de acceso del script", + "loc.input.help.filePath": "Ruta de acceso del script que se va a ejecutar. Debe ser una ruta de acceso completa o relativa a $(System.DefaultWorkingDirectory).", + "loc.input.label.arguments": "Argumentos", + "loc.input.help.arguments": "Argumentos pasados al script de PowerShell. Pueden ser parámetros ordinales o parámetros con nombre.", + "loc.input.label.script": "Script", + "loc.input.label.errorActionPreference": "ErrorActionPreference", + "loc.input.help.errorActionPreference": "Cuando no es \"Valor predeterminado\", antepone la línea \"$ErrorActionPreference = 'VALOR'\" al principio del script.", + "loc.input.label.warningPreference": "WarningPreference", + "loc.input.help.warningPreference": "Cuando no es \"Valor predeterminado\", antepone la línea \"$WarningPreference = 'VALOR'\" al principio del script.", + "loc.input.label.informationPreference": "InformationPreference", + "loc.input.help.informationPreference": "Cuando no es \"Valor predeterminado\", antepone la línea \"$InformationPreference = 'VALOR'\" al principio del script.", + "loc.input.label.verbosePreference": "VerbosePreference", + "loc.input.help.verbosePreference": "Cuando no es \"Valor predeterminado\", antepone la línea \"$VerbosePreference = 'VALOR'\" al principio del script.", + "loc.input.label.debugPreference": "DebugPreference", + "loc.input.help.debugPreference": "Cuando no es \"Valor predeterminado\", antepone la línea \"$DebugPreference = 'VALOR'\" al principio del script.", + "loc.input.label.progressPreference": "ProgressPreference", + "loc.input.help.progressPreference": "Cuando no es \"Valor predeterminado\", antepone la línea \"$ProgressPreference = 'VALOR'\" al principio del script.", + "loc.input.label.failOnStderr": "Error si se produce un error estándar", + "loc.input.help.failOnStderr": "Si es true, se producirá un error en la tarea si se escriben errores en la canalización de errores o si se escriben datos en la secuencia de error estándar. De lo contrario, la tarea se basará en el código de salida para determinar el error.", + "loc.input.label.showWarnings": "Mostrar advertencias como advertencias de Azure DevOps", + "loc.input.help.showWarnings": "Si es true y el script escribe advertencias, se muestran también como advertencias en los registros de canalización.", + "loc.input.label.ignoreLASTEXITCODE": "Omitir $LASTEXITCODE", + "loc.input.help.ignoreLASTEXITCODE": "Si es false, se anexa la línea \"if ((Test-Path -LiteralPath variable:\\LASTEXITCODE)) { exit $LASTEXITCODE }\" al final del script. Esto hará que se propague el último código de salida de un comando externo como código de salida de PowerShell. De lo contrario, no se anexa la línea al final del script.", + "loc.input.label.pwsh": "Usar PowerShell Core", + "loc.input.help.pwsh": "Si es true, la tarea usará pwsh.exe desde PATH en lugar de powershell.exe en Windows.", + "loc.input.label.workingDirectory": "Directorio de trabajo", + "loc.input.help.workingDirectory": "Directorio de trabajo donde se ejecuta el script.", + "loc.input.label.runScriptInSeparateScope": "Ejecutar el script en el ámbito independiente", + "loc.input.help.runScriptInSeparateScope": "Esta entrada permite ejecutar scripts de PowerShell utilizando el operador '&' en lugar del predeterminado '.'. Si esta entrada se establece como verdadera, el script se ejecutará en un ámbito separado y las variables PowerShell de ámbito global no se actualizarán", + "loc.messages.GeneratingScript": "Generando script.", + "loc.messages.JS_ExitCode": "PowerShell se cerró con el código \"%s\".", + "loc.messages.JS_FormattedCommand": "Comando con formato: %s", + "loc.messages.JS_InvalidActionPreference": "Preferencia de acción no válida para %s: \"%s\". El valor debe ser uno de los siguientes: %s", + "loc.messages.JS_InvalidFilePath": "La ruta de acceso de archivo \"%s\" no es válida. Se necesita una ruta de acceso a un archivo .ps1.", + "loc.messages.JS_Stderr": "PowerShell escribió una o varias líneas en la secuencia de error estándar.", + "loc.messages.JS_InvalidTargetType": "Tipo de destino «%s» no válido. El valor debe ser uno de los siguientes: «FilePath» o «inline»", + "loc.messages.PS_ExitCode": "PowerShell se cerró con el código \"{0}\".", + "loc.messages.PS_FormattedCommand": "Comando con formato: {0}", + "loc.messages.PS_InvalidActionPreference": "Preferencia de acción no válida para {0}: \"{1}\". El valor debe ser uno de los siguientes: {2}", + "loc.messages.PS_InvalidFilePath": "La ruta de acceso de archivo \"{0}\" no es válida. Se necesita una ruta de acceso a un archivo .ps1.", + "loc.messages.PS_UnableToDetermineExitCode": "Excepción inesperada. No se puede determinar el código de salida de PowerShell.", + "loc.messages.PS_InvalidTargetType": "Tipo de destino «{0}» no válido. El valor debe ser uno de los siguientes: «FilePath» o «inline»", + "loc.messages.ScriptArgsSanitized": "Se detectaron caracteres en argumentos que el shell no puede ejecutar correctamente. Escape de los caracteres especiales mediante el acento grave ('). Puede encontrar más información aquí: https://aka.ms/ado/75787" +} \ No newline at end of file diff --git a/_generated/PowerShellV2_Node20/Strings/resources.resjson/fr-FR/resources.resjson b/_generated/PowerShellV2_Node20/Strings/resources.resjson/fr-FR/resources.resjson new file mode 100644 index 000000000000..9b3f6ab74d46 --- /dev/null +++ b/_generated/PowerShellV2_Node20/Strings/resources.resjson/fr-FR/resources.resjson @@ -0,0 +1,54 @@ +{ + "loc.friendlyName": "PowerShell", + "loc.helpMarkDown": "[En savoir plus sur cette tâche](https://go.microsoft.com/fwlink/?LinkID=613736)", + "loc.description": "Exécuter un script PowerShell sur Linux, macOS ou Windows", + "loc.instanceNameFormat": "Script PowerShell", + "loc.releaseNotes": "Cohérence de la tâche de script. Ajout de la prise en charge de macOS et de Linux.", + "loc.group.displayName.preferenceVariables": "Variables de préférence", + "loc.group.displayName.advanced": "Avancé", + "loc.input.label.targetType": "Type", + "loc.input.help.targetType": "Type de script cible : chemin de fichier ou inline", + "loc.input.label.filePath": "Chemin du script", + "loc.input.help.filePath": "Chemin du script à exécuter. Il doit s'agir d'un chemin complet ou d'un chemin relatif à $(System.DefaultWorkingDirectory).", + "loc.input.label.arguments": "Arguments", + "loc.input.help.arguments": "Arguments passés au script PowerShell. Il s'agit de paramètres ordinaux ou nommés.", + "loc.input.label.script": "Script", + "loc.input.label.errorActionPreference": "ErrorActionPreference", + "loc.input.help.errorActionPreference": "Si ce n’est pas le cas, ajoute la ligne « $ErrorActionPreference = 'VALUE'» en haut de votre script.", + "loc.input.label.warningPreference": "WarningPreference", + "loc.input.help.warningPreference": "Si ce n’est pas le cas, ajoute la ligne « $WarningPreference = 'VALUE'» en haut de votre script.", + "loc.input.label.informationPreference": "InformationPreference", + "loc.input.help.informationPreference": "Si ce n’est pas le cas, ajoute la ligne « $InformationPreference = 'VALUE» en haut de votre script.", + "loc.input.label.verbosePreference": "VerbosePreference", + "loc.input.help.verbosePreference": "Si ce n’est pas le cas, ajoute la ligne « $VerbosePreference = 'VALUE'» en haut de votre script.", + "loc.input.label.debugPreference": "DebugPreference", + "loc.input.help.debugPreference": "Si ce n’est pas le cas, ajoute la ligne « $DebugPreference = 'VALUE» en haut de votre script.", + "loc.input.label.progressPreference": "ProgressPreference", + "loc.input.help.progressPreference": "Lorsqu’il n’est pas « Default », ajoute la ligne « $ProgressPreference = « VALUE » en haut de votre script.", + "loc.input.label.failOnStderr": "Échec sur une erreur standard", + "loc.input.help.failOnStderr": "Si la valeur est true, et si des erreurs sont écrites dans le pipeline d'erreurs ou si des données sont écrites dans le flux d'erreurs standard, cette tâche se solde par un échec. Sinon, la tâche se base sur le code de sortie pour déterminer la cause de l'échec.", + "loc.input.label.showWarnings": "Afficher les avertissements en tant qu'avertissements Azure DevOps", + "loc.input.help.showWarnings": "Si cette condition est vérifiée, et si votre script écrit des avertissements, ces derniers sont également affichés en tant qu'avertissements dans les journaux de pipeline", + "loc.input.label.ignoreLASTEXITCODE": "Ignorer $LASTEXITCODE", + "loc.input.help.ignoreLASTEXITCODE": "Si cette valeur est false, la ligne 'if ((Test-Path -LiteralPath variable:\\LASTEXITCODE)) { exit $LASTEXITCODE }' est ajoutée à la fin de votre script. Cela entraîne la propagation du dernier code de sortie d'une commande externe en tant que code de sortie de PowerShell. Sinon, la ligne n'est pas ajoutée à la fin de votre script.", + "loc.input.label.pwsh": "Utilisez PowerShell Core", + "loc.input.help.pwsh": "Si la valeur est true, dans Windows, la tâche utilise pwsh.exe à partir de votre variable PATH au lieu de powershell.exe.", + "loc.input.label.workingDirectory": "Répertoire de travail", + "loc.input.help.workingDirectory": "Répertoire de travail où le script est exécuté.", + "loc.input.label.runScriptInSeparateScope": "Exécuter un script dans l’étendue distincte", + "loc.input.help.runScriptInSeparateScope": "Cette entrée permet d’exécuter des scripts PowerShell à l’aide de l’opérateur « & » au lieu du script « ». Si cette entrée définie sur le script réel est exécutée dans une étendue distincte et que les variables PowerShell à l’étendue globale ne sont pas mises à jour", + "loc.messages.GeneratingScript": "Génération du script.", + "loc.messages.JS_ExitCode": "Arrêt de PowerShell. Code de sortie : '%s'.", + "loc.messages.JS_FormattedCommand": "Commande mise en forme : %s", + "loc.messages.JS_InvalidActionPreference": "Préférence d’action non valide pour %s : «%s». La valeur doit être l’une des suivantes : %s", + "loc.messages.JS_InvalidFilePath": "Chemin de fichier non valide : '%s'. Le chemin d'un fichier .ps1 est obligatoire.", + "loc.messages.JS_Stderr": "PowerShell a écrit une ou plusieurs lignes dans le flux d'erreurs standard.", + "loc.messages.JS_InvalidTargetType": "Type de cible « %s » non valide. La valeur doit être l’une des suivantes : 'FilePath’ou’inline'", + "loc.messages.PS_ExitCode": "Arrêt de PowerShell. Code de sortie : '{0}'.", + "loc.messages.PS_FormattedCommand": "Commande mise en forme : {0}", + "loc.messages.PS_InvalidActionPreference": "Préférence d’action non valide pour {0}: «{1}». La valeur doit être l’une des suivantes : {2}", + "loc.messages.PS_InvalidFilePath": "Chemin de fichier '{0}' non valide. Le chemin d'un fichier .ps1 est obligatoire.", + "loc.messages.PS_UnableToDetermineExitCode": "Exception inattendue. Impossible de déterminer le code de sortie de PowerShell.", + "loc.messages.PS_InvalidTargetType": "Type de cible « {0} » non valide. La valeur doit être l’une des suivantes : 'FilePath’ou’inline'", + "loc.messages.ScriptArgsSanitized": "Caractères détectés dans les arguments qui peuvent ne pas être exécutés correctement par le shell. Veuillez échapper les caractères spéciaux en utilisant le backtick (`). Plus d'informations sont disponibles ici: https://aka.ms/ado/75787" +} \ No newline at end of file diff --git a/_generated/PowerShellV2_Node20/Strings/resources.resjson/it-IT/resources.resjson b/_generated/PowerShellV2_Node20/Strings/resources.resjson/it-IT/resources.resjson new file mode 100644 index 000000000000..7bcecb2ea4d0 --- /dev/null +++ b/_generated/PowerShellV2_Node20/Strings/resources.resjson/it-IT/resources.resjson @@ -0,0 +1,54 @@ +{ + "loc.friendlyName": "PowerShell", + "loc.helpMarkDown": "[Altre informazioni su questa attività](https://go.microsoft.com/fwlink/?LinkID=613736)", + "loc.description": "Consente di eseguire uno script PowerShell in Linux, macOS o Windows", + "loc.instanceNameFormat": "Script PowerShell", + "loc.releaseNotes": "Coerenza delle attività per gli script. Aggiunta del supporto per macOS e Linux.", + "loc.group.displayName.preferenceVariables": "Variabili di preferenza", + "loc.group.displayName.advanced": "Avanzate", + "loc.input.label.targetType": "Tipo", + "loc.input.help.targetType": "Tipo di script di destinazione: percorso file o inline", + "loc.input.label.filePath": "Percorso script", + "loc.input.help.filePath": "Percorso dello script da eseguire. Deve essere un percorso completo o relativo rispetto a $(System.DefaultWorkingDirectory).", + "loc.input.label.arguments": "Argomenti", + "loc.input.help.arguments": "Argomenti passati allo script PowerShell. Parametri ordinali o denominati.", + "loc.input.label.script": "Script", + "loc.input.label.errorActionPreference": "ErrorActionPreference", + "loc.input.help.errorActionPreference": "Se non è `Default`, antepone la riga `$ErrorActionPreference = 'VALUE'` all'inizio dello script.", + "loc.input.label.warningPreference": "WarningPreference", + "loc.input.help.warningPreference": "Se non è `Default`, antepone la riga `$WarningPreference = 'VALUE'` all'inizio dello script.", + "loc.input.label.informationPreference": "InformationPreference", + "loc.input.help.informationPreference": "Se non è `Default`, antepone la riga `$InformationPreference = 'VALUE'` all'inizio dello script.", + "loc.input.label.verbosePreference": "VerbosePreference", + "loc.input.help.verbosePreference": "Se non è `Default`, antepone la riga `$VerbosePreference = 'VALUE'` all'inizio dello script.", + "loc.input.label.debugPreference": "DebugPreference", + "loc.input.help.debugPreference": "Se non è `Default`, antepone la riga `$DebugPreference = 'VALUE'` all'inizio dello script.", + "loc.input.label.progressPreference": "ProgressPreference", + "loc.input.help.progressPreference": "Se non è `Default`, antepone la riga '$ProgressPreference = 'VALUE'' all'inizio dello script.", + "loc.input.label.failOnStderr": "Interrompi in caso di errore standard", + "loc.input.help.failOnStderr": "Se il valore è true, questa attività non riuscirà nel caso in cui vengano scritti errori nella pipeline degli errori oppure se vengono scritti dati nel flusso Errore standard. In caso contrario, l'attività si baserà sul codice di uscita per determinare l'errore.", + "loc.input.label.showWarnings": "Mostra avvisi come avvisi di Azure DevOps", + "loc.input.help.showWarnings": "Se è true, gli avvisi scritti dallo script vengono visualizzati come tali anche nei log della pipeline", + "loc.input.label.ignoreLASTEXITCODE": "Ignora $LASTEXITCODE", + "loc.input.help.ignoreLASTEXITCODE": "Se è false, la riga 'if ((Test-Path -LiteralPath variable:\\LASTEXITCODE)) { exit $LASTEXITCODE }' viene aggiunta alla fine dello script. In questo modo l'ultimo codice di uscita da un comando esterno verrà propagato come codice di uscita di PowerShell. In caso contrario, la riga non viene aggiunta alla fine dello script.", + "loc.input.label.pwsh": "Usa PowerShell Core", + "loc.input.help.pwsh": "Se è impostata su true, in Windows l'attività userà pwsh.exe da PATH invece di powershell.exe.", + "loc.input.label.workingDirectory": "Directory di lavoro", + "loc.input.help.workingDirectory": "Directory di lavoro in cui viene eseguito lo script.", + "loc.input.label.runScriptInSeparateScope": "Esegui lo script in ambito separato", + "loc.input.help.runScriptInSeparateScope": "Questo input consente di eseguire gli script di PowerShell usando l'operatore '&' invece del valore predefinito '.'. Se l'input è impostato su true, lo script verrà eseguito in ambito separato e le variabili PowerShell con ambito globale non verranno aggiornate", + "loc.messages.GeneratingScript": "Generazione dello script.", + "loc.messages.JS_ExitCode": "PowerShell terminato con codice '%s'.", + "loc.messages.JS_FormattedCommand": "Comando formattato: %s", + "loc.messages.JS_InvalidActionPreference": "Preferenza di azione non valida per %s: '%s. Il valore deve essere uno dei seguenti: %s", + "loc.messages.JS_InvalidFilePath": "Il percorso file '%s' non è valido. È necessario un percorso di un file con estensione ps1.", + "loc.messages.JS_Stderr": "PowerShell ha scritto una o più righe nel flusso di errore standard.", + "loc.messages.JS_InvalidTargetType": "Il tipo di destinazione '%s' non è valido. Il valore deve essere uno dei seguenti: 'filepath' o 'inline'", + "loc.messages.PS_ExitCode": "PowerShell terminato con codice '{0}'.", + "loc.messages.PS_FormattedCommand": "Comando formattato: {0}", + "loc.messages.PS_InvalidActionPreference": "Preferenza di azione non valida per {0}: '{1}'. Il valore deve essere uno dei seguenti: {2}", + "loc.messages.PS_InvalidFilePath": "Il percorso file '{0}' non è valido. È necessario un percorso di un file con estensione ps1.", + "loc.messages.PS_UnableToDetermineExitCode": "Eccezione imprevista. Non è possibile determinare il codice di uscita da PowerShell.", + "loc.messages.PS_InvalidTargetType": "Il tipo di destinazione '{0}' non è valido. Il valore deve essere uno dei seguenti: 'filepath' o 'inline'", + "loc.messages.ScriptArgsSanitized": "Sono stati rilevati caratteri negli argomenti che potrebbero non essere eseguiti correttamente dalla shell. Eseguire l'escape dei caratteri speciali usando l’apice inverso (`). Ulteriori informazioni sono disponibili qui: https://aka.ms/ado/75787" +} \ No newline at end of file diff --git a/_generated/PowerShellV2_Node20/Strings/resources.resjson/ja-JP/resources.resjson b/_generated/PowerShellV2_Node20/Strings/resources.resjson/ja-JP/resources.resjson new file mode 100644 index 000000000000..20338419acb7 --- /dev/null +++ b/_generated/PowerShellV2_Node20/Strings/resources.resjson/ja-JP/resources.resjson @@ -0,0 +1,54 @@ +{ + "loc.friendlyName": "PowerShell", + "loc.helpMarkDown": "[このタスクの詳細を表示](https://go.microsoft.com/fwlink/?LinkID=613736)", + "loc.description": "Linux、macOS、Windows で PowerShell スクリプトを実行します", + "loc.instanceNameFormat": "PowerShell スクリプト", + "loc.releaseNotes": "スクリプト タスクの一貫性。macOS と Linux のサポートが追加されました。", + "loc.group.displayName.preferenceVariables": "参照変数", + "loc.group.displayName.advanced": "詳細設定", + "loc.input.label.targetType": "種類", + "loc.input.help.targetType": "ターゲット スクリプトの種類: ファイル パスまたはインライン", + "loc.input.label.filePath": "スクリプト パス", + "loc.input.help.filePath": "実行するスクリプトのパス。完全修飾パスか、または $(System.DefaultWorkingDirectory) からの相対パスを指定する必要があります。", + "loc.input.label.arguments": "引数", + "loc.input.help.arguments": "PowerShell スクリプトに渡す引数。順序によるパラメーターまたは名前指定されたパラメーターのいずれかです。", + "loc.input.label.script": "スクリプト", + "loc.input.label.errorActionPreference": "ErrorActionPreference", + "loc.input.help.errorActionPreference": "`Default` でない場合は、スクリプトの先頭に、`$ErrorActionPreference = 'VALUE'` という行を追加します。", + "loc.input.label.warningPreference": "WarningPreference", + "loc.input.help.warningPreference": "`Default` でない場合は、スクリプトの先頭に、`$WarningPreference = 'VALUE'` という行を追加します。", + "loc.input.label.informationPreference": "InformationPreference", + "loc.input.help.informationPreference": "`Default` でない場合は、スクリプトの先頭に、`$InformationPreference = 'VALUE'` という行を追加します。", + "loc.input.label.verbosePreference": "VerbosePreference", + "loc.input.help.verbosePreference": "`Default` でない場合は、スクリプトの先頭に、`$VerbosePreference = 'VALUE'` という行を追加します。", + "loc.input.label.debugPreference": "DebugPreference", + "loc.input.help.debugPreference": "`Default` でない場合は、スクリプトの先頭に、`$DebugPreference = 'VALUE'` という行を追加します。", + "loc.input.label.progressPreference": "ProgressPreference", + "loc.input.help.progressPreference": "`Default` でない場合は、スクリプトの先頭に、`$ProgressPreference = 'VALUE'` という行を追加します。", + "loc.input.label.failOnStderr": "標準エラーで失敗", + "loc.input.help.failOnStderr": "これが true の場合、エラーがエラー パイプラインに書き込まれるか、データが標準エラー ストリームに書き込まれると、このタスクは失敗します。それ以外の場合、タスクは終了コードに応じて失敗を判別します。", + "loc.input.label.showWarnings": "警告を Azure DevOps 警告として表示する", + "loc.input.help.showWarnings": "これが true であり、スクリプトが警告を書き込む場合は、パイプライン ログにも警告として表示されます", + "loc.input.label.ignoreLASTEXITCODE": "$LASTEXITCODE を無視する", + "loc.input.help.ignoreLASTEXITCODE": "これが false の場合、行 `if ((Test-Path -LiteralPath variable:\\LASTEXITCODE)) { exit $LASTEXITCODE }` がスクリプトの末尾に追加されます。この行があると、外部コマンドからの最後の終了コードが PowerShell の終了コードとして伝達されます。それ以外の場合、スクリプトの末尾にこの行が追加されることはありません。", + "loc.input.label.pwsh": "PowerShell Core を使用する", + "loc.input.help.pwsh": "これが true の場合、Windows 上のタスクは powershell.exe ではなく PATH からの pwsh.exe を使用します。", + "loc.input.label.workingDirectory": "作業ディレクトリ", + "loc.input.help.workingDirectory": "スクリプトが実行される作業ディレクトリ。", + "loc.input.label.runScriptInSeparateScope": "別のスコープでスクリプトを実行", + "loc.input.help.runScriptInSeparateScope": "この入力により、既定の '. ' の代わりに '&' 演算子を使用して PowerShell スクリプトを実行できます。この入力が true スクリプトに設定されている場合、別のスコープで実行され、グローバルスコープの PowerShell 変数は更新されません", + "loc.messages.GeneratingScript": "スクリプトを生成しています。", + "loc.messages.JS_ExitCode": "PowerShell がコード '%s' で終了しました。", + "loc.messages.JS_FormattedCommand": "フォーマット後のコマンド: %s", + "loc.messages.JS_InvalidActionPreference": "%s の無効なアクション設定: '%s'。値は次のいずれかである必要があります: %s", + "loc.messages.JS_InvalidFilePath": "ファイル パス '%s' が無効です。.ps1 ファイルへのパスが必要です。", + "loc.messages.JS_Stderr": "PowerShell が標準エラー ストリームに 1 行以上を書き込みました。", + "loc.messages.JS_InvalidTargetType": "無効なターゲット型 '%s' です。値は 'filepath' または 'inline' のどちらかである必要があります", + "loc.messages.PS_ExitCode": "PowerShell がコード '{0}' で終了しました。", + "loc.messages.PS_FormattedCommand": "フォーマット後のコマンド: {0}", + "loc.messages.PS_InvalidActionPreference": "{0} の無効なアクション設定: '{1}'。値は次のいずれかである必要があります: {2}", + "loc.messages.PS_InvalidFilePath": "ファイル パス '{0}' が無効です。.ps1 ファイルへのパスが必要です。", + "loc.messages.PS_UnableToDetermineExitCode": "予期しない例外が発生しました。PowerShell からの終了コードを判別できません。", + "loc.messages.PS_InvalidTargetType": "無効なターゲット型 '{0}' です。値は 'filepath' または 'inline' のどちらかである必要があります", + "loc.messages.ScriptArgsSanitized": "シェルによって正しく実行されない可能性のある引数の文字が検出されました。バックティック (`) を使用して特殊文字をエスケープしてください。詳細についてはこちら: https://aka.ms/ado/75787" +} \ No newline at end of file diff --git a/_generated/PowerShellV2_Node20/Strings/resources.resjson/ko-KR/resources.resjson b/_generated/PowerShellV2_Node20/Strings/resources.resjson/ko-KR/resources.resjson new file mode 100644 index 000000000000..d6b35207a665 --- /dev/null +++ b/_generated/PowerShellV2_Node20/Strings/resources.resjson/ko-KR/resources.resjson @@ -0,0 +1,54 @@ +{ + "loc.friendlyName": "PowerShell", + "loc.helpMarkDown": "[이 작업에 대한 자세한 정보](https://go.microsoft.com/fwlink/?LinkID=613736)", + "loc.description": "Linux, macOS 또는 Windows에서 PowerShell 스크립트를 실행합니다.", + "loc.instanceNameFormat": "PowerShell 스크립트", + "loc.releaseNotes": "스크립트 작업 일관성입니다. macOS 및 Linux에 대한 지원이 추가되었습니다.", + "loc.group.displayName.preferenceVariables": "기본 설정 변수", + "loc.group.displayName.advanced": "고급", + "loc.input.label.targetType": "유형", + "loc.input.help.targetType": "대상 스크립트 유형: 파일 경로 또는 인라인", + "loc.input.label.filePath": "스크립트 경로", + "loc.input.help.filePath": "실행할 스크립트의 경로입니다. 정규화된 경로이거나 $(System.DefaultWorkingDirectory)의 상대 경로여야 합니다.", + "loc.input.label.arguments": "인수", + "loc.input.help.arguments": "인수가 PowerShell 스크립트에 전달되었습니다. 서수 매개 변수나 명명된 매개 변수 중 하나입니다.", + "loc.input.label.script": "스크립트", + "loc.input.label.errorActionPreference": "ErrorActionPreference", + "loc.input.help.errorActionPreference": "`Default`가 아닌 경우 스크립트 맨 위에 `$ErrorActionPreference = 'VALUE'` 행을 추가합니다.", + "loc.input.label.warningPreference": "WarningPreference", + "loc.input.help.warningPreference": "`Default`가 아닌 경우 스크립트 맨 위에 `$WarningPreference = 'VALUE'` 행을 추가합니다.", + "loc.input.label.informationPreference": "InformationPreference", + "loc.input.help.informationPreference": "`Default`가 아닌 경우 스크립트 맨 위에 `$InformationPreference = 'VALUE'` 행을 추가합니다.", + "loc.input.label.verbosePreference": "VerbosePreference", + "loc.input.help.verbosePreference": "`Default`가 아닌 경우 스크립트 맨 위에 `$VerbosePreference = 'VALUE'` 행을 추가합니다.", + "loc.input.label.debugPreference": "DebugPreference", + "loc.input.help.debugPreference": "`Default`가 아닌 경우 스크립트 맨 위에 `$DebugPreference = 'VALUE'` 행을 추가합니다.", + "loc.input.label.progressPreference": "ProgressPreference", + "loc.input.help.progressPreference": "`Default`가 아닌 경우 스크립트 상단에 `$ProgressPreference = 'VALUE'` 행을 추가합니다.", + "loc.input.label.failOnStderr": "표준 오류 시 실패", + "loc.input.help.failOnStderr": "true이면 오류 파이프라인에 오류가 작성되거나 표준 오류 스트림에 데이터가 작성될 경우 이 작업이 실패하게 됩니다. false이면 작업이 종료 코드를 사용하여 실패를 결정합니다.", + "loc.input.label.showWarnings": "경고를 Azure DevOps 경고로 표시", + "loc.input.help.showWarnings": "true이면 스크립트가 경고를 씁니다. 파이프라인 로그에도 경고로 표시됩니다.", + "loc.input.label.ignoreLASTEXITCODE": "$LASTEXITCODE 무시", + "loc.input.help.ignoreLASTEXITCODE": "false이면 스크립트의 끝에 `if ((Test-Path -LiteralPath variable:\\LASTEXITCODE)) { exit $LASTEXITCODE }` 줄이 추가됩니다. 이 줄로 인해 외부 명령의 마지막 종료 코드가 PowerShell의 종료 코드로 전파됩니다. true이면 줄이 스크립트의 끝에 추가되지 않습니다.", + "loc.input.label.pwsh": "PowerShell Core 사용", + "loc.input.help.pwsh": "true이면, Windows에서 작업이 powershell.exe 대신 PATH의 pwsh.exe를 사용합니다.", + "loc.input.label.workingDirectory": "작업 디렉터리", + "loc.input.help.workingDirectory": "스크립트가 실행되는 작업 디렉터리입니다.", + "loc.input.label.runScriptInSeparateScope": "별도의 범위에서 스크립트 실행", + "loc.input.help.runScriptInSeparateScope": "이 입력은 기본 '.' 대신 '&' 연산자를 사용하여 PowerShell 스크립트를 실행할 수 있습니다. 이 입력이 true 스크립트로 설정된 경우 별도의 범위에서 실행되고 전역 범위의 PowerShell 변수가 업데이트되지 않습니다", + "loc.messages.GeneratingScript": "스크립트를 생성 중입니다.", + "loc.messages.JS_ExitCode": "PowerShell이 코드 '%s'(으)로 종료되었습니다.", + "loc.messages.JS_FormattedCommand": "형식이 지정된 명령: %s", + "loc.messages.JS_InvalidActionPreference": "%s에 대한 잘못된 작업 기본 설정: '%s'. 값은 다음 중 하나여야 합니다. %s", + "loc.messages.JS_InvalidFilePath": "잘못된 파일 경로 '%s'입니다. .ps1 파일의 경로가 필요합니다.", + "loc.messages.JS_Stderr": "PowerShell이 표준 오류 스트림에 하나 이상의 줄을 썼습니다.", + "loc.messages.JS_InvalidTargetType": "대상 유형 '%s'이(가) 잘못되었습니다. 값은 'filepath' 또는 'inline' 중 하나여야 합니다.", + "loc.messages.PS_ExitCode": "PowerShell이 코드 '{0}'(으)로 종료되었습니다.", + "loc.messages.PS_FormattedCommand": "형식이 지정된 명령: {0}", + "loc.messages.PS_InvalidActionPreference": "{0}에 대한 잘못된 작업 기본 설정: '{1}'. 값은 다음 중 하나여야 합니다. {2}", + "loc.messages.PS_InvalidFilePath": "잘못된 파일 경로 '{0}'입니다. .ps1 파일의 경로가 필요합니다.", + "loc.messages.PS_UnableToDetermineExitCode": "예기치 않은 예외가 발생했습니다. PowerShell의 종료 코드를 확인할 수 없습니다.", + "loc.messages.PS_InvalidTargetType": "잘못된 대상 유형 '{0}'. 값은 'filepath' 또는 'inline' 중 하나여야 합니다.", + "loc.messages.ScriptArgsSanitized": "셸에서 올바르게 실행되지 않을 수 있는 인수에서 검색된 문자입니다. 백틱(`)을 사용하여 이스케이프 특수 문자를 만드세요. 자세한 내용은 https://aka.ms/ado/75787을 참조하세요." +} \ No newline at end of file diff --git a/_generated/PowerShellV2_Node20/Strings/resources.resjson/ru-RU/resources.resjson b/_generated/PowerShellV2_Node20/Strings/resources.resjson/ru-RU/resources.resjson new file mode 100644 index 000000000000..32b79b7e6ee7 --- /dev/null +++ b/_generated/PowerShellV2_Node20/Strings/resources.resjson/ru-RU/resources.resjson @@ -0,0 +1,54 @@ +{ + "loc.friendlyName": "PowerShell", + "loc.helpMarkDown": "[См. дополнительные сведения об этой задаче](https://go.microsoft.com/fwlink/?LinkID=613736)", + "loc.description": "Выполнение скрипта PowerShell в Linux, macOS или Windows", + "loc.instanceNameFormat": "Скрипт PowerShell", + "loc.releaseNotes": "Создавайте скрипты для обеспечения согласованности задач. Добавлена поддержка macOS и Linux.", + "loc.group.displayName.preferenceVariables": "Переменные настройки", + "loc.group.displayName.advanced": "Дополнительно", + "loc.input.label.targetType": "Тип", + "loc.input.help.targetType": "Тип целевого скрипта: путь к файлу или встроенный", + "loc.input.label.filePath": "Путь к скрипту", + "loc.input.help.filePath": "Путь к выполняемому скрипту. Это должен быть полный путь или путь относительно $(System.DefaultWorkingDirectory).", + "loc.input.label.arguments": "Аргументы", + "loc.input.help.arguments": "Аргументы, передаваемые в скрипт PowerShell. Параметры могут быть порядковыми или именованными.", + "loc.input.label.script": "Скрипт", + "loc.input.label.errorActionPreference": "ErrorActionPreference", + "loc.input.help.errorActionPreference": "Если значение отлично от \"Default\", добавляет строку \"$ErrorActionPreference = 'VALUE'\" в начало скрипта.", + "loc.input.label.warningPreference": "WarningPreference", + "loc.input.help.warningPreference": "Если значение отлично от \"Default\", добавляет строку \"$WarningPreference = 'VALUE'\" в начало скрипта.", + "loc.input.label.informationPreference": "InformationPreference", + "loc.input.help.informationPreference": "Если значение отлично от \"Default\", добавляет строку \"$InformationPreference = 'VALUE'\" в начало скрипта.", + "loc.input.label.verbosePreference": "VerbosePreference", + "loc.input.help.verbosePreference": "Если значение отлично от \"Default\", добавляет строку \"$VerbosePreference = 'VALUE'\" в начало скрипта.", + "loc.input.label.debugPreference": "DebugPreference", + "loc.input.help.debugPreference": "Если значение отлично от \"Default\", добавляет строку \"$DebugPreference = 'VALUE'\" в начало скрипта.", + "loc.input.label.progressPreference": "ProgressPreference", + "loc.input.help.progressPreference": "Если значение отлично от \"Default\", добавляет строку \"$ProgressPreference = 'VALUE'\" в начало скрипта.", + "loc.input.label.failOnStderr": "Сбой со стандартной ошибкой", + "loc.input.help.failOnStderr": "Если задано значение True, задача будет завершаться сбоем при записи каких-либо ошибок в конвейер ошибок или записи каких-либо данных в стандартный поток ошибок. В противном случае для определения сбоя задача будет использовать код выхода.", + "loc.input.label.showWarnings": "Отображать предупреждения как предупреждения Azure DevOps", + "loc.input.help.showWarnings": "Если задано значение true и скрипт записывает предупреждения, они также отображаются в виде предупреждений в журналах конвейеров.", + "loc.input.label.ignoreLASTEXITCODE": "Игнорировать $LASTEXITCODE", + "loc.input.help.ignoreLASTEXITCODE": "Если задано значение False, в конец скрипта добавляется строка \"if ((Test-Path -LiteralPath variable:\\LASTEXITCODE)) { exit $LASTEXITCODE }\". Это приведет к тому, что последний код выхода из внешней команды будет использоваться как код выхода PowerShell. В противном случае эта строка не добавляется в конец скрипта.", + "loc.input.label.pwsh": "Использовать PowerShell Core", + "loc.input.help.pwsh": "Если задано значение True, в Windows задача будет использовать программу pwsh.exe, указанную в переменной PATH, вместо powershell.exe.", + "loc.input.label.workingDirectory": "Рабочий каталог", + "loc.input.help.workingDirectory": "Рабочий каталог, в котором выполняется скрипт.", + "loc.input.label.runScriptInSeparateScope": "Запустить скрипт в отдельной области", + "loc.input.help.runScriptInSeparateScope": "Эти входные данные позволяют выполнять скрипты PowerShell с помощью оператора \"&\" вместо \".\" по умолчанию. Если для этих входных данных задано значение true, скрипт будет выполняться в отдельной области, а переменные PowerShell в глобальной области не будут обновлены", + "loc.messages.GeneratingScript": "Формируется скрипт.", + "loc.messages.JS_ExitCode": "Завершение работы PowerShell с кодом \"%s\".", + "loc.messages.JS_FormattedCommand": "Отформатирована команда: %s", + "loc.messages.JS_InvalidActionPreference": "Недопустимая настройка действия для %s: \"%s\". Должно применяться одно из следующих значений: %s", + "loc.messages.JS_InvalidFilePath": "Недопустимый путь к файлу \"%s\". Требуется путь к файлу PS1.", + "loc.messages.JS_Stderr": "Оболочка PowerShell записала одну или несколько строк в стандартный поток ошибок.", + "loc.messages.JS_InvalidTargetType": "Недопустимый тип целевого объекта \"%s\". Должно использоваться одно из следующих значений: filepath или inline", + "loc.messages.PS_ExitCode": "Завершение работы PowerShell с кодом \"{0}\".", + "loc.messages.PS_FormattedCommand": "Отформатирована команда: {0}", + "loc.messages.PS_InvalidActionPreference": "Недопустимая настройка действия для {0}: \"{1}\". Должно применяться одно из следующих значений: {2}", + "loc.messages.PS_InvalidFilePath": "Недопустимый путь к файлу \"{0}\". Требуется путь к файлу PS1.", + "loc.messages.PS_UnableToDetermineExitCode": "Непредвиденное исключение. Не удается определить код выхода из PowerShell.", + "loc.messages.PS_InvalidTargetType": "Недопустимый тип целевого объекта \"{0}\". Должно использоваться одно из следующих значений: filepath или inline", + "loc.messages.ScriptArgsSanitized": "Обнаружены символы в аргументах, которые могут быть неправильно интерпретированы оболочкой. Экранируйте специальные символы с помощью обратного апострофа (`). Дополнительные сведения см. на следующей странице: https://aka.ms/ado/75787" +} \ No newline at end of file diff --git a/_generated/PowerShellV2_Node20/Strings/resources.resjson/zh-CN/resources.resjson b/_generated/PowerShellV2_Node20/Strings/resources.resjson/zh-CN/resources.resjson new file mode 100644 index 000000000000..b33d34fb7c0b --- /dev/null +++ b/_generated/PowerShellV2_Node20/Strings/resources.resjson/zh-CN/resources.resjson @@ -0,0 +1,54 @@ +{ + "loc.friendlyName": "PowerShell", + "loc.helpMarkDown": "[详细了解此任务](https://go.microsoft.com/fwlink/?LinkID=613736)", + "loc.description": "在 Linux、macOS 或 Windows 上运行 PowerShell 脚本", + "loc.instanceNameFormat": "PowerShell 脚本", + "loc.releaseNotes": "脚本任务一致性。添加了对 macOS 和 Linux 的支持。", + "loc.group.displayName.preferenceVariables": "首选项变量", + "loc.group.displayName.advanced": "高级", + "loc.input.label.targetType": "类型", + "loc.input.help.targetType": "目标脚本类型: 文件路径或内联", + "loc.input.label.filePath": "脚本路径", + "loc.input.help.filePath": "要执行的脚本的路径。必须为完全限定的路径或相对于 $(System.DefaultWorkingDirectory)。", + "loc.input.label.arguments": "参数", + "loc.input.help.arguments": "传递给 PowerShell 脚本的参数。是序号参数或命名参数。", + "loc.input.label.script": "脚本", + "loc.input.label.errorActionPreference": "ErrorActionPreference", + "loc.input.help.errorActionPreference": "如果不是“默认值”,则追加在脚本顶部的行 `$ErrorActionPreference = 'VALUE'` 前面。", + "loc.input.label.warningPreference": "WarningPreference", + "loc.input.help.warningPreference": "如果不是“默认值”,则追加在脚本顶部的行 `$WarningPreference = 'VALUE'` 前面。", + "loc.input.label.informationPreference": "InformationPreference", + "loc.input.help.informationPreference": "如果不是“默认值”,则追加在脚本顶部的行 `$InformationPreference = 'VALUE'` 前面。", + "loc.input.label.verbosePreference": "VerbosePreference", + "loc.input.help.verbosePreference": "如果不是“默认值”,则追加在脚本顶部的行 `$VerbosePreference = 'VALUE'` 前面。", + "loc.input.label.debugPreference": "DebugPreference", + "loc.input.help.debugPreference": "如果不是“默认值”,则追加在脚本顶部的行 `$DebugPreference = 'VALUE'` 前面。", + "loc.input.label.progressPreference": "ProgressPreference", + "loc.input.help.progressPreference": "如果不是 `默认`,则在脚本顶部前面追加行 `$ProgressPreference = 'VALUE'`。", + "loc.input.label.failOnStderr": "因标准错误而失败", + "loc.input.help.failOnStderr": "如果为 true,那么将任何错误写入错误管道或将任何数据写入标准错误流时,此任务会失败。否则,此任务将仅依靠退出代码来确定故障。", + "loc.input.label.showWarnings": "以 Azure DevOps 警告的形式显示警告", + "loc.input.help.showWarnings": "如果为 true,并且脚本写入警告,则它们在管道日志中也显示为警告", + "loc.input.label.ignoreLASTEXITCODE": "忽略 $LASTEXITCODE", + "loc.input.help.ignoreLASTEXITCODE": "如果为 false,行 \"if ((Test-Path -LiteralPath variable:\\LASTEXITCODE)) { exit $LASTEXITCODE }\" 将追加到脚本的末尾。这将导致外部命令中的最后一个退出代码传播为 powershell 的退出代码。否则,行将不会追加到脚本的末尾。", + "loc.input.label.pwsh": "使用 PowerShell Core", + "loc.input.help.pwsh": "如果为 true,则在 Windows 上,任务将使用来自 PATH 的 pwsh.exe,而不是 powershell.exe。", + "loc.input.label.workingDirectory": "工作目录", + "loc.input.help.workingDirectory": "在其中运行脚本的工作目录。", + "loc.input.label.runScriptInSeparateScope": "在单独范围内运行脚本", + "loc.input.help.runScriptInSeparateScope": "此输入允许使用 “&” 运算符而不是默认的 “.” 执行 PowerShell 脚本。如果此输入设置为 true,脚本将在单独的范围内执行,并且将不更新作用于全局的 PowerShell 变量", + "loc.messages.GeneratingScript": "正在生成脚本。", + "loc.messages.JS_ExitCode": "PowerShell 已退出,代码为“%s”。", + "loc.messages.JS_FormattedCommand": "已设置格式的命令: %s", + "loc.messages.JS_InvalidActionPreference": "%s 的操作首选项无效:“%s”。该值必须是以下值之一: %s", + "loc.messages.JS_InvalidFilePath": "无效的文件路径“%s”。需要 .ps1 文件的路径。", + "loc.messages.JS_Stderr": "PowerShell 向标准错误流写入一个或多个行。", + "loc.messages.JS_InvalidTargetType": "目标类型“%s”无效。该值必须是以下值之一: “filepath” 或 “inline”", + "loc.messages.PS_ExitCode": "PowerShell 已退出,代码为“{0}”。", + "loc.messages.PS_FormattedCommand": "已设置格式的命令: {0}", + "loc.messages.PS_InvalidActionPreference": "{0} 的操纵首选项无效:“{1}”。值必须为以下值之一: {2}", + "loc.messages.PS_InvalidFilePath": "无效的文件路径“{0}”。需要 .ps1 文件的路径。", + "loc.messages.PS_UnableToDetermineExitCode": "出现意外异常。无法确定 powershell 的退出代码。", + "loc.messages.PS_InvalidTargetType": "目标类型“{0}”无效。该值必须是以下值之一: “filepath” 或 “inline”", + "loc.messages.ScriptArgsSanitized": "在参数中检测到可能无法由 shell 正确执行的字符。请使用反引号斜杠 (`) 转义特殊字符。有关详细信息,请访问此处: https://aka.ms/ado/75787" +} \ No newline at end of file diff --git a/_generated/PowerShellV2_Node20/Strings/resources.resjson/zh-TW/resources.resjson b/_generated/PowerShellV2_Node20/Strings/resources.resjson/zh-TW/resources.resjson new file mode 100644 index 000000000000..adbafd70daeb --- /dev/null +++ b/_generated/PowerShellV2_Node20/Strings/resources.resjson/zh-TW/resources.resjson @@ -0,0 +1,54 @@ +{ + "loc.friendlyName": "PowerShell", + "loc.helpMarkDown": "[深入了解此工作](https://go.microsoft.com/fwlink/?LinkID=613736)", + "loc.description": "在 Linux、macOS 或 Windows 執行 PowerShell 指令碼", + "loc.instanceNameFormat": "PowerShell 指令碼", + "loc.releaseNotes": "指令碼工作一致性。已新增 macOS 與 Linux 的支援。", + "loc.group.displayName.preferenceVariables": "喜好設定變數", + "loc.group.displayName.advanced": "進階", + "loc.input.label.targetType": "類型", + "loc.input.help.targetType": "目標指令碼類型: 檔案路徑或內嵌", + "loc.input.label.filePath": "指令碼路徑", + "loc.input.help.filePath": "要執行的指令碼之路徑。必須是完整路徑或相對於 $(System.DefaultWorkingDirectory) 的路徑。", + "loc.input.label.arguments": "引數", + "loc.input.help.arguments": "傳遞至 PowerShell 指令碼的引數。可以是序號參數或具名參數。", + "loc.input.label.script": "指令碼", + "loc.input.label.errorActionPreference": "ErrorActionPreference", + "loc.input.help.errorActionPreference": "當不是 ‘Default’ 時,在指令碼頂端加上 `$ErrorActionPreference = ‘VALUE’` 行。", + "loc.input.label.warningPreference": "WarningPreference", + "loc.input.help.warningPreference": "當不是 ‘Default’ 時,在指令碼頂端加上 `$WarningPreference = 'VALUE'` 行。", + "loc.input.label.informationPreference": "InformationPreference", + "loc.input.help.informationPreference": "當不是 ‘Default’ 時,在指令碼頂端加上 `$InformationPreference = ‘VALUE’` 行。", + "loc.input.label.verbosePreference": "VerbosePreference", + "loc.input.help.verbosePreference": "當不是 ‘Default’ 時,在指令碼頂端加上 `$VerbosePreference = ‘VALUE’` 行。", + "loc.input.label.debugPreference": "DebugPreference", + "loc.input.help.debugPreference": "當不是 ‘Default’ 時,在指令碼頂端加上 `$DebugPreference = ‘VALUE’` 行。", + "loc.input.label.progressPreference": "ProgressPreference", + "loc.input.help.progressPreference": "當不是 `Default` 時,在指令碼頂端加上 `$ProgressPreference = 'VALUE'` 行。", + "loc.input.label.failOnStderr": "發生標準錯誤的失敗", + "loc.input.help.failOnStderr": "若此為 true,如果在錯誤管線中寫入任何錯誤,或對標準錯誤資料流寫入任何資料,此工作即會失敗。否則,工作將依據結束代碼來判斷失敗。", + "loc.input.label.showWarnings": "將警告顯示為 Azure DevOps 警告", + "loc.input.help.showWarnings": "若為 true,且您的指令碼寫入警告,則在管線記錄中也會顯示為警告", + "loc.input.label.ignoreLASTEXITCODE": "略過 $LASTEXITCODE", + "loc.input.help.ignoreLASTEXITCODE": "若此為 false,則會將 `if ((Test-Path -LiteralPath variable:\\LASTEXITCODE)) { exit $LASTEXITCODE }` 附加至您指令碼的結尾。如此會讓來自外部命令中的最後一個結束代碼,以 PowerShell 的結束代碼散佈。否則,不會將此行附加至您的指令碼結尾。", + "loc.input.label.pwsh": "使用 PowerShell Core", + "loc.input.help.pwsh": "若此為 true,那麼在 Windows 上,工作就會使用 PATH 中的 pwsh.exe 而非 powershell.exe。", + "loc.input.label.workingDirectory": "工作目錄", + "loc.input.help.workingDirectory": "指令碼執行所在的工作目錄。", + "loc.input.label.runScriptInSeparateScope": "在不同的範圍中執行指令碼", + "loc.input.help.runScriptInSeparateScope": "此輸入允許使用 '&' 運算子而不是預設的 '.' 來執行 PowerShell 指令碼。若此輸入設定為 true,指令碼將會在不同的範圍內執行,而且全域範圍的 PowerShell 變數將不會更新", + "loc.messages.GeneratingScript": "正在產生指令碼。", + "loc.messages.JS_ExitCode": "PowerShell 已結束,代碼為 '%s'。", + "loc.messages.JS_FormattedCommand": "經過格式化的命令: %s", + "loc.messages.JS_InvalidActionPreference": "%s 的動作喜好設定無效: ‘%s’。值必須是以下其中之一: %s", + "loc.messages.JS_InvalidFilePath": "檔案路徑 '%s' 無效。需要到達 .ps1 檔案的路徑。", + "loc.messages.JS_Stderr": "PowerShell 已將一或多行寫入標準錯誤資料流。", + "loc.messages.JS_InvalidTargetType": "無效的目標型別 '%s'。值必須是下列其中一個: 'filepath' 或 'inline'", + "loc.messages.PS_ExitCode": "PowerShell 已結束,代碼為 '{0}'。", + "loc.messages.PS_FormattedCommand": "經過格式化的命令: {0}", + "loc.messages.PS_InvalidActionPreference": "{0} 的動作喜好設定無效: ‘{1}’。值必須是以下其中之一: {2}", + "loc.messages.PS_InvalidFilePath": "檔案路徑 '{0}' 無效。需要到達 .ps1 檔案的路徑。", + "loc.messages.PS_UnableToDetermineExitCode": "未預期的例外狀況。無法從 PowerShell 判斷結束代碼。", + "loc.messages.PS_InvalidTargetType": "無效的目標型別 '{0}'。值必須是下列其中一個: 'filepath' 或 'inline'", + "loc.messages.ScriptArgsSanitized": "偵測到引數中可能無法由殼層正確執行的字元。請使用反單引號 (') 逸出特殊字元。如需詳細資訊,請參閱: https://aka.ms/ado/75787" +} \ No newline at end of file diff --git a/_generated/PowerShellV2_Node20/Tests/L0.ts b/_generated/PowerShellV2_Node20/Tests/L0.ts new file mode 100644 index 000000000000..9577e4e7516a --- /dev/null +++ b/_generated/PowerShellV2_Node20/Tests/L0.ts @@ -0,0 +1,107 @@ +import assert = require('assert'); +import os = require('os'); +import path = require('path'); +import * as ttm from 'azure-pipelines-task-lib/mock-test'; +import { testEnvExpansion } from './L0EnvExpansion'; +import { testPowerShellImpl } from './powershellImpl/L0'; +import { runValidateFileArgsTests } from './L0ValidateFileArgs'; + +describe('PowerShell Suite', function () { + this.timeout(60000); + + function runValidations(validator: () => void, tr, done: Mocha.Done) { + try { + validator(); + done(); + } + catch (error) { + console.log("STDERR", tr.stderr); + console.log("STDOUT", tr.stdout); + done(error); + } + } + + it('Runs an inline script correctly', (done: Mocha.Done) => { + this.timeout(5000); + + let tp: string = path.join(__dirname, 'L0Inline.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + runValidations(() => { + assert(tr.succeeded, 'PowerShell should have succeeded.'); + assert(tr.stderr.length === 0, 'PowerShell should not have written to stderr'); + assert(tr.stdout.indexOf(`Writing \ufeff$ErrorActionPreference = 'Stop'${os.EOL}$ProgressPreference = 'SilentlyContinue'${os.EOL}Write-Host "my script output" to temp/path/fileName.ps1`) > 0, 'PowerShell should have written the script to a file'); + assert(tr.stdout.indexOf('my script output') > 0, 'PowerShell should have correctly run the script'); + }, tr, done); + }); + + it('Runs a checked in script correctly', (done: Mocha.Done) => { + this.timeout(5000); + + let tp: string = path.join(__dirname, 'L0External.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + runValidations(() => { + assert(tr.succeeded, 'PowerShell should have succeeded.'); + assert(tr.stderr.length === 0, 'PowerShell should not have written to stderr'); + assert(tr.stdout.indexOf(`Writing \ufeff$ErrorActionPreference = 'Stop'${os.EOL}$ProgressPreference = 'SilentlyContinue'${os.EOL}. 'path/to/script.ps1' to temp/path/fileName.ps1`) > 0, 'PowerShell should have written the script to a file'); + assert(tr.stdout.indexOf('my script output') > 0, 'PowerShell should have correctly run the script'); + }, tr, done); + }); + + it('Adds arguments to the script', (done: Mocha.Done) => { + this.timeout(5000); + + let tp: string = path.join(__dirname, 'L0Args.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + runValidations(() => { + assert(tr.succeeded, 'PowerShell should have succeeded.'); + assert(tr.stderr.length === 0, 'PowerShell should not have written to stderr'); + assert(tr.stdout.indexOf(`Writing \ufeff$ErrorActionPreference = 'Stop'${os.EOL}$ProgressPreference = 'SilentlyContinue'${os.EOL}. 'path/to/script.ps1' myCustomArg to temp/path/fileName.ps1`) > 0, 'PowerShell should have written the script to a file'); + assert(tr.stdout.indexOf('my script output') > 0, 'PowerShell should have correctly run the script'); + }, tr, done); + }); + + it('Reports stderr correctly', (done: Mocha.Done) => { + this.timeout(5000); + + let tp: string = path.join(__dirname, 'L0StdErr.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + runValidations(() => { + assert(tr.failed, 'Powershell should have failed'); + assert(tr.stdout.indexOf('##vso[task.issue type=error;]myErrorTest') > 0, 'Powershell should have correctly written myErrorTest'); + assert(tr.stdout.length > 1000, 'Powershell stderr output is not truncated'); + }, tr, done); + }); + + it('Runs scripts with & operator', (done: Mocha.Done) => { + this.timeout(5000); + + let tp: string = path.join(__dirname, 'L0RunScriptInSeparateScope.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + runValidations(() => { + assert(tr.succeeded, 'PowerShell should have succeeded.'); + assert(tr.stderr.length === 0, 'PowerShell should not have written to stderr'); + assert(tr.stdout.indexOf(`Writing \ufeff$ErrorActionPreference = 'Stop'${os.EOL}$ProgressPreference = 'SilentlyContinue'${os.EOL}. 'path/to/script.ps1' to temp/path/fileName.ps1`) > 0, 'PowerShell should have written the script to a file'); + assert(tr.stdout.indexOf('my script output') > 0, 'PowerShell should have correctly run the script'); + }, tr, done); + }); + + describe('Environment variable expansion', testEnvExpansion); + describe('Validate file arguments', runValidateFileArgsTests) + + describe('PowerShell implementation tests', testPowerShellImpl); +}); diff --git a/_generated/PowerShellV2_Node20/Tests/L0Args.ts b/_generated/PowerShellV2_Node20/Tests/L0Args.ts new file mode 100644 index 000000000000..d280edebc5fa --- /dev/null +++ b/_generated/PowerShellV2_Node20/Tests/L0Args.ts @@ -0,0 +1,79 @@ +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, '..', 'powershell.js'); +let tmr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tmr.setInput('targetType', 'filepath'); +tmr.setInput('filePath', 'path/to/script.ps1'); +tmr.setInput('workingDirectory', '/fakecwd'); +tmr.setInput('ignoreLASTEXITCODE', 'true'); +tmr.setInput('arguments', 'myCustomArg'); + +//Create assertAgent and getVariable mocks, support not added in this version of task-lib +const tl = require('azure-pipelines-task-lib/mock-task'); +const tlClone = Object.assign({}, tl); +tlClone.getVariable = function(variable: string) { + if (variable.toLowerCase() == 'agent.tempdirectory') { + return 'temp/path'; + } + return null; +}; +tlClone.assertAgent = function(variable: string) { + return; +}; +tmr.registerMock('azure-pipelines-task-lib/mock-task', tlClone); + +// Mock task-lib +let a: ma.TaskLibAnswers = { + 'checkPath' : { + '/fakecwd' : true, + 'path/to/powershell': true, + 'temp/path': true + }, + 'which': { + 'powershell': 'path/to/powershell' + }, + 'assertAgent': { + '2.115.0': true + }, + 'exec': { + 'path/to/powershell --noprofile --norc -c pwd': { + "code": 0, + "stdout": "temp/path" + }, + "path/to/powershell -NoLogo -NoProfile -NonInteractive -Command . 'temp\\path\\fileName.ps1'": { + "code": 0, + "stdout": "my script output" + }, + "path/to/powershell -NoLogo -NoProfile -NonInteractive -Command . 'temp/path/fileName.ps1'": { + "code": 0, + "stdout": "my script output" + } + }, + 'stats': { + 'path/to/script.ps1': { + isFile() { + return true; + } + } + } +}; +tmr.setAnswers(a); + +// Mock fs +const fs = require('fs'); +const fsClone = Object.assign({}, fs); +fsClone.writeFileSync = function(filePath, contents, options) { + // Normalize to linux paths for logs we check + console.log(`Writing ${contents} to ${filePath.replace(/\\/g, '/')}`); +} +tmr.registerMock('fs', fsClone); + +// Mock uuidv4 +tmr.registerMock('uuid/v4', function () { + return 'fileName'; +}); + +tmr.run(); \ No newline at end of file diff --git a/_generated/PowerShellV2_Node20/Tests/L0EnvExpansion.ts b/_generated/PowerShellV2_Node20/Tests/L0EnvExpansion.ts new file mode 100644 index 000000000000..851da0126aca --- /dev/null +++ b/_generated/PowerShellV2_Node20/Tests/L0EnvExpansion.ts @@ -0,0 +1,117 @@ +import assert = require('assert'); +import { expandPowerShellEnvVariables } from '../helpers'; + +export const testEnvExpansion = () => { + const testSuites: [string, string, string[], string][] = [ + [ + "Handles empty line", + "", [], "" + ], + [ + "Expanding known env variables", + "$env:VAR1 2", ["VAR1=1"], "1 2" + ], + [ + 'Expanding env variables with brace syntax', + '${env:VAR1} 2', ['VAR1=1'], '1 2' + ], + [ + 'Expanding multiple env variables', + '1 $env:VAR1 $env:VAR2', ['VAR1=val1', 'VAR2=val2'], '1 val1 val2' + ], + [ + 'Expanding multiple env variables 2', + '$env:VAR1 $env:VAR2', ['VAR1=1', 'VAR2=2'], '1 2' + ], + [ + 'Expanding multiple close env variables', + '$env:VAR1 $env:VAR2$env:VAR3', ['VAR1=1', 'VAR2=2', 'VAR3=3'], '1 23' + ], + [ + 'Expanding multiple close env variables 2', + '$env:VAR1 ${env:VAR2}_$env:VAR3', ['VAR1=1', 'VAR2=2', 'VAR3=3'], '1 2_3' + ], + [ + 'Expanding multiple close env variables 3', + '${env:VAR1}$env:VAR2', ['VAR1=1', 'VAR2=2',], '12' + ], + [ + 'Expanding multiple close env variables 3', + '$env:VAR1$env:VAR2$env:VAR3', ['VAR1=1', 'VAR2=2', 'VAR3=3'], '123' + ], + [ + 'Not expanding nested env variables', + '$env:VAR1 $env:VAR2', ['VAR1=$env:NESTED', 'VAR2=2', 'NESTED=nested'], '$env:NESTED 2' + ], + [ + 'Not expanding if backtick before env var', + '`$env:VAR1', ['VAR1=val1'], '$env:VAR1' + ], + [ + 'Not expanding if backtick at start of env var', + '$`env:VAR1', ['VAR1=val1'], '$`env:VAR1' + ], + [ + 'Not expanding if backtick inside env var', + '$env:VA`R1', ['VAR1=val1'], '$env:VA`R1' + ], + [ + 'If variable inside single quotes, it should be ignored', + '$env:VAR1 \'$env:VAR2\'', ['VAR1=val1', 'VAR2=val2'], 'val1 \'$env:VAR2\'' + ], + [ + 'If variable inside single quotes, it should be ignored 2', + '$env:VAR1 \' _ $env:VAR2 _ \'', ['VAR1=val1', 'VAR2=val2'], 'val1 \' _ $env:VAR2 _ \'' + ], + [ + 'If variable inside single quotes, it should be ignored 3', + '$env:VAR1 \' _ $env:VAR2 _ \'\'$env:VAR3\'', ['VAR1=val1', 'VAR2=val2', 'VAR3=val3'], 'val1 \' _ $env:VAR2 _ \'\'$env:VAR3\'' + ], + [ + 'If variable inside double quotes, it should be expanded', + '$env:VAR1 "$env:VAR2"', ['VAR1=val1', 'VAR2=val2'], 'val1 "val2"' + ], + [ + 'If quotes closed, variable should be expanded', + '\'\'$env:VAR1', ['VAR1=val1'], '\'\'val1' + ], + [ + 'If quotes closed, variable should be expanded 2', + '\'\'$env:VAR1\'\'', ['VAR1=val1'], '\'\'val1\'\'' + ], + [ + 'If variable is does not exists, it should not be expanded', + '$env:VAR1 2', ['VAR1='], '$env:VAR1 2' + ], + [ + 'If variable syntax is incorrect, it should leave it as is', + '$venv:VAR1 ${_env:VAR2}', ['VAR1=val1', 'VAR2=val2'], '$venv:VAR1 ${_env:VAR2}' + ], + [ + 'If closing brace is not present, it should leave it as is', + '$env:VAR1 ${env:VAR2', ['VAR1=val1', 'VAR2=val2'], 'val1 ${env:VAR2', + ], + [ + 'If closing brace is not present, it should leave it as is 2', + '${env:VAR1 ${env:VAR2}', ['VAR1=val1', 'VAR2=val2'], '${env:VAR1 ${env:VAR2}', + ] + ] + + for (const [testName, input, variables, expected] of testSuites) { + it(testName, () => { + for (const variable of variables) { + const [name, value] = variable.split('='); + if (value) { + process.env[name] = value; + } + else { + delete process.env[name]; + } + } + + const [actual] = expandPowerShellEnvVariables(input); + + assert.deepStrictEqual(actual, expected); + }); + } +} diff --git a/_generated/PowerShellV2_Node20/Tests/L0External.ts b/_generated/PowerShellV2_Node20/Tests/L0External.ts new file mode 100644 index 000000000000..e43d55e3b07d --- /dev/null +++ b/_generated/PowerShellV2_Node20/Tests/L0External.ts @@ -0,0 +1,78 @@ +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, '..', 'powershell.js'); +let tmr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tmr.setInput('targetType', 'filepath'); +tmr.setInput('filePath', 'path/to/script.ps1'); +tmr.setInput('workingDirectory', '/fakecwd'); +tmr.setInput('ignoreLASTEXITCODE', 'true'); + +//Create assertAgent and getVariable mocks, support not added in this version of task-lib +const tl = require('azure-pipelines-task-lib/mock-task'); +const tlClone = Object.assign({}, tl); +tlClone.getVariable = function(variable: string) { + if (variable.toLowerCase() == 'agent.tempdirectory') { + return 'temp/path'; + } + return null; +}; +tlClone.assertAgent = function(variable: string) { + return; +}; +tmr.registerMock('azure-pipelines-task-lib/mock-task', tlClone); + +// Mock task-lib +let a: ma.TaskLibAnswers = { + 'checkPath' : { + '/fakecwd' : true, + 'path/to/powershell': true, + 'temp/path': true + }, + 'which': { + 'powershell': 'path/to/powershell' + }, + 'assertAgent': { + '2.115.0': true + }, + 'exec': { + 'path/to/powershell --noprofile --norc -c pwd': { + "code": 0, + "stdout": "temp/path" + }, + "path/to/powershell -NoLogo -NoProfile -NonInteractive -Command . 'temp\\path\\fileName.ps1'": { + "code": 0, + "stdout": "my script output" + }, + "path/to/powershell -NoLogo -NoProfile -NonInteractive -Command . 'temp/path/fileName.ps1'": { + "code": 0, + "stdout": "my script output" + } + }, + 'stats': { + 'path/to/script.ps1': { + isFile() { + return true; + } + } + } +}; +tmr.setAnswers(a); + +// Mock fs +const fs = require('fs'); +const fsClone = Object.assign({}, fs); +fsClone.writeFileSync = function(filePath, contents, options) { + // Normalize to linux paths for logs we check + console.log(`Writing ${contents} to ${filePath.replace(/\\/g, '/')}`); +} +tmr.registerMock('fs', fsClone); + +// Mock uuidv4 +tmr.registerMock('uuid/v4', function () { + return 'fileName'; +}); + +tmr.run(); \ No newline at end of file diff --git a/_generated/PowerShellV2_Node20/Tests/L0Inline.ts b/_generated/PowerShellV2_Node20/Tests/L0Inline.ts new file mode 100644 index 000000000000..cfa8b48a8816 --- /dev/null +++ b/_generated/PowerShellV2_Node20/Tests/L0Inline.ts @@ -0,0 +1,78 @@ +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, '..', 'powershell.js'); +let tmr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tmr.setInput('targetType', 'inline'); +tmr.setInput('script', 'Write-Host "my script output"'); +tmr.setInput('workingDirectory', '/fakecwd'); +tmr.setInput('ignoreLASTEXITCODE', 'true'); + +//Create assertAgent and getVariable mocks, support not added in this version of task-lib +const tl = require('azure-pipelines-task-lib/mock-task'); +const tlClone = Object.assign({}, tl); +tlClone.getVariable = function(variable: string) { + if (variable.toLowerCase() == 'agent.tempdirectory') { + return 'temp/path'; + } + return null; +}; +tlClone.assertAgent = function(variable: string) { + return; +}; +tmr.registerMock('azure-pipelines-task-lib/mock-task', tlClone); + +// Mock task-lib +let a: ma.TaskLibAnswers = { + 'checkPath' : { + '/fakecwd' : true, + 'path/to/powershell': true, + 'temp/path': true + }, + 'which': { + 'powershell': 'path/to/powershell' + }, + 'assertAgent': { + '2.115.0': true + }, + 'exec': { + 'path/to/powershell --noprofile --norc -c pwd': { + "code": 0, + "stdout": "temp/path" + }, + "path/to/powershell -NoLogo -NoProfile -NonInteractive -Command . 'temp\\path\\fileName.ps1'": { + "code": 0, + "stdout": "my script output" + }, + "path/to/powershell -NoLogo -NoProfile -NonInteractive -Command . 'temp/path/fileName.ps1'": { + "code": 0, + "stdout": "my script output" + } + }, + 'stats': { + 'path/to/script.ps1': { + isFile() { + return true; + } + } + } +}; +tmr.setAnswers(a); + +// Mock fs +const fs = require('fs'); +const fsClone = Object.assign({}, fs); +fsClone.writeFileSync = function(filePath, contents, options) { + // Normalize to linux paths for logs we check + console.log(`Writing ${contents} to ${filePath.replace(/\\/g, '/')}`); +} +tmr.registerMock('fs', fsClone); + +// Mock uuidv4 +tmr.registerMock('uuid/v4', function () { + return 'fileName'; +}); + +tmr.run(); \ No newline at end of file diff --git a/_generated/PowerShellV2_Node20/Tests/L0RunScriptInSeparateScope.ts b/_generated/PowerShellV2_Node20/Tests/L0RunScriptInSeparateScope.ts new file mode 100644 index 000000000000..f64b6b848b25 --- /dev/null +++ b/_generated/PowerShellV2_Node20/Tests/L0RunScriptInSeparateScope.ts @@ -0,0 +1,79 @@ +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, '..', 'powershell.js'); +let tmr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tmr.setInput('targetType', 'filepath'); +tmr.setInput('filePath', 'path/to/script.ps1'); +tmr.setInput('workingDirectory', '/fakecwd'); +tmr.setInput('ignoreLASTEXITCODE', 'true'); +tmr.setInput('runScriptInSeparateScope', 'true') + +//Create assertAgent and getVariable mocks, support not added in this version of task-lib +const tl = require('azure-pipelines-task-lib/mock-task'); +const tlClone = Object.assign({}, tl); +tlClone.getVariable = function(variable: string) { + if (variable.toLowerCase() == 'agent.tempdirectory') { + return 'temp/path'; + } + return null; +}; +tlClone.assertAgent = function(variable: string) { + return; +}; +tmr.registerMock('azure-pipelines-task-lib/mock-task', tlClone); + +// Mock task-lib +let a: ma.TaskLibAnswers = { + 'checkPath' : { + '/fakecwd' : true, + 'path/to/powershell': true, + 'temp/path': true + }, + 'which': { + 'powershell': 'path/to/powershell' + }, + 'assertAgent': { + '2.115.0': true + }, + 'exec': { + 'path/to/powershell --noprofile --norc -c pwd': { + "code": 0, + "stdout": "temp/path" + }, + "path/to/powershell -NoLogo -NoProfile -NonInteractive -Command & 'temp\\path\\fileName.ps1'": { + "code": 0, + "stdout": "my script output" + }, + "path/to/powershell -NoLogo -NoProfile -NonInteractive -Command & 'temp/path/fileName.ps1'": { + "code": 0, + "stdout": "my script output" + } + }, + 'stats': { + 'path/to/script.ps1': { + isFile() { + return true; + } + } + } +}; +tmr.setAnswers(a); + +// Mock fs +const fs = require('fs'); +const fsClone = Object.assign({}, fs); +fsClone.writeFileSync = function(filePath, contents, options) { + // Normalize to linux paths for logs we check + console.log(`Writing ${contents} to ${filePath.replace(/\\/g, '/')}`); +} +tmr.registerMock('fs', fsClone); + +// Mock uuidv4 +tmr.registerMock('uuid/v4', function () { + return 'fileName'; +}); + +tmr.run(); diff --git a/_generated/PowerShellV2_Node20/Tests/L0StdErr.ts b/_generated/PowerShellV2_Node20/Tests/L0StdErr.ts new file mode 100644 index 000000000000..5bacdf039f73 --- /dev/null +++ b/_generated/PowerShellV2_Node20/Tests/L0StdErr.ts @@ -0,0 +1,89 @@ +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, '..', 'powershell.js'); +let tmr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tmr.setInput('targetType', 'inline'); +tmr.setInput('script', 'Write-Host "my script output"'); +tmr.setInput('workingDirectory', '/fakecwd'); +tmr.setInput('ignoreLASTEXITCODE', 'true'); +tmr.setInput('failOnStderr', 'true'); + +//Create assertAgent and getVariable mocks, support not added in this version of task-lib +const tl = require('azure-pipelines-task-lib/mock-task'); +const tlClone = Object.assign({}, tl); +tlClone.getVariable = function(variable: string) { + if (variable.toLowerCase() == 'agent.tempdirectory') { + return 'temp/path'; + } + return null; +}; +tlClone.assertAgent = function(variable: string) { + return; +}; +tmr.registerMock('azure-pipelines-task-lib/mock-task', tlClone); + +function generateBigString(size: number) { + let result:string = ''; + while (result.length < size) { + result += 'a'; + } + return result; +} + +// Mock task-lib +let a: ma.TaskLibAnswers = { + 'checkPath' : { + '/fakecwd' : true, + 'path/to/powershell': true, + 'temp/path': true + }, + 'which': { + 'powershell': 'path/to/powershell' + }, + 'assertAgent': { + '2.115.0': true + }, + 'exec': { + 'path/to/powershell --noprofile --norc -c pwd': { + "code": 0, + "stdout": "temp/path" + }, + "path/to/powershell -NoLogo -NoProfile -NonInteractive -Command . 'temp\\path\\fileName.ps1'": { + "code": 0, + "stdout": "", + "stderr": "myErrorTest" + generateBigString(1000) + }, + "path/to/powershell -NoLogo -NoProfile -NonInteractive -Command . 'temp/path/fileName.ps1'": { + "code": 0, + "stdout": "", + "stderr": "myErrorTest" + generateBigString(1000) + } + }, + 'stats': { + 'path/to/script.ps1': { + isFile() { + return true; + } + } + } +}; +tmr.setAnswers(a); + +// Mock fs +const fs = require('fs'); +const fsClone = Object.assign({}, fs); +fsClone.writeFileSync = function(filePath, contents, options) { + // Normalize to linux paths for logs we check + console.log(`Writing ${contents} to ${filePath.replace(/\\/g, '/')}`); +} +tmr.registerMock('fs', fsClone); + +// Mock uuidv4 +tmr.registerMock('uuid/v4', function () { + return 'fileName'; +}); + +tmr.run(); \ No newline at end of file diff --git a/_generated/PowerShellV2_Node20/Tests/L0ValidateFileArgs.ts b/_generated/PowerShellV2_Node20/Tests/L0ValidateFileArgs.ts new file mode 100644 index 000000000000..a84f76cfc37a --- /dev/null +++ b/_generated/PowerShellV2_Node20/Tests/L0ValidateFileArgs.ts @@ -0,0 +1,78 @@ +import assert = require('assert'); +import { validateFileArgs } from '../helpers'; +import { ArgsSanitizingError } from '../errors'; + +export const runValidateFileArgsTests = () => { + const notThrowTestSuites: [string, string, string[]][] = [ + [ + "Handles empty line", + "", [] + ], + [ + "If no dangerous symbol in present, and FF is on", + "test 1", ["AZP_75787_ENABLE_NEW_LOGIC=true"] + ], + [ + "If dangerous symbols are present, and FF is off", + "test; test", ['AZP_75787_ENABLE_NEW_LOGIC=false'] + ], + [ + "If inside the args line is env variable with no dangerous symbols", + "test $env:VAR1 test", ["VAR1=1", "AZP_75787_ENABLE_NEW_LOGIC=true"] + ], + [ + "Accepts allowed symbols", + "a A 1 \\ ` _ ' \" - = / : . * , + ~ ? %", ["AZP_75787_ENABLE_NEW_LOGIC=true"] + ] + ]; + + for (const [testName, inputArguments, envVariables] of notThrowTestSuites) { + it(testName, () => { + envVariables.forEach(envVariable => { + const [envName, envValue] = envVariable.split("="); + process.env[envName] = envValue; + }); + + try { + assert.doesNotThrow(() => validateFileArgs(inputArguments)); + } + finally { + envVariables.forEach(envVariable => { + const [envName] = envVariable.split("="); + delete process.env[envName]; + }); + } + }) + } + + const throwTestSuites: [string, string, string[]][] = [ + [ + "If dangerous symbols are present, and FF is on", + "test; whoami", ['AZP_75787_ENABLE_NEW_LOGIC=true'] + ], [ + "If inside args line is env variable with dangerous symbols", + "test $env:VAR1 test", ["VAR1=12;3", "AZP_75787_ENABLE_NEW_LOGIC=true"] + ], [ + "If inside args line not correct env syntax", + "test $venv:VAR1 test", ["VAR1=123", "AZP_75787_ENABLE_NEW_LOGIC=true"] + ] + ] + for (const [testName, inputArguments, envVariables] of throwTestSuites) { + it(testName, () => { + envVariables.forEach(envVariable => { + const [envName, envValue] = envVariable.split("="); + process.env[envName] = envValue; + }); + + try { + assert.throws(() => validateFileArgs(inputArguments), ArgsSanitizingError); + } + finally { + envVariables.forEach(envVariable => { + const [envName] = envVariable.split("="); + delete process.env[envName]; + }); + } + }) + } +} \ No newline at end of file diff --git a/_generated/PowerShellV2_Node20/Tests/powershellImpl/L0.ts b/_generated/PowerShellV2_Node20/Tests/powershellImpl/L0.ts new file mode 100644 index 000000000000..d6ad2e4db39e --- /dev/null +++ b/_generated/PowerShellV2_Node20/Tests/powershellImpl/L0.ts @@ -0,0 +1,32 @@ +import path = require('path'); +var psm = require('../../../../Tests/lib/psRunner'); +var psr = null; + +export function testPowerShellImpl() { + this.timeout(parseInt(process.env.TASK_TEST_TIMEOUT) || 20000); + + before((done) => { + if (psm.testSupported()) { + psr = new psm.PSRunner(); + psr.start(); + } + + done(); + }); + + after(() => { + if (psr) { + psr.kill(); + } + }); + + if (psm.testSupported()) { + it('Run of L0Expand-EnvVariables tests suite.', (done) => { + psr.run(path.join(__dirname, 'L0Expand-EnvVariables.ps1'), done); + }) + + it('Run of L0Test-FileArgs tests suite.', (done) => { + psr.run(path.join(__dirname, 'L0Test-FileArgs.ps1'), done); + }) + } +} diff --git a/_generated/PowerShellV2_Node20/Tests/powershellImpl/L0Expand-EnvVariables.ps1 b/_generated/PowerShellV2_Node20/Tests/powershellImpl/L0Expand-EnvVariables.ps1 new file mode 100644 index 000000000000..a3d173f723a6 --- /dev/null +++ b/_generated/PowerShellV2_Node20/Tests/powershellImpl/L0Expand-EnvVariables.ps1 @@ -0,0 +1,166 @@ +[CmdletBinding()] +param() + +. $PSScriptRoot\..\..\..\..\Tests\lib\Initialize-Test.ps1 +. $PSScriptRoot\..\..\helpers.ps1 + +$testSuites = @( + @{ + Name = 'Handles empty line' + Input = '' + Variables = @() + Expected = '' + }, + @{ + Name = 'Expanding known env variables' + Input = '$env:VAR1 2' + Variables = @('VAR1=1') + Expected = '1 2' + }, + @{ + Name = 'Expanding env variables with brace syntax' + Input = '${env:VAR1} 2' + Variables = @('VAR1=1') + Expected = '1 2' + }, + @{ + Name = 'Expanding multiple env variables' + Input = '1 $env:VAR1 $env:VAR2' + Variables = @('VAR1=2', 'VAR2=3') + Expected = '1 2 3' + }, + @{ + Name = 'Expanding multiple env variables 2' + Input = '$env:VAR1 $env:VAR2' + Variables = @('VAR1=1', 'VAR2=2') + Expected = '1 2' + }, + @{ + Name = 'Expanding multiple close env variables' + Input = '$env:VAR1 $env:VAR2$env:VAR3' + Variables = @('VAR1=1', 'VAR2=2', 'VAR3=3') + Expected = '1 23' + }, + @{ + Name = 'Expanding multiple close env variables 2' + Input = '$env:VAR1${env:VAR2}_$env:VAR3' + Variables = @('VAR1=1', 'VAR2=2', 'VAR3=3') + Expected = '12_3' + }, + @{ + Name = 'Expanding multiple close env variables 3' + Input = '${env:VAR1}$env:VAR2' + Variables = @('VAR1=1', 'VAR2=2') + Expected = '12' + }, + @{ + Name = 'Not expanding nested env variables' + Input = '$env:VAR1 $env:VAR2' + Variables = @('VAR1=$env:NESTED', 'VAR2=2', 'NESTED=nested') + Expected = '$env:NESTED 2' + }, + @{ + Name = 'Not expanding if backtick before env var' + Input = '`$env:VAR1' + Variables = @('VAR1=val1') + Expected = '$env:VAR1' + }, + @{ + Name = 'Not expanding if backtick at start of env var' + Input = '$`env:VAR1' + Variables = @('VAR1=val1') + Expected = '$`env:VAR1' + }, + @{ + Name = 'Not expanding if backtick inside env var' + Input = '$env:VA`R1' + Variables = @('VAR1=val1') + Expected = '$env:VA`R1' + }, + @{ + Name = 'If variable inside single quotes, it should be ignored' + Input = '$env:VAR1 ''$env:VAR2''' + Variables = @('VAR1=val1', 'VAR2=val2') + Expected = 'val1 ''$env:VAR2''' + }, + @{ + Name = 'If variable inside single quotes, it should be ignored 2' + Input = '$env:VAR1 '' _ ${env:VAR2} _ ''' + Variables = @('VAR1=val1', 'VAR2=val2') + Expected = 'val1 '' _ ${env:VAR2} _ ''' + }, + @{ + Name = 'If variable inside single quotes, it should be ignored 3' + Input = '$env:VAR1 '' _ $env:VAR2 _ $env:VAR3''' + Variables = @('VAR1=val1', 'VAR2=val2', 'VAR3=val3') + Expected = 'val1 '' _ $env:VAR2 _ $env:VAR3''' + }, + @{ + Name = 'If variable inside double quotes, it should be expanded' + Input = '$env:VAR1 "$env:VAR2"' + Variables = @('VAR1=val1', 'VAR2=val2') + Expected = 'val1 "val2"' + }, + @{ + Name = 'If quotes closed, variable should be expanded' + Input = '''''$env:VAR1' + Variables = @('VAR1=val1') + Expected = '''''val1' + }, + @{ + Name = 'If quotes closed, variable should be expanded 2' + Input = '''''$env:VAR1''''' + Variables = @('VAR1=val1') + Expected = '''''val1''''' + }, + @{ + Name = 'If variable does not exists, it should not expand' + Input = '$env:VAR1 2' + Variables = @('VAR1=') + Expected = '$env:VAR1 2' + }, + @{ + Name = 'If variable syntax is incorrect, it should leave it as is' + Input = '$venv:VAR1 ${_env:VAR2}' + Variables = @('VAR1=val1', 'VAR2=val2') + Expected = '$venv:VAR1 ${_env:VAR2}' + }, + @{ + Name = 'If closing brace is not present, it should leave it as is' + Input = '$env:VAR1 ${env:VAR2' + Variables = @('VAR1=val1', 'VAR2=val2') + Expected = 'val1 ${env:VAR2' + }, + @{ + Name = 'If closing brace is not present, it should leave it as is 2' + Input = '${env:VAR1 ${env:VAR2}' + Variables = @('VAR1=val1', 'VAR2=val2') + Expected = '${env:VAR1 ${env:VAR2}' + } +) + +foreach ($test in $testSuites) { + $test.Variables | ForEach-Object { + $name, $value = $_.Split('=') + if ($value) { + Set-Item -Path env:$name -Value $value + } + else { + Remove-Item env:$name -ErrorAction SilentlyContinue + } + } + + Write-Host "Input = $($test.Input)" + + $actual, $telemetry = Expand-EnvVariables $test.Input + + try { + Assert-AreEqual -Expected $test.Expected -Actual $actual -Message "Error occured in '$($test.Name)' suite." + } + finally { + $test.Variables | ForEach-Object { + $name, $value = $_.Split('=') + Remove-Item env:$name -ErrorAction SilentlyContinue + } + } +} diff --git a/_generated/PowerShellV2_Node20/Tests/powershellImpl/L0Test-FileArgs.ps1 b/_generated/PowerShellV2_Node20/Tests/powershellImpl/L0Test-FileArgs.ps1 new file mode 100644 index 000000000000..0c40c78ab449 --- /dev/null +++ b/_generated/PowerShellV2_Node20/Tests/powershellImpl/L0Test-FileArgs.ps1 @@ -0,0 +1,102 @@ +[CmdletBinding()] +param() + +. $PSScriptRoot\..\..\..\..\Tests\lib\Initialize-Test.ps1 +. $PSScriptRoot\..\..\helpers.ps1 + +$notThrowTestSuites = @( + @{ + Name = 'Handles empty line' + Input = '' + Variables = @() + }, + @{ + Name = 'If no dangerous symbol in present, and FF is on' + Input = 'test 1' + Variables = @('AZP_75787_ENABLE_NEW_LOGIC=true') + }, + @{ + Name = 'If dangerous symbols are present, and FF is off' + Input = 'test; test' + Variables = @('AZP_75787_ENABLE_NEW_LOGIC=false') + }, + @{ + Name = 'If inside the args line is env variable with no dangerous symbols' + Input = 'test $env:VAR1 test' + Variables = @('VAR1=1', 'AZP_75787_ENABLE_NEW_LOGIC=true') + }, + @{ + Name = 'Accepts allowed symbols' + Input = 'a A 1 \ ` _ '' " - = / : . * , + ~ ? %' + Variables = @('AZP_75787_ENABLE_NEW_LOGIC=true') + } +) +foreach ($test in $notThrowTestSuites) { + $test.Variables | ForEach-Object { + $name, $value = $_.Split('=') + if ($value) { + Set-Item -Path env:$name -Value $value + } + else { + Remove-Item env:$name -ErrorAction SilentlyContinue + } + } + + try { + Test-FileArgs $test.Input + } + catch { + throw "Error occured in '$($test.Name)' suite: $($_.Exception.Message)" + } + finally { + $test.Variables | ForEach-Object { + $name, $value = $_.Split('=') + Remove-Item env:$name -ErrorAction SilentlyContinue + } + } +} + +$throwTestSuites = @( + @{ + Name = 'If dangerous symbols are present, and FF is on' + Input = 'test; whoami' + Variables = @('AZP_75787_ENABLE_NEW_LOGIC=true') + }, + @{ + Name = 'If inside args line is env variable with dangerous symbols' + Input = 'test $env:VAR1 test' + Variables = @('VAR1=12;3', 'AZP_75787_ENABLE_NEW_LOGIC=true') + }, + @{ + Name = 'If inside args line not correct env syntax' + Input = 'test $venv:VAR1 test' + Variables = @('VAR1=123', 'AZP_75787_ENABLE_NEW_LOGIC=true') + } +) +foreach ($test in $throwTestSuites) { + $test.Variables | ForEach-Object { + $name, $value = $_.Split('=') + if ($value) { + Set-Item -Path env:$name -Value $value + } + else { + Remove-Item env:$name -ErrorAction SilentlyContinue + } + } + + try { + $msg = Get-VstsLocString -Key 'ScriptArgsSanitized' + Assert-Throws { + Test-FileArgs $test.Input + } -MessagePattern $msg + } + catch { + throw "Error occured in '$($test.Name)' suite: $($_.Exception.Message)" + } + finally { + $test.Variables | ForEach-Object { + $name, $value = $_.Split('=') + Remove-Item env:$name -ErrorAction SilentlyContinue + } + } +} diff --git a/_generated/PowerShellV2_Node20/errors.ts b/_generated/PowerShellV2_Node20/errors.ts new file mode 100644 index 000000000000..b86763d43eee --- /dev/null +++ b/_generated/PowerShellV2_Node20/errors.ts @@ -0,0 +1,5 @@ +export class ArgsSanitizingError extends Error { + constructor(message: string) { + super(message); + } +} diff --git a/_generated/PowerShellV2_Node20/helpers.ps1 b/_generated/PowerShellV2_Node20/helpers.ps1 new file mode 100644 index 000000000000..e12c8e309c16 --- /dev/null +++ b/_generated/PowerShellV2_Node20/helpers.ps1 @@ -0,0 +1,249 @@ +function Publish-Telemetry($Telemetry) { + $area = 'TaskHub' + $feature = 'PowerShellV2' + $telemetryJson = $Telemetry | ConvertTo-Json -Compress + Write-Host "##vso[telemetry.publish area=$area;feature=$feature]$telemetryJson" +} + +function Merge-Matches { + param ( + [Parameter(Mandatory = $true)] + [String[]]$Matches + ) + + $matchesData = @{} + foreach ($m in $Matches) { + if ($matchesData.ContainsKey($m)) { + $matchesData[$m]++ + } + else { + $matchesData[$m] = 1 + } + } + + return $matchesData +} + +function Sanitize-Arguments([string]$InputArgs) { + $removedSymbolSign = '_#removed#_'; + $argsSplitSymbols = '``'; + [string[][]]$matchesChunks = @() + + # We're splitting by ``, removing all suspicious characters and then join + $argsArr = $InputArgs -split $argsSplitSymbols; + + ## '? i >= 0) + if (foundPrefixes.length === 0) { + break; + } + + const prefixIndex = Math.min(...foundPrefixes) + + const isBraceSyntax = prefixIndex === bracedPrefixIndex + if (isBraceSyntax) { + telemetry.braceSyntaxEntries++; + } + + if (prefixIndex < 0) { + break; + } + + telemetry.foundPrefixes++ + + if (result[prefixIndex - 1] === escapingSymbol) { + if (!result[prefixIndex - 2] || result[prefixIndex - 2] !== escapingSymbol) { + startIndex++ + result = result.substring(0, prefixIndex - 1) + result.substring(prefixIndex) + + telemetry.escapedVariables++ + + continue + } + + telemetry.escapedEscapingSymbols++ + } + + const quoteIndex = result.indexOf(quote, startIndex) + if (quoteIndex >= 0 && prefixIndex > quoteIndex) { + const nextQuoteIndex = result.indexOf(quote, quoteIndex + 1) + if (nextQuoteIndex < 0) { + break + } + + startIndex = nextQuoteIndex + 1 + + continue + } + + let envName = ''; + let envEndIndex = 0; + + const envStartIndex = prefixIndex + (isBraceSyntax ? bracedEnvPrefix.length : basicEnvPrefix.length) + + if (isBraceSyntax) { + envEndIndex = findEnclosingBraceIndex(result, prefixIndex) + if (envEndIndex === 0) { + telemetry.notClosedBraceSyntaxPosition = prefixIndex + 1 // +{ + + break; + } + + envName = result.substring(envStartIndex, envEndIndex) + + telemetry.bracedVariables++ + } else { + envName = result.substring(envStartIndex).split(/[ |"|'|;|$]/)[0] + envEndIndex = envStartIndex + envName.length + } + + if (envName.startsWith(escapingSymbol)) { + const sanitizedEnvName = basicEnvPrefix + envName.substring(1) + result = result.substring(0, prefixIndex) + sanitizedEnvName + result.substring(envEndIndex) + startIndex = prefixIndex + sanitizedEnvName.length + + telemetry.variableStartsFromBacktick++ + + continue + } + + let head = result.substring(0, prefixIndex) + if (envName.includes(escapingSymbol)) { + head = head + envName.split(escapingSymbol)[1] + envName = envName.split(escapingSymbol)[0] + + telemetry.variablesWithBacktickInside++ + } + + const envValue = process.env[envName]; + // in case we don't have such variable, we just leave it as is + if (!envValue) { + telemetry.notExistingEnv++ + startIndex = envEndIndex + continue + } + + const tail = result.substring(isBraceSyntax ? envEndIndex + 1 : envEndIndex) + + result = head + envValue + tail; + startIndex = prefixIndex + envValue.length + + telemetry.variablesExpanded++ + + continue + } + + return [result, telemetry] +} + +function findEnclosingBraceIndex(input: string, targetIndex: number) { + for (let i = 0; i < input.length; i++) { + if (input[i] === "}" && i > targetIndex) { + return i + } + } + return 0 +} + +export function validateFileArgs(inputArguments: string): void { + const featureFlags = { + audit: tl.getBoolFeatureFlag('AZP_75787_ENABLE_NEW_LOGIC_LOG'), + activate: tl.getBoolFeatureFlag('AZP_75787_ENABLE_NEW_LOGIC'), + telemetry: tl.getBoolFeatureFlag('AZP_75787_ENABLE_COLLECT') + }; + + if (featureFlags.activate || featureFlags.audit || featureFlags.telemetry) { + tl.debug('Validating file args'); + const [expandedArgs, expandTelemetry] = expandPowerShellEnvVariables(inputArguments); + + tl.debug(`Expanded args: ${expandedArgs}`); + + const [sanitizedArgs, sanitizeTelemetry] = sanitizeArgs( + expandedArgs, + { + argsSplitSymbols: '``', + saniziteRegExp: new RegExp('(? + + + + + + + + + + + + + + + + + + + diff --git a/_generated/PowerShellV2_Node20/make.json b/_generated/PowerShellV2_Node20/make.json new file mode 100644 index 000000000000..03fd38de4049 --- /dev/null +++ b/_generated/PowerShellV2_Node20/make.json @@ -0,0 +1,34 @@ +{ + "externals": { + "nugetv2": [ + { + "name": "VstsTaskSdk", + "version": "0.11.0", + "repository": "https://www.powershellgallery.com/api/v2/", + "cp": [ + { + "source": [ + "*.dll", + "*.ps1", + "*.psd1", + "*.psm1", + "lib.json", + "Strings" + ], + "dest": "ps_modules/VstsTaskSdk/", + "options": "-R" + } + ] + } + ] + }, + "rm": [ + { + "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" + ], + "options": "-Rf" + } + ] +} \ No newline at end of file diff --git a/_generated/PowerShellV2_Node20/package-lock.json b/_generated/PowerShellV2_Node20/package-lock.json new file mode 100644 index 000000000000..71d7abfd2f58 --- /dev/null +++ b/_generated/PowerShellV2_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/_generated/PowerShellV2_Node20/package.json b/_generated/PowerShellV2_Node20/package.json new file mode 100644 index 000000000000..6c118854e049 --- /dev/null +++ b/_generated/PowerShellV2_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/_generated/PowerShellV2_Node20/powershell.ps1 b/_generated/PowerShellV2_Node20/powershell.ps1 new file mode 100644 index 000000000000..0e42acbe708d --- /dev/null +++ b/_generated/PowerShellV2_Node20/powershell.ps1 @@ -0,0 +1,255 @@ +[CmdletBinding()] +param() + +. $PSScriptRoot\helpers.ps1 + +function Get-ActionPreference { + param ( + [Parameter(Mandatory)] + [string] + $VstsInputName, + + [Parameter()] + [string] + $DefaultAction = 'Default', + + [Parameter()] + [string[]] + $ValidActions = @( 'Default', 'Stop', 'Continue', 'SilentlyContinue' ) + ) + + $result = Get-VstsInput -Name $VstsInputName -Default $DefaultAction + + if (-not $ValidActions -contains $result) { + Write-Error (Get-VstsLocString -Key 'PS_InvalidActionPreference' -ArgumentList @( $VstsInputName, $result, ($ValidActions -join ', ') )) + } + + return $result +} + +Trace-VstsEnteringInvocation $MyInvocation +try { + Import-VstsLocStrings "$PSScriptRoot\task.json" + + # Get inputs. + $input_errorActionPreference = Get-ActionPreference -VstsInputName 'errorActionPreference' -DefaultAction 'Stop' + $input_warningPreference = Get-ActionPreference -VstsInputName 'warningPreference' -DefaultAction 'Default' + $input_informationPreference = Get-ActionPreference -VstsInputName 'informationPreference' -DefaultAction 'Default' + $input_verbosePreference = Get-ActionPreference -VstsInputName 'verbosePreference' -DefaultAction 'Default' + $input_debugPreference = Get-ActionPreference -VstsInputName 'debugPreference' -DefaultAction 'Default' + $input_progressPreference = Get-ActionPreference -VstsInputName 'progressPreference' -DefaultAction 'SilentlyContinue' + + $input_showWarnings = Get-VstsInput -Name 'showWarnings' -AsBool + $input_failOnStderr = Get-VstsInput -Name 'failOnStderr' -AsBool + $input_ignoreLASTEXITCODE = Get-VstsInput -Name 'ignoreLASTEXITCODE' -AsBool + $input_pwsh = Get-VstsInput -Name 'pwsh' -AsBool + $input_workingDirectory = Get-VstsInput -Name 'workingDirectory' -Require + Assert-VstsPath -LiteralPath $input_workingDirectory -PathType 'Container' + $input_targetType = Get-VstsInput -Name 'targetType' + if ("$input_targetType".ToUpperInvariant() -eq "FILEPATH") { + $input_filePath = Get-VstsInput -Name 'filePath' -Require + try { + Assert-VstsPath -LiteralPath $input_filePath -PathType Leaf + } + catch { + Write-Error (Get-VstsLocString -Key 'PS_InvalidFilePath' -ArgumentList $input_filePath) + } + + if (!$input_filePath.ToUpperInvariant().EndsWith('.PS1')) { + Write-Error (Get-VstsLocString -Key 'PS_InvalidFilePath' -ArgumentList $input_filePath) + } + + $input_arguments = Get-VstsInput -Name 'arguments' + } + elseif ("$input_targetType".ToUpperInvariant() -eq "INLINE") { + $input_script = Get-VstsInput -Name 'script' + } + else { + Write-Error (Get-VstsLocString -Key 'PS_InvalidTargetType' -ArgumentList $input_targetType) + } + $input_runScriptInSeparateScope = Get-VstsInput -Name 'runScriptInSeparateScope' -AsBool + + # Generate the script contents. + Write-Host (Get-VstsLocString -Key 'GeneratingScript') + $contents = @() + if ($input_errorActionPreference -ne 'Default') { + $contents += "`$ErrorActionPreference = '$input_errorActionPreference'" + } + if ($input_warningPreference -ne 'Default') { + $contents += "`$WarningPreference = '$input_warningPreference'" + } + if ($input_informationPreference -ne 'Default') { + $contents += "`$InformationPreference = '$input_informationPreference'" + } + if ($input_verbosePreference -ne 'Default') { + $contents += "`$VerbosePreference = '$input_verbosePreference'" + } + if ($input_debugPreference -ne 'Default') { + $contents += "`$DebugPreference = '$input_debugPreference'" + } + if ($input_progressPreference -ne 'Default') { + $contents += "`$ProgressPreference = '$input_progressPreference'" + } + # Change default error view to normal view. We need this for error handling since we pipe stdout and stderr to the same stream + # and we rely on PowerShell piping back NormalView error records (required because PowerShell Core changed the default to ConciseView) + $contents += "`$ErrorView = 'NormalView'" + if ("$input_targetType".ToUpperInvariant() -eq 'FILEPATH') { + + try { + Test-FileArgs $input_arguments + } + catch { + $message = $_.Exception.Message + + if ($message -eq (Get-VstsLocString -Key 'ScriptArgsSanitized')) { + throw $message; + } + + $telemetry = @{ + 'UnexpectedError' = $message + 'ErrorStackTrace' = $_.Exception.StackTrace + } + Publish-Telemetry $telemetry + } + + $contents += ". '$("$input_filePath".Replace("'", "''"))' $input_arguments".Trim() + Write-Host (Get-VstsLocString -Key 'PS_FormattedCommand' -ArgumentList ($contents[-1])) + } + else { + $contents += "$input_script".Replace("`r`n", "`n").Replace("`n", "`r`n") + } + + if (!$input_ignoreLASTEXITCODE) { + $contents += 'if (!(Test-Path -LiteralPath variable:\LASTEXITCODE)) {' + $contents += ' Write-Host ''##vso[task.debug]$LASTEXITCODE is not set.''' + $contents += '} else {' + $contents += ' Write-Host (''##vso[task.debug]$LASTEXITCODE: {0}'' -f $LASTEXITCODE)' + $contents += ' exit $LASTEXITCODE' + $contents += '}' + } + + $joinedContents = [System.String]::Join( + ([System.Environment]::NewLine), + $contents); + if ($input_showWarnings) { + $joinedContents = ' + $warnings = New-Object System.Collections.ObjectModel.ObservableCollection[System.Management.Automation.WarningRecord]; + Register-ObjectEvent -InputObject $warnings -EventName CollectionChanged -Action { + if($Event.SourceEventArgs.Action -like "Add"){ + $Event.SourceEventArgs.NewItems | ForEach-Object { + Write-Host "##vso[task.logissue type=warning;]$_"; + } + } + }; + Invoke-Command {' + $joinedContents + '} -WarningVariable +warnings'; + } + + # Write the script to disk. + Assert-VstsAgent -Minimum '2.115.0' + $tempDirectory = Get-VstsTaskVariable -Name 'agent.tempDirectory' -Require + Assert-VstsPath -LiteralPath $tempDirectory -PathType 'Container' + $filePath = [System.IO.Path]::Combine($tempDirectory, "$([System.Guid]::NewGuid()).ps1") + $null = [System.IO.File]::WriteAllText( + $filePath, + $joinedContents, + ([System.Text.Encoding]::UTF8)) + + # Prepare the external command values. + # + # Note, use "-Command" instead of "-File". On PowerShell v4 and V3 when using "-File", terminating + # errors do not cause a non-zero exit code. + if ($input_pwsh) { + $powershellPath = Get-Command -Name pwsh.exe -CommandType Application | Select-Object -First 1 -ExpandProperty Path + } + else { + $powershellPath = Get-Command -Name powershell.exe -CommandType Application | Select-Object -First 1 -ExpandProperty Path + } + $executionOperator; + if ($input_runScriptInSeparateScope) { + $executionOperator = '&'; + } + else { + $executionOperator = '.'; + } + Assert-VstsPath -LiteralPath $powershellPath -PathType 'Leaf' + $arguments = "-NoLogo -NoProfile -NonInteractive -ExecutionPolicy Unrestricted -Command `"$executionOperator '$($filePath.Replace("'", "''"))'`"" + $splat = @{ + 'FileName' = $powershellPath + 'Arguments' = $arguments + 'WorkingDirectory' = $input_workingDirectory + } + + # Switch to "Continue". + $global:ErrorActionPreference = 'Continue' + $failed = $false + + # Run the script. + Write-Host '========================== Starting Command Output ===========================' + if (!$input_failOnStderr) { + Invoke-VstsTool @splat + } + else { + $inError = $false + $errorLines = New-Object System.Text.StringBuilder + Invoke-VstsTool @splat 2>&1 | + ForEach-Object { + if ($_ -is [System.Management.Automation.ErrorRecord]) { + # Buffer the error lines. + $failed = $true + $inError = $true + $null = $errorLines.AppendLine("$($_.Exception.Message)") + + # Write to verbose to mitigate if the process hangs. + Write-Verbose "STDERR: $($_.Exception.Message)" + } + else { + # Flush the error buffer. + if ($inError) { + $inError = $false + $message = $errorLines.ToString().Trim() + $null = $errorLines.Clear() + if ($message) { + Write-VstsTaskError -Message $message + } + } + + Write-Host "$_" + } + } + + # Flush the error buffer one last time. + if ($inError) { + $inError = $false + $message = $errorLines.ToString().Trim() + $null = $errorLines.Clear() + if ($message) { + Write-VstsTaskError -Message $message + } + } + } + + # Fail on $LASTEXITCODE + if (!(Test-Path -LiteralPath 'variable:\LASTEXITCODE')) { + $failed = $true + Write-Verbose "Unable to determine exit code" + Write-VstsTaskError -Message (Get-VstsLocString -Key 'PS_UnableToDetermineExitCode') + } + else { + if ($LASTEXITCODE -ne 0) { + $failed = $true + Write-VstsTaskError -Message (Get-VstsLocString -Key 'PS_ExitCode' -ArgumentList $LASTEXITCODE) + } + } + + # Fail if any errors. + if ($failed) { + Write-VstsSetResult -Result 'Failed' -Message "Error detected" -DoNotThrow + } +} +catch { + Write-VstsTaskError -Message $_.Exception.Message + Write-VstsSetResult -Result 'Failed' -Message "Error detected" -DoNotThrow +} +finally { + Trace-VstsLeavingInvocation $MyInvocation +} diff --git a/_generated/PowerShellV2_Node20/powershell.ts b/_generated/PowerShellV2_Node20/powershell.ts new file mode 100644 index 000000000000..b711542677db --- /dev/null +++ b/_generated/PowerShellV2_Node20/powershell.ts @@ -0,0 +1,192 @@ +import fs = require('fs'); +import path = require('path'); +import os = require('os'); +import tl = require('azure-pipelines-task-lib/task'); +import tr = require('azure-pipelines-task-lib/toolrunner'); +import { validateFileArgs } from './helpers'; +import { ArgsSanitizingError } from './errors'; +import { emitTelemetry } from 'azure-pipelines-tasks-utility-common/telemetry'; +var uuidV4 = require('uuid/v4'); + +function getActionPreference(vstsInputName: string, defaultAction: string = 'Default', validActions: string[] = ['Default', 'Stop', 'Continue', 'SilentlyContinue']) { + let result: string = tl.getInput(vstsInputName, false) || defaultAction; + + if (validActions.map(actionPreference => actionPreference.toUpperCase()).indexOf(result.toUpperCase()) < 0) { + throw new Error(tl.loc('JS_InvalidActionPreference', vstsInputName, result, validActions.join(', '))) + } + + return result +} + +async function run() { + try { + tl.setResourcePath(path.join(__dirname, 'task.json')); + + // Get inputs. + let input_errorActionPreference: string = getActionPreference('errorActionPreference', 'Stop'); + let input_warningPreference: string = getActionPreference('warningPreference', 'Default'); + let input_informationPreference: string = getActionPreference('informationPreference', 'Default'); + let input_verbosePreference: string = getActionPreference('verbosePreference', 'Default'); + let input_debugPreference: string = getActionPreference('debugPreference', 'Default'); + let input_progressPreference: string = getActionPreference('progressPreference', 'SilentlyContinue'); + + let input_showWarnings = tl.getBoolInput('showWarnings', false); + let input_failOnStderr = tl.getBoolInput('failOnStderr', false); + let input_ignoreLASTEXITCODE = tl.getBoolInput('ignoreLASTEXITCODE', false); + let input_workingDirectory = tl.getPathInput('workingDirectory', /*required*/ true, /*check*/ true); + let input_filePath: string; + let input_arguments: string; + let input_script: string; + let input_targetType: string = tl.getInput('targetType') || ''; + if (input_targetType.toUpperCase() == 'FILEPATH') { + input_filePath = tl.getPathInput('filePath', /*required*/ true); + if (!tl.stats(input_filePath).isFile() || !input_filePath.toUpperCase().match(/\.PS1$/)) { + throw new Error(tl.loc('JS_InvalidFilePath', input_filePath)); + } + + input_arguments = tl.getInput('arguments') || ''; + } + else if (input_targetType.toUpperCase() == 'INLINE') { + input_script = tl.getInput('script', false) || ''; + } + else { + throw new Error(tl.loc('JS_InvalidTargetType', input_targetType)); + } + const input_runScriptInSeparateScope = tl.getBoolInput('runScriptInSeparateScope'); + + // Generate the script contents. + console.log(tl.loc('GeneratingScript')); + let contents: string[] = []; + if (input_errorActionPreference.toUpperCase() != 'DEFAULT') { + contents.push(`$ErrorActionPreference = '${input_errorActionPreference}'`); + } + if (input_warningPreference.toUpperCase() != 'DEFAULT') { + contents.push(`$WarningPreference = '${input_warningPreference}'`); + } + if (input_informationPreference.toUpperCase() != 'DEFAULT') { + contents.push(`$InformationPreference = '${input_informationPreference}'`); + } + if (input_verbosePreference.toUpperCase() != 'DEFAULT') { + contents.push(`$VerbosePreference = '${input_verbosePreference}'`); + } + if (input_debugPreference.toUpperCase() != 'DEFAULT') { + contents.push(`$DebugPreference = '${input_debugPreference}'`); + } + if (input_progressPreference.toUpperCase() != 'DEFAULT') { + contents.push(`$ProgressPreference = '${input_progressPreference}'`); + } + + let script = ''; + if (input_targetType.toUpperCase() == 'FILEPATH') { + + try { + validateFileArgs(input_arguments); + } + catch (error) { + if (error instanceof ArgsSanitizingError) { + throw error; + } + + emitTelemetry('TaskHub', 'PowerShellV2', + { + UnexpectedError: error?.message ?? JSON.stringify(error) ?? null, + ErrorStackTrace: error?.stack ?? null + } + ); + } + + script = `. '${input_filePath.replace(/'/g, "''")}' ${input_arguments}`.trim(); + } else { + script = `${input_script}`; + } + if (input_showWarnings) { + script = ` + $warnings = New-Object System.Collections.ObjectModel.ObservableCollection[System.Management.Automation.WarningRecord]; + Register-ObjectEvent -InputObject $warnings -EventName CollectionChanged -Action { + if($Event.SourceEventArgs.Action -like "Add"){ + $Event.SourceEventArgs.NewItems | ForEach-Object { + Write-Host "##vso[task.logissue type=warning;]$_"; + } + } + }; + Invoke-Command {${script}} -WarningVariable +warnings; + `; + } + contents.push(script); + // log with detail to avoid a warning output. + tl.logDetail(uuidV4(), tl.loc('JS_FormattedCommand', script), null, 'command', 'command', 0); + + if (!input_ignoreLASTEXITCODE) { + contents.push(`if (!(Test-Path -LiteralPath variable:\LASTEXITCODE)) {`); + contents.push(` Write-Host '##vso[task.debug]$LASTEXITCODE is not set.'`); + contents.push(`} else {`); + contents.push(` Write-Host ('##vso[task.debug]$LASTEXITCODE: {0}' -f $LASTEXITCODE)`); + contents.push(` exit $LASTEXITCODE`); + contents.push(`}`); + } + + // Write the script to disk. + tl.assertAgent('2.115.0'); + let tempDirectory = tl.getVariable('agent.tempDirectory'); + tl.checkPath(tempDirectory, `${tempDirectory} (agent.tempDirectory)`); + let filePath = path.join(tempDirectory, uuidV4() + '.ps1'); + fs.writeFileSync( + filePath, + '\ufeff' + contents.join(os.EOL), // Prepend the Unicode BOM character. + { encoding: 'utf8' }); // Since UTF8 encoding is specified, node will + // // encode the BOM into its UTF8 binary sequence. + + // Run the script. + // + // Note, prefer "pwsh" over "powershell". At some point we can remove support for "powershell". + // + // Note, use "-Command" instead of "-File" to match the Windows implementation. Refer to + // comment on Windows implementation for an explanation why "-Command" is preferred. + console.log('========================== Starting Command Output ==========================='); + + const executionOperator = input_runScriptInSeparateScope ? '&' : '.'; + let powershell = tl.tool(tl.which('pwsh') || tl.which('powershell') || tl.which('pwsh', true)) + .arg('-NoLogo') + .arg('-NoProfile') + .arg('-NonInteractive') + .arg('-Command') + .arg(`${executionOperator} '${filePath.replace(/'/g, "''")}'`); + let options = { + cwd: input_workingDirectory, + failOnStdErr: false, + errStream: process.stdout, // Direct all output to STDOUT, otherwise the output may appear out + outStream: process.stdout, // of order since Node buffers it's own STDOUT but not STDERR. + ignoreReturnCode: true + }; + + // Listen for stderr. + let stderrFailure = false; + const aggregatedStderr: string[] = []; + if (input_failOnStderr) { + powershell.on('stderr', (data: Buffer) => { + stderrFailure = true; + aggregatedStderr.push(data.toString('utf8')); + }); + } + + // Run bash. + let exitCode: number = await powershell.exec(options); + // Fail on exit code. + if (exitCode !== 0) { + tl.setResult(tl.TaskResult.Failed, tl.loc('JS_ExitCode', exitCode)); + } + + // Fail on stderr. + if (stderrFailure) { + tl.setResult(tl.TaskResult.Failed, tl.loc('JS_Stderr')); + aggregatedStderr.forEach((err: string) => { + tl.error(err); + }); + } + } + catch (err) { + tl.setResult(tl.TaskResult.Failed, err.message || 'run() failed'); + } +} + +run(); diff --git a/_generated/PowerShellV2_Node20/task.json b/_generated/PowerShellV2_Node20/task.json new file mode 100644 index 000000000000..b28b07cb9dad --- /dev/null +++ b/_generated/PowerShellV2_Node20/task.json @@ -0,0 +1,269 @@ +{ + "id": "E213FF0F-5D5C-4791-802D-52EA3E7BE1F1", + "name": "PowerShell", + "friendlyName": "PowerShell", + "description": "Run a PowerShell script on Linux, macOS, or Windows", + "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/powershell", + "helpMarkDown": "[Learn more about this task](https://go.microsoft.com/fwlink/?LinkID=613736)", + "category": "Utility", + "visibility": [ + "Build", + "Release" + ], + "runsOn": [ + "Agent", + "DeploymentGroup" + ], + "author": "Microsoft Corporation", + "version": { + "Major": 2, + "Minor": 229, + "Patch": 5 + }, + "releaseNotes": "Script task consistency. Added support for macOS and Linux.", + "minimumAgentVersion": "2.115.0", + "showEnvironmentVariables": true, + "groups": [ + { + "name": "preferenceVariables", + "displayName": "Preference Variables", + "isExpanded": false + }, + { + "name": "advanced", + "displayName": "Advanced", + "isExpanded": false + } + ], + "inputs": [ + { + "name": "targetType", + "type": "radio", + "label": "Type", + "required": false, + "defaultValue": "filePath", + "helpMarkDown": "Target script type: File Path or Inline", + "options": { + "filePath": "File Path", + "inline": "Inline" + } + }, + { + "name": "filePath", + "type": "filePath", + "label": "Script Path", + "visibleRule": "targetType = filePath", + "required": true, + "defaultValue": "", + "helpMarkDown": "Path of the script to execute. Must be a fully qualified path or relative to $(System.DefaultWorkingDirectory)." + }, + { + "name": "arguments", + "type": "string", + "label": "Arguments", + "visibleRule": "targetType = filePath", + "required": false, + "defaultValue": "", + "helpMarkDown": "Arguments passed to the PowerShell script. Either ordinal parameters or named parameters." + }, + { + "name": "script", + "type": "multiLine", + "label": "Script", + "visibleRule": "targetType = inline", + "required": true, + "defaultValue": "# Write your PowerShell commands here.\n\nWrite-Host \"Hello World\"\n", + "properties": { + "resizable": "true", + "rows": "10", + "maxLength": "20000" + }, + "helpMarkDown": "" + }, + { + "name": "errorActionPreference", + "type": "pickList", + "label": "ErrorActionPreference", + "required": false, + "defaultValue": "stop", + "options": { + "default": "Default", + "stop": "Stop", + "continue": "Continue", + "silentlyContinue": "SilentlyContinue" + }, + "helpMarkDown": "When not `Default`, prepends the line `$ErrorActionPreference = 'VALUE'` at the top of your script.", + "groupName": "preferenceVariables" + }, + { + "name": "warningPreference", + "type": "pickList", + "label": "WarningPreference", + "required": false, + "defaultValue": "default", + "options": { + "default": "Default", + "stop": "Stop", + "continue": "Continue", + "silentlyContinue": "SilentlyContinue" + }, + "helpMarkDown": "When not `Default`, prepends the line `$WarningPreference = 'VALUE'` at the top of your script.", + "groupName": "preferenceVariables" + }, + { + "name": "informationPreference", + "type": "pickList", + "label": "InformationPreference", + "required": false, + "defaultValue": "default", + "options": { + "default": "Default", + "stop": "Stop", + "continue": "Continue", + "silentlyContinue": "SilentlyContinue" + }, + "helpMarkDown": "When not `Default`, prepends the line `$InformationPreference = 'VALUE'` at the top of your script.", + "groupName": "preferenceVariables" + }, + { + "name": "verbosePreference", + "type": "pickList", + "label": "VerbosePreference", + "required": false, + "defaultValue": "default", + "options": { + "default": "Default", + "stop": "Stop", + "continue": "Continue", + "silentlyContinue": "SilentlyContinue" + }, + "helpMarkDown": "When not `Default`, prepends the line `$VerbosePreference = 'VALUE'` at the top of your script.", + "groupName": "preferenceVariables" + }, + { + "name": "debugPreference", + "type": "pickList", + "label": "DebugPreference", + "required": false, + "defaultValue": "default", + "options": { + "default": "Default", + "stop": "Stop", + "continue": "Continue", + "silentlyContinue": "SilentlyContinue" + }, + "helpMarkDown": "When not `Default`, prepends the line `$DebugPreference = 'VALUE'` at the top of your script.", + "groupName": "preferenceVariables" + }, + { + "name": "progressPreference", + "type": "pickList", + "label": "ProgressPreference", + "required": false, + "defaultValue": "silentlyContinue", + "options": { + "default": "Default", + "stop": "Stop", + "continue": "Continue", + "silentlyContinue": "SilentlyContinue" + }, + "helpMarkDown": "When not `Default`, prepends the line `$ProgressPreference = 'VALUE'` at the top of your script.", + "groupName": "preferenceVariables" + }, + { + "name": "failOnStderr", + "type": "boolean", + "label": "Fail on Standard Error", + "required": false, + "defaultValue": "false", + "helpMarkDown": "If this is true, this task will fail if any errors are written to the error pipeline, or if any data is written to the Standard Error stream. Otherwise the task will rely on the exit code to determine failure.", + "groupName": "advanced" + }, + { + "name": "showWarnings", + "type": "boolean", + "label": "Show warnings as Azure DevOps warnings", + "required": false, + "defaultValue": "false", + "helpMarkDown": "If this is true, and your script writes a warnings - they are shown as warnings also in pipeline logs", + "groupName": "advanced" + }, + { + "name": "ignoreLASTEXITCODE", + "type": "boolean", + "label": "Ignore $LASTEXITCODE", + "required": false, + "defaultValue": "false", + "helpMarkDown": "If this is false, the line `if ((Test-Path -LiteralPath variable:\\LASTEXITCODE)) { exit $LASTEXITCODE }` is appended to the end of your script. This will cause the last exit code from an external command to be propagated as the exit code of powershell. Otherwise the line is not appended to the end of your script.", + "groupName": "advanced" + }, + { + "name": "pwsh", + "type": "boolean", + "label": "Use PowerShell Core", + "required": false, + "defaultValue": "false", + "helpMarkDown": "If this is true, then on Windows the task will use pwsh.exe from your PATH instead of powershell.exe.", + "groupName": "advanced" + }, + { + "name": "workingDirectory", + "type": "filePath", + "label": "Working Directory", + "required": false, + "defaultValue": "", + "helpMarkDown": "Working directory where the script is run.", + "groupName": "advanced" + }, + { + "name": "runScriptInSeparateScope", + "type": "boolean", + "label": "Run script in the separate scope", + "required": false, + "defaultValue": "false", + "helpMarkDown": "This input allows executing PowerShell scripts using '&' operator instead of the default '.'. If this input set to the true script will be executed in separate scope and globally scoped PowerShell variables won't be updated", + "groupName": "advanced" + } + ], + "instanceNameFormat": "PowerShell Script", + "execution": { + "PowerShell3": { + "target": "powershell.ps1", + "platforms": [ + "windows" + ] + }, + "Node10": { + "target": "powershell.js", + "argumentFormat": "" + }, + "Node16": { + "target": "powershell.js", + "argumentFormat": "" + }, + "Node20": { + "target": "powershell.js", + "argumentFormat": "" + } + }, + "messages": { + "GeneratingScript": "Generating script.", + "JS_ExitCode": "PowerShell exited with code '%s'.", + "JS_FormattedCommand": "Formatted command: %s", + "JS_InvalidActionPreference": "Invalid action preference for %s: '%s'. The value must be one of: %s", + "JS_InvalidFilePath": "Invalid file path '%s'. A path to a .ps1 file is required.", + "JS_Stderr": "PowerShell wrote one or more lines to the standard error stream.", + "JS_InvalidTargetType": "Invalid target type '%s'. The value must be one of: 'filepath' or 'inline'", + "PS_ExitCode": "PowerShell exited with code '{0}'.", + "PS_FormattedCommand": "Formatted command: {0}", + "PS_InvalidActionPreference": "Invalid action preference for {0}: '{1}'. The value must be one of: {2}", + "PS_InvalidFilePath": "Invalid file path '{0}'. A path to a .ps1 file is required.", + "PS_UnableToDetermineExitCode": "Unexpected exception. Unable to determine the exit code from powershell.", + "PS_InvalidTargetType": "Invalid target type '{0}'. The value must be one of: 'filepath' or 'inline'", + "ScriptArgsSanitized": "Detected characters in arguments that may not be executed correctly by the shell. Please escape special characters using backtick (`). More information is available here: https://aka.ms/ado/75787" + }, + "_buildConfigMapping": { + "Default": "2.229.4", + "Node20-225": "2.229.5" + } +} \ No newline at end of file diff --git a/_generated/PowerShellV2_Node20/task.loc.json b/_generated/PowerShellV2_Node20/task.loc.json new file mode 100644 index 000000000000..643fa1d6d216 --- /dev/null +++ b/_generated/PowerShellV2_Node20/task.loc.json @@ -0,0 +1,269 @@ +{ + "id": "E213FF0F-5D5C-4791-802D-52EA3E7BE1F1", + "name": "PowerShell", + "friendlyName": "ms-resource:loc.friendlyName", + "description": "ms-resource:loc.description", + "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/powershell", + "helpMarkDown": "ms-resource:loc.helpMarkDown", + "category": "Utility", + "visibility": [ + "Build", + "Release" + ], + "runsOn": [ + "Agent", + "DeploymentGroup" + ], + "author": "Microsoft Corporation", + "version": { + "Major": 2, + "Minor": 229, + "Patch": 5 + }, + "releaseNotes": "ms-resource:loc.releaseNotes", + "minimumAgentVersion": "2.115.0", + "showEnvironmentVariables": true, + "groups": [ + { + "name": "preferenceVariables", + "displayName": "ms-resource:loc.group.displayName.preferenceVariables", + "isExpanded": false + }, + { + "name": "advanced", + "displayName": "ms-resource:loc.group.displayName.advanced", + "isExpanded": false + } + ], + "inputs": [ + { + "name": "targetType", + "type": "radio", + "label": "ms-resource:loc.input.label.targetType", + "required": false, + "defaultValue": "filePath", + "helpMarkDown": "ms-resource:loc.input.help.targetType", + "options": { + "filePath": "File Path", + "inline": "Inline" + } + }, + { + "name": "filePath", + "type": "filePath", + "label": "ms-resource:loc.input.label.filePath", + "visibleRule": "targetType = filePath", + "required": true, + "defaultValue": "", + "helpMarkDown": "ms-resource:loc.input.help.filePath" + }, + { + "name": "arguments", + "type": "string", + "label": "ms-resource:loc.input.label.arguments", + "visibleRule": "targetType = filePath", + "required": false, + "defaultValue": "", + "helpMarkDown": "ms-resource:loc.input.help.arguments" + }, + { + "name": "script", + "type": "multiLine", + "label": "ms-resource:loc.input.label.script", + "visibleRule": "targetType = inline", + "required": true, + "defaultValue": "# Write your PowerShell commands here.\n\nWrite-Host \"Hello World\"\n", + "properties": { + "resizable": "true", + "rows": "10", + "maxLength": "20000" + }, + "helpMarkDown": "" + }, + { + "name": "errorActionPreference", + "type": "pickList", + "label": "ms-resource:loc.input.label.errorActionPreference", + "required": false, + "defaultValue": "stop", + "options": { + "default": "Default", + "stop": "Stop", + "continue": "Continue", + "silentlyContinue": "SilentlyContinue" + }, + "helpMarkDown": "ms-resource:loc.input.help.errorActionPreference", + "groupName": "preferenceVariables" + }, + { + "name": "warningPreference", + "type": "pickList", + "label": "ms-resource:loc.input.label.warningPreference", + "required": false, + "defaultValue": "default", + "options": { + "default": "Default", + "stop": "Stop", + "continue": "Continue", + "silentlyContinue": "SilentlyContinue" + }, + "helpMarkDown": "ms-resource:loc.input.help.warningPreference", + "groupName": "preferenceVariables" + }, + { + "name": "informationPreference", + "type": "pickList", + "label": "ms-resource:loc.input.label.informationPreference", + "required": false, + "defaultValue": "default", + "options": { + "default": "Default", + "stop": "Stop", + "continue": "Continue", + "silentlyContinue": "SilentlyContinue" + }, + "helpMarkDown": "ms-resource:loc.input.help.informationPreference", + "groupName": "preferenceVariables" + }, + { + "name": "verbosePreference", + "type": "pickList", + "label": "ms-resource:loc.input.label.verbosePreference", + "required": false, + "defaultValue": "default", + "options": { + "default": "Default", + "stop": "Stop", + "continue": "Continue", + "silentlyContinue": "SilentlyContinue" + }, + "helpMarkDown": "ms-resource:loc.input.help.verbosePreference", + "groupName": "preferenceVariables" + }, + { + "name": "debugPreference", + "type": "pickList", + "label": "ms-resource:loc.input.label.debugPreference", + "required": false, + "defaultValue": "default", + "options": { + "default": "Default", + "stop": "Stop", + "continue": "Continue", + "silentlyContinue": "SilentlyContinue" + }, + "helpMarkDown": "ms-resource:loc.input.help.debugPreference", + "groupName": "preferenceVariables" + }, + { + "name": "progressPreference", + "type": "pickList", + "label": "ms-resource:loc.input.label.progressPreference", + "required": false, + "defaultValue": "silentlyContinue", + "options": { + "default": "Default", + "stop": "Stop", + "continue": "Continue", + "silentlyContinue": "SilentlyContinue" + }, + "helpMarkDown": "ms-resource:loc.input.help.progressPreference", + "groupName": "preferenceVariables" + }, + { + "name": "failOnStderr", + "type": "boolean", + "label": "ms-resource:loc.input.label.failOnStderr", + "required": false, + "defaultValue": "false", + "helpMarkDown": "ms-resource:loc.input.help.failOnStderr", + "groupName": "advanced" + }, + { + "name": "showWarnings", + "type": "boolean", + "label": "ms-resource:loc.input.label.showWarnings", + "required": false, + "defaultValue": "false", + "helpMarkDown": "ms-resource:loc.input.help.showWarnings", + "groupName": "advanced" + }, + { + "name": "ignoreLASTEXITCODE", + "type": "boolean", + "label": "ms-resource:loc.input.label.ignoreLASTEXITCODE", + "required": false, + "defaultValue": "false", + "helpMarkDown": "ms-resource:loc.input.help.ignoreLASTEXITCODE", + "groupName": "advanced" + }, + { + "name": "pwsh", + "type": "boolean", + "label": "ms-resource:loc.input.label.pwsh", + "required": false, + "defaultValue": "false", + "helpMarkDown": "ms-resource:loc.input.help.pwsh", + "groupName": "advanced" + }, + { + "name": "workingDirectory", + "type": "filePath", + "label": "ms-resource:loc.input.label.workingDirectory", + "required": false, + "defaultValue": "", + "helpMarkDown": "ms-resource:loc.input.help.workingDirectory", + "groupName": "advanced" + }, + { + "name": "runScriptInSeparateScope", + "type": "boolean", + "label": "ms-resource:loc.input.label.runScriptInSeparateScope", + "required": false, + "defaultValue": "false", + "helpMarkDown": "ms-resource:loc.input.help.runScriptInSeparateScope", + "groupName": "advanced" + } + ], + "instanceNameFormat": "ms-resource:loc.instanceNameFormat", + "execution": { + "PowerShell3": { + "target": "powershell.ps1", + "platforms": [ + "windows" + ] + }, + "Node10": { + "target": "powershell.js", + "argumentFormat": "" + }, + "Node16": { + "target": "powershell.js", + "argumentFormat": "" + }, + "Node20": { + "target": "powershell.js", + "argumentFormat": "" + } + }, + "messages": { + "GeneratingScript": "ms-resource:loc.messages.GeneratingScript", + "JS_ExitCode": "ms-resource:loc.messages.JS_ExitCode", + "JS_FormattedCommand": "ms-resource:loc.messages.JS_FormattedCommand", + "JS_InvalidActionPreference": "ms-resource:loc.messages.JS_InvalidActionPreference", + "JS_InvalidFilePath": "ms-resource:loc.messages.JS_InvalidFilePath", + "JS_Stderr": "ms-resource:loc.messages.JS_Stderr", + "JS_InvalidTargetType": "ms-resource:loc.messages.JS_InvalidTargetType", + "PS_ExitCode": "ms-resource:loc.messages.PS_ExitCode", + "PS_FormattedCommand": "ms-resource:loc.messages.PS_FormattedCommand", + "PS_InvalidActionPreference": "ms-resource:loc.messages.PS_InvalidActionPreference", + "PS_InvalidFilePath": "ms-resource:loc.messages.PS_InvalidFilePath", + "PS_UnableToDetermineExitCode": "ms-resource:loc.messages.PS_UnableToDetermineExitCode", + "PS_InvalidTargetType": "ms-resource:loc.messages.PS_InvalidTargetType", + "ScriptArgsSanitized": "ms-resource:loc.messages.ScriptArgsSanitized" + }, + "_buildConfigMapping": { + "Default": "2.229.4", + "Node20-225": "2.229.5" + } +} \ No newline at end of file diff --git a/_generated/PowerShellV2_Node20/tsconfig.json b/_generated/PowerShellV2_Node20/tsconfig.json new file mode 100644 index 000000000000..0438b79f69ac --- /dev/null +++ b/_generated/PowerShellV2_Node20/tsconfig.json @@ -0,0 +1,6 @@ +{ + "compilerOptions": { + "target": "ES6", + "module": "commonjs" + } +} \ No newline at end of file diff --git a/_generated/PythonScriptV0.versionmap.txt b/_generated/PythonScriptV0.versionmap.txt new file mode 100644 index 000000000000..623498f87a5e --- /dev/null +++ b/_generated/PythonScriptV0.versionmap.txt @@ -0,0 +1,2 @@ +Default|0.229.3 +Node20-225|0.229.4 diff --git a/_generated/PythonScriptV0/Strings/resources.resjson/de-DE/resources.resjson b/_generated/PythonScriptV0/Strings/resources.resjson/de-DE/resources.resjson new file mode 100644 index 000000000000..414b9cef8eeb --- /dev/null +++ b/_generated/PythonScriptV0/Strings/resources.resjson/de-DE/resources.resjson @@ -0,0 +1,23 @@ +{ + "loc.friendlyName": "Python-Skript", + "loc.helpMarkDown": "[Weitere Informationen zu dieser Aufgabe](https://go.microsoft.com/fwlink/?LinkID=2006181) oder [Python-Dokumentation anzeigen](https://www.python.org/doc/)", + "loc.description": "Python-Datei oder Inlineskript ausführen", + "loc.instanceNameFormat": "Python-Skript ausführen", + "loc.group.displayName.advanced": "Erweitert", + "loc.input.label.scriptSource": "Skriptquelle", + "loc.input.help.scriptSource": "Gibt an, ob es sich bei dem Skript um eine Datei in der Quellstruktur oder um ein Inlineskript in dieser Aufgabe handelt.", + "loc.input.label.scriptPath": "Skriptpfad", + "loc.input.help.scriptPath": "Der Pfad des auszuführenden Skripts. Es muss sich um einen vollqualifizierten Pfad oder einen Pfad relativ zu \"$(System.DefaultWorkingDirectory)\" handeln.", + "loc.input.label.script": "Skript", + "loc.input.help.script": "Das auszuführende Python-Skript", + "loc.input.label.arguments": "Argumente", + "loc.input.help.arguments": "Argumente, die an die Skriptausführung übergeben werden, verfügbar über \"sys.argv\".", + "loc.input.label.pythonInterpreter": "Python-Interpreter", + "loc.input.help.pythonInterpreter": "Absoluter Pfad zum Python-Interpreter, der verwendet werden soll. Sofern nicht angegeben, verwendet die Aufgabe den Interpreter in PATH.
Führen Sie die Aufgabe [Python-Version verwenden](https://go.microsoft.com/fwlink/?linkid=871498) aus, um eine Python-Version zu PATH hinzuzufügen.", + "loc.input.label.workingDirectory": "Arbeitsverzeichnis", + "loc.input.help.workingDirectory": "Das Arbeitsverzeichnis, in dem das Skript ausgeführt wird. Sofern nicht angegeben, wird der Wert von \"System.DefaultWorkingDirectory\" verwendet. Für Builds ist diese Variable standardmäßig der Stamm des Repositorys. Für Releases wird standardmäßig der Stamm des Artefaktverzeichnisses verwendet.", + "loc.input.label.failOnStderr": "Fehler bei Standardfehler", + "loc.input.help.failOnStderr": "Bei Festlegung auf TRUE wird für diese Aufgabe ein Fehler ausgelöst, wenn Text in den stderr-Stream geschrieben wird.", + "loc.messages.NotAFile": "Der angegebene Pfad verweist nicht auf eine Datei: \"%s\".", + "loc.messages.ParameterRequired": "Der Parameter \"%s\" ist erforderlich." +} \ No newline at end of file diff --git a/_generated/PythonScriptV0/Strings/resources.resjson/en-US/resources.resjson b/_generated/PythonScriptV0/Strings/resources.resjson/en-US/resources.resjson new file mode 100644 index 000000000000..917466d920b5 --- /dev/null +++ b/_generated/PythonScriptV0/Strings/resources.resjson/en-US/resources.resjson @@ -0,0 +1,23 @@ +{ + "loc.friendlyName": "Python script", + "loc.helpMarkDown": "[Learn more about this task](https://go.microsoft.com/fwlink/?LinkID=2006181) or [see the Python documentation](https://www.python.org/doc/)", + "loc.description": "Run a Python file or inline script", + "loc.instanceNameFormat": "Run a Python script", + "loc.group.displayName.advanced": "Advanced", + "loc.input.label.scriptSource": "Script source", + "loc.input.help.scriptSource": "Whether the script is a file in the source tree or is written inline in this task.", + "loc.input.label.scriptPath": "Script path", + "loc.input.help.scriptPath": "Path of the script to execute. Must be a fully qualified path or relative to `$(System.DefaultWorkingDirectory)`.", + "loc.input.label.script": "Script", + "loc.input.help.script": "The Python script to run", + "loc.input.label.arguments": "Arguments", + "loc.input.help.arguments": "Arguments passed to the script execution, available through `sys.argv`.", + "loc.input.label.pythonInterpreter": "Python interpreter", + "loc.input.help.pythonInterpreter": "Absolute path to the Python interpreter to use. If not specified, the task will use the interpreter in PATH.
Run the [Use Python Version](https://go.microsoft.com/fwlink/?linkid=871498) task to add a version of Python to PATH.", + "loc.input.label.workingDirectory": "Working directory", + "loc.input.help.workingDirectory": "The working directory where the script will run. If not specified, the value of `System.DefaultWorkingDirectory` will be used. For builds, this variable defaults to the root of the repository. For releases, it defaults to the root of the artifacts directory.", + "loc.input.label.failOnStderr": "Fail on standard error", + "loc.input.help.failOnStderr": "If this is true, this task will fail if any text is written to the stderr stream.", + "loc.messages.NotAFile": "The given path was not to a file: '%s'.", + "loc.messages.ParameterRequired": "The `%s` parameter is required" +} \ No newline at end of file diff --git a/_generated/PythonScriptV0/Strings/resources.resjson/es-ES/resources.resjson b/_generated/PythonScriptV0/Strings/resources.resjson/es-ES/resources.resjson new file mode 100644 index 000000000000..07db036cb1c6 --- /dev/null +++ b/_generated/PythonScriptV0/Strings/resources.resjson/es-ES/resources.resjson @@ -0,0 +1,23 @@ +{ + "loc.friendlyName": "Script de Python", + "loc.helpMarkDown": "[Obtener más información acerca de esta tarea](https://go.microsoft.com/fwlink/?LinkID=2006181) o [consultar la documentación de Python](https://www.python.org/doc/)", + "loc.description": "Ejecuta un script insertado o un archivo de Python.", + "loc.instanceNameFormat": "Ejecutar un script de Python", + "loc.group.displayName.advanced": "Avanzado", + "loc.input.label.scriptSource": "Origen del script", + "loc.input.help.scriptSource": "Indica si el script es un archivo en el árbol de origen o está escrito en línea en esta tarea.", + "loc.input.label.scriptPath": "Ruta de acceso del script", + "loc.input.help.scriptPath": "Ruta de acceso del script que se va a ejecutar. Debe ser una ruta de acceso completa o relativa a \"$(System.DefaultWorkingDirectory)\".", + "loc.input.label.script": "Script", + "loc.input.help.script": "Script de Python que se va a ejecutar", + "loc.input.label.arguments": "Argumentos", + "loc.input.help.arguments": "Argumentos pasados a la ejecución del script, disponibles a través de \"sys.argv\".", + "loc.input.label.pythonInterpreter": "Intérprete de Python", + "loc.input.help.pythonInterpreter": "Ruta de acceso absoluta al intérprete de Python que se va a usar. Si no se especifica, la tarea usará el intérprete ubicado en PATH.
Ejecute la tarea [Usar versión de Python](https://go.microsoft.com/fwlink/?linkid=871498) para agregar una versión de Python a PATH.", + "loc.input.label.workingDirectory": "Directorio de trabajo", + "loc.input.help.workingDirectory": "Directorio de trabajo en el que se ejecutará el script. Si no se especifica, se usará el valor de \"System.DefaultWorkingDirectory\". En las compilaciones, el valor predeterminado de esta variable es la raíz del repositorio. En las versiones, su valor predeterminado es la raíz del directorio de artefactos.", + "loc.input.label.failOnStderr": "Error si se produce un error estándar", + "loc.input.help.failOnStderr": "Si es true, esta tarea no se realizará cuando se escriba texto en la secuencia stderr.", + "loc.messages.NotAFile": "La ruta de acceso especificada no estaba relacionada con un archivo: \"%s\".", + "loc.messages.ParameterRequired": "El parámetro \"%s\" es obligatorio" +} \ No newline at end of file diff --git a/_generated/PythonScriptV0/Strings/resources.resjson/fr-FR/resources.resjson b/_generated/PythonScriptV0/Strings/resources.resjson/fr-FR/resources.resjson new file mode 100644 index 000000000000..d40807128991 --- /dev/null +++ b/_generated/PythonScriptV0/Strings/resources.resjson/fr-FR/resources.resjson @@ -0,0 +1,23 @@ +{ + "loc.friendlyName": "Script Python", + "loc.helpMarkDown": "[En savoir plus sur cette tâche](https://go.microsoft.com/fwlink/?LinkID=2006181) ou [consulter la documentation de Python](https://www.python.org/doc/)", + "loc.description": "Exécuter un fichier Python ou un script inline", + "loc.instanceNameFormat": "Exécuter un script Python", + "loc.group.displayName.advanced": "Avancé", + "loc.input.label.scriptSource": "Source du script", + "loc.input.help.scriptSource": "Indique si le script est un fichier de l'arborescence source, ou s'il est écrit inline dans cette tâche.", + "loc.input.label.scriptPath": "Chemin du script", + "loc.input.help.scriptPath": "Chemin du script à exécuter. Il doit s'agir d'un chemin complet ou d'un chemin relatif à $(System.DefaultWorkingDirectory).", + "loc.input.label.script": "Script", + "loc.input.help.script": "Script Python à exécuter", + "loc.input.label.arguments": "Arguments", + "loc.input.help.arguments": "Arguments passés à l'exécution du script, disponibles via 'sys.argv'.", + "loc.input.label.pythonInterpreter": "Interpréteur Python", + "loc.input.help.pythonInterpreter": "Chemin absolu de l'interpréteur Python à utiliser. Si vous n'indiquez rien, la tâche utilise l'interpréteur dans PATH.
Exécutez la tâche [Utiliser la version de Python](https://go.microsoft.com/fwlink/?linkid=871498) pour ajouter une version de Python à PATH.", + "loc.input.label.workingDirectory": "Répertoire de travail", + "loc.input.help.workingDirectory": "Répertoire de travail où le script est exécuté. En l'absence d'indication, la valeur System.DefaultWorkingDirectory est utilisée. Pour les builds, cette variable correspond par défaut à la racine du dépôt. Pour les mises en production, elle correspond par défaut à la racine du répertoire d'artefacts.", + "loc.input.label.failOnStderr": "Échec sur une erreur standard", + "loc.input.help.failOnStderr": "Si la valeur est true, cette tâche se solde par un échec si du texte est écrit dans le flux stderr.", + "loc.messages.NotAFile": "Le chemin donné n'est pas un fichier : '%s'.", + "loc.messages.ParameterRequired": "Le paramètre '%s' est obligatoire" +} \ No newline at end of file diff --git a/_generated/PythonScriptV0/Strings/resources.resjson/it-IT/resources.resjson b/_generated/PythonScriptV0/Strings/resources.resjson/it-IT/resources.resjson new file mode 100644 index 000000000000..1b9fc0290b58 --- /dev/null +++ b/_generated/PythonScriptV0/Strings/resources.resjson/it-IT/resources.resjson @@ -0,0 +1,23 @@ +{ + "loc.friendlyName": "Script Python", + "loc.helpMarkDown": "[Altre informazioni su questa attività](https://go.microsoft.com/fwlink/?LinkID=2006181). In alternativa [vedere la documentazione di Python](https://www.python.org/doc/)", + "loc.description": "Esegue un file Python o uno script inline", + "loc.instanceNameFormat": "Esegui uno script Python", + "loc.group.displayName.advanced": "Avanzate", + "loc.input.label.scriptSource": "Origine dello script", + "loc.input.help.scriptSource": "Indica se lo script è un file nell'albero di origine o se viene scritto inline in questa attività.", + "loc.input.label.scriptPath": "Percorso dello script", + "loc.input.help.scriptPath": "Percorso dello script da eseguire. Deve essere un percorso completo o relativo rispetto a `$(System.DefaultWorkingDirectory)`.", + "loc.input.label.script": "Script", + "loc.input.help.script": "Script Python da eseguire", + "loc.input.label.arguments": "Argomenti", + "loc.input.help.arguments": "Argomenti passati all'esecuzione dello script, disponibili tramite `sys.argv`.", + "loc.input.label.pythonInterpreter": "Interprete Python", + "loc.input.help.pythonInterpreter": "Percorso assoluto dell'interprete Python da usare. Se non è specificato, l'attività userà l'interprete indicato in PATH.
Eseguire l'attività [Usa versione di Python] (https://go.microsoft.com/fwlink/?linkid=871498) per aggiungere una versione di Python a PATH.", + "loc.input.label.workingDirectory": "Directory di lavoro", + "loc.input.help.workingDirectory": "Directory di lavoro in cui verrà eseguito lo script. Se non è specificato, verrà usato il valore di `System.DefaultWorkingDirectory`. Per le compilazioni, l'impostazione predefinita di questa variabile è la radice del repository. Per le versioni, l'impostazione predefinita è la radice della directory degli artefatti.", + "loc.input.label.failOnStderr": "Interrompi in caso di STDERR", + "loc.input.help.failOnStderr": "Se è impostato su true, questa attività non riuscirà nel caso in cui venga scritto testo nel flusso STDERR.", + "loc.messages.NotAFile": "Il percorso specificato non è quello di un file: '%s'.", + "loc.messages.ParameterRequired": "Il parametro `%s` è obbligatorio" +} \ No newline at end of file diff --git a/_generated/PythonScriptV0/Strings/resources.resjson/ja-JP/resources.resjson b/_generated/PythonScriptV0/Strings/resources.resjson/ja-JP/resources.resjson new file mode 100644 index 000000000000..69cd7906c320 --- /dev/null +++ b/_generated/PythonScriptV0/Strings/resources.resjson/ja-JP/resources.resjson @@ -0,0 +1,23 @@ +{ + "loc.friendlyName": "Python スクリプト", + "loc.helpMarkDown": "[このタスクの詳細を表示](https://go.microsoft.com/fwlink/?LinkID=2006181)、または [Python のドキュメントを参照](https://www.python.org/doc/)", + "loc.description": "Python ファイルまたはインライン スクリプトを実行します", + "loc.instanceNameFormat": "Python スクリプトを実行する", + "loc.group.displayName.advanced": "詳細設定", + "loc.input.label.scriptSource": "スクリプト ソース", + "loc.input.help.scriptSource": "スクリプトがソース ツリー内のファイルであるか、それともこのタスクにインラインで書き込まれるか。", + "loc.input.label.scriptPath": "スクリプト パス", + "loc.input.help.scriptPath": "実行するスクリプトのパス。完全修飾パスか、または `$(System.DefaultWorkingDirectory)` からの相対パスを指定する必要があります。", + "loc.input.label.script": "スクリプト", + "loc.input.help.script": "実行する Python スクリプトです", + "loc.input.label.arguments": "引数", + "loc.input.help.arguments": "引数がスクリプト実行に渡されました。これらの引数は `sys.argv` を使用して取得できます。", + "loc.input.label.pythonInterpreter": "Python インタープリター", + "loc.input.help.pythonInterpreter": "使用する Python インタープリターの絶対パス。指定しない場合、タスクは PATH に指定されているインタープリターを使用します。
Python バージョンを PATH に追加するには、[Use Python Version](https://go.microsoft.com/fwlink/?linkid=871498) タスクを実行してください。", + "loc.input.label.workingDirectory": "作業ディレクトリ", + "loc.input.help.workingDirectory": "スクリプトが実行される作業ディレクトリです。指定されない場合は、`System.DefaultWorkingDirectory` の値が使用されます。ビルドの場合、この変数の既定値はリポジトリのルートです。リリースの場合、既定値は成果物ディレクトリのルートです。", + "loc.input.label.failOnStderr": "標準エラーで失敗", + "loc.input.help.failOnStderr": "true の場合、stderr ストリームにテキストが書き込まれると、このタスクは失敗します。", + "loc.messages.NotAFile": "指定されたパスは次のファイルへのパスではありません: '%s'。", + "loc.messages.ParameterRequired": "%s' パラメーターは必須です" +} \ No newline at end of file diff --git a/_generated/PythonScriptV0/Strings/resources.resjson/ko-KR/resources.resjson b/_generated/PythonScriptV0/Strings/resources.resjson/ko-KR/resources.resjson new file mode 100644 index 000000000000..801110f348d6 --- /dev/null +++ b/_generated/PythonScriptV0/Strings/resources.resjson/ko-KR/resources.resjson @@ -0,0 +1,23 @@ +{ + "loc.friendlyName": "Python 스크립트", + "loc.helpMarkDown": "[이 작업에 대한 자세한 정보](https://go.microsoft.com/fwlink/?LinkID=2006181) 또는 [Python 설명서 참조](https://www.python.org/doc/)", + "loc.description": "Python 파일 또는 인라인 스크립트를 실행합니다.", + "loc.instanceNameFormat": "Python 스크립트 실행", + "loc.group.displayName.advanced": "고급", + "loc.input.label.scriptSource": "스크립트 소스", + "loc.input.help.scriptSource": "스크립트가 소스 트리의 파일인지, 아니면 이 작업에 인라인으로 작성되었는지 여부입니다.", + "loc.input.label.scriptPath": "스크립트 경로", + "loc.input.help.scriptPath": "실행할 스크립트의 경로입니다. 정규화된 경로이거나 '$(System.DefaultWorkingDirectory)'의 상대 경로여야 합니다.", + "loc.input.label.script": "스크립트", + "loc.input.help.script": "실행할 Python 스크립트입니다.", + "loc.input.label.arguments": "인수", + "loc.input.help.arguments": "'sys.argv'를 통해 제공되는 인수가 스크립트 실행에 전달되었습니다.", + "loc.input.label.pythonInterpreter": "Python 인터프리터", + "loc.input.help.pythonInterpreter": "사용할 Python 인터프리터의 절대 경로입니다. 지정하지 않으면 작업은 PATH의 인터프리터를 사용합니다.
[Python 버전 사용](https://go.microsoft.com/fwlink/?linkid=871498) 작업을 실행하여 python 버전을 PATH에 추가합니다.", + "loc.input.label.workingDirectory": "작업 디렉터리", + "loc.input.help.workingDirectory": "스크립트를 실행할 작업 디렉터리입니다. 지정하지 않으면, 'System.DefaultWorkingDirectory' 값이 사용됩니다. 빌드의 경우 이 변수는 기본적으로 리포지토리의 루트로 설정됩니다. 릴리스의 경우 기본적으로 아티팩트 디렉터리의 루트로 설정됩니다.", + "loc.input.label.failOnStderr": "표준 오류 시 실패", + "loc.input.help.failOnStderr": "true일 경우 stderr 스트림에 텍스트가 기록되면 이 작업은 실패하게 됩니다.", + "loc.messages.NotAFile": "'%s' 파일에 대해 지정된 경로가 없습니다.", + "loc.messages.ParameterRequired": "'%s' 매개 변수가 필요합니다." +} \ No newline at end of file diff --git a/_generated/PythonScriptV0/Strings/resources.resjson/ru-RU/resources.resjson b/_generated/PythonScriptV0/Strings/resources.resjson/ru-RU/resources.resjson new file mode 100644 index 000000000000..63c49525e935 --- /dev/null +++ b/_generated/PythonScriptV0/Strings/resources.resjson/ru-RU/resources.resjson @@ -0,0 +1,23 @@ +{ + "loc.friendlyName": "Скрипт Python", + "loc.helpMarkDown": "[См. дополнительные сведения об этой задаче](https://go.microsoft.com/fwlink/?LinkID=2006181) или [документацию по Python](https://www.python.org/doc/)", + "loc.description": "Запустить файл Python или встроенный скрипт", + "loc.instanceNameFormat": "Запуск скрипта Python", + "loc.group.displayName.advanced": "Дополнительно", + "loc.input.label.scriptSource": "Источник скрипта", + "loc.input.help.scriptSource": "Является ли скрипт файлом в исходном дереве или пишется внутри задачи.", + "loc.input.label.scriptPath": "Путь к скрипту", + "loc.input.help.scriptPath": "Путь к выполняемому скрипту. Это должен быть полный путь или путь относительно \"$(System.DefaultWorkingDirectory)\".", + "loc.input.label.script": "Скрипт", + "loc.input.help.script": "Выполняемый скрипт Python", + "loc.input.label.arguments": "Аргументы", + "loc.input.help.arguments": "Аргументы, передаваемые в выполняемый скрипт и доступные посредством sys.argv.", + "loc.input.label.pythonInterpreter": "Интерпретатор Python", + "loc.input.help.pythonInterpreter": "Абсолютный путь к используемому интерпретатору Python. Если значение не задано, задача будет использовать интерпретатор, указанный в переменной PATH.
Чтобы добавить версию Python в PATH, выполните задачу [Использовать версию Python](https://go.microsoft.com/fwlink/?linkid=871498).", + "loc.input.label.workingDirectory": "Рабочий каталог", + "loc.input.help.workingDirectory": "Рабочий каталог, в котором будет выполняться скрипт. Если не указано, будет использоваться \"System.DefaultWorkingDirectory\". Для сборок эта переменная по умолчанию является корнем репозитория. Для выпусков она по умолчанию является корнем каталога артефактов.", + "loc.input.label.failOnStderr": "Сбой при стандартной ошибке", + "loc.input.help.failOnStderr": "Если задано значение True, задача завершится сбоем при записи любого текста в поток stderr.", + "loc.messages.NotAFile": "Указанный путь не ведет к файлу: \"%s\".", + "loc.messages.ParameterRequired": "Параметр \"%s\" является обязательным" +} \ No newline at end of file diff --git a/_generated/PythonScriptV0/Strings/resources.resjson/zh-CN/resources.resjson b/_generated/PythonScriptV0/Strings/resources.resjson/zh-CN/resources.resjson new file mode 100644 index 000000000000..907244fc8f12 --- /dev/null +++ b/_generated/PythonScriptV0/Strings/resources.resjson/zh-CN/resources.resjson @@ -0,0 +1,23 @@ +{ + "loc.friendlyName": "Python 脚本", + "loc.helpMarkDown": "[详细了解此任务](https://go.microsoft.com/fwlink/?LinkID=2006181)或[参阅 Python 文档](https://www.python.org/doc/)", + "loc.description": "运行 Python 文件或内联脚本", + "loc.instanceNameFormat": "运行 Python 脚本", + "loc.group.displayName.advanced": "高级", + "loc.input.label.scriptSource": "脚本源", + "loc.input.help.scriptSource": "脚本是源树中的文件,还是在此任务中写入的内联文件。", + "loc.input.label.scriptPath": "脚本路径", + "loc.input.help.scriptPath": "要执行的脚本的路径。必须为完全限定的路径或 `$(System.DefaultWorkingDirectory)` 的相对路径", + "loc.input.label.script": "脚本", + "loc.input.help.script": "要运行的 Python 脚本", + "loc.input.label.arguments": "参数", + "loc.input.help.arguments": "传递到脚本执行的参数,可通过 \"sys.argv\" 获取。", + "loc.input.label.pythonInterpreter": "Python 解释器", + "loc.input.help.pythonInterpreter": "要使用的 Python 解释器的绝对路径。如果未指定,则任务将使用 PATH 中的解释器。
运行 [使用 Python 版本](https://go.microsoft.com/fwlink/?linkid=871498)任务将 Python 版本添加到 PATH。", + "loc.input.label.workingDirectory": "工作目录", + "loc.input.help.workingDirectory": "脚本将在其中运行的工作目录。如果未指定,将使用 `System.DefaultWorkingDirectory` 值。对于生成,此变量默认为存储库的根。对于发布,它默认为项目目录的根。", + "loc.input.label.failOnStderr": "因标准错误而失败", + "loc.input.help.failOnStderr": "如果为 true,则在向 stderr 流写入任何文本时,此任务都会失败。", + "loc.messages.NotAFile": "给定路径不是文件:“%s”。", + "loc.messages.ParameterRequired": "“%s”参数是必需的" +} \ No newline at end of file diff --git a/_generated/PythonScriptV0/Strings/resources.resjson/zh-TW/resources.resjson b/_generated/PythonScriptV0/Strings/resources.resjson/zh-TW/resources.resjson new file mode 100644 index 000000000000..50a755d0d158 --- /dev/null +++ b/_generated/PythonScriptV0/Strings/resources.resjson/zh-TW/resources.resjson @@ -0,0 +1,23 @@ +{ + "loc.friendlyName": "Python 指令碼", + "loc.helpMarkDown": "[深入了解此工作](https://go.microsoft.com/fwlink/?LinkID=2006181)或[參閱 Python 文件](https://www.python.org/doc/)", + "loc.description": "執行 Python 檔案或內嵌指令碼", + "loc.instanceNameFormat": "執行 Python 指令碼", + "loc.group.displayName.advanced": "進階", + "loc.input.label.scriptSource": "指令碼來源", + "loc.input.help.scriptSource": "不論指令碼是來源樹狀結構中的檔案,或是已在此工作中內嵌覆寫。", + "loc.input.label.scriptPath": "指令碼路徑", + "loc.input.help.scriptPath": "要執行之指令碼的路徑。必須是完整路徑或相對於 `$(System.DefaultWorkingDirectory)` 的路徑。", + "loc.input.label.script": "指令碼", + "loc.input.help.script": "要執行的 Python 指令碼", + "loc.input.label.arguments": "引數", + "loc.input.help.arguments": "傳遞給指令碼執行的引數,可透過 'sys.argv' 取得。", + "loc.input.label.pythonInterpreter": "Python 解譯器", + "loc.input.help.pythonInterpreter": "要使用的 Python 解譯器絕對路徑。若未指定,工作將會使用 PATH 中的解譯器。
請執行 [使用 Python 版本](https://go.microsoft.com/fwlink/?linkid=871498) 工作將 Python 的版本新增至 PATH。", + "loc.input.label.workingDirectory": "工作目錄", + "loc.input.help.workingDirectory": "指令碼執行所在的工作目錄。如果未指定,則將使用 `System.DefaultWorkingDirectory` 的值。針對組建,此變數會預設為存放庫的根。針對版本,其預設為成品目錄的根。", + "loc.input.label.failOnStderr": "在發生標準錯誤時失敗", + "loc.input.help.failOnStderr": "若此為 true,則任何文字寫入 stderr 資料流時,此工作便會失敗。", + "loc.messages.NotAFile": "指定的路徑不是檔案路徑: '%s'。", + "loc.messages.ParameterRequired": "'%s' 參數為必要" +} \ No newline at end of file diff --git a/_generated/PythonScriptV0/Tests/L0.ts b/_generated/PythonScriptV0/Tests/L0.ts new file mode 100644 index 000000000000..a82dff3cbf7e --- /dev/null +++ b/_generated/PythonScriptV0/Tests/L0.ts @@ -0,0 +1,16 @@ +import fs = require('fs'); +import assert = require('assert'); +import path = require('path'); + +describe('PythonScriptV0 Suite', function () { + before(() => { + }); + + after(() => { + }); + + it('Does a basic hello world test', function(done: Mocha.Done) { + // TODO - add real tests + done(); + }); +}); diff --git a/_generated/PythonScriptV0/ThirdPartyNotice.txt b/_generated/PythonScriptV0/ThirdPartyNotice.txt new file mode 100644 index 000000000000..0f51df67464f --- /dev/null +++ b/_generated/PythonScriptV0/ThirdPartyNotice.txt @@ -0,0 +1,349 @@ + +THIRD-PARTY SOFTWARE NOTICES AND INFORMATION +Do Not Translate or Localize + +This Azure DevOps extension (PythonScriptV0) 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.git) +2. @types/q (git+https://github.com/DefinitelyTyped/DefinitelyTyped.git) +3. @types/uuid (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. uuid (git+https://github.com/kelektiv/node-uuid.git) +13. vsts-task-lib (git+https://github.com/Microsoft/vsts-task-lib.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 + +%% @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/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 + +%% 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 + +%% 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 + +%% 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/PythonScriptV0/icon.png b/_generated/PythonScriptV0/icon.png new file mode 100644 index 000000000000..549bcaa04747 Binary files /dev/null and b/_generated/PythonScriptV0/icon.png differ diff --git a/_generated/PythonScriptV0/icon.svg b/_generated/PythonScriptV0/icon.svg new file mode 100644 index 000000000000..b049726a5f05 --- /dev/null +++ b/_generated/PythonScriptV0/icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/_generated/PythonScriptV0/main.ts b/_generated/PythonScriptV0/main.ts new file mode 100644 index 000000000000..f871af711300 --- /dev/null +++ b/_generated/PythonScriptV0/main.ts @@ -0,0 +1,21 @@ +import * as path from 'path'; +import * as task from 'azure-pipelines-task-lib/task'; +import { pythonScript } from './pythonscript'; + +(async () => { + try { + task.setResourcePath(path.join(__dirname, 'task.json')); + await pythonScript({ + scriptSource: task.getInput('scriptSource', true)!, + scriptPath: task.getPathInput('scriptPath'), + script: task.getInput('script'), + arguments: task.getInput('arguments'), + pythonInterpreter: task.getInput('pythonInterpreter'), // string instead of path: a path will default to the agent's sources directory + workingDirectory: task.getPathInput('workingDirectory'), + failOnStderr: task.getBoolInput('failOnStderr') + }); + task.setResult(task.TaskResult.Succeeded, ""); + } catch (e) { + task.setResult(task.TaskResult.Failed, e.message); + } +})(); diff --git a/_generated/PythonScriptV0/package-lock.json b/_generated/PythonScriptV0/package-lock.json new file mode 100644 index 000000000000..1accfe26f6a5 --- /dev/null +++ b/_generated/PythonScriptV0/package-lock.json @@ -0,0 +1,493 @@ +{ + "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": "16.11.66", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.66.tgz", + "integrity": "sha512-+xvMrGl3eAygKcf5jm+4zA4tbfEgmKM9o6/glTmN0RFVdu2VuFXMYYtRmuv3zTGCgAYMnEZLde3B7BTp+Yxcig==" + }, + "@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.8", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.8.tgz", + "integrity": "sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg==" + }, + "@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==" + }, + "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==" + }, + "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/PythonScriptV0/package.json b/_generated/PythonScriptV0/package.json new file mode 100644 index 000000000000..0201258cffd0 --- /dev/null +++ b/_generated/PythonScriptV0/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": "^16.11.39", + "@types/mocha": "^5.2.7", + "@types/q": "^1.5.4", + "@types/uuid": "^8.3.0", + "azure-pipelines-task-lib": "^5.0.0-preview.0" + }, + "devDependencies": { + "typescript": "4.0.2" + } +} diff --git a/_generated/PythonScriptV0/pythonscript.ts b/_generated/PythonScriptV0/pythonscript.ts new file mode 100644 index 000000000000..829694ae6ea6 --- /dev/null +++ b/_generated/PythonScriptV0/pythonscript.ts @@ -0,0 +1,88 @@ +import * as fs from 'fs'; +import * as path from 'path'; + +import * as task from 'azure-pipelines-task-lib/task'; + +import { v4 as uuidV4 } from 'uuid'; + +interface TaskParameters { + scriptSource: string, + scriptPath?: string, + script?: string, + arguments?: string, + pythonInterpreter?: string, + workingDirectory?: string, + failOnStderr?: boolean +} + +/** + * Check for a parameter at runtime. + * Useful for conditionally-visible, required parameters. + */ +function assertParameter(value: T | undefined, propertyName: string): T { + if (!value) { + throw new Error(task.loc('ParameterRequired', propertyName)); + } + + return value!; +} + +// TODO Enable with TypeScript 2.8 (ensures correct property name in the error message) +// function assertParameter(parameters: TaskParameters, propertyName: T): NonNullable { +// const param = parameters[propertyName]; +// if (!param) { +// throw new Error(task.loc('ParameterRequired', propertyName)); +// } + +// return param!; +// } + +export async function pythonScript(parameters: Readonly): Promise { + // Get the script to run + const scriptPath = await (async () => { + if (parameters.scriptSource.toLowerCase() === 'filepath') { // Run script file + const scriptPath = assertParameter(parameters.scriptPath, 'scriptPath'); + + if (!fs.statSync(scriptPath).isFile()) { + throw new Error(task.loc('NotAFile', scriptPath)); + } + return scriptPath; + } else { // Run inline script + const script = assertParameter(parameters.script, 'script'); + + // Write the script to disk + task.assertAgent('2.115.0'); + const tempDirectory = task.getVariable('agent.tempDirectory') || ""; + task.checkPath(tempDirectory, `${tempDirectory} (agent.tempDirectory)`); + const scriptPath = path.join(tempDirectory, `${uuidV4()}.py`); + await fs.writeFileSync( + scriptPath, + script, + { encoding: 'utf8' }); + + return scriptPath; + } + })(); + + // Create the tool runner + const pythonPath = parameters.pythonInterpreter || task.which('python'); + const python = task.tool(pythonPath).arg(scriptPath); + + // Calling `line` with a falsy argument returns `undefined`, so can't chain this call + if (parameters.arguments) { + python.line(parameters.arguments); + } + + // Run the script + // Use `any` to work around what I suspect are bugs with `IExecOptions`'s type annotations: + // - optional fields need to be typed as optional + // - `errStream` and `outStream` should be `NodeJs.WritableStream`, not `NodeJS.Writable` + await python.exec({ + cwd: parameters.workingDirectory, + failOnStdErr: parameters.failOnStderr, + // Direct all output to stdout, otherwise the output may appear out-of-order since Node buffers its own stdout but not stderr + errStream: process.stdout, + outStream: process.stdout, + ignoreReturnCode: false + }); +} \ No newline at end of file diff --git a/_generated/PythonScriptV0/task.json b/_generated/PythonScriptV0/task.json new file mode 100644 index 000000000000..6b37f2e94671 --- /dev/null +++ b/_generated/PythonScriptV0/task.json @@ -0,0 +1,122 @@ +{ + "id": "6392F95F-7E76-4A18-B3C7-7F078D2F7700", + "name": "PythonScript", + "friendlyName": "Python script", + "description": "Run a Python file or inline script", + "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/python-script", + "helpMarkDown": "[Learn more about this task](https://go.microsoft.com/fwlink/?LinkID=2006181) or [see the Python documentation](https://www.python.org/doc/)", + "category": "Utility", + "visibility": [ + "Build", + "Release" + ], + "runsOn": [ + "Agent", + "DeploymentGroup" + ], + "author": "Microsoft Corporation", + "version": { + "Major": 0, + "Minor": 229, + "Patch": 3 + }, + "demands": [], + "instanceNameFormat": "Run a Python script", + "groups": [ + { + "name": "advanced", + "displayName": "Advanced", + "isExpanded": false + } + ], + "inputs": [ + { + "name": "scriptSource", + "type": "radio", + "label": "Script source", + "required": true, + "defaultValue": "filePath", + "helpMarkDown": "Whether the script is a file in the source tree or is written inline in this task.", + "options": { + "filePath": "File path", + "inline": "Inline" + } + }, + { + "name": "scriptPath", + "type": "filePath", + "label": "Script path", + "visibleRule": "scriptSource = filePath", + "required": true, + "defaultValue": "", + "helpMarkDown": "Path of the script to execute. Must be a fully qualified path or relative to `$(System.DefaultWorkingDirectory)`." + }, + { + "name": "script", + "type": "multiLine", + "label": "Script", + "visibleRule": "scriptSource = inline", + "required": true, + "defaultValue": "", + "properties": { + "resizable": "true", + "rows": "10", + "maxLength": "5000" + }, + "helpMarkDown": "The Python script to run" + }, + { + "name": "arguments", + "type": "string", + "label": "Arguments", + "required": false, + "defaultValue": "", + "helpMarkDown": "Arguments passed to the script execution, available through `sys.argv`." + }, + { + "name": "pythonInterpreter", + "type": "string", + "label": "Python interpreter", + "defaultValue": "", + "required": false, + "helpMarkDown": "Absolute path to the Python interpreter to use. If not specified, the task will use the interpreter in PATH.
Run the [Use Python Version](https://go.microsoft.com/fwlink/?linkid=871498) task to add a version of Python to PATH.", + "groupName": "advanced" + }, + { + "name": "workingDirectory", + "type": "filePath", + "label": "Working directory", + "defaultValue": "", + "required": false, + "helpMarkDown": "The working directory where the script will run. If not specified, the value of `System.DefaultWorkingDirectory` will be used. For builds, this variable defaults to the root of the repository. For releases, it defaults to the root of the artifacts directory.", + "groupName": "advanced" + }, + { + "name": "failOnStderr", + "type": "boolean", + "label": "Fail on standard error", + "defaultValue": "false", + "required": false, + "helpMarkDown": "If this is true, this task will fail if any text is written to the stderr stream.", + "groupName": "advanced" + } + ], + "execution": { + "Node10": { + "target": "main.js", + "argumentFormat": "" + }, + "Node16": { + "target": "main.js", + "argumentFormat": "" + } + }, + "messages": { + "NotAFile": "The given path was not to a file: '%s'.", + "ParameterRequired": "The `%s` parameter is required" + }, + "_buildConfigMapping": { + "Default": "0.229.3", + "Node20-225": "0.229.4" + } +} \ No newline at end of file diff --git a/_generated/PythonScriptV0/task.loc.json b/_generated/PythonScriptV0/task.loc.json new file mode 100644 index 000000000000..1c244b07ba4a --- /dev/null +++ b/_generated/PythonScriptV0/task.loc.json @@ -0,0 +1,122 @@ +{ + "id": "6392F95F-7E76-4A18-B3C7-7F078D2F7700", + "name": "PythonScript", + "friendlyName": "ms-resource:loc.friendlyName", + "description": "ms-resource:loc.description", + "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/python-script", + "helpMarkDown": "ms-resource:loc.helpMarkDown", + "category": "Utility", + "visibility": [ + "Build", + "Release" + ], + "runsOn": [ + "Agent", + "DeploymentGroup" + ], + "author": "Microsoft Corporation", + "version": { + "Major": 0, + "Minor": 229, + "Patch": 3 + }, + "demands": [], + "instanceNameFormat": "ms-resource:loc.instanceNameFormat", + "groups": [ + { + "name": "advanced", + "displayName": "ms-resource:loc.group.displayName.advanced", + "isExpanded": false + } + ], + "inputs": [ + { + "name": "scriptSource", + "type": "radio", + "label": "ms-resource:loc.input.label.scriptSource", + "required": true, + "defaultValue": "filePath", + "helpMarkDown": "ms-resource:loc.input.help.scriptSource", + "options": { + "filePath": "File path", + "inline": "Inline" + } + }, + { + "name": "scriptPath", + "type": "filePath", + "label": "ms-resource:loc.input.label.scriptPath", + "visibleRule": "scriptSource = filePath", + "required": true, + "defaultValue": "", + "helpMarkDown": "ms-resource:loc.input.help.scriptPath" + }, + { + "name": "script", + "type": "multiLine", + "label": "ms-resource:loc.input.label.script", + "visibleRule": "scriptSource = inline", + "required": true, + "defaultValue": "", + "properties": { + "resizable": "true", + "rows": "10", + "maxLength": "5000" + }, + "helpMarkDown": "ms-resource:loc.input.help.script" + }, + { + "name": "arguments", + "type": "string", + "label": "ms-resource:loc.input.label.arguments", + "required": false, + "defaultValue": "", + "helpMarkDown": "ms-resource:loc.input.help.arguments" + }, + { + "name": "pythonInterpreter", + "type": "string", + "label": "ms-resource:loc.input.label.pythonInterpreter", + "defaultValue": "", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.pythonInterpreter", + "groupName": "advanced" + }, + { + "name": "workingDirectory", + "type": "filePath", + "label": "ms-resource:loc.input.label.workingDirectory", + "defaultValue": "", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.workingDirectory", + "groupName": "advanced" + }, + { + "name": "failOnStderr", + "type": "boolean", + "label": "ms-resource:loc.input.label.failOnStderr", + "defaultValue": "false", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.failOnStderr", + "groupName": "advanced" + } + ], + "execution": { + "Node10": { + "target": "main.js", + "argumentFormat": "" + }, + "Node16": { + "target": "main.js", + "argumentFormat": "" + } + }, + "messages": { + "NotAFile": "ms-resource:loc.messages.NotAFile", + "ParameterRequired": "ms-resource:loc.messages.ParameterRequired" + }, + "_buildConfigMapping": { + "Default": "0.229.3", + "Node20-225": "0.229.4" + } +} \ No newline at end of file diff --git a/_generated/PythonScriptV0/tsconfig.json b/_generated/PythonScriptV0/tsconfig.json new file mode 100644 index 000000000000..e2d9151cbddc --- /dev/null +++ b/_generated/PythonScriptV0/tsconfig.json @@ -0,0 +1,7 @@ +{ + "compilerOptions": { + "target": "ES6", + "module": "commonjs", + "strict": true + } +} \ No newline at end of file diff --git a/_generated/PythonScriptV0_Node20/.npmrc b/_generated/PythonScriptV0_Node20/.npmrc new file mode 100644 index 000000000000..5fca0d518be7 --- /dev/null +++ b/_generated/PythonScriptV0_Node20/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true diff --git a/_generated/PythonScriptV0_Node20/Strings/resources.resjson/de-DE/resources.resjson b/_generated/PythonScriptV0_Node20/Strings/resources.resjson/de-DE/resources.resjson new file mode 100644 index 000000000000..414b9cef8eeb --- /dev/null +++ b/_generated/PythonScriptV0_Node20/Strings/resources.resjson/de-DE/resources.resjson @@ -0,0 +1,23 @@ +{ + "loc.friendlyName": "Python-Skript", + "loc.helpMarkDown": "[Weitere Informationen zu dieser Aufgabe](https://go.microsoft.com/fwlink/?LinkID=2006181) oder [Python-Dokumentation anzeigen](https://www.python.org/doc/)", + "loc.description": "Python-Datei oder Inlineskript ausführen", + "loc.instanceNameFormat": "Python-Skript ausführen", + "loc.group.displayName.advanced": "Erweitert", + "loc.input.label.scriptSource": "Skriptquelle", + "loc.input.help.scriptSource": "Gibt an, ob es sich bei dem Skript um eine Datei in der Quellstruktur oder um ein Inlineskript in dieser Aufgabe handelt.", + "loc.input.label.scriptPath": "Skriptpfad", + "loc.input.help.scriptPath": "Der Pfad des auszuführenden Skripts. Es muss sich um einen vollqualifizierten Pfad oder einen Pfad relativ zu \"$(System.DefaultWorkingDirectory)\" handeln.", + "loc.input.label.script": "Skript", + "loc.input.help.script": "Das auszuführende Python-Skript", + "loc.input.label.arguments": "Argumente", + "loc.input.help.arguments": "Argumente, die an die Skriptausführung übergeben werden, verfügbar über \"sys.argv\".", + "loc.input.label.pythonInterpreter": "Python-Interpreter", + "loc.input.help.pythonInterpreter": "Absoluter Pfad zum Python-Interpreter, der verwendet werden soll. Sofern nicht angegeben, verwendet die Aufgabe den Interpreter in PATH.
Führen Sie die Aufgabe [Python-Version verwenden](https://go.microsoft.com/fwlink/?linkid=871498) aus, um eine Python-Version zu PATH hinzuzufügen.", + "loc.input.label.workingDirectory": "Arbeitsverzeichnis", + "loc.input.help.workingDirectory": "Das Arbeitsverzeichnis, in dem das Skript ausgeführt wird. Sofern nicht angegeben, wird der Wert von \"System.DefaultWorkingDirectory\" verwendet. Für Builds ist diese Variable standardmäßig der Stamm des Repositorys. Für Releases wird standardmäßig der Stamm des Artefaktverzeichnisses verwendet.", + "loc.input.label.failOnStderr": "Fehler bei Standardfehler", + "loc.input.help.failOnStderr": "Bei Festlegung auf TRUE wird für diese Aufgabe ein Fehler ausgelöst, wenn Text in den stderr-Stream geschrieben wird.", + "loc.messages.NotAFile": "Der angegebene Pfad verweist nicht auf eine Datei: \"%s\".", + "loc.messages.ParameterRequired": "Der Parameter \"%s\" ist erforderlich." +} \ No newline at end of file diff --git a/_generated/PythonScriptV0_Node20/Strings/resources.resjson/en-US/resources.resjson b/_generated/PythonScriptV0_Node20/Strings/resources.resjson/en-US/resources.resjson new file mode 100644 index 000000000000..917466d920b5 --- /dev/null +++ b/_generated/PythonScriptV0_Node20/Strings/resources.resjson/en-US/resources.resjson @@ -0,0 +1,23 @@ +{ + "loc.friendlyName": "Python script", + "loc.helpMarkDown": "[Learn more about this task](https://go.microsoft.com/fwlink/?LinkID=2006181) or [see the Python documentation](https://www.python.org/doc/)", + "loc.description": "Run a Python file or inline script", + "loc.instanceNameFormat": "Run a Python script", + "loc.group.displayName.advanced": "Advanced", + "loc.input.label.scriptSource": "Script source", + "loc.input.help.scriptSource": "Whether the script is a file in the source tree or is written inline in this task.", + "loc.input.label.scriptPath": "Script path", + "loc.input.help.scriptPath": "Path of the script to execute. Must be a fully qualified path or relative to `$(System.DefaultWorkingDirectory)`.", + "loc.input.label.script": "Script", + "loc.input.help.script": "The Python script to run", + "loc.input.label.arguments": "Arguments", + "loc.input.help.arguments": "Arguments passed to the script execution, available through `sys.argv`.", + "loc.input.label.pythonInterpreter": "Python interpreter", + "loc.input.help.pythonInterpreter": "Absolute path to the Python interpreter to use. If not specified, the task will use the interpreter in PATH.
Run the [Use Python Version](https://go.microsoft.com/fwlink/?linkid=871498) task to add a version of Python to PATH.", + "loc.input.label.workingDirectory": "Working directory", + "loc.input.help.workingDirectory": "The working directory where the script will run. If not specified, the value of `System.DefaultWorkingDirectory` will be used. For builds, this variable defaults to the root of the repository. For releases, it defaults to the root of the artifacts directory.", + "loc.input.label.failOnStderr": "Fail on standard error", + "loc.input.help.failOnStderr": "If this is true, this task will fail if any text is written to the stderr stream.", + "loc.messages.NotAFile": "The given path was not to a file: '%s'.", + "loc.messages.ParameterRequired": "The `%s` parameter is required" +} \ No newline at end of file diff --git a/_generated/PythonScriptV0_Node20/Strings/resources.resjson/es-ES/resources.resjson b/_generated/PythonScriptV0_Node20/Strings/resources.resjson/es-ES/resources.resjson new file mode 100644 index 000000000000..07db036cb1c6 --- /dev/null +++ b/_generated/PythonScriptV0_Node20/Strings/resources.resjson/es-ES/resources.resjson @@ -0,0 +1,23 @@ +{ + "loc.friendlyName": "Script de Python", + "loc.helpMarkDown": "[Obtener más información acerca de esta tarea](https://go.microsoft.com/fwlink/?LinkID=2006181) o [consultar la documentación de Python](https://www.python.org/doc/)", + "loc.description": "Ejecuta un script insertado o un archivo de Python.", + "loc.instanceNameFormat": "Ejecutar un script de Python", + "loc.group.displayName.advanced": "Avanzado", + "loc.input.label.scriptSource": "Origen del script", + "loc.input.help.scriptSource": "Indica si el script es un archivo en el árbol de origen o está escrito en línea en esta tarea.", + "loc.input.label.scriptPath": "Ruta de acceso del script", + "loc.input.help.scriptPath": "Ruta de acceso del script que se va a ejecutar. Debe ser una ruta de acceso completa o relativa a \"$(System.DefaultWorkingDirectory)\".", + "loc.input.label.script": "Script", + "loc.input.help.script": "Script de Python que se va a ejecutar", + "loc.input.label.arguments": "Argumentos", + "loc.input.help.arguments": "Argumentos pasados a la ejecución del script, disponibles a través de \"sys.argv\".", + "loc.input.label.pythonInterpreter": "Intérprete de Python", + "loc.input.help.pythonInterpreter": "Ruta de acceso absoluta al intérprete de Python que se va a usar. Si no se especifica, la tarea usará el intérprete ubicado en PATH.
Ejecute la tarea [Usar versión de Python](https://go.microsoft.com/fwlink/?linkid=871498) para agregar una versión de Python a PATH.", + "loc.input.label.workingDirectory": "Directorio de trabajo", + "loc.input.help.workingDirectory": "Directorio de trabajo en el que se ejecutará el script. Si no se especifica, se usará el valor de \"System.DefaultWorkingDirectory\". En las compilaciones, el valor predeterminado de esta variable es la raíz del repositorio. En las versiones, su valor predeterminado es la raíz del directorio de artefactos.", + "loc.input.label.failOnStderr": "Error si se produce un error estándar", + "loc.input.help.failOnStderr": "Si es true, esta tarea no se realizará cuando se escriba texto en la secuencia stderr.", + "loc.messages.NotAFile": "La ruta de acceso especificada no estaba relacionada con un archivo: \"%s\".", + "loc.messages.ParameterRequired": "El parámetro \"%s\" es obligatorio" +} \ No newline at end of file diff --git a/_generated/PythonScriptV0_Node20/Strings/resources.resjson/fr-FR/resources.resjson b/_generated/PythonScriptV0_Node20/Strings/resources.resjson/fr-FR/resources.resjson new file mode 100644 index 000000000000..d40807128991 --- /dev/null +++ b/_generated/PythonScriptV0_Node20/Strings/resources.resjson/fr-FR/resources.resjson @@ -0,0 +1,23 @@ +{ + "loc.friendlyName": "Script Python", + "loc.helpMarkDown": "[En savoir plus sur cette tâche](https://go.microsoft.com/fwlink/?LinkID=2006181) ou [consulter la documentation de Python](https://www.python.org/doc/)", + "loc.description": "Exécuter un fichier Python ou un script inline", + "loc.instanceNameFormat": "Exécuter un script Python", + "loc.group.displayName.advanced": "Avancé", + "loc.input.label.scriptSource": "Source du script", + "loc.input.help.scriptSource": "Indique si le script est un fichier de l'arborescence source, ou s'il est écrit inline dans cette tâche.", + "loc.input.label.scriptPath": "Chemin du script", + "loc.input.help.scriptPath": "Chemin du script à exécuter. Il doit s'agir d'un chemin complet ou d'un chemin relatif à $(System.DefaultWorkingDirectory).", + "loc.input.label.script": "Script", + "loc.input.help.script": "Script Python à exécuter", + "loc.input.label.arguments": "Arguments", + "loc.input.help.arguments": "Arguments passés à l'exécution du script, disponibles via 'sys.argv'.", + "loc.input.label.pythonInterpreter": "Interpréteur Python", + "loc.input.help.pythonInterpreter": "Chemin absolu de l'interpréteur Python à utiliser. Si vous n'indiquez rien, la tâche utilise l'interpréteur dans PATH.
Exécutez la tâche [Utiliser la version de Python](https://go.microsoft.com/fwlink/?linkid=871498) pour ajouter une version de Python à PATH.", + "loc.input.label.workingDirectory": "Répertoire de travail", + "loc.input.help.workingDirectory": "Répertoire de travail où le script est exécuté. En l'absence d'indication, la valeur System.DefaultWorkingDirectory est utilisée. Pour les builds, cette variable correspond par défaut à la racine du dépôt. Pour les mises en production, elle correspond par défaut à la racine du répertoire d'artefacts.", + "loc.input.label.failOnStderr": "Échec sur une erreur standard", + "loc.input.help.failOnStderr": "Si la valeur est true, cette tâche se solde par un échec si du texte est écrit dans le flux stderr.", + "loc.messages.NotAFile": "Le chemin donné n'est pas un fichier : '%s'.", + "loc.messages.ParameterRequired": "Le paramètre '%s' est obligatoire" +} \ No newline at end of file diff --git a/_generated/PythonScriptV0_Node20/Strings/resources.resjson/it-IT/resources.resjson b/_generated/PythonScriptV0_Node20/Strings/resources.resjson/it-IT/resources.resjson new file mode 100644 index 000000000000..1b9fc0290b58 --- /dev/null +++ b/_generated/PythonScriptV0_Node20/Strings/resources.resjson/it-IT/resources.resjson @@ -0,0 +1,23 @@ +{ + "loc.friendlyName": "Script Python", + "loc.helpMarkDown": "[Altre informazioni su questa attività](https://go.microsoft.com/fwlink/?LinkID=2006181). In alternativa [vedere la documentazione di Python](https://www.python.org/doc/)", + "loc.description": "Esegue un file Python o uno script inline", + "loc.instanceNameFormat": "Esegui uno script Python", + "loc.group.displayName.advanced": "Avanzate", + "loc.input.label.scriptSource": "Origine dello script", + "loc.input.help.scriptSource": "Indica se lo script è un file nell'albero di origine o se viene scritto inline in questa attività.", + "loc.input.label.scriptPath": "Percorso dello script", + "loc.input.help.scriptPath": "Percorso dello script da eseguire. Deve essere un percorso completo o relativo rispetto a `$(System.DefaultWorkingDirectory)`.", + "loc.input.label.script": "Script", + "loc.input.help.script": "Script Python da eseguire", + "loc.input.label.arguments": "Argomenti", + "loc.input.help.arguments": "Argomenti passati all'esecuzione dello script, disponibili tramite `sys.argv`.", + "loc.input.label.pythonInterpreter": "Interprete Python", + "loc.input.help.pythonInterpreter": "Percorso assoluto dell'interprete Python da usare. Se non è specificato, l'attività userà l'interprete indicato in PATH.
Eseguire l'attività [Usa versione di Python] (https://go.microsoft.com/fwlink/?linkid=871498) per aggiungere una versione di Python a PATH.", + "loc.input.label.workingDirectory": "Directory di lavoro", + "loc.input.help.workingDirectory": "Directory di lavoro in cui verrà eseguito lo script. Se non è specificato, verrà usato il valore di `System.DefaultWorkingDirectory`. Per le compilazioni, l'impostazione predefinita di questa variabile è la radice del repository. Per le versioni, l'impostazione predefinita è la radice della directory degli artefatti.", + "loc.input.label.failOnStderr": "Interrompi in caso di STDERR", + "loc.input.help.failOnStderr": "Se è impostato su true, questa attività non riuscirà nel caso in cui venga scritto testo nel flusso STDERR.", + "loc.messages.NotAFile": "Il percorso specificato non è quello di un file: '%s'.", + "loc.messages.ParameterRequired": "Il parametro `%s` è obbligatorio" +} \ No newline at end of file diff --git a/_generated/PythonScriptV0_Node20/Strings/resources.resjson/ja-JP/resources.resjson b/_generated/PythonScriptV0_Node20/Strings/resources.resjson/ja-JP/resources.resjson new file mode 100644 index 000000000000..69cd7906c320 --- /dev/null +++ b/_generated/PythonScriptV0_Node20/Strings/resources.resjson/ja-JP/resources.resjson @@ -0,0 +1,23 @@ +{ + "loc.friendlyName": "Python スクリプト", + "loc.helpMarkDown": "[このタスクの詳細を表示](https://go.microsoft.com/fwlink/?LinkID=2006181)、または [Python のドキュメントを参照](https://www.python.org/doc/)", + "loc.description": "Python ファイルまたはインライン スクリプトを実行します", + "loc.instanceNameFormat": "Python スクリプトを実行する", + "loc.group.displayName.advanced": "詳細設定", + "loc.input.label.scriptSource": "スクリプト ソース", + "loc.input.help.scriptSource": "スクリプトがソース ツリー内のファイルであるか、それともこのタスクにインラインで書き込まれるか。", + "loc.input.label.scriptPath": "スクリプト パス", + "loc.input.help.scriptPath": "実行するスクリプトのパス。完全修飾パスか、または `$(System.DefaultWorkingDirectory)` からの相対パスを指定する必要があります。", + "loc.input.label.script": "スクリプト", + "loc.input.help.script": "実行する Python スクリプトです", + "loc.input.label.arguments": "引数", + "loc.input.help.arguments": "引数がスクリプト実行に渡されました。これらの引数は `sys.argv` を使用して取得できます。", + "loc.input.label.pythonInterpreter": "Python インタープリター", + "loc.input.help.pythonInterpreter": "使用する Python インタープリターの絶対パス。指定しない場合、タスクは PATH に指定されているインタープリターを使用します。
Python バージョンを PATH に追加するには、[Use Python Version](https://go.microsoft.com/fwlink/?linkid=871498) タスクを実行してください。", + "loc.input.label.workingDirectory": "作業ディレクトリ", + "loc.input.help.workingDirectory": "スクリプトが実行される作業ディレクトリです。指定されない場合は、`System.DefaultWorkingDirectory` の値が使用されます。ビルドの場合、この変数の既定値はリポジトリのルートです。リリースの場合、既定値は成果物ディレクトリのルートです。", + "loc.input.label.failOnStderr": "標準エラーで失敗", + "loc.input.help.failOnStderr": "true の場合、stderr ストリームにテキストが書き込まれると、このタスクは失敗します。", + "loc.messages.NotAFile": "指定されたパスは次のファイルへのパスではありません: '%s'。", + "loc.messages.ParameterRequired": "%s' パラメーターは必須です" +} \ No newline at end of file diff --git a/_generated/PythonScriptV0_Node20/Strings/resources.resjson/ko-KR/resources.resjson b/_generated/PythonScriptV0_Node20/Strings/resources.resjson/ko-KR/resources.resjson new file mode 100644 index 000000000000..801110f348d6 --- /dev/null +++ b/_generated/PythonScriptV0_Node20/Strings/resources.resjson/ko-KR/resources.resjson @@ -0,0 +1,23 @@ +{ + "loc.friendlyName": "Python 스크립트", + "loc.helpMarkDown": "[이 작업에 대한 자세한 정보](https://go.microsoft.com/fwlink/?LinkID=2006181) 또는 [Python 설명서 참조](https://www.python.org/doc/)", + "loc.description": "Python 파일 또는 인라인 스크립트를 실행합니다.", + "loc.instanceNameFormat": "Python 스크립트 실행", + "loc.group.displayName.advanced": "고급", + "loc.input.label.scriptSource": "스크립트 소스", + "loc.input.help.scriptSource": "스크립트가 소스 트리의 파일인지, 아니면 이 작업에 인라인으로 작성되었는지 여부입니다.", + "loc.input.label.scriptPath": "스크립트 경로", + "loc.input.help.scriptPath": "실행할 스크립트의 경로입니다. 정규화된 경로이거나 '$(System.DefaultWorkingDirectory)'의 상대 경로여야 합니다.", + "loc.input.label.script": "스크립트", + "loc.input.help.script": "실행할 Python 스크립트입니다.", + "loc.input.label.arguments": "인수", + "loc.input.help.arguments": "'sys.argv'를 통해 제공되는 인수가 스크립트 실행에 전달되었습니다.", + "loc.input.label.pythonInterpreter": "Python 인터프리터", + "loc.input.help.pythonInterpreter": "사용할 Python 인터프리터의 절대 경로입니다. 지정하지 않으면 작업은 PATH의 인터프리터를 사용합니다.
[Python 버전 사용](https://go.microsoft.com/fwlink/?linkid=871498) 작업을 실행하여 python 버전을 PATH에 추가합니다.", + "loc.input.label.workingDirectory": "작업 디렉터리", + "loc.input.help.workingDirectory": "스크립트를 실행할 작업 디렉터리입니다. 지정하지 않으면, 'System.DefaultWorkingDirectory' 값이 사용됩니다. 빌드의 경우 이 변수는 기본적으로 리포지토리의 루트로 설정됩니다. 릴리스의 경우 기본적으로 아티팩트 디렉터리의 루트로 설정됩니다.", + "loc.input.label.failOnStderr": "표준 오류 시 실패", + "loc.input.help.failOnStderr": "true일 경우 stderr 스트림에 텍스트가 기록되면 이 작업은 실패하게 됩니다.", + "loc.messages.NotAFile": "'%s' 파일에 대해 지정된 경로가 없습니다.", + "loc.messages.ParameterRequired": "'%s' 매개 변수가 필요합니다." +} \ No newline at end of file diff --git a/_generated/PythonScriptV0_Node20/Strings/resources.resjson/ru-RU/resources.resjson b/_generated/PythonScriptV0_Node20/Strings/resources.resjson/ru-RU/resources.resjson new file mode 100644 index 000000000000..63c49525e935 --- /dev/null +++ b/_generated/PythonScriptV0_Node20/Strings/resources.resjson/ru-RU/resources.resjson @@ -0,0 +1,23 @@ +{ + "loc.friendlyName": "Скрипт Python", + "loc.helpMarkDown": "[См. дополнительные сведения об этой задаче](https://go.microsoft.com/fwlink/?LinkID=2006181) или [документацию по Python](https://www.python.org/doc/)", + "loc.description": "Запустить файл Python или встроенный скрипт", + "loc.instanceNameFormat": "Запуск скрипта Python", + "loc.group.displayName.advanced": "Дополнительно", + "loc.input.label.scriptSource": "Источник скрипта", + "loc.input.help.scriptSource": "Является ли скрипт файлом в исходном дереве или пишется внутри задачи.", + "loc.input.label.scriptPath": "Путь к скрипту", + "loc.input.help.scriptPath": "Путь к выполняемому скрипту. Это должен быть полный путь или путь относительно \"$(System.DefaultWorkingDirectory)\".", + "loc.input.label.script": "Скрипт", + "loc.input.help.script": "Выполняемый скрипт Python", + "loc.input.label.arguments": "Аргументы", + "loc.input.help.arguments": "Аргументы, передаваемые в выполняемый скрипт и доступные посредством sys.argv.", + "loc.input.label.pythonInterpreter": "Интерпретатор Python", + "loc.input.help.pythonInterpreter": "Абсолютный путь к используемому интерпретатору Python. Если значение не задано, задача будет использовать интерпретатор, указанный в переменной PATH.
Чтобы добавить версию Python в PATH, выполните задачу [Использовать версию Python](https://go.microsoft.com/fwlink/?linkid=871498).", + "loc.input.label.workingDirectory": "Рабочий каталог", + "loc.input.help.workingDirectory": "Рабочий каталог, в котором будет выполняться скрипт. Если не указано, будет использоваться \"System.DefaultWorkingDirectory\". Для сборок эта переменная по умолчанию является корнем репозитория. Для выпусков она по умолчанию является корнем каталога артефактов.", + "loc.input.label.failOnStderr": "Сбой при стандартной ошибке", + "loc.input.help.failOnStderr": "Если задано значение True, задача завершится сбоем при записи любого текста в поток stderr.", + "loc.messages.NotAFile": "Указанный путь не ведет к файлу: \"%s\".", + "loc.messages.ParameterRequired": "Параметр \"%s\" является обязательным" +} \ No newline at end of file diff --git a/_generated/PythonScriptV0_Node20/Strings/resources.resjson/zh-CN/resources.resjson b/_generated/PythonScriptV0_Node20/Strings/resources.resjson/zh-CN/resources.resjson new file mode 100644 index 000000000000..907244fc8f12 --- /dev/null +++ b/_generated/PythonScriptV0_Node20/Strings/resources.resjson/zh-CN/resources.resjson @@ -0,0 +1,23 @@ +{ + "loc.friendlyName": "Python 脚本", + "loc.helpMarkDown": "[详细了解此任务](https://go.microsoft.com/fwlink/?LinkID=2006181)或[参阅 Python 文档](https://www.python.org/doc/)", + "loc.description": "运行 Python 文件或内联脚本", + "loc.instanceNameFormat": "运行 Python 脚本", + "loc.group.displayName.advanced": "高级", + "loc.input.label.scriptSource": "脚本源", + "loc.input.help.scriptSource": "脚本是源树中的文件,还是在此任务中写入的内联文件。", + "loc.input.label.scriptPath": "脚本路径", + "loc.input.help.scriptPath": "要执行的脚本的路径。必须为完全限定的路径或 `$(System.DefaultWorkingDirectory)` 的相对路径", + "loc.input.label.script": "脚本", + "loc.input.help.script": "要运行的 Python 脚本", + "loc.input.label.arguments": "参数", + "loc.input.help.arguments": "传递到脚本执行的参数,可通过 \"sys.argv\" 获取。", + "loc.input.label.pythonInterpreter": "Python 解释器", + "loc.input.help.pythonInterpreter": "要使用的 Python 解释器的绝对路径。如果未指定,则任务将使用 PATH 中的解释器。
运行 [使用 Python 版本](https://go.microsoft.com/fwlink/?linkid=871498)任务将 Python 版本添加到 PATH。", + "loc.input.label.workingDirectory": "工作目录", + "loc.input.help.workingDirectory": "脚本将在其中运行的工作目录。如果未指定,将使用 `System.DefaultWorkingDirectory` 值。对于生成,此变量默认为存储库的根。对于发布,它默认为项目目录的根。", + "loc.input.label.failOnStderr": "因标准错误而失败", + "loc.input.help.failOnStderr": "如果为 true,则在向 stderr 流写入任何文本时,此任务都会失败。", + "loc.messages.NotAFile": "给定路径不是文件:“%s”。", + "loc.messages.ParameterRequired": "“%s”参数是必需的" +} \ No newline at end of file diff --git a/_generated/PythonScriptV0_Node20/Strings/resources.resjson/zh-TW/resources.resjson b/_generated/PythonScriptV0_Node20/Strings/resources.resjson/zh-TW/resources.resjson new file mode 100644 index 000000000000..50a755d0d158 --- /dev/null +++ b/_generated/PythonScriptV0_Node20/Strings/resources.resjson/zh-TW/resources.resjson @@ -0,0 +1,23 @@ +{ + "loc.friendlyName": "Python 指令碼", + "loc.helpMarkDown": "[深入了解此工作](https://go.microsoft.com/fwlink/?LinkID=2006181)或[參閱 Python 文件](https://www.python.org/doc/)", + "loc.description": "執行 Python 檔案或內嵌指令碼", + "loc.instanceNameFormat": "執行 Python 指令碼", + "loc.group.displayName.advanced": "進階", + "loc.input.label.scriptSource": "指令碼來源", + "loc.input.help.scriptSource": "不論指令碼是來源樹狀結構中的檔案,或是已在此工作中內嵌覆寫。", + "loc.input.label.scriptPath": "指令碼路徑", + "loc.input.help.scriptPath": "要執行之指令碼的路徑。必須是完整路徑或相對於 `$(System.DefaultWorkingDirectory)` 的路徑。", + "loc.input.label.script": "指令碼", + "loc.input.help.script": "要執行的 Python 指令碼", + "loc.input.label.arguments": "引數", + "loc.input.help.arguments": "傳遞給指令碼執行的引數,可透過 'sys.argv' 取得。", + "loc.input.label.pythonInterpreter": "Python 解譯器", + "loc.input.help.pythonInterpreter": "要使用的 Python 解譯器絕對路徑。若未指定,工作將會使用 PATH 中的解譯器。
請執行 [使用 Python 版本](https://go.microsoft.com/fwlink/?linkid=871498) 工作將 Python 的版本新增至 PATH。", + "loc.input.label.workingDirectory": "工作目錄", + "loc.input.help.workingDirectory": "指令碼執行所在的工作目錄。如果未指定,則將使用 `System.DefaultWorkingDirectory` 的值。針對組建,此變數會預設為存放庫的根。針對版本,其預設為成品目錄的根。", + "loc.input.label.failOnStderr": "在發生標準錯誤時失敗", + "loc.input.help.failOnStderr": "若此為 true,則任何文字寫入 stderr 資料流時,此工作便會失敗。", + "loc.messages.NotAFile": "指定的路徑不是檔案路徑: '%s'。", + "loc.messages.ParameterRequired": "'%s' 參數為必要" +} \ No newline at end of file diff --git a/_generated/PythonScriptV0_Node20/Tests/L0.ts b/_generated/PythonScriptV0_Node20/Tests/L0.ts new file mode 100644 index 000000000000..a82dff3cbf7e --- /dev/null +++ b/_generated/PythonScriptV0_Node20/Tests/L0.ts @@ -0,0 +1,16 @@ +import fs = require('fs'); +import assert = require('assert'); +import path = require('path'); + +describe('PythonScriptV0 Suite', function () { + before(() => { + }); + + after(() => { + }); + + it('Does a basic hello world test', function(done: Mocha.Done) { + // TODO - add real tests + done(); + }); +}); diff --git a/_generated/PythonScriptV0_Node20/ThirdPartyNotice.txt b/_generated/PythonScriptV0_Node20/ThirdPartyNotice.txt new file mode 100644 index 000000000000..0f51df67464f --- /dev/null +++ b/_generated/PythonScriptV0_Node20/ThirdPartyNotice.txt @@ -0,0 +1,349 @@ + +THIRD-PARTY SOFTWARE NOTICES AND INFORMATION +Do Not Translate or Localize + +This Azure DevOps extension (PythonScriptV0) 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.git) +2. @types/q (git+https://github.com/DefinitelyTyped/DefinitelyTyped.git) +3. @types/uuid (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. uuid (git+https://github.com/kelektiv/node-uuid.git) +13. vsts-task-lib (git+https://github.com/Microsoft/vsts-task-lib.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 + +%% @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/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 + +%% 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 + +%% 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 + +%% 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/PythonScriptV0_Node20/icon.png b/_generated/PythonScriptV0_Node20/icon.png new file mode 100644 index 000000000000..549bcaa04747 Binary files /dev/null and b/_generated/PythonScriptV0_Node20/icon.png differ diff --git a/_generated/PythonScriptV0_Node20/icon.svg b/_generated/PythonScriptV0_Node20/icon.svg new file mode 100644 index 000000000000..b049726a5f05 --- /dev/null +++ b/_generated/PythonScriptV0_Node20/icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/_generated/PythonScriptV0_Node20/main.ts b/_generated/PythonScriptV0_Node20/main.ts new file mode 100644 index 000000000000..a8d79e7fdba6 --- /dev/null +++ b/_generated/PythonScriptV0_Node20/main.ts @@ -0,0 +1,23 @@ +import * as path from 'path'; +import * as task from 'azure-pipelines-task-lib/task'; +import { pythonScript } from './pythonscript'; + +(async () => { + let error: any | undefined; + try { + task.setResourcePath(path.join(__dirname, 'task.json')); + await pythonScript({ + scriptSource: task.getInput('scriptSource', true)!, + scriptPath: task.getPathInput('scriptPath'), + script: task.getInput('script'), + arguments: task.getInput('arguments'), + pythonInterpreter: task.getInput('pythonInterpreter'), // string instead of path: a path will default to the agent's sources directory + workingDirectory: task.getPathInput('workingDirectory'), + failOnStderr: task.getBoolInput('failOnStderr') + }); + task.setResult(task.TaskResult.Succeeded, ""); + } catch (e) { + error = e; + task.setResult(task.TaskResult.Failed, error.message); + } +})(); diff --git a/_generated/PythonScriptV0_Node20/package-lock.json b/_generated/PythonScriptV0_Node20/package-lock.json new file mode 100644 index 000000000000..9958ae2fb64e --- /dev/null +++ b/_generated/PythonScriptV0_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/_generated/PythonScriptV0_Node20/package.json b/_generated/PythonScriptV0_Node20/package.json new file mode 100644 index 000000000000..da0857717b9f --- /dev/null +++ b/_generated/PythonScriptV0_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/_generated/PythonScriptV0_Node20/pythonscript.ts b/_generated/PythonScriptV0_Node20/pythonscript.ts new file mode 100644 index 000000000000..829694ae6ea6 --- /dev/null +++ b/_generated/PythonScriptV0_Node20/pythonscript.ts @@ -0,0 +1,88 @@ +import * as fs from 'fs'; +import * as path from 'path'; + +import * as task from 'azure-pipelines-task-lib/task'; + +import { v4 as uuidV4 } from 'uuid'; + +interface TaskParameters { + scriptSource: string, + scriptPath?: string, + script?: string, + arguments?: string, + pythonInterpreter?: string, + workingDirectory?: string, + failOnStderr?: boolean +} + +/** + * Check for a parameter at runtime. + * Useful for conditionally-visible, required parameters. + */ +function assertParameter(value: T | undefined, propertyName: string): T { + if (!value) { + throw new Error(task.loc('ParameterRequired', propertyName)); + } + + return value!; +} + +// TODO Enable with TypeScript 2.8 (ensures correct property name in the error message) +// function assertParameter(parameters: TaskParameters, propertyName: T): NonNullable { +// const param = parameters[propertyName]; +// if (!param) { +// throw new Error(task.loc('ParameterRequired', propertyName)); +// } + +// return param!; +// } + +export async function pythonScript(parameters: Readonly): Promise { + // Get the script to run + const scriptPath = await (async () => { + if (parameters.scriptSource.toLowerCase() === 'filepath') { // Run script file + const scriptPath = assertParameter(parameters.scriptPath, 'scriptPath'); + + if (!fs.statSync(scriptPath).isFile()) { + throw new Error(task.loc('NotAFile', scriptPath)); + } + return scriptPath; + } else { // Run inline script + const script = assertParameter(parameters.script, 'script'); + + // Write the script to disk + task.assertAgent('2.115.0'); + const tempDirectory = task.getVariable('agent.tempDirectory') || ""; + task.checkPath(tempDirectory, `${tempDirectory} (agent.tempDirectory)`); + const scriptPath = path.join(tempDirectory, `${uuidV4()}.py`); + await fs.writeFileSync( + scriptPath, + script, + { encoding: 'utf8' }); + + return scriptPath; + } + })(); + + // Create the tool runner + const pythonPath = parameters.pythonInterpreter || task.which('python'); + const python = task.tool(pythonPath).arg(scriptPath); + + // Calling `line` with a falsy argument returns `undefined`, so can't chain this call + if (parameters.arguments) { + python.line(parameters.arguments); + } + + // Run the script + // Use `any` to work around what I suspect are bugs with `IExecOptions`'s type annotations: + // - optional fields need to be typed as optional + // - `errStream` and `outStream` should be `NodeJs.WritableStream`, not `NodeJS.Writable` + await python.exec({ + cwd: parameters.workingDirectory, + failOnStdErr: parameters.failOnStderr, + // Direct all output to stdout, otherwise the output may appear out-of-order since Node buffers its own stdout but not stderr + errStream: process.stdout, + outStream: process.stdout, + ignoreReturnCode: false + }); +} \ No newline at end of file diff --git a/_generated/PythonScriptV0_Node20/task.json b/_generated/PythonScriptV0_Node20/task.json new file mode 100644 index 000000000000..bd5f8a919b42 --- /dev/null +++ b/_generated/PythonScriptV0_Node20/task.json @@ -0,0 +1,126 @@ +{ + "id": "6392F95F-7E76-4A18-B3C7-7F078D2F7700", + "name": "PythonScript", + "friendlyName": "Python script", + "description": "Run a Python file or inline script", + "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/python-script", + "helpMarkDown": "[Learn more about this task](https://go.microsoft.com/fwlink/?LinkID=2006181) or [see the Python documentation](https://www.python.org/doc/)", + "category": "Utility", + "visibility": [ + "Build", + "Release" + ], + "runsOn": [ + "Agent", + "DeploymentGroup" + ], + "author": "Microsoft Corporation", + "version": { + "Major": 0, + "Minor": 229, + "Patch": 4 + }, + "demands": [], + "instanceNameFormat": "Run a Python script", + "groups": [ + { + "name": "advanced", + "displayName": "Advanced", + "isExpanded": false + } + ], + "inputs": [ + { + "name": "scriptSource", + "type": "radio", + "label": "Script source", + "required": true, + "defaultValue": "filePath", + "helpMarkDown": "Whether the script is a file in the source tree or is written inline in this task.", + "options": { + "filePath": "File path", + "inline": "Inline" + } + }, + { + "name": "scriptPath", + "type": "filePath", + "label": "Script path", + "visibleRule": "scriptSource = filePath", + "required": true, + "defaultValue": "", + "helpMarkDown": "Path of the script to execute. Must be a fully qualified path or relative to `$(System.DefaultWorkingDirectory)`." + }, + { + "name": "script", + "type": "multiLine", + "label": "Script", + "visibleRule": "scriptSource = inline", + "required": true, + "defaultValue": "", + "properties": { + "resizable": "true", + "rows": "10", + "maxLength": "5000" + }, + "helpMarkDown": "The Python script to run" + }, + { + "name": "arguments", + "type": "string", + "label": "Arguments", + "required": false, + "defaultValue": "", + "helpMarkDown": "Arguments passed to the script execution, available through `sys.argv`." + }, + { + "name": "pythonInterpreter", + "type": "string", + "label": "Python interpreter", + "defaultValue": "", + "required": false, + "helpMarkDown": "Absolute path to the Python interpreter to use. If not specified, the task will use the interpreter in PATH.
Run the [Use Python Version](https://go.microsoft.com/fwlink/?linkid=871498) task to add a version of Python to PATH.", + "groupName": "advanced" + }, + { + "name": "workingDirectory", + "type": "filePath", + "label": "Working directory", + "defaultValue": "", + "required": false, + "helpMarkDown": "The working directory where the script will run. If not specified, the value of `System.DefaultWorkingDirectory` will be used. For builds, this variable defaults to the root of the repository. For releases, it defaults to the root of the artifacts directory.", + "groupName": "advanced" + }, + { + "name": "failOnStderr", + "type": "boolean", + "label": "Fail on standard error", + "defaultValue": "false", + "required": false, + "helpMarkDown": "If this is true, this task will fail if any text is written to the stderr stream.", + "groupName": "advanced" + } + ], + "execution": { + "Node10": { + "target": "main.js", + "argumentFormat": "" + }, + "Node16": { + "target": "main.js", + "argumentFormat": "" + }, + "Node20": { + "target": "main.js", + "argumentFormat": "" + } + }, + "messages": { + "NotAFile": "The given path was not to a file: '%s'.", + "ParameterRequired": "The `%s` parameter is required" + }, + "_buildConfigMapping": { + "Default": "0.229.3", + "Node20-225": "0.229.4" + } +} \ No newline at end of file diff --git a/_generated/PythonScriptV0_Node20/task.loc.json b/_generated/PythonScriptV0_Node20/task.loc.json new file mode 100644 index 000000000000..77da6ad9a409 --- /dev/null +++ b/_generated/PythonScriptV0_Node20/task.loc.json @@ -0,0 +1,126 @@ +{ + "id": "6392F95F-7E76-4A18-B3C7-7F078D2F7700", + "name": "PythonScript", + "friendlyName": "ms-resource:loc.friendlyName", + "description": "ms-resource:loc.description", + "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/python-script", + "helpMarkDown": "ms-resource:loc.helpMarkDown", + "category": "Utility", + "visibility": [ + "Build", + "Release" + ], + "runsOn": [ + "Agent", + "DeploymentGroup" + ], + "author": "Microsoft Corporation", + "version": { + "Major": 0, + "Minor": 229, + "Patch": 4 + }, + "demands": [], + "instanceNameFormat": "ms-resource:loc.instanceNameFormat", + "groups": [ + { + "name": "advanced", + "displayName": "ms-resource:loc.group.displayName.advanced", + "isExpanded": false + } + ], + "inputs": [ + { + "name": "scriptSource", + "type": "radio", + "label": "ms-resource:loc.input.label.scriptSource", + "required": true, + "defaultValue": "filePath", + "helpMarkDown": "ms-resource:loc.input.help.scriptSource", + "options": { + "filePath": "File path", + "inline": "Inline" + } + }, + { + "name": "scriptPath", + "type": "filePath", + "label": "ms-resource:loc.input.label.scriptPath", + "visibleRule": "scriptSource = filePath", + "required": true, + "defaultValue": "", + "helpMarkDown": "ms-resource:loc.input.help.scriptPath" + }, + { + "name": "script", + "type": "multiLine", + "label": "ms-resource:loc.input.label.script", + "visibleRule": "scriptSource = inline", + "required": true, + "defaultValue": "", + "properties": { + "resizable": "true", + "rows": "10", + "maxLength": "5000" + }, + "helpMarkDown": "ms-resource:loc.input.help.script" + }, + { + "name": "arguments", + "type": "string", + "label": "ms-resource:loc.input.label.arguments", + "required": false, + "defaultValue": "", + "helpMarkDown": "ms-resource:loc.input.help.arguments" + }, + { + "name": "pythonInterpreter", + "type": "string", + "label": "ms-resource:loc.input.label.pythonInterpreter", + "defaultValue": "", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.pythonInterpreter", + "groupName": "advanced" + }, + { + "name": "workingDirectory", + "type": "filePath", + "label": "ms-resource:loc.input.label.workingDirectory", + "defaultValue": "", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.workingDirectory", + "groupName": "advanced" + }, + { + "name": "failOnStderr", + "type": "boolean", + "label": "ms-resource:loc.input.label.failOnStderr", + "defaultValue": "false", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.failOnStderr", + "groupName": "advanced" + } + ], + "execution": { + "Node10": { + "target": "main.js", + "argumentFormat": "" + }, + "Node16": { + "target": "main.js", + "argumentFormat": "" + }, + "Node20": { + "target": "main.js", + "argumentFormat": "" + } + }, + "messages": { + "NotAFile": "ms-resource:loc.messages.NotAFile", + "ParameterRequired": "ms-resource:loc.messages.ParameterRequired" + }, + "_buildConfigMapping": { + "Default": "0.229.3", + "Node20-225": "0.229.4" + } +} \ No newline at end of file diff --git a/_generated/PythonScriptV0_Node20/tsconfig.json b/_generated/PythonScriptV0_Node20/tsconfig.json new file mode 100644 index 000000000000..e2d9151cbddc --- /dev/null +++ b/_generated/PythonScriptV0_Node20/tsconfig.json @@ -0,0 +1,7 @@ +{ + "compilerOptions": { + "target": "ES6", + "module": "commonjs", + "strict": true + } +} \ No newline at end of file diff --git a/_generated/ShellScriptV2.versionmap.txt b/_generated/ShellScriptV2.versionmap.txt new file mode 100644 index 000000000000..4a312fb3b52c --- /dev/null +++ b/_generated/ShellScriptV2.versionmap.txt @@ -0,0 +1,2 @@ +Default|2.229.3 +Node20-225|2.229.4 diff --git a/_generated/ShellScriptV2/Strings/resources.resjson/de-DE/resources.resjson b/_generated/ShellScriptV2/Strings/resources.resjson/de-DE/resources.resjson new file mode 100644 index 000000000000..ccc33078789e --- /dev/null +++ b/_generated/ShellScriptV2/Strings/resources.resjson/de-DE/resources.resjson @@ -0,0 +1,19 @@ +{ + "loc.friendlyName": "Shellskript", + "loc.helpMarkDown": "[Weitere Informationen zu dieser Aufgabe](https://go.microsoft.com/fwlink/?LinkID=613738)", + "loc.description": "Shellskript mithilfe von Bash ausführen", + "loc.instanceNameFormat": "Shellskript $(scriptPath)", + "loc.group.displayName.advanced": "Erweitert", + "loc.input.label.scriptPath": "Skriptpfad", + "loc.input.help.scriptPath": "Der relative Pfad vom Repositorystamm der auszuführenden Shellskriptdatei.", + "loc.input.label.args": "Argumente", + "loc.input.help.args": "An das Shellskript übergebene Argumente", + "loc.input.label.disableAutoCwd": "Arbeitsverzeichnis angeben", + "loc.input.help.disableAutoCwd": "Das Standardverhalten besteht darin, das Arbeitsverzeichnis auf den Skriptspeicherort festzulegen. Auf diese Weise können Sie optional ein anderes Arbeitsverzeichnis angeben.", + "loc.input.label.cwd": "Arbeitsverzeichnis", + "loc.input.help.cwd": "Das aktuelle Arbeitsverzeichnis, in dem das Skript ausgeführt wird. Wenn keine Angabe erfolgt, wird der Stamm des Repositorys (Build) oder der Artefakte (Release) verwendet, das \"$(System.DefaultWorkingDirectory)\" lautet.", + "loc.input.label.failOnStandardError": "Fehler bei Standardfehler.", + "loc.input.help.failOnStandardError": "Wenn dies wahr ist, tritt ein Aufgabenfehler auf, wenn Fehler in den StandardError-Stream geschrieben werden.", + "loc.messages.BashReturnCode": "Bash wurde mit dem folgenden Rückgabecode beendet: %d", + "loc.messages.BashFailed": "Bash-Fehler: %s" +} \ No newline at end of file diff --git a/_generated/ShellScriptV2/Strings/resources.resjson/en-US/resources.resjson b/_generated/ShellScriptV2/Strings/resources.resjson/en-US/resources.resjson new file mode 100644 index 000000000000..86393f7e2a75 --- /dev/null +++ b/_generated/ShellScriptV2/Strings/resources.resjson/en-US/resources.resjson @@ -0,0 +1,19 @@ +{ + "loc.friendlyName": "Shell script", + "loc.helpMarkDown": "[Learn more about this task](https://go.microsoft.com/fwlink/?LinkID=613738)", + "loc.description": "Run a shell script using Bash", + "loc.instanceNameFormat": "Shell Script $(scriptPath)", + "loc.group.displayName.advanced": "Advanced", + "loc.input.label.scriptPath": "Script Path", + "loc.input.help.scriptPath": "Relative path from repo root of the shell script file to run.", + "loc.input.label.args": "Arguments", + "loc.input.help.args": "Arguments passed to the shell script", + "loc.input.label.disableAutoCwd": "Specify Working Directory", + "loc.input.help.disableAutoCwd": "The default behavior is to set the working directory to the script location. This enables you to optionally specify a different working directory.", + "loc.input.label.cwd": "Working Directory", + "loc.input.help.cwd": "Current working directory where the script is run. Empty is the root of the repo (build) or artifacts (release), which is $(System.DefaultWorkingDirectory).", + "loc.input.label.failOnStandardError": "Fail on Standard Error", + "loc.input.help.failOnStandardError": "If this is true, this task will fail if any errors are written to the StandardError stream.", + "loc.messages.BashReturnCode": "Bash exited with return code: %d", + "loc.messages.BashFailed": "Bash failed with error: %s" +} \ No newline at end of file diff --git a/_generated/ShellScriptV2/Strings/resources.resjson/es-ES/resources.resjson b/_generated/ShellScriptV2/Strings/resources.resjson/es-ES/resources.resjson new file mode 100644 index 000000000000..ef3e8e8bd14c --- /dev/null +++ b/_generated/ShellScriptV2/Strings/resources.resjson/es-ES/resources.resjson @@ -0,0 +1,19 @@ +{ + "loc.friendlyName": "Script de shell", + "loc.helpMarkDown": "[Obtener más información acerca de esta tarea](https://go.microsoft.com/fwlink/?LinkID=613738)", + "loc.description": "Ejecutar un script de shell con Bash", + "loc.instanceNameFormat": "Script de shell $(scriptPath)", + "loc.group.displayName.advanced": "Avanzado", + "loc.input.label.scriptPath": "Ruta de acceso del script", + "loc.input.help.scriptPath": "Ruta de acceso relativa de la raíz del repositorio del archivo de script de shell que se va a ejecutar.", + "loc.input.label.args": "Argumentos", + "loc.input.help.args": "Argumentos pasados al script de shell", + "loc.input.label.disableAutoCwd": "Especificar directorio de trabajo", + "loc.input.help.disableAutoCwd": "El comportamiento predeterminado es establecer el directorio de trabajo en la ubicación del script. Esto le permite especificar opcionalmente un directorio de trabajo distinto.", + "loc.input.label.cwd": "Directorio de trabajo", + "loc.input.help.cwd": "Directorio de trabajo actual en el que se ejecuta el script. Vacío es la raíz del repositorio (compilación) o artefactos (versión), que es $(System.DefaultWorkingDirectory).", + "loc.input.label.failOnStandardError": "Error si se produce un error estándar", + "loc.input.help.failOnStandardError": "Si es true, esta tarea no se realizará cuando se registre algún error en la secuencia StandardError.", + "loc.messages.BashReturnCode": "Bash se cerró con el código de retorno: %d", + "loc.messages.BashFailed": "Error de Bash: %s" +} \ No newline at end of file diff --git a/_generated/ShellScriptV2/Strings/resources.resjson/fr-FR/resources.resjson b/_generated/ShellScriptV2/Strings/resources.resjson/fr-FR/resources.resjson new file mode 100644 index 000000000000..d12f7bad5c79 --- /dev/null +++ b/_generated/ShellScriptV2/Strings/resources.resjson/fr-FR/resources.resjson @@ -0,0 +1,19 @@ +{ + "loc.friendlyName": "Script d'interpréteur de commandes", + "loc.helpMarkDown": "[En savoir plus sur cette tâche](https://go.microsoft.com/fwlink/?LinkID=613738)", + "loc.description": "Exécuter un script d'interpréteur de commandes à l'aide de Bash", + "loc.instanceNameFormat": "Script Shell $(scriptPath)", + "loc.group.displayName.advanced": "Avancé", + "loc.input.label.scriptPath": "Chemin d'accès du script", + "loc.input.help.scriptPath": "Chemin relatif de la racine de dépôt du fichier du script shell à exécuter.", + "loc.input.label.args": "Arguments", + "loc.input.help.args": "Arguments passés au script shell", + "loc.input.label.disableAutoCwd": "Spécifier le répertoire de travail", + "loc.input.help.disableAutoCwd": "Le comportement par défaut consiste à définir l'emplacement du script comme répertoire de travail. Vous pouvez ainsi spécifier un autre répertoire de travail si vous le souhaitez.", + "loc.input.label.cwd": "Répertoire de travail", + "loc.input.help.cwd": "Répertoire de travail actif dans lequel le script est exécuté. Une valeur vide représente la racine du dépôt (build) ou des artefacts (mise en production), à savoir $(System.DefaultWorkingDirectory).", + "loc.input.label.failOnStandardError": "Échec sur une erreur standard", + "loc.input.help.failOnStandardError": "Si la valeur est true, cette tâche échoue si des erreurs sont écrites dans le flux de données StandardError.", + "loc.messages.BashReturnCode": "Sortie de Bash. Code de retour : %d", + "loc.messages.BashFailed": "Échec de Bash. Erreur : %s" +} \ No newline at end of file diff --git a/_generated/ShellScriptV2/Strings/resources.resjson/it-IT/resources.resjson b/_generated/ShellScriptV2/Strings/resources.resjson/it-IT/resources.resjson new file mode 100644 index 000000000000..d06d3045a1d8 --- /dev/null +++ b/_generated/ShellScriptV2/Strings/resources.resjson/it-IT/resources.resjson @@ -0,0 +1,19 @@ +{ + "loc.friendlyName": "Script della shell", + "loc.helpMarkDown": "[Altre informazioni su questa attività](https://go.microsoft.com/fwlink/?LinkID=613738)", + "loc.description": "Consente di eseguire uno script della shell con Bash", + "loc.instanceNameFormat": "Script della shell: $(scriptPath)", + "loc.group.displayName.advanced": "Avanzate", + "loc.input.label.scriptPath": "Percorso script", + "loc.input.help.scriptPath": "Percorso relativo dalla radice del repository del file di script della shell da eseguire.", + "loc.input.label.args": "Argomenti", + "loc.input.help.args": "Argomenti passati allo script della shell", + "loc.input.label.disableAutoCwd": "Specifica directory di lavoro", + "loc.input.help.disableAutoCwd": "La directory di lavoro viene in genere impostata sul percorso degli script. In tal modo è possibile specificare una directory di lavoro diversa.", + "loc.input.label.cwd": "Directory di lavoro", + "loc.input.help.cwd": "Directory di lavoro corrente in cui viene eseguito lo script. Se non si specifica un valore, corrisponde alla radice del repository (compilazione) o degli artefatti (versione), ovvero $(System.DefaultWorkingDirectory).", + "loc.input.label.failOnStandardError": "Interrompi in caso di errore standard", + "loc.input.help.failOnStandardError": "Se è impostato su true, questa attività non riuscirà nel caso in cui vengano scritti errori nel flusso StandardError.", + "loc.messages.BashReturnCode": "Bash terminato. Codice restituito: %d", + "loc.messages.BashFailed": "Bash non riuscito. Errore: %s" +} \ No newline at end of file diff --git a/_generated/ShellScriptV2/Strings/resources.resjson/ja-JP/resources.resjson b/_generated/ShellScriptV2/Strings/resources.resjson/ja-JP/resources.resjson new file mode 100644 index 000000000000..d2bfa0531ca3 --- /dev/null +++ b/_generated/ShellScriptV2/Strings/resources.resjson/ja-JP/resources.resjson @@ -0,0 +1,19 @@ +{ + "loc.friendlyName": "シェル スクリプト", + "loc.helpMarkDown": "[このタスクの詳細を表示](https://go.microsoft.com/fwlink/?LinkID=613738)", + "loc.description": "Bash を使用してシェル スクリプトを実行します", + "loc.instanceNameFormat": "シェル スクリプト $(scriptPath)", + "loc.group.displayName.advanced": "詳細設定", + "loc.input.label.scriptPath": "スクリプト パス", + "loc.input.help.scriptPath": "リポジトリのルートを基準に指定した、実行するシェル スクリプト ファイルの相対パス。", + "loc.input.label.args": "引数", + "loc.input.help.args": "シェル スクリプトに渡す引数", + "loc.input.label.disableAutoCwd": "作業ディレクトリを指定する", + "loc.input.help.disableAutoCwd": "既定の動作では、作業ディレクトリがスクリプトの場所に設定されます。これにより必要に応じて、別の作業ディレクトリを指定できるようになります。", + "loc.input.label.cwd": "作業ディレクトリ", + "loc.input.help.cwd": "スクリプトを実行する現行の作業ディレクトリ。空白はリポジトリ (ビルド) または成果物 (リリース) のルートであり、$(System.DefaultWorkingDirectory) となります。", + "loc.input.label.failOnStandardError": "標準エラーで失敗", + "loc.input.help.failOnStandardError": "true の場合、StandardError ストリームにエラーが書き込まれると、このタスクは失敗します。", + "loc.messages.BashReturnCode": "bash は、リターン コードを伴って終了しました: %d", + "loc.messages.BashFailed": "bash でエラーが発生しました: %s" +} \ No newline at end of file diff --git a/_generated/ShellScriptV2/Strings/resources.resjson/ko-KR/resources.resjson b/_generated/ShellScriptV2/Strings/resources.resjson/ko-KR/resources.resjson new file mode 100644 index 000000000000..8427609da1e5 --- /dev/null +++ b/_generated/ShellScriptV2/Strings/resources.resjson/ko-KR/resources.resjson @@ -0,0 +1,19 @@ +{ + "loc.friendlyName": "셸 스크립트", + "loc.helpMarkDown": "[이 작업에 대한 자세한 정보](https://go.microsoft.com/fwlink/?LinkID=613738)", + "loc.description": "Bash를 사용하여 셸 스크립트 실행", + "loc.instanceNameFormat": "셸 스크립트 $(scriptPath)", + "loc.group.displayName.advanced": "고급", + "loc.input.label.scriptPath": "스크립트 경로", + "loc.input.help.scriptPath": "실행할 셸 스크립트 파일의 리포 루트로부터의 상대 경로입니다.", + "loc.input.label.args": "인수", + "loc.input.help.args": "인수를 셸 스크립트에 전달했습니다.", + "loc.input.label.disableAutoCwd": "작업 디렉터리 지정", + "loc.input.help.disableAutoCwd": "기본 동작은 작업 디렉터리를 스크립트 위치로 설정하는 것입니다. 따라서 선택적으로 다른 작업 디렉터리를 지정할 수 있습니다.", + "loc.input.label.cwd": "작업 디렉터리", + "loc.input.help.cwd": "스크립트가 실행되는 현재 작업 디렉터리입니다. 비어 있으면 리포(빌드) 또는 아티팩트(릴리스)의 루트이며 이 값은 $(System.DefaultWorkingDirectory)입니다.", + "loc.input.label.failOnStandardError": "표준 오류 시 실패", + "loc.input.help.failOnStandardError": "true일 경우 StandardError 스트림에 오류가 작성되면 이 작업은 실패하게 됩니다.", + "loc.messages.BashReturnCode": "반환 코드 %d(으)로 Bash 종료", + "loc.messages.BashFailed": "오류 %s(으)로 Bash 실패" +} \ No newline at end of file diff --git a/_generated/ShellScriptV2/Strings/resources.resjson/ru-RU/resources.resjson b/_generated/ShellScriptV2/Strings/resources.resjson/ru-RU/resources.resjson new file mode 100644 index 000000000000..2b8af6e91a0e --- /dev/null +++ b/_generated/ShellScriptV2/Strings/resources.resjson/ru-RU/resources.resjson @@ -0,0 +1,19 @@ +{ + "loc.friendlyName": "Скрипт оболочки", + "loc.helpMarkDown": "[См. дополнительные сведения об этой задаче](https://go.microsoft.com/fwlink/?LinkID=613738)", + "loc.description": "Запуск скрипта оболочки с помощью Bash", + "loc.instanceNameFormat": "Сценарий оболочки $(scriptPath)", + "loc.group.displayName.advanced": "Дополнительно", + "loc.input.label.scriptPath": "Путь к скрипту", + "loc.input.help.scriptPath": "Относительный путь от корня репозитория к выполняемому файлу сценария оболочки.", + "loc.input.label.args": "Аргументы", + "loc.input.help.args": "Аргументы, передаваемые в сценарий оболочки", + "loc.input.label.disableAutoCwd": "Указать рабочий каталог", + "loc.input.help.disableAutoCwd": "По умолчанию в качестве рабочего каталога задается расположение скрипта. Это позволяет при необходимости указать другой рабочий каталог.", + "loc.input.label.cwd": "Рабочий каталог", + "loc.input.help.cwd": "Текущий рабочий каталог, в котором выполняется скрипт. Если значение пустое, используется корень репозитория (сборки) или артефактов (выпуска): $(System.DefaultWorkingDirectory).", + "loc.input.label.failOnStandardError": "Сбой со стандартной ошибкой", + "loc.input.help.failOnStandardError": "Если задано значение True, задача завершится сбоем при записи любых ошибок в поток StandardError.", + "loc.messages.BashReturnCode": "Завершение работы Bash с кодом возврата %d", + "loc.messages.BashFailed": "Сбой Bash с ошибкой %s" +} \ No newline at end of file diff --git a/_generated/ShellScriptV2/Strings/resources.resjson/zh-CN/resources.resjson b/_generated/ShellScriptV2/Strings/resources.resjson/zh-CN/resources.resjson new file mode 100644 index 000000000000..0dcf3baef0cd --- /dev/null +++ b/_generated/ShellScriptV2/Strings/resources.resjson/zh-CN/resources.resjson @@ -0,0 +1,19 @@ +{ + "loc.friendlyName": "Shell 脚本", + "loc.helpMarkDown": "[详细了解此任务](https://go.microsoft.com/fwlink/?LinkID=613738)", + "loc.description": "使用 Bash 运行 shell 脚本", + "loc.instanceNameFormat": "Shell 脚本 $(scriptPath)", + "loc.group.displayName.advanced": "高级", + "loc.input.label.scriptPath": "脚本路径", + "loc.input.help.scriptPath": "要运行的 shell 脚本文件的存储库根路径的相对路径。", + "loc.input.label.args": "参数", + "loc.input.help.args": "传递给 shell 脚本的参数", + "loc.input.label.disableAutoCwd": "指定工作目录", + "loc.input.help.disableAutoCwd": "默认行为是将工作目录设置为脚本位置。这使你能够选择指定其他工作目录。", + "loc.input.label.cwd": "工作目录", + "loc.input.help.cwd": "脚本运行所在的当前工作目录。存储库(内部版本)或项目(发行版本)的根路径 $(System.DefaultWorkingDirectory)为空。", + "loc.input.label.failOnStandardError": "因标准错误失败", + "loc.input.help.failOnStandardError": "如果为 true,则在向 StandardError 流写入任何错误时,此任务都会失败。", + "loc.messages.BashReturnCode": "Bash 已退出,返回代码为: %d", + "loc.messages.BashFailed": "Bash 失败,出现错误: %s" +} \ No newline at end of file diff --git a/_generated/ShellScriptV2/Strings/resources.resjson/zh-TW/resources.resjson b/_generated/ShellScriptV2/Strings/resources.resjson/zh-TW/resources.resjson new file mode 100644 index 000000000000..f7131856adfd --- /dev/null +++ b/_generated/ShellScriptV2/Strings/resources.resjson/zh-TW/resources.resjson @@ -0,0 +1,19 @@ +{ + "loc.friendlyName": "殼層指令碼", + "loc.helpMarkDown": "[深入了解此工作](https://go.microsoft.com/fwlink/?LinkID=613738)", + "loc.description": "使用 Bash 執行殼層指令碼", + "loc.instanceNameFormat": "Shell 指令碼 $(scriptPath)", + "loc.group.displayName.advanced": "進階", + "loc.input.label.scriptPath": "指令碼路徑", + "loc.input.help.scriptPath": "要執行的 Shell 指令碼之存放庫根路徑的相對路徑。", + "loc.input.label.args": "引數", + "loc.input.help.args": "傳遞至 Shell 指令碼的引數", + "loc.input.label.disableAutoCwd": "指定工作目錄", + "loc.input.help.disableAutoCwd": "預設行為是將工作目錄設為指令碼位置。這可讓您選擇性地指定不同的工作目錄。", + "loc.input.label.cwd": "工作目錄", + "loc.input.help.cwd": "指令碼執行所在的目前工作目錄。Empty 是存放庫 (組建) 或成品 (發行) 的根,即 $(System.DefaultWorkingDirectory)。", + "loc.input.label.failOnStandardError": "發生標準錯誤的失敗", + "loc.input.help.failOnStandardError": "若此為 true,則任何錯誤寫入 StandardError 資料流時,此工作便會失敗。", + "loc.messages.BashReturnCode": "Bash 已結束,傳回碼為: %d", + "loc.messages.BashFailed": "Bash 失敗,錯誤為: %s" +} \ No newline at end of file diff --git a/_generated/ShellScriptV2/Tests/L0.ts b/_generated/ShellScriptV2/Tests/L0.ts new file mode 100644 index 000000000000..1961f72cfca6 --- /dev/null +++ b/_generated/ShellScriptV2/Tests/L0.ts @@ -0,0 +1,95 @@ + +// npm install mocha --save-dev +// typings install dt~mocha --save --global + +import * as path from 'path'; +import * as assert from 'assert'; +import * as ttm from 'azure-pipelines-task-lib/mock-test'; + +describe('ShellScript L0 Suite', function () { + this.timeout(parseInt(process.env.TASK_TEST_TIMEOUT) || 200000); + before(() => { + + }); + + after(() => { + + }); + + it('runs shellscript in cwd', (done: Mocha.Done) => { + this.timeout(1000); + + let tp = path.join(__dirname, 'L0runsInCwd.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + assert(tr.ran('/usr/local/bin/bash /script.sh arg1 arg2'), 'it should have run ShellScript'); + assert(tr.invokedToolCount == 1, 'should have only run ShellScript'); + assert(tr.stdout.indexOf('bash output here') >= 0, "bash stdout"); + assert(tr.stderr.length == 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + + done(); + }); + + it('fails if script returns 1', (done: Mocha.Done) => { + this.timeout(1000); + + let tp = path.join(__dirname, 'L0failIfReturns1.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + assert(tr.ran('/usr/local/bin/bash /script.sh arg1 arg2'), 'it should have run ShellScript'); + assert(tr.invokedToolCount == 1, 'should have only run ShellScript'); + + var expectedErr = '/usr/local/bin/bash failed with return code: 1'; + + assert(tr.stdOutContained(expectedErr), 'should have said: ' + expectedErr); + // failOnStdErr not set + assert(!tr.stderr, 'should not have written to stderr'); + assert(tr.failed, 'task should have failed'); + done(); + }) + + it('fails if failOnStdErr and script writes to stderr', (done: Mocha.Done) => { + this.timeout(1000); + + let tp = path.join(__dirname, 'L0failIfStdErr.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + assert(tr.ran('/usr/local/bin/bash /script.sh arg1 arg2'), 'it should have run ShellScript'); + assert(tr.invokedToolCount == 1, 'should have only run ShellScript'); + // failOnStdErr true + assert(tr.stderr.length > 0, 'should have written to stderr'); + assert(tr.failed, 'task should have failed'); + done(); + }) + + it('fails if cwd not set', (done: Mocha.Done) => { + this.timeout(1000); + + let tp = path.join(__dirname, 'L0failNoCwd.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + assert(tr.invokedToolCount == 0, 'should not have run ShellScript'); + assert(tr.failed, 'task should have failed'); + done(); + }) + + it('fails if script not found', (done: Mocha.Done) => { + this.timeout(1000); + + let tp = path.join(__dirname, 'L0failIfScriptNotFound.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + assert(tr.invokedToolCount == 0, 'should not have run ShellScript'); + assert(tr.failed, 'task should have failed'); + assert(tr.stdOutContained('Not found /notexistscript.sh')); + done(); + }) +}); diff --git a/_generated/ShellScriptV2/Tests/L0failIfReturns1.ts b/_generated/ShellScriptV2/Tests/L0failIfReturns1.ts new file mode 100644 index 000000000000..ca401b9ab395 --- /dev/null +++ b/_generated/ShellScriptV2/Tests/L0failIfReturns1.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, '..', 'shellscript.js'); +let tmr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tmr.setInput('scriptPath', '/script.sh'); +tmr.setInput('args', 'arg1 arg2'); +tmr.setInput('cwd', 'fake/wd'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "bash": "/usr/local/bin/bash", + "node": "/usr/local/bin/node" + }, + "exec": { + "/usr/local/bin/bash /script.sh arg1 arg2": { + "code": 1, + "stdout": "bash output here", + "stderr": "bash error output here" + } + }, + "checkPath" : { + "/usr/local/bin/bash": true, + "/usr/local/bin/node": true, + "/script.sh" : true + } +}; +tmr.setAnswers(a); + +// if you need to, you can mock a specific module function called in task +// tmr.registerMock('./taskmod', { +// sayHello: function() { +// console.log('Hello Mock!'); +// } +// }); + +tmr.run(); + diff --git a/_generated/ShellScriptV2/Tests/L0failIfScriptNotFound.ts b/_generated/ShellScriptV2/Tests/L0failIfScriptNotFound.ts new file mode 100644 index 000000000000..0a64486c7745 --- /dev/null +++ b/_generated/ShellScriptV2/Tests/L0failIfScriptNotFound.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, '..', 'shellscript.js'); +let tmr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tmr.setInput('scriptPath', '/notexistscript.sh'); +tmr.setInput('args', 'arg1 arg2'); +tmr.setInput('cwd', 'fake/wd'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "bash": "/usr/local/bin/bash", + "node": "/usr/local/bin/node" + }, + "exec": { + "/usr/local/bin/bash /script.sh arg1 arg2": { + "code": 0, + "stdout": "bash output here", + "stderr": "" + } + }, + "checkPath" : { + "/usr/local/bin/bash": true, + "/usr/local/bin/node": true, + "/script.sh" : true + } +}; +tmr.setAnswers(a); + +// if you need to, you can mock a specific module function called in task +// tmr.registerMock('./taskmod', { +// sayHello: function() { +// console.log('Hello Mock!'); +// } +// }); + +tmr.run(); + diff --git a/_generated/ShellScriptV2/Tests/L0failIfStdErr.ts b/_generated/ShellScriptV2/Tests/L0failIfStdErr.ts new file mode 100644 index 000000000000..bdf92e2d2b10 --- /dev/null +++ b/_generated/ShellScriptV2/Tests/L0failIfStdErr.ts @@ -0,0 +1,43 @@ + +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, '..', 'shellscript.js'); +let tmr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tmr.setInput('scriptPath', '/script.sh'); +tmr.setInput('args', 'arg1 arg2'); +tmr.setInput('cwd', 'fake/wd'); +tmr.setInput('failOnStandardError', 'true'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "bash": "/usr/local/bin/bash", + "node": "/usr/local/bin/node" + }, + "exec": { + "/usr/local/bin/bash /script.sh arg1 arg2": { + "code": 0, + "stdout": "bash output here", + "stderr": "bash error output here" + } + }, + "checkPath" : { + "/usr/local/bin/bash": true, + "/usr/local/bin/node": true, + "/script.sh" : true + } +}; +tmr.setAnswers(a); + +// if you need to, you can mock a specific module function called in task +// tmr.registerMock('./taskmod', { +// sayHello: function() { +// console.log('Hello Mock!'); +// } +// }); + +tmr.run(); + diff --git a/_generated/ShellScriptV2/Tests/L0failNoCwd.ts b/_generated/ShellScriptV2/Tests/L0failNoCwd.ts new file mode 100644 index 000000000000..ae683fea71c9 --- /dev/null +++ b/_generated/ShellScriptV2/Tests/L0failNoCwd.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, '..', 'shellscript.js'); +let tmr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tmr.setInput('scriptPath', '/script.sh'); +tmr.setInput('args', 'arg1 arg2'); +//tmr.setInput('cwd', 'fake/wd'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "bash": "/usr/local/bin/bash", + "node": "/usr/local/bin/node" + }, + "exec": { + "/usr/local/bin/bash /script.sh arg1 arg2": { + "code": 0, + "stdout": "bash output here", + "stderr": "" + } + }, + "checkPath" : { + "/usr/local/bin/bash": true, + "/usr/local/bin/node": true, + "/script.sh" : true + } +}; +tmr.setAnswers(a); + +// if you need to, you can mock a specific module function called in task +// tmr.registerMock('./taskmod', { +// sayHello: function() { +// console.log('Hello Mock!'); +// } +// }); + +tmr.run(); + diff --git a/_generated/ShellScriptV2/Tests/L0runsInCwd.ts b/_generated/ShellScriptV2/Tests/L0runsInCwd.ts new file mode 100644 index 000000000000..3470cc654d98 --- /dev/null +++ b/_generated/ShellScriptV2/Tests/L0runsInCwd.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, '..', 'shellscript.js'); +let tmr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tmr.setInput('scriptPath', '/script.sh'); +tmr.setInput('args', 'arg1 arg2'); +tmr.setInput('cwd', 'fake/wd'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "bash": "/usr/local/bin/bash", + "node": "/usr/local/bin/node" + }, + "exec": { + "/usr/local/bin/bash /script.sh arg1 arg2": { + "code": 0, + "stdout": "bash output here", + "stderr": "" + } + }, + "checkPath" : { + "/usr/local/bin/bash": true, + "/usr/local/bin/node": true, + "/script.sh" : true + } +}; +tmr.setAnswers(a); + +// if you need to, you can mock a specific module function called in task +// tmr.registerMock('./taskmod', { +// sayHello: function() { +// console.log('Hello Mock!'); +// } +// }); + +tmr.run(); + diff --git a/_generated/ShellScriptV2/icon.png b/_generated/ShellScriptV2/icon.png new file mode 100644 index 000000000000..b89cda612f6e Binary files /dev/null and b/_generated/ShellScriptV2/icon.png differ diff --git a/_generated/ShellScriptV2/icon.svg b/_generated/ShellScriptV2/icon.svg new file mode 100644 index 000000000000..001df035e509 --- /dev/null +++ b/_generated/ShellScriptV2/icon.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/_generated/ShellScriptV2/package-lock.json b/_generated/ShellScriptV2/package-lock.json new file mode 100644 index 000000000000..2f0c7ed13ed0 --- /dev/null +++ b/_generated/ShellScriptV2/package-lock.json @@ -0,0 +1,488 @@ +{ + "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": "16.11.64", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.64.tgz", + "integrity": "sha512-z5hPTlVFzNwtJ2LNozTpJcD1Cu44c4LNuzaq1mwxmiHWQh2ULdR6Vjwo1UGldzRpzL0yUEdZddnfqGW2G70z6Q==" + }, + "@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": "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==" + }, + "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/ShellScriptV2/package.json b/_generated/ShellScriptV2/package.json new file mode 100644 index 000000000000..96fb1bb65971 --- /dev/null +++ b/_generated/ShellScriptV2/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": "^16.11.39", + "@types/mocha": "^5.2.7", + "@types/uuid": "^8.3.0", + "azure-pipelines-task-lib": "^5.0.0-preview.0" + }, + "devDependencies": { + "typescript": "4.0.2" + } +} diff --git a/_generated/ShellScriptV2/shellscript.ts b/_generated/ShellScriptV2/shellscript.ts new file mode 100644 index 000000000000..1ee9c14e8d21 --- /dev/null +++ b/_generated/ShellScriptV2/shellscript.ts @@ -0,0 +1,40 @@ +import path = require('path'); +import tl = require('azure-pipelines-task-lib/task'); +import trm = require('azure-pipelines-task-lib/toolrunner'); + +async function run() { + try { + tl.setResourcePath(path.join( __dirname, 'task.json')); + + var bash: trm.ToolRunner = tl.tool(tl.which('bash', true)); + + var scriptPath: string = tl.getPathInput('scriptPath', true, true); + var cwd: string = tl.getPathInput('cwd', true, false); + + // if user didn't supply a cwd (advanced), then set cwd to folder script is in. + // All "script" tasks should do this + if (!tl.filePathSupplied('cwd') && !tl.getBoolInput('disableAutoCwd', false)) { + cwd = path.dirname(scriptPath); + } + tl.mkdirP(cwd); + tl.cd(cwd); + + bash.arg(scriptPath); + + // additional args should always call argString. argString() parses quoted arg strings + bash.line(tl.getInput('args', false)); + + // determines whether output to stderr will fail a task. + // some tools write progress and other warnings to stderr. scripts can also redirect. + var failOnStdErr: boolean = tl.getBoolInput('failOnStandardError', false); + + var code: number = await bash.exec({failOnStdErr: failOnStdErr}); + tl.setResult(tl.TaskResult.Succeeded, tl.loc('BashReturnCode', code)); + } + catch(err) { + tl.error(err.message); + tl.setResult(tl.TaskResult.Failed, tl.loc('BashFailed', err.message)); + } +} + +run(); diff --git a/_generated/ShellScriptV2/task.json b/_generated/ShellScriptV2/task.json new file mode 100644 index 000000000000..9de6cc10f699 --- /dev/null +++ b/_generated/ShellScriptV2/task.json @@ -0,0 +1,98 @@ +{ + "id": "6C731C3C-3C68-459A-A5C9-BDE6E6595B5B", + "name": "ShellScript", + "friendlyName": "Shell script", + "description": "Run a shell script using Bash", + "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/shell-script", + "helpMarkDown": "[Learn more about this task](https://go.microsoft.com/fwlink/?LinkID=613738)", + "category": "Utility", + "visibility": [ + "Build", + "Release" + ], + "runsOn": [ + "Agent", + "DeploymentGroup" + ], + "author": "Microsoft Corporation", + "version": { + "Major": 2, + "Minor": 229, + "Patch": 3 + }, + "demands": [ + "sh" + ], + "instanceNameFormat": "Shell Script $(scriptPath)", + "groups": [ + { + "name": "advanced", + "displayName": "Advanced", + "isExpanded": false + } + ], + "inputs": [ + { + "name": "scriptPath", + "type": "filePath", + "label": "Script Path", + "defaultValue": "", + "required": true, + "helpMarkDown": "Relative path from repo root of the shell script file to run." + }, + { + "name": "args", + "type": "string", + "label": "Arguments", + "defaultValue": "", + "required": false, + "helpMarkDown": "Arguments passed to the shell script" + }, + { + "name": "disableAutoCwd", + "type": "boolean", + "label": "Specify Working Directory", + "defaultValue": "false", + "required": false, + "helpMarkDown": "The default behavior is to set the working directory to the script location. This enables you to optionally specify a different working directory.", + "groupName": "advanced" + }, + { + "name": "cwd", + "type": "filePath", + "label": "Working Directory", + "defaultValue": "", + "required": false, + "visibleRule": "disableAutoCwd = true", + "helpMarkDown": "Current working directory where the script is run. Empty is the root of the repo (build) or artifacts (release), which is $(System.DefaultWorkingDirectory).", + "groupName": "advanced" + }, + { + "name": "failOnStandardError", + "type": "boolean", + "label": "Fail on Standard Error", + "defaultValue": "false", + "required": false, + "helpMarkDown": "If this is true, this task will fail if any errors are written to the StandardError stream.", + "groupName": "advanced" + } + ], + "execution": { + "Node10": { + "target": "shellscript.js", + "argumentFormat": "" + }, + "Node16": { + "target": "shellscript.js", + "argumentFormat": "" + } + }, + "messages": { + "BashReturnCode": "Bash exited with return code: %d", + "BashFailed": "Bash failed with error: %s" + }, + "_buildConfigMapping": { + "Default": "2.229.3", + "Node20-225": "2.229.4" + } +} \ No newline at end of file diff --git a/_generated/ShellScriptV2/task.loc.json b/_generated/ShellScriptV2/task.loc.json new file mode 100644 index 000000000000..772d049b7bbb --- /dev/null +++ b/_generated/ShellScriptV2/task.loc.json @@ -0,0 +1,98 @@ +{ + "id": "6C731C3C-3C68-459A-A5C9-BDE6E6595B5B", + "name": "ShellScript", + "friendlyName": "ms-resource:loc.friendlyName", + "description": "ms-resource:loc.description", + "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/shell-script", + "helpMarkDown": "ms-resource:loc.helpMarkDown", + "category": "Utility", + "visibility": [ + "Build", + "Release" + ], + "runsOn": [ + "Agent", + "DeploymentGroup" + ], + "author": "Microsoft Corporation", + "version": { + "Major": 2, + "Minor": 229, + "Patch": 3 + }, + "demands": [ + "sh" + ], + "instanceNameFormat": "ms-resource:loc.instanceNameFormat", + "groups": [ + { + "name": "advanced", + "displayName": "ms-resource:loc.group.displayName.advanced", + "isExpanded": false + } + ], + "inputs": [ + { + "name": "scriptPath", + "type": "filePath", + "label": "ms-resource:loc.input.label.scriptPath", + "defaultValue": "", + "required": true, + "helpMarkDown": "ms-resource:loc.input.help.scriptPath" + }, + { + "name": "args", + "type": "string", + "label": "ms-resource:loc.input.label.args", + "defaultValue": "", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.args" + }, + { + "name": "disableAutoCwd", + "type": "boolean", + "label": "ms-resource:loc.input.label.disableAutoCwd", + "defaultValue": "false", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.disableAutoCwd", + "groupName": "advanced" + }, + { + "name": "cwd", + "type": "filePath", + "label": "ms-resource:loc.input.label.cwd", + "defaultValue": "", + "required": false, + "visibleRule": "disableAutoCwd = true", + "helpMarkDown": "ms-resource:loc.input.help.cwd", + "groupName": "advanced" + }, + { + "name": "failOnStandardError", + "type": "boolean", + "label": "ms-resource:loc.input.label.failOnStandardError", + "defaultValue": "false", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.failOnStandardError", + "groupName": "advanced" + } + ], + "execution": { + "Node10": { + "target": "shellscript.js", + "argumentFormat": "" + }, + "Node16": { + "target": "shellscript.js", + "argumentFormat": "" + } + }, + "messages": { + "BashReturnCode": "ms-resource:loc.messages.BashReturnCode", + "BashFailed": "ms-resource:loc.messages.BashFailed" + }, + "_buildConfigMapping": { + "Default": "2.229.3", + "Node20-225": "2.229.4" + } +} \ No newline at end of file diff --git a/_generated/ShellScriptV2/tsconfig.json b/_generated/ShellScriptV2/tsconfig.json new file mode 100644 index 000000000000..0438b79f69ac --- /dev/null +++ b/_generated/ShellScriptV2/tsconfig.json @@ -0,0 +1,6 @@ +{ + "compilerOptions": { + "target": "ES6", + "module": "commonjs" + } +} \ No newline at end of file diff --git a/_generated/ShellScriptV2_Node20/.npmrc b/_generated/ShellScriptV2_Node20/.npmrc new file mode 100644 index 000000000000..5fca0d518be7 --- /dev/null +++ b/_generated/ShellScriptV2_Node20/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true diff --git a/_generated/ShellScriptV2_Node20/Strings/resources.resjson/de-DE/resources.resjson b/_generated/ShellScriptV2_Node20/Strings/resources.resjson/de-DE/resources.resjson new file mode 100644 index 000000000000..ccc33078789e --- /dev/null +++ b/_generated/ShellScriptV2_Node20/Strings/resources.resjson/de-DE/resources.resjson @@ -0,0 +1,19 @@ +{ + "loc.friendlyName": "Shellskript", + "loc.helpMarkDown": "[Weitere Informationen zu dieser Aufgabe](https://go.microsoft.com/fwlink/?LinkID=613738)", + "loc.description": "Shellskript mithilfe von Bash ausführen", + "loc.instanceNameFormat": "Shellskript $(scriptPath)", + "loc.group.displayName.advanced": "Erweitert", + "loc.input.label.scriptPath": "Skriptpfad", + "loc.input.help.scriptPath": "Der relative Pfad vom Repositorystamm der auszuführenden Shellskriptdatei.", + "loc.input.label.args": "Argumente", + "loc.input.help.args": "An das Shellskript übergebene Argumente", + "loc.input.label.disableAutoCwd": "Arbeitsverzeichnis angeben", + "loc.input.help.disableAutoCwd": "Das Standardverhalten besteht darin, das Arbeitsverzeichnis auf den Skriptspeicherort festzulegen. Auf diese Weise können Sie optional ein anderes Arbeitsverzeichnis angeben.", + "loc.input.label.cwd": "Arbeitsverzeichnis", + "loc.input.help.cwd": "Das aktuelle Arbeitsverzeichnis, in dem das Skript ausgeführt wird. Wenn keine Angabe erfolgt, wird der Stamm des Repositorys (Build) oder der Artefakte (Release) verwendet, das \"$(System.DefaultWorkingDirectory)\" lautet.", + "loc.input.label.failOnStandardError": "Fehler bei Standardfehler.", + "loc.input.help.failOnStandardError": "Wenn dies wahr ist, tritt ein Aufgabenfehler auf, wenn Fehler in den StandardError-Stream geschrieben werden.", + "loc.messages.BashReturnCode": "Bash wurde mit dem folgenden Rückgabecode beendet: %d", + "loc.messages.BashFailed": "Bash-Fehler: %s" +} \ No newline at end of file diff --git a/_generated/ShellScriptV2_Node20/Strings/resources.resjson/en-US/resources.resjson b/_generated/ShellScriptV2_Node20/Strings/resources.resjson/en-US/resources.resjson new file mode 100644 index 000000000000..86393f7e2a75 --- /dev/null +++ b/_generated/ShellScriptV2_Node20/Strings/resources.resjson/en-US/resources.resjson @@ -0,0 +1,19 @@ +{ + "loc.friendlyName": "Shell script", + "loc.helpMarkDown": "[Learn more about this task](https://go.microsoft.com/fwlink/?LinkID=613738)", + "loc.description": "Run a shell script using Bash", + "loc.instanceNameFormat": "Shell Script $(scriptPath)", + "loc.group.displayName.advanced": "Advanced", + "loc.input.label.scriptPath": "Script Path", + "loc.input.help.scriptPath": "Relative path from repo root of the shell script file to run.", + "loc.input.label.args": "Arguments", + "loc.input.help.args": "Arguments passed to the shell script", + "loc.input.label.disableAutoCwd": "Specify Working Directory", + "loc.input.help.disableAutoCwd": "The default behavior is to set the working directory to the script location. This enables you to optionally specify a different working directory.", + "loc.input.label.cwd": "Working Directory", + "loc.input.help.cwd": "Current working directory where the script is run. Empty is the root of the repo (build) or artifacts (release), which is $(System.DefaultWorkingDirectory).", + "loc.input.label.failOnStandardError": "Fail on Standard Error", + "loc.input.help.failOnStandardError": "If this is true, this task will fail if any errors are written to the StandardError stream.", + "loc.messages.BashReturnCode": "Bash exited with return code: %d", + "loc.messages.BashFailed": "Bash failed with error: %s" +} \ No newline at end of file diff --git a/_generated/ShellScriptV2_Node20/Strings/resources.resjson/es-ES/resources.resjson b/_generated/ShellScriptV2_Node20/Strings/resources.resjson/es-ES/resources.resjson new file mode 100644 index 000000000000..ef3e8e8bd14c --- /dev/null +++ b/_generated/ShellScriptV2_Node20/Strings/resources.resjson/es-ES/resources.resjson @@ -0,0 +1,19 @@ +{ + "loc.friendlyName": "Script de shell", + "loc.helpMarkDown": "[Obtener más información acerca de esta tarea](https://go.microsoft.com/fwlink/?LinkID=613738)", + "loc.description": "Ejecutar un script de shell con Bash", + "loc.instanceNameFormat": "Script de shell $(scriptPath)", + "loc.group.displayName.advanced": "Avanzado", + "loc.input.label.scriptPath": "Ruta de acceso del script", + "loc.input.help.scriptPath": "Ruta de acceso relativa de la raíz del repositorio del archivo de script de shell que se va a ejecutar.", + "loc.input.label.args": "Argumentos", + "loc.input.help.args": "Argumentos pasados al script de shell", + "loc.input.label.disableAutoCwd": "Especificar directorio de trabajo", + "loc.input.help.disableAutoCwd": "El comportamiento predeterminado es establecer el directorio de trabajo en la ubicación del script. Esto le permite especificar opcionalmente un directorio de trabajo distinto.", + "loc.input.label.cwd": "Directorio de trabajo", + "loc.input.help.cwd": "Directorio de trabajo actual en el que se ejecuta el script. Vacío es la raíz del repositorio (compilación) o artefactos (versión), que es $(System.DefaultWorkingDirectory).", + "loc.input.label.failOnStandardError": "Error si se produce un error estándar", + "loc.input.help.failOnStandardError": "Si es true, esta tarea no se realizará cuando se registre algún error en la secuencia StandardError.", + "loc.messages.BashReturnCode": "Bash se cerró con el código de retorno: %d", + "loc.messages.BashFailed": "Error de Bash: %s" +} \ No newline at end of file diff --git a/_generated/ShellScriptV2_Node20/Strings/resources.resjson/fr-FR/resources.resjson b/_generated/ShellScriptV2_Node20/Strings/resources.resjson/fr-FR/resources.resjson new file mode 100644 index 000000000000..d12f7bad5c79 --- /dev/null +++ b/_generated/ShellScriptV2_Node20/Strings/resources.resjson/fr-FR/resources.resjson @@ -0,0 +1,19 @@ +{ + "loc.friendlyName": "Script d'interpréteur de commandes", + "loc.helpMarkDown": "[En savoir plus sur cette tâche](https://go.microsoft.com/fwlink/?LinkID=613738)", + "loc.description": "Exécuter un script d'interpréteur de commandes à l'aide de Bash", + "loc.instanceNameFormat": "Script Shell $(scriptPath)", + "loc.group.displayName.advanced": "Avancé", + "loc.input.label.scriptPath": "Chemin d'accès du script", + "loc.input.help.scriptPath": "Chemin relatif de la racine de dépôt du fichier du script shell à exécuter.", + "loc.input.label.args": "Arguments", + "loc.input.help.args": "Arguments passés au script shell", + "loc.input.label.disableAutoCwd": "Spécifier le répertoire de travail", + "loc.input.help.disableAutoCwd": "Le comportement par défaut consiste à définir l'emplacement du script comme répertoire de travail. Vous pouvez ainsi spécifier un autre répertoire de travail si vous le souhaitez.", + "loc.input.label.cwd": "Répertoire de travail", + "loc.input.help.cwd": "Répertoire de travail actif dans lequel le script est exécuté. Une valeur vide représente la racine du dépôt (build) ou des artefacts (mise en production), à savoir $(System.DefaultWorkingDirectory).", + "loc.input.label.failOnStandardError": "Échec sur une erreur standard", + "loc.input.help.failOnStandardError": "Si la valeur est true, cette tâche échoue si des erreurs sont écrites dans le flux de données StandardError.", + "loc.messages.BashReturnCode": "Sortie de Bash. Code de retour : %d", + "loc.messages.BashFailed": "Échec de Bash. Erreur : %s" +} \ No newline at end of file diff --git a/_generated/ShellScriptV2_Node20/Strings/resources.resjson/it-IT/resources.resjson b/_generated/ShellScriptV2_Node20/Strings/resources.resjson/it-IT/resources.resjson new file mode 100644 index 000000000000..d06d3045a1d8 --- /dev/null +++ b/_generated/ShellScriptV2_Node20/Strings/resources.resjson/it-IT/resources.resjson @@ -0,0 +1,19 @@ +{ + "loc.friendlyName": "Script della shell", + "loc.helpMarkDown": "[Altre informazioni su questa attività](https://go.microsoft.com/fwlink/?LinkID=613738)", + "loc.description": "Consente di eseguire uno script della shell con Bash", + "loc.instanceNameFormat": "Script della shell: $(scriptPath)", + "loc.group.displayName.advanced": "Avanzate", + "loc.input.label.scriptPath": "Percorso script", + "loc.input.help.scriptPath": "Percorso relativo dalla radice del repository del file di script della shell da eseguire.", + "loc.input.label.args": "Argomenti", + "loc.input.help.args": "Argomenti passati allo script della shell", + "loc.input.label.disableAutoCwd": "Specifica directory di lavoro", + "loc.input.help.disableAutoCwd": "La directory di lavoro viene in genere impostata sul percorso degli script. In tal modo è possibile specificare una directory di lavoro diversa.", + "loc.input.label.cwd": "Directory di lavoro", + "loc.input.help.cwd": "Directory di lavoro corrente in cui viene eseguito lo script. Se non si specifica un valore, corrisponde alla radice del repository (compilazione) o degli artefatti (versione), ovvero $(System.DefaultWorkingDirectory).", + "loc.input.label.failOnStandardError": "Interrompi in caso di errore standard", + "loc.input.help.failOnStandardError": "Se è impostato su true, questa attività non riuscirà nel caso in cui vengano scritti errori nel flusso StandardError.", + "loc.messages.BashReturnCode": "Bash terminato. Codice restituito: %d", + "loc.messages.BashFailed": "Bash non riuscito. Errore: %s" +} \ No newline at end of file diff --git a/_generated/ShellScriptV2_Node20/Strings/resources.resjson/ja-JP/resources.resjson b/_generated/ShellScriptV2_Node20/Strings/resources.resjson/ja-JP/resources.resjson new file mode 100644 index 000000000000..d2bfa0531ca3 --- /dev/null +++ b/_generated/ShellScriptV2_Node20/Strings/resources.resjson/ja-JP/resources.resjson @@ -0,0 +1,19 @@ +{ + "loc.friendlyName": "シェル スクリプト", + "loc.helpMarkDown": "[このタスクの詳細を表示](https://go.microsoft.com/fwlink/?LinkID=613738)", + "loc.description": "Bash を使用してシェル スクリプトを実行します", + "loc.instanceNameFormat": "シェル スクリプト $(scriptPath)", + "loc.group.displayName.advanced": "詳細設定", + "loc.input.label.scriptPath": "スクリプト パス", + "loc.input.help.scriptPath": "リポジトリのルートを基準に指定した、実行するシェル スクリプト ファイルの相対パス。", + "loc.input.label.args": "引数", + "loc.input.help.args": "シェル スクリプトに渡す引数", + "loc.input.label.disableAutoCwd": "作業ディレクトリを指定する", + "loc.input.help.disableAutoCwd": "既定の動作では、作業ディレクトリがスクリプトの場所に設定されます。これにより必要に応じて、別の作業ディレクトリを指定できるようになります。", + "loc.input.label.cwd": "作業ディレクトリ", + "loc.input.help.cwd": "スクリプトを実行する現行の作業ディレクトリ。空白はリポジトリ (ビルド) または成果物 (リリース) のルートであり、$(System.DefaultWorkingDirectory) となります。", + "loc.input.label.failOnStandardError": "標準エラーで失敗", + "loc.input.help.failOnStandardError": "true の場合、StandardError ストリームにエラーが書き込まれると、このタスクは失敗します。", + "loc.messages.BashReturnCode": "bash は、リターン コードを伴って終了しました: %d", + "loc.messages.BashFailed": "bash でエラーが発生しました: %s" +} \ No newline at end of file diff --git a/_generated/ShellScriptV2_Node20/Strings/resources.resjson/ko-KR/resources.resjson b/_generated/ShellScriptV2_Node20/Strings/resources.resjson/ko-KR/resources.resjson new file mode 100644 index 000000000000..8427609da1e5 --- /dev/null +++ b/_generated/ShellScriptV2_Node20/Strings/resources.resjson/ko-KR/resources.resjson @@ -0,0 +1,19 @@ +{ + "loc.friendlyName": "셸 스크립트", + "loc.helpMarkDown": "[이 작업에 대한 자세한 정보](https://go.microsoft.com/fwlink/?LinkID=613738)", + "loc.description": "Bash를 사용하여 셸 스크립트 실행", + "loc.instanceNameFormat": "셸 스크립트 $(scriptPath)", + "loc.group.displayName.advanced": "고급", + "loc.input.label.scriptPath": "스크립트 경로", + "loc.input.help.scriptPath": "실행할 셸 스크립트 파일의 리포 루트로부터의 상대 경로입니다.", + "loc.input.label.args": "인수", + "loc.input.help.args": "인수를 셸 스크립트에 전달했습니다.", + "loc.input.label.disableAutoCwd": "작업 디렉터리 지정", + "loc.input.help.disableAutoCwd": "기본 동작은 작업 디렉터리를 스크립트 위치로 설정하는 것입니다. 따라서 선택적으로 다른 작업 디렉터리를 지정할 수 있습니다.", + "loc.input.label.cwd": "작업 디렉터리", + "loc.input.help.cwd": "스크립트가 실행되는 현재 작업 디렉터리입니다. 비어 있으면 리포(빌드) 또는 아티팩트(릴리스)의 루트이며 이 값은 $(System.DefaultWorkingDirectory)입니다.", + "loc.input.label.failOnStandardError": "표준 오류 시 실패", + "loc.input.help.failOnStandardError": "true일 경우 StandardError 스트림에 오류가 작성되면 이 작업은 실패하게 됩니다.", + "loc.messages.BashReturnCode": "반환 코드 %d(으)로 Bash 종료", + "loc.messages.BashFailed": "오류 %s(으)로 Bash 실패" +} \ No newline at end of file diff --git a/_generated/ShellScriptV2_Node20/Strings/resources.resjson/ru-RU/resources.resjson b/_generated/ShellScriptV2_Node20/Strings/resources.resjson/ru-RU/resources.resjson new file mode 100644 index 000000000000..2b8af6e91a0e --- /dev/null +++ b/_generated/ShellScriptV2_Node20/Strings/resources.resjson/ru-RU/resources.resjson @@ -0,0 +1,19 @@ +{ + "loc.friendlyName": "Скрипт оболочки", + "loc.helpMarkDown": "[См. дополнительные сведения об этой задаче](https://go.microsoft.com/fwlink/?LinkID=613738)", + "loc.description": "Запуск скрипта оболочки с помощью Bash", + "loc.instanceNameFormat": "Сценарий оболочки $(scriptPath)", + "loc.group.displayName.advanced": "Дополнительно", + "loc.input.label.scriptPath": "Путь к скрипту", + "loc.input.help.scriptPath": "Относительный путь от корня репозитория к выполняемому файлу сценария оболочки.", + "loc.input.label.args": "Аргументы", + "loc.input.help.args": "Аргументы, передаваемые в сценарий оболочки", + "loc.input.label.disableAutoCwd": "Указать рабочий каталог", + "loc.input.help.disableAutoCwd": "По умолчанию в качестве рабочего каталога задается расположение скрипта. Это позволяет при необходимости указать другой рабочий каталог.", + "loc.input.label.cwd": "Рабочий каталог", + "loc.input.help.cwd": "Текущий рабочий каталог, в котором выполняется скрипт. Если значение пустое, используется корень репозитория (сборки) или артефактов (выпуска): $(System.DefaultWorkingDirectory).", + "loc.input.label.failOnStandardError": "Сбой со стандартной ошибкой", + "loc.input.help.failOnStandardError": "Если задано значение True, задача завершится сбоем при записи любых ошибок в поток StandardError.", + "loc.messages.BashReturnCode": "Завершение работы Bash с кодом возврата %d", + "loc.messages.BashFailed": "Сбой Bash с ошибкой %s" +} \ No newline at end of file diff --git a/_generated/ShellScriptV2_Node20/Strings/resources.resjson/zh-CN/resources.resjson b/_generated/ShellScriptV2_Node20/Strings/resources.resjson/zh-CN/resources.resjson new file mode 100644 index 000000000000..0dcf3baef0cd --- /dev/null +++ b/_generated/ShellScriptV2_Node20/Strings/resources.resjson/zh-CN/resources.resjson @@ -0,0 +1,19 @@ +{ + "loc.friendlyName": "Shell 脚本", + "loc.helpMarkDown": "[详细了解此任务](https://go.microsoft.com/fwlink/?LinkID=613738)", + "loc.description": "使用 Bash 运行 shell 脚本", + "loc.instanceNameFormat": "Shell 脚本 $(scriptPath)", + "loc.group.displayName.advanced": "高级", + "loc.input.label.scriptPath": "脚本路径", + "loc.input.help.scriptPath": "要运行的 shell 脚本文件的存储库根路径的相对路径。", + "loc.input.label.args": "参数", + "loc.input.help.args": "传递给 shell 脚本的参数", + "loc.input.label.disableAutoCwd": "指定工作目录", + "loc.input.help.disableAutoCwd": "默认行为是将工作目录设置为脚本位置。这使你能够选择指定其他工作目录。", + "loc.input.label.cwd": "工作目录", + "loc.input.help.cwd": "脚本运行所在的当前工作目录。存储库(内部版本)或项目(发行版本)的根路径 $(System.DefaultWorkingDirectory)为空。", + "loc.input.label.failOnStandardError": "因标准错误失败", + "loc.input.help.failOnStandardError": "如果为 true,则在向 StandardError 流写入任何错误时,此任务都会失败。", + "loc.messages.BashReturnCode": "Bash 已退出,返回代码为: %d", + "loc.messages.BashFailed": "Bash 失败,出现错误: %s" +} \ No newline at end of file diff --git a/_generated/ShellScriptV2_Node20/Strings/resources.resjson/zh-TW/resources.resjson b/_generated/ShellScriptV2_Node20/Strings/resources.resjson/zh-TW/resources.resjson new file mode 100644 index 000000000000..f7131856adfd --- /dev/null +++ b/_generated/ShellScriptV2_Node20/Strings/resources.resjson/zh-TW/resources.resjson @@ -0,0 +1,19 @@ +{ + "loc.friendlyName": "殼層指令碼", + "loc.helpMarkDown": "[深入了解此工作](https://go.microsoft.com/fwlink/?LinkID=613738)", + "loc.description": "使用 Bash 執行殼層指令碼", + "loc.instanceNameFormat": "Shell 指令碼 $(scriptPath)", + "loc.group.displayName.advanced": "進階", + "loc.input.label.scriptPath": "指令碼路徑", + "loc.input.help.scriptPath": "要執行的 Shell 指令碼之存放庫根路徑的相對路徑。", + "loc.input.label.args": "引數", + "loc.input.help.args": "傳遞至 Shell 指令碼的引數", + "loc.input.label.disableAutoCwd": "指定工作目錄", + "loc.input.help.disableAutoCwd": "預設行為是將工作目錄設為指令碼位置。這可讓您選擇性地指定不同的工作目錄。", + "loc.input.label.cwd": "工作目錄", + "loc.input.help.cwd": "指令碼執行所在的目前工作目錄。Empty 是存放庫 (組建) 或成品 (發行) 的根,即 $(System.DefaultWorkingDirectory)。", + "loc.input.label.failOnStandardError": "發生標準錯誤的失敗", + "loc.input.help.failOnStandardError": "若此為 true,則任何錯誤寫入 StandardError 資料流時,此工作便會失敗。", + "loc.messages.BashReturnCode": "Bash 已結束,傳回碼為: %d", + "loc.messages.BashFailed": "Bash 失敗,錯誤為: %s" +} \ No newline at end of file diff --git a/_generated/ShellScriptV2_Node20/Tests/L0.ts b/_generated/ShellScriptV2_Node20/Tests/L0.ts new file mode 100644 index 000000000000..1961f72cfca6 --- /dev/null +++ b/_generated/ShellScriptV2_Node20/Tests/L0.ts @@ -0,0 +1,95 @@ + +// npm install mocha --save-dev +// typings install dt~mocha --save --global + +import * as path from 'path'; +import * as assert from 'assert'; +import * as ttm from 'azure-pipelines-task-lib/mock-test'; + +describe('ShellScript L0 Suite', function () { + this.timeout(parseInt(process.env.TASK_TEST_TIMEOUT) || 200000); + before(() => { + + }); + + after(() => { + + }); + + it('runs shellscript in cwd', (done: Mocha.Done) => { + this.timeout(1000); + + let tp = path.join(__dirname, 'L0runsInCwd.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + assert(tr.ran('/usr/local/bin/bash /script.sh arg1 arg2'), 'it should have run ShellScript'); + assert(tr.invokedToolCount == 1, 'should have only run ShellScript'); + assert(tr.stdout.indexOf('bash output here') >= 0, "bash stdout"); + assert(tr.stderr.length == 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + + done(); + }); + + it('fails if script returns 1', (done: Mocha.Done) => { + this.timeout(1000); + + let tp = path.join(__dirname, 'L0failIfReturns1.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + assert(tr.ran('/usr/local/bin/bash /script.sh arg1 arg2'), 'it should have run ShellScript'); + assert(tr.invokedToolCount == 1, 'should have only run ShellScript'); + + var expectedErr = '/usr/local/bin/bash failed with return code: 1'; + + assert(tr.stdOutContained(expectedErr), 'should have said: ' + expectedErr); + // failOnStdErr not set + assert(!tr.stderr, 'should not have written to stderr'); + assert(tr.failed, 'task should have failed'); + done(); + }) + + it('fails if failOnStdErr and script writes to stderr', (done: Mocha.Done) => { + this.timeout(1000); + + let tp = path.join(__dirname, 'L0failIfStdErr.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + assert(tr.ran('/usr/local/bin/bash /script.sh arg1 arg2'), 'it should have run ShellScript'); + assert(tr.invokedToolCount == 1, 'should have only run ShellScript'); + // failOnStdErr true + assert(tr.stderr.length > 0, 'should have written to stderr'); + assert(tr.failed, 'task should have failed'); + done(); + }) + + it('fails if cwd not set', (done: Mocha.Done) => { + this.timeout(1000); + + let tp = path.join(__dirname, 'L0failNoCwd.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + assert(tr.invokedToolCount == 0, 'should not have run ShellScript'); + assert(tr.failed, 'task should have failed'); + done(); + }) + + it('fails if script not found', (done: Mocha.Done) => { + this.timeout(1000); + + let tp = path.join(__dirname, 'L0failIfScriptNotFound.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + assert(tr.invokedToolCount == 0, 'should not have run ShellScript'); + assert(tr.failed, 'task should have failed'); + assert(tr.stdOutContained('Not found /notexistscript.sh')); + done(); + }) +}); diff --git a/_generated/ShellScriptV2_Node20/Tests/L0failIfReturns1.ts b/_generated/ShellScriptV2_Node20/Tests/L0failIfReturns1.ts new file mode 100644 index 000000000000..ca401b9ab395 --- /dev/null +++ b/_generated/ShellScriptV2_Node20/Tests/L0failIfReturns1.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, '..', 'shellscript.js'); +let tmr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tmr.setInput('scriptPath', '/script.sh'); +tmr.setInput('args', 'arg1 arg2'); +tmr.setInput('cwd', 'fake/wd'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "bash": "/usr/local/bin/bash", + "node": "/usr/local/bin/node" + }, + "exec": { + "/usr/local/bin/bash /script.sh arg1 arg2": { + "code": 1, + "stdout": "bash output here", + "stderr": "bash error output here" + } + }, + "checkPath" : { + "/usr/local/bin/bash": true, + "/usr/local/bin/node": true, + "/script.sh" : true + } +}; +tmr.setAnswers(a); + +// if you need to, you can mock a specific module function called in task +// tmr.registerMock('./taskmod', { +// sayHello: function() { +// console.log('Hello Mock!'); +// } +// }); + +tmr.run(); + diff --git a/_generated/ShellScriptV2_Node20/Tests/L0failIfScriptNotFound.ts b/_generated/ShellScriptV2_Node20/Tests/L0failIfScriptNotFound.ts new file mode 100644 index 000000000000..0a64486c7745 --- /dev/null +++ b/_generated/ShellScriptV2_Node20/Tests/L0failIfScriptNotFound.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, '..', 'shellscript.js'); +let tmr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tmr.setInput('scriptPath', '/notexistscript.sh'); +tmr.setInput('args', 'arg1 arg2'); +tmr.setInput('cwd', 'fake/wd'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "bash": "/usr/local/bin/bash", + "node": "/usr/local/bin/node" + }, + "exec": { + "/usr/local/bin/bash /script.sh arg1 arg2": { + "code": 0, + "stdout": "bash output here", + "stderr": "" + } + }, + "checkPath" : { + "/usr/local/bin/bash": true, + "/usr/local/bin/node": true, + "/script.sh" : true + } +}; +tmr.setAnswers(a); + +// if you need to, you can mock a specific module function called in task +// tmr.registerMock('./taskmod', { +// sayHello: function() { +// console.log('Hello Mock!'); +// } +// }); + +tmr.run(); + diff --git a/_generated/ShellScriptV2_Node20/Tests/L0failIfStdErr.ts b/_generated/ShellScriptV2_Node20/Tests/L0failIfStdErr.ts new file mode 100644 index 000000000000..bdf92e2d2b10 --- /dev/null +++ b/_generated/ShellScriptV2_Node20/Tests/L0failIfStdErr.ts @@ -0,0 +1,43 @@ + +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, '..', 'shellscript.js'); +let tmr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tmr.setInput('scriptPath', '/script.sh'); +tmr.setInput('args', 'arg1 arg2'); +tmr.setInput('cwd', 'fake/wd'); +tmr.setInput('failOnStandardError', 'true'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "bash": "/usr/local/bin/bash", + "node": "/usr/local/bin/node" + }, + "exec": { + "/usr/local/bin/bash /script.sh arg1 arg2": { + "code": 0, + "stdout": "bash output here", + "stderr": "bash error output here" + } + }, + "checkPath" : { + "/usr/local/bin/bash": true, + "/usr/local/bin/node": true, + "/script.sh" : true + } +}; +tmr.setAnswers(a); + +// if you need to, you can mock a specific module function called in task +// tmr.registerMock('./taskmod', { +// sayHello: function() { +// console.log('Hello Mock!'); +// } +// }); + +tmr.run(); + diff --git a/_generated/ShellScriptV2_Node20/Tests/L0failNoCwd.ts b/_generated/ShellScriptV2_Node20/Tests/L0failNoCwd.ts new file mode 100644 index 000000000000..ae683fea71c9 --- /dev/null +++ b/_generated/ShellScriptV2_Node20/Tests/L0failNoCwd.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, '..', 'shellscript.js'); +let tmr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tmr.setInput('scriptPath', '/script.sh'); +tmr.setInput('args', 'arg1 arg2'); +//tmr.setInput('cwd', 'fake/wd'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "bash": "/usr/local/bin/bash", + "node": "/usr/local/bin/node" + }, + "exec": { + "/usr/local/bin/bash /script.sh arg1 arg2": { + "code": 0, + "stdout": "bash output here", + "stderr": "" + } + }, + "checkPath" : { + "/usr/local/bin/bash": true, + "/usr/local/bin/node": true, + "/script.sh" : true + } +}; +tmr.setAnswers(a); + +// if you need to, you can mock a specific module function called in task +// tmr.registerMock('./taskmod', { +// sayHello: function() { +// console.log('Hello Mock!'); +// } +// }); + +tmr.run(); + diff --git a/_generated/ShellScriptV2_Node20/Tests/L0runsInCwd.ts b/_generated/ShellScriptV2_Node20/Tests/L0runsInCwd.ts new file mode 100644 index 000000000000..3470cc654d98 --- /dev/null +++ b/_generated/ShellScriptV2_Node20/Tests/L0runsInCwd.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, '..', 'shellscript.js'); +let tmr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tmr.setInput('scriptPath', '/script.sh'); +tmr.setInput('args', 'arg1 arg2'); +tmr.setInput('cwd', 'fake/wd'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "bash": "/usr/local/bin/bash", + "node": "/usr/local/bin/node" + }, + "exec": { + "/usr/local/bin/bash /script.sh arg1 arg2": { + "code": 0, + "stdout": "bash output here", + "stderr": "" + } + }, + "checkPath" : { + "/usr/local/bin/bash": true, + "/usr/local/bin/node": true, + "/script.sh" : true + } +}; +tmr.setAnswers(a); + +// if you need to, you can mock a specific module function called in task +// tmr.registerMock('./taskmod', { +// sayHello: function() { +// console.log('Hello Mock!'); +// } +// }); + +tmr.run(); + diff --git a/_generated/ShellScriptV2_Node20/icon.png b/_generated/ShellScriptV2_Node20/icon.png new file mode 100644 index 000000000000..b89cda612f6e Binary files /dev/null and b/_generated/ShellScriptV2_Node20/icon.png differ diff --git a/_generated/ShellScriptV2_Node20/icon.svg b/_generated/ShellScriptV2_Node20/icon.svg new file mode 100644 index 000000000000..001df035e509 --- /dev/null +++ b/_generated/ShellScriptV2_Node20/icon.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/_generated/ShellScriptV2_Node20/package-lock.json b/_generated/ShellScriptV2_Node20/package-lock.json new file mode 100644 index 000000000000..a8906bae0fc6 --- /dev/null +++ b/_generated/ShellScriptV2_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/_generated/ShellScriptV2_Node20/package.json b/_generated/ShellScriptV2_Node20/package.json new file mode 100644 index 000000000000..b75a6ce6de66 --- /dev/null +++ b/_generated/ShellScriptV2_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/_generated/ShellScriptV2_Node20/shellscript.ts b/_generated/ShellScriptV2_Node20/shellscript.ts new file mode 100644 index 000000000000..1ee9c14e8d21 --- /dev/null +++ b/_generated/ShellScriptV2_Node20/shellscript.ts @@ -0,0 +1,40 @@ +import path = require('path'); +import tl = require('azure-pipelines-task-lib/task'); +import trm = require('azure-pipelines-task-lib/toolrunner'); + +async function run() { + try { + tl.setResourcePath(path.join( __dirname, 'task.json')); + + var bash: trm.ToolRunner = tl.tool(tl.which('bash', true)); + + var scriptPath: string = tl.getPathInput('scriptPath', true, true); + var cwd: string = tl.getPathInput('cwd', true, false); + + // if user didn't supply a cwd (advanced), then set cwd to folder script is in. + // All "script" tasks should do this + if (!tl.filePathSupplied('cwd') && !tl.getBoolInput('disableAutoCwd', false)) { + cwd = path.dirname(scriptPath); + } + tl.mkdirP(cwd); + tl.cd(cwd); + + bash.arg(scriptPath); + + // additional args should always call argString. argString() parses quoted arg strings + bash.line(tl.getInput('args', false)); + + // determines whether output to stderr will fail a task. + // some tools write progress and other warnings to stderr. scripts can also redirect. + var failOnStdErr: boolean = tl.getBoolInput('failOnStandardError', false); + + var code: number = await bash.exec({failOnStdErr: failOnStdErr}); + tl.setResult(tl.TaskResult.Succeeded, tl.loc('BashReturnCode', code)); + } + catch(err) { + tl.error(err.message); + tl.setResult(tl.TaskResult.Failed, tl.loc('BashFailed', err.message)); + } +} + +run(); diff --git a/_generated/ShellScriptV2_Node20/task.json b/_generated/ShellScriptV2_Node20/task.json new file mode 100644 index 000000000000..6a3e9130e1fb --- /dev/null +++ b/_generated/ShellScriptV2_Node20/task.json @@ -0,0 +1,102 @@ +{ + "id": "6C731C3C-3C68-459A-A5C9-BDE6E6595B5B", + "name": "ShellScript", + "friendlyName": "Shell script", + "description": "Run a shell script using Bash", + "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/shell-script", + "helpMarkDown": "[Learn more about this task](https://go.microsoft.com/fwlink/?LinkID=613738)", + "category": "Utility", + "visibility": [ + "Build", + "Release" + ], + "runsOn": [ + "Agent", + "DeploymentGroup" + ], + "author": "Microsoft Corporation", + "version": { + "Major": 2, + "Minor": 229, + "Patch": 4 + }, + "demands": [ + "sh" + ], + "instanceNameFormat": "Shell Script $(scriptPath)", + "groups": [ + { + "name": "advanced", + "displayName": "Advanced", + "isExpanded": false + } + ], + "inputs": [ + { + "name": "scriptPath", + "type": "filePath", + "label": "Script Path", + "defaultValue": "", + "required": true, + "helpMarkDown": "Relative path from repo root of the shell script file to run." + }, + { + "name": "args", + "type": "string", + "label": "Arguments", + "defaultValue": "", + "required": false, + "helpMarkDown": "Arguments passed to the shell script" + }, + { + "name": "disableAutoCwd", + "type": "boolean", + "label": "Specify Working Directory", + "defaultValue": "false", + "required": false, + "helpMarkDown": "The default behavior is to set the working directory to the script location. This enables you to optionally specify a different working directory.", + "groupName": "advanced" + }, + { + "name": "cwd", + "type": "filePath", + "label": "Working Directory", + "defaultValue": "", + "required": false, + "visibleRule": "disableAutoCwd = true", + "helpMarkDown": "Current working directory where the script is run. Empty is the root of the repo (build) or artifacts (release), which is $(System.DefaultWorkingDirectory).", + "groupName": "advanced" + }, + { + "name": "failOnStandardError", + "type": "boolean", + "label": "Fail on Standard Error", + "defaultValue": "false", + "required": false, + "helpMarkDown": "If this is true, this task will fail if any errors are written to the StandardError stream.", + "groupName": "advanced" + } + ], + "execution": { + "Node10": { + "target": "shellscript.js", + "argumentFormat": "" + }, + "Node16": { + "target": "shellscript.js", + "argumentFormat": "" + }, + "Node20": { + "target": "shellscript.js", + "argumentFormat": "" + } + }, + "messages": { + "BashReturnCode": "Bash exited with return code: %d", + "BashFailed": "Bash failed with error: %s" + }, + "_buildConfigMapping": { + "Default": "2.229.3", + "Node20-225": "2.229.4" + } +} \ No newline at end of file diff --git a/_generated/ShellScriptV2_Node20/task.loc.json b/_generated/ShellScriptV2_Node20/task.loc.json new file mode 100644 index 000000000000..e1d507845a0a --- /dev/null +++ b/_generated/ShellScriptV2_Node20/task.loc.json @@ -0,0 +1,102 @@ +{ + "id": "6C731C3C-3C68-459A-A5C9-BDE6E6595B5B", + "name": "ShellScript", + "friendlyName": "ms-resource:loc.friendlyName", + "description": "ms-resource:loc.description", + "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/utility/shell-script", + "helpMarkDown": "ms-resource:loc.helpMarkDown", + "category": "Utility", + "visibility": [ + "Build", + "Release" + ], + "runsOn": [ + "Agent", + "DeploymentGroup" + ], + "author": "Microsoft Corporation", + "version": { + "Major": 2, + "Minor": 229, + "Patch": 4 + }, + "demands": [ + "sh" + ], + "instanceNameFormat": "ms-resource:loc.instanceNameFormat", + "groups": [ + { + "name": "advanced", + "displayName": "ms-resource:loc.group.displayName.advanced", + "isExpanded": false + } + ], + "inputs": [ + { + "name": "scriptPath", + "type": "filePath", + "label": "ms-resource:loc.input.label.scriptPath", + "defaultValue": "", + "required": true, + "helpMarkDown": "ms-resource:loc.input.help.scriptPath" + }, + { + "name": "args", + "type": "string", + "label": "ms-resource:loc.input.label.args", + "defaultValue": "", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.args" + }, + { + "name": "disableAutoCwd", + "type": "boolean", + "label": "ms-resource:loc.input.label.disableAutoCwd", + "defaultValue": "false", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.disableAutoCwd", + "groupName": "advanced" + }, + { + "name": "cwd", + "type": "filePath", + "label": "ms-resource:loc.input.label.cwd", + "defaultValue": "", + "required": false, + "visibleRule": "disableAutoCwd = true", + "helpMarkDown": "ms-resource:loc.input.help.cwd", + "groupName": "advanced" + }, + { + "name": "failOnStandardError", + "type": "boolean", + "label": "ms-resource:loc.input.label.failOnStandardError", + "defaultValue": "false", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.failOnStandardError", + "groupName": "advanced" + } + ], + "execution": { + "Node10": { + "target": "shellscript.js", + "argumentFormat": "" + }, + "Node16": { + "target": "shellscript.js", + "argumentFormat": "" + }, + "Node20": { + "target": "shellscript.js", + "argumentFormat": "" + } + }, + "messages": { + "BashReturnCode": "ms-resource:loc.messages.BashReturnCode", + "BashFailed": "ms-resource:loc.messages.BashFailed" + }, + "_buildConfigMapping": { + "Default": "2.229.3", + "Node20-225": "2.229.4" + } +} \ No newline at end of file diff --git a/_generated/ShellScriptV2_Node20/tsconfig.json b/_generated/ShellScriptV2_Node20/tsconfig.json new file mode 100644 index 000000000000..0438b79f69ac --- /dev/null +++ b/_generated/ShellScriptV2_Node20/tsconfig.json @@ -0,0 +1,6 @@ +{ + "compilerOptions": { + "target": "ES6", + "module": "commonjs" + } +} \ No newline at end of file diff --git a/_generated/SshV0.versionmap.txt b/_generated/SshV0.versionmap.txt new file mode 100644 index 000000000000..5c02e34a2d91 --- /dev/null +++ b/_generated/SshV0.versionmap.txt @@ -0,0 +1,2 @@ +Default|0.229.4 +Node20-225|0.229.5 diff --git a/_generated/SshV0/Strings/resources.resjson/de-DE/resources.resjson b/_generated/SshV0/Strings/resources.resjson/de-DE/resources.resjson new file mode 100644 index 000000000000..5faf67047710 --- /dev/null +++ b/_generated/SshV0/Strings/resources.resjson/de-DE/resources.resjson @@ -0,0 +1,39 @@ +{ + "loc.friendlyName": "SSH", + "loc.helpMarkDown": "[Weitere Informationen zu dieser Aufgabe](http://go.microsoft.com/fwlink/?LinkId=821892)", + "loc.description": "Führt Shellbefehle oder ein Skript auf einem Remotecomputer mithilfe von SSH aus.", + "loc.instanceNameFormat": "Shell $(runOptions) auf dem Remotecomputer ausführen", + "loc.group.displayName.advanced": "Erweitert", + "loc.input.label.sshEndpoint": "SSH-Dienstverbindung", + "loc.input.help.sshEndpoint": "Die SSH-Dienstverbindung mit Verbindungsdetails für den Remotecomputer.", + "loc.input.label.runOptions": "Ausführen", + "loc.input.help.runOptions": "Führen Sie wahlweise Shellbefehle oder ein Shellskript auf dem Remotecomputer aus.", + "loc.input.label.commands": "Befehle", + "loc.input.help.commands": "Gibt die Shellbefehle an, die auf dem Remotecomputer ausgeführt werden sollen. Geben Sie jeden Befehl zusammen mit seinen Argumenten in eine neue Zeile ein. Wenn Sie mehrere Befehle gleichzeitig ausführen möchten, geben Sie sie in der gleichen Zeile getrennt durch Semikolons ein (z. B. \"cd /home/user/myFolder;build\").", + "loc.input.label.scriptPath": "Shellskriptpfad", + "loc.input.help.scriptPath": "Der Pfad zur Shellskriptdatei, die auf dem Remotecomputer ausgeführt werden soll.", + "loc.input.label.inline": "Inlineskript", + "loc.input.help.inline": "Schreiben Sie das Shellskript zur Ausführung auf dem Remotecomputer.", + "loc.input.label.interpreterCommand": "Interpreterbefehl", + "loc.input.help.interpreterCommand": "Pfad zum Befehlsinterpreter, der zum Ausführen des Skripts verwendet wird. Fügt am Anfang des Skripts eine Shebang-Zeile hinzu. Nur für UNIX-ähnliche Betriebssysteme relevant. Verwenden Sie eine leere Zeichenfolge für Windows-basierte Remotehosts. [Weitere Informationen zu Shebang (#!)](https://homepages.cwi.nl/~aeb/std/shebang/unix-faq.txt)", + "loc.input.label.args": "Argumente", + "loc.input.help.args": "An das Shellskript zu übergebende Argumente.", + "loc.input.label.failOnStdErr": "Fehler für STDERR", + "loc.input.help.failOnStdErr": "Wenn diese Option ausgewählt ist, tritt ein Buildfehler auf, wenn die Remotebefehle oder Skripts in STDERR schreiben.", + "loc.input.label.interactiveSession": "Interaktive Sitzung aktivieren", + "loc.input.help.interactiveSession": "Wenn diese Option ausgewählt ist, wird eine interaktive Sitzung gestartet – bei einer Kennwortanforderung wird das Benutzerkennwort eingefügt. Die Ausführung von Befehlen wie \"sudo\" ist möglicherweise hilfreich.", + "loc.input.label.readyTimeout": "Timeout für SSH-Handshake", + "loc.input.help.readyTimeout": "Gibt an, wie lange (in Millisekunden) auf den Abschluss des SSH-Handshakes gewartet wird.", + "loc.input.label.interactiveKeyboardAuthentication": "Verwenden der interaktiven Tastaturauthentifizierung", + "loc.input.help.interactiveKeyboardAuthentication": "Verwenden Sie diesen Wert, wenn PasswordAuthentication auf dem Zielcomputer deaktiviert ist.", + "loc.messages.ConnectionFailed": "Fehler beim Herstellen einer Verbindung mit dem Remotecomputer. Überprüfen Sie die SSH-Dienstverbindungsdetails. Fehler: %s.", + "loc.messages.FailedToWriteScript": "Fehler beim Schreiben des Skripts auf den Datenträger: %s", + "loc.messages.RemoteCmdExecutionErr": "Fehler des Befehls auf dem Remotecomputer.", + "loc.messages.RemoteCmdNonZeroExitCode": "Der Befehl \"%s\" wurde mit dem Code %s beendet.", + "loc.messages.RemoteCopyFailed": "Fehler beim Kopieren des Skripts auf den Remotecomputer. Fehler: %s.", + "loc.messages.RemoteScriptFileCleanUpFailed": "Fehler beim Löschen der Skriptdatei, die auf den Remotecomputer kopiert wurde. Fehler = %s.", + "loc.messages.SettingUpSshConnection": "Es wird versucht, eine SSH-Verbindung mit \"%s@%s:%s\" einzurichten.", + "loc.messages.SshConnectionSuccessful": "Verbindung erfolgreich hergestellt.", + "loc.messages.UseDefaultPort": "Port 22 wird als Standardeinstellung für SSH verwendet, da kein Port angegeben wurde.", + "loc.messages.ScriptArgsSanitized": "Erkannte Zeichen in Argumenten, die von der Shell möglicherweise nicht ordnungsgemäß ausgeführt werden. Verwenden Sie einen umgekehrten Schrägstrich (\\), um Sonderzeichen mit Escapezeichen zu versehen. Weitere Informationen finden Sie hier: https://aka.ms/ado/75787" +} \ No newline at end of file diff --git a/_generated/SshV0/Strings/resources.resjson/en-US/resources.resjson b/_generated/SshV0/Strings/resources.resjson/en-US/resources.resjson new file mode 100644 index 000000000000..885d6ba022bb --- /dev/null +++ b/_generated/SshV0/Strings/resources.resjson/en-US/resources.resjson @@ -0,0 +1,39 @@ +{ + "loc.friendlyName": "SSH", + "loc.helpMarkDown": "[Learn more about this task](http://go.microsoft.com/fwlink/?LinkId=821892)", + "loc.description": "Run shell commands or a script on a remote machine using SSH", + "loc.instanceNameFormat": "Run shell $(runOptions) on remote machine", + "loc.group.displayName.advanced": "Advanced", + "loc.input.label.sshEndpoint": "SSH service connection", + "loc.input.help.sshEndpoint": "SSH service connection with connection details for the remote machine.", + "loc.input.label.runOptions": "Run", + "loc.input.help.runOptions": "Choose to either run shell commands or a shell script on the remote machine.", + "loc.input.label.commands": "Commands", + "loc.input.help.commands": "Specify the shell commands to run on the remote machine. Enter each command along with its arguments on a new line. To run multiple commands together, enter them on the same line separated by semi-colons (e.g. cd /home/user/myFolder;build).", + "loc.input.label.scriptPath": "Shell script path", + "loc.input.help.scriptPath": "Path to the shell script file to run on the remote machine.", + "loc.input.label.inline": "Inline Script", + "loc.input.help.inline": "Write the shell script to run on the remote machine.", + "loc.input.label.interpreterCommand": "Interpreter command", + "loc.input.help.interpreterCommand": "Path to the command interpreter used to execute the script. Adds a shebang line to the beginning of the script. Relevant only for UNIX-like operating systems. Please use empty string for Windows-based remote hosts. [See more about shebang (#!)](https://homepages.cwi.nl/~aeb/std/shebang/unix-faq.txt)", + "loc.input.label.args": "Arguments", + "loc.input.help.args": "Arguments to pass to the shell script.", + "loc.input.label.failOnStdErr": "Fail on STDERR", + "loc.input.help.failOnStdErr": "If this option is selected, the build will fail when the remote commands or script write to STDERR.", + "loc.input.label.interactiveSession": "Enable interactive session", + "loc.input.help.interactiveSession": "If this option is selected, interactive session will be started - if there's a password request, it will be filled by user's password. It could be useful to run commands like 'sudo'", + "loc.input.label.readyTimeout": "SSH handshake timeout", + "loc.input.help.readyTimeout": "How long (in milliseconds) to wait for the SSH handshake to complete.", + "loc.input.label.interactiveKeyboardAuthentication": "Use interactive-keyboard authentication", + "loc.input.help.interactiveKeyboardAuthentication": "Use this value if PasswordAuthentication is disabled on the target machine", + "loc.messages.ConnectionFailed": "Failed to connect to remote machine. Verify the SSH service connection details. Error: %s.", + "loc.messages.FailedToWriteScript": "Failed to write the script to disk: %s", + "loc.messages.RemoteCmdExecutionErr": "Command failed with errors on remote machine.", + "loc.messages.RemoteCmdNonZeroExitCode": "Command %s exited with code %s.", + "loc.messages.RemoteCopyFailed": "Failed to copy script to remote machine. Error: %s.", + "loc.messages.RemoteScriptFileCleanUpFailed": "Failed to delete the script file copied to the remote machine. Error = %s.", + "loc.messages.SettingUpSshConnection": "Trying to establish an SSH connection to %s@%s:%s", + "loc.messages.SshConnectionSuccessful": "Successfully connected.", + "loc.messages.UseDefaultPort": "Using port 22 which is the default for SSH since no port was specified.", + "loc.messages.ScriptArgsSanitized": "Detected characters in arguments that may not be executed correctly by the shell. Please escape special characters using backslash (\\). More information is available here: https://aka.ms/ado/75787" +} \ No newline at end of file diff --git a/_generated/SshV0/Strings/resources.resjson/es-ES/resources.resjson b/_generated/SshV0/Strings/resources.resjson/es-ES/resources.resjson new file mode 100644 index 000000000000..40d4fcc748af --- /dev/null +++ b/_generated/SshV0/Strings/resources.resjson/es-ES/resources.resjson @@ -0,0 +1,39 @@ +{ + "loc.friendlyName": "SSH", + "loc.helpMarkDown": "[Obtener más información acerca de esta tarea](http://go.microsoft.com/fwlink/?LinkId=821892)", + "loc.description": "Ejecuta comandos de shell o un script en una máquina remota usando SSH", + "loc.instanceNameFormat": "Ejecutar el shell $(runOptions) en la máquina remota", + "loc.group.displayName.advanced": "Avanzado", + "loc.input.label.sshEndpoint": "Conexión de servicio SSH", + "loc.input.help.sshEndpoint": "Conexión de servicio SSH con los detalles de conexión para la máquina remota.", + "loc.input.label.runOptions": "Ejecutar", + "loc.input.help.runOptions": "Elija si quiere ejecutar comandos de shell o un script de shell en la máquina remota.", + "loc.input.label.commands": "Comandos", + "loc.input.help.commands": "Especifique los comandos de shell que deben ejecutarse en la máquina remota. Escriba cada comando con sus argumentos en una línea nueva. Para ejecutar varios comandos juntos, escríbalos en la misma línea separados con punto y coma (por ejemplo: cd /home/user/myFolder;build).", + "loc.input.label.scriptPath": "Ruta de acceso del script de shell", + "loc.input.help.scriptPath": "Ruta de acceso al archivo de script de shell que debe ejecutarse en la máquina remota.", + "loc.input.label.inline": "Script alineado", + "loc.input.help.inline": "Escriba el script de shell que debe ejecutarse en la máquina remota.", + "loc.input.label.interpreterCommand": "Comando del intérprete", + "loc.input.help.interpreterCommand": "Ruta de acceso al intérprete de comandos que se usa para ejecutar el script. Agrega una línea de shebang al principio del script. Solo es relevante para los sistemas operativos tipo UNIX. Use una cadena vacía para los hosts remotos basados en Windows. [Más información sobre shebang (#!)](https://homepages.cwi.nl/~aeb/std/shebang/unix-faq.txt)", + "loc.input.label.args": "Argumentos", + "loc.input.help.args": "Argumentos que se pasan al script de shell.", + "loc.input.label.failOnStdErr": "Error en STDERR", + "loc.input.help.failOnStdErr": "Si se selecciona esta opción, la compilación dará error cuando el script o los comandos remotos escriban en STDERR.", + "loc.input.label.interactiveSession": "Habilitar la sesión interactiva", + "loc.input.help.interactiveSession": "Si se selecciona esta opción, se iniciará una sesión interactiva; si hay una solicitud de contraseña, se rellenará con la contraseña del usuario. Puede ser útil ejecutar comandos como \"sudo\".", + "loc.input.label.readyTimeout": "Tiempo de expiración del protocolo de enlace SSH", + "loc.input.help.readyTimeout": "Tiempo (en milisegundos) que debe esperarse para que se complete el protocolo de enlace SSH.", + "loc.input.label.interactiveKeyboardAuthentication": "Usar autenticación de teclado interactivo", + "loc.input.help.interactiveKeyboardAuthentication": "Usar este valor si PasswordAuthentication está deshabilitado en el equipo de destino", + "loc.messages.ConnectionFailed": "No se pudo conectar a la máquina remota. Compruebe los detalles de la conexión de servicio SSH. Error: %s.", + "loc.messages.FailedToWriteScript": "No se pudo escribir el script en el disco: %s", + "loc.messages.RemoteCmdExecutionErr": "No se pudo ejecutar el comando debido a errores en la máquina remota.", + "loc.messages.RemoteCmdNonZeroExitCode": "El comando %s finalizó con el código %s.", + "loc.messages.RemoteCopyFailed": "No se pudo copiar el script en la máquina remota. Error: %s.", + "loc.messages.RemoteScriptFileCleanUpFailed": "No se pudo eliminar el archivo de script copiado en la máquina remota. Error = %s.", + "loc.messages.SettingUpSshConnection": "Intentando establecer una conexión SSH con %s@%s: %s", + "loc.messages.SshConnectionSuccessful": "Conectado correctamente.", + "loc.messages.UseDefaultPort": "Usando el puerto 22, que es el predeterminado para SSH, porque no se especificó ningún puerto.", + "loc.messages.ScriptArgsSanitized": "Se detectaron caracteres en argumentos que el shell no puede ejecutar correctamente. Escape de caracteres especiales con barra diagonal inversa (\\). Puede obtener más información aquí: https://aka.ms/ado/75787" +} \ No newline at end of file diff --git a/_generated/SshV0/Strings/resources.resjson/fr-FR/resources.resjson b/_generated/SshV0/Strings/resources.resjson/fr-FR/resources.resjson new file mode 100644 index 000000000000..888278040f0f --- /dev/null +++ b/_generated/SshV0/Strings/resources.resjson/fr-FR/resources.resjson @@ -0,0 +1,39 @@ +{ + "loc.friendlyName": "SSH", + "loc.helpMarkDown": "[En savoir plus sur cette tâche](http://go.microsoft.com/fwlink/?LinkId=821892)", + "loc.description": "Exécuter des commandes ou un script d'interpréteur de commandes sur une machine distante via SSH", + "loc.instanceNameFormat": "Exécuter l'interpréteur de commandes $(runOptions) sur la machine distante", + "loc.group.displayName.advanced": "Avancé", + "loc.input.label.sshEndpoint": "Connexion de service SSH", + "loc.input.help.sshEndpoint": "Connexion de service SSH avec les détails de connexion pour la machine distante.", + "loc.input.label.runOptions": "Exécuter", + "loc.input.help.runOptions": "Choisissez d'exécuter des commandes d'interpréteur de commandes ou un script d'interpréteur de commandes sur la machine distante.", + "loc.input.label.commands": "Commandes", + "loc.input.help.commands": "Spécifiez les commandes d'interpréteur de commandes à exécuter sur la machine distante. Entrez chaque commande avec ses arguments sur une nouvelle ligne. Pour exécuter plusieurs commandes à la fois, entrez-les sur la même ligne en les séparant par des points-virgules (exemple : cd /home/user/myFolder;build).", + "loc.input.label.scriptPath": "Chemin du script d'interpréteur de commandes", + "loc.input.help.scriptPath": "Chemin du fichier de script d'interpréteur de commandes à exécuter sur la machine distante.", + "loc.input.label.inline": "Script inline", + "loc.input.help.inline": "Écrivez le script d'interpréteur de commandes à exécuter sur la machine distante.", + "loc.input.label.interpreterCommand": "Commande d'interpréteur", + "loc.input.help.interpreterCommand": "Chemin de l'interpréteur de commandes utilisé pour exécuter le script. Ajoute une ligne shebang au début du script. Concerne uniquement les systèmes d'exploitation UNIX. Utilisez une chaîne vide pour les hôtes distants Windows. [En savoir plus sur shebang (#!)](https://homepages.cwi.nl/~aeb/std/shebang/unix-faq.txt)", + "loc.input.label.args": "Arguments", + "loc.input.help.args": "Arguments à passer au script d'interpréteur de commandes.", + "loc.input.label.failOnStdErr": "Échec sur STDERR", + "loc.input.help.failOnStdErr": "Si cette option est sélectionnée, un échec de la build se produit quand les commandes ou le script exécutés à distance écrivent dans STDERR.", + "loc.input.label.interactiveSession": "Activer la session interactive", + "loc.input.help.interactiveSession": "Si cette option est sélectionnée, la session interactive démarre. Si un mot de passe est demandé, celui de l'utilisateur est employé. Il peut s'avérer utile d'exécuter des commandes telles que 'sudo'", + "loc.input.label.readyTimeout": "Délai d'expiration de l'établissement d'une liaison SSH", + "loc.input.help.readyTimeout": "Durée (en millisecondes) d'attente de la fin de l'établissement d'une liaison SSH.", + "loc.input.label.interactiveKeyboardAuthentication": "Utiliser l’authentification interactive au clavier", + "loc.input.help.interactiveKeyboardAuthentication": "Utiliser cette valeur si PasswordAuthentication est désactivé sur la machine cible", + "loc.messages.ConnectionFailed": "Échec de la connexion à la machine distante. Vérifiez les détails de la connexion de service SSH. Erreur : %s.", + "loc.messages.FailedToWriteScript": "Échec de l'écriture du script sur le disque : %s", + "loc.messages.RemoteCmdExecutionErr": "Échec de la commande : erreurs sur la machine distante.", + "loc.messages.RemoteCmdNonZeroExitCode": "Arrêt de la commande %s. Code %s.", + "loc.messages.RemoteCopyFailed": "Échec de la copie du script sur la machine distante. Erreur : %s.", + "loc.messages.RemoteScriptFileCleanUpFailed": "Échec de la suppression du fichier de script copié sur la machine distante. Erreur = %s.", + "loc.messages.SettingUpSshConnection": "Tentative d'établissement d'une connexion SSH à %s@%s:%s", + "loc.messages.SshConnectionSuccessful": "Connexion réussie.", + "loc.messages.UseDefaultPort": "Utilisation du port 22, qui représente la valeur par défaut pour SSH, car aucun port n'a été spécifié.", + "loc.messages.ScriptArgsSanitized": "Caractères détectés dans les arguments qui peuvent ne pas être exécutés correctement par le shell. Veuillez échapper les caractères spéciaux en utilisant une barre oblique inverse (\\). Plus d'informations sont disponibles ici: https://aka.ms/ado/75787" +} \ No newline at end of file diff --git a/_generated/SshV0/Strings/resources.resjson/it-IT/resources.resjson b/_generated/SshV0/Strings/resources.resjson/it-IT/resources.resjson new file mode 100644 index 000000000000..0a86c81d43b2 --- /dev/null +++ b/_generated/SshV0/Strings/resources.resjson/it-IT/resources.resjson @@ -0,0 +1,39 @@ +{ + "loc.friendlyName": "SSH", + "loc.helpMarkDown": "[Altre informazioni su questa attività](http://go.microsoft.com/fwlink/?LinkId=821892)", + "loc.description": "Esegue i comandi della shell o uno script in un computer remoto usando SSH", + "loc.instanceNameFormat": "Esegui shell $(runOptions) nel computer remoto", + "loc.group.displayName.advanced": "Avanzate", + "loc.input.label.sshEndpoint": "Connessione al servizio SSH", + "loc.input.help.sshEndpoint": "Connessione al servizio SSH con i dettagli della connessione per il computer remoto.", + "loc.input.label.runOptions": "Esegui", + "loc.input.help.runOptions": "Consente di scegliere se eseguire i comandi della shell o uno script della shell nel computer remoto.", + "loc.input.label.commands": "Comandi", + "loc.input.help.commands": "Consente di specificare i comandi della shell da eseguire nel computer remoto. Immettere ogni comando unitamente ai relativi argomenti su una nuova riga. Per eseguire più comandi insieme, immetterli sulla stessa riga delimitandoli con punti e virgola, ad esempio cd /home/user/myFolder;build.", + "loc.input.label.scriptPath": "Percorso dello script della shell", + "loc.input.help.scriptPath": "Percorso del file di script della shell da eseguire nel computer remoto.", + "loc.input.label.inline": "Script inline", + "loc.input.help.inline": "Consente di scrivere lo script della shell da eseguire nel computer remoto.", + "loc.input.label.interpreterCommand": "Comando dell'interprete", + "loc.input.help.interpreterCommand": "Percorso dell'interprete dei comandi usato per eseguire lo script. Aggiunge una riga shebang all'inizio dello script. Pertinente solo per i sistemi operativi di tipo UNIX. Usare una stringa vuota per gli host remoti basati su Windows. [Altre informazioni su shebang (#!)](https://homepages.cwi.nl/~aeb/std/shebang/unix-faq.txt)", + "loc.input.label.args": "Argomenti", + "loc.input.help.args": "Argomenti da passare allo script della shell.", + "loc.input.label.failOnStdErr": "Interrompi in caso di STDERR", + "loc.input.help.failOnStdErr": "Se questa opzione è selezionata, la compilazione non riuscirà quando lo script o i comandi remoti scriveranno in STDERR.", + "loc.input.label.interactiveSession": "Abilita sessione interattiva", + "loc.input.help.interactiveSession": "Se questa opzione è selezionata, verrà avviata la sessione interattiva; se è presente una richiesta di password, verrà inserita la password dell'utente. Potrebbe essere utile eseguire comandi come 'sudo'", + "loc.input.label.readyTimeout": "Timeout per handshake SSH", + "loc.input.help.readyTimeout": "Indica per quanto tempo (in millisecondi) attendere il completamento dell'handshake SSH.", + "loc.input.label.interactiveKeyboardAuthentication": "Usa l'autenticazione tramite tastiera interattiva", + "loc.input.help.interactiveKeyboardAuthentication": "Usa questo valore se PasswordAuthentication è disabilitato nel computer di destinazione", + "loc.messages.ConnectionFailed": "Non è stato possibile connettersi al computer remoto. Verificare i dettagli della connessione al servizio SSH. Errore: %s.", + "loc.messages.FailedToWriteScript": "Non è stato possibile scrivere lo script sul disco: %s", + "loc.messages.RemoteCmdExecutionErr": "Il comando non è riuscito e si sono verificati errori nel computer remoto.", + "loc.messages.RemoteCmdNonZeroExitCode": "Il comando %s è stato terminato. Codice: %s.", + "loc.messages.RemoteCopyFailed": "Non è stato possibile copiare lo script nel computer remoto. Errore: %s.", + "loc.messages.RemoteScriptFileCleanUpFailed": "Non è stato possibile eliminare il file di script copiato nel computer remoto. Errore = %s.", + "loc.messages.SettingUpSshConnection": "Tentativo di stabilire una connessione SSH a %s@%s:%s", + "loc.messages.SshConnectionSuccessful": "La connessione è riuscita.", + "loc.messages.UseDefaultPort": "Verrà usata la porta 22 che corrisponde a quella predefinita per SSH perché non è stata specificata alcuna porta.", + "loc.messages.ScriptArgsSanitized": "Sono stati rilevati caratteri negli argomenti che potrebbero non essere eseguiti correttamente dalla shell. Eseguire l'escape dei caratteri speciali usando la barra rovesciata (\\). Ulteriori informazioni sono disponibili qui: https://aka.ms/ado/75787" +} \ No newline at end of file diff --git a/_generated/SshV0/Strings/resources.resjson/ja-JP/resources.resjson b/_generated/SshV0/Strings/resources.resjson/ja-JP/resources.resjson new file mode 100644 index 000000000000..7ba0c70772f0 --- /dev/null +++ b/_generated/SshV0/Strings/resources.resjson/ja-JP/resources.resjson @@ -0,0 +1,39 @@ +{ + "loc.friendlyName": "SSH", + "loc.helpMarkDown": "[このタスクの詳細を表示](http://go.microsoft.com/fwlink/?LinkId=821892)", + "loc.description": "SSH を使用してリモート コンピューター上でシェル コマンドまたはスクリプトを実行します", + "loc.instanceNameFormat": "リモート コンピューター上でシェル $(runOptions) を実行します", + "loc.group.displayName.advanced": "詳細設定", + "loc.input.label.sshEndpoint": "SSH サービス接続", + "loc.input.help.sshEndpoint": "リモート マシンの接続詳細が設定された SSH サービス接続。", + "loc.input.label.runOptions": "実行", + "loc.input.help.runOptions": "リモート コンピューター上でシェル コマンドとシェル スクリプトのどちらを実行するか選択します。", + "loc.input.label.commands": "コマンド", + "loc.input.help.commands": "シェル コマンドがリモート コンピューター上で実行されるように指定します。新しい行に各コマンドとその引数を入力します。複数のコマンドを一緒に実行する場合、それらを同じ行に入力してセミコロンで区切ります。(例: cd /home/user/myFolder;build)。", + "loc.input.label.scriptPath": "シェル スクリプト パス", + "loc.input.help.scriptPath": "リモート コンピューター上で実行するシェル スクリプト ファイルへのパス。", + "loc.input.label.inline": "インライン スクリプト", + "loc.input.help.inline": "リモート マシン上で実行するシェル スクリプトを記述します。", + "loc.input.label.interpreterCommand": "インタープリター コマンド", + "loc.input.help.interpreterCommand": "スクリプトの実行に使用されるコマンド インタープリターへのパス。スクリプトの先頭に shebang 行を追加します。UNIX 系オペレーティング システムのみに関連します。Windows ベースのリモート ホストには空の文字列をお使いください。[shebang (#!) の詳細を表示](https://homepages.cwi.nl/~aeb/std/shebang/unix-faq.txt)", + "loc.input.label.args": "引数", + "loc.input.help.args": "シェル スクリプトに渡す引数。", + "loc.input.label.failOnStdErr": "STDERR でのエラー", + "loc.input.help.failOnStdErr": "このオプションを選択すると、リモート コマンドまたはスクリプトが STDERR に書き込みを行う場合、ビルドは失敗します。", + "loc.input.label.interactiveSession": "対話型セッションを有効にする", + "loc.input.help.interactiveSession": "このオプションを選択すると、対話型セッションが開始されます。パスワード要求がある場合、ユーザーのパスワードが入力されます。これは 'sudo' などのコマンドを実行するのに役立つ可能性があります。", + "loc.input.label.readyTimeout": "SSH ハンドシェイクのタイムアウト", + "loc.input.help.readyTimeout": "SSH ハンドシェイクの完了を待機する時間 (ミリ秒)。", + "loc.input.label.interactiveKeyboardAuthentication": "対話型キーボード認証を使用する", + "loc.input.help.interactiveKeyboardAuthentication": "対象のコンピューターで PasswordAuthentication が無効になっている場合は、この値を使用します", + "loc.messages.ConnectionFailed": "リモート マシンへの接続に失敗しました。SSH サービス接続の詳細を確認してください。エラー: %s。", + "loc.messages.FailedToWriteScript": "スクリプトをディスクに書き込めませんでした: %s", + "loc.messages.RemoteCmdExecutionErr": "リモート コンピューター上のエラーにより、コマンドの実行に失敗しました。", + "loc.messages.RemoteCmdNonZeroExitCode": "コマンド %s がコード %s で終了しました。", + "loc.messages.RemoteCopyFailed": "リモート コンピューターへのスクリプトのコピーに失敗しました。エラー: %s。", + "loc.messages.RemoteScriptFileCleanUpFailed": "リモート コンピューターにコピーされたスクリプト ファイルの削除に失敗しました。エラー = %s。", + "loc.messages.SettingUpSshConnection": "%s@%s:%s への SSH 接続を確立しようとしています", + "loc.messages.SshConnectionSuccessful": "正常に接続しました。", + "loc.messages.UseDefaultPort": "ポートが指定されなかったため、SSH で既定のポート 22 を使用しています。", + "loc.messages.ScriptArgsSanitized": "シェルによって正しく実行されない可能性のある引数の文字が検出されました。円記号 (\\) を使用して特殊文字をエスケープしてください。詳細についてはこちら: https://aka.ms/ado/75787" +} \ No newline at end of file diff --git a/_generated/SshV0/Strings/resources.resjson/ko-KR/resources.resjson b/_generated/SshV0/Strings/resources.resjson/ko-KR/resources.resjson new file mode 100644 index 000000000000..8a8ba10d2483 --- /dev/null +++ b/_generated/SshV0/Strings/resources.resjson/ko-KR/resources.resjson @@ -0,0 +1,39 @@ +{ + "loc.friendlyName": "SSH", + "loc.helpMarkDown": "[이 작업에 대한 자세한 정보](http://go.microsoft.com/fwlink/?LinkId=821892)", + "loc.description": "SSH를 사용하여 원격 컴퓨터에서 셸 명령 또는 스크립트를 실행합니다.", + "loc.instanceNameFormat": "원격 컴퓨터에서 셸 $(runOptions) 실행", + "loc.group.displayName.advanced": "고급", + "loc.input.label.sshEndpoint": "SSH 서비스 연결", + "loc.input.help.sshEndpoint": "원격 머신의 연결 정보가 있는 SSH 서비스 연결입니다.", + "loc.input.label.runOptions": "실행", + "loc.input.help.runOptions": "원격 컴퓨터에서 셸 명령을 실행할지 또는 셸 스크립트를 실행할지 선택합니다.", + "loc.input.label.commands": "명령", + "loc.input.help.commands": "원격 컴퓨터에서 실행할 셸 명령을 지정합니다. 새 줄에 각 명령을 해당 인수와 함께 입력합니다. 여러 명령을 함께 실행하려면 같은 줄에 세미콜론으로 구분하여 여러 명령을 입력합니다(예: cd /home/user/myFolder;build).", + "loc.input.label.scriptPath": "셸 스크립트 경로", + "loc.input.help.scriptPath": "원격 컴퓨터에서 실행할 셸 스크립트 파일의 경로입니다.", + "loc.input.label.inline": "인라인 스크립트", + "loc.input.help.inline": "원격 컴퓨터에서 실행할 셸 스크립트를 작성합니다.", + "loc.input.label.interpreterCommand": "인터프리터 명령", + "loc.input.help.interpreterCommand": "스크립트를 실행하는 데 사용되는 명령 인터프리터의 경로입니다. 스크립트 시작 부분에 셔뱅 줄을 추가합니다. UNIX와 유사한 운영 체제에만 해당합니다. Windows 기반 원격 호스트에는 빈 문자열을 사용하세요. [셔뱅(#!)에 대한 자세한 정보](https://homepages.cwi.nl/~aeb/std/shebang/unix-faq.txt)", + "loc.input.label.args": "인수", + "loc.input.help.args": "셸 스크립트에 전달할 인수입니다.", + "loc.input.label.failOnStdErr": "STDERR이 발생할 경우 실패", + "loc.input.help.failOnStdErr": "이 옵션을 선택하면 원격 명령 또는 스크립트에서 STDERR에 쓰는 경우 빌드가 실패합니다.", + "loc.input.label.interactiveSession": "대화형 세션 사용", + "loc.input.help.interactiveSession": "이 옵션을 선택하면 대화형 세션이 시작됩니다. 암호 요청이 있는 경우 사용자의 암호로 채워집니다. 'sudo' 같은 명령을 실행하는 것이 유용할 수 있습니다.", + "loc.input.label.readyTimeout": "SSH 핸드셰이크 시간 제한", + "loc.input.help.readyTimeout": "SSH 핸드셰이크가 완료될 때까지 대기하는 시간(밀리초)입니다.", + "loc.input.label.interactiveKeyboardAuthentication": "대화형 키보드 인증 사용", + "loc.input.help.interactiveKeyboardAuthentication": "대상 시스템에서 PasswordAuthentication이 비활성화된 경우 이 값을 사용하세요.", + "loc.messages.ConnectionFailed": "원격 머신에 연결하지 못했습니다. SSH 서비스 연결 정보를 확인하세요. 오류: %s.", + "loc.messages.FailedToWriteScript": "%s 디스크에 스크립트를 쓰지 못했습니다.", + "loc.messages.RemoteCmdExecutionErr": "원격 컴퓨터에서 오류가 발생하여 명령이 실패했습니다.", + "loc.messages.RemoteCmdNonZeroExitCode": "%s 명령이 종료되었습니다(코드: %s).", + "loc.messages.RemoteCopyFailed": "원격 컴퓨터에 스크립트를 복사하지 못했습니다. 오류: %s.", + "loc.messages.RemoteScriptFileCleanUpFailed": "원격 컴퓨터에 복사된 스크립트 파일을 삭제하지 못했습니다. 오류 = %s.", + "loc.messages.SettingUpSshConnection": "%s@%s:%s에 대한 SSH 연결을 설정하는 중", + "loc.messages.SshConnectionSuccessful": "연결되었습니다.", + "loc.messages.UseDefaultPort": "포트가 지정되지 않았으므로 SSH에 대한 기본값인 포트 22를 사용합니다.", + "loc.messages.ScriptArgsSanitized": "셸에서 올바르게 실행되지 않을 수 있는 인수에서 검색된 문자입니다. 백슬래시(\\)를 사용하여 이스케이프 특수 문자를 만드세요. 자세한 내용은 https://aka.ms/ado/75787을 참조하세요." +} \ No newline at end of file diff --git a/_generated/SshV0/Strings/resources.resjson/ru-RU/resources.resjson b/_generated/SshV0/Strings/resources.resjson/ru-RU/resources.resjson new file mode 100644 index 000000000000..62c7d6a41acf --- /dev/null +++ b/_generated/SshV0/Strings/resources.resjson/ru-RU/resources.resjson @@ -0,0 +1,39 @@ +{ + "loc.friendlyName": "SSH", + "loc.helpMarkDown": "[См. дополнительные сведения об этой задаче](http://go.microsoft.com/fwlink/?LinkId=821892)", + "loc.description": "Запуск команд оболочки или сценария на удаленном компьютере с помощью SSH", + "loc.instanceNameFormat": "Запуск оболочки $(runOptions) на удаленном компьютере", + "loc.group.displayName.advanced": "Дополнительно", + "loc.input.label.sshEndpoint": "Подключение к службе SSH", + "loc.input.help.sshEndpoint": "Подключение к службе SSH со сведениями о подключении для удаленного компьютера.", + "loc.input.label.runOptions": "Запуск", + "loc.input.help.runOptions": "Выберите запуск команд оболочки или сценария оболочки на удаленном компьютере.", + "loc.input.label.commands": "Команды", + "loc.input.help.commands": "Укажите команды оболочки для запуска на удаленном компьютере. Каждую команду и ее аргументы необходимо вводить в новой строке. Чтобы одновременно выполнить несколько команд, введите их в одной строке, разделяя точкой с запятой (например, cd /home/user/myFolder;build).", + "loc.input.label.scriptPath": "Путь к сценарию оболочки", + "loc.input.help.scriptPath": "Путь к файлу сценария оболочки для запуска на удаленном компьютере.", + "loc.input.label.inline": "Встроенный сценарий", + "loc.input.help.inline": "Написание скрипта оболочки для запуска на удаленном компьютере.", + "loc.input.label.interpreterCommand": "Команда интерпретатора", + "loc.input.help.interpreterCommand": "Путь к интерпретатору команд, используемому для выполнения скрипта. Добавляет строку шебанга в начало скрипта. Применимо только для UNIX-подобных операционных систем. Для удаленных узлов на основе Windows укажите пустую строку. [Дополнительные сведения о шебанге (#!)](https://homepages.cwi.nl/~aeb/std/shebang/unix-faq.txt)", + "loc.input.label.args": "Аргументы", + "loc.input.help.args": "Аргументы, передаваемые в сценарий оболочки.", + "loc.input.label.failOnStdErr": "Ошибка в STDERR", + "loc.input.help.failOnStdErr": "Если этот параметр выбран, сборка завершится ошибкой при записи данных удаленными командами или сценарием в поток STDERR.", + "loc.input.label.interactiveSession": "Включить интерактивный сеанс", + "loc.input.help.interactiveSession": "Если выбран этот параметр, будет запущен интерактивный сеанс. При наличии запроса на пароль будет указан пароль пользователя. Это может быть удобно для выполнения таких команд, как \"sudo\".", + "loc.input.label.readyTimeout": "Время ожидания подтверждения SSH", + "loc.input.help.readyTimeout": "Время (в миллисекундах) для ожидания завершения подтверждения SSH.", + "loc.input.label.interactiveKeyboardAuthentication": "Использовать проверку подлинности с помощью интерактивной клавиатуры", + "loc.input.help.interactiveKeyboardAuthentication": "Используйте это значение, если параметр PasswordAuthentication отключен на целевом компьютере", + "loc.messages.ConnectionFailed": "Не удалось подключиться к удаленному компьютеру. Проверьте сведения о подключении к службе SSH. Ошибка: %s.", + "loc.messages.FailedToWriteScript": "Не удалось записать скрипт на диск: %s", + "loc.messages.RemoteCmdExecutionErr": "Сбой команды с ошибками на удаленном компьютере.", + "loc.messages.RemoteCmdNonZeroExitCode": "Выход из команды %s с кодом %s.", + "loc.messages.RemoteCopyFailed": "Не удалось скопировать сценарий на удаленный компьютер. Ошибка: %s.", + "loc.messages.RemoteScriptFileCleanUpFailed": "Не удалось удалить сценарий, скопированный на удаленный компьютер. Ошибка: %s.", + "loc.messages.SettingUpSshConnection": "Попытка установить SSH-подключение к %s@%s:%s", + "loc.messages.SshConnectionSuccessful": "Подключение успешно установлено.", + "loc.messages.UseDefaultPort": "Используется порт 22, который является портом по умолчанию для SSH, так как порт не указан.", + "loc.messages.ScriptArgsSanitized": "Обнаружены символы в аргументах, которые могут быть неправильно интерпретированы оболочкой. Экранируйте специальные символы с помощью обратной косой черты (\\). Дополнительные сведения см. на следующей странице: https://aka.ms/ado/75787" +} \ No newline at end of file diff --git a/_generated/SshV0/Strings/resources.resjson/zh-CN/resources.resjson b/_generated/SshV0/Strings/resources.resjson/zh-CN/resources.resjson new file mode 100644 index 000000000000..f2ba9e7bee56 --- /dev/null +++ b/_generated/SshV0/Strings/resources.resjson/zh-CN/resources.resjson @@ -0,0 +1,39 @@ +{ + "loc.friendlyName": "SSH", + "loc.helpMarkDown": "[详细了解此任务](http://go.microsoft.com/fwlink/?LinkId=821892)", + "loc.description": "使用 SSH 在远程计算机上运行 shell 命令或脚本", + "loc.instanceNameFormat": "在远程计算机上运行 shell $(runOptions)", + "loc.group.displayName.advanced": "高级", + "loc.input.label.sshEndpoint": "SSH 服务连接", + "loc.input.help.sshEndpoint": "含远程计算机连接详细信息的 SSH 服务连接。", + "loc.input.label.runOptions": "运行", + "loc.input.help.runOptions": "选择在远程计算机上运行 shell 命令或 shell 脚本。", + "loc.input.label.commands": "命令", + "loc.input.help.commands": "指定要在远程计算机上运行的 shell 命令。在新行上输入每个命令及其参数。若要同时运行多个命令,请在同一行上输入它们,以分号隔开(例如 cd /home/user/myFolder;build)。", + "loc.input.label.scriptPath": "Shell 脚本路径", + "loc.input.help.scriptPath": "要在远程计算机上运行的 shell 脚本文件的路径。", + "loc.input.label.inline": "内联脚本", + "loc.input.help.inline": "编写要在远程计算机上运行的 shell 脚本。", + "loc.input.label.interpreterCommand": "解释器命令", + "loc.input.help.interpreterCommand": "用于执行脚本的命令解释器的路径。请向脚本的开头添加一个 shebang (释伴)行。仅适用于与 UNIX 类似的操作系统。请对基于 Windows 的远程主机使用空字符串。[详细了解 shebang (#!)](https://homepages.cwi.nl/~aeb/std/shebang/unix-faq.txt)", + "loc.input.label.args": "参数", + "loc.input.help.args": "要传递给 shell 脚本的参数。", + "loc.input.label.failOnStdErr": "STDERR 故障", + "loc.input.help.failOnStdErr": "如果选择此选项,则 STDERR 中写入远程命令或脚本时,生成将失败。", + "loc.input.label.interactiveSession": "启用交互式会话", + "loc.input.help.interactiveSession": "如果选择此选项,将启动交互式会话 - 如果有密码请求,则将根据用户的密码填充它。这对运行 \"sudo\" 之类的命令可能很有用", + "loc.input.label.readyTimeout": "SSH 握手超时", + "loc.input.help.readyTimeout": "等待 SSH 握手完成的时间(毫秒)。", + "loc.input.label.interactiveKeyboardAuthentication": "使用交互式键盘身份验证", + "loc.input.help.interactiveKeyboardAuthentication": "如果在目标计算机上禁用了 PasswordAuthentication,请使用此值", + "loc.messages.ConnectionFailed": "无法连接到远程计算机。请验证 SSH 服务连接详细信息。错误: %s。", + "loc.messages.FailedToWriteScript": "未能将脚本写入磁盘: %s", + "loc.messages.RemoteCmdExecutionErr": "命令因远程计算机上的错误而失败。", + "loc.messages.RemoteCmdNonZeroExitCode": "命令 %s 已退出,代码为 %s。", + "loc.messages.RemoteCopyFailed": "无法将脚本复制到远程计算机。错误: %s。", + "loc.messages.RemoteScriptFileCleanUpFailed": "无法删除复制到远程计算机上的脚本文件。错误 = %s。", + "loc.messages.SettingUpSshConnection": "正在尝试建立与 %s@%s:%s 的 SSH 连接", + "loc.messages.SshConnectionSuccessful": "已成功连接。", + "loc.messages.UseDefaultPort": "由于未指定端口,将使用SSH 的默认端口 22。", + "loc.messages.ScriptArgsSanitized": "在参数中检测到可能无法由 shell 正确执行的字符。请使用反斜杠 (\\) 转义特殊字符。有关详细信息,请访问此处: https://aka.ms/ado/75787" +} \ No newline at end of file diff --git a/_generated/SshV0/Strings/resources.resjson/zh-TW/resources.resjson b/_generated/SshV0/Strings/resources.resjson/zh-TW/resources.resjson new file mode 100644 index 000000000000..6c398d9b2cc2 --- /dev/null +++ b/_generated/SshV0/Strings/resources.resjson/zh-TW/resources.resjson @@ -0,0 +1,39 @@ +{ + "loc.friendlyName": "SSH", + "loc.helpMarkDown": "[深入了解此工作](http://go.microsoft.com/fwlink/?LinkId=821892)", + "loc.description": "在使用 SSH 的遠端電腦上執行殼層命令或指令碼", + "loc.instanceNameFormat": "在遠端電腦上執行殼層 $(runOptions)", + "loc.group.displayName.advanced": "進階", + "loc.input.label.sshEndpoint": "SSH 服務連線", + "loc.input.help.sshEndpoint": "具有遠端電腦連線詳細資料的 SSH 服務連線。", + "loc.input.label.runOptions": "執行", + "loc.input.help.runOptions": "選擇要在遠端電腦上執行殼層命令或殼層指令碼。", + "loc.input.label.commands": "命令", + "loc.input.help.commands": "指定要在遠端電腦上執行的殼層命令。請以新行輸入每個命令及其引數。若要同時執行多個命令,請在同一行中輸入命令並以分號分隔 (例如 cd /home/user/myFolder;build)。", + "loc.input.label.scriptPath": "殼層指令碼路徑", + "loc.input.help.scriptPath": "要在遠端電腦上執行之殼層指令碼檔的路徑。", + "loc.input.label.inline": "內嵌指令碼", + "loc.input.help.inline": "撰寫要在遠端電腦上執行的 Shell 指令碼。", + "loc.input.label.interpreterCommand": "解譯器命令", + "loc.input.help.interpreterCommand": "用於執行指令碼的命令解譯器路徑。在指令碼開頭新增 shebang (#!) 行。僅與 UNIX 類作業系統相關。請為 Windows 型的遠端主機使用空字串。[深入了解 shebang (#!)](https://homepages.cwi.nl/~aeb/std/shebang/unix-faq.txt)", + "loc.input.label.args": "引數", + "loc.input.help.args": "要傳遞至殼層指令碼的引數。", + "loc.input.label.failOnStdErr": "在 STDERR 上失敗", + "loc.input.help.failOnStdErr": "如果選取此選項,當遠端命令或指令碼寫入 STDERR 時,組建會失敗。", + "loc.input.label.interactiveSession": "啟用互動式工作階段", + "loc.input.help.interactiveSession": "如果選取此選項,即會啟動互動式工作階段; 若要求提供密碼,系統會填入使用者的密碼。執行 'sudo' 等命令可能有所幫助", + "loc.input.label.readyTimeout": "SSH 交握逾時", + "loc.input.help.readyTimeout": "等候 SSH 交握完成所需的時間 (毫秒)。", + "loc.input.label.interactiveKeyboardAuthentication": "使用互動式鍵盤驗證", + "loc.input.help.interactiveKeyboardAuthentication": "若目標電腦上已停用 PasswordAuthentication,請使用此值", + "loc.messages.ConnectionFailed": "無法連線到遠端電腦。請驗證 SSH 服務連線的詳細資料。錯誤: %s。", + "loc.messages.FailedToWriteScript": "無法將指令碼寫入磁碟: %s", + "loc.messages.RemoteCmdExecutionErr": "命令在遠端電腦上發生錯誤而失敗。", + "loc.messages.RemoteCmdNonZeroExitCode": "命令 %s 在程式碼 %s 結束。", + "loc.messages.RemoteCopyFailed": "無法將指令碼複製到遠端電腦。錯誤: %s。", + "loc.messages.RemoteScriptFileCleanUpFailed": "無法刪除複製到遠端電腦的指令碼檔。錯誤 = %s。", + "loc.messages.SettingUpSshConnection": "正在嘗試對 %s@%s:%s 建立 SSH 連線", + "loc.messages.SshConnectionSuccessful": "連線成功。", + "loc.messages.UseDefaultPort": "因為未指定任何連接埠,所以將使用 SSH 的預設連接埠 22。", + "loc.messages.ScriptArgsSanitized": "偵測到引數中可能無法由殼層正確執行的字元。請使用反斜線 (\\) 逸出特殊字元。如需詳細資訊,請參閱: https://aka.ms/ado/75787" +} \ No newline at end of file diff --git a/_generated/SshV0/Tests/L0.ts b/_generated/SshV0/Tests/L0.ts new file mode 100644 index 000000000000..e31baf5d7a9b --- /dev/null +++ b/_generated/SshV0/Tests/L0.ts @@ -0,0 +1,198 @@ +import assert = require('assert'); +import tmrm = require('azure-pipelines-task-lib/mock-test'); +import path = require('path'); + +function runValidations(validator: () => void, tr, done) { + try { + validator(); + done(); + } + catch (error) { + console.log("STDERR", tr.stderr); + console.log("STDOUT", tr.stdout); + done(error); + } +} + +describe('SshV0 Suite', function() { + this.timeout(parseInt(process.env.TASK_TEST_TIMEOUT) || 20000); + + it('Fails for missing endpoint', (done) => { + delete process.env['sshEndpoint']; + delete process.env['commands']; + delete process.env['runOptions']; + process.env['readyTimeout'] = '20000'; + + let tp = path.join(__dirname, 'L0SshRunner.js'); + var tr = new tmrm.MockTestRunner(tp); + + tr.run(); + + runValidations(() => { + assert(tr.invokedToolCount == 0, 'should not have run any tools'); + assert(tr.failed, 'task should have failed'); + assert(tr.stdout.indexOf('Input required: sshEndpoint') >= 0, 'wrong error message: "' + tr.stdout + '"'); + }, tr, done); + }); + + it('Fails when user name is not provided in the endpoint', (done) => { + delete process.env['runOptions']; + process.env['sshEndpoint'] = 'IDUserNameNotSet'; + process.env['commands'] = 'ls -l'; + process.env['readyTimeout'] = '20000'; + + let tp = path.join(__dirname, 'L0SshRunner.js'); + var tr = new tmrm.MockTestRunner(tp); + + tr.run(); + + runValidations(() => { + assert(tr.invokedToolCount == 0, 'should not have run any tools'); + assert(tr.failed, 'task should have failed'); + assert(tr.stdout.indexOf('Endpoint auth data not present: IDUserNameNotSet') >= 0, 'wrong error message: "' + tr.stdout + '"'); + }, tr, done); + }); + + it('Empty password/passphrase is valid in the endpoint', (done) => { + delete process.env['commands']; + delete process.env['runOptions']; + process.env['sshEndpoint'] = 'IDPasswordNotSet'; + process.env['readyTimeout'] = '20000'; + + let tp = path.join(__dirname, 'L0SshRunner.js'); + var tr = new tmrm.MockTestRunner(tp); + + tr.run(); + + runValidations(() => { + assert(tr.invokedToolCount == 0, 'should not have run any tools'); + assert(tr.stderr.indexOf('Input required: password') < 0, 'task should not require password'); + }, tr, done); + }); + + it('Fails when host is not provided in the endpoint', (done) => { + delete process.env['commands']; + delete process.env['runOptions']; + process.env['sshEndpoint'] = 'IDHostNotSet'; + process.env['readyTimeout'] = '20000'; + + let tp = path.join(__dirname, 'L0SshRunner.js'); + var tr = new tmrm.MockTestRunner(tp); + + tr.run(); + + runValidations(() => { + assert(tr.invokedToolCount == 0, 'should not have run any tools'); + assert(tr.failed, 'task should have failed'); + assert(tr.stdout.indexOf('Endpoint auth data not present: IDHostNotSet') >= 0, 'wrong error message: "' + tr.stdout + '"'); + }, tr, done); + }); + + it('When port is not provided in the endpoint, 22 is used as default port number', (done) => { + delete process.env['commands']; + delete process.env['runOptions']; + process.env['sshEndpoint'] = 'IDPortNotSet'; + process.env['readyTimeout'] = '20000'; + + let tp = path.join(__dirname, 'L0SshRunner.js'); + var tr = new tmrm.MockTestRunner(tp); + + tr.run(); + + runValidations(() => { + assert(tr.invokedToolCount == 0, 'should not have run any tools'); + assert(tr.stdout.indexOf('loc_mock_UseDefaultPort') >= 0, 'default port 22 was not used'); + }, tr, done); + }); + + it('Fails when connection cannot be made with given details', (done) => { + process.env['sshEndpoint'] = 'IDValidKey'; + process.env['commands'] = 'ls -l'; + process.env['runOptions'] = 'commands'; + process.env['readyTimeout'] = '20000'; + + let tp = path.join(__dirname, 'L0SshRunner.js'); + var tr = new tmrm.MockTestRunner(tp); + + tr.run(); + + runValidations(() => { + assert(tr.invokedToolCount == 0, 'should not have run any tools'); + assert(tr.failed, 'task should have failed'); + assert(tr.stdout.indexOf('loc_mock_ConnectionFailed Error: Cannot parse privateKey: Malformed OpenSSH private key. Bad passphrase?') >= 0, 'wrong error message: "' + tr.stdout + '"'); + }, tr, done); + }); + + it('Fails for missing run options', (done) => { + delete process.env['commands']; + delete process.env['runOptions']; + process.env['sshEndpoint'] = 'IDValidKey'; + process.env['readyTimeout'] = '20000'; + + let tp = path.join(__dirname, 'L0SshRunner.js'); + var tr = new tmrm.MockTestRunner(tp); + + tr.run(); + + runValidations(() => { + assert(tr.invokedToolCount == 0, 'should not have run any tools'); + assert(tr.failed, 'build should have failed'); + assert(tr.stdout.indexOf('Input required: runOptions') >= 0, 'wrong error message: "' + tr.stdout + '"'); + }, tr, done); + }); + + it('Fails for missing commands', (done) => { + delete process.env['commands']; + process.env['sshEndpoint'] = 'IDValidKey'; + process.env['runOptions'] = 'commands'; + process.env['readyTimeout'] = '20000'; + + let tp = path.join(__dirname, 'L0SshRunner.js'); + var tr = new tmrm.MockTestRunner(tp); + + tr.run(); + + runValidations(() => { + assert(tr.invokedToolCount == 0, 'should not have run any tools'); + assert(tr.failed, 'task should have failed'); + assert(tr.stdout.indexOf('Input required: commands') >= 0, 'wrong error message: "' + tr.stdout + '"'); + }, tr, done); + }); + + it('Fails for missing script path', (done) => { + delete process.env['commands']; + process.env['sshEndpoint'] = 'IDValidKey'; + process.env['runOptions'] = 'script'; + process.env['readyTimeout'] = '20000'; + + let tp = path.join(__dirname, 'L0SshRunner.js'); + var tr = new tmrm.MockTestRunner(tp); + + tr.run(); + + runValidations(() => { + assert(tr.invokedToolCount == 0, 'should not have run any tools'); + assert(tr.failed, 'task should have failed'); + assert(tr.stdout.indexOf('Input required: scriptPath') >= 0, 'wrong error message: "' + tr.stdout + '"'); + }, tr, done); + }); + + it('Fails for missing readyTimeout', (done) => { + process.env['commands'] = 'ls -l'; + process.env['sshEndpoint'] = 'IDValidKey'; + process.env['readyTimeout'] = '20000'; + process.env['runOptions'] = 'commands'; + delete process.env['readyTimeout']; + + let tp = path.join(__dirname, 'L0SshRunner.js'); + var tr = new tmrm.MockTestRunner(tp); + + tr.run(); + + runValidations(() => { + assert(tr.invokedToolCount == 0, 'should not have run any tools'); + assert(tr.failed, 'task should have failed'); + assert(tr.stdout.indexOf('Input required: readyTimeout') >= 0, 'wrong error message: "' + tr.stdout + '"'); + }, tr, done); + }); +}); \ No newline at end of file diff --git a/_generated/SshV0/Tests/L0SshRunner.ts b/_generated/SshV0/Tests/L0SshRunner.ts new file mode 100644 index 000000000000..19592e5ad139 --- /dev/null +++ b/_generated/SshV0/Tests/L0SshRunner.ts @@ -0,0 +1,67 @@ +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, '..', 'ssh.js'); +let tmr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +if (process.env['sshEndpoint']) { + tmr.setInput('sshEndpoint', process.env['sshEndpoint']); +} +if (process.env['commands']) { + tmr.setInput('commands', process.env['commands']); +} +if (process.env['runOptions']) { + tmr.setInput('runOptions', process.env['runOptions']); +} +if (process.env['readyTimeout']) { + tmr.setInput('readyTimeout', process.env['readyTimeout']); +} + +const tl = require('azure-pipelines-task-lib/mock-task'); +const tlClone = Object.assign({}, tl); +tlClone.getEndpointAuthorizationParameter = function (id: string, key: string, optional: boolean) { + key = key.toUpperCase(); + if (key == 'USERNAME') { + if (['IDValidKey', 'IDInvalidKey'].indexOf(id) > -1) { + return 'username'; + } + if (['IDPasswordNotSet', 'IDHostNotSet', 'IDPortNotSet'].indexOf(id) > -1) { + return 'user'; + } + } + if (key == 'PASSWORD') { + if (['IDValidKey', 'IDInvalidKey', 'IDUserNameNotSet', 'IDHostNotSet', 'IDPortNotSet'].indexOf(id) > -1) { + return 'password'; + } + } + if (optional) { + return ''; + } + throw new Error(`Endpoint auth data not present: ${id}`); +} + +tlClone.getEndpointDataParameter = function (id: string, key: string, optional: boolean) { + key = key.toUpperCase(); + if (key == 'HOST') { + if (['IDValidKey', 'IDInvalidKey', 'IDPasswordNotSet', 'IDPortNotSet'].indexOf(id) > -1) { + return 'host'; + } + } + if (key == 'PORT') { + if (['IDValidKey', 'IDInvalidKey', 'IDPasswordNotSet', 'IDHostNotSet'].indexOf(id) > -1) { + return 'port'; + } + } + if (optional) { + return ''; + } + throw new Error(`Endpoint auth data not present: ${id}`); +} +tmr.registerMock('azure-pipelines-task-lib/mock-task', tlClone); + +process.env['ENDPOINT_DATA_IDValidKey_PRIVATEKEY'] = '-----BEGIN RSA PRIVATE KEY-----\nProc-Type: 4,ENCRYPTED\nDEK-Info: AES-128-CBC,CA14F355C3F7B8C1BBFB0D82E3ABCA0D\n\nWsGY24YaokaY8JzaMI/CFoSG5u/zBeO7RbiNpIVU+wthDfSQi439xnCcU+zysJw1\nDOOItKl4ZdorDjhWLi4kUlDshHZgc8eYR2y45u0i5IqcgS7QM9ey5UBPp7/L5OoG\ncmynCtbEwUKbb5+b/rO+0O0zRBnB3NJDtVW5gBQu0xPJCoZ1fUqtZLd3d9XwjUC8\na7DVJ0jUJtfl3vI5LPSE7mQNw98CgSOuOrsKBYeN40oOm6VQTlPpqFW2MhrFgUt4\n4rSpmGpq/0vSlYf9KxgwO1HxtMJEnLRsFdz2/WKao500XKDUaDNBzICb8rCsdK//\nKnn0BwpmZXf+vRuCwSifb0t5IeXZg/znSNJhx8uwNUbe/BPM9oQcex9h5VJdUNbQ\neS7nw09BwAvVY58xkhmEJJq0pLsEPgol44ai39HSv+8vts9vLmM410l6QsE4cfBO\nIYqkxj+0pEGzUMTPWD9kle0Gf25dH+tHF9NxccpvdGyRljjK/138p2RAZEGoMDH7\nduTBxPO3BqCkdzQooaDzrdskc/+uIVqGhpAnvCuCn3KahAmCAMM78UKQ2NC2kFsb\nZpsXXR7A8gztKIlhjo3m0xuvmXolyEDyxgNpWkS+yrVe8wOZqAdeZ4P+rP2un8vd\nHQHBZTNt5MS0C7R4bpTzxT+BCjWT2bWQ5xFRuoVsX2aP9QyosIYPkP4maKcEPazb\nu3H1DwglKAagbk1iWEeI58ni1WqCNQAPWup5A2VXugvOqnDyWAGlvU+5E8RvdDCo\n3+52r0Mp0T1CwdTzjIenh+wxZ75IF0HfqUn1hvzXChCx/FRagEVwBVWd6T4gecCI\nMZyHzkkDiXrsoCqIBrpOz44hXWeBZRQ+moDT7ezoNyA78KwHN9tK2Prxt9NdHxV/\n24PBNmrxQzTXzpQwqNihexhRWVjV7OTbVc4XiBtPcg3NM09E4sCa2bI0yQZz0ypF\nHzkbrRh8Y2NTIWxdQPHIXiD1aO6M21KG6DFiajFy3wlzALxuuwK8m2jRnfuPkF6s\nNVcWCmHzDeupuPaURtUYA94EyKL1SD7oz/mzxLsfkOtGyM+majFEZ8tCvr23l6KP\niFpngbRCZlWLuKY1DMwgr9RBtybte5lSPJKS6dcACZDkPLFqKzlT/jziU2oJNJJ3\nnUWT2z3tmJtxDFZnr0HY514YdbnWv4Rq25H+hH+/yM7KJpCgc0pAJCnJvDG5fRN/\nLCjmKw9fN65x7ye3h3SmKc+bMlesGTCNchYDNaLtUSqOXGHBBD4bSQokO6AW9HYF\nFOjwXAxn3XmxBSLuuXucCWfXEbgq6hHIEruQvC1KmiYjirwYlLk5atP5hWMNLM2s\naqlOzreyU0FQkBFWpLZoEYt1Pmsdyxz61qUklA7oPmbsO9JvgiFzU5jG66yqsrUi\nS8nhIw4oU452SjwnC7V+sAzUMjLizy412X5QL4UHNHvp4rn3R6aRWF1nNU00XadL\nQoGs/qgm7ykissIKYDDqltTjsWYOCTBF8QTdTZwXI3lXlDve9Y0dshZ5GRF0QCv4\n9MFnQNkYAu5Y3JgnqYWJoSjlqQlk6pxuhIrxRmX6Ywk660Zs6uvjrKgwkNjplqtt\n-----END RSA PRIVATE KEY-----'; +process.env['ENDPOINT_DATA_IDInvalidKey_PRIVATEKEY'] = 'private key file contents'; + +tmr.run(); + diff --git a/_generated/SshV0/Tests/package-lock.json b/_generated/SshV0/Tests/package-lock.json new file mode 100644 index 000000000000..3c3e0d26e773 --- /dev/null +++ b/_generated/SshV0/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/_generated/SshV0/Tests/package.json b/_generated/SshV0/Tests/package.json new file mode 100644 index 000000000000..b74f00383e91 --- /dev/null +++ b/_generated/SshV0/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/_generated/SshV0/ThirdPartyNotice.txt b/_generated/SshV0/ThirdPartyNotice.txt new file mode 100644 index 000000000000..fee7b4286e51 --- /dev/null +++ b/_generated/SshV0/ThirdPartyNotice.txt @@ -0,0 +1,798 @@ + +THIRD-PARTY SOFTWARE NOTICES AND INFORMATION +Do Not Translate or Localize + +This Azure DevOps extension (SshV0) 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. @types/q (git+https://github.com/DefinitelyTyped/DefinitelyTyped.git) +3. asn1 (git://github.com/mcavage/node-asn1.git) +4. async (git+https://github.com/caolan/async.git) +5. balanced-match (git://github.com/juliangruber/balanced-match.git) +6. brace-expansion (git://github.com/juliangruber/brace-expansion.git) +7. concat-map (git://github.com/substack/node-concat-map.git) +8. core-util-is (git://github.com/isaacs/core-util-is.git) +9. fs.realpath (git+https://github.com/isaacs/fs.realpath.git) +10. glob (git://github.com/isaacs/node-glob.git) +11. glob (git://github.com/isaacs/node-glob.git) +12. inflight (git+https://github.com/npm/inflight.git) +13. inherits (git://github.com/isaacs/inherits.git) +14. isarray (git://github.com/juliangruber/isarray.git) +15. lodash (git+https://github.com/lodash/lodash.git) +16. minimatch (git://github.com/isaacs/minimatch.git) +17. node-uuid (git+https://github.com/broofa/node-uuid.git) +18. once (git://github.com/isaacs/once.git) +19. path-is-absolute (git+https://github.com/sindresorhus/path-is-absolute.git) +20. q (git://github.com/kriskowal/q.git) +21. readable-stream (git://github.com/isaacs/readable-stream.git) +22. scp2 (git+https://github.com/lepture/node-scp2.git) +23. semver (git+https://github.com/npm/node-semver.git) +24. shelljs (git://github.com/arturadib/shelljs.git) +25. ssh2 (git+ssh://git@github.com/mscdex/ssh2.git) +26. ssh2 (git+ssh://git@github.com/mscdex/ssh2.git) +27. ssh2-streams (git+ssh://git@github.com/mscdex/ssh2-streams.git) +28. ssh2-streams (git+ssh://git@github.com/mscdex/ssh2-streams.git) +29. streamsearch (git+ssh://git@github.com/mscdex/streamsearch.git) +30. string_decoder (git://github.com/rvagg/string_decoder.git) +31. vso-node-api (git+https://github.com/Microsoft/vso-node-api.git) +32. vsts-task-lib (git+https://github.com/Microsoft/vsts-task-lib.git) +33. wrappy (git+https://github.com/npm/wrappy.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 + +%% @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 + +%% 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 + +%% 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 + +%% 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 + +%% 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 + +%% 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 + +%% 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 + +%% 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 + +%% 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 + +%% isarray NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +NO LICENSE FOUND +========================================= +END OF isarray NOTICES, INFORMATION, AND LICENSE + +%% lodash 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 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 + +%% 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 + +%% 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 + +%% 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 + +%% 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 + +%% 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 + +%% scp2 NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +NO LICENSE FOUND +========================================= +END OF scp2 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 + +%% ssh2 NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright Brian White. 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 ssh2 NOTICES, INFORMATION, AND LICENSE + +%% ssh2 NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright Brian White. 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 ssh2 NOTICES, INFORMATION, AND LICENSE + +%% ssh2-streams NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright 2014 Brian White. 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 ssh2-streams NOTICES, INFORMATION, AND LICENSE + +%% ssh2-streams NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright 2014 Brian White. 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 ssh2-streams NOTICES, INFORMATION, AND LICENSE + +%% streamsearch NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright Brian White. 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 streamsearch 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 + +%% vso-node-api NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +NO LICENSE FOUND +========================================= +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 + +%% 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 + diff --git a/_generated/SshV0/icon.png b/_generated/SshV0/icon.png new file mode 100644 index 000000000000..7e9b36a2a91b Binary files /dev/null and b/_generated/SshV0/icon.png differ diff --git a/_generated/SshV0/icon.svg b/_generated/SshV0/icon.svg new file mode 100644 index 000000000000..f34cc09da871 --- /dev/null +++ b/_generated/SshV0/icon.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/_generated/SshV0/make.json b/_generated/SshV0/make.json new file mode 100644 index 000000000000..19b7726a8e54 --- /dev/null +++ b/_generated/SshV0/make.json @@ -0,0 +1,11 @@ +{ + "rm": [ + { + "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" + ], + "options": "-Rf" + } + ] +} \ No newline at end of file diff --git a/_generated/SshV0/package-lock.json b/_generated/SshV0/package-lock.json new file mode 100644 index 000000000000..f4452b733555 --- /dev/null +++ b/_generated/SshV0/package-lock.json @@ -0,0 +1,738 @@ +{ + "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.65", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.65.tgz", + "integrity": "sha512-Vfz7wGMOr4jbQGiQHVJm8VjeQwM9Ya7mHe9LtQ264/Epf5n1KiZShOFqk++nBzw6a/ubgYdB9Od7P+MH/LjoWw==" + }, + "@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.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.10", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.10.tgz", + "integrity": "sha512-BgeaZuElf7DEYZhWYDTc/XcLZXdVgFkVSTa13BqKvbnmUrxr3TJFKofUxCtDO9UQOdhnV+HPOESdHiHKZOJV1A==" + }, + "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": "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-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": { + "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-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": { + "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==" + }, + "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.18.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz", + "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==", + "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.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" + } + }, + "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.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "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": "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/SshV0/package.json b/_generated/SshV0/package.json new file mode 100644 index 000000000000..7e87e8b165c9 --- /dev/null +++ b/_generated/SshV0/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": "^16.11.39", + "@types/q": "^1.0.7", + "@types/ssh2": "1.11.6", + "@types/ssh2-sftp-client": "^5.2.0", + "azure-pipelines-task-lib": "^5.0.0-preview.0", + "azure-pipelines-tasks-utility-common": "^3.225.1", + "ssh2": "^1.14.0", + "ssh2-sftp-client": "^8.1.0", + "uuid": "^3.2.1" + }, + "devDependencies": { + "typescript": "4.0.2" + } +} diff --git a/_generated/SshV0/ssh.ts b/_generated/SshV0/ssh.ts new file mode 100644 index 000000000000..3fc39fcde5b1 --- /dev/null +++ b/_generated/SshV0/ssh.ts @@ -0,0 +1,262 @@ +import * as os from 'os'; +import * as path from 'path'; +import * as tl from 'azure-pipelines-task-lib/task'; +import * as fs from 'fs'; +import * as sshHelper from './ssh2helpers'; +import { v4 as generateRandomUUID } from 'uuid'; +import { ConnectConfig } from 'ssh2'; +import { sanitizeArgs } from 'azure-pipelines-tasks-utility-common/argsSanitizer'; +import { emitTelemetry } from "azure-pipelines-tasks-utility-common/telemetry"; + +/** + * By default configuration, SSH runs on port 22. + * @constant {number} + * @default +*/ +const DEFAULT_SSH_PORT: number = 22; + +async function run() { + let sshClientConnection: any; + let cleanUpScriptCmd: string; + const remoteCmdOptions: sshHelper.RemoteCommandOptions = new sshHelper.RemoteCommandOptions(); + + try { + tl.setResourcePath(path.join(__dirname, 'task.json')); + + //read SSH endpoint input + const sshEndpoint = tl.getInput('sshEndpoint', true); + const tryKeyboard: boolean = tl.getBoolInput('interactiveKeyboardAuthentication', false); + const username: string = tl.getEndpointAuthorizationParameter(sshEndpoint, 'username', false); + const password: string = tl.getEndpointAuthorizationParameter(sshEndpoint, 'password', true); //passphrase is optional + const privateKey: string = process.env['ENDPOINT_DATA_' + sshEndpoint + '_PRIVATEKEY']; //private key is optional, password can be used for connecting + const hostname: string = tl.getEndpointDataParameter(sshEndpoint, 'host', false); + const port: number = getServerPort(sshEndpoint); //port is optional, will use 22 as default port if not specified + const interactiveSession: boolean = tl.getBoolInput('interactiveSession', false); + const readyTimeout = getReadyTimeoutVariable(); + + //setup the SSH connection configuration based on endpoint details + const sshConfig: ConnectConfig = { + host: hostname, + port: port, + username: username, + readyTimeout: readyTimeout, + tryKeyboard: tryKeyboard, + }; + + if (privateKey) { + tl.debug('Using private key for ssh connection.'); + sshConfig.privateKey = privateKey; + sshConfig.passphrase = password; + } else { + //use password + tl.debug('Using username and password for ssh connection.'); + sshConfig.password = password; + } + + //read the run options + const runOptions: string = tl.getInput('runOptions', true); + let commands: string[]; + let scriptFile: string; + let args: string; + + if (runOptions === 'commands') { + // Split on '\n' and ';', flatten, and remove empty entries + commands = tl.getDelimitedInput('commands', '\n', true) + .map(s => s.split(';')) + .reduce((a, b) => a.concat(b)) + .filter(s => s.length > 0); + } else if (runOptions === 'inline') { + let inlineScript: string = tl.getInput('inline', true); + const interpreterCommand: string = tl.getInput('interpreterCommand'); + if (inlineScript && !inlineScript.startsWith('#!') && interpreterCommand) { + tl.debug('No script header detected. Adding: #!' + interpreterCommand); + inlineScript = `#!${interpreterCommand}${os.EOL}${inlineScript}`; + } + const tempDir: string = tl.getVariable('Agent.TempDirectory') || os.tmpdir(); + const scriptName: string = `sshscript_${generateRandomUUID()}`; // default name + scriptFile = path.join(tempDir, scriptName); + try { + // Make sure the directory exists or else we will get ENOENT + if (!fs.existsSync(tempDir)) { + tl.mkdirP(tempDir); + } + fs.writeFileSync(scriptFile, inlineScript); + } catch (err) { + tl.error(tl.loc('FailedToWriteScript', err.message)); + tryDeleteFile(scriptFile); + throw err; + } + } else { + scriptFile = tl.getPathInput('scriptPath', true, true); + args = tl.getInput('args'); + } + + const failOnStdErr: boolean = tl.getBoolInput('failOnStdErr'); + remoteCmdOptions.failOnStdErr = failOnStdErr; + + //setup the SSH connection + console.log(tl.loc('SettingUpSshConnection', sshConfig.username, sshConfig.host, sshConfig.port)); + try { + sshClientConnection = await sshHelper.setupSshClientConnection(sshConfig); + } catch (err) { + tl.setResult(tl.TaskResult.Failed, tl.loc('ConnectionFailed', err)); + } + + if (sshClientConnection) { + //SSH connection successful + console.log(tl.loc('SshConnectionSuccessful')); + if (runOptions === 'commands') { + //run commands specified by the user + for (const command of commands) { + tl.debug(`Running command ${command} on remote machine.`); + console.log(command); + const returnCode: string = await sshHelper.runCommandOnRemoteMachine( + command, sshClientConnection, remoteCmdOptions, password, interactiveSession); + tl.debug(`Command ${command} completed with return code = ${returnCode}`); + } + } else { + // both other runOptions: inline and script + // setup script path on remote machine relative to user's $HOME directory + let remoteScriptPath: string = `./${path.basename(scriptFile)}`; + const isWin: boolean = (os.platform() === 'win32'); + tl.debug(`remoteScriptPath = ${remoteScriptPath}`); + + //setup the scp configuration based on endpoint details + const scpConfig: sshHelper.ScpConfig = { + host: hostname, + port: port, + username: username, + }; + + if (privateKey) { + scpConfig.privateKey = privateKey; + scpConfig.passphrase = password; + } else { + scpConfig.password = password; + } + + //copy script file to remote machine + tl.debug('Copying script to remote machine.'); + await sshHelper.copyScriptToRemoteMachine(scriptFile, remoteScriptPath, scpConfig); + + //change the line encodings + let originalScriptPath: string = ''; + if (isWin) { + tl.debug('Fixing the line endings in case the file was created in Windows'); + originalScriptPath = remoteScriptPath; + remoteScriptPath = await sshHelper.clearFileFromWindowsCRLF(sshClientConnection, remoteCmdOptions, originalScriptPath); + } + + //set execute permissions on the script + tl.debug('Setting execute permission on script copied to remote machine'); + console.log(`chmod +x ${remoteScriptPath}`); + await sshHelper.runCommandOnRemoteMachine(`chmod +x ${remoteScriptPath}`, sshClientConnection, remoteCmdOptions); + + //run remote script file with args on the remote machine + let runScriptCmd = remoteScriptPath; + if (args) { + let resultArgs = args; + + const featureFlags = { + audit: tl.getBoolFeatureFlag('AZP_75787_ENABLE_NEW_LOGIC_LOG'), + activate: tl.getBoolFeatureFlag('AZP_75787_ENABLE_NEW_LOGIC'), + telemetry: tl.getBoolFeatureFlag('AZP_75787_ENABLE_COLLECT') + }; + + if (featureFlags.activate || featureFlags.audit || featureFlags.telemetry) { + const [sanitizedArgs, telemetry] = sanitizeArgs( + args, + { + argsSplitSymbols: '\\\\', + saniziteRegExp: new RegExp(`(?, options: RemoteCommandOptions, code: any, signal: any): void { + tl.debug('code = ' + code + ', signal = ' + signal); + + //based on the options decide whether to fail the build or not if data was written to STDERR + if (stdErrWritten && options.failOnStdErr) { + defer.reject(tl.loc('RemoteCmdExecutionErr')); + } else if (code && code !== 0) { + defer.reject(tl.loc('RemoteCmdNonZeroExitCode', command, code)); + } else { + //success case - code is undefined or code is 0 + defer.resolve('0'); + } +} + +/** + * Uses sftp to copy a file to remote machine + * @param {string} absolutePath - Data source for data to copy to the remote server. + * @param {string} remotePath - Path to the remote file to be created on the server. + * @param {SftpClient.ConnectOptions} sftpConfig + * @returns {Promise} + */ +export async function copyScriptToRemoteMachine(absolutePath: string, remotePath: string, sftpConfig: SftpClient.ConnectOptions): Promise { + const defer = Q.defer(); + const sftpClient = new SftpClient(); + + try { + await sftpClient.connect(sftpConfig); + await sftpClient.put(absolutePath, remotePath); + tl.debug(`Copied script file to remote machine at: ${remotePath}`); + defer.resolve(); + } catch (err) { + defer.reject(tl.loc('RemoteCopyFailed', err)); + } + + try { + sftpClient.on('error', (err) => { + tl.debug(`sftpClient: Ignoring error diconnecting: ${err}`); + }); // ignore logout errors - since there could be spontaneous ECONNRESET errors after logout; see: https://github.com/mscdex/node-imap/issues/695 + await sftpClient.end(); + } catch(err) { + tl.debug(`Failed to close SFTP client: ${err}`); + } + return defer.promise; +} + +/** + * Sets up an SSH client connection, when promise is fulfilled, returns the connection object + * @param sshConfig + * @returns {Promise} + */ +export function setupSshClientConnection(sshConfig: any): Q.Promise { + const defer = Q.defer(); + const client = new ssh2.Client(); + + client.on('ready', () => { + defer.resolve(client); + }).on('error', (err) => { + defer.reject(err); + }).on('keyboard-interactive', (name, instructions, instructionsLang, prompts, finish) => { finish([sshConfig.password]); }) + .connect(sshConfig); + return defer.promise; +} + +/** + * Runs command on remote machine and returns success or failure + * @param command + * @param sshClient + * @param options + * @returns {Promise} + */ +export function runCommandOnRemoteMachine( + command: string, + sshClient: ssh2.Client, + options: RemoteCommandOptions, + password: string = '', + interactiveSession: boolean = false +): Q.Promise { + const defer = Q.defer(); + let stdErrWritten: boolean = false; + + if (!options) { + tl.debug('Options not passed to runCommandOnRemoteMachine, setting defaults.'); + options = new RemoteCommandOptions(); + options.failOnStdErr = true; + } + + tl.debug('command = ' + command); + if (interactiveSession) { + sshClient.exec(command, { pty: true }, (err, stream) => { + if (err) { + defer.reject(tl.loc('RemoteCmdExecutionErr', err)); + } + let dataBuffer = ''; + let passwordSent = false; + stream.on('close', (code, signal) => { + handleStreamClose(command, stdErrWritten, defer, options, code, signal); + }).on('data', (data) => { + if (data) { + // "data" can be a buffer. Format it here so it outputs as a string + console.log(data.toString('utf8')); + if (!passwordSent) { + passwordSent = handlePasswordInput(data, stream, password, dataBuffer); + if (passwordSent) { + dataBuffer = ''; + } + } + } + }).stderr.on('data', (data) => { + stdErrWritten = true; + handleError(data); + }); + stream.on('exit', function (code: any, signal: any) { + console.log(`>> exited interactive session with code = ${code}, signal = ${signal}`); + stream.end(); + }); + }); + } else { + sshClient.exec(command, (err, stream) => { + if (err) { + defer.reject(tl.loc('RemoteCmdExecutionErr', err)); + } + stream.on('close', (code, signal) => { + handleStreamClose(command, stdErrWritten, defer, options, code, signal); + }).on('data', (data) => { + if (data) { + // "data" can be a buffer. Format it here so it outputs as a string + console.log(data.toString('utf8')); + } + }).stderr.on('data', (data) => { + stdErrWritten = true; + handleError(data); + }); + }); + } + return defer.promise; +} + +/** + * Interface for working with scp2 package API + * + * @interface ScpConfig + */ +export interface ScpConfig { + /** Hostname or IP address of the server. */ + host: string; + /** Port number of the server. */ + port: number; + /** Username for authentication. */ + username: string; + /** Password for password-based user authentication. */ + password?: string; + /** String that contains a private key for either key-based or hostbased user authentication (OpenSSH format). */ + privateKey?: string; + /** For an encrypted private key, this is the passphrase used to decrypt it. */ + passphrase?: string; +} + +/** + * This function generates a new file with *_unix extension on the remote host + * which contains the same file but without Windows CR LF + * @param {ssh2.Client} sshClientConnection - ssh client instance + * @param {RemoteCommandOptions} remoteCmdOptions + * @param {string} remoteInputFilePath - remote path to target file + * @throws will throw an error if command execution fails on remote host + * @return {string} - path to the generated file +*/ +export async function clearFileFromWindowsCRLF(sshClientConnection: ssh2.Client, remoteCmdOptions: RemoteCommandOptions, remoteInputFilePath: string): Promise { + const remoteOutputFilePath = `${remoteInputFilePath}._unix`; + const removeLineEndingsCmd = `tr -d \'\\015\' <${remoteInputFilePath}> ${remoteOutputFilePath}`; + + console.log(removeLineEndingsCmd); + + try { + tl.debug(`Removing Windows CR LF from ${remoteInputFilePath}`); + await runCommandOnRemoteMachine(removeLineEndingsCmd, sshClientConnection, remoteCmdOptions); + } catch (error) { + throw new Error(error); + } + + tl.debug(`Path to generated file = ${remoteOutputFilePath}`); + + return remoteOutputFilePath; +} diff --git a/_generated/SshV0/task.json b/_generated/SshV0/task.json new file mode 100644 index 000000000000..0b19f9380c4b --- /dev/null +++ b/_generated/SshV0/task.json @@ -0,0 +1,175 @@ +{ + "id": "91443475-df55-4874-944b-39253b558790", + "name": "SSH", + "friendlyName": "SSH", + "description": "Run shell commands or a script on a remote machine using SSH", + "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/deploy/ssh", + "helpMarkDown": "[Learn more about this task](http://go.microsoft.com/fwlink/?LinkId=821892)", + "category": "Deploy", + "visibility": [ + "Build", + "Release" + ], + "runsOn": [ + "Agent", + "DeploymentGroup" + ], + "author": "Microsoft Corporation", + "version": { + "Major": 0, + "Minor": 229, + "Patch": 4 + }, + "demands": [], + "minimumAgentVersion": "2.144.0", + "instanceNameFormat": "Run shell $(runOptions) on remote machine", + "groups": [ + { + "name": "advanced", + "displayName": "Advanced", + "isExpanded": false + } + ], + "inputs": [ + { + "name": "sshEndpoint", + "type": "connectedService:ssh", + "label": "SSH service connection", + "defaultValue": "", + "required": true, + "helpMarkDown": "SSH service connection with connection details for the remote machine." + }, + { + "name": "runOptions", + "type": "radio", + "label": "Run", + "required": true, + "defaultValue": "commands", + "options": { + "commands": "Commands", + "script": "Script File", + "inline": "Inline Script" + }, + "helpMarkDown": "Choose to either run shell commands or a shell script on the remote machine." + }, + { + "name": "commands", + "type": "multiLine", + "label": "Commands", + "defaultValue": "", + "required": true, + "visibleRule": "runOptions = commands", + "helpMarkDown": "Specify the shell commands to run on the remote machine. Enter each command along with its arguments on a new line. To run multiple commands together, enter them on the same line separated by semi-colons (e.g. cd /home/user/myFolder;build).", + "properties": { + "resizable": "true", + "rows": "10" + } + }, + { + "name": "scriptPath", + "type": "filePath", + "label": "Shell script path", + "defaultValue": "", + "required": true, + "visibleRule": "runOptions = script", + "helpMarkDown": "Path to the shell script file to run on the remote machine." + }, + { + "name": "inline", + "type": "multiLine", + "label": "Inline Script", + "defaultValue": "", + "required": true, + "visibleRule": "runOptions = inline", + "helpMarkDown": "Write the shell script to run on the remote machine.", + "properties": { + "resizable": "true", + "rows": "10" + } + }, + { + "name": "interpreterCommand", + "type": "string", + "label": "Interpreter command", + "defaultValue": "/bin/bash", + "required": false, + "visibleRule": "runOptions = inline", + "helpMarkDown": "Path to the command interpreter used to execute the script. Adds a shebang line to the beginning of the script. Relevant only for UNIX-like operating systems. Please use empty string for Windows-based remote hosts. [See more about shebang (#!)](https://homepages.cwi.nl/~aeb/std/shebang/unix-faq.txt)" + }, + { + "name": "args", + "type": "string", + "label": "Arguments", + "defaultValue": "", + "required": false, + "visibleRule": "runOptions = script", + "helpMarkDown": "Arguments to pass to the shell script." + }, + { + "name": "failOnStdErr", + "type": "boolean", + "label": "Fail on STDERR", + "required": false, + "defaultValue": true, + "helpMarkDown": "If this option is selected, the build will fail when the remote commands or script write to STDERR.", + "groupName": "advanced" + }, + { + "name": "interactiveSession", + "type": "boolean", + "label": "Enable interactive session", + "required": false, + "defaultValue": false, + "helpMarkDown": "If this option is selected, interactive session will be started - if there's a password request, it will be filled by user's password. It could be useful to run commands like 'sudo'", + "groupName": "advanced" + }, + { + "name": "readyTimeout", + "type": "string", + "label": "SSH handshake timeout", + "defaultValue": "20000", + "required": true, + "groupName": "advanced", + "helpMarkDown": "How long (in milliseconds) to wait for the SSH handshake to complete.", + "validation": { + "expression": "isMatch(value, '(^\\d*$)','Multiline')", + "message": "Enter a valid value for timeout." + } + }, + { + "name": "interactiveKeyboardAuthentication", + "type": "boolean", + "label": "Use interactive-keyboard authentication", + "defaultValue": false, + "required": false, + "groupName": "advanced", + "helpMarkDown": "Use this value if PasswordAuthentication is disabled on the target machine" + } + ], + "execution": { + "Node10": { + "target": "ssh.js", + "argumentFormat": "" + }, + "Node16": { + "target": "ssh.js", + "argumentFormat": "" + } + }, + "messages": { + "ConnectionFailed": "Failed to connect to remote machine. Verify the SSH service connection details. Error: %s.", + "FailedToWriteScript": "Failed to write the script to disk: %s", + "RemoteCmdExecutionErr": "Command failed with errors on remote machine.", + "RemoteCmdNonZeroExitCode": "Command %s exited with code %s.", + "RemoteCopyFailed": "Failed to copy script to remote machine. Error: %s.", + "RemoteScriptFileCleanUpFailed": "Failed to delete the script file copied to the remote machine. Error = %s.", + "SettingUpSshConnection": "Trying to establish an SSH connection to %s@%s:%s", + "SshConnectionSuccessful": "Successfully connected.", + "UseDefaultPort": "Using port 22 which is the default for SSH since no port was specified.", + "ScriptArgsSanitized": "Detected characters in arguments that may not be executed correctly by the shell. Please escape special characters using backslash (\\). More information is available here: https://aka.ms/ado/75787" + }, + "_buildConfigMapping": { + "Default": "0.229.4", + "Node20-225": "0.229.5" + } +} \ No newline at end of file diff --git a/_generated/SshV0/task.loc.json b/_generated/SshV0/task.loc.json new file mode 100644 index 000000000000..88dc25ae8d40 --- /dev/null +++ b/_generated/SshV0/task.loc.json @@ -0,0 +1,175 @@ +{ + "id": "91443475-df55-4874-944b-39253b558790", + "name": "SSH", + "friendlyName": "ms-resource:loc.friendlyName", + "description": "ms-resource:loc.description", + "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/deploy/ssh", + "helpMarkDown": "ms-resource:loc.helpMarkDown", + "category": "Deploy", + "visibility": [ + "Build", + "Release" + ], + "runsOn": [ + "Agent", + "DeploymentGroup" + ], + "author": "Microsoft Corporation", + "version": { + "Major": 0, + "Minor": 229, + "Patch": 4 + }, + "demands": [], + "minimumAgentVersion": "2.144.0", + "instanceNameFormat": "ms-resource:loc.instanceNameFormat", + "groups": [ + { + "name": "advanced", + "displayName": "ms-resource:loc.group.displayName.advanced", + "isExpanded": false + } + ], + "inputs": [ + { + "name": "sshEndpoint", + "type": "connectedService:ssh", + "label": "ms-resource:loc.input.label.sshEndpoint", + "defaultValue": "", + "required": true, + "helpMarkDown": "ms-resource:loc.input.help.sshEndpoint" + }, + { + "name": "runOptions", + "type": "radio", + "label": "ms-resource:loc.input.label.runOptions", + "required": true, + "defaultValue": "commands", + "options": { + "commands": "Commands", + "script": "Script File", + "inline": "Inline Script" + }, + "helpMarkDown": "ms-resource:loc.input.help.runOptions" + }, + { + "name": "commands", + "type": "multiLine", + "label": "ms-resource:loc.input.label.commands", + "defaultValue": "", + "required": true, + "visibleRule": "runOptions = commands", + "helpMarkDown": "ms-resource:loc.input.help.commands", + "properties": { + "resizable": "true", + "rows": "10" + } + }, + { + "name": "scriptPath", + "type": "filePath", + "label": "ms-resource:loc.input.label.scriptPath", + "defaultValue": "", + "required": true, + "visibleRule": "runOptions = script", + "helpMarkDown": "ms-resource:loc.input.help.scriptPath" + }, + { + "name": "inline", + "type": "multiLine", + "label": "ms-resource:loc.input.label.inline", + "defaultValue": "", + "required": true, + "visibleRule": "runOptions = inline", + "helpMarkDown": "ms-resource:loc.input.help.inline", + "properties": { + "resizable": "true", + "rows": "10" + } + }, + { + "name": "interpreterCommand", + "type": "string", + "label": "ms-resource:loc.input.label.interpreterCommand", + "defaultValue": "/bin/bash", + "required": false, + "visibleRule": "runOptions = inline", + "helpMarkDown": "ms-resource:loc.input.help.interpreterCommand" + }, + { + "name": "args", + "type": "string", + "label": "ms-resource:loc.input.label.args", + "defaultValue": "", + "required": false, + "visibleRule": "runOptions = script", + "helpMarkDown": "ms-resource:loc.input.help.args" + }, + { + "name": "failOnStdErr", + "type": "boolean", + "label": "ms-resource:loc.input.label.failOnStdErr", + "required": false, + "defaultValue": true, + "helpMarkDown": "ms-resource:loc.input.help.failOnStdErr", + "groupName": "advanced" + }, + { + "name": "interactiveSession", + "type": "boolean", + "label": "ms-resource:loc.input.label.interactiveSession", + "required": false, + "defaultValue": false, + "helpMarkDown": "ms-resource:loc.input.help.interactiveSession", + "groupName": "advanced" + }, + { + "name": "readyTimeout", + "type": "string", + "label": "ms-resource:loc.input.label.readyTimeout", + "defaultValue": "20000", + "required": true, + "groupName": "advanced", + "helpMarkDown": "ms-resource:loc.input.help.readyTimeout", + "validation": { + "expression": "isMatch(value, '(^\\d*$)','Multiline')", + "message": "Enter a valid value for timeout." + } + }, + { + "name": "interactiveKeyboardAuthentication", + "type": "boolean", + "label": "ms-resource:loc.input.label.interactiveKeyboardAuthentication", + "defaultValue": false, + "required": false, + "groupName": "advanced", + "helpMarkDown": "ms-resource:loc.input.help.interactiveKeyboardAuthentication" + } + ], + "execution": { + "Node10": { + "target": "ssh.js", + "argumentFormat": "" + }, + "Node16": { + "target": "ssh.js", + "argumentFormat": "" + } + }, + "messages": { + "ConnectionFailed": "ms-resource:loc.messages.ConnectionFailed", + "FailedToWriteScript": "ms-resource:loc.messages.FailedToWriteScript", + "RemoteCmdExecutionErr": "ms-resource:loc.messages.RemoteCmdExecutionErr", + "RemoteCmdNonZeroExitCode": "ms-resource:loc.messages.RemoteCmdNonZeroExitCode", + "RemoteCopyFailed": "ms-resource:loc.messages.RemoteCopyFailed", + "RemoteScriptFileCleanUpFailed": "ms-resource:loc.messages.RemoteScriptFileCleanUpFailed", + "SettingUpSshConnection": "ms-resource:loc.messages.SettingUpSshConnection", + "SshConnectionSuccessful": "ms-resource:loc.messages.SshConnectionSuccessful", + "UseDefaultPort": "ms-resource:loc.messages.UseDefaultPort", + "ScriptArgsSanitized": "ms-resource:loc.messages.ScriptArgsSanitized" + }, + "_buildConfigMapping": { + "Default": "0.229.4", + "Node20-225": "0.229.5" + } +} \ No newline at end of file diff --git a/_generated/SshV0/tsconfig.json b/_generated/SshV0/tsconfig.json new file mode 100644 index 000000000000..dc9af9841dae --- /dev/null +++ b/_generated/SshV0/tsconfig.json @@ -0,0 +1,7 @@ +{ + "compilerOptions": { + "target": "ES6", + "module": "commonjs", + "noImplicitThis": true + } +} \ No newline at end of file diff --git a/_generated/SshV0_Node20/.npmrc b/_generated/SshV0_Node20/.npmrc new file mode 100644 index 000000000000..5fca0d518be7 --- /dev/null +++ b/_generated/SshV0_Node20/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true diff --git a/_generated/SshV0_Node20/Strings/resources.resjson/de-DE/resources.resjson b/_generated/SshV0_Node20/Strings/resources.resjson/de-DE/resources.resjson new file mode 100644 index 000000000000..5faf67047710 --- /dev/null +++ b/_generated/SshV0_Node20/Strings/resources.resjson/de-DE/resources.resjson @@ -0,0 +1,39 @@ +{ + "loc.friendlyName": "SSH", + "loc.helpMarkDown": "[Weitere Informationen zu dieser Aufgabe](http://go.microsoft.com/fwlink/?LinkId=821892)", + "loc.description": "Führt Shellbefehle oder ein Skript auf einem Remotecomputer mithilfe von SSH aus.", + "loc.instanceNameFormat": "Shell $(runOptions) auf dem Remotecomputer ausführen", + "loc.group.displayName.advanced": "Erweitert", + "loc.input.label.sshEndpoint": "SSH-Dienstverbindung", + "loc.input.help.sshEndpoint": "Die SSH-Dienstverbindung mit Verbindungsdetails für den Remotecomputer.", + "loc.input.label.runOptions": "Ausführen", + "loc.input.help.runOptions": "Führen Sie wahlweise Shellbefehle oder ein Shellskript auf dem Remotecomputer aus.", + "loc.input.label.commands": "Befehle", + "loc.input.help.commands": "Gibt die Shellbefehle an, die auf dem Remotecomputer ausgeführt werden sollen. Geben Sie jeden Befehl zusammen mit seinen Argumenten in eine neue Zeile ein. Wenn Sie mehrere Befehle gleichzeitig ausführen möchten, geben Sie sie in der gleichen Zeile getrennt durch Semikolons ein (z. B. \"cd /home/user/myFolder;build\").", + "loc.input.label.scriptPath": "Shellskriptpfad", + "loc.input.help.scriptPath": "Der Pfad zur Shellskriptdatei, die auf dem Remotecomputer ausgeführt werden soll.", + "loc.input.label.inline": "Inlineskript", + "loc.input.help.inline": "Schreiben Sie das Shellskript zur Ausführung auf dem Remotecomputer.", + "loc.input.label.interpreterCommand": "Interpreterbefehl", + "loc.input.help.interpreterCommand": "Pfad zum Befehlsinterpreter, der zum Ausführen des Skripts verwendet wird. Fügt am Anfang des Skripts eine Shebang-Zeile hinzu. Nur für UNIX-ähnliche Betriebssysteme relevant. Verwenden Sie eine leere Zeichenfolge für Windows-basierte Remotehosts. [Weitere Informationen zu Shebang (#!)](https://homepages.cwi.nl/~aeb/std/shebang/unix-faq.txt)", + "loc.input.label.args": "Argumente", + "loc.input.help.args": "An das Shellskript zu übergebende Argumente.", + "loc.input.label.failOnStdErr": "Fehler für STDERR", + "loc.input.help.failOnStdErr": "Wenn diese Option ausgewählt ist, tritt ein Buildfehler auf, wenn die Remotebefehle oder Skripts in STDERR schreiben.", + "loc.input.label.interactiveSession": "Interaktive Sitzung aktivieren", + "loc.input.help.interactiveSession": "Wenn diese Option ausgewählt ist, wird eine interaktive Sitzung gestartet – bei einer Kennwortanforderung wird das Benutzerkennwort eingefügt. Die Ausführung von Befehlen wie \"sudo\" ist möglicherweise hilfreich.", + "loc.input.label.readyTimeout": "Timeout für SSH-Handshake", + "loc.input.help.readyTimeout": "Gibt an, wie lange (in Millisekunden) auf den Abschluss des SSH-Handshakes gewartet wird.", + "loc.input.label.interactiveKeyboardAuthentication": "Verwenden der interaktiven Tastaturauthentifizierung", + "loc.input.help.interactiveKeyboardAuthentication": "Verwenden Sie diesen Wert, wenn PasswordAuthentication auf dem Zielcomputer deaktiviert ist.", + "loc.messages.ConnectionFailed": "Fehler beim Herstellen einer Verbindung mit dem Remotecomputer. Überprüfen Sie die SSH-Dienstverbindungsdetails. Fehler: %s.", + "loc.messages.FailedToWriteScript": "Fehler beim Schreiben des Skripts auf den Datenträger: %s", + "loc.messages.RemoteCmdExecutionErr": "Fehler des Befehls auf dem Remotecomputer.", + "loc.messages.RemoteCmdNonZeroExitCode": "Der Befehl \"%s\" wurde mit dem Code %s beendet.", + "loc.messages.RemoteCopyFailed": "Fehler beim Kopieren des Skripts auf den Remotecomputer. Fehler: %s.", + "loc.messages.RemoteScriptFileCleanUpFailed": "Fehler beim Löschen der Skriptdatei, die auf den Remotecomputer kopiert wurde. Fehler = %s.", + "loc.messages.SettingUpSshConnection": "Es wird versucht, eine SSH-Verbindung mit \"%s@%s:%s\" einzurichten.", + "loc.messages.SshConnectionSuccessful": "Verbindung erfolgreich hergestellt.", + "loc.messages.UseDefaultPort": "Port 22 wird als Standardeinstellung für SSH verwendet, da kein Port angegeben wurde.", + "loc.messages.ScriptArgsSanitized": "Erkannte Zeichen in Argumenten, die von der Shell möglicherweise nicht ordnungsgemäß ausgeführt werden. Verwenden Sie einen umgekehrten Schrägstrich (\\), um Sonderzeichen mit Escapezeichen zu versehen. Weitere Informationen finden Sie hier: https://aka.ms/ado/75787" +} \ No newline at end of file diff --git a/_generated/SshV0_Node20/Strings/resources.resjson/en-US/resources.resjson b/_generated/SshV0_Node20/Strings/resources.resjson/en-US/resources.resjson new file mode 100644 index 000000000000..885d6ba022bb --- /dev/null +++ b/_generated/SshV0_Node20/Strings/resources.resjson/en-US/resources.resjson @@ -0,0 +1,39 @@ +{ + "loc.friendlyName": "SSH", + "loc.helpMarkDown": "[Learn more about this task](http://go.microsoft.com/fwlink/?LinkId=821892)", + "loc.description": "Run shell commands or a script on a remote machine using SSH", + "loc.instanceNameFormat": "Run shell $(runOptions) on remote machine", + "loc.group.displayName.advanced": "Advanced", + "loc.input.label.sshEndpoint": "SSH service connection", + "loc.input.help.sshEndpoint": "SSH service connection with connection details for the remote machine.", + "loc.input.label.runOptions": "Run", + "loc.input.help.runOptions": "Choose to either run shell commands or a shell script on the remote machine.", + "loc.input.label.commands": "Commands", + "loc.input.help.commands": "Specify the shell commands to run on the remote machine. Enter each command along with its arguments on a new line. To run multiple commands together, enter them on the same line separated by semi-colons (e.g. cd /home/user/myFolder;build).", + "loc.input.label.scriptPath": "Shell script path", + "loc.input.help.scriptPath": "Path to the shell script file to run on the remote machine.", + "loc.input.label.inline": "Inline Script", + "loc.input.help.inline": "Write the shell script to run on the remote machine.", + "loc.input.label.interpreterCommand": "Interpreter command", + "loc.input.help.interpreterCommand": "Path to the command interpreter used to execute the script. Adds a shebang line to the beginning of the script. Relevant only for UNIX-like operating systems. Please use empty string for Windows-based remote hosts. [See more about shebang (#!)](https://homepages.cwi.nl/~aeb/std/shebang/unix-faq.txt)", + "loc.input.label.args": "Arguments", + "loc.input.help.args": "Arguments to pass to the shell script.", + "loc.input.label.failOnStdErr": "Fail on STDERR", + "loc.input.help.failOnStdErr": "If this option is selected, the build will fail when the remote commands or script write to STDERR.", + "loc.input.label.interactiveSession": "Enable interactive session", + "loc.input.help.interactiveSession": "If this option is selected, interactive session will be started - if there's a password request, it will be filled by user's password. It could be useful to run commands like 'sudo'", + "loc.input.label.readyTimeout": "SSH handshake timeout", + "loc.input.help.readyTimeout": "How long (in milliseconds) to wait for the SSH handshake to complete.", + "loc.input.label.interactiveKeyboardAuthentication": "Use interactive-keyboard authentication", + "loc.input.help.interactiveKeyboardAuthentication": "Use this value if PasswordAuthentication is disabled on the target machine", + "loc.messages.ConnectionFailed": "Failed to connect to remote machine. Verify the SSH service connection details. Error: %s.", + "loc.messages.FailedToWriteScript": "Failed to write the script to disk: %s", + "loc.messages.RemoteCmdExecutionErr": "Command failed with errors on remote machine.", + "loc.messages.RemoteCmdNonZeroExitCode": "Command %s exited with code %s.", + "loc.messages.RemoteCopyFailed": "Failed to copy script to remote machine. Error: %s.", + "loc.messages.RemoteScriptFileCleanUpFailed": "Failed to delete the script file copied to the remote machine. Error = %s.", + "loc.messages.SettingUpSshConnection": "Trying to establish an SSH connection to %s@%s:%s", + "loc.messages.SshConnectionSuccessful": "Successfully connected.", + "loc.messages.UseDefaultPort": "Using port 22 which is the default for SSH since no port was specified.", + "loc.messages.ScriptArgsSanitized": "Detected characters in arguments that may not be executed correctly by the shell. Please escape special characters using backslash (\\). More information is available here: https://aka.ms/ado/75787" +} \ No newline at end of file diff --git a/_generated/SshV0_Node20/Strings/resources.resjson/es-ES/resources.resjson b/_generated/SshV0_Node20/Strings/resources.resjson/es-ES/resources.resjson new file mode 100644 index 000000000000..40d4fcc748af --- /dev/null +++ b/_generated/SshV0_Node20/Strings/resources.resjson/es-ES/resources.resjson @@ -0,0 +1,39 @@ +{ + "loc.friendlyName": "SSH", + "loc.helpMarkDown": "[Obtener más información acerca de esta tarea](http://go.microsoft.com/fwlink/?LinkId=821892)", + "loc.description": "Ejecuta comandos de shell o un script en una máquina remota usando SSH", + "loc.instanceNameFormat": "Ejecutar el shell $(runOptions) en la máquina remota", + "loc.group.displayName.advanced": "Avanzado", + "loc.input.label.sshEndpoint": "Conexión de servicio SSH", + "loc.input.help.sshEndpoint": "Conexión de servicio SSH con los detalles de conexión para la máquina remota.", + "loc.input.label.runOptions": "Ejecutar", + "loc.input.help.runOptions": "Elija si quiere ejecutar comandos de shell o un script de shell en la máquina remota.", + "loc.input.label.commands": "Comandos", + "loc.input.help.commands": "Especifique los comandos de shell que deben ejecutarse en la máquina remota. Escriba cada comando con sus argumentos en una línea nueva. Para ejecutar varios comandos juntos, escríbalos en la misma línea separados con punto y coma (por ejemplo: cd /home/user/myFolder;build).", + "loc.input.label.scriptPath": "Ruta de acceso del script de shell", + "loc.input.help.scriptPath": "Ruta de acceso al archivo de script de shell que debe ejecutarse en la máquina remota.", + "loc.input.label.inline": "Script alineado", + "loc.input.help.inline": "Escriba el script de shell que debe ejecutarse en la máquina remota.", + "loc.input.label.interpreterCommand": "Comando del intérprete", + "loc.input.help.interpreterCommand": "Ruta de acceso al intérprete de comandos que se usa para ejecutar el script. Agrega una línea de shebang al principio del script. Solo es relevante para los sistemas operativos tipo UNIX. Use una cadena vacía para los hosts remotos basados en Windows. [Más información sobre shebang (#!)](https://homepages.cwi.nl/~aeb/std/shebang/unix-faq.txt)", + "loc.input.label.args": "Argumentos", + "loc.input.help.args": "Argumentos que se pasan al script de shell.", + "loc.input.label.failOnStdErr": "Error en STDERR", + "loc.input.help.failOnStdErr": "Si se selecciona esta opción, la compilación dará error cuando el script o los comandos remotos escriban en STDERR.", + "loc.input.label.interactiveSession": "Habilitar la sesión interactiva", + "loc.input.help.interactiveSession": "Si se selecciona esta opción, se iniciará una sesión interactiva; si hay una solicitud de contraseña, se rellenará con la contraseña del usuario. Puede ser útil ejecutar comandos como \"sudo\".", + "loc.input.label.readyTimeout": "Tiempo de expiración del protocolo de enlace SSH", + "loc.input.help.readyTimeout": "Tiempo (en milisegundos) que debe esperarse para que se complete el protocolo de enlace SSH.", + "loc.input.label.interactiveKeyboardAuthentication": "Usar autenticación de teclado interactivo", + "loc.input.help.interactiveKeyboardAuthentication": "Usar este valor si PasswordAuthentication está deshabilitado en el equipo de destino", + "loc.messages.ConnectionFailed": "No se pudo conectar a la máquina remota. Compruebe los detalles de la conexión de servicio SSH. Error: %s.", + "loc.messages.FailedToWriteScript": "No se pudo escribir el script en el disco: %s", + "loc.messages.RemoteCmdExecutionErr": "No se pudo ejecutar el comando debido a errores en la máquina remota.", + "loc.messages.RemoteCmdNonZeroExitCode": "El comando %s finalizó con el código %s.", + "loc.messages.RemoteCopyFailed": "No se pudo copiar el script en la máquina remota. Error: %s.", + "loc.messages.RemoteScriptFileCleanUpFailed": "No se pudo eliminar el archivo de script copiado en la máquina remota. Error = %s.", + "loc.messages.SettingUpSshConnection": "Intentando establecer una conexión SSH con %s@%s: %s", + "loc.messages.SshConnectionSuccessful": "Conectado correctamente.", + "loc.messages.UseDefaultPort": "Usando el puerto 22, que es el predeterminado para SSH, porque no se especificó ningún puerto.", + "loc.messages.ScriptArgsSanitized": "Se detectaron caracteres en argumentos que el shell no puede ejecutar correctamente. Escape de caracteres especiales con barra diagonal inversa (\\). Puede obtener más información aquí: https://aka.ms/ado/75787" +} \ No newline at end of file diff --git a/_generated/SshV0_Node20/Strings/resources.resjson/fr-FR/resources.resjson b/_generated/SshV0_Node20/Strings/resources.resjson/fr-FR/resources.resjson new file mode 100644 index 000000000000..888278040f0f --- /dev/null +++ b/_generated/SshV0_Node20/Strings/resources.resjson/fr-FR/resources.resjson @@ -0,0 +1,39 @@ +{ + "loc.friendlyName": "SSH", + "loc.helpMarkDown": "[En savoir plus sur cette tâche](http://go.microsoft.com/fwlink/?LinkId=821892)", + "loc.description": "Exécuter des commandes ou un script d'interpréteur de commandes sur une machine distante via SSH", + "loc.instanceNameFormat": "Exécuter l'interpréteur de commandes $(runOptions) sur la machine distante", + "loc.group.displayName.advanced": "Avancé", + "loc.input.label.sshEndpoint": "Connexion de service SSH", + "loc.input.help.sshEndpoint": "Connexion de service SSH avec les détails de connexion pour la machine distante.", + "loc.input.label.runOptions": "Exécuter", + "loc.input.help.runOptions": "Choisissez d'exécuter des commandes d'interpréteur de commandes ou un script d'interpréteur de commandes sur la machine distante.", + "loc.input.label.commands": "Commandes", + "loc.input.help.commands": "Spécifiez les commandes d'interpréteur de commandes à exécuter sur la machine distante. Entrez chaque commande avec ses arguments sur une nouvelle ligne. Pour exécuter plusieurs commandes à la fois, entrez-les sur la même ligne en les séparant par des points-virgules (exemple : cd /home/user/myFolder;build).", + "loc.input.label.scriptPath": "Chemin du script d'interpréteur de commandes", + "loc.input.help.scriptPath": "Chemin du fichier de script d'interpréteur de commandes à exécuter sur la machine distante.", + "loc.input.label.inline": "Script inline", + "loc.input.help.inline": "Écrivez le script d'interpréteur de commandes à exécuter sur la machine distante.", + "loc.input.label.interpreterCommand": "Commande d'interpréteur", + "loc.input.help.interpreterCommand": "Chemin de l'interpréteur de commandes utilisé pour exécuter le script. Ajoute une ligne shebang au début du script. Concerne uniquement les systèmes d'exploitation UNIX. Utilisez une chaîne vide pour les hôtes distants Windows. [En savoir plus sur shebang (#!)](https://homepages.cwi.nl/~aeb/std/shebang/unix-faq.txt)", + "loc.input.label.args": "Arguments", + "loc.input.help.args": "Arguments à passer au script d'interpréteur de commandes.", + "loc.input.label.failOnStdErr": "Échec sur STDERR", + "loc.input.help.failOnStdErr": "Si cette option est sélectionnée, un échec de la build se produit quand les commandes ou le script exécutés à distance écrivent dans STDERR.", + "loc.input.label.interactiveSession": "Activer la session interactive", + "loc.input.help.interactiveSession": "Si cette option est sélectionnée, la session interactive démarre. Si un mot de passe est demandé, celui de l'utilisateur est employé. Il peut s'avérer utile d'exécuter des commandes telles que 'sudo'", + "loc.input.label.readyTimeout": "Délai d'expiration de l'établissement d'une liaison SSH", + "loc.input.help.readyTimeout": "Durée (en millisecondes) d'attente de la fin de l'établissement d'une liaison SSH.", + "loc.input.label.interactiveKeyboardAuthentication": "Utiliser l’authentification interactive au clavier", + "loc.input.help.interactiveKeyboardAuthentication": "Utiliser cette valeur si PasswordAuthentication est désactivé sur la machine cible", + "loc.messages.ConnectionFailed": "Échec de la connexion à la machine distante. Vérifiez les détails de la connexion de service SSH. Erreur : %s.", + "loc.messages.FailedToWriteScript": "Échec de l'écriture du script sur le disque : %s", + "loc.messages.RemoteCmdExecutionErr": "Échec de la commande : erreurs sur la machine distante.", + "loc.messages.RemoteCmdNonZeroExitCode": "Arrêt de la commande %s. Code %s.", + "loc.messages.RemoteCopyFailed": "Échec de la copie du script sur la machine distante. Erreur : %s.", + "loc.messages.RemoteScriptFileCleanUpFailed": "Échec de la suppression du fichier de script copié sur la machine distante. Erreur = %s.", + "loc.messages.SettingUpSshConnection": "Tentative d'établissement d'une connexion SSH à %s@%s:%s", + "loc.messages.SshConnectionSuccessful": "Connexion réussie.", + "loc.messages.UseDefaultPort": "Utilisation du port 22, qui représente la valeur par défaut pour SSH, car aucun port n'a été spécifié.", + "loc.messages.ScriptArgsSanitized": "Caractères détectés dans les arguments qui peuvent ne pas être exécutés correctement par le shell. Veuillez échapper les caractères spéciaux en utilisant une barre oblique inverse (\\). Plus d'informations sont disponibles ici: https://aka.ms/ado/75787" +} \ No newline at end of file diff --git a/_generated/SshV0_Node20/Strings/resources.resjson/it-IT/resources.resjson b/_generated/SshV0_Node20/Strings/resources.resjson/it-IT/resources.resjson new file mode 100644 index 000000000000..0a86c81d43b2 --- /dev/null +++ b/_generated/SshV0_Node20/Strings/resources.resjson/it-IT/resources.resjson @@ -0,0 +1,39 @@ +{ + "loc.friendlyName": "SSH", + "loc.helpMarkDown": "[Altre informazioni su questa attività](http://go.microsoft.com/fwlink/?LinkId=821892)", + "loc.description": "Esegue i comandi della shell o uno script in un computer remoto usando SSH", + "loc.instanceNameFormat": "Esegui shell $(runOptions) nel computer remoto", + "loc.group.displayName.advanced": "Avanzate", + "loc.input.label.sshEndpoint": "Connessione al servizio SSH", + "loc.input.help.sshEndpoint": "Connessione al servizio SSH con i dettagli della connessione per il computer remoto.", + "loc.input.label.runOptions": "Esegui", + "loc.input.help.runOptions": "Consente di scegliere se eseguire i comandi della shell o uno script della shell nel computer remoto.", + "loc.input.label.commands": "Comandi", + "loc.input.help.commands": "Consente di specificare i comandi della shell da eseguire nel computer remoto. Immettere ogni comando unitamente ai relativi argomenti su una nuova riga. Per eseguire più comandi insieme, immetterli sulla stessa riga delimitandoli con punti e virgola, ad esempio cd /home/user/myFolder;build.", + "loc.input.label.scriptPath": "Percorso dello script della shell", + "loc.input.help.scriptPath": "Percorso del file di script della shell da eseguire nel computer remoto.", + "loc.input.label.inline": "Script inline", + "loc.input.help.inline": "Consente di scrivere lo script della shell da eseguire nel computer remoto.", + "loc.input.label.interpreterCommand": "Comando dell'interprete", + "loc.input.help.interpreterCommand": "Percorso dell'interprete dei comandi usato per eseguire lo script. Aggiunge una riga shebang all'inizio dello script. Pertinente solo per i sistemi operativi di tipo UNIX. Usare una stringa vuota per gli host remoti basati su Windows. [Altre informazioni su shebang (#!)](https://homepages.cwi.nl/~aeb/std/shebang/unix-faq.txt)", + "loc.input.label.args": "Argomenti", + "loc.input.help.args": "Argomenti da passare allo script della shell.", + "loc.input.label.failOnStdErr": "Interrompi in caso di STDERR", + "loc.input.help.failOnStdErr": "Se questa opzione è selezionata, la compilazione non riuscirà quando lo script o i comandi remoti scriveranno in STDERR.", + "loc.input.label.interactiveSession": "Abilita sessione interattiva", + "loc.input.help.interactiveSession": "Se questa opzione è selezionata, verrà avviata la sessione interattiva; se è presente una richiesta di password, verrà inserita la password dell'utente. Potrebbe essere utile eseguire comandi come 'sudo'", + "loc.input.label.readyTimeout": "Timeout per handshake SSH", + "loc.input.help.readyTimeout": "Indica per quanto tempo (in millisecondi) attendere il completamento dell'handshake SSH.", + "loc.input.label.interactiveKeyboardAuthentication": "Usa l'autenticazione tramite tastiera interattiva", + "loc.input.help.interactiveKeyboardAuthentication": "Usa questo valore se PasswordAuthentication è disabilitato nel computer di destinazione", + "loc.messages.ConnectionFailed": "Non è stato possibile connettersi al computer remoto. Verificare i dettagli della connessione al servizio SSH. Errore: %s.", + "loc.messages.FailedToWriteScript": "Non è stato possibile scrivere lo script sul disco: %s", + "loc.messages.RemoteCmdExecutionErr": "Il comando non è riuscito e si sono verificati errori nel computer remoto.", + "loc.messages.RemoteCmdNonZeroExitCode": "Il comando %s è stato terminato. Codice: %s.", + "loc.messages.RemoteCopyFailed": "Non è stato possibile copiare lo script nel computer remoto. Errore: %s.", + "loc.messages.RemoteScriptFileCleanUpFailed": "Non è stato possibile eliminare il file di script copiato nel computer remoto. Errore = %s.", + "loc.messages.SettingUpSshConnection": "Tentativo di stabilire una connessione SSH a %s@%s:%s", + "loc.messages.SshConnectionSuccessful": "La connessione è riuscita.", + "loc.messages.UseDefaultPort": "Verrà usata la porta 22 che corrisponde a quella predefinita per SSH perché non è stata specificata alcuna porta.", + "loc.messages.ScriptArgsSanitized": "Sono stati rilevati caratteri negli argomenti che potrebbero non essere eseguiti correttamente dalla shell. Eseguire l'escape dei caratteri speciali usando la barra rovesciata (\\). Ulteriori informazioni sono disponibili qui: https://aka.ms/ado/75787" +} \ No newline at end of file diff --git a/_generated/SshV0_Node20/Strings/resources.resjson/ja-JP/resources.resjson b/_generated/SshV0_Node20/Strings/resources.resjson/ja-JP/resources.resjson new file mode 100644 index 000000000000..7ba0c70772f0 --- /dev/null +++ b/_generated/SshV0_Node20/Strings/resources.resjson/ja-JP/resources.resjson @@ -0,0 +1,39 @@ +{ + "loc.friendlyName": "SSH", + "loc.helpMarkDown": "[このタスクの詳細を表示](http://go.microsoft.com/fwlink/?LinkId=821892)", + "loc.description": "SSH を使用してリモート コンピューター上でシェル コマンドまたはスクリプトを実行します", + "loc.instanceNameFormat": "リモート コンピューター上でシェル $(runOptions) を実行します", + "loc.group.displayName.advanced": "詳細設定", + "loc.input.label.sshEndpoint": "SSH サービス接続", + "loc.input.help.sshEndpoint": "リモート マシンの接続詳細が設定された SSH サービス接続。", + "loc.input.label.runOptions": "実行", + "loc.input.help.runOptions": "リモート コンピューター上でシェル コマンドとシェル スクリプトのどちらを実行するか選択します。", + "loc.input.label.commands": "コマンド", + "loc.input.help.commands": "シェル コマンドがリモート コンピューター上で実行されるように指定します。新しい行に各コマンドとその引数を入力します。複数のコマンドを一緒に実行する場合、それらを同じ行に入力してセミコロンで区切ります。(例: cd /home/user/myFolder;build)。", + "loc.input.label.scriptPath": "シェル スクリプト パス", + "loc.input.help.scriptPath": "リモート コンピューター上で実行するシェル スクリプト ファイルへのパス。", + "loc.input.label.inline": "インライン スクリプト", + "loc.input.help.inline": "リモート マシン上で実行するシェル スクリプトを記述します。", + "loc.input.label.interpreterCommand": "インタープリター コマンド", + "loc.input.help.interpreterCommand": "スクリプトの実行に使用されるコマンド インタープリターへのパス。スクリプトの先頭に shebang 行を追加します。UNIX 系オペレーティング システムのみに関連します。Windows ベースのリモート ホストには空の文字列をお使いください。[shebang (#!) の詳細を表示](https://homepages.cwi.nl/~aeb/std/shebang/unix-faq.txt)", + "loc.input.label.args": "引数", + "loc.input.help.args": "シェル スクリプトに渡す引数。", + "loc.input.label.failOnStdErr": "STDERR でのエラー", + "loc.input.help.failOnStdErr": "このオプションを選択すると、リモート コマンドまたはスクリプトが STDERR に書き込みを行う場合、ビルドは失敗します。", + "loc.input.label.interactiveSession": "対話型セッションを有効にする", + "loc.input.help.interactiveSession": "このオプションを選択すると、対話型セッションが開始されます。パスワード要求がある場合、ユーザーのパスワードが入力されます。これは 'sudo' などのコマンドを実行するのに役立つ可能性があります。", + "loc.input.label.readyTimeout": "SSH ハンドシェイクのタイムアウト", + "loc.input.help.readyTimeout": "SSH ハンドシェイクの完了を待機する時間 (ミリ秒)。", + "loc.input.label.interactiveKeyboardAuthentication": "対話型キーボード認証を使用する", + "loc.input.help.interactiveKeyboardAuthentication": "対象のコンピューターで PasswordAuthentication が無効になっている場合は、この値を使用します", + "loc.messages.ConnectionFailed": "リモート マシンへの接続に失敗しました。SSH サービス接続の詳細を確認してください。エラー: %s。", + "loc.messages.FailedToWriteScript": "スクリプトをディスクに書き込めませんでした: %s", + "loc.messages.RemoteCmdExecutionErr": "リモート コンピューター上のエラーにより、コマンドの実行に失敗しました。", + "loc.messages.RemoteCmdNonZeroExitCode": "コマンド %s がコード %s で終了しました。", + "loc.messages.RemoteCopyFailed": "リモート コンピューターへのスクリプトのコピーに失敗しました。エラー: %s。", + "loc.messages.RemoteScriptFileCleanUpFailed": "リモート コンピューターにコピーされたスクリプト ファイルの削除に失敗しました。エラー = %s。", + "loc.messages.SettingUpSshConnection": "%s@%s:%s への SSH 接続を確立しようとしています", + "loc.messages.SshConnectionSuccessful": "正常に接続しました。", + "loc.messages.UseDefaultPort": "ポートが指定されなかったため、SSH で既定のポート 22 を使用しています。", + "loc.messages.ScriptArgsSanitized": "シェルによって正しく実行されない可能性のある引数の文字が検出されました。円記号 (\\) を使用して特殊文字をエスケープしてください。詳細についてはこちら: https://aka.ms/ado/75787" +} \ No newline at end of file diff --git a/_generated/SshV0_Node20/Strings/resources.resjson/ko-KR/resources.resjson b/_generated/SshV0_Node20/Strings/resources.resjson/ko-KR/resources.resjson new file mode 100644 index 000000000000..8a8ba10d2483 --- /dev/null +++ b/_generated/SshV0_Node20/Strings/resources.resjson/ko-KR/resources.resjson @@ -0,0 +1,39 @@ +{ + "loc.friendlyName": "SSH", + "loc.helpMarkDown": "[이 작업에 대한 자세한 정보](http://go.microsoft.com/fwlink/?LinkId=821892)", + "loc.description": "SSH를 사용하여 원격 컴퓨터에서 셸 명령 또는 스크립트를 실행합니다.", + "loc.instanceNameFormat": "원격 컴퓨터에서 셸 $(runOptions) 실행", + "loc.group.displayName.advanced": "고급", + "loc.input.label.sshEndpoint": "SSH 서비스 연결", + "loc.input.help.sshEndpoint": "원격 머신의 연결 정보가 있는 SSH 서비스 연결입니다.", + "loc.input.label.runOptions": "실행", + "loc.input.help.runOptions": "원격 컴퓨터에서 셸 명령을 실행할지 또는 셸 스크립트를 실행할지 선택합니다.", + "loc.input.label.commands": "명령", + "loc.input.help.commands": "원격 컴퓨터에서 실행할 셸 명령을 지정합니다. 새 줄에 각 명령을 해당 인수와 함께 입력합니다. 여러 명령을 함께 실행하려면 같은 줄에 세미콜론으로 구분하여 여러 명령을 입력합니다(예: cd /home/user/myFolder;build).", + "loc.input.label.scriptPath": "셸 스크립트 경로", + "loc.input.help.scriptPath": "원격 컴퓨터에서 실행할 셸 스크립트 파일의 경로입니다.", + "loc.input.label.inline": "인라인 스크립트", + "loc.input.help.inline": "원격 컴퓨터에서 실행할 셸 스크립트를 작성합니다.", + "loc.input.label.interpreterCommand": "인터프리터 명령", + "loc.input.help.interpreterCommand": "스크립트를 실행하는 데 사용되는 명령 인터프리터의 경로입니다. 스크립트 시작 부분에 셔뱅 줄을 추가합니다. UNIX와 유사한 운영 체제에만 해당합니다. Windows 기반 원격 호스트에는 빈 문자열을 사용하세요. [셔뱅(#!)에 대한 자세한 정보](https://homepages.cwi.nl/~aeb/std/shebang/unix-faq.txt)", + "loc.input.label.args": "인수", + "loc.input.help.args": "셸 스크립트에 전달할 인수입니다.", + "loc.input.label.failOnStdErr": "STDERR이 발생할 경우 실패", + "loc.input.help.failOnStdErr": "이 옵션을 선택하면 원격 명령 또는 스크립트에서 STDERR에 쓰는 경우 빌드가 실패합니다.", + "loc.input.label.interactiveSession": "대화형 세션 사용", + "loc.input.help.interactiveSession": "이 옵션을 선택하면 대화형 세션이 시작됩니다. 암호 요청이 있는 경우 사용자의 암호로 채워집니다. 'sudo' 같은 명령을 실행하는 것이 유용할 수 있습니다.", + "loc.input.label.readyTimeout": "SSH 핸드셰이크 시간 제한", + "loc.input.help.readyTimeout": "SSH 핸드셰이크가 완료될 때까지 대기하는 시간(밀리초)입니다.", + "loc.input.label.interactiveKeyboardAuthentication": "대화형 키보드 인증 사용", + "loc.input.help.interactiveKeyboardAuthentication": "대상 시스템에서 PasswordAuthentication이 비활성화된 경우 이 값을 사용하세요.", + "loc.messages.ConnectionFailed": "원격 머신에 연결하지 못했습니다. SSH 서비스 연결 정보를 확인하세요. 오류: %s.", + "loc.messages.FailedToWriteScript": "%s 디스크에 스크립트를 쓰지 못했습니다.", + "loc.messages.RemoteCmdExecutionErr": "원격 컴퓨터에서 오류가 발생하여 명령이 실패했습니다.", + "loc.messages.RemoteCmdNonZeroExitCode": "%s 명령이 종료되었습니다(코드: %s).", + "loc.messages.RemoteCopyFailed": "원격 컴퓨터에 스크립트를 복사하지 못했습니다. 오류: %s.", + "loc.messages.RemoteScriptFileCleanUpFailed": "원격 컴퓨터에 복사된 스크립트 파일을 삭제하지 못했습니다. 오류 = %s.", + "loc.messages.SettingUpSshConnection": "%s@%s:%s에 대한 SSH 연결을 설정하는 중", + "loc.messages.SshConnectionSuccessful": "연결되었습니다.", + "loc.messages.UseDefaultPort": "포트가 지정되지 않았으므로 SSH에 대한 기본값인 포트 22를 사용합니다.", + "loc.messages.ScriptArgsSanitized": "셸에서 올바르게 실행되지 않을 수 있는 인수에서 검색된 문자입니다. 백슬래시(\\)를 사용하여 이스케이프 특수 문자를 만드세요. 자세한 내용은 https://aka.ms/ado/75787을 참조하세요." +} \ No newline at end of file diff --git a/_generated/SshV0_Node20/Strings/resources.resjson/ru-RU/resources.resjson b/_generated/SshV0_Node20/Strings/resources.resjson/ru-RU/resources.resjson new file mode 100644 index 000000000000..62c7d6a41acf --- /dev/null +++ b/_generated/SshV0_Node20/Strings/resources.resjson/ru-RU/resources.resjson @@ -0,0 +1,39 @@ +{ + "loc.friendlyName": "SSH", + "loc.helpMarkDown": "[См. дополнительные сведения об этой задаче](http://go.microsoft.com/fwlink/?LinkId=821892)", + "loc.description": "Запуск команд оболочки или сценария на удаленном компьютере с помощью SSH", + "loc.instanceNameFormat": "Запуск оболочки $(runOptions) на удаленном компьютере", + "loc.group.displayName.advanced": "Дополнительно", + "loc.input.label.sshEndpoint": "Подключение к службе SSH", + "loc.input.help.sshEndpoint": "Подключение к службе SSH со сведениями о подключении для удаленного компьютера.", + "loc.input.label.runOptions": "Запуск", + "loc.input.help.runOptions": "Выберите запуск команд оболочки или сценария оболочки на удаленном компьютере.", + "loc.input.label.commands": "Команды", + "loc.input.help.commands": "Укажите команды оболочки для запуска на удаленном компьютере. Каждую команду и ее аргументы необходимо вводить в новой строке. Чтобы одновременно выполнить несколько команд, введите их в одной строке, разделяя точкой с запятой (например, cd /home/user/myFolder;build).", + "loc.input.label.scriptPath": "Путь к сценарию оболочки", + "loc.input.help.scriptPath": "Путь к файлу сценария оболочки для запуска на удаленном компьютере.", + "loc.input.label.inline": "Встроенный сценарий", + "loc.input.help.inline": "Написание скрипта оболочки для запуска на удаленном компьютере.", + "loc.input.label.interpreterCommand": "Команда интерпретатора", + "loc.input.help.interpreterCommand": "Путь к интерпретатору команд, используемому для выполнения скрипта. Добавляет строку шебанга в начало скрипта. Применимо только для UNIX-подобных операционных систем. Для удаленных узлов на основе Windows укажите пустую строку. [Дополнительные сведения о шебанге (#!)](https://homepages.cwi.nl/~aeb/std/shebang/unix-faq.txt)", + "loc.input.label.args": "Аргументы", + "loc.input.help.args": "Аргументы, передаваемые в сценарий оболочки.", + "loc.input.label.failOnStdErr": "Ошибка в STDERR", + "loc.input.help.failOnStdErr": "Если этот параметр выбран, сборка завершится ошибкой при записи данных удаленными командами или сценарием в поток STDERR.", + "loc.input.label.interactiveSession": "Включить интерактивный сеанс", + "loc.input.help.interactiveSession": "Если выбран этот параметр, будет запущен интерактивный сеанс. При наличии запроса на пароль будет указан пароль пользователя. Это может быть удобно для выполнения таких команд, как \"sudo\".", + "loc.input.label.readyTimeout": "Время ожидания подтверждения SSH", + "loc.input.help.readyTimeout": "Время (в миллисекундах) для ожидания завершения подтверждения SSH.", + "loc.input.label.interactiveKeyboardAuthentication": "Использовать проверку подлинности с помощью интерактивной клавиатуры", + "loc.input.help.interactiveKeyboardAuthentication": "Используйте это значение, если параметр PasswordAuthentication отключен на целевом компьютере", + "loc.messages.ConnectionFailed": "Не удалось подключиться к удаленному компьютеру. Проверьте сведения о подключении к службе SSH. Ошибка: %s.", + "loc.messages.FailedToWriteScript": "Не удалось записать скрипт на диск: %s", + "loc.messages.RemoteCmdExecutionErr": "Сбой команды с ошибками на удаленном компьютере.", + "loc.messages.RemoteCmdNonZeroExitCode": "Выход из команды %s с кодом %s.", + "loc.messages.RemoteCopyFailed": "Не удалось скопировать сценарий на удаленный компьютер. Ошибка: %s.", + "loc.messages.RemoteScriptFileCleanUpFailed": "Не удалось удалить сценарий, скопированный на удаленный компьютер. Ошибка: %s.", + "loc.messages.SettingUpSshConnection": "Попытка установить SSH-подключение к %s@%s:%s", + "loc.messages.SshConnectionSuccessful": "Подключение успешно установлено.", + "loc.messages.UseDefaultPort": "Используется порт 22, который является портом по умолчанию для SSH, так как порт не указан.", + "loc.messages.ScriptArgsSanitized": "Обнаружены символы в аргументах, которые могут быть неправильно интерпретированы оболочкой. Экранируйте специальные символы с помощью обратной косой черты (\\). Дополнительные сведения см. на следующей странице: https://aka.ms/ado/75787" +} \ No newline at end of file diff --git a/_generated/SshV0_Node20/Strings/resources.resjson/zh-CN/resources.resjson b/_generated/SshV0_Node20/Strings/resources.resjson/zh-CN/resources.resjson new file mode 100644 index 000000000000..f2ba9e7bee56 --- /dev/null +++ b/_generated/SshV0_Node20/Strings/resources.resjson/zh-CN/resources.resjson @@ -0,0 +1,39 @@ +{ + "loc.friendlyName": "SSH", + "loc.helpMarkDown": "[详细了解此任务](http://go.microsoft.com/fwlink/?LinkId=821892)", + "loc.description": "使用 SSH 在远程计算机上运行 shell 命令或脚本", + "loc.instanceNameFormat": "在远程计算机上运行 shell $(runOptions)", + "loc.group.displayName.advanced": "高级", + "loc.input.label.sshEndpoint": "SSH 服务连接", + "loc.input.help.sshEndpoint": "含远程计算机连接详细信息的 SSH 服务连接。", + "loc.input.label.runOptions": "运行", + "loc.input.help.runOptions": "选择在远程计算机上运行 shell 命令或 shell 脚本。", + "loc.input.label.commands": "命令", + "loc.input.help.commands": "指定要在远程计算机上运行的 shell 命令。在新行上输入每个命令及其参数。若要同时运行多个命令,请在同一行上输入它们,以分号隔开(例如 cd /home/user/myFolder;build)。", + "loc.input.label.scriptPath": "Shell 脚本路径", + "loc.input.help.scriptPath": "要在远程计算机上运行的 shell 脚本文件的路径。", + "loc.input.label.inline": "内联脚本", + "loc.input.help.inline": "编写要在远程计算机上运行的 shell 脚本。", + "loc.input.label.interpreterCommand": "解释器命令", + "loc.input.help.interpreterCommand": "用于执行脚本的命令解释器的路径。请向脚本的开头添加一个 shebang (释伴)行。仅适用于与 UNIX 类似的操作系统。请对基于 Windows 的远程主机使用空字符串。[详细了解 shebang (#!)](https://homepages.cwi.nl/~aeb/std/shebang/unix-faq.txt)", + "loc.input.label.args": "参数", + "loc.input.help.args": "要传递给 shell 脚本的参数。", + "loc.input.label.failOnStdErr": "STDERR 故障", + "loc.input.help.failOnStdErr": "如果选择此选项,则 STDERR 中写入远程命令或脚本时,生成将失败。", + "loc.input.label.interactiveSession": "启用交互式会话", + "loc.input.help.interactiveSession": "如果选择此选项,将启动交互式会话 - 如果有密码请求,则将根据用户的密码填充它。这对运行 \"sudo\" 之类的命令可能很有用", + "loc.input.label.readyTimeout": "SSH 握手超时", + "loc.input.help.readyTimeout": "等待 SSH 握手完成的时间(毫秒)。", + "loc.input.label.interactiveKeyboardAuthentication": "使用交互式键盘身份验证", + "loc.input.help.interactiveKeyboardAuthentication": "如果在目标计算机上禁用了 PasswordAuthentication,请使用此值", + "loc.messages.ConnectionFailed": "无法连接到远程计算机。请验证 SSH 服务连接详细信息。错误: %s。", + "loc.messages.FailedToWriteScript": "未能将脚本写入磁盘: %s", + "loc.messages.RemoteCmdExecutionErr": "命令因远程计算机上的错误而失败。", + "loc.messages.RemoteCmdNonZeroExitCode": "命令 %s 已退出,代码为 %s。", + "loc.messages.RemoteCopyFailed": "无法将脚本复制到远程计算机。错误: %s。", + "loc.messages.RemoteScriptFileCleanUpFailed": "无法删除复制到远程计算机上的脚本文件。错误 = %s。", + "loc.messages.SettingUpSshConnection": "正在尝试建立与 %s@%s:%s 的 SSH 连接", + "loc.messages.SshConnectionSuccessful": "已成功连接。", + "loc.messages.UseDefaultPort": "由于未指定端口,将使用SSH 的默认端口 22。", + "loc.messages.ScriptArgsSanitized": "在参数中检测到可能无法由 shell 正确执行的字符。请使用反斜杠 (\\) 转义特殊字符。有关详细信息,请访问此处: https://aka.ms/ado/75787" +} \ No newline at end of file diff --git a/_generated/SshV0_Node20/Strings/resources.resjson/zh-TW/resources.resjson b/_generated/SshV0_Node20/Strings/resources.resjson/zh-TW/resources.resjson new file mode 100644 index 000000000000..6c398d9b2cc2 --- /dev/null +++ b/_generated/SshV0_Node20/Strings/resources.resjson/zh-TW/resources.resjson @@ -0,0 +1,39 @@ +{ + "loc.friendlyName": "SSH", + "loc.helpMarkDown": "[深入了解此工作](http://go.microsoft.com/fwlink/?LinkId=821892)", + "loc.description": "在使用 SSH 的遠端電腦上執行殼層命令或指令碼", + "loc.instanceNameFormat": "在遠端電腦上執行殼層 $(runOptions)", + "loc.group.displayName.advanced": "進階", + "loc.input.label.sshEndpoint": "SSH 服務連線", + "loc.input.help.sshEndpoint": "具有遠端電腦連線詳細資料的 SSH 服務連線。", + "loc.input.label.runOptions": "執行", + "loc.input.help.runOptions": "選擇要在遠端電腦上執行殼層命令或殼層指令碼。", + "loc.input.label.commands": "命令", + "loc.input.help.commands": "指定要在遠端電腦上執行的殼層命令。請以新行輸入每個命令及其引數。若要同時執行多個命令,請在同一行中輸入命令並以分號分隔 (例如 cd /home/user/myFolder;build)。", + "loc.input.label.scriptPath": "殼層指令碼路徑", + "loc.input.help.scriptPath": "要在遠端電腦上執行之殼層指令碼檔的路徑。", + "loc.input.label.inline": "內嵌指令碼", + "loc.input.help.inline": "撰寫要在遠端電腦上執行的 Shell 指令碼。", + "loc.input.label.interpreterCommand": "解譯器命令", + "loc.input.help.interpreterCommand": "用於執行指令碼的命令解譯器路徑。在指令碼開頭新增 shebang (#!) 行。僅與 UNIX 類作業系統相關。請為 Windows 型的遠端主機使用空字串。[深入了解 shebang (#!)](https://homepages.cwi.nl/~aeb/std/shebang/unix-faq.txt)", + "loc.input.label.args": "引數", + "loc.input.help.args": "要傳遞至殼層指令碼的引數。", + "loc.input.label.failOnStdErr": "在 STDERR 上失敗", + "loc.input.help.failOnStdErr": "如果選取此選項,當遠端命令或指令碼寫入 STDERR 時,組建會失敗。", + "loc.input.label.interactiveSession": "啟用互動式工作階段", + "loc.input.help.interactiveSession": "如果選取此選項,即會啟動互動式工作階段; 若要求提供密碼,系統會填入使用者的密碼。執行 'sudo' 等命令可能有所幫助", + "loc.input.label.readyTimeout": "SSH 交握逾時", + "loc.input.help.readyTimeout": "等候 SSH 交握完成所需的時間 (毫秒)。", + "loc.input.label.interactiveKeyboardAuthentication": "使用互動式鍵盤驗證", + "loc.input.help.interactiveKeyboardAuthentication": "若目標電腦上已停用 PasswordAuthentication,請使用此值", + "loc.messages.ConnectionFailed": "無法連線到遠端電腦。請驗證 SSH 服務連線的詳細資料。錯誤: %s。", + "loc.messages.FailedToWriteScript": "無法將指令碼寫入磁碟: %s", + "loc.messages.RemoteCmdExecutionErr": "命令在遠端電腦上發生錯誤而失敗。", + "loc.messages.RemoteCmdNonZeroExitCode": "命令 %s 在程式碼 %s 結束。", + "loc.messages.RemoteCopyFailed": "無法將指令碼複製到遠端電腦。錯誤: %s。", + "loc.messages.RemoteScriptFileCleanUpFailed": "無法刪除複製到遠端電腦的指令碼檔。錯誤 = %s。", + "loc.messages.SettingUpSshConnection": "正在嘗試對 %s@%s:%s 建立 SSH 連線", + "loc.messages.SshConnectionSuccessful": "連線成功。", + "loc.messages.UseDefaultPort": "因為未指定任何連接埠,所以將使用 SSH 的預設連接埠 22。", + "loc.messages.ScriptArgsSanitized": "偵測到引數中可能無法由殼層正確執行的字元。請使用反斜線 (\\) 逸出特殊字元。如需詳細資訊,請參閱: https://aka.ms/ado/75787" +} \ No newline at end of file diff --git a/_generated/SshV0_Node20/Tests/L0.ts b/_generated/SshV0_Node20/Tests/L0.ts new file mode 100644 index 000000000000..e31baf5d7a9b --- /dev/null +++ b/_generated/SshV0_Node20/Tests/L0.ts @@ -0,0 +1,198 @@ +import assert = require('assert'); +import tmrm = require('azure-pipelines-task-lib/mock-test'); +import path = require('path'); + +function runValidations(validator: () => void, tr, done) { + try { + validator(); + done(); + } + catch (error) { + console.log("STDERR", tr.stderr); + console.log("STDOUT", tr.stdout); + done(error); + } +} + +describe('SshV0 Suite', function() { + this.timeout(parseInt(process.env.TASK_TEST_TIMEOUT) || 20000); + + it('Fails for missing endpoint', (done) => { + delete process.env['sshEndpoint']; + delete process.env['commands']; + delete process.env['runOptions']; + process.env['readyTimeout'] = '20000'; + + let tp = path.join(__dirname, 'L0SshRunner.js'); + var tr = new tmrm.MockTestRunner(tp); + + tr.run(); + + runValidations(() => { + assert(tr.invokedToolCount == 0, 'should not have run any tools'); + assert(tr.failed, 'task should have failed'); + assert(tr.stdout.indexOf('Input required: sshEndpoint') >= 0, 'wrong error message: "' + tr.stdout + '"'); + }, tr, done); + }); + + it('Fails when user name is not provided in the endpoint', (done) => { + delete process.env['runOptions']; + process.env['sshEndpoint'] = 'IDUserNameNotSet'; + process.env['commands'] = 'ls -l'; + process.env['readyTimeout'] = '20000'; + + let tp = path.join(__dirname, 'L0SshRunner.js'); + var tr = new tmrm.MockTestRunner(tp); + + tr.run(); + + runValidations(() => { + assert(tr.invokedToolCount == 0, 'should not have run any tools'); + assert(tr.failed, 'task should have failed'); + assert(tr.stdout.indexOf('Endpoint auth data not present: IDUserNameNotSet') >= 0, 'wrong error message: "' + tr.stdout + '"'); + }, tr, done); + }); + + it('Empty password/passphrase is valid in the endpoint', (done) => { + delete process.env['commands']; + delete process.env['runOptions']; + process.env['sshEndpoint'] = 'IDPasswordNotSet'; + process.env['readyTimeout'] = '20000'; + + let tp = path.join(__dirname, 'L0SshRunner.js'); + var tr = new tmrm.MockTestRunner(tp); + + tr.run(); + + runValidations(() => { + assert(tr.invokedToolCount == 0, 'should not have run any tools'); + assert(tr.stderr.indexOf('Input required: password') < 0, 'task should not require password'); + }, tr, done); + }); + + it('Fails when host is not provided in the endpoint', (done) => { + delete process.env['commands']; + delete process.env['runOptions']; + process.env['sshEndpoint'] = 'IDHostNotSet'; + process.env['readyTimeout'] = '20000'; + + let tp = path.join(__dirname, 'L0SshRunner.js'); + var tr = new tmrm.MockTestRunner(tp); + + tr.run(); + + runValidations(() => { + assert(tr.invokedToolCount == 0, 'should not have run any tools'); + assert(tr.failed, 'task should have failed'); + assert(tr.stdout.indexOf('Endpoint auth data not present: IDHostNotSet') >= 0, 'wrong error message: "' + tr.stdout + '"'); + }, tr, done); + }); + + it('When port is not provided in the endpoint, 22 is used as default port number', (done) => { + delete process.env['commands']; + delete process.env['runOptions']; + process.env['sshEndpoint'] = 'IDPortNotSet'; + process.env['readyTimeout'] = '20000'; + + let tp = path.join(__dirname, 'L0SshRunner.js'); + var tr = new tmrm.MockTestRunner(tp); + + tr.run(); + + runValidations(() => { + assert(tr.invokedToolCount == 0, 'should not have run any tools'); + assert(tr.stdout.indexOf('loc_mock_UseDefaultPort') >= 0, 'default port 22 was not used'); + }, tr, done); + }); + + it('Fails when connection cannot be made with given details', (done) => { + process.env['sshEndpoint'] = 'IDValidKey'; + process.env['commands'] = 'ls -l'; + process.env['runOptions'] = 'commands'; + process.env['readyTimeout'] = '20000'; + + let tp = path.join(__dirname, 'L0SshRunner.js'); + var tr = new tmrm.MockTestRunner(tp); + + tr.run(); + + runValidations(() => { + assert(tr.invokedToolCount == 0, 'should not have run any tools'); + assert(tr.failed, 'task should have failed'); + assert(tr.stdout.indexOf('loc_mock_ConnectionFailed Error: Cannot parse privateKey: Malformed OpenSSH private key. Bad passphrase?') >= 0, 'wrong error message: "' + tr.stdout + '"'); + }, tr, done); + }); + + it('Fails for missing run options', (done) => { + delete process.env['commands']; + delete process.env['runOptions']; + process.env['sshEndpoint'] = 'IDValidKey'; + process.env['readyTimeout'] = '20000'; + + let tp = path.join(__dirname, 'L0SshRunner.js'); + var tr = new tmrm.MockTestRunner(tp); + + tr.run(); + + runValidations(() => { + assert(tr.invokedToolCount == 0, 'should not have run any tools'); + assert(tr.failed, 'build should have failed'); + assert(tr.stdout.indexOf('Input required: runOptions') >= 0, 'wrong error message: "' + tr.stdout + '"'); + }, tr, done); + }); + + it('Fails for missing commands', (done) => { + delete process.env['commands']; + process.env['sshEndpoint'] = 'IDValidKey'; + process.env['runOptions'] = 'commands'; + process.env['readyTimeout'] = '20000'; + + let tp = path.join(__dirname, 'L0SshRunner.js'); + var tr = new tmrm.MockTestRunner(tp); + + tr.run(); + + runValidations(() => { + assert(tr.invokedToolCount == 0, 'should not have run any tools'); + assert(tr.failed, 'task should have failed'); + assert(tr.stdout.indexOf('Input required: commands') >= 0, 'wrong error message: "' + tr.stdout + '"'); + }, tr, done); + }); + + it('Fails for missing script path', (done) => { + delete process.env['commands']; + process.env['sshEndpoint'] = 'IDValidKey'; + process.env['runOptions'] = 'script'; + process.env['readyTimeout'] = '20000'; + + let tp = path.join(__dirname, 'L0SshRunner.js'); + var tr = new tmrm.MockTestRunner(tp); + + tr.run(); + + runValidations(() => { + assert(tr.invokedToolCount == 0, 'should not have run any tools'); + assert(tr.failed, 'task should have failed'); + assert(tr.stdout.indexOf('Input required: scriptPath') >= 0, 'wrong error message: "' + tr.stdout + '"'); + }, tr, done); + }); + + it('Fails for missing readyTimeout', (done) => { + process.env['commands'] = 'ls -l'; + process.env['sshEndpoint'] = 'IDValidKey'; + process.env['readyTimeout'] = '20000'; + process.env['runOptions'] = 'commands'; + delete process.env['readyTimeout']; + + let tp = path.join(__dirname, 'L0SshRunner.js'); + var tr = new tmrm.MockTestRunner(tp); + + tr.run(); + + runValidations(() => { + assert(tr.invokedToolCount == 0, 'should not have run any tools'); + assert(tr.failed, 'task should have failed'); + assert(tr.stdout.indexOf('Input required: readyTimeout') >= 0, 'wrong error message: "' + tr.stdout + '"'); + }, tr, done); + }); +}); \ No newline at end of file diff --git a/_generated/SshV0_Node20/Tests/L0SshRunner.ts b/_generated/SshV0_Node20/Tests/L0SshRunner.ts new file mode 100644 index 000000000000..19592e5ad139 --- /dev/null +++ b/_generated/SshV0_Node20/Tests/L0SshRunner.ts @@ -0,0 +1,67 @@ +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, '..', 'ssh.js'); +let tmr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +if (process.env['sshEndpoint']) { + tmr.setInput('sshEndpoint', process.env['sshEndpoint']); +} +if (process.env['commands']) { + tmr.setInput('commands', process.env['commands']); +} +if (process.env['runOptions']) { + tmr.setInput('runOptions', process.env['runOptions']); +} +if (process.env['readyTimeout']) { + tmr.setInput('readyTimeout', process.env['readyTimeout']); +} + +const tl = require('azure-pipelines-task-lib/mock-task'); +const tlClone = Object.assign({}, tl); +tlClone.getEndpointAuthorizationParameter = function (id: string, key: string, optional: boolean) { + key = key.toUpperCase(); + if (key == 'USERNAME') { + if (['IDValidKey', 'IDInvalidKey'].indexOf(id) > -1) { + return 'username'; + } + if (['IDPasswordNotSet', 'IDHostNotSet', 'IDPortNotSet'].indexOf(id) > -1) { + return 'user'; + } + } + if (key == 'PASSWORD') { + if (['IDValidKey', 'IDInvalidKey', 'IDUserNameNotSet', 'IDHostNotSet', 'IDPortNotSet'].indexOf(id) > -1) { + return 'password'; + } + } + if (optional) { + return ''; + } + throw new Error(`Endpoint auth data not present: ${id}`); +} + +tlClone.getEndpointDataParameter = function (id: string, key: string, optional: boolean) { + key = key.toUpperCase(); + if (key == 'HOST') { + if (['IDValidKey', 'IDInvalidKey', 'IDPasswordNotSet', 'IDPortNotSet'].indexOf(id) > -1) { + return 'host'; + } + } + if (key == 'PORT') { + if (['IDValidKey', 'IDInvalidKey', 'IDPasswordNotSet', 'IDHostNotSet'].indexOf(id) > -1) { + return 'port'; + } + } + if (optional) { + return ''; + } + throw new Error(`Endpoint auth data not present: ${id}`); +} +tmr.registerMock('azure-pipelines-task-lib/mock-task', tlClone); + +process.env['ENDPOINT_DATA_IDValidKey_PRIVATEKEY'] = '-----BEGIN RSA PRIVATE KEY-----\nProc-Type: 4,ENCRYPTED\nDEK-Info: AES-128-CBC,CA14F355C3F7B8C1BBFB0D82E3ABCA0D\n\nWsGY24YaokaY8JzaMI/CFoSG5u/zBeO7RbiNpIVU+wthDfSQi439xnCcU+zysJw1\nDOOItKl4ZdorDjhWLi4kUlDshHZgc8eYR2y45u0i5IqcgS7QM9ey5UBPp7/L5OoG\ncmynCtbEwUKbb5+b/rO+0O0zRBnB3NJDtVW5gBQu0xPJCoZ1fUqtZLd3d9XwjUC8\na7DVJ0jUJtfl3vI5LPSE7mQNw98CgSOuOrsKBYeN40oOm6VQTlPpqFW2MhrFgUt4\n4rSpmGpq/0vSlYf9KxgwO1HxtMJEnLRsFdz2/WKao500XKDUaDNBzICb8rCsdK//\nKnn0BwpmZXf+vRuCwSifb0t5IeXZg/znSNJhx8uwNUbe/BPM9oQcex9h5VJdUNbQ\neS7nw09BwAvVY58xkhmEJJq0pLsEPgol44ai39HSv+8vts9vLmM410l6QsE4cfBO\nIYqkxj+0pEGzUMTPWD9kle0Gf25dH+tHF9NxccpvdGyRljjK/138p2RAZEGoMDH7\nduTBxPO3BqCkdzQooaDzrdskc/+uIVqGhpAnvCuCn3KahAmCAMM78UKQ2NC2kFsb\nZpsXXR7A8gztKIlhjo3m0xuvmXolyEDyxgNpWkS+yrVe8wOZqAdeZ4P+rP2un8vd\nHQHBZTNt5MS0C7R4bpTzxT+BCjWT2bWQ5xFRuoVsX2aP9QyosIYPkP4maKcEPazb\nu3H1DwglKAagbk1iWEeI58ni1WqCNQAPWup5A2VXugvOqnDyWAGlvU+5E8RvdDCo\n3+52r0Mp0T1CwdTzjIenh+wxZ75IF0HfqUn1hvzXChCx/FRagEVwBVWd6T4gecCI\nMZyHzkkDiXrsoCqIBrpOz44hXWeBZRQ+moDT7ezoNyA78KwHN9tK2Prxt9NdHxV/\n24PBNmrxQzTXzpQwqNihexhRWVjV7OTbVc4XiBtPcg3NM09E4sCa2bI0yQZz0ypF\nHzkbrRh8Y2NTIWxdQPHIXiD1aO6M21KG6DFiajFy3wlzALxuuwK8m2jRnfuPkF6s\nNVcWCmHzDeupuPaURtUYA94EyKL1SD7oz/mzxLsfkOtGyM+majFEZ8tCvr23l6KP\niFpngbRCZlWLuKY1DMwgr9RBtybte5lSPJKS6dcACZDkPLFqKzlT/jziU2oJNJJ3\nnUWT2z3tmJtxDFZnr0HY514YdbnWv4Rq25H+hH+/yM7KJpCgc0pAJCnJvDG5fRN/\nLCjmKw9fN65x7ye3h3SmKc+bMlesGTCNchYDNaLtUSqOXGHBBD4bSQokO6AW9HYF\nFOjwXAxn3XmxBSLuuXucCWfXEbgq6hHIEruQvC1KmiYjirwYlLk5atP5hWMNLM2s\naqlOzreyU0FQkBFWpLZoEYt1Pmsdyxz61qUklA7oPmbsO9JvgiFzU5jG66yqsrUi\nS8nhIw4oU452SjwnC7V+sAzUMjLizy412X5QL4UHNHvp4rn3R6aRWF1nNU00XadL\nQoGs/qgm7ykissIKYDDqltTjsWYOCTBF8QTdTZwXI3lXlDve9Y0dshZ5GRF0QCv4\n9MFnQNkYAu5Y3JgnqYWJoSjlqQlk6pxuhIrxRmX6Ywk660Zs6uvjrKgwkNjplqtt\n-----END RSA PRIVATE KEY-----'; +process.env['ENDPOINT_DATA_IDInvalidKey_PRIVATEKEY'] = 'private key file contents'; + +tmr.run(); + diff --git a/_generated/SshV0_Node20/Tests/package-lock.json b/_generated/SshV0_Node20/Tests/package-lock.json new file mode 100644 index 000000000000..3c3e0d26e773 --- /dev/null +++ b/_generated/SshV0_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/_generated/SshV0_Node20/Tests/package.json b/_generated/SshV0_Node20/Tests/package.json new file mode 100644 index 000000000000..b74f00383e91 --- /dev/null +++ b/_generated/SshV0_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/_generated/SshV0_Node20/ThirdPartyNotice.txt b/_generated/SshV0_Node20/ThirdPartyNotice.txt new file mode 100644 index 000000000000..fee7b4286e51 --- /dev/null +++ b/_generated/SshV0_Node20/ThirdPartyNotice.txt @@ -0,0 +1,798 @@ + +THIRD-PARTY SOFTWARE NOTICES AND INFORMATION +Do Not Translate or Localize + +This Azure DevOps extension (SshV0) 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. @types/q (git+https://github.com/DefinitelyTyped/DefinitelyTyped.git) +3. asn1 (git://github.com/mcavage/node-asn1.git) +4. async (git+https://github.com/caolan/async.git) +5. balanced-match (git://github.com/juliangruber/balanced-match.git) +6. brace-expansion (git://github.com/juliangruber/brace-expansion.git) +7. concat-map (git://github.com/substack/node-concat-map.git) +8. core-util-is (git://github.com/isaacs/core-util-is.git) +9. fs.realpath (git+https://github.com/isaacs/fs.realpath.git) +10. glob (git://github.com/isaacs/node-glob.git) +11. glob (git://github.com/isaacs/node-glob.git) +12. inflight (git+https://github.com/npm/inflight.git) +13. inherits (git://github.com/isaacs/inherits.git) +14. isarray (git://github.com/juliangruber/isarray.git) +15. lodash (git+https://github.com/lodash/lodash.git) +16. minimatch (git://github.com/isaacs/minimatch.git) +17. node-uuid (git+https://github.com/broofa/node-uuid.git) +18. once (git://github.com/isaacs/once.git) +19. path-is-absolute (git+https://github.com/sindresorhus/path-is-absolute.git) +20. q (git://github.com/kriskowal/q.git) +21. readable-stream (git://github.com/isaacs/readable-stream.git) +22. scp2 (git+https://github.com/lepture/node-scp2.git) +23. semver (git+https://github.com/npm/node-semver.git) +24. shelljs (git://github.com/arturadib/shelljs.git) +25. ssh2 (git+ssh://git@github.com/mscdex/ssh2.git) +26. ssh2 (git+ssh://git@github.com/mscdex/ssh2.git) +27. ssh2-streams (git+ssh://git@github.com/mscdex/ssh2-streams.git) +28. ssh2-streams (git+ssh://git@github.com/mscdex/ssh2-streams.git) +29. streamsearch (git+ssh://git@github.com/mscdex/streamsearch.git) +30. string_decoder (git://github.com/rvagg/string_decoder.git) +31. vso-node-api (git+https://github.com/Microsoft/vso-node-api.git) +32. vsts-task-lib (git+https://github.com/Microsoft/vsts-task-lib.git) +33. wrappy (git+https://github.com/npm/wrappy.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 + +%% @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 + +%% 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 + +%% 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 + +%% 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 + +%% 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 + +%% 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 + +%% 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 + +%% 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 + +%% 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 + +%% isarray NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +NO LICENSE FOUND +========================================= +END OF isarray NOTICES, INFORMATION, AND LICENSE + +%% lodash 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 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 + +%% 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 + +%% 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 + +%% 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 + +%% 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 + +%% 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 + +%% scp2 NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +NO LICENSE FOUND +========================================= +END OF scp2 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 + +%% ssh2 NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright Brian White. 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 ssh2 NOTICES, INFORMATION, AND LICENSE + +%% ssh2 NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright Brian White. 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 ssh2 NOTICES, INFORMATION, AND LICENSE + +%% ssh2-streams NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright 2014 Brian White. 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 ssh2-streams NOTICES, INFORMATION, AND LICENSE + +%% ssh2-streams NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright 2014 Brian White. 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 ssh2-streams NOTICES, INFORMATION, AND LICENSE + +%% streamsearch NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright Brian White. 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 streamsearch 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 + +%% vso-node-api NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +NO LICENSE FOUND +========================================= +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 + +%% 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 + diff --git a/_generated/SshV0_Node20/icon.png b/_generated/SshV0_Node20/icon.png new file mode 100644 index 000000000000..7e9b36a2a91b Binary files /dev/null and b/_generated/SshV0_Node20/icon.png differ diff --git a/_generated/SshV0_Node20/icon.svg b/_generated/SshV0_Node20/icon.svg new file mode 100644 index 000000000000..f34cc09da871 --- /dev/null +++ b/_generated/SshV0_Node20/icon.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/_generated/SshV0_Node20/make.json b/_generated/SshV0_Node20/make.json new file mode 100644 index 000000000000..19b7726a8e54 --- /dev/null +++ b/_generated/SshV0_Node20/make.json @@ -0,0 +1,11 @@ +{ + "rm": [ + { + "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" + ], + "options": "-Rf" + } + ] +} \ No newline at end of file diff --git a/_generated/SshV0_Node20/package-lock.json b/_generated/SshV0_Node20/package-lock.json new file mode 100644 index 000000000000..bcd241d764eb --- /dev/null +++ b/_generated/SshV0_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/_generated/SshV0_Node20/package.json b/_generated/SshV0_Node20/package.json new file mode 100644 index 000000000000..cb13c5a0aa02 --- /dev/null +++ b/_generated/SshV0_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/_generated/SshV0_Node20/ssh.ts b/_generated/SshV0_Node20/ssh.ts new file mode 100644 index 000000000000..3fc39fcde5b1 --- /dev/null +++ b/_generated/SshV0_Node20/ssh.ts @@ -0,0 +1,262 @@ +import * as os from 'os'; +import * as path from 'path'; +import * as tl from 'azure-pipelines-task-lib/task'; +import * as fs from 'fs'; +import * as sshHelper from './ssh2helpers'; +import { v4 as generateRandomUUID } from 'uuid'; +import { ConnectConfig } from 'ssh2'; +import { sanitizeArgs } from 'azure-pipelines-tasks-utility-common/argsSanitizer'; +import { emitTelemetry } from "azure-pipelines-tasks-utility-common/telemetry"; + +/** + * By default configuration, SSH runs on port 22. + * @constant {number} + * @default +*/ +const DEFAULT_SSH_PORT: number = 22; + +async function run() { + let sshClientConnection: any; + let cleanUpScriptCmd: string; + const remoteCmdOptions: sshHelper.RemoteCommandOptions = new sshHelper.RemoteCommandOptions(); + + try { + tl.setResourcePath(path.join(__dirname, 'task.json')); + + //read SSH endpoint input + const sshEndpoint = tl.getInput('sshEndpoint', true); + const tryKeyboard: boolean = tl.getBoolInput('interactiveKeyboardAuthentication', false); + const username: string = tl.getEndpointAuthorizationParameter(sshEndpoint, 'username', false); + const password: string = tl.getEndpointAuthorizationParameter(sshEndpoint, 'password', true); //passphrase is optional + const privateKey: string = process.env['ENDPOINT_DATA_' + sshEndpoint + '_PRIVATEKEY']; //private key is optional, password can be used for connecting + const hostname: string = tl.getEndpointDataParameter(sshEndpoint, 'host', false); + const port: number = getServerPort(sshEndpoint); //port is optional, will use 22 as default port if not specified + const interactiveSession: boolean = tl.getBoolInput('interactiveSession', false); + const readyTimeout = getReadyTimeoutVariable(); + + //setup the SSH connection configuration based on endpoint details + const sshConfig: ConnectConfig = { + host: hostname, + port: port, + username: username, + readyTimeout: readyTimeout, + tryKeyboard: tryKeyboard, + }; + + if (privateKey) { + tl.debug('Using private key for ssh connection.'); + sshConfig.privateKey = privateKey; + sshConfig.passphrase = password; + } else { + //use password + tl.debug('Using username and password for ssh connection.'); + sshConfig.password = password; + } + + //read the run options + const runOptions: string = tl.getInput('runOptions', true); + let commands: string[]; + let scriptFile: string; + let args: string; + + if (runOptions === 'commands') { + // Split on '\n' and ';', flatten, and remove empty entries + commands = tl.getDelimitedInput('commands', '\n', true) + .map(s => s.split(';')) + .reduce((a, b) => a.concat(b)) + .filter(s => s.length > 0); + } else if (runOptions === 'inline') { + let inlineScript: string = tl.getInput('inline', true); + const interpreterCommand: string = tl.getInput('interpreterCommand'); + if (inlineScript && !inlineScript.startsWith('#!') && interpreterCommand) { + tl.debug('No script header detected. Adding: #!' + interpreterCommand); + inlineScript = `#!${interpreterCommand}${os.EOL}${inlineScript}`; + } + const tempDir: string = tl.getVariable('Agent.TempDirectory') || os.tmpdir(); + const scriptName: string = `sshscript_${generateRandomUUID()}`; // default name + scriptFile = path.join(tempDir, scriptName); + try { + // Make sure the directory exists or else we will get ENOENT + if (!fs.existsSync(tempDir)) { + tl.mkdirP(tempDir); + } + fs.writeFileSync(scriptFile, inlineScript); + } catch (err) { + tl.error(tl.loc('FailedToWriteScript', err.message)); + tryDeleteFile(scriptFile); + throw err; + } + } else { + scriptFile = tl.getPathInput('scriptPath', true, true); + args = tl.getInput('args'); + } + + const failOnStdErr: boolean = tl.getBoolInput('failOnStdErr'); + remoteCmdOptions.failOnStdErr = failOnStdErr; + + //setup the SSH connection + console.log(tl.loc('SettingUpSshConnection', sshConfig.username, sshConfig.host, sshConfig.port)); + try { + sshClientConnection = await sshHelper.setupSshClientConnection(sshConfig); + } catch (err) { + tl.setResult(tl.TaskResult.Failed, tl.loc('ConnectionFailed', err)); + } + + if (sshClientConnection) { + //SSH connection successful + console.log(tl.loc('SshConnectionSuccessful')); + if (runOptions === 'commands') { + //run commands specified by the user + for (const command of commands) { + tl.debug(`Running command ${command} on remote machine.`); + console.log(command); + const returnCode: string = await sshHelper.runCommandOnRemoteMachine( + command, sshClientConnection, remoteCmdOptions, password, interactiveSession); + tl.debug(`Command ${command} completed with return code = ${returnCode}`); + } + } else { + // both other runOptions: inline and script + // setup script path on remote machine relative to user's $HOME directory + let remoteScriptPath: string = `./${path.basename(scriptFile)}`; + const isWin: boolean = (os.platform() === 'win32'); + tl.debug(`remoteScriptPath = ${remoteScriptPath}`); + + //setup the scp configuration based on endpoint details + const scpConfig: sshHelper.ScpConfig = { + host: hostname, + port: port, + username: username, + }; + + if (privateKey) { + scpConfig.privateKey = privateKey; + scpConfig.passphrase = password; + } else { + scpConfig.password = password; + } + + //copy script file to remote machine + tl.debug('Copying script to remote machine.'); + await sshHelper.copyScriptToRemoteMachine(scriptFile, remoteScriptPath, scpConfig); + + //change the line encodings + let originalScriptPath: string = ''; + if (isWin) { + tl.debug('Fixing the line endings in case the file was created in Windows'); + originalScriptPath = remoteScriptPath; + remoteScriptPath = await sshHelper.clearFileFromWindowsCRLF(sshClientConnection, remoteCmdOptions, originalScriptPath); + } + + //set execute permissions on the script + tl.debug('Setting execute permission on script copied to remote machine'); + console.log(`chmod +x ${remoteScriptPath}`); + await sshHelper.runCommandOnRemoteMachine(`chmod +x ${remoteScriptPath}`, sshClientConnection, remoteCmdOptions); + + //run remote script file with args on the remote machine + let runScriptCmd = remoteScriptPath; + if (args) { + let resultArgs = args; + + const featureFlags = { + audit: tl.getBoolFeatureFlag('AZP_75787_ENABLE_NEW_LOGIC_LOG'), + activate: tl.getBoolFeatureFlag('AZP_75787_ENABLE_NEW_LOGIC'), + telemetry: tl.getBoolFeatureFlag('AZP_75787_ENABLE_COLLECT') + }; + + if (featureFlags.activate || featureFlags.audit || featureFlags.telemetry) { + const [sanitizedArgs, telemetry] = sanitizeArgs( + args, + { + argsSplitSymbols: '\\\\', + saniziteRegExp: new RegExp(`(?, options: RemoteCommandOptions, code: any, signal: any): void { + tl.debug('code = ' + code + ', signal = ' + signal); + + //based on the options decide whether to fail the build or not if data was written to STDERR + if (stdErrWritten && options.failOnStdErr) { + defer.reject(tl.loc('RemoteCmdExecutionErr')); + } else if (code && code !== 0) { + defer.reject(tl.loc('RemoteCmdNonZeroExitCode', command, code)); + } else { + //success case - code is undefined or code is 0 + defer.resolve('0'); + } +} + +/** + * Uses sftp to copy a file to remote machine + * @param {string} absolutePath - Data source for data to copy to the remote server. + * @param {string} remotePath - Path to the remote file to be created on the server. + * @param {SftpClient.ConnectOptions} sftpConfig + * @returns {Promise} + */ +export async function copyScriptToRemoteMachine(absolutePath: string, remotePath: string, sftpConfig: SftpClient.ConnectOptions): Promise { + const defer = Q.defer(); + const sftpClient = new SftpClient(); + + try { + await sftpClient.connect(sftpConfig); + await sftpClient.put(absolutePath, remotePath); + tl.debug(`Copied script file to remote machine at: ${remotePath}`); + defer.resolve(); + } catch (err) { + defer.reject(tl.loc('RemoteCopyFailed', err)); + } + + try { + sftpClient.on('error', (err) => { + tl.debug(`sftpClient: Ignoring error diconnecting: ${err}`); + }); // ignore logout errors - since there could be spontaneous ECONNRESET errors after logout; see: https://github.com/mscdex/node-imap/issues/695 + await sftpClient.end(); + } catch(err) { + tl.debug(`Failed to close SFTP client: ${err}`); + } + return defer.promise; +} + +/** + * Sets up an SSH client connection, when promise is fulfilled, returns the connection object + * @param sshConfig + * @returns {Promise} + */ +export function setupSshClientConnection(sshConfig: any): Q.Promise { + const defer = Q.defer(); + const client = new ssh2.Client(); + + client.on('ready', () => { + defer.resolve(client); + }).on('error', (err) => { + defer.reject(err); + }).on('keyboard-interactive', (name, instructions, instructionsLang, prompts, finish) => { finish([sshConfig.password]); }) + .connect(sshConfig); + return defer.promise; +} + +/** + * Runs command on remote machine and returns success or failure + * @param command + * @param sshClient + * @param options + * @returns {Promise} + */ +export function runCommandOnRemoteMachine( + command: string, + sshClient: ssh2.Client, + options: RemoteCommandOptions, + password: string = '', + interactiveSession: boolean = false +): Q.Promise { + const defer = Q.defer(); + let stdErrWritten: boolean = false; + + if (!options) { + tl.debug('Options not passed to runCommandOnRemoteMachine, setting defaults.'); + options = new RemoteCommandOptions(); + options.failOnStdErr = true; + } + + tl.debug('command = ' + command); + if (interactiveSession) { + sshClient.exec(command, { pty: true }, (err, stream) => { + if (err) { + defer.reject(tl.loc('RemoteCmdExecutionErr', err)); + } + let dataBuffer = ''; + let passwordSent = false; + stream.on('close', (code, signal) => { + handleStreamClose(command, stdErrWritten, defer, options, code, signal); + }).on('data', (data) => { + if (data) { + // "data" can be a buffer. Format it here so it outputs as a string + console.log(data.toString('utf8')); + if (!passwordSent) { + passwordSent = handlePasswordInput(data, stream, password, dataBuffer); + if (passwordSent) { + dataBuffer = ''; + } + } + } + }).stderr.on('data', (data) => { + stdErrWritten = true; + handleError(data); + }); + stream.on('exit', function (code: any, signal: any) { + console.log(`>> exited interactive session with code = ${code}, signal = ${signal}`); + stream.end(); + }); + }); + } else { + sshClient.exec(command, (err, stream) => { + if (err) { + defer.reject(tl.loc('RemoteCmdExecutionErr', err)); + } + stream.on('close', (code, signal) => { + handleStreamClose(command, stdErrWritten, defer, options, code, signal); + }).on('data', (data) => { + if (data) { + // "data" can be a buffer. Format it here so it outputs as a string + console.log(data.toString('utf8')); + } + }).stderr.on('data', (data) => { + stdErrWritten = true; + handleError(data); + }); + }); + } + return defer.promise; +} + +/** + * Interface for working with scp2 package API + * + * @interface ScpConfig + */ +export interface ScpConfig { + /** Hostname or IP address of the server. */ + host: string; + /** Port number of the server. */ + port: number; + /** Username for authentication. */ + username: string; + /** Password for password-based user authentication. */ + password?: string; + /** String that contains a private key for either key-based or hostbased user authentication (OpenSSH format). */ + privateKey?: string; + /** For an encrypted private key, this is the passphrase used to decrypt it. */ + passphrase?: string; +} + +/** + * This function generates a new file with *_unix extension on the remote host + * which contains the same file but without Windows CR LF + * @param {ssh2.Client} sshClientConnection - ssh client instance + * @param {RemoteCommandOptions} remoteCmdOptions + * @param {string} remoteInputFilePath - remote path to target file + * @throws will throw an error if command execution fails on remote host + * @return {string} - path to the generated file +*/ +export async function clearFileFromWindowsCRLF(sshClientConnection: ssh2.Client, remoteCmdOptions: RemoteCommandOptions, remoteInputFilePath: string): Promise { + const remoteOutputFilePath = `${remoteInputFilePath}._unix`; + const removeLineEndingsCmd = `tr -d \'\\015\' <${remoteInputFilePath}> ${remoteOutputFilePath}`; + + console.log(removeLineEndingsCmd); + + try { + tl.debug(`Removing Windows CR LF from ${remoteInputFilePath}`); + await runCommandOnRemoteMachine(removeLineEndingsCmd, sshClientConnection, remoteCmdOptions); + } catch (error) { + throw new Error(error); + } + + tl.debug(`Path to generated file = ${remoteOutputFilePath}`); + + return remoteOutputFilePath; +} diff --git a/_generated/SshV0_Node20/task.json b/_generated/SshV0_Node20/task.json new file mode 100644 index 000000000000..b201d4b4120e --- /dev/null +++ b/_generated/SshV0_Node20/task.json @@ -0,0 +1,179 @@ +{ + "id": "91443475-df55-4874-944b-39253b558790", + "name": "SSH", + "friendlyName": "SSH", + "description": "Run shell commands or a script on a remote machine using SSH", + "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/deploy/ssh", + "helpMarkDown": "[Learn more about this task](http://go.microsoft.com/fwlink/?LinkId=821892)", + "category": "Deploy", + "visibility": [ + "Build", + "Release" + ], + "runsOn": [ + "Agent", + "DeploymentGroup" + ], + "author": "Microsoft Corporation", + "version": { + "Major": 0, + "Minor": 229, + "Patch": 5 + }, + "demands": [], + "minimumAgentVersion": "2.144.0", + "instanceNameFormat": "Run shell $(runOptions) on remote machine", + "groups": [ + { + "name": "advanced", + "displayName": "Advanced", + "isExpanded": false + } + ], + "inputs": [ + { + "name": "sshEndpoint", + "type": "connectedService:ssh", + "label": "SSH service connection", + "defaultValue": "", + "required": true, + "helpMarkDown": "SSH service connection with connection details for the remote machine." + }, + { + "name": "runOptions", + "type": "radio", + "label": "Run", + "required": true, + "defaultValue": "commands", + "options": { + "commands": "Commands", + "script": "Script File", + "inline": "Inline Script" + }, + "helpMarkDown": "Choose to either run shell commands or a shell script on the remote machine." + }, + { + "name": "commands", + "type": "multiLine", + "label": "Commands", + "defaultValue": "", + "required": true, + "visibleRule": "runOptions = commands", + "helpMarkDown": "Specify the shell commands to run on the remote machine. Enter each command along with its arguments on a new line. To run multiple commands together, enter them on the same line separated by semi-colons (e.g. cd /home/user/myFolder;build).", + "properties": { + "resizable": "true", + "rows": "10" + } + }, + { + "name": "scriptPath", + "type": "filePath", + "label": "Shell script path", + "defaultValue": "", + "required": true, + "visibleRule": "runOptions = script", + "helpMarkDown": "Path to the shell script file to run on the remote machine." + }, + { + "name": "inline", + "type": "multiLine", + "label": "Inline Script", + "defaultValue": "", + "required": true, + "visibleRule": "runOptions = inline", + "helpMarkDown": "Write the shell script to run on the remote machine.", + "properties": { + "resizable": "true", + "rows": "10" + } + }, + { + "name": "interpreterCommand", + "type": "string", + "label": "Interpreter command", + "defaultValue": "/bin/bash", + "required": false, + "visibleRule": "runOptions = inline", + "helpMarkDown": "Path to the command interpreter used to execute the script. Adds a shebang line to the beginning of the script. Relevant only for UNIX-like operating systems. Please use empty string for Windows-based remote hosts. [See more about shebang (#!)](https://homepages.cwi.nl/~aeb/std/shebang/unix-faq.txt)" + }, + { + "name": "args", + "type": "string", + "label": "Arguments", + "defaultValue": "", + "required": false, + "visibleRule": "runOptions = script", + "helpMarkDown": "Arguments to pass to the shell script." + }, + { + "name": "failOnStdErr", + "type": "boolean", + "label": "Fail on STDERR", + "required": false, + "defaultValue": true, + "helpMarkDown": "If this option is selected, the build will fail when the remote commands or script write to STDERR.", + "groupName": "advanced" + }, + { + "name": "interactiveSession", + "type": "boolean", + "label": "Enable interactive session", + "required": false, + "defaultValue": false, + "helpMarkDown": "If this option is selected, interactive session will be started - if there's a password request, it will be filled by user's password. It could be useful to run commands like 'sudo'", + "groupName": "advanced" + }, + { + "name": "readyTimeout", + "type": "string", + "label": "SSH handshake timeout", + "defaultValue": "20000", + "required": true, + "groupName": "advanced", + "helpMarkDown": "How long (in milliseconds) to wait for the SSH handshake to complete.", + "validation": { + "expression": "isMatch(value, '(^\\d*$)','Multiline')", + "message": "Enter a valid value for timeout." + } + }, + { + "name": "interactiveKeyboardAuthentication", + "type": "boolean", + "label": "Use interactive-keyboard authentication", + "defaultValue": false, + "required": false, + "groupName": "advanced", + "helpMarkDown": "Use this value if PasswordAuthentication is disabled on the target machine" + } + ], + "execution": { + "Node10": { + "target": "ssh.js", + "argumentFormat": "" + }, + "Node16": { + "target": "ssh.js", + "argumentFormat": "" + }, + "Node20": { + "target": "ssh.js", + "argumentFormat": "" + } + }, + "messages": { + "ConnectionFailed": "Failed to connect to remote machine. Verify the SSH service connection details. Error: %s.", + "FailedToWriteScript": "Failed to write the script to disk: %s", + "RemoteCmdExecutionErr": "Command failed with errors on remote machine.", + "RemoteCmdNonZeroExitCode": "Command %s exited with code %s.", + "RemoteCopyFailed": "Failed to copy script to remote machine. Error: %s.", + "RemoteScriptFileCleanUpFailed": "Failed to delete the script file copied to the remote machine. Error = %s.", + "SettingUpSshConnection": "Trying to establish an SSH connection to %s@%s:%s", + "SshConnectionSuccessful": "Successfully connected.", + "UseDefaultPort": "Using port 22 which is the default for SSH since no port was specified.", + "ScriptArgsSanitized": "Detected characters in arguments that may not be executed correctly by the shell. Please escape special characters using backslash (\\). More information is available here: https://aka.ms/ado/75787" + }, + "_buildConfigMapping": { + "Default": "0.229.4", + "Node20-225": "0.229.5" + } +} \ No newline at end of file diff --git a/_generated/SshV0_Node20/task.loc.json b/_generated/SshV0_Node20/task.loc.json new file mode 100644 index 000000000000..196f27f981d1 --- /dev/null +++ b/_generated/SshV0_Node20/task.loc.json @@ -0,0 +1,179 @@ +{ + "id": "91443475-df55-4874-944b-39253b558790", + "name": "SSH", + "friendlyName": "ms-resource:loc.friendlyName", + "description": "ms-resource:loc.description", + "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/deploy/ssh", + "helpMarkDown": "ms-resource:loc.helpMarkDown", + "category": "Deploy", + "visibility": [ + "Build", + "Release" + ], + "runsOn": [ + "Agent", + "DeploymentGroup" + ], + "author": "Microsoft Corporation", + "version": { + "Major": 0, + "Minor": 229, + "Patch": 5 + }, + "demands": [], + "minimumAgentVersion": "2.144.0", + "instanceNameFormat": "ms-resource:loc.instanceNameFormat", + "groups": [ + { + "name": "advanced", + "displayName": "ms-resource:loc.group.displayName.advanced", + "isExpanded": false + } + ], + "inputs": [ + { + "name": "sshEndpoint", + "type": "connectedService:ssh", + "label": "ms-resource:loc.input.label.sshEndpoint", + "defaultValue": "", + "required": true, + "helpMarkDown": "ms-resource:loc.input.help.sshEndpoint" + }, + { + "name": "runOptions", + "type": "radio", + "label": "ms-resource:loc.input.label.runOptions", + "required": true, + "defaultValue": "commands", + "options": { + "commands": "Commands", + "script": "Script File", + "inline": "Inline Script" + }, + "helpMarkDown": "ms-resource:loc.input.help.runOptions" + }, + { + "name": "commands", + "type": "multiLine", + "label": "ms-resource:loc.input.label.commands", + "defaultValue": "", + "required": true, + "visibleRule": "runOptions = commands", + "helpMarkDown": "ms-resource:loc.input.help.commands", + "properties": { + "resizable": "true", + "rows": "10" + } + }, + { + "name": "scriptPath", + "type": "filePath", + "label": "ms-resource:loc.input.label.scriptPath", + "defaultValue": "", + "required": true, + "visibleRule": "runOptions = script", + "helpMarkDown": "ms-resource:loc.input.help.scriptPath" + }, + { + "name": "inline", + "type": "multiLine", + "label": "ms-resource:loc.input.label.inline", + "defaultValue": "", + "required": true, + "visibleRule": "runOptions = inline", + "helpMarkDown": "ms-resource:loc.input.help.inline", + "properties": { + "resizable": "true", + "rows": "10" + } + }, + { + "name": "interpreterCommand", + "type": "string", + "label": "ms-resource:loc.input.label.interpreterCommand", + "defaultValue": "/bin/bash", + "required": false, + "visibleRule": "runOptions = inline", + "helpMarkDown": "ms-resource:loc.input.help.interpreterCommand" + }, + { + "name": "args", + "type": "string", + "label": "ms-resource:loc.input.label.args", + "defaultValue": "", + "required": false, + "visibleRule": "runOptions = script", + "helpMarkDown": "ms-resource:loc.input.help.args" + }, + { + "name": "failOnStdErr", + "type": "boolean", + "label": "ms-resource:loc.input.label.failOnStdErr", + "required": false, + "defaultValue": true, + "helpMarkDown": "ms-resource:loc.input.help.failOnStdErr", + "groupName": "advanced" + }, + { + "name": "interactiveSession", + "type": "boolean", + "label": "ms-resource:loc.input.label.interactiveSession", + "required": false, + "defaultValue": false, + "helpMarkDown": "ms-resource:loc.input.help.interactiveSession", + "groupName": "advanced" + }, + { + "name": "readyTimeout", + "type": "string", + "label": "ms-resource:loc.input.label.readyTimeout", + "defaultValue": "20000", + "required": true, + "groupName": "advanced", + "helpMarkDown": "ms-resource:loc.input.help.readyTimeout", + "validation": { + "expression": "isMatch(value, '(^\\d*$)','Multiline')", + "message": "Enter a valid value for timeout." + } + }, + { + "name": "interactiveKeyboardAuthentication", + "type": "boolean", + "label": "ms-resource:loc.input.label.interactiveKeyboardAuthentication", + "defaultValue": false, + "required": false, + "groupName": "advanced", + "helpMarkDown": "ms-resource:loc.input.help.interactiveKeyboardAuthentication" + } + ], + "execution": { + "Node10": { + "target": "ssh.js", + "argumentFormat": "" + }, + "Node16": { + "target": "ssh.js", + "argumentFormat": "" + }, + "Node20": { + "target": "ssh.js", + "argumentFormat": "" + } + }, + "messages": { + "ConnectionFailed": "ms-resource:loc.messages.ConnectionFailed", + "FailedToWriteScript": "ms-resource:loc.messages.FailedToWriteScript", + "RemoteCmdExecutionErr": "ms-resource:loc.messages.RemoteCmdExecutionErr", + "RemoteCmdNonZeroExitCode": "ms-resource:loc.messages.RemoteCmdNonZeroExitCode", + "RemoteCopyFailed": "ms-resource:loc.messages.RemoteCopyFailed", + "RemoteScriptFileCleanUpFailed": "ms-resource:loc.messages.RemoteScriptFileCleanUpFailed", + "SettingUpSshConnection": "ms-resource:loc.messages.SettingUpSshConnection", + "SshConnectionSuccessful": "ms-resource:loc.messages.SshConnectionSuccessful", + "UseDefaultPort": "ms-resource:loc.messages.UseDefaultPort", + "ScriptArgsSanitized": "ms-resource:loc.messages.ScriptArgsSanitized" + }, + "_buildConfigMapping": { + "Default": "0.229.4", + "Node20-225": "0.229.5" + } +} \ No newline at end of file diff --git a/_generated/SshV0_Node20/tsconfig.json b/_generated/SshV0_Node20/tsconfig.json new file mode 100644 index 000000000000..dc9af9841dae --- /dev/null +++ b/_generated/SshV0_Node20/tsconfig.json @@ -0,0 +1,7 @@ +{ + "compilerOptions": { + "target": "ES6", + "module": "commonjs", + "noImplicitThis": true + } +} \ No newline at end of file diff --git a/_generated/UseNodeV1.versionmap.txt b/_generated/UseNodeV1.versionmap.txt new file mode 100644 index 000000000000..0cc6a72668be --- /dev/null +++ b/_generated/UseNodeV1.versionmap.txt @@ -0,0 +1,2 @@ +Default|1.229.3 +Node20-225|1.229.4 diff --git a/_generated/UseNodeV1/Strings/resources.resjson/de-DE/resources.resjson b/_generated/UseNodeV1/Strings/resources.resjson/de-DE/resources.resjson new file mode 100644 index 000000000000..bd94b11706b6 --- /dev/null +++ b/_generated/UseNodeV1/Strings/resources.resjson/de-DE/resources.resjson @@ -0,0 +1,17 @@ +{ + "loc.friendlyName": "Node.js-Ökosystem verwenden", + "loc.helpMarkDown": "", + "loc.description": "Hiermit wird eine Node.js-Umgebung eingerichtet und zu PATH hinzugefügt. Zusätzlich wird Proxyunterstützung bereitgestellt.", + "loc.instanceNameFormat": "Node $(versionSpec) verwenden", + "loc.input.label.version": "Version", + "loc.input.help.version": "Angabe der zu verwendenden Version. Beispiele: 10.x, 10.15.1, >=10.15.0", + "loc.input.label.checkLatest": "Auf aktuelle Version überprüfen", + "loc.input.help.checkLatest": "Sucht online immer nach der letzten verfügbaren Version, die die Versionsangabe erfüllt. Dies ist in der Regel \"false\", sofern Sie nicht über ein spezifisches Szenario verfügen, bei dem Sie immer die aktuelle Version abrufen. Dadurch entstehen Downloadkosten, die unter Umständen nicht erforderlich sind, insbesondere beim gehosteten Buildpool.", + "loc.input.label.force32bit": "32-Bit-Version für x64-Agents verwenden", + "loc.input.help.force32bit": "Installiert die x86-Version von Node unabhängig von der CPU-Architektur des Agents.", + "loc.messages.ToolFailed": "Fehler bei der Knoteninstallation: %s", + "loc.messages.TryRosetta": "Der Knoten für die Plattform \"%s\" und die Architektur \"%s\" wurde nicht gefunden. Es wird versucht, mit Rosetta2 zu installieren.", + "loc.messages.NodeVersionNotFound": "Die Knotenversion %s für die Plattform \"%s\" und die Architektur \"%s\" wurde nicht gefunden.", + "loc.messages.UnexpectedOS": "Unerwartetes Betriebssystem %s", + "loc.messages.AgentTempDirNotSet": "\"Agent.TempDirectory\" muss festgelegt werden." +} \ No newline at end of file diff --git a/_generated/UseNodeV1/Strings/resources.resjson/en-US/resources.resjson b/_generated/UseNodeV1/Strings/resources.resjson/en-US/resources.resjson new file mode 100644 index 000000000000..51e92083bc09 --- /dev/null +++ b/_generated/UseNodeV1/Strings/resources.resjson/en-US/resources.resjson @@ -0,0 +1,17 @@ +{ + "loc.friendlyName": "Use Node.js ecosystem", + "loc.helpMarkDown": "", + "loc.description": "Set up a Node.js environment and add it to the PATH, additionally providing proxy support", + "loc.instanceNameFormat": "Use Node $(versionSpec)", + "loc.input.label.version": "Version", + "loc.input.help.version": "Version Spec of the version to use. Examples: 10.x, 10.15.1, >=10.15.0", + "loc.input.label.checkLatest": "Check for Latest Version", + "loc.input.help.checkLatest": "Always checks online for the latest available version that satisfies the version spec. This is typically false unless you have a specific scenario to always get latest. This will cause it to incur download costs when potentially not necessary, especially with the hosted build pool.", + "loc.input.label.force32bit": "Use 32 bit version on x64 agents", + "loc.input.help.force32bit": "Installs the x86 version of Node regardless of the CPU architecture of the agent.", + "loc.messages.ToolFailed": "Node install failed: %s", + "loc.messages.TryRosetta": "Unable to find Node for platform %s and architecture %s. Trying to install with Rosetta2", + "loc.messages.NodeVersionNotFound": "Unable to find Node version %s for platform %s and architecture %s.", + "loc.messages.UnexpectedOS": "Unexpected OS %s", + "loc.messages.AgentTempDirNotSet": "Expected Agent.TempDirectory to be set." +} \ No newline at end of file diff --git a/_generated/UseNodeV1/Strings/resources.resjson/es-ES/resources.resjson b/_generated/UseNodeV1/Strings/resources.resjson/es-ES/resources.resjson new file mode 100644 index 000000000000..92af13768db7 --- /dev/null +++ b/_generated/UseNodeV1/Strings/resources.resjson/es-ES/resources.resjson @@ -0,0 +1,17 @@ +{ + "loc.friendlyName": "Usar el ecosistema de Node.js", + "loc.helpMarkDown": "", + "loc.description": "Configura un entorno de Node.js y lo agrega a PATH, además de proporcionar compatibilidad con el proxy.", + "loc.instanceNameFormat": "Usar Node $(versionSpec)", + "loc.input.label.version": "Versión", + "loc.input.help.version": "Especificación de la versión que se va a usar. Ejemplos: 10.x, 10.15.1 >=10.15.0", + "loc.input.label.checkLatest": "Comprobar la última versión", + "loc.input.help.checkLatest": "Comprueba siempre en línea la última versión disponible que cumple la especificación de versión. Este valor suele ser false a menos que tenga un escenario específico que deba obtener siempre la última versión. Esto dará lugar a costos de descarga, cuando puede que no sea necesario, especialmente con el grupo de compilación hospedado.", + "loc.input.label.force32bit": "Usar la versión de 32 bits en agentes x64", + "loc.input.help.force32bit": "Instala la versión x86 de Node, independientemente de la arquitectura de CPU del agente.", + "loc.messages.ToolFailed": "No se pudo instalar el nodo: %s", + "loc.messages.TryRosetta": "No se encuentra ningún node para la plataforma %s ni la arquitectura %s. Intentando instalar con Rosetta2", + "loc.messages.NodeVersionNotFound": "No se encuentra el %s de versión del nodo para la plataforma %s y la arquitectura %s.", + "loc.messages.UnexpectedOS": "Sistema operativo %s inesperado", + "loc.messages.AgentTempDirNotSet": "Se esperaba que Agent.TempDirectory estuviera establecido." +} \ No newline at end of file diff --git a/_generated/UseNodeV1/Strings/resources.resjson/fr-FR/resources.resjson b/_generated/UseNodeV1/Strings/resources.resjson/fr-FR/resources.resjson new file mode 100644 index 000000000000..15c610af35a0 --- /dev/null +++ b/_generated/UseNodeV1/Strings/resources.resjson/fr-FR/resources.resjson @@ -0,0 +1,17 @@ +{ + "loc.friendlyName": "Utiliser l'écosystème Node.js", + "loc.helpMarkDown": "", + "loc.description": "Configurer un environnement Node.js et l'ajouter à PATH, en fournissant en plus la prise en charge du proxy", + "loc.instanceNameFormat": "Utiliser Node $(versionSpec)", + "loc.input.label.version": "Version", + "loc.input.help.version": "Spécification de version de la version à utiliser. Exemples : 10.x, 10.15.1, >=10.15.0", + "loc.input.label.checkLatest": "Rechercher la dernière version", + "loc.input.help.checkLatest": "Recherche toujours en ligne la dernière version disponible répondant à la spécification de version. Cela n'est généralement pas le cas, sauf si vous disposez d'un scénario spécifique visant à obtenir toujours la dernière version. Cela peut entraîner des coûts de téléchargement inutiles, en particulier avec le pool de builds hébergé.", + "loc.input.label.force32bit": "Utiliser la version 32 bits sur les agents x64", + "loc.input.help.force32bit": "Installe la version x86 de Node quelle que soit l'architecture du processeur de l'agent.", + "loc.messages.ToolFailed": "Échec de l'installation de Node : %s", + "loc.messages.TryRosetta": "Nœud introuvable pour la %s de plateforme et l'%s d’architecture. Tentative d’installation avec Rosetta2", + "loc.messages.NodeVersionNotFound": "Impossible de trouver le %s de version du nœud pour la %s d’architecture et de %s de plateforme.", + "loc.messages.UnexpectedOS": "Système d’exploitation inattendu %s", + "loc.messages.AgentTempDirNotSet": "Agent.TempDirectory est censé être défini." +} \ No newline at end of file diff --git a/_generated/UseNodeV1/Strings/resources.resjson/it-IT/resources.resjson b/_generated/UseNodeV1/Strings/resources.resjson/it-IT/resources.resjson new file mode 100644 index 000000000000..824926357605 --- /dev/null +++ b/_generated/UseNodeV1/Strings/resources.resjson/it-IT/resources.resjson @@ -0,0 +1,17 @@ +{ + "loc.friendlyName": "Usa ecosistema di Node.js", + "loc.helpMarkDown": "", + "loc.description": "Consente di configurare un ambiente Node.js e di aggiungerlo a PATH, fornendo inoltre il supporto per proxy", + "loc.instanceNameFormat": "Usa Node $(versionSpec)", + "loc.input.label.version": "Versione", + "loc.input.help.version": "Identificatore della versione da usare. Esempi: 10.x, 10.15.1, >=10.15.0", + "loc.input.label.checkLatest": "Controlla disponibilità di versioni più recenti", + "loc.input.help.checkLatest": "Verifica sempre online se è disponibile una versione più recente che soddisfi l'identificatore di versione. Il valore di questa opzione è in genere false a meno che non sia stato predisposto uno scenario specifico per scaricare sempre la versione più recente. Questa opzione può comportare costi di download potenzialmente non necessari, in particolare con il pool di compilazione ospitato.", + "loc.input.label.force32bit": "Usa la versione a 32 bit in agenti x64", + "loc.input.help.force32bit": "Installa la versione x86 di Node indipendentemente dall'architettura della CPU dell'agente.", + "loc.messages.ToolFailed": "L'installazione di Node non è riuscita: %s", + "loc.messages.TryRosetta": "Non è possibile trovare il nodo per la piattaforma %s e l'architettura %s. Tentativo di installazione con Rosetta2", + "loc.messages.NodeVersionNotFound": "Non è possibile trovare la versione %s del nodo per la piattaforma %s e l'architettura %s.", + "loc.messages.UnexpectedOS": "Sistema operativo imprevisto %s", + "loc.messages.AgentTempDirNotSet": "Elemento Agent.TempDirectory previsto da impostare." +} \ No newline at end of file diff --git a/_generated/UseNodeV1/Strings/resources.resjson/ja-JP/resources.resjson b/_generated/UseNodeV1/Strings/resources.resjson/ja-JP/resources.resjson new file mode 100644 index 000000000000..7f23bedb8603 --- /dev/null +++ b/_generated/UseNodeV1/Strings/resources.resjson/ja-JP/resources.resjson @@ -0,0 +1,17 @@ +{ + "loc.friendlyName": "Node.js エコシステムを使用", + "loc.helpMarkDown": "", + "loc.description": "Node.js 環境をセットアップしてパスに追加し、追加でプロキシ サポートを提供します", + "loc.instanceNameFormat": "Node $(versionSpec) の使用", + "loc.input.label.version": "バージョン", + "loc.input.help.version": "使用するバージョンのバージョンの仕様。例: 10.x、10.15.1、>=10.15.0", + "loc.input.label.checkLatest": "最新バージョンのチェック", + "loc.input.help.checkLatest": "バージョン仕様を満たす利用可能な最新バージョンを常にオンラインで確認します。これは false にするのが一般的ですが、常に最新版を取得する特定のシナリオの場合は例外です。これにより、実際には必要でない場合にもダウンロードのコストが発生することになります (ホストされたビルド プールの場合は特にそう言えます)。", + "loc.input.label.force32bit": "x64 エージェントで 32 ビット バージョンを使用する", + "loc.input.help.force32bit": "エージェントの CPU アーキテクチャに関係なく、Node の x86 バージョンをインストールします。", + "loc.messages.ToolFailed": "ノードをインストールできませんでした: %s", + "loc.messages.TryRosetta": "プラットフォーム %s およびアーキテクチャ %s のノードが見つかりません。Rosetta2 でインストールしようとしています", + "loc.messages.NodeVersionNotFound": "プラットフォーム %s とアーキテクチャ %s のノード バージョン %s が見つかりません。", + "loc.messages.UnexpectedOS": "予期しない OS %s", + "loc.messages.AgentTempDirNotSet": "Agent.TempDirectory を設定する必要があります。" +} \ No newline at end of file diff --git a/_generated/UseNodeV1/Strings/resources.resjson/ko-KR/resources.resjson b/_generated/UseNodeV1/Strings/resources.resjson/ko-KR/resources.resjson new file mode 100644 index 000000000000..006e1297a8c0 --- /dev/null +++ b/_generated/UseNodeV1/Strings/resources.resjson/ko-KR/resources.resjson @@ -0,0 +1,17 @@ +{ + "loc.friendlyName": "Node.js 에코시스템 사용", + "loc.helpMarkDown": "", + "loc.description": "Node.js 환경을 설정하고 PATH에 추가하며, 프록시 지원도 제공합니다.", + "loc.instanceNameFormat": "노드 $(versionSpec) 사용", + "loc.input.label.version": "버전", + "loc.input.help.version": "사용할 버전의 버전 사양입니다. 예: 10.x, 10.15.1, >=10.15.0", + "loc.input.label.checkLatest": "최신 버전 확인", + "loc.input.help.checkLatest": "버전 사양을 충족하는 최신 사용 가능 버전인지 항상 온라인으로 검사합니다. 항상 최신 버전을 다운로드하는 특정 시나리오가 아닌 한 일반적으로 false로 지정됩니다. 이로 인해 잠재적으로 필요하지 않은 경우, 특히 호스팅된 빌드 풀에서는 다운로드 비용이 발생할 수 있습니다.", + "loc.input.label.force32bit": "x64 에이전트에서 32비트 버전 사용", + "loc.input.help.force32bit": "에이전트의 CPU 아키텍처와 관계없이 x86 버전의 Node를 설치합니다.", + "loc.messages.ToolFailed": "노드 설치 실패: %s", + "loc.messages.TryRosetta": "플랫폼 %s 및 아키텍처 %s에 대한 노드를 찾을 수 없습니다. Rosetta2로 설치하는 중", + "loc.messages.NodeVersionNotFound": "플랫폼 %s 및 아키텍처 %s에 대한 노드 버전 %s을(를) 찾을 수 없습니다.", + "loc.messages.UnexpectedOS": "예기치 않은 OS %s", + "loc.messages.AgentTempDirNotSet": "Agent.TempDirectory가 설정될 것으로 예상됩니다." +} \ No newline at end of file diff --git a/_generated/UseNodeV1/Strings/resources.resjson/ru-RU/resources.resjson b/_generated/UseNodeV1/Strings/resources.resjson/ru-RU/resources.resjson new file mode 100644 index 000000000000..1cb37221ec52 --- /dev/null +++ b/_generated/UseNodeV1/Strings/resources.resjson/ru-RU/resources.resjson @@ -0,0 +1,17 @@ +{ + "loc.friendlyName": "Использовать экосистему Node.js", + "loc.helpMarkDown": "", + "loc.description": "Настройте среду Node.js и добавьте ее в PATH, дополнительно предоставив поддержку прокси", + "loc.instanceNameFormat": "Использовать Node $(versionSpec)", + "loc.input.label.version": "Версия", + "loc.input.help.version": "Спецификация версии для используемой версии. Примеры: 10.x, 10.15.1, >=10.15.0", + "loc.input.label.checkLatest": "Проверить наличие последней версии", + "loc.input.help.checkLatest": "Всегда проверяет наличие в Интернете актуальной версии, соответствующей спецификатору версии. Обычно задано значение \"false\", кроме случаев, когда имеется определенный сценарий всегда получать актуальную версию. Когда практическая необходимость в этом отсутствует, особенно в случае размещенного пула сборок, может взиматься дополнительная плата за загрузку.", + "loc.input.label.force32bit": "Использовать 32-разрядную версию на 64-разрядных агентах", + "loc.input.help.force32bit": "Устанавливает 32-разрядную версию Node независимо от архитектуры ЦП агента.", + "loc.messages.ToolFailed": "Сбой установки Node: %s", + "loc.messages.TryRosetta": "Не удалось найти Node для платформы %s и архитектуры %s. Попытка установки с помощью Rosetta2", + "loc.messages.NodeVersionNotFound": "Не удалось найти версию Node %s для платформы %s и архитектуры %s.", + "loc.messages.UnexpectedOS": "Непредвиденная ОС %s", + "loc.messages.AgentTempDirNotSet": "Переменная Agent.TempDirectory должна быть задана." +} \ No newline at end of file diff --git a/_generated/UseNodeV1/Strings/resources.resjson/zh-CN/resources.resjson b/_generated/UseNodeV1/Strings/resources.resjson/zh-CN/resources.resjson new file mode 100644 index 000000000000..166261c125c1 --- /dev/null +++ b/_generated/UseNodeV1/Strings/resources.resjson/zh-CN/resources.resjson @@ -0,0 +1,17 @@ +{ + "loc.friendlyName": "使用 Node.js 生态系统", + "loc.helpMarkDown": "", + "loc.description": "设置 Node.js 环境并将其添加到 PATH,另外还需提供代理支持", + "loc.instanceNameFormat": "使用节点 $(versionSpec)", + "loc.input.label.version": "版本", + "loc.input.help.version": "要使用的版本的版本规范。示例: 10.x、10.15.1、>=10.15.0", + "loc.input.label.checkLatest": "检查是否有最新版本", + "loc.input.help.checkLatest": "始终联机检查是否有满足版本规范的最新可用版本。这通常无法实现,除非有特定的解决方案可以始终获取最新版本。这样会在可能没有必要的情况下,特别是在使用托管生成池时产生下载费用。", + "loc.input.label.force32bit": "在 x64 代理上使用 32 位版本", + "loc.input.help.force32bit": "安装 x86 版本的 Node,不考虑代理的 CPU 体系结构。", + "loc.messages.ToolFailed": "节点安装失败: %s", + "loc.messages.TryRosetta": "找不到平台 %s 和体系结构 %s 的节点。尝试使用 Rosetta2 进行安装", + "loc.messages.NodeVersionNotFound": "找不到平台 %s 和体系结构 %s 的节点版本 %s。", + "loc.messages.UnexpectedOS": "意外的 OS %s", + "loc.messages.AgentTempDirNotSet": "应设置 Agent.TempDirectory。" +} \ No newline at end of file diff --git a/_generated/UseNodeV1/Strings/resources.resjson/zh-TW/resources.resjson b/_generated/UseNodeV1/Strings/resources.resjson/zh-TW/resources.resjson new file mode 100644 index 000000000000..44a92fb5ffd8 --- /dev/null +++ b/_generated/UseNodeV1/Strings/resources.resjson/zh-TW/resources.resjson @@ -0,0 +1,17 @@ +{ + "loc.friendlyName": "使用 Node.js 生態系統", + "loc.helpMarkDown": "", + "loc.description": "設定 Node.js 環境,並將它新增到 PATH,另提供 Proxy 支援", + "loc.instanceNameFormat": "使用 Node $(versionSpec)", + "loc.input.label.version": "版本", + "loc.input.help.version": "所要使用版本的版本規格。例如: 10.x、10.15.1、>= 10.15.0", + "loc.input.label.checkLatest": "檢查最新版本", + "loc.input.help.checkLatest": "一律檢查網路上有無最新的版本符合版本規格。除非特定的情況必須取得最新版本,否則不建議執行此動作。若非必要,這可能會衍生下載費用,特別是對託管的組建集區。", + "loc.input.label.force32bit": "在 x64 代理程式上使用 32 位元版本", + "loc.input.help.force32bit": "無論代理程式的 CPU 結構為何,皆安裝 x86 版的節點。", + "loc.messages.ToolFailed": "Node 安裝失敗: %s", + "loc.messages.TryRosetta": "找不到適用於平台 %s 與架構 %s 的 Node。正在嘗試使用 Rosetta2 安裝", + "loc.messages.NodeVersionNotFound": "找不到適用於平台 %s 與架構 %s 的 Node 版本 %s。", + "loc.messages.UnexpectedOS": "未預期的作業系統 %s", + "loc.messages.AgentTempDirNotSet": "應設定 Agent.TempDirectorty。" +} \ No newline at end of file diff --git a/_generated/UseNodeV1/Tests/L0.ts b/_generated/UseNodeV1/Tests/L0.ts new file mode 100644 index 000000000000..d62697653c72 --- /dev/null +++ b/_generated/UseNodeV1/Tests/L0.ts @@ -0,0 +1,102 @@ +import assert = require('assert'); +import os = require('os'); +import path = require('path'); +import * as ttm from 'azure-pipelines-task-lib/mock-test'; + +function runValidations(validator: () => void, tr, done) { + try { + validator(); + done(); + } + catch (error) { + console.log("STDERR", tr.stderr); + console.log("STDOUT", tr.stdout); + done(error); + } +} + +describe('NodeTool Suite', function () { + this.timeout(60000); + + it('Succeeds when the first download is available', (done: MochaDone) => { + this.timeout(5000); + + let tp: string = path.join(__dirname, 'L0FirstDownloadSuccess.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + runValidations(() => { + assert(tr.succeeded, 'NodeTool should have succeeded.'); + assert(tr.stderr.length === 0, 'NodeTool should not have written to stderr'); + }, tr, done); + }); + + it('Succeeds when the second download is available', (done: MochaDone) => { + this.timeout(5000); + + let tp: string = path.join(__dirname, 'L0SecondDownloadSuccess.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + runValidations(() => { + if (os.platform() === 'win32') { + assert(tr.succeeded, 'NodeTool should have succeeded.'); + assert(tr.stderr.length === 0, 'NodeTool should not have written to stderr'); + } else { + assert(tr.failed, 'NodeTool should have failed after the first download failure for non-Windows platforms.'); + } + }, tr, done); + }); + + it('Succeeds when the third download is available', (done: MochaDone) => { + this.timeout(5000); + + let tp: string = path.join(__dirname, 'L0ThirdDownloadSuccess.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + runValidations(() => { + if (os.platform() === 'win32') { + assert(tr.succeeded, 'NodeTool should have succeeded.'); + assert(tr.stderr.length === 0, 'NodeTool should not have written to stderr'); + } else { + assert(tr.failed, 'NodeTool should have failed after the first download failure for non-Windows platforms.'); + } + }, tr, done); + }); + + it('Sets proxy correctly', (done: MochaDone) => { + this.timeout(5000); + + process.env["__proxy__"] = "true"; + let tp: string = path.join(__dirname, 'L0FirstDownloadSuccess.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + delete process.env["__proxy__"]; + + runValidations(() => { + assert(tr.succeeded, 'NodeTool should have succeeded.'); + assert(tr.stderr.length === 0, 'NodeTool should not have written to stderr'); + assert(tr.stdout.indexOf('Setting secret password') > -1, "Password should be set"); + assert(tr.stdout.indexOf('Setting HTTP_PROXY to http://username:password@url.com/') > -1, "Proxy should be set"); + }, tr, done); + }); + + it('Removes "v" prefixes when evaluating latest version', (done: MochaDone) => { + this.timeout(5000); + + let tp: string = path.join(__dirname, 'L0GetsLatestVersion.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + runValidations(() => { + assert(tr.succeeded, 'NodeTool should have succeeded.'); + assert(tr.stderr.length === 0, 'NodeTool should not have written to stderr'); + }, tr, done); + }); +}); \ No newline at end of file diff --git a/_generated/UseNodeV1/Tests/L0FakeIndex.json b/_generated/UseNodeV1/Tests/L0FakeIndex.json new file mode 100644 index 000000000000..8926d0d1a1c4 --- /dev/null +++ b/_generated/UseNodeV1/Tests/L0FakeIndex.json @@ -0,0 +1,13254 @@ +[ + { + "version": "v13.8.0", + "date": "2020-02-05", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.13.6", + "v8": "7.9.317.25", + "uv": "1.34.1", + "zlib": "1.2.11", + "openssl": "1.1.1d", + "modules": "79", + "lts": false, + "security": true + }, + { + "version": "v13.7.0", + "date": "2020-01-21", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.13.6", + "v8": "7.9.317.25", + "uv": "1.34.1", + "zlib": "1.2.11", + "openssl": "1.1.1d", + "modules": "79", + "lts": false, + "security": false + }, + { + "version": "v13.6.0", + "date": "2020-01-07", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.13.4", + "v8": "7.9.317.25", + "uv": "1.34.0", + "zlib": "1.2.11", + "openssl": "1.1.1d", + "modules": "79", + "lts": false, + "security": false + }, + { + "version": "v13.5.0", + "date": "2019-12-18", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.13.4", + "v8": "7.9.317.25", + "uv": "1.34.0", + "zlib": "1.2.11", + "openssl": "1.1.1d", + "modules": "79", + "lts": false, + "security": false + }, + { + "version": "v13.4.0", + "date": "2019-12-17", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.13.4", + "v8": "7.9.317.25", + "uv": "1.34.0", + "zlib": "1.2.11", + "openssl": "1.1.1d", + "modules": "79", + "lts": false, + "security": true + }, + { + "version": "v13.3.0", + "date": "2019-12-03", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.13.1", + "v8": "7.9.317.25", + "uv": "1.33.1", + "zlib": "1.2.11", + "openssl": "1.1.1d", + "modules": "79", + "lts": false, + "security": false + }, + { + "version": "v13.2.0", + "date": "2019-11-21", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.13.1", + "v8": "7.9.317.23", + "uv": "1.33.1", + "zlib": "1.2.11", + "openssl": "1.1.1d", + "modules": "79", + "lts": false, + "security": false + }, + { + "version": "v13.1.0", + "date": "2019-11-05", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.12.1", + "v8": "7.8.279.17", + "uv": "1.33.1", + "zlib": "1.2.11", + "openssl": "1.1.1d", + "modules": "79", + "lts": false, + "security": false + }, + { + "version": "v13.0.1", + "date": "2019-10-23", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.12.0", + "v8": "7.8.279.17", + "uv": "1.33.1", + "zlib": "1.2.11", + "openssl": "1.1.1d", + "modules": "79", + "lts": false, + "security": false + }, + { + "version": "v13.0.0", + "date": "2019-10-10", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.12.0", + "v8": "7.8.279.17", + "uv": "1.32.0", + "zlib": "1.2.11", + "openssl": "1.1.1d", + "modules": "79", + "lts": false, + "security": false + }, + { + "version": "v12.16.0", + "date": "2020-02-11", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.13.4", + "v8": "7.8.279.23", + "uv": "1.34.0", + "zlib": "1.2.11", + "openssl": "1.1.1d", + "modules": "72", + "lts": "Erbium", + "security": false + }, + { + "version": "v12.15.0", + "date": "2020-02-05", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.13.4", + "v8": "7.7.299.13", + "uv": "1.33.1", + "zlib": "1.2.11", + "openssl": "1.1.1d", + "modules": "72", + "lts": "Erbium", + "security": true + }, + { + "version": "v12.14.1", + "date": "2020-01-07", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.13.4", + "v8": "7.7.299.13", + "uv": "1.33.1", + "zlib": "1.2.11", + "openssl": "1.1.1d", + "modules": "72", + "lts": "Erbium", + "security": false + }, + { + "version": "v12.14.0", + "date": "2019-12-16", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.13.4", + "v8": "7.7.299.13", + "uv": "1.33.1", + "zlib": "1.2.11", + "openssl": "1.1.1d", + "modules": "72", + "lts": "Erbium", + "security": true + }, + { + "version": "v12.13.1", + "date": "2019-11-19", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.12.1", + "v8": "7.7.299.13", + "uv": "1.33.1", + "zlib": "1.2.11", + "openssl": "1.1.1d", + "modules": "72", + "lts": "Erbium", + "security": false + }, + { + "version": "v12.13.0", + "date": "2019-10-21", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.12.0", + "v8": "7.7.299.13", + "uv": "1.32.0", + "zlib": "1.2.11", + "openssl": "1.1.1d", + "modules": "72", + "lts": "Erbium", + "security": false + }, + { + "version": "v12.12.0", + "date": "2019-10-11", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.11.3", + "v8": "7.7.299.13", + "uv": "1.32.0", + "zlib": "1.2.11", + "openssl": "1.1.1d", + "modules": "72", + "lts": false, + "security": false + }, + { + "version": "v12.11.1", + "date": "2019-10-01", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.11.3", + "v8": "7.7.299.11", + "uv": "1.32.0", + "zlib": "1.2.11", + "openssl": "1.1.1c", + "modules": "72", + "lts": false, + "security": false + }, + { + "version": "v12.11.0", + "date": "2019-09-25", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.11.3", + "v8": "7.7.299.11", + "uv": "1.32.0", + "zlib": "1.2.11", + "openssl": "1.1.1c", + "modules": "72", + "lts": false, + "security": false + }, + { + "version": "v12.10.0", + "date": "2019-09-04", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.10.3", + "v8": "7.6.303.29", + "uv": "1.31.0", + "zlib": "1.2.11", + "openssl": "1.1.1c", + "modules": "72", + "lts": false, + "security": false + }, + { + "version": "v12.9.1", + "date": "2019-08-26", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.10.2", + "v8": "7.6.303.29", + "uv": "1.31.0", + "zlib": "1.2.11", + "openssl": "1.1.1c", + "modules": "72", + "lts": false, + "security": false + }, + { + "version": "v12.9.0", + "date": "2019-08-20", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.10.2", + "v8": "7.6.303.29", + "uv": "1.31.0", + "zlib": "1.2.11", + "openssl": "1.1.1c", + "modules": "72", + "lts": false, + "security": false + }, + { + "version": "v12.8.1", + "date": "2019-08-15", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.10.2", + "v8": "7.5.288.22", + "uv": "1.30.1", + "zlib": "1.2.11", + "openssl": "1.1.1c", + "modules": "72", + "lts": false, + "security": true + }, + { + "version": "v12.8.0", + "date": "2019-08-06", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.10.2", + "v8": "7.5.288.22", + "uv": "1.30.1", + "zlib": "1.2.11", + "openssl": "1.1.1c", + "modules": "72", + "lts": false, + "security": false + }, + { + "version": "v12.7.0", + "date": "2019-07-23", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.10.0", + "v8": "7.5.288.22", + "uv": "1.30.1", + "zlib": "1.2.11", + "openssl": "1.1.1c", + "modules": "72", + "lts": false, + "security": false + }, + { + "version": "v12.6.0", + "date": "2019-07-03", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.9.0", + "v8": "7.5.288.22", + "uv": "1.30.1", + "zlib": "1.2.11", + "openssl": "1.1.1c", + "modules": "72", + "lts": false, + "security": false + }, + { + "version": "v12.5.0", + "date": "2019-06-26", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.9.0", + "v8": "7.5.288.22", + "uv": "1.29.1", + "zlib": "1.2.11", + "openssl": "1.1.1c", + "modules": "72", + "lts": false, + "security": false + }, + { + "version": "v12.4.0", + "date": "2019-06-04", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.9.0", + "v8": "7.4.288.27", + "uv": "1.29.1", + "zlib": "1.2.11", + "openssl": "1.1.1b", + "modules": "72", + "lts": false, + "security": false + }, + { + "version": "v12.3.1", + "date": "2019-05-22", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.9.0", + "v8": "7.4.288.27", + "uv": "1.29.1", + "zlib": "1.2.11", + "openssl": "1.1.1b", + "modules": "72", + "lts": false, + "security": false + }, + { + "version": "v12.3.0", + "date": "2019-05-21", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.9.0", + "v8": "7.4.288.27", + "uv": "1.28.0", + "zlib": "1.2.11", + "openssl": "1.1.1b", + "modules": "72", + "lts": false, + "security": false + }, + { + "version": "v12.2.0", + "date": "2019-05-07", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.9.0", + "v8": "7.4.288.21", + "uv": "1.28.0", + "zlib": "1.2.11", + "openssl": "1.1.1b", + "modules": "72", + "lts": false, + "security": false + }, + { + "version": "v12.1.0", + "date": "2019-04-29", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.9.0", + "v8": "7.4.288.21", + "uv": "1.28.0", + "zlib": "1.2.11", + "openssl": "1.1.1b", + "modules": "72", + "lts": false, + "security": false + }, + { + "version": "v12.0.0", + "date": "2019-04-23", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.9.0", + "v8": "7.4.288.21", + "uv": "1.28.0", + "zlib": "1.2.11", + "openssl": "1.1.1b", + "modules": "72", + "lts": false, + "security": false + }, + { + "version": "v11.15.0", + "date": "2019-04-30", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.7.0", + "v8": "7.0.276.38", + "uv": "1.27.0", + "zlib": "1.2.11", + "openssl": "1.1.1b", + "modules": "67", + "lts": false, + "security": false + }, + { + "version": "v11.14.0", + "date": "2019-04-10", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.7.0", + "v8": "7.0.276.38", + "uv": "1.27.0", + "zlib": "1.2.11", + "openssl": "1.1.1b", + "modules": "67", + "lts": false, + "security": false + }, + { + "version": "v11.13.0", + "date": "2019-03-28", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.7.0", + "v8": "7.0.276.38", + "uv": "1.27.0", + "zlib": "1.2.11", + "openssl": "1.1.1b", + "modules": "67", + "lts": false, + "security": false + }, + { + "version": "v11.12.0", + "date": "2019-03-14", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.7.0", + "v8": "7.0.276.38", + "uv": "1.26.0", + "zlib": "1.2.11", + "openssl": "1.1.1b", + "modules": "67", + "lts": false, + "security": false + }, + { + "version": "v11.11.0", + "date": "2019-03-05", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.7.0", + "v8": "7.0.276.38", + "uv": "1.26.0", + "zlib": "1.2.11", + "openssl": "1.1.1a", + "modules": "67", + "lts": false, + "security": false + }, + { + "version": "v11.10.1", + "date": "2019-02-28", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.7.0", + "v8": "7.0.276.38", + "uv": "1.26.0", + "zlib": "1.2.11", + "openssl": "1.1.1a", + "modules": "67", + "lts": false, + "security": true + }, + { + "version": "v11.10.0", + "date": "2019-02-14", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.7.0", + "v8": "7.0.276.38", + "uv": "1.26.0", + "zlib": "1.2.11", + "openssl": "1.1.1a", + "modules": "67", + "lts": false, + "security": false + }, + { + "version": "v11.9.0", + "date": "2019-01-30", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.5.0", + "v8": "7.0.276.38", + "uv": "1.25.0", + "zlib": "1.2.11", + "openssl": "1.1.1a", + "modules": "67", + "lts": false, + "security": false + }, + { + "version": "v11.8.0", + "date": "2019-01-24", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.5.0", + "v8": "7.0.276.38", + "uv": "1.25.0", + "zlib": "1.2.11", + "openssl": "1.1.0j", + "modules": "67", + "lts": false, + "security": false + }, + { + "version": "v11.7.0", + "date": "2019-01-17", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.5.0", + "v8": "7.0.276.38", + "uv": "1.24.1", + "zlib": "1.2.11", + "openssl": "1.1.0j", + "modules": "67", + "lts": false, + "security": false + }, + { + "version": "v11.6.0", + "date": "2018-12-26", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.5.0-next.0", + "v8": "7.0.276.38", + "uv": "1.24.1", + "zlib": "1.2.11", + "openssl": "1.1.0j", + "modules": "67", + "lts": false, + "security": false + }, + { + "version": "v11.5.0", + "date": "2018-12-18", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.4.1", + "v8": "7.0.276.38", + "uv": "1.24.0", + "zlib": "1.2.11", + "openssl": "1.1.0j", + "modules": "67", + "lts": false, + "security": false + }, + { + "version": "v11.4.0", + "date": "2018-12-07", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.4.1", + "v8": "7.0.276.38", + "uv": "1.24.0", + "zlib": "1.2.11", + "openssl": "1.1.0j", + "modules": "67", + "lts": false, + "security": false + }, + { + "version": "v11.3.0", + "date": "2018-11-27", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.4.1", + "v8": "7.0.276.38", + "uv": "1.23.2", + "zlib": "1.2.11", + "openssl": "1.1.0j", + "modules": "67", + "lts": false, + "security": true + }, + { + "version": "v11.2.0", + "date": "2018-11-15", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.4.1", + "v8": "7.0.276.38", + "uv": "1.23.2", + "zlib": "1.2.11", + "openssl": "1.1.0i", + "modules": "67", + "lts": false, + "security": false + }, + { + "version": "v11.1.0", + "date": "2018-10-30", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.4.1", + "v8": "7.0.276.32", + "uv": "1.23.2", + "zlib": "1.2.11", + "openssl": "1.1.0i", + "modules": "67", + "lts": false, + "security": false + }, + { + "version": "v11.0.0", + "date": "2018-10-23", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.4.1", + "v8": "7.0.276.28", + "uv": "1.23.2", + "zlib": "1.2.11", + "openssl": "1.1.0i", + "modules": "67", + "lts": false, + "security": false + }, + { + "version": "v10.19.0", + "date": "2020-02-05", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.13.4", + "v8": "6.8.275.32", + "uv": "1.28.0", + "zlib": "1.2.11", + "openssl": "1.1.1d", + "modules": "64", + "lts": "Dubnium", + "security": true + }, + { + "version": "v10.18.1", + "date": "2020-01-07", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.13.4", + "v8": "6.8.275.32", + "uv": "1.28.0", + "zlib": "1.2.11", + "openssl": "1.1.1d", + "modules": "64", + "lts": "Dubnium", + "security": false + }, + { + "version": "v10.18.0", + "date": "2019-12-16", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.13.4", + "v8": "6.8.275.32", + "uv": "1.28.0", + "zlib": "1.2.11", + "openssl": "1.1.1d", + "modules": "64", + "lts": "Dubnium", + "security": true + }, + { + "version": "v10.17.0", + "date": "2019-10-21", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.11.3", + "v8": "6.8.275.32", + "uv": "1.28.0", + "zlib": "1.2.11", + "openssl": "1.1.1d", + "modules": "64", + "lts": "Dubnium", + "security": false + }, + { + "version": "v10.16.3", + "date": "2019-08-15", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.9.0", + "v8": "6.8.275.32", + "uv": "1.28.0", + "zlib": "1.2.11", + "openssl": "1.1.1c", + "modules": "64", + "lts": "Dubnium", + "security": true + }, + { + "version": "v10.16.2", + "date": "2019-08-06", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.9.0", + "v8": "6.8.275.32", + "uv": "1.28.0", + "zlib": "1.2.11", + "openssl": "1.1.1c", + "modules": "64", + "lts": "Dubnium", + "security": false + }, + { + "version": "v10.16.1", + "date": "2019-07-31", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.9.0", + "v8": "6.8.275.32", + "uv": "1.28.0", + "zlib": "1.2.11", + "openssl": "1.1.1c", + "modules": "64", + "lts": "Dubnium", + "security": false + }, + { + "version": "v10.16.0", + "date": "2019-05-28", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.9.0", + "v8": "6.8.275.32", + "uv": "1.28.0", + "zlib": "1.2.11", + "openssl": "1.1.1b", + "modules": "64", + "lts": "Dubnium", + "security": false + }, + { + "version": "v10.15.3", + "date": "2019-03-05", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.4.1", + "v8": "6.8.275.32", + "uv": "1.23.2", + "zlib": "1.2.11", + "openssl": "1.1.0j", + "modules": "64", + "lts": "Dubnium", + "security": false + }, + { + "version": "v10.15.2", + "date": "2019-02-28", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.4.1", + "v8": "6.8.275.32", + "uv": "1.23.2", + "zlib": "1.2.11", + "openssl": "1.1.0j", + "modules": "64", + "lts": "Dubnium", + "security": true + }, + { + "version": "v10.15.1", + "date": "2019-01-29", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.4.1", + "v8": "6.8.275.32", + "uv": "1.23.2", + "zlib": "1.2.11", + "openssl": "1.1.0j", + "modules": "64", + "lts": "Dubnium", + "security": false + }, + { + "version": "v10.15.0", + "date": "2018-12-26", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.4.1", + "v8": "6.8.275.32", + "uv": "1.23.2", + "zlib": "1.2.11", + "openssl": "1.1.0j", + "modules": "64", + "lts": "Dubnium", + "security": false + }, + { + "version": "v10.14.2", + "date": "2018-12-10", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.4.1", + "v8": "6.8.275.32", + "uv": "1.23.2", + "zlib": "1.2.11", + "openssl": "1.1.0j", + "modules": "64", + "lts": "Dubnium", + "security": false + }, + { + "version": "v10.14.1", + "date": "2018-11-29", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.4.1", + "v8": "6.8.275.32", + "uv": "1.23.2", + "zlib": "1.2.11", + "openssl": "1.1.0j", + "modules": "64", + "lts": "Dubnium", + "security": false + }, + { + "version": "v10.14.0", + "date": "2018-11-27", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.4.1", + "v8": "6.8.275.32", + "uv": "1.23.2", + "zlib": "1.2.11", + "openssl": "1.1.0j", + "modules": "64", + "lts": "Dubnium", + "security": true + }, + { + "version": "v10.13.0", + "date": "2018-10-30", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.4.1", + "v8": "6.8.275.32", + "uv": "1.23.2", + "zlib": "1.2.11", + "openssl": "1.1.0i", + "modules": "64", + "lts": "Dubnium", + "security": false + }, + { + "version": "v10.12.0", + "date": "2018-10-10", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.4.1", + "v8": "6.8.275.32", + "uv": "1.23.2", + "zlib": "1.2.11", + "openssl": "1.1.0i", + "modules": "64", + "lts": false, + "security": false + }, + { + "version": "v10.11.0", + "date": "2018-09-19", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.4.1", + "v8": "6.8.275.32", + "uv": "1.23.0", + "zlib": "1.2.11", + "openssl": "1.1.0i", + "modules": "64", + "lts": false, + "security": false + }, + { + "version": "v10.10.0", + "date": "2018-09-06", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.4.1", + "v8": "6.8.275.30", + "uv": "1.23.0", + "zlib": "1.2.11", + "openssl": "1.1.0i", + "modules": "64", + "lts": false, + "security": false + }, + { + "version": "v10.9.0", + "date": "2018-08-15", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.2.0", + "v8": "6.8.275.24", + "uv": "1.22.0", + "zlib": "1.2.11", + "openssl": "1.1.0i", + "modules": "64", + "lts": false, + "security": false + }, + { + "version": "v10.8.0", + "date": "2018-08-01", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.2.0", + "v8": "6.7.288.49", + "uv": "1.22.0", + "zlib": "1.2.11", + "openssl": "1.1.0h", + "modules": "64", + "lts": false, + "security": false + }, + { + "version": "v10.7.0", + "date": "2018-07-18", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.1.0", + "v8": "6.7.288.49", + "uv": "1.22.0", + "zlib": "1.2.11", + "openssl": "1.1.0h", + "modules": "64", + "lts": false, + "security": false + }, + { + "version": "v10.6.0", + "date": "2018-07-04", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.1.0", + "v8": "6.7.288.46", + "uv": "1.21.0", + "zlib": "1.2.11", + "openssl": "1.1.0h", + "modules": "64", + "lts": false, + "security": false + }, + { + "version": "v10.5.0", + "date": "2018-06-20", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.1.0", + "v8": "6.7.288.46", + "uv": "1.20.3", + "zlib": "1.2.11", + "openssl": "1.1.0h", + "modules": "64", + "lts": false, + "security": false + }, + { + "version": "v10.4.1", + "date": "2018-06-12", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.1.0", + "v8": "6.7.288.45", + "uv": "1.20.3", + "zlib": "1.2.11", + "openssl": "1.1.0h", + "modules": "64", + "lts": false, + "security": false + }, + { + "version": "v10.4.0", + "date": "2018-06-06", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.1.0", + "v8": "6.7.288.43", + "uv": "1.20.3", + "zlib": "1.2.11", + "openssl": "1.1.0h", + "modules": "64", + "lts": false, + "security": false + }, + { + "version": "v10.3.0", + "date": "2018-05-29", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.1.0", + "v8": "6.6.346.32", + "uv": "1.20.3", + "zlib": "1.2.11", + "openssl": "1.1.0h", + "modules": "64", + "lts": false, + "security": false + }, + { + "version": "v10.2.1", + "date": "2018-05-24", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.6.0", + "v8": "6.6.346.32", + "uv": "1.20.3", + "zlib": "1.2.11", + "openssl": "1.1.0h", + "modules": "64", + "lts": false, + "security": false + }, + { + "version": "v10.2.0", + "date": "2018-05-23", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.6.0", + "v8": "6.6.346.32", + "uv": "1.20.3", + "zlib": "1.2.11", + "openssl": "1.1.0h", + "modules": "64", + "lts": false, + "security": false + }, + { + "version": "v10.1.0", + "date": "2018-05-08", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.6.0", + "v8": "6.6.346.27", + "uv": "1.20.2", + "zlib": "1.2.11", + "openssl": "1.1.0h", + "modules": "64", + "lts": false, + "security": false + }, + { + "version": "v10.0.0", + "date": "2018-04-24", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.6.0", + "v8": "6.6.346.24", + "uv": "1.20.2", + "zlib": "1.2.11", + "openssl": "1.1.0h", + "modules": "64", + "lts": false, + "security": false + }, + { + "version": "v9.11.2", + "date": "2018-06-12", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.6.0", + "v8": "6.2.414.46", + "uv": "1.19.2", + "zlib": "1.2.11", + "openssl": "1.0.2o", + "modules": "59", + "lts": false, + "security": false + }, + { + "version": "v9.11.1", + "date": "2018-04-05", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.6.0", + "v8": "6.2.414.46", + "uv": "1.19.2", + "zlib": "1.2.11", + "openssl": "1.0.2o", + "modules": "59", + "lts": false, + "security": false + }, + { + "version": "v9.11.0", + "date": "2018-04-04", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.6.0", + "v8": "6.2.414.46", + "uv": "1.19.2", + "zlib": "1.2.11", + "openssl": "1.0.2o", + "modules": "59", + "lts": false, + "security": false + }, + { + "version": "v9.10.1", + "date": "2018-03-29", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.6.0", + "v8": "6.2.414.46", + "uv": "1.19.2", + "zlib": "1.2.11", + "openssl": "1.0.2o", + "modules": "59", + "lts": false, + "security": false + }, + { + "version": "v9.10.0", + "date": "2018-03-28", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.6.0", + "v8": "6.2.414.46", + "uv": "1.19.2", + "zlib": "1.2.11", + "openssl": "1.0.2o", + "modules": "59", + "lts": false, + "security": true + }, + { + "version": "v9.9.0", + "date": "2018-03-21", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.6.0", + "v8": "6.2.414.46", + "uv": "1.19.2", + "zlib": "1.2.11", + "openssl": "1.0.2n", + "modules": "59", + "lts": false, + "security": false + }, + { + "version": "v9.8.0", + "date": "2018-03-07", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.6.0", + "v8": "6.2.414.46", + "uv": "1.19.2", + "zlib": "1.2.11", + "openssl": "1.0.2n", + "modules": "59", + "lts": false, + "security": false + }, + { + "version": "v9.7.1", + "date": "2018-03-02", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.6.0", + "v8": "6.2.414.46", + "uv": "1.19.2", + "zlib": "1.2.11", + "openssl": "1.0.2n", + "modules": "59", + "lts": false, + "security": false + }, + { + "version": "v9.7.0", + "date": "2018-03-01", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.6.0", + "v8": "6.2.414.46", + "uv": "1.19.2", + "zlib": "1.2.11", + "openssl": "1.0.2n", + "modules": "59", + "lts": false, + "security": false + }, + { + "version": "v9.6.1", + "date": "2018-02-23", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.6.0", + "v8": "6.2.414.46", + "uv": "1.19.1", + "zlib": "1.2.11", + "openssl": "1.0.2n", + "modules": "59", + "lts": false, + "security": false + }, + { + "version": "v9.6.0", + "date": "2018-02-21", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.6.0", + "v8": "6.2.414.46", + "uv": "1.19.1", + "zlib": "1.2.11", + "openssl": "1.0.2n", + "modules": "59", + "lts": false, + "security": false + }, + { + "version": "v9.5.0", + "date": "2018-01-31", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.6.0", + "v8": "6.2.414.46", + "uv": "1.19.1", + "zlib": "1.2.11", + "openssl": "1.0.2n", + "modules": "59", + "lts": false, + "security": false + }, + { + "version": "v9.4.0", + "date": "2018-01-10", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.6.0", + "v8": "6.2.414.46", + "uv": "1.18.0", + "zlib": "1.2.11", + "openssl": "1.0.2n", + "modules": "59", + "lts": false, + "security": false + }, + { + "version": "v9.3.0", + "date": "2017-12-12", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.5.1", + "v8": "6.2.414.46", + "uv": "1.18.0", + "zlib": "1.2.11", + "openssl": "1.0.2n", + "modules": "59", + "lts": false, + "security": false + }, + { + "version": "v9.2.1", + "date": "2017-12-08", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.5.1", + "v8": "6.2.414.44", + "uv": "1.16.1", + "zlib": "1.2.11", + "openssl": "1.0.2n", + "modules": "59", + "lts": false, + "security": false + }, + { + "version": "v9.2.0", + "date": "2017-11-14", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.5.1", + "v8": "6.2.414.44", + "uv": "1.16.1", + "zlib": "1.2.11", + "openssl": "1.0.2m", + "modules": "59", + "lts": false, + "security": false + }, + { + "version": "v9.1.0", + "date": "2017-11-07", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.5.1", + "v8": "6.2.414.32", + "uv": "1.15.0", + "zlib": "1.2.11", + "openssl": "1.0.2m", + "modules": "59", + "lts": false, + "security": false + }, + { + "version": "v9.0.0", + "date": "2017-10-31", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.5.1", + "v8": "6.2.414.32", + "uv": "1.15.0", + "zlib": "1.2.11", + "openssl": "1.0.2l", + "modules": "59", + "lts": false, + "security": false + }, + { + "version": "v8.17.0", + "date": "2019-12-17", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.13.4", + "v8": "6.2.414.78", + "uv": "1.23.2", + "zlib": "1.2.11", + "openssl": "1.0.2s", + "modules": "57", + "lts": "Carbon", + "security": true + }, + { + "version": "v8.16.2", + "date": "2019-10-08", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.4.1", + "v8": "6.2.414.78", + "uv": "1.23.2", + "zlib": "1.2.11", + "openssl": "1.0.2s", + "modules": "57", + "lts": "Carbon", + "security": false + }, + { + "version": "v8.16.1", + "date": "2019-08-15", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.4.1", + "v8": "6.2.414.77", + "uv": "1.23.2", + "zlib": "1.2.11", + "openssl": "1.0.2r", + "modules": "57", + "lts": "Carbon", + "security": true + }, + { + "version": "v8.16.0", + "date": "2019-04-16", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.4.1", + "v8": "6.2.414.77", + "uv": "1.23.2", + "zlib": "1.2.11", + "openssl": "1.0.2r", + "modules": "57", + "lts": "Carbon", + "security": false + }, + { + "version": "v8.15.1", + "date": "2019-02-28", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.4.1", + "v8": "6.2.414.75", + "uv": "1.23.2", + "zlib": "1.2.11", + "openssl": "1.0.2r", + "modules": "57", + "lts": "Carbon", + "security": true + }, + { + "version": "v8.15.0", + "date": "2018-12-26", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.4.1", + "v8": "6.2.414.75", + "uv": "1.23.2", + "zlib": "1.2.11", + "openssl": "1.0.2q", + "modules": "57", + "lts": "Carbon", + "security": false + }, + { + "version": "v8.14.1", + "date": "2018-12-18", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.4.1", + "v8": "6.2.414.75", + "uv": "1.23.2", + "zlib": "1.2.11", + "openssl": "1.0.2q", + "modules": "57", + "lts": "Carbon", + "security": false + }, + { + "version": "v8.14.0", + "date": "2018-11-27", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.4.1", + "v8": "6.2.414.72", + "uv": "1.23.2", + "zlib": "1.2.11", + "openssl": "1.0.2q", + "modules": "57", + "lts": "Carbon", + "security": true + }, + { + "version": "v8.13.0", + "date": "2018-11-20", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.4.1", + "v8": "6.2.414.72", + "uv": "1.23.2", + "zlib": "1.2.11", + "openssl": "1.0.2p", + "modules": "57", + "lts": "Carbon", + "security": false + }, + { + "version": "v8.12.0", + "date": "2018-09-10", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.4.1", + "v8": "6.2.414.66", + "uv": "1.19.2", + "zlib": "1.2.11", + "openssl": "1.0.2p", + "modules": "57", + "lts": "Carbon", + "security": false + }, + { + "version": "v8.11.4", + "date": "2018-08-15", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.6.0", + "v8": "6.2.414.54", + "uv": "1.19.1", + "zlib": "1.2.11", + "openssl": "1.0.2p", + "modules": "57", + "lts": "Carbon", + "security": true + }, + { + "version": "v8.11.3", + "date": "2018-06-12", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.6.0", + "v8": "6.2.414.54", + "uv": "1.19.1", + "zlib": "1.2.11", + "openssl": "1.0.2o", + "modules": "57", + "lts": "Carbon", + "security": false + }, + { + "version": "v8.11.2", + "date": "2018-05-15", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.6.0", + "v8": "6.2.414.54", + "uv": "1.19.1", + "zlib": "1.2.11", + "openssl": "1.0.2o", + "modules": "57", + "lts": "Carbon", + "security": false + }, + { + "version": "v8.11.1", + "date": "2018-03-29", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.6.0", + "v8": "6.2.414.50", + "uv": "1.19.1", + "zlib": "1.2.11", + "openssl": "1.0.2o", + "modules": "57", + "lts": "Carbon", + "security": false + }, + { + "version": "v8.11.0", + "date": "2018-03-28", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.6.0", + "v8": "6.2.414.50", + "uv": "1.19.1", + "zlib": "1.2.11", + "openssl": "1.0.2o", + "modules": "57", + "lts": "Carbon", + "security": true + }, + { + "version": "v8.10.0", + "date": "2018-03-06", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.6.0", + "v8": "6.2.414.50", + "uv": "1.19.1", + "zlib": "1.2.11", + "openssl": "1.0.2n", + "modules": "57", + "lts": "Carbon", + "security": false + }, + { + "version": "v8.9.4", + "date": "2018-01-02", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.6.0", + "v8": "6.1.534.50", + "uv": "1.15.0", + "zlib": "1.2.11", + "openssl": "1.0.2n", + "modules": "57", + "lts": "Carbon", + "security": false + }, + { + "version": "v8.9.3", + "date": "2017-12-07", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.5.1", + "v8": "6.1.534.48", + "uv": "1.15.0", + "zlib": "1.2.11", + "openssl": "1.0.2n", + "modules": "57", + "lts": "Carbon", + "security": true + }, + { + "version": "v8.9.2", + "date": "2017-12-05", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.5.1", + "v8": "6.1.534.48", + "uv": "1.15.0", + "zlib": "1.2.11", + "openssl": "1.0.2m", + "modules": "57", + "lts": "Carbon", + "security": false + }, + { + "version": "v8.9.1", + "date": "2017-11-07", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.5.1", + "v8": "6.1.534.47", + "uv": "1.15.0", + "zlib": "1.2.11", + "openssl": "1.0.2m", + "modules": "57", + "lts": "Carbon", + "security": false + }, + { + "version": "v8.9.0", + "date": "2017-10-31", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.5.1", + "v8": "6.1.534.46", + "uv": "1.15.0", + "zlib": "1.2.11", + "openssl": "1.0.2l", + "modules": "57", + "lts": "Carbon", + "security": false + }, + { + "version": "v8.8.1", + "date": "2017-10-25", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.4.2", + "v8": "6.1.534.42", + "uv": "1.15.0", + "zlib": "1.2.11", + "openssl": "1.0.2l", + "modules": "57", + "lts": false, + "security": false + }, + { + "version": "v8.8.0", + "date": "2017-10-24", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.4.2", + "v8": "6.1.534.42", + "uv": "1.15.0", + "zlib": "1.2.11", + "openssl": "1.0.2l", + "modules": "57", + "lts": false, + "security": false + }, + { + "version": "v8.7.0", + "date": "2017-10-11", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.4.2", + "v8": "6.1.534.42", + "uv": "1.15.0", + "zlib": "1.2.11", + "openssl": "1.0.2l", + "modules": "57", + "lts": false, + "security": false + }, + { + "version": "v8.6.0", + "date": "2017-09-26", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.3.0", + "v8": "6.0.287.53", + "uv": "1.14.1", + "zlib": "1.2.11", + "openssl": "1.0.2l", + "modules": "57", + "lts": false, + "security": false + }, + { + "version": "v8.5.0", + "date": "2017-09-12", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.3.0", + "v8": "6.0.287.53", + "uv": "1.14.1", + "zlib": "1.2.11", + "openssl": "1.0.2l", + "modules": "57", + "lts": false, + "security": false + }, + { + "version": "v8.4.0", + "date": "2017-08-15", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.3.0", + "v8": "6.0.286.52", + "uv": "1.13.1", + "zlib": "1.2.11", + "openssl": "1.0.2l", + "modules": "57", + "lts": false, + "security": false + }, + { + "version": "v8.3.0", + "date": "2017-08-08", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.3.0", + "v8": "6.0.286.52", + "uv": "1.13.1", + "zlib": "1.2.11", + "openssl": "1.0.2l", + "modules": "57", + "lts": false, + "security": false + }, + { + "version": "v8.2.1", + "date": "2017-07-20", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.3.0", + "v8": "5.8.283.41", + "uv": "1.13.1", + "zlib": "1.2.11", + "openssl": "1.0.2l", + "modules": "57", + "lts": false, + "security": false + }, + { + "version": "v8.2.0", + "date": "2017-07-19", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.3.0", + "v8": "5.8.283.41", + "uv": "1.13.1", + "zlib": "1.2.11", + "openssl": "1.0.2l", + "modules": "57", + "lts": false, + "security": false + }, + { + "version": "v8.1.4", + "date": "2017-07-11", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.0.3", + "v8": "5.8.283.41", + "uv": "1.12.0", + "zlib": "1.2.11", + "openssl": "1.0.2l", + "modules": "57", + "lts": false, + "security": true + }, + { + "version": "v8.1.3", + "date": "2017-06-29", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.0.3", + "v8": "5.8.283.41", + "uv": "1.12.0", + "zlib": "1.2.11", + "openssl": "1.0.2l", + "modules": "57", + "lts": false, + "security": false + }, + { + "version": "v8.1.2", + "date": "2017-06-15", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.0.3", + "v8": "5.8.283.41", + "uv": "1.12.0", + "zlib": "1.2.11", + "openssl": "1.0.2l", + "modules": "57", + "lts": false, + "security": false + }, + { + "version": "v8.1.1", + "date": "2017-06-13", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.0.3", + "v8": "5.8.283.41", + "uv": "1.12.0", + "zlib": "1.2.11", + "openssl": "1.0.2l", + "modules": "57", + "lts": false, + "security": false + }, + { + "version": "v8.1.0", + "date": "2017-06-08", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.0.3", + "v8": "5.8.283.41", + "uv": "1.12.0", + "zlib": "1.2.11", + "openssl": "1.0.2l", + "modules": "57", + "lts": false, + "security": false + }, + { + "version": "v8.0.0", + "date": "2017-05-30", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.0.0", + "v8": "5.8.283.41", + "uv": "1.11.0", + "zlib": "1.2.11", + "openssl": "1.0.2k", + "modules": "57", + "lts": false, + "security": false + }, + { + "version": "v7.10.1", + "date": "2017-07-11", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "4.2.0", + "v8": "5.5.372.43", + "uv": "1.11.0", + "zlib": "1.2.11", + "openssl": "1.0.2k", + "modules": "51", + "lts": false, + "security": true + }, + { + "version": "v7.10.0", + "date": "2017-05-02", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "4.2.0", + "v8": "5.5.372.43", + "uv": "1.11.0", + "zlib": "1.2.11", + "openssl": "1.0.2k", + "modules": "51", + "lts": false, + "security": false + }, + { + "version": "v7.9.0", + "date": "2017-04-11", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "4.2.0", + "v8": "5.5.372.43", + "uv": "1.11.0", + "zlib": "1.2.11", + "openssl": "1.0.2k", + "modules": "51", + "lts": false, + "security": false + }, + { + "version": "v7.8.0", + "date": "2017-03-29", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "4.2.0", + "v8": "5.5.372.43", + "uv": "1.11.0", + "zlib": "1.2.11", + "openssl": "1.0.2k", + "modules": "51", + "lts": false, + "security": false + }, + { + "version": "v7.7.4", + "date": "2017-03-21", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "4.1.2", + "v8": "5.5.372.42", + "uv": "1.11.0", + "zlib": "1.2.11", + "openssl": "1.0.2k", + "modules": "51", + "lts": false, + "security": false + }, + { + "version": "v7.7.3", + "date": "2017-03-14", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "4.1.2", + "v8": "5.5.372.41", + "uv": "1.11.0", + "zlib": "1.2.11", + "openssl": "1.0.2k", + "modules": "51", + "lts": false, + "security": false + }, + { + "version": "v7.7.2", + "date": "2017-03-08", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "4.1.2", + "v8": "5.5.372.41", + "uv": "1.11.0", + "zlib": "1.2.11", + "openssl": "1.0.2k", + "modules": "51", + "lts": false, + "security": false + }, + { + "version": "v7.7.1", + "date": "2017-03-02", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "4.1.2", + "v8": "5.5.372.41", + "uv": "1.11.0", + "zlib": "1.2.11", + "openssl": "1.0.2k", + "modules": "51", + "lts": false, + "security": false + }, + { + "version": "v7.7.0", + "date": "2017-02-28", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "4.1.2", + "v8": "5.5.372.41", + "uv": "1.11.0", + "zlib": "1.2.11", + "openssl": "1.0.2k", + "modules": "51", + "lts": false, + "security": false + }, + { + "version": "v7.6.0", + "date": "2017-02-21", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "4.1.2", + "v8": "5.5.372.40", + "uv": "1.11.0", + "zlib": "1.2.11", + "openssl": "1.0.2k", + "modules": "51", + "lts": false, + "security": false + }, + { + "version": "v7.5.0", + "date": "2017-01-31", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "4.1.2", + "v8": "5.4.500.48", + "uv": "1.10.2", + "zlib": "1.2.8", + "openssl": "1.0.2k", + "modules": "51", + "lts": false, + "security": false + }, + { + "version": "v7.4.0", + "date": "2017-01-04", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "4.0.5", + "v8": "5.4.500.45", + "uv": "1.10.1", + "zlib": "1.2.8", + "openssl": "1.0.2j", + "modules": "51", + "lts": false, + "security": false + }, + { + "version": "v7.3.0", + "date": "2016-12-20", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.4.500.45", + "uv": "1.10.1", + "zlib": "1.2.8", + "openssl": "1.0.2j", + "modules": "51", + "lts": false, + "security": false + }, + { + "version": "v7.2.1", + "date": "2016-12-06", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.4.500.44", + "uv": "1.10.1", + "zlib": "1.2.8", + "openssl": "1.0.2j", + "modules": "51", + "lts": false, + "security": false + }, + { + "version": "v7.2.0", + "date": "2016-11-22", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.9", + "v8": "5.4.500.43", + "uv": "1.10.1", + "zlib": "1.2.8", + "openssl": "1.0.2j", + "modules": "51", + "lts": false, + "security": false + }, + { + "version": "v7.1.0", + "date": "2016-11-08", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.9", + "v8": "5.4.500.36", + "uv": "1.10.0", + "zlib": "1.2.8", + "openssl": "1.0.2j", + "modules": "51", + "lts": false, + "security": false + }, + { + "version": "v7.0.0", + "date": "2016-10-25", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.8", + "v8": "5.4.500.36", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2j", + "modules": "51", + "lts": false, + "security": false + }, + { + "version": "v6.17.1", + "date": "2019-04-03", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.111", + "uv": "1.16.1", + "zlib": "1.2.11", + "openssl": "1.0.2r", + "modules": "48", + "lts": "Boron", + "security": false + }, + { + "version": "v6.17.0", + "date": "2019-02-28", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.111", + "uv": "1.16.1", + "zlib": "1.2.11", + "openssl": "1.0.2r", + "modules": "48", + "lts": "Boron", + "security": true + }, + { + "version": "v6.16.0", + "date": "2018-12-26", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.111", + "uv": "1.16.1", + "zlib": "1.2.11", + "openssl": "1.0.2q", + "modules": "48", + "lts": "Boron", + "security": false + }, + { + "version": "v6.15.1", + "date": "2018-12-03", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.111", + "uv": "1.16.1", + "zlib": "1.2.11", + "openssl": "1.0.2q", + "modules": "48", + "lts": "Boron", + "security": false + }, + { + "version": "v6.15.0", + "date": "2018-11-27", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.111", + "uv": "1.16.1", + "zlib": "1.2.11", + "openssl": "1.0.2q", + "modules": "48", + "lts": "Boron", + "security": true + }, + { + "version": "v6.14.4", + "date": "2018-08-15", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.111", + "uv": "1.16.1", + "zlib": "1.2.11", + "openssl": "1.0.2p", + "modules": "48", + "lts": "Boron", + "security": true + }, + { + "version": "v6.14.3", + "date": "2018-06-12", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.111", + "uv": "1.16.1", + "zlib": "1.2.11", + "openssl": "1.0.2o", + "modules": "48", + "lts": "Boron", + "security": false + }, + { + "version": "v6.14.2", + "date": "2018-04-30", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.111", + "uv": "1.16.1", + "zlib": "1.2.11", + "openssl": "1.0.2o", + "modules": "48", + "lts": "Boron", + "security": false + }, + { + "version": "v6.14.1", + "date": "2018-03-29", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.111", + "uv": "1.16.1", + "zlib": "1.2.11", + "openssl": "1.0.2o", + "modules": "48", + "lts": "Boron", + "security": false + }, + { + "version": "v6.14.0", + "date": "2018-03-28", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.111", + "uv": "1.16.1", + "zlib": "1.2.11", + "openssl": "1.0.2o", + "modules": "48", + "lts": "Boron", + "security": true + }, + { + "version": "v6.13.1", + "date": "2018-03-06", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.111", + "uv": "1.16.1", + "zlib": "1.2.11", + "openssl": "1.0.2n", + "modules": "48", + "lts": "Boron", + "security": false + }, + { + "version": "v6.13.0", + "date": "2018-02-10", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.111", + "uv": "1.16.1", + "zlib": "1.2.11", + "openssl": "1.0.2n", + "modules": "48", + "lts": "Boron", + "security": false + }, + { + "version": "v6.12.3", + "date": "2018-01-02", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.111", + "uv": "1.15.0", + "zlib": "1.2.11", + "openssl": "1.0.2n", + "modules": "48", + "lts": "Boron", + "security": false + }, + { + "version": "v6.12.2", + "date": "2017-12-07", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.109", + "uv": "1.15.0", + "zlib": "1.2.11", + "openssl": "1.0.2n", + "modules": "48", + "lts": "Boron", + "security": true + }, + { + "version": "v6.12.1", + "date": "2017-12-05", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.109", + "uv": "1.15.0", + "zlib": "1.2.11", + "openssl": "1.0.2m", + "modules": "48", + "lts": "Boron", + "security": false + }, + { + "version": "v6.12.0", + "date": "2017-11-06", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.108", + "uv": "1.15.0", + "zlib": "1.2.11", + "openssl": "1.0.2m", + "modules": "48", + "lts": "Boron", + "security": false + }, + { + "version": "v6.11.5", + "date": "2017-10-24", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.108", + "uv": "1.11.0", + "zlib": "1.2.11", + "openssl": "1.0.2l", + "modules": "48", + "lts": "Boron", + "security": true + }, + { + "version": "v6.11.4", + "date": "2017-10-03", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.108", + "uv": "1.11.0", + "zlib": "1.2.11", + "openssl": "1.0.2l", + "modules": "48", + "lts": "Boron", + "security": false + }, + { + "version": "v6.11.3", + "date": "2017-09-05", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.107", + "uv": "1.11.0", + "zlib": "1.2.11", + "openssl": "1.0.2l", + "modules": "48", + "lts": "Boron", + "security": false + }, + { + "version": "v6.11.2", + "date": "2017-08-01", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.103", + "uv": "1.11.0", + "zlib": "1.2.11", + "openssl": "1.0.2l", + "modules": "48", + "lts": "Boron", + "security": false + }, + { + "version": "v6.11.1", + "date": "2017-07-10", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.103", + "uv": "1.11.0", + "zlib": "1.2.11", + "openssl": "1.0.2k", + "modules": "48", + "lts": "Boron", + "security": true + }, + { + "version": "v6.11.0", + "date": "2017-06-06", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.102", + "uv": "1.11.0", + "zlib": "1.2.11", + "openssl": "1.0.2k", + "modules": "48", + "lts": "Boron", + "security": false + }, + { + "version": "v6.10.3", + "date": "2017-05-02", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.101", + "uv": "1.9.1", + "zlib": "1.2.11", + "openssl": "1.0.2k", + "modules": "48", + "lts": "Boron", + "security": false + }, + { + "version": "v6.10.2", + "date": "2017-04-04", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.98", + "uv": "1.9.1", + "zlib": "1.2.11", + "openssl": "1.0.2k", + "modules": "48", + "lts": "Boron", + "security": false + }, + { + "version": "v6.10.1", + "date": "2017-03-21", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.95", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2k", + "modules": "48", + "lts": "Boron", + "security": false + }, + { + "version": "v6.10.0", + "date": "2017-02-21", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.93", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2k", + "modules": "48", + "lts": "Boron", + "security": false + }, + { + "version": "v6.9.5", + "date": "2017-01-31", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.89", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2k", + "modules": "48", + "lts": "Boron", + "security": false + }, + { + "version": "v6.9.4", + "date": "2017-01-05", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.89", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2j", + "modules": "48", + "lts": "Boron", + "security": false + }, + { + "version": "v6.9.3", + "date": "2017-01-05", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.89", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2j", + "modules": "48", + "lts": "Boron", + "security": false + }, + { + "version": "v6.9.2", + "date": "2016-12-06", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.9", + "v8": "5.1.281.88", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2j", + "modules": "48", + "lts": "Boron", + "security": false + }, + { + "version": "v6.9.1", + "date": "2016-10-19", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.8", + "v8": "5.1.281.84", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2j", + "modules": "48", + "lts": "Boron", + "security": false + }, + { + "version": "v6.9.0", + "date": "2016-10-18", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.8", + "v8": "5.1.281.84", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2j", + "modules": "48", + "lts": "Boron", + "security": false + }, + { + "version": "v6.8.1", + "date": "2016-10-14", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.8", + "v8": "5.1.281.84", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2j", + "modules": "48", + "lts": false, + "security": false + }, + { + "version": "v6.8.0", + "date": "2016-10-12", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.8", + "v8": "5.1.281.84", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2j", + "modules": "48", + "lts": false, + "security": false + }, + { + "version": "v6.7.0", + "date": "2016-09-27", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.3", + "v8": "5.1.281.83", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2j", + "modules": "48", + "lts": false, + "security": true + }, + { + "version": "v6.6.0", + "date": "2016-09-14", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.3", + "v8": "5.1.281.83", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2h", + "modules": "48", + "lts": false, + "security": false + }, + { + "version": "v6.5.0", + "date": "2016-08-26", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.3", + "v8": "5.1.281.81", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2h", + "modules": "48", + "lts": false, + "security": false + }, + { + "version": "v6.4.0", + "date": "2016-08-12", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.3", + "v8": "5.0.71.60", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2h", + "modules": "48", + "lts": false, + "security": false + }, + { + "version": "v6.3.1", + "date": "2016-07-21", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.3", + "v8": "5.0.71.57", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2h", + "modules": "48", + "lts": false, + "security": false + }, + { + "version": "v6.3.0", + "date": "2016-07-06", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.3", + "v8": "5.0.71.52", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2h", + "modules": "48", + "lts": false, + "security": false + }, + { + "version": "v6.2.2", + "date": "2016-06-16", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.9.5", + "v8": "5.0.71.52", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2h", + "modules": "48", + "lts": false, + "security": false + }, + { + "version": "v6.2.1", + "date": "2016-06-02", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.9.3", + "v8": "5.0.71.52", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2h", + "modules": "48", + "lts": false, + "security": false + }, + { + "version": "v6.2.0", + "date": "2016-05-17", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "3.8.9", + "v8": "5.0.71.47", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2h", + "modules": "48", + "lts": false, + "security": false + }, + { + "version": "v6.1.0", + "date": "2016-05-05", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "3.8.6", + "v8": "5.0.71.35", + "uv": "1.9.0", + "zlib": "1.2.8", + "openssl": "1.0.2h", + "modules": "48", + "lts": false, + "security": false + }, + { + "version": "v6.0.0", + "date": "2016-04-26", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "3.8.6", + "v8": "5.0.71.35", + "uv": "1.9.0", + "zlib": "1.2.8", + "openssl": "1.0.2g", + "modules": "48", + "lts": false, + "security": false + }, + { + "version": "v5.12.0", + "date": "2016-06-23", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "3.8.6", + "v8": "4.6.85.32", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2h", + "modules": "47", + "lts": false, + "security": false + }, + { + "version": "v5.11.1", + "date": "2016-05-05", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "3.8.6", + "v8": "4.6.85.31", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2h", + "modules": "47", + "lts": false, + "security": false + }, + { + "version": "v5.11.0", + "date": "2016-04-21", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "3.8.6", + "v8": "4.6.85.31", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2g", + "modules": "47", + "lts": false, + "security": false + }, + { + "version": "v5.10.1", + "date": "2016-04-05", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "3.8.3", + "v8": "4.6.85.31", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2g", + "modules": "47", + "lts": false, + "security": false + }, + { + "version": "v5.10.0", + "date": "2016-04-01", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "3.8.3", + "v8": "4.6.85.31", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2g", + "modules": "47", + "lts": false, + "security": false + }, + { + "version": "v5.9.1", + "date": "2016-03-22", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "3.7.3", + "v8": "4.6.85.31", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2g", + "modules": "47", + "lts": false, + "security": false + }, + { + "version": "v5.9.0", + "date": "2016-03-16", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "3.7.3", + "v8": "4.6.85.31", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2g", + "modules": "47", + "lts": false, + "security": false + }, + { + "version": "v5.8.0", + "date": "2016-03-09", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "3.7.3", + "v8": "4.6.85.31", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2g", + "modules": "47", + "lts": false, + "security": false + }, + { + "version": "v5.7.1", + "date": "2016-03-02", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "3.6.0", + "v8": "4.6.85.31", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2g", + "modules": "47", + "lts": false, + "security": false + }, + { + "version": "v5.7.0", + "date": "2016-02-23", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "3.6.0", + "v8": "4.6.85.31", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2f", + "modules": "47", + "lts": false, + "security": false + }, + { + "version": "v5.6.0", + "date": "2016-02-09", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "3.6.0", + "v8": "4.6.85.31", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2f", + "modules": "47", + "lts": false, + "security": false + }, + { + "version": "v5.5.0", + "date": "2016-01-21", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "3.3.12", + "v8": "4.6.85.31", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2e", + "modules": "47", + "lts": false, + "security": false + }, + { + "version": "v5.4.1", + "date": "2016-01-12", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "3.3.12", + "v8": "4.6.85.31", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2e", + "modules": "47", + "lts": false, + "security": false + }, + { + "version": "v5.4.0", + "date": "2016-01-06", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "3.3.12", + "v8": "4.6.85.31", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2e", + "modules": "47", + "lts": false, + "security": false + }, + { + "version": "v5.3.0", + "date": "2015-12-15", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "3.3.12", + "v8": "4.6.85.31", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2e", + "modules": "47", + "lts": false, + "security": false + }, + { + "version": "v5.2.0", + "date": "2015-12-09", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "3.3.12", + "v8": "4.6.85.31", + "uv": "1.7.5", + "zlib": "1.2.8", + "openssl": "1.0.2e", + "modules": "47", + "lts": false, + "security": false + }, + { + "version": "v5.1.1", + "date": "2015-12-03", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "3.3.12", + "v8": "4.6.85.31", + "uv": "1.7.5", + "zlib": "1.2.8", + "openssl": "1.0.2e", + "modules": "47", + "lts": false, + "security": false + }, + { + "version": "v5.1.0", + "date": "2015-11-17", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "3.3.12", + "v8": "4.6.85.31", + "uv": "1.7.5", + "zlib": "1.2.8", + "openssl": "1.0.2d", + "modules": "47", + "lts": false, + "security": false + }, + { + "version": "v5.0.0", + "date": "2015-10-29", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "3.3.6", + "v8": "4.6.85.28", + "uv": "1.7.5", + "zlib": "1.2.8", + "openssl": "1.0.2d", + "modules": "47", + "lts": false, + "security": false + }, + { + "version": "v4.9.1", + "date": "2018-03-29", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "2.15.11", + "v8": "4.5.103.53", + "uv": "1.9.1", + "zlib": "1.2.11", + "openssl": "1.0.2o", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.9.0", + "date": "2018-03-28", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "2.15.11", + "v8": "4.5.103.53", + "uv": "1.9.1", + "zlib": "1.2.11", + "openssl": "1.0.2o", + "modules": "46", + "lts": "Argon", + "security": true + }, + { + "version": "v4.8.7", + "date": "2017-12-07", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "2.15.11", + "v8": "4.5.103.53", + "uv": "1.9.1", + "zlib": "1.2.11", + "openssl": "1.0.2n", + "modules": "46", + "lts": "Argon", + "security": true + }, + { + "version": "v4.8.6", + "date": "2017-11-06", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "2.15.11", + "v8": "4.5.103.53", + "uv": "1.9.1", + "zlib": "1.2.11", + "openssl": "1.0.2m", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.8.5", + "date": "2017-10-24", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "2.15.11", + "v8": "4.5.103.47", + "uv": "1.9.1", + "zlib": "1.2.11", + "openssl": "1.0.2k", + "modules": "46", + "lts": "Argon", + "security": true + }, + { + "version": "v4.8.4", + "date": "2017-07-11", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "2.15.11", + "v8": "4.5.103.47", + "uv": "1.9.1", + "zlib": "1.2.11", + "openssl": "1.0.2k", + "modules": "46", + "lts": "Argon", + "security": true + }, + { + "version": "v4.8.3", + "date": "2017-05-02", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "2.15.11", + "v8": "4.5.103.47", + "uv": "1.9.1", + "zlib": "1.2.11", + "openssl": "1.0.2k", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.8.2", + "date": "2017-04-04", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "2.15.11", + "v8": "4.5.103.46", + "uv": "1.9.1", + "zlib": "1.2.11", + "openssl": "1.0.2k", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.8.1", + "date": "2017-03-21", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "2.15.11", + "v8": "4.5.103.46", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2k", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.8.0", + "date": "2017-02-21", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "2.15.11", + "v8": "4.5.103.45", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2k", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.7.3", + "date": "2017-01-31", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "2.15.11", + "v8": "4.5.103.43", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2k", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.7.2", + "date": "2017-01-05", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "2.15.11", + "v8": "4.5.103.43", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2j", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.7.1", + "date": "2017-01-05", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "2.15.11", + "v8": "4.5.103.43", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2j", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.7.0", + "date": "2016-12-06", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "2.15.11", + "v8": "4.5.103.43", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2j", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.6.2", + "date": "2016-11-08", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "2.15.11", + "v8": "4.5.103.42", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2j", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.6.1", + "date": "2016-10-18", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "2.15.9", + "v8": "4.5.103.37", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2j", + "modules": "46", + "lts": "Argon", + "security": true + }, + { + "version": "v4.6.0", + "date": "2016-09-27", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "2.15.9", + "v8": "4.5.103.37", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2j", + "modules": "46", + "lts": "Argon", + "security": true + }, + { + "version": "v4.5.0", + "date": "2016-08-16", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "2.15.9", + "v8": "4.5.103.37", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2h", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.4.7", + "date": "2016-06-28", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.15.8", + "v8": "4.5.103.36", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2h", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.4.6", + "date": "2016-06-23", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.15.5", + "v8": "4.5.103.36", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2h", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.4.5", + "date": "2016-05-24", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.15.5", + "v8": "4.5.103.35", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2h", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.4.4", + "date": "2016-05-05", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.15.1", + "v8": "4.5.103.35", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2h", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.4.3", + "date": "2016-04-12", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.15.1", + "v8": "4.5.103.35", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2g", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.4.2", + "date": "2016-04-01", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.15.0", + "v8": "4.5.103.35", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2g", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.4.1", + "date": "2016-03-22", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.14.20", + "v8": "4.5.103.35", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2g", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.4.0", + "date": "2016-03-08", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.14.20", + "v8": "4.5.103.35", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2g", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.3.2", + "date": "2016-03-02", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.14.12", + "v8": "4.5.103.35", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2g", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.3.1", + "date": "2016-02-16", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.14.12", + "v8": "4.5.103.35", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2f", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.3.0", + "date": "2016-02-09", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.14.12", + "v8": "4.5.103.35", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2f", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.2.6", + "date": "2016-01-21", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.14.12", + "v8": "4.5.103.35", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2e", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.2.5", + "date": "2016-01-20", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.14.12", + "v8": "4.5.103.35", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2e", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.2.4", + "date": "2015-12-23", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.14.12", + "v8": "4.5.103.35", + "uv": "1.7.5", + "zlib": "1.2.8", + "openssl": "1.0.2e", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.2.3", + "date": "2015-12-03", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.14.7", + "v8": "4.5.103.35", + "uv": "1.7.5", + "zlib": "1.2.8", + "openssl": "1.0.2e", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.2.2", + "date": "2015-11-03", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.14.7", + "v8": "4.5.103.35", + "uv": "1.7.5", + "zlib": "1.2.8", + "openssl": "1.0.2d", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.2.1", + "date": "2015-10-13", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.14.7", + "v8": "4.5.103.35", + "uv": "1.7.5", + "zlib": "1.2.8", + "openssl": "1.0.2d", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.2.0", + "date": "2015-10-12", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.14.7", + "v8": "4.5.103.35", + "uv": "1.7.5", + "zlib": "1.2.8", + "openssl": "1.0.2d", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.1.2", + "date": "2015-10-05", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.14.4", + "v8": "4.5.103.35", + "uv": "1.7.5", + "zlib": "1.2.8", + "openssl": "1.0.2d", + "modules": "46", + "lts": false, + "security": false + }, + { + "version": "v4.1.1", + "date": "2015-09-23", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.14.4", + "v8": "4.5.103.33", + "uv": "1.7.4", + "zlib": "1.2.8", + "openssl": "1.0.2d", + "modules": "46", + "lts": false, + "security": false + }, + { + "version": "v4.1.0", + "date": "2015-09-17", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.14.3", + "v8": "4.5.103.33", + "uv": "1.7.4", + "zlib": "1.2.8", + "openssl": "1.0.2d", + "modules": "46", + "lts": false, + "security": false + }, + { + "version": "v4.0.0", + "date": "2015-09-08", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.14.2", + "v8": "4.5.103.30", + "uv": "1.7.3", + "zlib": "1.2.8", + "openssl": "1.0.2d", + "modules": "46", + "lts": false, + "security": false + }, + { + "version": "v0.12.18", + "date": "2017-02-22", + "files": [ + "headers", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.15.11", + "v8": "3.28.71.20", + "uv": "1.6.1", + "zlib": "1.2.8", + "openssl": "1.0.1u", + "modules": "14", + "lts": false, + "security": false + }, + { + "version": "v0.12.17", + "date": "2016-10-18", + "files": [ + "headers", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.15.1", + "v8": "3.28.71.19", + "uv": "1.6.1", + "zlib": "1.2.8", + "openssl": "1.0.1u", + "modules": "14", + "lts": false, + "security": true + }, + { + "version": "v0.12.16", + "date": "2016-09-27", + "files": [ + "headers", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.15.1", + "v8": "3.28.71.19", + "uv": "1.6.1", + "zlib": "1.2.8", + "openssl": "1.0.1u", + "modules": "14", + "lts": false, + "security": true + }, + { + "version": "v0.12.15", + "date": "2016-06-23", + "files": [ + "headers", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.15.1", + "v8": "3.28.71.19", + "uv": "1.6.1", + "zlib": "1.2.8", + "openssl": "1.0.1t", + "modules": "14", + "lts": false, + "security": true + }, + { + "version": "v0.12.14", + "date": "2016-05-06", + "files": [ + "headers", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.15.1", + "v8": "3.28.71.19", + "uv": "1.6.1", + "zlib": "1.2.8", + "openssl": "1.0.1t", + "modules": "14", + "lts": false, + "security": false + }, + { + "version": "v0.12.13", + "date": "2016-03-31", + "files": [ + "headers", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.15.0", + "v8": "3.28.71.19", + "uv": "1.6.1", + "zlib": "1.2.8", + "openssl": "1.0.1s", + "modules": "14", + "lts": false, + "security": false + }, + { + "version": "v0.12.12", + "date": "2016-03-08", + "files": [ + "headers", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.14.9", + "v8": "3.28.71.19", + "uv": "1.6.1", + "zlib": "1.2.8", + "openssl": "1.0.1s", + "modules": "14", + "lts": false, + "security": false + }, + { + "version": "v0.12.11", + "date": "2016-03-03", + "files": [ + "headers", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.14.9", + "v8": "3.28.71.19", + "uv": "1.6.1", + "zlib": "1.2.8", + "openssl": "1.0.1s", + "modules": "14", + "lts": false, + "security": false + }, + { + "version": "v0.12.10", + "date": "2016-02-09", + "files": [ + "headers", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.14.9", + "v8": "3.28.71.19", + "uv": "1.6.1", + "zlib": "1.2.8", + "openssl": "1.0.1r", + "modules": "14", + "lts": false, + "security": false + }, + { + "version": "v0.12.9", + "date": "2015-12-03", + "files": [ + "headers", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.14.9", + "v8": "3.28.71.19", + "uv": "1.6.1", + "zlib": "1.2.8", + "openssl": "1.0.1q", + "modules": "14", + "lts": false, + "security": false + }, + { + "version": "v0.12.8", + "date": "2015-11-24", + "files": [ + "headers", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.14.9", + "v8": "3.28.71.19", + "uv": "1.6.1", + "zlib": "1.2.8", + "openssl": "1.0.1p", + "modules": "14", + "lts": false, + "security": false + }, + { + "version": "v0.12.7", + "date": "2015-07-09", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.11.3", + "v8": "3.28.71.19", + "uv": "1.6.1", + "zlib": "1.2.8", + "openssl": "1.0.1p", + "modules": "14", + "lts": false, + "security": false + }, + { + "version": "v0.12.6", + "date": "2015-07-04", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.11.2", + "v8": "3.28.71.19", + "uv": "1.6.1", + "zlib": "1.2.8", + "openssl": "1.0.1o", + "modules": "14", + "lts": false, + "security": false + }, + { + "version": "v0.12.5", + "date": "2015-06-22", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.11.2", + "v8": "3.28.71.19", + "uv": "1.6.1", + "zlib": "1.2.8", + "openssl": "1.0.1o", + "modules": "14", + "lts": false, + "security": false + }, + { + "version": "v0.12.4", + "date": "2015-05-23", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.10.1", + "v8": "3.28.71.19", + "uv": "1.5.0", + "zlib": "1.2.8", + "openssl": "1.0.1m", + "modules": "14", + "lts": false, + "security": false + }, + { + "version": "v0.12.3", + "date": "2015-05-14", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.9.1", + "v8": "3.28.71.19", + "uv": "1.5.0", + "zlib": "1.2.8", + "openssl": "1.0.1m", + "modules": "14", + "lts": false, + "security": false + }, + { + "version": "v0.12.2", + "date": "2015-03-31", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.7.4", + "v8": "3.28.73.0", + "uv": "1.4.2", + "zlib": "1.2.8", + "openssl": "1.0.1m", + "modules": "14", + "lts": false, + "security": false + }, + { + "version": "v0.12.1", + "date": "2015-03-24", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.5.1", + "v8": "3.28.73.0", + "uv": "1.0.2", + "zlib": "1.2.8", + "openssl": "1.0.1m", + "modules": "14", + "lts": false, + "security": false + }, + { + "version": "v0.12.0", + "date": "2015-02-06", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.5.1", + "v8": "3.28.73.0", + "uv": "1.0.2", + "zlib": "1.2.8", + "openssl": "1.0.1l", + "modules": "14", + "lts": false, + "security": false + }, + { + "version": "v0.11.16", + "date": "2015-01-30", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.3.0", + "v8": "3.28.73.0", + "uv": "1.0.2", + "zlib": "1.2.8", + "openssl": "1.0.1l", + "modules": "14", + "lts": false, + "security": false + }, + { + "version": "v0.11.15", + "date": "2015-01-20", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.1.6", + "v8": "3.28.73.0", + "uv": "1.0.2", + "zlib": "1.2.8", + "openssl": "1.0.1j", + "modules": "14", + "lts": false, + "security": false + }, + { + "version": "v0.11.14", + "date": "2014-08-19", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.0.0", + "v8": "3.26.33.0", + "uv": "1.0.0", + "zlib": "1.2.3", + "openssl": "1.0.1i", + "modules": "14", + "lts": false, + "security": false + }, + { + "version": "v0.11.13", + "date": "2014-05-02", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.4.9", + "v8": "3.25.30.0", + "uv": "0.11.25", + "zlib": "1.2.3", + "openssl": "1.0.1g", + "modules": "14", + "lts": false, + "security": false + }, + { + "version": "v0.11.12", + "date": "2014-03-11", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.4.3", + "v8": "3.22.24.19", + "uv": "0.11.22", + "zlib": "1.2.3", + "openssl": "1.0.1f", + "modules": "14", + "lts": false, + "security": false + }, + { + "version": "v0.11.11", + "date": "2014-01-29", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.3.25", + "v8": "3.22.24.19", + "uv": "0.11.18", + "zlib": "1.2.3", + "openssl": "1.0.1f", + "modules": "14", + "lts": false, + "security": false + }, + { + "version": "v0.11.10", + "date": "2013-12-31", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.3.22", + "v8": "3.22.24.10", + "uv": "0.11.17", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "13", + "lts": false, + "security": false + }, + { + "version": "v0.11.9", + "date": "2013-11-21", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.3.15", + "v8": "3.22.24.5", + "uv": "0.11.15", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "13", + "lts": false, + "security": false + }, + { + "version": "v0.11.8", + "date": "2013-10-30", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.3.13", + "v8": "3.21.18.3", + "uv": "0.11.14", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "13", + "lts": false, + "security": false + }, + { + "version": "v0.11.7", + "date": "2013-09-04", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.3.8", + "v8": "3.20.17.0", + "uv": "0.11.13", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "0x000C", + "lts": false, + "security": false + }, + { + "version": "v0.11.6", + "date": "2013-08-21", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x86-msi" + ], + "npm": "1.3.8", + "v8": "3.20.14.1", + "uv": "0.11.8", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "0x000C", + "lts": false, + "security": false + }, + { + "version": "v0.11.5", + "date": "2013-08-07", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.3.6", + "v8": "3.20.11.0", + "uv": "0.11.7", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "0x000C", + "lts": false, + "security": false + }, + { + "version": "v0.11.4", + "date": "2013-07-12", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x86-msi" + ], + "npm": "1.3.4", + "v8": "3.20.2.0", + "uv": "0.11.5", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "0x000C", + "lts": false, + "security": false + }, + { + "version": "v0.11.3", + "date": "2013-06-26", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.25", + "v8": "3.19.13.0", + "uv": "0.11.5", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "0x000C", + "lts": false, + "security": false + }, + { + "version": "v0.11.2", + "date": "2013-05-13", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.21", + "v8": "3.19.0.0", + "uv": "0.11.2", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "0x000C", + "lts": false, + "security": false + }, + { + "version": "v0.11.1", + "date": "2013-04-19", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.18", + "v8": "3.18.0.0", + "uv": "0.11.1", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "0x000C", + "lts": false, + "security": false + }, + { + "version": "v0.11.0", + "date": "2013-03-28", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.15", + "v8": "3.17.13.0", + "uv": "0.10.3", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "0x000C", + "lts": false, + "security": false + }, + { + "version": "v0.10.48", + "date": "2016-10-18", + "files": [ + "headers", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.15.1", + "v8": "3.14.5.11", + "uv": "0.10.37", + "zlib": "1.2.8", + "openssl": "1.0.1u", + "modules": "11", + "lts": false, + "security": true + }, + { + "version": "v0.10.47", + "date": "2016-09-27", + "files": [ + "headers", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.15.1", + "v8": "3.14.5.11", + "uv": "0.10.37", + "zlib": "1.2.8", + "openssl": "1.0.1u", + "modules": "11", + "lts": false, + "security": true + }, + { + "version": "v0.10.46", + "date": "2016-06-23", + "files": [ + "headers", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.15.1", + "v8": "3.14.5.9", + "uv": "0.10.37", + "zlib": "1.2.8", + "openssl": "1.0.1t", + "modules": "11", + "lts": false, + "security": true + }, + { + "version": "v0.10.45", + "date": "2016-05-06", + "files": [ + "headers", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.15.1", + "v8": "3.14.5.9", + "uv": "0.10.36", + "zlib": "1.2.8", + "openssl": "1.0.1t", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.44", + "date": "2016-03-31", + "files": [ + "headers", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.15.0", + "v8": "3.14.5.9", + "uv": "0.10.36", + "zlib": "1.2.8", + "openssl": "1.0.1s", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.43", + "date": "2016-03-03", + "files": [ + "headers", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.4.29", + "v8": "3.14.5.9", + "uv": "0.10.36", + "zlib": "1.2.8", + "openssl": "1.0.1s", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.42", + "date": "2016-02-09", + "files": [ + "headers", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.4.29", + "v8": "3.14.5.9", + "uv": "0.10.36", + "zlib": "1.2.8", + "openssl": "1.0.1r", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.41", + "date": "2015-12-03", + "files": [ + "headers", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.4.29", + "v8": "3.14.5.9", + "uv": "0.10.36", + "zlib": "1.2.8", + "openssl": "1.0.1q", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.40", + "date": "2015-07-09", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.4.28", + "v8": "3.14.5.9", + "uv": "0.10.36", + "zlib": "1.2.8", + "openssl": "1.0.1p", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.39", + "date": "2015-06-19", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.4.28", + "v8": "3.14.5.9", + "uv": "0.10.36", + "zlib": "1.2.8", + "openssl": "1.0.1o", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.38", + "date": "2015-03-23", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.4.28", + "v8": "3.14.5.9", + "uv": "0.10.36", + "zlib": "1.2.8", + "openssl": "1.0.1m", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.37", + "date": "2015-03-11", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.4.28", + "v8": "3.14.5.9", + "uv": "0.10.36", + "zlib": "1.2.8", + "openssl": "1.0.1l", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.36", + "date": "2015-01-26", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.4.28", + "v8": "3.14.5.9", + "uv": "0.10.30", + "zlib": "1.2.8", + "openssl": "1.0.1l", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.35", + "date": "2014-12-22", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.4.28", + "v8": "3.14.5.9", + "uv": "0.10.30", + "zlib": "1.2.8", + "openssl": "1.0.1j", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.34", + "date": "2014-12-17", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.4.28", + "v8": "3.14.5.9", + "uv": "0.10.30", + "zlib": "1.2.8", + "openssl": "1.0.1j", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.33", + "date": "2014-10-21", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.4.28", + "v8": "3.14.5.9", + "uv": "0.10.29", + "zlib": "1.2.3", + "openssl": "1.0.1j", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.32", + "date": "2014-09-16", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.4.28", + "v8": "3.14.5.9", + "uv": "0.10.28", + "zlib": "1.2.3", + "openssl": "1.0.1i", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.31", + "date": "2014-08-19", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.4.23", + "v8": "3.14.5.9", + "uv": "0.10.28", + "zlib": "1.2.3", + "openssl": "1.0.1i", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.30", + "date": "2014-07-31", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.4.21", + "v8": "3.14.5.9", + "uv": "0.10.28", + "zlib": "1.2.3", + "openssl": "1.0.1h", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.29", + "date": "2014-06-09", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.4.14", + "v8": "3.14.5.9", + "uv": "0.10.27", + "zlib": "1.2.3", + "openssl": "1.0.1h", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.28", + "date": "2014-05-02", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.4.9", + "v8": "3.14.5.9", + "uv": "0.10.27", + "zlib": "1.2.3", + "openssl": "1.0.1g", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.27", + "date": "2014-05-01", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.4.8", + "v8": "3.14.5.9", + "uv": "0.10.27", + "zlib": "1.2.3", + "openssl": "1.0.1g", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.26", + "date": "2014-02-18", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.4.3", + "v8": "3.14.5.9", + "uv": "0.10.25", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.25", + "date": "2014-01-23", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.3.24", + "v8": "3.14.5.9", + "uv": "0.10.23", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.24", + "date": "2013-12-19", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.3.21", + "v8": "3.14.5.9", + "uv": "0.10.21", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.23", + "date": "2013-12-12", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.3.17", + "v8": "3.14.5.9", + "uv": "0.10.20", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.22", + "date": "2013-11-12", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.3.14", + "v8": "3.14.5.9", + "uv": "0.10.19", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.21", + "date": "2013-10-18", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.3.11", + "v8": "3.14.5.9", + "uv": "0.10.18", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.20", + "date": "2013-09-30", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.3.11", + "v8": "3.14.5.9", + "uv": "0.10.17", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.19", + "date": "2013-09-24", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.3.11", + "v8": "3.14.5.9", + "uv": "0.10.17", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.18", + "date": "2013-09-04", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.3.8", + "v8": "3.14.5.9", + "uv": "0.10.15", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.17", + "date": "2013-08-21", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.3.8", + "v8": "3.14.5.9", + "uv": "0.10.14", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.16", + "date": "2013-08-16", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.3.8", + "v8": "3.14.5.9", + "uv": "0.10.13", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.15", + "date": "2013-07-25", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.3.5", + "v8": "3.14.5.9", + "uv": "0.10.13", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.14", + "date": "2013-07-25", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.3.5", + "v8": "3.14.5.9", + "uv": "0.10.13", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.13", + "date": "2013-07-09", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.3.2", + "v8": "3.14.5.9", + "uv": "0.10.12", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.12", + "date": "2013-06-18", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.32", + "v8": "3.14.5.9", + "uv": "0.10.11", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.11", + "date": "2013-06-13", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.30", + "v8": "3.14.5.9", + "uv": "0.10.11", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.10", + "date": "2013-06-04", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.25", + "v8": "3.14.5.9", + "uv": "0.10.10", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.9", + "date": "2013-05-30", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.24", + "v8": "3.14.5.9", + "uv": "0.10.9", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.8", + "date": "2013-05-24", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.23", + "v8": "3.14.5.9", + "uv": "0.10.8", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.7", + "date": "2013-05-17", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.21", + "v8": "3.14.5.8", + "uv": "0.10.7", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.6", + "date": "2013-05-14", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.18", + "v8": "3.14.5.8", + "uv": "0.10.5", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.5", + "date": "2013-04-23", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.18", + "v8": "3.14.5.8", + "uv": "0.10.5", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.4", + "date": "2013-04-11", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.18", + "v8": "3.14.5.8", + "uv": "0.10.4", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.3", + "date": "2013-04-03", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.17", + "v8": "3.14.5.8", + "uv": "0.10.3", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "0x000B", + "lts": false, + "security": false + }, + { + "version": "v0.10.2", + "date": "2013-03-28", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.15", + "v8": "3.14.5.8", + "uv": "0.10.3", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "0x000B", + "lts": false, + "security": false + }, + { + "version": "v0.10.1", + "date": "2013-03-21", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.15", + "v8": "3.14.5.8", + "uv": "0.10", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "0x000B", + "lts": false, + "security": false + }, + { + "version": "v0.10.0", + "date": "2013-03-11", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.14", + "v8": "3.14.5.8", + "uv": "0.9", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "0x000B", + "lts": false, + "security": false + }, + { + "version": "v0.9.12", + "date": "2013-03-06", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.12", + "v8": "3.14.5.8", + "uv": "0.9", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "0x000B", + "lts": false, + "security": false + }, + { + "version": "v0.9.11", + "date": "2013-03-01", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.12", + "v8": "3.14.5.0", + "uv": "0.9", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "0x000B", + "lts": false, + "security": false + }, + { + "version": "v0.9.10", + "date": "2013-02-19", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.12", + "v8": "3.15.11.15", + "uv": "0.9", + "zlib": "1.2.3", + "openssl": "1.0.1c", + "modules": "0x000B", + "lts": false, + "security": false + }, + { + "version": "v0.9.9", + "date": "2013-02-07", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.10", + "v8": "3.15.11.10", + "uv": "0.9", + "zlib": "1.2.3", + "openssl": "1.0.1c", + "modules": "0x000B", + "lts": false, + "security": false + }, + { + "version": "v0.9.8", + "date": "2013-01-24", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.3", + "v8": "3.15.11.10", + "uv": "0.9", + "zlib": "1.2.3", + "openssl": "1.0.1c", + "modules": "0x000A", + "lts": false, + "security": false + }, + { + "version": "v0.9.7", + "date": "2013-01-18", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.2", + "v8": "3.15.11.7", + "uv": "0.9", + "zlib": "1.2.3", + "openssl": "1.0.1c", + "modules": "0x000A", + "lts": false, + "security": false + }, + { + "version": "v0.9.6", + "date": "2013-01-11", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.0", + "v8": "3.15.11.5", + "uv": "0.9", + "zlib": "1.2.3", + "openssl": "1.0.1c", + "modules": "0x000A", + "lts": false, + "security": false + }, + { + "version": "v0.9.5", + "date": "2012-12-30", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.1.70", + "v8": "3.13.7.4", + "uv": "0.9", + "zlib": "1.2.3", + "openssl": "1.0.1c", + "modules": "0x000A", + "lts": false, + "security": false + }, + { + "version": "v0.9.4", + "date": "2012-12-21", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.1.70", + "v8": "3.13.7.4", + "uv": "0.9", + "zlib": "1.2.3", + "openssl": "1.0.1c", + "modules": "0x000A", + "lts": false, + "security": false + }, + { + "version": "v0.9.3", + "date": "2012-10-24", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.1.64", + "v8": "3.13.7.4", + "uv": "0.9", + "zlib": "1.2.3", + "openssl": "1.0.1c", + "modules": "0x000A", + "lts": false, + "security": false + }, + { + "version": "v0.9.2", + "date": "2012-09-17", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.1.61", + "v8": "3.11.10.22", + "uv": "0.9", + "zlib": "1.2.3", + "openssl": "1.0.1c", + "modules": "0x000A", + "lts": false, + "security": false + }, + { + "version": "v0.9.1", + "date": "2012-08-28", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.1.59", + "v8": "3.11.10.19", + "uv": "0.9", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "0x000A", + "lts": false, + "security": false + }, + { + "version": "v0.9.0", + "date": "2012-07-20", + "files": [ + "osx-x64-pkg", + "src", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.1.44", + "v8": "3.11.10.15", + "uv": "0.9", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.28", + "date": "2014-07-31", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.30", + "v8": "3.11.10.26", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.27", + "date": "2014-06-09", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x86-msi" + ], + "npm": "1.2.30", + "v8": "3.11.10.26", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.26", + "date": "2013-10-18", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.30", + "v8": "3.11.10.26", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.25", + "date": "2013-06-13", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.30", + "v8": "3.11.10.25", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.24", + "date": "2013-06-03", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.24", + "v8": "3.11.10.25", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.23", + "date": "2013-04-09", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.18", + "v8": "3.11.10.25", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.22", + "date": "2013-03-06", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.14", + "v8": "3.11.10.25", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.21", + "date": "2013-02-25", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.11", + "v8": "3.11.10.25", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.20", + "date": "2013-02-15", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.11", + "v8": "3.11.10.25", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.19", + "date": "2013-02-06", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.10", + "v8": "3.11.10.25", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.18", + "date": "2013-01-18", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.2", + "v8": "3.11.10.25", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.17", + "date": "2013-01-10", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.0", + "v8": "3.11.10.25", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.16", + "date": "2012-12-12", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.1.69", + "v8": "3.11.10.25", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.15", + "date": "2012-11-26", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.1.66", + "v8": "3.11.10.25", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.14", + "date": "2012-10-25", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.1.65", + "v8": "3.11.10.25", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.13", + "date": "2012-10-25", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.1.65", + "v8": "3.11.10.25", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.12", + "date": "2012-10-11", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.1.63", + "v8": "3.11.10.22", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.11", + "date": "2012-09-27", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.1.62", + "v8": "3.11.10.22", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.10", + "date": "2012-09-25", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.1.62", + "v8": "3.11.10.22", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.9", + "date": "2012-09-11", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.1.61", + "v8": "3.11.10.22", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.8", + "date": "2012-08-22", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.1.59", + "v8": "3.11.10.19", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.7", + "date": "2012-08-15", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.1.49", + "v8": "3.11.10.17", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.6", + "date": "2012-08-06", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.1.48", + "v8": "3.11.10.17", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.5", + "date": "2012-08-02", + "files": [ + "osx-x64-pkg", + "src", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.1.46", + "v8": "3.11.10.17", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.4", + "date": "2012-07-24", + "files": [ + "osx-x64-pkg", + "src", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.1.45", + "v8": "3.11.10.17", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.3", + "date": "2012-07-17", + "files": [ + "osx-x64-pkg", + "src", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.1.43", + "v8": "3.11.10.15", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.2", + "date": "2012-07-09", + "files": [ + "osx-x64-pkg", + "src", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.1.36", + "v8": "3.11.10.14", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.1", + "date": "2012-06-29", + "files": [ + "osx-x64-pkg", + "src", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.1.33", + "v8": "3.11.10.12", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.0", + "date": "2012-06-22", + "files": [ + "osx-x64-pkg", + "src", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.1.32", + "v8": "3.11.10.10", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.7.12", + "date": "2012-06-19", + "files": [ + "osx-x64-pkg", + "src", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.1.30", + "v8": "3.11.10.0", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.7.11", + "date": "2012-06-15", + "files": [ + "osx-x64-pkg", + "src", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.1.26", + "v8": "3.11.10.0", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.7.10", + "date": "2012-06-11", + "files": [ + "osx-x64-pkg", + "src", + "win-x64-exe", + "win-x86-exe" + ], + "npm": "1.1.25", + "v8": "3.9.24.31", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.7.9", + "date": "2012-05-29", + "files": [ + "osx-x64-pkg", + "src", + "win-x64-exe", + "win-x86-exe" + ], + "npm": "1.1.23", + "v8": "3.11.1.0", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.7.8", + "date": "2012-04-18", + "files": [ + "osx-x64-pkg", + "src", + "win-x64-exe", + "win-x86-exe" + ], + "npm": "1.1.18", + "v8": "3.9.24.9", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.7.7", + "date": "2012-03-30", + "files": [ + "osx-x64-pkg", + "src", + "win-x64-exe", + "win-x86-exe" + ], + "npm": "1.1.15", + "v8": "3.9.24.7", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.7.6", + "date": "2012-03-13", + "files": [ + "osx-x64-pkg", + "src", + "win-x64-exe", + "win-x86-exe" + ], + "npm": "1.1.8", + "v8": "3.9.17.0", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.7.5", + "date": "2012-02-23", + "files": [ + "osx-x64-pkg", + "src", + "win-x64-exe", + "win-x86-exe" + ], + "npm": "1.1.1", + "v8": "3.9.5.0", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.7.4", + "date": "2012-02-14", + "files": [ + "osx-x64-pkg", + "src", + "win-x64-exe", + "win-x86-exe" + ], + "npm": "1.1.1", + "v8": "3.9.5.0", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.7.3", + "date": "2012-02-07", + "files": [ + "osx-x64-pkg", + "src", + "win-x86-exe" + ], + "npm": "1.1.0-3", + "v8": "3.9.2.0", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.7.2", + "date": "2012-02-01", + "files": [ + "osx-x64-pkg", + "src", + "win-x86-exe" + ], + "npm": "1.1.0-3", + "v8": "3.8.9.0", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.7.1", + "date": "2012-01-23", + "files": [ + "osx-x64-pkg", + "src", + "win-x86-exe" + ], + "npm": "1.1.0-2", + "v8": "3.8.8.0", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.7.0", + "date": "2012-01-17", + "files": [ + "osx-x64-pkg", + "src", + "win-x86-exe" + ], + "npm": "1.1.0-2", + "v8": "3.8.6.0", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.6.21", + "date": "2012-08-03", + "files": [ + "osx-x64-pkg", + "src", + "win-x64-exe", + "win-x86-exe" + ], + "npm": "1.1.37", + "v8": "3.6.6.25", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.6.20", + "date": "2012-07-10", + "files": [ + "osx-x64-pkg", + "src", + "win-x64-exe", + "win-x86-exe" + ], + "npm": "1.1.37", + "v8": "3.6.6.25", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.6.19", + "date": "2012-06-06", + "files": [ + "osx-x64-pkg", + "src", + "win-x64-exe", + "win-x86-exe" + ], + "npm": "1.1.24", + "v8": "3.6.6.25", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.6.18", + "date": "2012-05-14", + "files": [ + "osx-x64-pkg", + "src", + "win-x64-exe", + "win-x86-exe" + ], + "npm": "1.1.21", + "v8": "3.6.6.25", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.6.17", + "date": "2012-05-04", + "files": [ + "osx-x64-pkg", + "src", + "win-x64-exe", + "win-x86-exe" + ], + "npm": "1.1.21", + "v8": "3.6.6.25", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.6.16", + "date": "2012-04-27", + "files": [ + "osx-x64-pkg", + "src", + "win-x64-exe", + "win-x86-exe" + ], + "npm": "1.1.19", + "v8": "3.6.6.25", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.6.15", + "date": "2012-04-08", + "files": [ + "osx-x64-pkg", + "src", + "win-x64-exe", + "win-x86-exe" + ], + "npm": "1.1.16", + "v8": "3.6.6.24", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.6.14", + "date": "2012-03-23", + "files": [ + "osx-x64-pkg", + "src", + "win-x64-exe", + "win-x86-exe" + ], + "npm": "1.1.12", + "v8": "3.6.6.24", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.6.13", + "date": "2012-03-15", + "files": [ + "osx-x64-pkg", + "src", + "win-x64-exe", + "win-x86-exe" + ], + "npm": "1.1.9", + "v8": "3.6.6.24", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.6.12", + "date": "2012-03-02", + "files": [ + "osx-x64-pkg", + "src", + "win-x86-exe" + ], + "npm": "1.1.4", + "v8": "3.6.6.24", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.6.11", + "date": "2012-02-08", + "files": [ + "osx-x64-pkg", + "src", + "win-x86-exe" + ], + "npm": "1.1.1", + "v8": "3.6.6.20", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.6.10", + "date": "2012-02-03", + "files": [ + "osx-x64-pkg", + "src", + "win-x86-exe" + ], + "npm": "1.1.0-3", + "v8": "3.6.6.20", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.6.9", + "date": "2012-01-27", + "files": [ + "osx-x64-pkg", + "src", + "win-x86-exe" + ], + "npm": "1.1.0-3", + "v8": "3.6.6.19", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.6.8", + "date": "2012-01-20", + "files": [ + "osx-x64-pkg", + "src", + "win-x86-exe" + ], + "npm": "1.1.0-2", + "v8": "3.6.6.19", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.6.7", + "date": "2012-01-07", + "files": [ + "osx-x64-pkg", + "src", + "win-x86-exe" + ], + "npm": "1.1.0-beta-10", + "v8": "3.6.6.15", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.6.6", + "date": "2011-12-15", + "files": [ + "osx-x64-pkg", + "src", + "win-x86-exe" + ], + "npm": "1.1.0-beta-4", + "v8": "3.6.6.14", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.6.5", + "date": "2011-12-04", + "files": [ + "osx-x64-pkg", + "src", + "win-x86-exe" + ], + "npm": "1.1.0-alpha-6", + "v8": "3.6.6.11", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.6.4", + "date": "2011-12-02", + "files": [ + "osx-x64-pkg", + "src", + "win-x86-exe" + ], + "npm": "1.1.0-alpha-6", + "v8": "3.6.6.8", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.6.3", + "date": "2011-11-25", + "files": [ + "osx-x64-pkg", + "src", + "win-x86-exe" + ], + "npm": "1.1.0-alpha-2", + "v8": "3.6.6.8", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.6.2", + "date": "2011-11-18", + "files": [ + "osx-x64-pkg", + "src", + "win-x86-exe" + ], + "v8": "3.6.6.8", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.6.1", + "date": "2011-11-11", + "files": [ + "osx-x64-pkg", + "src", + "win-x86-exe" + ], + "v8": "3.6.6.7", + "uv": "0.1", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.6.0", + "date": "2011-11-04", + "files": [ + "src", + "win-x86-exe" + ], + "v8": "3.6.6.6", + "uv": "0.1", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.5.10", + "date": "2011-10-22", + "files": [ + "src", + "win-x86-exe" + ], + "v8": "3.7.0.0", + "uv": "0.1", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.5.9", + "date": "2011-10-11", + "files": [ + "src", + "win-x86-exe" + ], + "v8": "3.6.4.0", + "uv": "0.1", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.5.8", + "date": "2011-09-30", + "files": [ + "src", + "win-x86-exe" + ], + "v8": "3.6.4.0", + "uv": "0.1", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.5.7", + "date": "2011-09-16", + "files": [ + "src", + "win-x86-exe" + ], + "v8": "3.6.4.0", + "uv": "0.1", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.5.6", + "date": "2011-08-26", + "files": [ + "src", + "win-x86-exe" + ], + "v8": "3.6.2.0", + "uv": "0.1", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.5.5", + "date": "2011-08-26", + "files": [ + "src", + "win-x86-exe" + ], + "v8": "3.5.8.0", + "uv": "0.1", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.5.4", + "date": "2011-08-26", + "files": [ + "src", + "win-x86-exe" + ], + "v8": "3.5.4.3", + "uv": "0.1", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.5.3", + "date": "2011-08-26", + "files": [ + "src", + "win-x86-exe" + ], + "v8": "3.4.14.0", + "uv": "0.1", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.5.2", + "date": "2011-08-26", + "files": [ + "src", + "win-x86-exe" + ], + "v8": "3.4.14.0", + "uv": "0.1", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.5.1", + "date": "2011-08-26", + "files": [ + "src", + "win-x86-exe" + ], + "v8": "3.4.10.0", + "uv": "0.1", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.5.0", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "3.1.8.25", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.4.12", + "date": "2011-09-15", + "files": [ + "src" + ], + "v8": "3.1.8.26", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.4.11", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "3.1.8.26", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.4.10", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "3.1.8.26", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.4.9", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "3.1.8.25", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.4.8", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "3.1.8.16", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.4.7", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "3.1.8.10", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.4.6", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "3.1.8.10", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.4.5", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "3.1.8.8", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.4.4", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "3.1.8.5", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.4.3", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "3.1.8.3", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.4.2", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "3.1.8.0", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.4.1", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "3.1.5.0", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.4.0", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "3.1.2.0", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.3.8", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "3.1.1.0", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.3.7", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "3.0.10.0", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.3.6", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "3.0.9.0", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.3.5", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "3.0.4.1", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.3.4", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "3.0.4.1", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.3.3", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "3.0.4.1", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.3.2", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "3.0.3.0", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.3.1", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.5.3.0", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.3.0", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.5.1.0", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.2.6", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.3.8.0", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.2.5", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.3.8.0", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.2.4", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.3.8.0", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.2.3", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.3.8.0", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.2.2", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.3.8.0", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.2.1", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.3.8.0", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.2.0", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.3.8.0", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.1.104", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.3.6.1", + "lts": false, + "security": false + }, + { + "version": "v0.1.103", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.3.5.0", + "lts": false, + "security": false + }, + { + "version": "v0.1.102", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.3.2.0", + "lts": false, + "security": false + }, + { + "version": "v0.1.101", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.3.0.0", + "lts": false, + "security": false + }, + { + "version": "v0.1.100", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.2.21.0", + "lts": false, + "security": false + }, + { + "version": "v0.1.99", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.2.18.0", + "lts": false, + "security": false + }, + { + "version": "v0.1.98", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.2.16.0", + "lts": false, + "security": false + }, + { + "version": "v0.1.97", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.2.12.0", + "lts": false, + "security": false + }, + { + "version": "v0.1.96", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.2.0", + "lts": false, + "security": false + }, + { + "version": "v0.1.95", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.2.0", + "lts": false, + "security": false + }, + { + "version": "v0.1.94", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.2.8.0", + "lts": false, + "security": false + }, + { + "version": "v0.1.93", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.2.6.0", + "lts": false, + "security": false + }, + { + "version": "v0.1.92", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.2.4.2", + "lts": false, + "security": false + }, + { + "version": "v0.1.91", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.2.3.1", + "lts": false, + "security": false + }, + { + "version": "v0.1.90", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.2.0.3", + "lts": false, + "security": false + }, + { + "version": "v0.1.33", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.1.6.0", + "lts": false, + "security": false + }, + { + "version": "v0.1.32", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.1.3.0", + "lts": false, + "security": false + }, + { + "version": "v0.1.31", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.1.2.0", + "lts": false, + "security": false + }, + { + "version": "v0.1.30", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.1.1.1", + "lts": false, + "security": false + }, + { + "version": "v0.1.29", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.1.0.0", + "lts": false, + "security": false + }, + { + "version": "v0.1.28", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.1.0.0", + "lts": false, + "security": false + }, + { + "version": "v0.1.27", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.1.0.0", + "lts": false, + "security": false + }, + { + "version": "v0.1.26", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.0.6.1", + "lts": false, + "security": false + }, + { + "version": "v0.1.25", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.0.5.4", + "lts": false, + "security": false + }, + { + "version": "v0.1.24", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.0.5.4", + "lts": false, + "security": false + }, + { + "version": "v0.1.23", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.0.0", + "lts": false, + "security": false + }, + { + "version": "v0.1.22", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.0.0", + "lts": false, + "security": false + }, + { + "version": "v0.1.21", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.0.0", + "lts": false, + "security": false + }, + { + "version": "v0.1.20", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.0.2.0", + "lts": false, + "security": false + }, + { + "version": "v0.1.19", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.0.2.0", + "lts": false, + "security": false + }, + { + "version": "v0.1.18", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "1.3.18.0", + "lts": false, + "security": false + }, + { + "version": "v0.1.17", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "1.3.18.0", + "lts": false, + "security": false + }, + { + "version": "v0.1.16", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "1.3.18.0", + "lts": false, + "security": false + }, + { + "version": "v0.1.15", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "1.3.16.0", + "lts": false, + "security": false + }, + { + "version": "v0.1.14", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "1.3.15.0", + "lts": false, + "security": false + } +] \ No newline at end of file diff --git a/_generated/UseNodeV1/Tests/L0FirstDownloadSuccess.ts b/_generated/UseNodeV1/Tests/L0FirstDownloadSuccess.ts new file mode 100644 index 000000000000..280eb03ab4ad --- /dev/null +++ b/_generated/UseNodeV1/Tests/L0FirstDownloadSuccess.ts @@ -0,0 +1,140 @@ +import { IRestResponse, IRequestOptions, RestClient } from 'typed-rest-client/RestClient'; +import * as ifm from 'typed-rest-client/Interfaces'; +import ma = require('azure-pipelines-task-lib/mock-answer'); +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import taskLib = require('azure-pipelines-task-lib/task'); +import fs = require('fs'); +import os = require('os'); +import path = require('path'); + +let taskPath = path.join(__dirname, '..', 'usenode.js'); +let tmr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +let a: ma.TaskLibAnswers = { + "assertAgent": { + "2.115.1": true + }}; +tmr.setAnswers(a); + + +//Create assertAgent and getVariable mocks +const tl = require('azure-pipelines-task-lib/mock-task'); +const tlClone = Object.assign({}, tl); +tlClone.getInput = function (inputName: string, required?: boolean) { + inputName = inputName.toLowerCase(); + if (inputName === 'version') { + return '11.3.0'; + } + if (inputName === 'checkLatest') { + return 'false'; + } + return tl.getInput(inputName, required); +} +tlClone.getVariable = function(variable: string) { + if (variable.toLowerCase() == 'agent.tempdirectory') { + return 'temp'; + } + return null; +}; +tlClone.assertAgent = function(variable: string) { + return; +}; +tlClone.setSecret = function(password){ + console.log('Setting secret', password); +}; +tlClone.setVariable = function(key, val) { + console.log('Setting', key, 'to', val); +}; +if (process.env["__proxy__"]) { + tlClone.getHttpProxyConfiguration = function(requestUrl?: string): taskLib.ProxyConfiguration | null { + return { proxyUrl: 'http://url.com', proxyUsername: 'username', proxyPassword: 'password', proxyBypassHosts: null, proxyFormattedUrl: 'http://username:password@url.com'}; + } +} +tmr.registerMock('azure-pipelines-task-lib/mock-task', tlClone); + +if (process.env['__proxy__']) { + tmr.registerMock('typed-rest-client/RestClient', { + RestClient: function(userAgent: string, baseUrl?: string, handlers?: ifm.IRequestHandler[], requestOptions?: ifm.IRequestOptions) { + return { + userAgent: userAgent, + baseUrl: baseUrl, + handlers: handlers, + requestOptions: requestOptions, + get: async function(resource: string, options?: IRequestOptions): Promise> { + if (resource != 'https://nodejs.org/dist/index.json') { + throw new Error(`Reading version from wrong url: ${resource}`); + } + if (!requestOptions || !requestOptions.proxy) { + throw new Error('Proxy not set up in RestClient'); + } + let response: IRestResponse = { result: require('./L0FakeIndex.json') as T, statusCode: 200 } as IRestResponse; + return response; + } + }; + } + }); +} + +//Create tool-lib mock +tmr.registerMock('azure-pipelines-tool-lib/tool', { + isExplicitVersion: function(versionSpec) { + return false; + }, + findLocalTool: function(toolName, versionSpec) { + if (toolName != 'node') { + throw new Error('Searching for wrong tool'); + } + return false; + }, + evaluateVersions: function(versions, versionSpec) { + let version: string; + for (let i = versions.length - 1; i >= 0; i--) { + let potential: string = versions[i]; + let satisfied: boolean = potential === '11.3.0'; + if (satisfied) { + version = potential; + break; + } + } + return version; + }, + cleanVersion: function(version) { + return '11.3.0'; + }, + downloadTool(url) { + if (url === `https://nodejs.org/dist/v11.3.0/node-v11.3.0-win-${os.arch()}.7z` || + url === `https://nodejs.org/dist/v11.3.0/node-v11.3.0-${os.platform()}-${os.arch()}.tar.gz`) { + return 'location'; + } + else { + throw new Error('Incorrect URL'); + } + }, + extract7z(downloadPath, extPath, _7zPath) { + return 'extPath'; + }, + extractTar(downloadPath, extPath, _7zPath) { + return 'extPath'; + }, + cacheDir(dir, tool, version) { + return 'path to tool'; + }, + prependPath(toolPath) { + return; + } +}); + +const fsClone = fs; +fsClone.existsSync = function(pathToFile: string): boolean { + if (pathToFile !== path.resolve(process.cwd(), '.npmrc')) { + return fs.existsSync(pathToFile); + } + return false; +}; +fsClone.writeFileSync = function(path: string, data: any, options: fs.WriteFileOptions) { + console.log('Writing file to path', path); + console.log(data); +}; +tmr.registerMock('fs', fsClone); + +tmr.run(); \ No newline at end of file diff --git a/_generated/UseNodeV1/Tests/L0GetsLatestVersion.ts b/_generated/UseNodeV1/Tests/L0GetsLatestVersion.ts new file mode 100644 index 000000000000..9cfef33a860f --- /dev/null +++ b/_generated/UseNodeV1/Tests/L0GetsLatestVersion.ts @@ -0,0 +1,52 @@ +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import assert = require('assert'); +import path = require('path'); + +let taskPath = path.join(__dirname, '..', 'usenode.js'); +let tmr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tmr.setInput('version', '>=12.0.0'); +tmr.setInput('checkLatest', 'true'); + +//Create tool-lib mock +tmr.registerMock('azure-pipelines-tool-lib/tool', { + isExplicitVersion: function() { + return false; + }, + evaluateVersions: function(versions: string[], versionSpec) { + const invalidVersions = versions.filter(v => !/^\d+\.\d+\.\d+$/.test(v)); + assert(invalidVersions.length === 0, "Invalid versions passed to evaluateVersions"); + return "12.8.0"; + }, + cleanVersion: function(version: string) { + return version.replace(/^v/i, ""); + }, + findLocalTool: function(toolName, versionSpec) { + assert(versionSpec === "v12.8.0", "Version returned should begin with 'v'"); + return "/path/to/node"; + }, + prependPath(toolPath) { + return; + } +}); + +tmr.registerMock('typed-rest-client/RestClient', { + RestClient: function() { + return { + get: async function(url, options) { + const versions = [ + {"version":"v12.8.0","date":"2019-08-06","files":["aix-ppc64","headers","linux-arm64","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-x64-pkg","osx-x64-tar","src","sunos-x64","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"npm":"6.10.2","v8":"7.5.288.22","uv":"1.30.1","zlib":"1.2.11","openssl":"1.1.1c","modules":"72","lts":false,"security":false}, + {"version":"v12.7.0","date":"2019-07-23","files":["aix-ppc64","headers","linux-arm64","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-x64-pkg","osx-x64-tar","src","sunos-x64","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"npm":"6.10.0","v8":"7.5.288.22","uv":"1.30.1","zlib":"1.2.11","openssl":"1.1.1c","modules":"72","lts":false,"security":false}, + {"version":"v11.15.0","date":"2019-04-30","files":["aix-ppc64","headers","linux-arm64","linux-armv6l","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-x64-pkg","osx-x64-tar","src","sunos-x64","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"npm":"6.7.0","v8":"7.0.276.38","uv":"1.27.0","zlib":"1.2.11","openssl":"1.1.1b","modules":"67","lts":false,"security":false}, + {"version":"v11.14.0","date":"2019-04-10","files":["aix-ppc64","headers","linux-arm64","linux-armv6l","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-x64-pkg","osx-x64-tar","src","sunos-x64","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"npm":"6.7.0","v8":"7.0.276.38","uv":"1.27.0","zlib":"1.2.11","openssl":"1.1.1b","modules":"67","lts":false,"security":false} + ] + + return { + result: versions + }; + } + } + } +}); + +tmr.run(); \ No newline at end of file diff --git a/_generated/UseNodeV1/Tests/L0SecondDownloadSuccess.ts b/_generated/UseNodeV1/Tests/L0SecondDownloadSuccess.ts new file mode 100644 index 000000000000..5dc25bbd2a87 --- /dev/null +++ b/_generated/UseNodeV1/Tests/L0SecondDownloadSuccess.ts @@ -0,0 +1,90 @@ +import ma = require('azure-pipelines-task-lib/mock-answer'); +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import os = require('os'); +import path = require('path'); + +let taskPath = path.join(__dirname, '..', 'usenode.js'); +let tmr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tmr.setInput('version', '5.10.1'); +tmr.setInput('checkLatest', 'false'); + +let a: ma.TaskLibAnswers = { + "assertAgent": { + "2.115.1": true + }}; +tmr.setAnswers(a); + + +//Create assertAgent and getVariable mocks +const tl = require('azure-pipelines-task-lib/mock-task'); +const tlClone = Object.assign({}, tl); +tlClone.getVariable = function(variable: string) { + if (variable.toLowerCase() == 'agent.tempdirectory') { + return 'temp'; + } + return null; +}; +tlClone.assertAgent = function(variable: string) { + return; +}; +tmr.registerMock('azure-pipelines-task-lib/mock-task', tlClone); + +//Create tool-lib mock +tmr.registerMock('azure-pipelines-tool-lib/tool', { + isExplicitVersion: function(versionSpec) { + return false; + }, + findLocalTool: function(toolName, versionSpec) { + if (toolName != 'node') { + throw new Error('Searching for wrong tool'); + } + return false; + }, + evaluateVersions: function(versions, versionSpec) { + let version: string; + for (let i = versions.length - 1; i >= 0; i--) { + let potential: string = versions[i]; + let satisfied: boolean = potential === '5.10.1'; + if (satisfied) { + version = potential; + break; + } + } + return version; + }, + cleanVersion: function(version) { + return '5.10.1'; + }, + downloadTool(url) { + if (url === `https://nodejs.org/dist/v5.10.1/node-v5.10.1-win-${os.arch()}.7z` || + url === `https://nodejs.org/dist/v5.10.1/node-v5.10.1-${os.platform()}-${os.arch()}.tar.gz`) { + let err = new Error(); + err['httpStatusCode'] = '404'; + throw err; + } + else if (url === `https://nodejs.org/dist/v5.10.1/win-${os.arch()}/node.exe`) { + return 'exe_loc'; + } + else if (url === `https://nodejs.org/dist/v5.10.1/win-${os.arch()}/node.lib`) { + return 'exe_lib'; + } + else { + throw new Error('Incorrect URL'); + } + }, + extract7z(downloadPath, extPath, _7zPath) { + return 'extPath'; + }, + extractTar(downloadPath, extPath, _7zPath) { + return 'extPath'; + }, + cacheDir(dir, tool, version) { + return 'path to tool'; + }, + prependPath(toolPath) { + return; + } +}); + +tmr.run(); \ No newline at end of file diff --git a/_generated/UseNodeV1/Tests/L0ThirdDownloadSuccess.ts b/_generated/UseNodeV1/Tests/L0ThirdDownloadSuccess.ts new file mode 100644 index 000000000000..b4d8e0bb3bd8 --- /dev/null +++ b/_generated/UseNodeV1/Tests/L0ThirdDownloadSuccess.ts @@ -0,0 +1,96 @@ +import ma = require('azure-pipelines-task-lib/mock-answer'); +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import os = require('os'); +import path = require('path'); + +let taskPath = path.join(__dirname, '..', 'usenode.js'); +let tmr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tmr.setInput('version', '0.12.18'); +tmr.setInput('checkLatest', 'false'); + +let a: ma.TaskLibAnswers = { + "assertAgent": { + "2.115.1": true + }}; +tmr.setAnswers(a); + + +//Create assertAgent and getVariable mocks +const tl = require('azure-pipelines-task-lib/mock-task'); +const tlClone = Object.assign({}, tl); +tlClone.getVariable = function(variable: string) { + if (variable.toLowerCase() == 'agent.tempdirectory') { + return 'temp'; + } + return null; +}; +tlClone.assertAgent = function(variable: string) { + return; +}; +tmr.registerMock('azure-pipelines-task-lib/mock-task', tlClone); + +//Create tool-lib mock +tmr.registerMock('azure-pipelines-tool-lib/tool', { + isExplicitVersion: function(versionSpec) { + return false; + }, + findLocalTool: function(toolName, versionSpec) { + if (toolName != 'node') { + throw new Error('Searching for wrong tool'); + } + return false; + }, + evaluateVersions: function(versions, versionSpec) { + let version: string; + for (let i = versions.length - 1; i >= 0; i--) { + let potential: string = versions[i]; + let satisfied: boolean = potential === '0.12.18'; + if (satisfied) { + version = potential; + break; + } + } + return version; + }, + cleanVersion: function(version) { + return '0.12.18'; + }, + downloadTool(url) { + let err = new Error(); + err['httpStatusCode'] = '404'; + if (url === `https://nodejs.org/dist/v0.12.18/node-v0.12.18-win-${os.arch()}.7z` || + url === `https://nodejs.org/dist/v0.12.18/node-v0.12.18-${os.platform()}-${os.arch()}.tar.gz`) { + throw err; + } + else if (url === `https://nodejs.org/dist/v0.12.18/win-${os.arch()}/node.exe`) { + throw err; + } + else if (url === `https://nodejs.org/dist/v0.12.18/win-${os.arch()}/node.lib`) { + throw err; + } + else if (url === `https://nodejs.org/dist/v0.12.18/node.exe`) { + return 'exe_loc'; + } + else if (url === `https://nodejs.org/dist/v0.12.18/node.lib`) { + return 'exe_lib'; + } + else { + throw new Error('Incorrect URL'); + } + }, + extract7z(downloadPath, extPath, _7zPath) { + return 'extPath'; + }, + extractTar(downloadPath, extPath, _7zPath) { + return 'extPath'; + }, + cacheDir(dir, tool, version) { + return 'path to tool'; + }, + prependPath(toolPath) { + return; + } +}); + +tmr.run(); \ No newline at end of file diff --git a/_generated/UseNodeV1/icon.png b/_generated/UseNodeV1/icon.png new file mode 100644 index 000000000000..ccbddf54c6c9 Binary files /dev/null and b/_generated/UseNodeV1/icon.png differ diff --git a/_generated/UseNodeV1/icon.svg b/_generated/UseNodeV1/icon.svg new file mode 100644 index 000000000000..9522fcc4bbb6 --- /dev/null +++ b/_generated/UseNodeV1/icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/_generated/UseNodeV1/installer.ts b/_generated/UseNodeV1/installer.ts new file mode 100644 index 000000000000..4ffbff5ec24a --- /dev/null +++ b/_generated/UseNodeV1/installer.ts @@ -0,0 +1,250 @@ +import * as taskLib from 'azure-pipelines-task-lib/task'; +import * as toolLib from 'azure-pipelines-tool-lib/tool'; +import * as telemetry from 'azure-pipelines-tasks-utility-common/telemetry'; +import * as restm from 'typed-rest-client/RestClient'; +import * as ifm from 'typed-rest-client/Interfaces'; +import * as os from 'os'; +import * as path from 'path'; + +const osPlat: string = os.platform(); +// Don't use `os.arch()` to construct download URLs, +// Node.js uses a different set of arch identifiers for those. +const force32bit: boolean = taskLib.getBoolInput('force32bit', false); +const osArch: string = (os.arch() === 'ia32' || force32bit) ? 'x86' : os.arch(); + +// +// Node versions interface +// see https://nodejs.org/dist/index.json +// +interface INodeVersion { + version: string, + files: string[], + semanticVersion: string +} + +// +// Basic pattern: +// if !checkLatest +// toolPath = check cache +// if !toolPath +// if version is a range +// match = query nodejs.org +// if !match +// fail +// toolPath = check cache +// if !toolPath +// download, extract, and cache +// toolPath = cacheDir +// PATH = cacheDir + PATH +// +export async function getNode(versionSpec: string, checkLatest: boolean) { + let installedArch = osArch; + + if (toolLib.isExplicitVersion(versionSpec)) { + checkLatest = false; // check latest doesn't make sense when explicit version + } + + // check cache + let toolPath: string; + if (!checkLatest) { + toolPath = toolLib.findLocalTool('node', versionSpec, installedArch); + + // In case if it's darwin arm and toolPath is empty trying to find x64 version + if (!toolPath && isDarwinArm(osPlat, installedArch)) { + toolPath = toolLib.findLocalTool('node', versionSpec, 'x64'); + } + } + + if (!toolPath) { + let version: string; + if (toolLib.isExplicitVersion(versionSpec)) { + // version to download + version = versionSpec; + } else { + // query nodejs.org for a matching version + version = await queryLatestMatch(versionSpec, installedArch); + + if (!version && isDarwinArm(osPlat, installedArch)) { + // nodejs.org does not have an arm64 build for macOS, so we fall back to x64 + console.log(taskLib.loc('TryRosetta', osPlat, installedArch)); + + version = await queryLatestMatch(versionSpec, 'x64'); + installedArch = 'x64'; + } + + if (!version) { + throw new Error(taskLib.loc('NodeVersionNotFound', versionSpec, osPlat, installedArch)); + } + + // check cache + toolPath = toolLib.findLocalTool('node', version, installedArch) + } + + if (!toolPath) { + // download, extract, cache + toolPath = await acquireNode(version, installedArch); + } + } + + // + // a tool installer initimately knows details about the layout of that tool + // for example, node binary is in the bin folder after the extract on Mac/Linux. + // layouts could change by version, by platform etc... but that's the tool installers job + // + if (osPlat != 'win32') { + toolPath = path.join(toolPath, 'bin'); + } + + // + // prepend the tools path. instructs the agent to prepend for future tasks + // + toolLib.prependPath(toolPath); + telemetry.emitTelemetry('TaskHub', 'UseNodeV1', { + versionSpec, + checkLatest, + force32bit + }); +} + +async function queryLatestMatch(versionSpec: string, installedArch: string): Promise { + // node offers a json list of versions + let dataFileName: string; + switch (osPlat) { + case 'linux': dataFileName = 'linux-' + installedArch; break; + case 'darwin': dataFileName = 'osx-' + installedArch + '-tar'; break; + case 'win32': dataFileName = 'win-' + installedArch + '-exe'; break; + default: throw new Error(taskLib.loc('UnexpectedOS', osPlat)); + } + + const versions: string[] = []; + const dataUrl = 'https://nodejs.org/dist/index.json'; + const proxyRequestOptions: ifm.IRequestOptions = { + proxy: taskLib.getHttpProxyConfiguration(dataUrl), + cert: taskLib.getHttpCertConfiguration(), + ignoreSslError: !!taskLib.getVariable('Agent.SkipCertValidation') + }; + const rest: restm.RestClient = new restm.RestClient('vsts-node-tool', undefined, undefined, proxyRequestOptions); + const nodeVersions: INodeVersion[] = (await rest.get(dataUrl)).result; + nodeVersions.forEach((nodeVersion:INodeVersion) => { + // ensure this version supports your os and platform + if (nodeVersion.files.indexOf(dataFileName) >= 0) { + // versions in the file are prefixed with 'v', which is not valid SemVer + // remove 'v' so that toolLib.evaluateVersions behaves properly + nodeVersion.semanticVersion = toolLib.cleanVersion(nodeVersion.version); + versions.push(nodeVersion.semanticVersion); + } + }); + + // get the latest version that matches the version spec + const latestVersion: string = toolLib.evaluateVersions(versions, versionSpec); + // In case if that we had not found version that match + if (!latestVersion) return null; + + return nodeVersions.find(v => v.semanticVersion === latestVersion).version; +} + +async function acquireNode(version: string, installedArch: string): Promise { + // + // Download - a tool installer intimately knows how to get the tool (and construct urls) + // + version = toolLib.cleanVersion(version); + + const isWin32: boolean = osPlat == 'win32'; + + const platform: string = isWin32 ? 'win' : osPlat; + + const fileName: string = `node-v${version}-${platform}-${installedArch}`; + + const fileExtension: string = isWin32 ? '.7z' : '.tar.gz'; + + const downloadUrl: string = `https://nodejs.org/dist/v${version}/${fileName}${fileExtension}`; + + let downloadPath: string; + + try { + downloadPath = await toolLib.downloadTool(downloadUrl); + } catch (err) { + if (isWin32 && err['httpStatusCode'] == 404) { + return await acquireNodeFromFallbackLocation(version); + } + + throw err; + } + + // + // Extract + // + let extPath: string; + + if (isWin32) { + extPath = taskLib.getVariable('Agent.TempDirectory'); + if (!extPath) { + throw new Error(taskLib.loc('AgentTempDirNotSet')); + } + + const _7zPath = path.join(__dirname, '7zr.exe'); + extPath = await toolLib.extract7z(downloadPath, extPath, _7zPath); + } + else { + extPath = await toolLib.extractTar(downloadPath); + } + + // + // Install into the local tool cache - node extracts with a root folder that matches the fileName downloaded + // + const toolRoot = path.join(extPath, fileName); + return await toolLib.cacheDir(toolRoot, 'node', version, installedArch); +} + +// For non LTS versions of Node, the files we need (for Windows) are sometimes located +// in a different folder than they normally are for other versions. +// Normally the format is similar to: https://nodejs.org/dist/v5.10.1/node-v5.10.1-win-x64.7z +// In this case, there will be two files located at: +// /dist/v5.10.1/win-x64/node.exe +// /dist/v5.10.1/win-x64/node.lib +// If this is not the structure, there may also be two files located at: +// /dist/v0.12.18/node.exe +// /dist/v0.12.18/node.lib +// This method attempts to download and cache the resources from these alternative locations. +// Note also that the files are normally zipped but in this case they are just an exe +// and lib file in a folder, not zipped. +async function acquireNodeFromFallbackLocation(version: string): Promise { + // Create temporary folder to download in to + const tempDownloadFolder: string = 'temp_' + Math.floor(Math.random() * 2e9); + const tempDir: string = path.join(taskLib.getVariable('agent.tempDirectory'), tempDownloadFolder); + taskLib.mkdirP(tempDir); + + let exeUrl: string; + let libUrl: string; + try { + exeUrl = `https://nodejs.org/dist/v${version}/win-${osArch}/node.exe`; + libUrl = `https://nodejs.org/dist/v${version}/win-${osArch}/node.lib`; + + await toolLib.downloadTool(exeUrl, path.join(tempDir, 'node.exe')); + await toolLib.downloadTool(libUrl, path.join(tempDir, 'node.lib')); + } + catch (err) { + if (err['httpStatusCode'] && + err['httpStatusCode'] === '404') { + exeUrl = `https://nodejs.org/dist/v${version}/node.exe`; + libUrl = `https://nodejs.org/dist/v${version}/node.lib`; + + await toolLib.downloadTool(exeUrl, path.join(tempDir, 'node.exe')); + await toolLib.downloadTool(libUrl, path.join(tempDir, 'node.lib')); + } + else { + throw err; + } + } + return await toolLib.cacheDir(tempDir, 'node', version, osArch); +} + +// Check is the system are darwin arm and rosetta is installed +function isDarwinArm(osPlat: string, installedArch: string): boolean { + if (osPlat === 'darwin' && installedArch === 'arm64') { + // Check that Rosetta is installed and returns some pid + const execResult = taskLib.execSync('pgrep', 'oahd'); + return execResult.code === 0 && !!execResult.stdout; + } + return false; +} \ No newline at end of file diff --git a/_generated/UseNodeV1/make.json b/_generated/UseNodeV1/make.json new file mode 100644 index 000000000000..c58a8680a274 --- /dev/null +++ b/_generated/UseNodeV1/make.json @@ -0,0 +1,20 @@ +{ + "externals": { + "archivePackages": [ + { + "archiveName": "7zr.zip", + "url": "https://vstsagenttools.blob.core.windows.net/tools/7zr/1805_x86/7zr.zip", + "dest": "./" + } + ] + }, + "rm": [ + { + "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" + ], + "options": "-Rf" + } + ] +} \ No newline at end of file diff --git a/_generated/UseNodeV1/package-lock.json b/_generated/UseNodeV1/package-lock.json new file mode 100644 index 000000000000..374531916da5 --- /dev/null +++ b/_generated/UseNodeV1/package-lock.json @@ -0,0 +1,614 @@ +{ + "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": "16.11.65", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.65.tgz", + "integrity": "sha512-Vfz7wGMOr4jbQGiQHVJm8VjeQwM9Ya7mHe9LtQ264/Epf5n1KiZShOFqk++nBzw6a/ubgYdB9Od7P+MH/LjoWw==" + }, + "@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==" + }, + "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" + }, + "dependencies": { + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + } + } + }, + "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" + } + }, + "azure-pipelines-tasks-utility-common": { + "version": "3.219.1", + "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-utility-common/-/azure-pipelines-tasks-utility-common-3.219.1.tgz", + "integrity": "sha512-VyssHbJQ40aRBq1m0oSG4XCesbRPzsH3Ao8lohmsQZl+GN17TeCnKmr/OoVYsqgtG9TEw59pG4WYW++lsLeeew==", + "requires": { + "@types/node": "^16.11.39", + "azure-pipelines-task-lib": "^4.0.0-preview", + "azure-pipelines-tool-lib": "^2.0.0-preview", + "js-yaml": "3.13.1", + "semver": "^5.4.1" + }, + "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" + } + } + } + }, + "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": { + "azure-pipelines-task-lib": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.3.1.tgz", + "integrity": "sha512-AEwz0+Sofv80UviCYsS6fzyX5zzsLapmNCMNUoaRePZQVN+oQBStix1DGg4fdZf9zJ6acNd9xEBZQWbWuZu5Zg==", + "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==" + } + } + }, + "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.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==" + }, + "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.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==" + }, + "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" + } + }, + "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/UseNodeV1/package.json b/_generated/UseNodeV1/package.json new file mode 100644 index 000000000000..76d340749d51 --- /dev/null +++ b/_generated/UseNodeV1/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": "^16.11.39", + "@types/q": "^1.5.1", + "azure-pipelines-task-lib": "^5.0.0-preview.0", + "azure-pipelines-tasks-utility-common": "^3.219.1", + "azure-pipelines-tool-lib": "^2.0.3", + "typed-rest-client": "^1.8.4" + }, + "devDependencies": { + "typescript": "4.0.2" + } +} diff --git a/_generated/UseNodeV1/proxyutil.ts b/_generated/UseNodeV1/proxyutil.ts new file mode 100644 index 000000000000..d9d9fa9a01e4 --- /dev/null +++ b/_generated/UseNodeV1/proxyutil.ts @@ -0,0 +1,45 @@ +import * as taskLib from 'azure-pipelines-task-lib/task'; +import * as qs from 'querystring'; +import * as url from 'url'; + +interface ICurlProxy { + variable: string, + setting: string +} + +function toCurlProxy(proxyCfg: taskLib.ProxyConfiguration): ICurlProxy | null { + let curlProxy: ICurlProxy | null; + if (proxyCfg) { + if (proxyCfg.proxyUrl) { + taskLib.debug(`using proxy ${proxyCfg.proxyUrl}`); + const parsedUrl = url.parse(proxyCfg.proxyUrl); + const httpEnvVarName: string = parsedUrl.protocol === 'https:'? "HTTPS_PROXY" : "HTTP_PROXY"; + + let proxyUrl = new URL(proxyCfg.proxyUrl); + proxyUrl.username = proxyCfg.proxyUsername; + proxyUrl.password = proxyCfg.proxyPassword; + + curlProxy = {}; + curlProxy.variable = httpEnvVarName; + curlProxy.setting = proxyUrl.toString(); + } + } + + return curlProxy; +} + +export function setCurlProxySettings(proxyConfig: taskLib.ProxyConfiguration) { + if (taskLib.getVariable("HTTP_PROXY") || taskLib.getVariable("HTTPS_PROXY")) { + // Short circuit if proxy already set. + return; + } + let curlProxy: ICurlProxy | null = toCurlProxy(proxyConfig); + if (curlProxy) { + // register the escaped versions of password + if (proxyConfig.proxyPassword) { + taskLib.setSecret(qs.escape(proxyConfig.proxyPassword)) + } + + taskLib.setVariable(curlProxy.variable, curlProxy.setting); + } +} diff --git a/_generated/UseNodeV1/task.json b/_generated/UseNodeV1/task.json new file mode 100644 index 000000000000..07e325dd45c7 --- /dev/null +++ b/_generated/UseNodeV1/task.json @@ -0,0 +1,76 @@ +{ + "id": "31C75BBB-BCDF-4706-8D7C-4DA6A1959BC2", + "name": "UseNode", + "friendlyName": "Use Node.js ecosystem", + "description": "Set up a Node.js environment and add it to the PATH, additionally providing proxy support", + "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks", + "helpMarkDown": "", + "category": "Tool", + "preview": true, + "ecosystem": "node", + "minimumAgentVersion": "2.144.0", + "runsOn": [ + "Agent", + "DeploymentGroup" + ], + "author": "Microsoft Corporation", + "version": { + "Major": 1, + "Minor": 229, + "Patch": 3 + }, + "satisfies": [ + "Node", + "npm", + "node.js" + ], + "demands": [], + "instanceNameFormat": "Use Node $(versionSpec)", + "inputs": [ + { + "name": "version", + "type": "string", + "label": "Version", + "defaultValue": "10.x", + "required": false, + "helpMarkDown": "Version Spec of the version to use. Examples: 10.x, 10.15.1, >=10.15.0" + }, + { + "name": "checkLatest", + "type": "boolean", + "label": "Check for Latest Version", + "defaultValue": "false", + "required": false, + "helpMarkDown": "Always checks online for the latest available version that satisfies the version spec. This is typically false unless you have a specific scenario to always get latest. This will cause it to incur download costs when potentially not necessary, especially with the hosted build pool." + }, + { + "name": "force32bit", + "type": "boolean", + "label": "Use 32 bit version on x64 agents", + "defaultValue": "false", + "required": false, + "helpMarkDown": "Installs the x86 version of Node regardless of the CPU architecture of the agent." + } + ], + "execution": { + "Node10": { + "target": "usenode.js", + "argumentFormat": "" + }, + "Node16": { + "target": "usenode.js", + "argumentFormat": "" + } + }, + "messages": { + "ToolFailed": "Node install failed: %s", + "TryRosetta": "Unable to find Node for platform %s and architecture %s. Trying to install with Rosetta2", + "NodeVersionNotFound": "Unable to find Node version %s for platform %s and architecture %s.", + "UnexpectedOS": "Unexpected OS %s", + "AgentTempDirNotSet": "Expected Agent.TempDirectory to be set." + }, + "_buildConfigMapping": { + "Default": "1.229.3", + "Node20-225": "1.229.4" + } +} \ No newline at end of file diff --git a/_generated/UseNodeV1/task.loc.json b/_generated/UseNodeV1/task.loc.json new file mode 100644 index 000000000000..c7be06d141dd --- /dev/null +++ b/_generated/UseNodeV1/task.loc.json @@ -0,0 +1,76 @@ +{ + "id": "31C75BBB-BCDF-4706-8D7C-4DA6A1959BC2", + "name": "UseNode", + "friendlyName": "ms-resource:loc.friendlyName", + "description": "ms-resource:loc.description", + "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks", + "helpMarkDown": "ms-resource:loc.helpMarkDown", + "category": "Tool", + "preview": true, + "ecosystem": "node", + "minimumAgentVersion": "2.144.0", + "runsOn": [ + "Agent", + "DeploymentGroup" + ], + "author": "Microsoft Corporation", + "version": { + "Major": 1, + "Minor": 229, + "Patch": 3 + }, + "satisfies": [ + "Node", + "npm", + "node.js" + ], + "demands": [], + "instanceNameFormat": "ms-resource:loc.instanceNameFormat", + "inputs": [ + { + "name": "version", + "type": "string", + "label": "ms-resource:loc.input.label.version", + "defaultValue": "10.x", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.version" + }, + { + "name": "checkLatest", + "type": "boolean", + "label": "ms-resource:loc.input.label.checkLatest", + "defaultValue": "false", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.checkLatest" + }, + { + "name": "force32bit", + "type": "boolean", + "label": "ms-resource:loc.input.label.force32bit", + "defaultValue": "false", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.force32bit" + } + ], + "execution": { + "Node10": { + "target": "usenode.js", + "argumentFormat": "" + }, + "Node16": { + "target": "usenode.js", + "argumentFormat": "" + } + }, + "messages": { + "ToolFailed": "ms-resource:loc.messages.ToolFailed", + "TryRosetta": "ms-resource:loc.messages.TryRosetta", + "NodeVersionNotFound": "ms-resource:loc.messages.NodeVersionNotFound", + "UnexpectedOS": "ms-resource:loc.messages.UnexpectedOS", + "AgentTempDirNotSet": "ms-resource:loc.messages.AgentTempDirNotSet" + }, + "_buildConfigMapping": { + "Default": "1.229.3", + "Node20-225": "1.229.4" + } +} \ No newline at end of file diff --git a/_generated/UseNodeV1/tsconfig.json b/_generated/UseNodeV1/tsconfig.json new file mode 100644 index 000000000000..0438b79f69ac --- /dev/null +++ b/_generated/UseNodeV1/tsconfig.json @@ -0,0 +1,6 @@ +{ + "compilerOptions": { + "target": "ES6", + "module": "commonjs" + } +} \ No newline at end of file diff --git a/_generated/UseNodeV1/usenode.ts b/_generated/UseNodeV1/usenode.ts new file mode 100644 index 000000000000..f282af29b7bc --- /dev/null +++ b/_generated/UseNodeV1/usenode.ts @@ -0,0 +1,39 @@ +// +// UseNode: +// Optionally install version at runtime, setup proxy and setup auth +// This allows for natural cmd line steps in yaml after "using" that eco-system +// since proxy vars and auth is setup for the rest of the job +// +// https://github.com/Microsoft/azure-pipelines-yaml/blob/master/design/use-statement.md +// + +import * as taskLib from 'azure-pipelines-task-lib/task'; +//import * as toolLib from 'vsts-task-tool-lib/tool'; +import * as installer from './installer'; +import * as proxyutil from './proxyutil'; +import * as path from 'path'; + +async function run() { + try { + // + // Version is optional. If supplied, install / use from the tool cache + // If not supplied then task is still used to setup proxy, auth, etc... + // + taskLib.setResourcePath(path.join(__dirname, 'task.json')); + const version = taskLib.getInput('version', false); + if (version) { + const checkLatest: boolean = taskLib.getBoolInput('checkLatest', false); + await installer.getNode(version, checkLatest); + } + + const proxyCfg: taskLib.ProxyConfiguration = taskLib.getHttpProxyConfiguration(); + if (proxyCfg) { + proxyutil.setCurlProxySettings(proxyCfg); + } + } + catch (error) { + taskLib.setResult(taskLib.TaskResult.Failed, error.message); + } +} + +run() \ No newline at end of file diff --git a/_generated/UseNodeV1_Node20/.npmrc b/_generated/UseNodeV1_Node20/.npmrc new file mode 100644 index 000000000000..5fca0d518be7 --- /dev/null +++ b/_generated/UseNodeV1_Node20/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true diff --git a/_generated/UseNodeV1_Node20/Strings/resources.resjson/de-DE/resources.resjson b/_generated/UseNodeV1_Node20/Strings/resources.resjson/de-DE/resources.resjson new file mode 100644 index 000000000000..bd94b11706b6 --- /dev/null +++ b/_generated/UseNodeV1_Node20/Strings/resources.resjson/de-DE/resources.resjson @@ -0,0 +1,17 @@ +{ + "loc.friendlyName": "Node.js-Ökosystem verwenden", + "loc.helpMarkDown": "", + "loc.description": "Hiermit wird eine Node.js-Umgebung eingerichtet und zu PATH hinzugefügt. Zusätzlich wird Proxyunterstützung bereitgestellt.", + "loc.instanceNameFormat": "Node $(versionSpec) verwenden", + "loc.input.label.version": "Version", + "loc.input.help.version": "Angabe der zu verwendenden Version. Beispiele: 10.x, 10.15.1, >=10.15.0", + "loc.input.label.checkLatest": "Auf aktuelle Version überprüfen", + "loc.input.help.checkLatest": "Sucht online immer nach der letzten verfügbaren Version, die die Versionsangabe erfüllt. Dies ist in der Regel \"false\", sofern Sie nicht über ein spezifisches Szenario verfügen, bei dem Sie immer die aktuelle Version abrufen. Dadurch entstehen Downloadkosten, die unter Umständen nicht erforderlich sind, insbesondere beim gehosteten Buildpool.", + "loc.input.label.force32bit": "32-Bit-Version für x64-Agents verwenden", + "loc.input.help.force32bit": "Installiert die x86-Version von Node unabhängig von der CPU-Architektur des Agents.", + "loc.messages.ToolFailed": "Fehler bei der Knoteninstallation: %s", + "loc.messages.TryRosetta": "Der Knoten für die Plattform \"%s\" und die Architektur \"%s\" wurde nicht gefunden. Es wird versucht, mit Rosetta2 zu installieren.", + "loc.messages.NodeVersionNotFound": "Die Knotenversion %s für die Plattform \"%s\" und die Architektur \"%s\" wurde nicht gefunden.", + "loc.messages.UnexpectedOS": "Unerwartetes Betriebssystem %s", + "loc.messages.AgentTempDirNotSet": "\"Agent.TempDirectory\" muss festgelegt werden." +} \ No newline at end of file diff --git a/_generated/UseNodeV1_Node20/Strings/resources.resjson/en-US/resources.resjson b/_generated/UseNodeV1_Node20/Strings/resources.resjson/en-US/resources.resjson new file mode 100644 index 000000000000..51e92083bc09 --- /dev/null +++ b/_generated/UseNodeV1_Node20/Strings/resources.resjson/en-US/resources.resjson @@ -0,0 +1,17 @@ +{ + "loc.friendlyName": "Use Node.js ecosystem", + "loc.helpMarkDown": "", + "loc.description": "Set up a Node.js environment and add it to the PATH, additionally providing proxy support", + "loc.instanceNameFormat": "Use Node $(versionSpec)", + "loc.input.label.version": "Version", + "loc.input.help.version": "Version Spec of the version to use. Examples: 10.x, 10.15.1, >=10.15.0", + "loc.input.label.checkLatest": "Check for Latest Version", + "loc.input.help.checkLatest": "Always checks online for the latest available version that satisfies the version spec. This is typically false unless you have a specific scenario to always get latest. This will cause it to incur download costs when potentially not necessary, especially with the hosted build pool.", + "loc.input.label.force32bit": "Use 32 bit version on x64 agents", + "loc.input.help.force32bit": "Installs the x86 version of Node regardless of the CPU architecture of the agent.", + "loc.messages.ToolFailed": "Node install failed: %s", + "loc.messages.TryRosetta": "Unable to find Node for platform %s and architecture %s. Trying to install with Rosetta2", + "loc.messages.NodeVersionNotFound": "Unable to find Node version %s for platform %s and architecture %s.", + "loc.messages.UnexpectedOS": "Unexpected OS %s", + "loc.messages.AgentTempDirNotSet": "Expected Agent.TempDirectory to be set." +} \ No newline at end of file diff --git a/_generated/UseNodeV1_Node20/Strings/resources.resjson/es-ES/resources.resjson b/_generated/UseNodeV1_Node20/Strings/resources.resjson/es-ES/resources.resjson new file mode 100644 index 000000000000..92af13768db7 --- /dev/null +++ b/_generated/UseNodeV1_Node20/Strings/resources.resjson/es-ES/resources.resjson @@ -0,0 +1,17 @@ +{ + "loc.friendlyName": "Usar el ecosistema de Node.js", + "loc.helpMarkDown": "", + "loc.description": "Configura un entorno de Node.js y lo agrega a PATH, además de proporcionar compatibilidad con el proxy.", + "loc.instanceNameFormat": "Usar Node $(versionSpec)", + "loc.input.label.version": "Versión", + "loc.input.help.version": "Especificación de la versión que se va a usar. Ejemplos: 10.x, 10.15.1 >=10.15.0", + "loc.input.label.checkLatest": "Comprobar la última versión", + "loc.input.help.checkLatest": "Comprueba siempre en línea la última versión disponible que cumple la especificación de versión. Este valor suele ser false a menos que tenga un escenario específico que deba obtener siempre la última versión. Esto dará lugar a costos de descarga, cuando puede que no sea necesario, especialmente con el grupo de compilación hospedado.", + "loc.input.label.force32bit": "Usar la versión de 32 bits en agentes x64", + "loc.input.help.force32bit": "Instala la versión x86 de Node, independientemente de la arquitectura de CPU del agente.", + "loc.messages.ToolFailed": "No se pudo instalar el nodo: %s", + "loc.messages.TryRosetta": "No se encuentra ningún node para la plataforma %s ni la arquitectura %s. Intentando instalar con Rosetta2", + "loc.messages.NodeVersionNotFound": "No se encuentra el %s de versión del nodo para la plataforma %s y la arquitectura %s.", + "loc.messages.UnexpectedOS": "Sistema operativo %s inesperado", + "loc.messages.AgentTempDirNotSet": "Se esperaba que Agent.TempDirectory estuviera establecido." +} \ No newline at end of file diff --git a/_generated/UseNodeV1_Node20/Strings/resources.resjson/fr-FR/resources.resjson b/_generated/UseNodeV1_Node20/Strings/resources.resjson/fr-FR/resources.resjson new file mode 100644 index 000000000000..15c610af35a0 --- /dev/null +++ b/_generated/UseNodeV1_Node20/Strings/resources.resjson/fr-FR/resources.resjson @@ -0,0 +1,17 @@ +{ + "loc.friendlyName": "Utiliser l'écosystème Node.js", + "loc.helpMarkDown": "", + "loc.description": "Configurer un environnement Node.js et l'ajouter à PATH, en fournissant en plus la prise en charge du proxy", + "loc.instanceNameFormat": "Utiliser Node $(versionSpec)", + "loc.input.label.version": "Version", + "loc.input.help.version": "Spécification de version de la version à utiliser. Exemples : 10.x, 10.15.1, >=10.15.0", + "loc.input.label.checkLatest": "Rechercher la dernière version", + "loc.input.help.checkLatest": "Recherche toujours en ligne la dernière version disponible répondant à la spécification de version. Cela n'est généralement pas le cas, sauf si vous disposez d'un scénario spécifique visant à obtenir toujours la dernière version. Cela peut entraîner des coûts de téléchargement inutiles, en particulier avec le pool de builds hébergé.", + "loc.input.label.force32bit": "Utiliser la version 32 bits sur les agents x64", + "loc.input.help.force32bit": "Installe la version x86 de Node quelle que soit l'architecture du processeur de l'agent.", + "loc.messages.ToolFailed": "Échec de l'installation de Node : %s", + "loc.messages.TryRosetta": "Nœud introuvable pour la %s de plateforme et l'%s d’architecture. Tentative d’installation avec Rosetta2", + "loc.messages.NodeVersionNotFound": "Impossible de trouver le %s de version du nœud pour la %s d’architecture et de %s de plateforme.", + "loc.messages.UnexpectedOS": "Système d’exploitation inattendu %s", + "loc.messages.AgentTempDirNotSet": "Agent.TempDirectory est censé être défini." +} \ No newline at end of file diff --git a/_generated/UseNodeV1_Node20/Strings/resources.resjson/it-IT/resources.resjson b/_generated/UseNodeV1_Node20/Strings/resources.resjson/it-IT/resources.resjson new file mode 100644 index 000000000000..824926357605 --- /dev/null +++ b/_generated/UseNodeV1_Node20/Strings/resources.resjson/it-IT/resources.resjson @@ -0,0 +1,17 @@ +{ + "loc.friendlyName": "Usa ecosistema di Node.js", + "loc.helpMarkDown": "", + "loc.description": "Consente di configurare un ambiente Node.js e di aggiungerlo a PATH, fornendo inoltre il supporto per proxy", + "loc.instanceNameFormat": "Usa Node $(versionSpec)", + "loc.input.label.version": "Versione", + "loc.input.help.version": "Identificatore della versione da usare. Esempi: 10.x, 10.15.1, >=10.15.0", + "loc.input.label.checkLatest": "Controlla disponibilità di versioni più recenti", + "loc.input.help.checkLatest": "Verifica sempre online se è disponibile una versione più recente che soddisfi l'identificatore di versione. Il valore di questa opzione è in genere false a meno che non sia stato predisposto uno scenario specifico per scaricare sempre la versione più recente. Questa opzione può comportare costi di download potenzialmente non necessari, in particolare con il pool di compilazione ospitato.", + "loc.input.label.force32bit": "Usa la versione a 32 bit in agenti x64", + "loc.input.help.force32bit": "Installa la versione x86 di Node indipendentemente dall'architettura della CPU dell'agente.", + "loc.messages.ToolFailed": "L'installazione di Node non è riuscita: %s", + "loc.messages.TryRosetta": "Non è possibile trovare il nodo per la piattaforma %s e l'architettura %s. Tentativo di installazione con Rosetta2", + "loc.messages.NodeVersionNotFound": "Non è possibile trovare la versione %s del nodo per la piattaforma %s e l'architettura %s.", + "loc.messages.UnexpectedOS": "Sistema operativo imprevisto %s", + "loc.messages.AgentTempDirNotSet": "Elemento Agent.TempDirectory previsto da impostare." +} \ No newline at end of file diff --git a/_generated/UseNodeV1_Node20/Strings/resources.resjson/ja-JP/resources.resjson b/_generated/UseNodeV1_Node20/Strings/resources.resjson/ja-JP/resources.resjson new file mode 100644 index 000000000000..7f23bedb8603 --- /dev/null +++ b/_generated/UseNodeV1_Node20/Strings/resources.resjson/ja-JP/resources.resjson @@ -0,0 +1,17 @@ +{ + "loc.friendlyName": "Node.js エコシステムを使用", + "loc.helpMarkDown": "", + "loc.description": "Node.js 環境をセットアップしてパスに追加し、追加でプロキシ サポートを提供します", + "loc.instanceNameFormat": "Node $(versionSpec) の使用", + "loc.input.label.version": "バージョン", + "loc.input.help.version": "使用するバージョンのバージョンの仕様。例: 10.x、10.15.1、>=10.15.0", + "loc.input.label.checkLatest": "最新バージョンのチェック", + "loc.input.help.checkLatest": "バージョン仕様を満たす利用可能な最新バージョンを常にオンラインで確認します。これは false にするのが一般的ですが、常に最新版を取得する特定のシナリオの場合は例外です。これにより、実際には必要でない場合にもダウンロードのコストが発生することになります (ホストされたビルド プールの場合は特にそう言えます)。", + "loc.input.label.force32bit": "x64 エージェントで 32 ビット バージョンを使用する", + "loc.input.help.force32bit": "エージェントの CPU アーキテクチャに関係なく、Node の x86 バージョンをインストールします。", + "loc.messages.ToolFailed": "ノードをインストールできませんでした: %s", + "loc.messages.TryRosetta": "プラットフォーム %s およびアーキテクチャ %s のノードが見つかりません。Rosetta2 でインストールしようとしています", + "loc.messages.NodeVersionNotFound": "プラットフォーム %s とアーキテクチャ %s のノード バージョン %s が見つかりません。", + "loc.messages.UnexpectedOS": "予期しない OS %s", + "loc.messages.AgentTempDirNotSet": "Agent.TempDirectory を設定する必要があります。" +} \ No newline at end of file diff --git a/_generated/UseNodeV1_Node20/Strings/resources.resjson/ko-KR/resources.resjson b/_generated/UseNodeV1_Node20/Strings/resources.resjson/ko-KR/resources.resjson new file mode 100644 index 000000000000..006e1297a8c0 --- /dev/null +++ b/_generated/UseNodeV1_Node20/Strings/resources.resjson/ko-KR/resources.resjson @@ -0,0 +1,17 @@ +{ + "loc.friendlyName": "Node.js 에코시스템 사용", + "loc.helpMarkDown": "", + "loc.description": "Node.js 환경을 설정하고 PATH에 추가하며, 프록시 지원도 제공합니다.", + "loc.instanceNameFormat": "노드 $(versionSpec) 사용", + "loc.input.label.version": "버전", + "loc.input.help.version": "사용할 버전의 버전 사양입니다. 예: 10.x, 10.15.1, >=10.15.0", + "loc.input.label.checkLatest": "최신 버전 확인", + "loc.input.help.checkLatest": "버전 사양을 충족하는 최신 사용 가능 버전인지 항상 온라인으로 검사합니다. 항상 최신 버전을 다운로드하는 특정 시나리오가 아닌 한 일반적으로 false로 지정됩니다. 이로 인해 잠재적으로 필요하지 않은 경우, 특히 호스팅된 빌드 풀에서는 다운로드 비용이 발생할 수 있습니다.", + "loc.input.label.force32bit": "x64 에이전트에서 32비트 버전 사용", + "loc.input.help.force32bit": "에이전트의 CPU 아키텍처와 관계없이 x86 버전의 Node를 설치합니다.", + "loc.messages.ToolFailed": "노드 설치 실패: %s", + "loc.messages.TryRosetta": "플랫폼 %s 및 아키텍처 %s에 대한 노드를 찾을 수 없습니다. Rosetta2로 설치하는 중", + "loc.messages.NodeVersionNotFound": "플랫폼 %s 및 아키텍처 %s에 대한 노드 버전 %s을(를) 찾을 수 없습니다.", + "loc.messages.UnexpectedOS": "예기치 않은 OS %s", + "loc.messages.AgentTempDirNotSet": "Agent.TempDirectory가 설정될 것으로 예상됩니다." +} \ No newline at end of file diff --git a/_generated/UseNodeV1_Node20/Strings/resources.resjson/ru-RU/resources.resjson b/_generated/UseNodeV1_Node20/Strings/resources.resjson/ru-RU/resources.resjson new file mode 100644 index 000000000000..1cb37221ec52 --- /dev/null +++ b/_generated/UseNodeV1_Node20/Strings/resources.resjson/ru-RU/resources.resjson @@ -0,0 +1,17 @@ +{ + "loc.friendlyName": "Использовать экосистему Node.js", + "loc.helpMarkDown": "", + "loc.description": "Настройте среду Node.js и добавьте ее в PATH, дополнительно предоставив поддержку прокси", + "loc.instanceNameFormat": "Использовать Node $(versionSpec)", + "loc.input.label.version": "Версия", + "loc.input.help.version": "Спецификация версии для используемой версии. Примеры: 10.x, 10.15.1, >=10.15.0", + "loc.input.label.checkLatest": "Проверить наличие последней версии", + "loc.input.help.checkLatest": "Всегда проверяет наличие в Интернете актуальной версии, соответствующей спецификатору версии. Обычно задано значение \"false\", кроме случаев, когда имеется определенный сценарий всегда получать актуальную версию. Когда практическая необходимость в этом отсутствует, особенно в случае размещенного пула сборок, может взиматься дополнительная плата за загрузку.", + "loc.input.label.force32bit": "Использовать 32-разрядную версию на 64-разрядных агентах", + "loc.input.help.force32bit": "Устанавливает 32-разрядную версию Node независимо от архитектуры ЦП агента.", + "loc.messages.ToolFailed": "Сбой установки Node: %s", + "loc.messages.TryRosetta": "Не удалось найти Node для платформы %s и архитектуры %s. Попытка установки с помощью Rosetta2", + "loc.messages.NodeVersionNotFound": "Не удалось найти версию Node %s для платформы %s и архитектуры %s.", + "loc.messages.UnexpectedOS": "Непредвиденная ОС %s", + "loc.messages.AgentTempDirNotSet": "Переменная Agent.TempDirectory должна быть задана." +} \ No newline at end of file diff --git a/_generated/UseNodeV1_Node20/Strings/resources.resjson/zh-CN/resources.resjson b/_generated/UseNodeV1_Node20/Strings/resources.resjson/zh-CN/resources.resjson new file mode 100644 index 000000000000..166261c125c1 --- /dev/null +++ b/_generated/UseNodeV1_Node20/Strings/resources.resjson/zh-CN/resources.resjson @@ -0,0 +1,17 @@ +{ + "loc.friendlyName": "使用 Node.js 生态系统", + "loc.helpMarkDown": "", + "loc.description": "设置 Node.js 环境并将其添加到 PATH,另外还需提供代理支持", + "loc.instanceNameFormat": "使用节点 $(versionSpec)", + "loc.input.label.version": "版本", + "loc.input.help.version": "要使用的版本的版本规范。示例: 10.x、10.15.1、>=10.15.0", + "loc.input.label.checkLatest": "检查是否有最新版本", + "loc.input.help.checkLatest": "始终联机检查是否有满足版本规范的最新可用版本。这通常无法实现,除非有特定的解决方案可以始终获取最新版本。这样会在可能没有必要的情况下,特别是在使用托管生成池时产生下载费用。", + "loc.input.label.force32bit": "在 x64 代理上使用 32 位版本", + "loc.input.help.force32bit": "安装 x86 版本的 Node,不考虑代理的 CPU 体系结构。", + "loc.messages.ToolFailed": "节点安装失败: %s", + "loc.messages.TryRosetta": "找不到平台 %s 和体系结构 %s 的节点。尝试使用 Rosetta2 进行安装", + "loc.messages.NodeVersionNotFound": "找不到平台 %s 和体系结构 %s 的节点版本 %s。", + "loc.messages.UnexpectedOS": "意外的 OS %s", + "loc.messages.AgentTempDirNotSet": "应设置 Agent.TempDirectory。" +} \ No newline at end of file diff --git a/_generated/UseNodeV1_Node20/Strings/resources.resjson/zh-TW/resources.resjson b/_generated/UseNodeV1_Node20/Strings/resources.resjson/zh-TW/resources.resjson new file mode 100644 index 000000000000..44a92fb5ffd8 --- /dev/null +++ b/_generated/UseNodeV1_Node20/Strings/resources.resjson/zh-TW/resources.resjson @@ -0,0 +1,17 @@ +{ + "loc.friendlyName": "使用 Node.js 生態系統", + "loc.helpMarkDown": "", + "loc.description": "設定 Node.js 環境,並將它新增到 PATH,另提供 Proxy 支援", + "loc.instanceNameFormat": "使用 Node $(versionSpec)", + "loc.input.label.version": "版本", + "loc.input.help.version": "所要使用版本的版本規格。例如: 10.x、10.15.1、>= 10.15.0", + "loc.input.label.checkLatest": "檢查最新版本", + "loc.input.help.checkLatest": "一律檢查網路上有無最新的版本符合版本規格。除非特定的情況必須取得最新版本,否則不建議執行此動作。若非必要,這可能會衍生下載費用,特別是對託管的組建集區。", + "loc.input.label.force32bit": "在 x64 代理程式上使用 32 位元版本", + "loc.input.help.force32bit": "無論代理程式的 CPU 結構為何,皆安裝 x86 版的節點。", + "loc.messages.ToolFailed": "Node 安裝失敗: %s", + "loc.messages.TryRosetta": "找不到適用於平台 %s 與架構 %s 的 Node。正在嘗試使用 Rosetta2 安裝", + "loc.messages.NodeVersionNotFound": "找不到適用於平台 %s 與架構 %s 的 Node 版本 %s。", + "loc.messages.UnexpectedOS": "未預期的作業系統 %s", + "loc.messages.AgentTempDirNotSet": "應設定 Agent.TempDirectorty。" +} \ No newline at end of file diff --git a/_generated/UseNodeV1_Node20/Tests/L0.ts b/_generated/UseNodeV1_Node20/Tests/L0.ts new file mode 100644 index 000000000000..d62697653c72 --- /dev/null +++ b/_generated/UseNodeV1_Node20/Tests/L0.ts @@ -0,0 +1,102 @@ +import assert = require('assert'); +import os = require('os'); +import path = require('path'); +import * as ttm from 'azure-pipelines-task-lib/mock-test'; + +function runValidations(validator: () => void, tr, done) { + try { + validator(); + done(); + } + catch (error) { + console.log("STDERR", tr.stderr); + console.log("STDOUT", tr.stdout); + done(error); + } +} + +describe('NodeTool Suite', function () { + this.timeout(60000); + + it('Succeeds when the first download is available', (done: MochaDone) => { + this.timeout(5000); + + let tp: string = path.join(__dirname, 'L0FirstDownloadSuccess.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + runValidations(() => { + assert(tr.succeeded, 'NodeTool should have succeeded.'); + assert(tr.stderr.length === 0, 'NodeTool should not have written to stderr'); + }, tr, done); + }); + + it('Succeeds when the second download is available', (done: MochaDone) => { + this.timeout(5000); + + let tp: string = path.join(__dirname, 'L0SecondDownloadSuccess.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + runValidations(() => { + if (os.platform() === 'win32') { + assert(tr.succeeded, 'NodeTool should have succeeded.'); + assert(tr.stderr.length === 0, 'NodeTool should not have written to stderr'); + } else { + assert(tr.failed, 'NodeTool should have failed after the first download failure for non-Windows platforms.'); + } + }, tr, done); + }); + + it('Succeeds when the third download is available', (done: MochaDone) => { + this.timeout(5000); + + let tp: string = path.join(__dirname, 'L0ThirdDownloadSuccess.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + runValidations(() => { + if (os.platform() === 'win32') { + assert(tr.succeeded, 'NodeTool should have succeeded.'); + assert(tr.stderr.length === 0, 'NodeTool should not have written to stderr'); + } else { + assert(tr.failed, 'NodeTool should have failed after the first download failure for non-Windows platforms.'); + } + }, tr, done); + }); + + it('Sets proxy correctly', (done: MochaDone) => { + this.timeout(5000); + + process.env["__proxy__"] = "true"; + let tp: string = path.join(__dirname, 'L0FirstDownloadSuccess.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + delete process.env["__proxy__"]; + + runValidations(() => { + assert(tr.succeeded, 'NodeTool should have succeeded.'); + assert(tr.stderr.length === 0, 'NodeTool should not have written to stderr'); + assert(tr.stdout.indexOf('Setting secret password') > -1, "Password should be set"); + assert(tr.stdout.indexOf('Setting HTTP_PROXY to http://username:password@url.com/') > -1, "Proxy should be set"); + }, tr, done); + }); + + it('Removes "v" prefixes when evaluating latest version', (done: MochaDone) => { + this.timeout(5000); + + let tp: string = path.join(__dirname, 'L0GetsLatestVersion.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + runValidations(() => { + assert(tr.succeeded, 'NodeTool should have succeeded.'); + assert(tr.stderr.length === 0, 'NodeTool should not have written to stderr'); + }, tr, done); + }); +}); \ No newline at end of file diff --git a/_generated/UseNodeV1_Node20/Tests/L0FakeIndex.json b/_generated/UseNodeV1_Node20/Tests/L0FakeIndex.json new file mode 100644 index 000000000000..8926d0d1a1c4 --- /dev/null +++ b/_generated/UseNodeV1_Node20/Tests/L0FakeIndex.json @@ -0,0 +1,13254 @@ +[ + { + "version": "v13.8.0", + "date": "2020-02-05", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.13.6", + "v8": "7.9.317.25", + "uv": "1.34.1", + "zlib": "1.2.11", + "openssl": "1.1.1d", + "modules": "79", + "lts": false, + "security": true + }, + { + "version": "v13.7.0", + "date": "2020-01-21", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.13.6", + "v8": "7.9.317.25", + "uv": "1.34.1", + "zlib": "1.2.11", + "openssl": "1.1.1d", + "modules": "79", + "lts": false, + "security": false + }, + { + "version": "v13.6.0", + "date": "2020-01-07", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.13.4", + "v8": "7.9.317.25", + "uv": "1.34.0", + "zlib": "1.2.11", + "openssl": "1.1.1d", + "modules": "79", + "lts": false, + "security": false + }, + { + "version": "v13.5.0", + "date": "2019-12-18", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.13.4", + "v8": "7.9.317.25", + "uv": "1.34.0", + "zlib": "1.2.11", + "openssl": "1.1.1d", + "modules": "79", + "lts": false, + "security": false + }, + { + "version": "v13.4.0", + "date": "2019-12-17", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.13.4", + "v8": "7.9.317.25", + "uv": "1.34.0", + "zlib": "1.2.11", + "openssl": "1.1.1d", + "modules": "79", + "lts": false, + "security": true + }, + { + "version": "v13.3.0", + "date": "2019-12-03", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.13.1", + "v8": "7.9.317.25", + "uv": "1.33.1", + "zlib": "1.2.11", + "openssl": "1.1.1d", + "modules": "79", + "lts": false, + "security": false + }, + { + "version": "v13.2.0", + "date": "2019-11-21", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.13.1", + "v8": "7.9.317.23", + "uv": "1.33.1", + "zlib": "1.2.11", + "openssl": "1.1.1d", + "modules": "79", + "lts": false, + "security": false + }, + { + "version": "v13.1.0", + "date": "2019-11-05", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.12.1", + "v8": "7.8.279.17", + "uv": "1.33.1", + "zlib": "1.2.11", + "openssl": "1.1.1d", + "modules": "79", + "lts": false, + "security": false + }, + { + "version": "v13.0.1", + "date": "2019-10-23", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.12.0", + "v8": "7.8.279.17", + "uv": "1.33.1", + "zlib": "1.2.11", + "openssl": "1.1.1d", + "modules": "79", + "lts": false, + "security": false + }, + { + "version": "v13.0.0", + "date": "2019-10-10", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.12.0", + "v8": "7.8.279.17", + "uv": "1.32.0", + "zlib": "1.2.11", + "openssl": "1.1.1d", + "modules": "79", + "lts": false, + "security": false + }, + { + "version": "v12.16.0", + "date": "2020-02-11", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.13.4", + "v8": "7.8.279.23", + "uv": "1.34.0", + "zlib": "1.2.11", + "openssl": "1.1.1d", + "modules": "72", + "lts": "Erbium", + "security": false + }, + { + "version": "v12.15.0", + "date": "2020-02-05", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.13.4", + "v8": "7.7.299.13", + "uv": "1.33.1", + "zlib": "1.2.11", + "openssl": "1.1.1d", + "modules": "72", + "lts": "Erbium", + "security": true + }, + { + "version": "v12.14.1", + "date": "2020-01-07", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.13.4", + "v8": "7.7.299.13", + "uv": "1.33.1", + "zlib": "1.2.11", + "openssl": "1.1.1d", + "modules": "72", + "lts": "Erbium", + "security": false + }, + { + "version": "v12.14.0", + "date": "2019-12-16", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.13.4", + "v8": "7.7.299.13", + "uv": "1.33.1", + "zlib": "1.2.11", + "openssl": "1.1.1d", + "modules": "72", + "lts": "Erbium", + "security": true + }, + { + "version": "v12.13.1", + "date": "2019-11-19", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.12.1", + "v8": "7.7.299.13", + "uv": "1.33.1", + "zlib": "1.2.11", + "openssl": "1.1.1d", + "modules": "72", + "lts": "Erbium", + "security": false + }, + { + "version": "v12.13.0", + "date": "2019-10-21", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.12.0", + "v8": "7.7.299.13", + "uv": "1.32.0", + "zlib": "1.2.11", + "openssl": "1.1.1d", + "modules": "72", + "lts": "Erbium", + "security": false + }, + { + "version": "v12.12.0", + "date": "2019-10-11", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.11.3", + "v8": "7.7.299.13", + "uv": "1.32.0", + "zlib": "1.2.11", + "openssl": "1.1.1d", + "modules": "72", + "lts": false, + "security": false + }, + { + "version": "v12.11.1", + "date": "2019-10-01", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.11.3", + "v8": "7.7.299.11", + "uv": "1.32.0", + "zlib": "1.2.11", + "openssl": "1.1.1c", + "modules": "72", + "lts": false, + "security": false + }, + { + "version": "v12.11.0", + "date": "2019-09-25", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.11.3", + "v8": "7.7.299.11", + "uv": "1.32.0", + "zlib": "1.2.11", + "openssl": "1.1.1c", + "modules": "72", + "lts": false, + "security": false + }, + { + "version": "v12.10.0", + "date": "2019-09-04", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.10.3", + "v8": "7.6.303.29", + "uv": "1.31.0", + "zlib": "1.2.11", + "openssl": "1.1.1c", + "modules": "72", + "lts": false, + "security": false + }, + { + "version": "v12.9.1", + "date": "2019-08-26", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.10.2", + "v8": "7.6.303.29", + "uv": "1.31.0", + "zlib": "1.2.11", + "openssl": "1.1.1c", + "modules": "72", + "lts": false, + "security": false + }, + { + "version": "v12.9.0", + "date": "2019-08-20", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.10.2", + "v8": "7.6.303.29", + "uv": "1.31.0", + "zlib": "1.2.11", + "openssl": "1.1.1c", + "modules": "72", + "lts": false, + "security": false + }, + { + "version": "v12.8.1", + "date": "2019-08-15", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.10.2", + "v8": "7.5.288.22", + "uv": "1.30.1", + "zlib": "1.2.11", + "openssl": "1.1.1c", + "modules": "72", + "lts": false, + "security": true + }, + { + "version": "v12.8.0", + "date": "2019-08-06", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.10.2", + "v8": "7.5.288.22", + "uv": "1.30.1", + "zlib": "1.2.11", + "openssl": "1.1.1c", + "modules": "72", + "lts": false, + "security": false + }, + { + "version": "v12.7.0", + "date": "2019-07-23", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.10.0", + "v8": "7.5.288.22", + "uv": "1.30.1", + "zlib": "1.2.11", + "openssl": "1.1.1c", + "modules": "72", + "lts": false, + "security": false + }, + { + "version": "v12.6.0", + "date": "2019-07-03", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.9.0", + "v8": "7.5.288.22", + "uv": "1.30.1", + "zlib": "1.2.11", + "openssl": "1.1.1c", + "modules": "72", + "lts": false, + "security": false + }, + { + "version": "v12.5.0", + "date": "2019-06-26", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.9.0", + "v8": "7.5.288.22", + "uv": "1.29.1", + "zlib": "1.2.11", + "openssl": "1.1.1c", + "modules": "72", + "lts": false, + "security": false + }, + { + "version": "v12.4.0", + "date": "2019-06-04", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.9.0", + "v8": "7.4.288.27", + "uv": "1.29.1", + "zlib": "1.2.11", + "openssl": "1.1.1b", + "modules": "72", + "lts": false, + "security": false + }, + { + "version": "v12.3.1", + "date": "2019-05-22", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.9.0", + "v8": "7.4.288.27", + "uv": "1.29.1", + "zlib": "1.2.11", + "openssl": "1.1.1b", + "modules": "72", + "lts": false, + "security": false + }, + { + "version": "v12.3.0", + "date": "2019-05-21", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.9.0", + "v8": "7.4.288.27", + "uv": "1.28.0", + "zlib": "1.2.11", + "openssl": "1.1.1b", + "modules": "72", + "lts": false, + "security": false + }, + { + "version": "v12.2.0", + "date": "2019-05-07", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.9.0", + "v8": "7.4.288.21", + "uv": "1.28.0", + "zlib": "1.2.11", + "openssl": "1.1.1b", + "modules": "72", + "lts": false, + "security": false + }, + { + "version": "v12.1.0", + "date": "2019-04-29", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.9.0", + "v8": "7.4.288.21", + "uv": "1.28.0", + "zlib": "1.2.11", + "openssl": "1.1.1b", + "modules": "72", + "lts": false, + "security": false + }, + { + "version": "v12.0.0", + "date": "2019-04-23", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.9.0", + "v8": "7.4.288.21", + "uv": "1.28.0", + "zlib": "1.2.11", + "openssl": "1.1.1b", + "modules": "72", + "lts": false, + "security": false + }, + { + "version": "v11.15.0", + "date": "2019-04-30", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.7.0", + "v8": "7.0.276.38", + "uv": "1.27.0", + "zlib": "1.2.11", + "openssl": "1.1.1b", + "modules": "67", + "lts": false, + "security": false + }, + { + "version": "v11.14.0", + "date": "2019-04-10", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.7.0", + "v8": "7.0.276.38", + "uv": "1.27.0", + "zlib": "1.2.11", + "openssl": "1.1.1b", + "modules": "67", + "lts": false, + "security": false + }, + { + "version": "v11.13.0", + "date": "2019-03-28", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.7.0", + "v8": "7.0.276.38", + "uv": "1.27.0", + "zlib": "1.2.11", + "openssl": "1.1.1b", + "modules": "67", + "lts": false, + "security": false + }, + { + "version": "v11.12.0", + "date": "2019-03-14", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.7.0", + "v8": "7.0.276.38", + "uv": "1.26.0", + "zlib": "1.2.11", + "openssl": "1.1.1b", + "modules": "67", + "lts": false, + "security": false + }, + { + "version": "v11.11.0", + "date": "2019-03-05", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.7.0", + "v8": "7.0.276.38", + "uv": "1.26.0", + "zlib": "1.2.11", + "openssl": "1.1.1a", + "modules": "67", + "lts": false, + "security": false + }, + { + "version": "v11.10.1", + "date": "2019-02-28", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.7.0", + "v8": "7.0.276.38", + "uv": "1.26.0", + "zlib": "1.2.11", + "openssl": "1.1.1a", + "modules": "67", + "lts": false, + "security": true + }, + { + "version": "v11.10.0", + "date": "2019-02-14", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.7.0", + "v8": "7.0.276.38", + "uv": "1.26.0", + "zlib": "1.2.11", + "openssl": "1.1.1a", + "modules": "67", + "lts": false, + "security": false + }, + { + "version": "v11.9.0", + "date": "2019-01-30", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.5.0", + "v8": "7.0.276.38", + "uv": "1.25.0", + "zlib": "1.2.11", + "openssl": "1.1.1a", + "modules": "67", + "lts": false, + "security": false + }, + { + "version": "v11.8.0", + "date": "2019-01-24", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.5.0", + "v8": "7.0.276.38", + "uv": "1.25.0", + "zlib": "1.2.11", + "openssl": "1.1.0j", + "modules": "67", + "lts": false, + "security": false + }, + { + "version": "v11.7.0", + "date": "2019-01-17", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.5.0", + "v8": "7.0.276.38", + "uv": "1.24.1", + "zlib": "1.2.11", + "openssl": "1.1.0j", + "modules": "67", + "lts": false, + "security": false + }, + { + "version": "v11.6.0", + "date": "2018-12-26", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.5.0-next.0", + "v8": "7.0.276.38", + "uv": "1.24.1", + "zlib": "1.2.11", + "openssl": "1.1.0j", + "modules": "67", + "lts": false, + "security": false + }, + { + "version": "v11.5.0", + "date": "2018-12-18", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.4.1", + "v8": "7.0.276.38", + "uv": "1.24.0", + "zlib": "1.2.11", + "openssl": "1.1.0j", + "modules": "67", + "lts": false, + "security": false + }, + { + "version": "v11.4.0", + "date": "2018-12-07", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.4.1", + "v8": "7.0.276.38", + "uv": "1.24.0", + "zlib": "1.2.11", + "openssl": "1.1.0j", + "modules": "67", + "lts": false, + "security": false + }, + { + "version": "v11.3.0", + "date": "2018-11-27", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.4.1", + "v8": "7.0.276.38", + "uv": "1.23.2", + "zlib": "1.2.11", + "openssl": "1.1.0j", + "modules": "67", + "lts": false, + "security": true + }, + { + "version": "v11.2.0", + "date": "2018-11-15", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.4.1", + "v8": "7.0.276.38", + "uv": "1.23.2", + "zlib": "1.2.11", + "openssl": "1.1.0i", + "modules": "67", + "lts": false, + "security": false + }, + { + "version": "v11.1.0", + "date": "2018-10-30", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.4.1", + "v8": "7.0.276.32", + "uv": "1.23.2", + "zlib": "1.2.11", + "openssl": "1.1.0i", + "modules": "67", + "lts": false, + "security": false + }, + { + "version": "v11.0.0", + "date": "2018-10-23", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.4.1", + "v8": "7.0.276.28", + "uv": "1.23.2", + "zlib": "1.2.11", + "openssl": "1.1.0i", + "modules": "67", + "lts": false, + "security": false + }, + { + "version": "v10.19.0", + "date": "2020-02-05", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.13.4", + "v8": "6.8.275.32", + "uv": "1.28.0", + "zlib": "1.2.11", + "openssl": "1.1.1d", + "modules": "64", + "lts": "Dubnium", + "security": true + }, + { + "version": "v10.18.1", + "date": "2020-01-07", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.13.4", + "v8": "6.8.275.32", + "uv": "1.28.0", + "zlib": "1.2.11", + "openssl": "1.1.1d", + "modules": "64", + "lts": "Dubnium", + "security": false + }, + { + "version": "v10.18.0", + "date": "2019-12-16", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.13.4", + "v8": "6.8.275.32", + "uv": "1.28.0", + "zlib": "1.2.11", + "openssl": "1.1.1d", + "modules": "64", + "lts": "Dubnium", + "security": true + }, + { + "version": "v10.17.0", + "date": "2019-10-21", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.11.3", + "v8": "6.8.275.32", + "uv": "1.28.0", + "zlib": "1.2.11", + "openssl": "1.1.1d", + "modules": "64", + "lts": "Dubnium", + "security": false + }, + { + "version": "v10.16.3", + "date": "2019-08-15", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.9.0", + "v8": "6.8.275.32", + "uv": "1.28.0", + "zlib": "1.2.11", + "openssl": "1.1.1c", + "modules": "64", + "lts": "Dubnium", + "security": true + }, + { + "version": "v10.16.2", + "date": "2019-08-06", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.9.0", + "v8": "6.8.275.32", + "uv": "1.28.0", + "zlib": "1.2.11", + "openssl": "1.1.1c", + "modules": "64", + "lts": "Dubnium", + "security": false + }, + { + "version": "v10.16.1", + "date": "2019-07-31", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.9.0", + "v8": "6.8.275.32", + "uv": "1.28.0", + "zlib": "1.2.11", + "openssl": "1.1.1c", + "modules": "64", + "lts": "Dubnium", + "security": false + }, + { + "version": "v10.16.0", + "date": "2019-05-28", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.9.0", + "v8": "6.8.275.32", + "uv": "1.28.0", + "zlib": "1.2.11", + "openssl": "1.1.1b", + "modules": "64", + "lts": "Dubnium", + "security": false + }, + { + "version": "v10.15.3", + "date": "2019-03-05", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.4.1", + "v8": "6.8.275.32", + "uv": "1.23.2", + "zlib": "1.2.11", + "openssl": "1.1.0j", + "modules": "64", + "lts": "Dubnium", + "security": false + }, + { + "version": "v10.15.2", + "date": "2019-02-28", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.4.1", + "v8": "6.8.275.32", + "uv": "1.23.2", + "zlib": "1.2.11", + "openssl": "1.1.0j", + "modules": "64", + "lts": "Dubnium", + "security": true + }, + { + "version": "v10.15.1", + "date": "2019-01-29", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.4.1", + "v8": "6.8.275.32", + "uv": "1.23.2", + "zlib": "1.2.11", + "openssl": "1.1.0j", + "modules": "64", + "lts": "Dubnium", + "security": false + }, + { + "version": "v10.15.0", + "date": "2018-12-26", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.4.1", + "v8": "6.8.275.32", + "uv": "1.23.2", + "zlib": "1.2.11", + "openssl": "1.1.0j", + "modules": "64", + "lts": "Dubnium", + "security": false + }, + { + "version": "v10.14.2", + "date": "2018-12-10", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.4.1", + "v8": "6.8.275.32", + "uv": "1.23.2", + "zlib": "1.2.11", + "openssl": "1.1.0j", + "modules": "64", + "lts": "Dubnium", + "security": false + }, + { + "version": "v10.14.1", + "date": "2018-11-29", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.4.1", + "v8": "6.8.275.32", + "uv": "1.23.2", + "zlib": "1.2.11", + "openssl": "1.1.0j", + "modules": "64", + "lts": "Dubnium", + "security": false + }, + { + "version": "v10.14.0", + "date": "2018-11-27", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.4.1", + "v8": "6.8.275.32", + "uv": "1.23.2", + "zlib": "1.2.11", + "openssl": "1.1.0j", + "modules": "64", + "lts": "Dubnium", + "security": true + }, + { + "version": "v10.13.0", + "date": "2018-10-30", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.4.1", + "v8": "6.8.275.32", + "uv": "1.23.2", + "zlib": "1.2.11", + "openssl": "1.1.0i", + "modules": "64", + "lts": "Dubnium", + "security": false + }, + { + "version": "v10.12.0", + "date": "2018-10-10", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.4.1", + "v8": "6.8.275.32", + "uv": "1.23.2", + "zlib": "1.2.11", + "openssl": "1.1.0i", + "modules": "64", + "lts": false, + "security": false + }, + { + "version": "v10.11.0", + "date": "2018-09-19", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.4.1", + "v8": "6.8.275.32", + "uv": "1.23.0", + "zlib": "1.2.11", + "openssl": "1.1.0i", + "modules": "64", + "lts": false, + "security": false + }, + { + "version": "v10.10.0", + "date": "2018-09-06", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.4.1", + "v8": "6.8.275.30", + "uv": "1.23.0", + "zlib": "1.2.11", + "openssl": "1.1.0i", + "modules": "64", + "lts": false, + "security": false + }, + { + "version": "v10.9.0", + "date": "2018-08-15", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.2.0", + "v8": "6.8.275.24", + "uv": "1.22.0", + "zlib": "1.2.11", + "openssl": "1.1.0i", + "modules": "64", + "lts": false, + "security": false + }, + { + "version": "v10.8.0", + "date": "2018-08-01", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.2.0", + "v8": "6.7.288.49", + "uv": "1.22.0", + "zlib": "1.2.11", + "openssl": "1.1.0h", + "modules": "64", + "lts": false, + "security": false + }, + { + "version": "v10.7.0", + "date": "2018-07-18", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.1.0", + "v8": "6.7.288.49", + "uv": "1.22.0", + "zlib": "1.2.11", + "openssl": "1.1.0h", + "modules": "64", + "lts": false, + "security": false + }, + { + "version": "v10.6.0", + "date": "2018-07-04", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.1.0", + "v8": "6.7.288.46", + "uv": "1.21.0", + "zlib": "1.2.11", + "openssl": "1.1.0h", + "modules": "64", + "lts": false, + "security": false + }, + { + "version": "v10.5.0", + "date": "2018-06-20", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.1.0", + "v8": "6.7.288.46", + "uv": "1.20.3", + "zlib": "1.2.11", + "openssl": "1.1.0h", + "modules": "64", + "lts": false, + "security": false + }, + { + "version": "v10.4.1", + "date": "2018-06-12", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.1.0", + "v8": "6.7.288.45", + "uv": "1.20.3", + "zlib": "1.2.11", + "openssl": "1.1.0h", + "modules": "64", + "lts": false, + "security": false + }, + { + "version": "v10.4.0", + "date": "2018-06-06", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.1.0", + "v8": "6.7.288.43", + "uv": "1.20.3", + "zlib": "1.2.11", + "openssl": "1.1.0h", + "modules": "64", + "lts": false, + "security": false + }, + { + "version": "v10.3.0", + "date": "2018-05-29", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.1.0", + "v8": "6.6.346.32", + "uv": "1.20.3", + "zlib": "1.2.11", + "openssl": "1.1.0h", + "modules": "64", + "lts": false, + "security": false + }, + { + "version": "v10.2.1", + "date": "2018-05-24", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.6.0", + "v8": "6.6.346.32", + "uv": "1.20.3", + "zlib": "1.2.11", + "openssl": "1.1.0h", + "modules": "64", + "lts": false, + "security": false + }, + { + "version": "v10.2.0", + "date": "2018-05-23", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.6.0", + "v8": "6.6.346.32", + "uv": "1.20.3", + "zlib": "1.2.11", + "openssl": "1.1.0h", + "modules": "64", + "lts": false, + "security": false + }, + { + "version": "v10.1.0", + "date": "2018-05-08", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.6.0", + "v8": "6.6.346.27", + "uv": "1.20.2", + "zlib": "1.2.11", + "openssl": "1.1.0h", + "modules": "64", + "lts": false, + "security": false + }, + { + "version": "v10.0.0", + "date": "2018-04-24", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.6.0", + "v8": "6.6.346.24", + "uv": "1.20.2", + "zlib": "1.2.11", + "openssl": "1.1.0h", + "modules": "64", + "lts": false, + "security": false + }, + { + "version": "v9.11.2", + "date": "2018-06-12", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.6.0", + "v8": "6.2.414.46", + "uv": "1.19.2", + "zlib": "1.2.11", + "openssl": "1.0.2o", + "modules": "59", + "lts": false, + "security": false + }, + { + "version": "v9.11.1", + "date": "2018-04-05", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.6.0", + "v8": "6.2.414.46", + "uv": "1.19.2", + "zlib": "1.2.11", + "openssl": "1.0.2o", + "modules": "59", + "lts": false, + "security": false + }, + { + "version": "v9.11.0", + "date": "2018-04-04", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.6.0", + "v8": "6.2.414.46", + "uv": "1.19.2", + "zlib": "1.2.11", + "openssl": "1.0.2o", + "modules": "59", + "lts": false, + "security": false + }, + { + "version": "v9.10.1", + "date": "2018-03-29", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.6.0", + "v8": "6.2.414.46", + "uv": "1.19.2", + "zlib": "1.2.11", + "openssl": "1.0.2o", + "modules": "59", + "lts": false, + "security": false + }, + { + "version": "v9.10.0", + "date": "2018-03-28", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.6.0", + "v8": "6.2.414.46", + "uv": "1.19.2", + "zlib": "1.2.11", + "openssl": "1.0.2o", + "modules": "59", + "lts": false, + "security": true + }, + { + "version": "v9.9.0", + "date": "2018-03-21", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.6.0", + "v8": "6.2.414.46", + "uv": "1.19.2", + "zlib": "1.2.11", + "openssl": "1.0.2n", + "modules": "59", + "lts": false, + "security": false + }, + { + "version": "v9.8.0", + "date": "2018-03-07", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.6.0", + "v8": "6.2.414.46", + "uv": "1.19.2", + "zlib": "1.2.11", + "openssl": "1.0.2n", + "modules": "59", + "lts": false, + "security": false + }, + { + "version": "v9.7.1", + "date": "2018-03-02", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.6.0", + "v8": "6.2.414.46", + "uv": "1.19.2", + "zlib": "1.2.11", + "openssl": "1.0.2n", + "modules": "59", + "lts": false, + "security": false + }, + { + "version": "v9.7.0", + "date": "2018-03-01", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.6.0", + "v8": "6.2.414.46", + "uv": "1.19.2", + "zlib": "1.2.11", + "openssl": "1.0.2n", + "modules": "59", + "lts": false, + "security": false + }, + { + "version": "v9.6.1", + "date": "2018-02-23", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.6.0", + "v8": "6.2.414.46", + "uv": "1.19.1", + "zlib": "1.2.11", + "openssl": "1.0.2n", + "modules": "59", + "lts": false, + "security": false + }, + { + "version": "v9.6.0", + "date": "2018-02-21", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.6.0", + "v8": "6.2.414.46", + "uv": "1.19.1", + "zlib": "1.2.11", + "openssl": "1.0.2n", + "modules": "59", + "lts": false, + "security": false + }, + { + "version": "v9.5.0", + "date": "2018-01-31", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.6.0", + "v8": "6.2.414.46", + "uv": "1.19.1", + "zlib": "1.2.11", + "openssl": "1.0.2n", + "modules": "59", + "lts": false, + "security": false + }, + { + "version": "v9.4.0", + "date": "2018-01-10", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.6.0", + "v8": "6.2.414.46", + "uv": "1.18.0", + "zlib": "1.2.11", + "openssl": "1.0.2n", + "modules": "59", + "lts": false, + "security": false + }, + { + "version": "v9.3.0", + "date": "2017-12-12", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.5.1", + "v8": "6.2.414.46", + "uv": "1.18.0", + "zlib": "1.2.11", + "openssl": "1.0.2n", + "modules": "59", + "lts": false, + "security": false + }, + { + "version": "v9.2.1", + "date": "2017-12-08", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.5.1", + "v8": "6.2.414.44", + "uv": "1.16.1", + "zlib": "1.2.11", + "openssl": "1.0.2n", + "modules": "59", + "lts": false, + "security": false + }, + { + "version": "v9.2.0", + "date": "2017-11-14", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.5.1", + "v8": "6.2.414.44", + "uv": "1.16.1", + "zlib": "1.2.11", + "openssl": "1.0.2m", + "modules": "59", + "lts": false, + "security": false + }, + { + "version": "v9.1.0", + "date": "2017-11-07", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.5.1", + "v8": "6.2.414.32", + "uv": "1.15.0", + "zlib": "1.2.11", + "openssl": "1.0.2m", + "modules": "59", + "lts": false, + "security": false + }, + { + "version": "v9.0.0", + "date": "2017-10-31", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.5.1", + "v8": "6.2.414.32", + "uv": "1.15.0", + "zlib": "1.2.11", + "openssl": "1.0.2l", + "modules": "59", + "lts": false, + "security": false + }, + { + "version": "v8.17.0", + "date": "2019-12-17", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.13.4", + "v8": "6.2.414.78", + "uv": "1.23.2", + "zlib": "1.2.11", + "openssl": "1.0.2s", + "modules": "57", + "lts": "Carbon", + "security": true + }, + { + "version": "v8.16.2", + "date": "2019-10-08", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.4.1", + "v8": "6.2.414.78", + "uv": "1.23.2", + "zlib": "1.2.11", + "openssl": "1.0.2s", + "modules": "57", + "lts": "Carbon", + "security": false + }, + { + "version": "v8.16.1", + "date": "2019-08-15", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.4.1", + "v8": "6.2.414.77", + "uv": "1.23.2", + "zlib": "1.2.11", + "openssl": "1.0.2r", + "modules": "57", + "lts": "Carbon", + "security": true + }, + { + "version": "v8.16.0", + "date": "2019-04-16", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.4.1", + "v8": "6.2.414.77", + "uv": "1.23.2", + "zlib": "1.2.11", + "openssl": "1.0.2r", + "modules": "57", + "lts": "Carbon", + "security": false + }, + { + "version": "v8.15.1", + "date": "2019-02-28", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.4.1", + "v8": "6.2.414.75", + "uv": "1.23.2", + "zlib": "1.2.11", + "openssl": "1.0.2r", + "modules": "57", + "lts": "Carbon", + "security": true + }, + { + "version": "v8.15.0", + "date": "2018-12-26", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.4.1", + "v8": "6.2.414.75", + "uv": "1.23.2", + "zlib": "1.2.11", + "openssl": "1.0.2q", + "modules": "57", + "lts": "Carbon", + "security": false + }, + { + "version": "v8.14.1", + "date": "2018-12-18", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.4.1", + "v8": "6.2.414.75", + "uv": "1.23.2", + "zlib": "1.2.11", + "openssl": "1.0.2q", + "modules": "57", + "lts": "Carbon", + "security": false + }, + { + "version": "v8.14.0", + "date": "2018-11-27", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.4.1", + "v8": "6.2.414.72", + "uv": "1.23.2", + "zlib": "1.2.11", + "openssl": "1.0.2q", + "modules": "57", + "lts": "Carbon", + "security": true + }, + { + "version": "v8.13.0", + "date": "2018-11-20", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.4.1", + "v8": "6.2.414.72", + "uv": "1.23.2", + "zlib": "1.2.11", + "openssl": "1.0.2p", + "modules": "57", + "lts": "Carbon", + "security": false + }, + { + "version": "v8.12.0", + "date": "2018-09-10", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "6.4.1", + "v8": "6.2.414.66", + "uv": "1.19.2", + "zlib": "1.2.11", + "openssl": "1.0.2p", + "modules": "57", + "lts": "Carbon", + "security": false + }, + { + "version": "v8.11.4", + "date": "2018-08-15", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.6.0", + "v8": "6.2.414.54", + "uv": "1.19.1", + "zlib": "1.2.11", + "openssl": "1.0.2p", + "modules": "57", + "lts": "Carbon", + "security": true + }, + { + "version": "v8.11.3", + "date": "2018-06-12", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.6.0", + "v8": "6.2.414.54", + "uv": "1.19.1", + "zlib": "1.2.11", + "openssl": "1.0.2o", + "modules": "57", + "lts": "Carbon", + "security": false + }, + { + "version": "v8.11.2", + "date": "2018-05-15", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.6.0", + "v8": "6.2.414.54", + "uv": "1.19.1", + "zlib": "1.2.11", + "openssl": "1.0.2o", + "modules": "57", + "lts": "Carbon", + "security": false + }, + { + "version": "v8.11.1", + "date": "2018-03-29", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.6.0", + "v8": "6.2.414.50", + "uv": "1.19.1", + "zlib": "1.2.11", + "openssl": "1.0.2o", + "modules": "57", + "lts": "Carbon", + "security": false + }, + { + "version": "v8.11.0", + "date": "2018-03-28", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.6.0", + "v8": "6.2.414.50", + "uv": "1.19.1", + "zlib": "1.2.11", + "openssl": "1.0.2o", + "modules": "57", + "lts": "Carbon", + "security": true + }, + { + "version": "v8.10.0", + "date": "2018-03-06", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.6.0", + "v8": "6.2.414.50", + "uv": "1.19.1", + "zlib": "1.2.11", + "openssl": "1.0.2n", + "modules": "57", + "lts": "Carbon", + "security": false + }, + { + "version": "v8.9.4", + "date": "2018-01-02", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.6.0", + "v8": "6.1.534.50", + "uv": "1.15.0", + "zlib": "1.2.11", + "openssl": "1.0.2n", + "modules": "57", + "lts": "Carbon", + "security": false + }, + { + "version": "v8.9.3", + "date": "2017-12-07", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.5.1", + "v8": "6.1.534.48", + "uv": "1.15.0", + "zlib": "1.2.11", + "openssl": "1.0.2n", + "modules": "57", + "lts": "Carbon", + "security": true + }, + { + "version": "v8.9.2", + "date": "2017-12-05", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.5.1", + "v8": "6.1.534.48", + "uv": "1.15.0", + "zlib": "1.2.11", + "openssl": "1.0.2m", + "modules": "57", + "lts": "Carbon", + "security": false + }, + { + "version": "v8.9.1", + "date": "2017-11-07", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.5.1", + "v8": "6.1.534.47", + "uv": "1.15.0", + "zlib": "1.2.11", + "openssl": "1.0.2m", + "modules": "57", + "lts": "Carbon", + "security": false + }, + { + "version": "v8.9.0", + "date": "2017-10-31", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.5.1", + "v8": "6.1.534.46", + "uv": "1.15.0", + "zlib": "1.2.11", + "openssl": "1.0.2l", + "modules": "57", + "lts": "Carbon", + "security": false + }, + { + "version": "v8.8.1", + "date": "2017-10-25", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.4.2", + "v8": "6.1.534.42", + "uv": "1.15.0", + "zlib": "1.2.11", + "openssl": "1.0.2l", + "modules": "57", + "lts": false, + "security": false + }, + { + "version": "v8.8.0", + "date": "2017-10-24", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.4.2", + "v8": "6.1.534.42", + "uv": "1.15.0", + "zlib": "1.2.11", + "openssl": "1.0.2l", + "modules": "57", + "lts": false, + "security": false + }, + { + "version": "v8.7.0", + "date": "2017-10-11", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.4.2", + "v8": "6.1.534.42", + "uv": "1.15.0", + "zlib": "1.2.11", + "openssl": "1.0.2l", + "modules": "57", + "lts": false, + "security": false + }, + { + "version": "v8.6.0", + "date": "2017-09-26", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.3.0", + "v8": "6.0.287.53", + "uv": "1.14.1", + "zlib": "1.2.11", + "openssl": "1.0.2l", + "modules": "57", + "lts": false, + "security": false + }, + { + "version": "v8.5.0", + "date": "2017-09-12", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.3.0", + "v8": "6.0.287.53", + "uv": "1.14.1", + "zlib": "1.2.11", + "openssl": "1.0.2l", + "modules": "57", + "lts": false, + "security": false + }, + { + "version": "v8.4.0", + "date": "2017-08-15", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.3.0", + "v8": "6.0.286.52", + "uv": "1.13.1", + "zlib": "1.2.11", + "openssl": "1.0.2l", + "modules": "57", + "lts": false, + "security": false + }, + { + "version": "v8.3.0", + "date": "2017-08-08", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.3.0", + "v8": "6.0.286.52", + "uv": "1.13.1", + "zlib": "1.2.11", + "openssl": "1.0.2l", + "modules": "57", + "lts": false, + "security": false + }, + { + "version": "v8.2.1", + "date": "2017-07-20", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.3.0", + "v8": "5.8.283.41", + "uv": "1.13.1", + "zlib": "1.2.11", + "openssl": "1.0.2l", + "modules": "57", + "lts": false, + "security": false + }, + { + "version": "v8.2.0", + "date": "2017-07-19", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.3.0", + "v8": "5.8.283.41", + "uv": "1.13.1", + "zlib": "1.2.11", + "openssl": "1.0.2l", + "modules": "57", + "lts": false, + "security": false + }, + { + "version": "v8.1.4", + "date": "2017-07-11", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.0.3", + "v8": "5.8.283.41", + "uv": "1.12.0", + "zlib": "1.2.11", + "openssl": "1.0.2l", + "modules": "57", + "lts": false, + "security": true + }, + { + "version": "v8.1.3", + "date": "2017-06-29", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.0.3", + "v8": "5.8.283.41", + "uv": "1.12.0", + "zlib": "1.2.11", + "openssl": "1.0.2l", + "modules": "57", + "lts": false, + "security": false + }, + { + "version": "v8.1.2", + "date": "2017-06-15", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.0.3", + "v8": "5.8.283.41", + "uv": "1.12.0", + "zlib": "1.2.11", + "openssl": "1.0.2l", + "modules": "57", + "lts": false, + "security": false + }, + { + "version": "v8.1.1", + "date": "2017-06-13", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.0.3", + "v8": "5.8.283.41", + "uv": "1.12.0", + "zlib": "1.2.11", + "openssl": "1.0.2l", + "modules": "57", + "lts": false, + "security": false + }, + { + "version": "v8.1.0", + "date": "2017-06-08", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.0.3", + "v8": "5.8.283.41", + "uv": "1.12.0", + "zlib": "1.2.11", + "openssl": "1.0.2l", + "modules": "57", + "lts": false, + "security": false + }, + { + "version": "v8.0.0", + "date": "2017-05-30", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "5.0.0", + "v8": "5.8.283.41", + "uv": "1.11.0", + "zlib": "1.2.11", + "openssl": "1.0.2k", + "modules": "57", + "lts": false, + "security": false + }, + { + "version": "v7.10.1", + "date": "2017-07-11", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "4.2.0", + "v8": "5.5.372.43", + "uv": "1.11.0", + "zlib": "1.2.11", + "openssl": "1.0.2k", + "modules": "51", + "lts": false, + "security": true + }, + { + "version": "v7.10.0", + "date": "2017-05-02", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "4.2.0", + "v8": "5.5.372.43", + "uv": "1.11.0", + "zlib": "1.2.11", + "openssl": "1.0.2k", + "modules": "51", + "lts": false, + "security": false + }, + { + "version": "v7.9.0", + "date": "2017-04-11", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "4.2.0", + "v8": "5.5.372.43", + "uv": "1.11.0", + "zlib": "1.2.11", + "openssl": "1.0.2k", + "modules": "51", + "lts": false, + "security": false + }, + { + "version": "v7.8.0", + "date": "2017-03-29", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "4.2.0", + "v8": "5.5.372.43", + "uv": "1.11.0", + "zlib": "1.2.11", + "openssl": "1.0.2k", + "modules": "51", + "lts": false, + "security": false + }, + { + "version": "v7.7.4", + "date": "2017-03-21", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "4.1.2", + "v8": "5.5.372.42", + "uv": "1.11.0", + "zlib": "1.2.11", + "openssl": "1.0.2k", + "modules": "51", + "lts": false, + "security": false + }, + { + "version": "v7.7.3", + "date": "2017-03-14", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "4.1.2", + "v8": "5.5.372.41", + "uv": "1.11.0", + "zlib": "1.2.11", + "openssl": "1.0.2k", + "modules": "51", + "lts": false, + "security": false + }, + { + "version": "v7.7.2", + "date": "2017-03-08", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "4.1.2", + "v8": "5.5.372.41", + "uv": "1.11.0", + "zlib": "1.2.11", + "openssl": "1.0.2k", + "modules": "51", + "lts": false, + "security": false + }, + { + "version": "v7.7.1", + "date": "2017-03-02", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "4.1.2", + "v8": "5.5.372.41", + "uv": "1.11.0", + "zlib": "1.2.11", + "openssl": "1.0.2k", + "modules": "51", + "lts": false, + "security": false + }, + { + "version": "v7.7.0", + "date": "2017-02-28", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "4.1.2", + "v8": "5.5.372.41", + "uv": "1.11.0", + "zlib": "1.2.11", + "openssl": "1.0.2k", + "modules": "51", + "lts": false, + "security": false + }, + { + "version": "v7.6.0", + "date": "2017-02-21", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "4.1.2", + "v8": "5.5.372.40", + "uv": "1.11.0", + "zlib": "1.2.11", + "openssl": "1.0.2k", + "modules": "51", + "lts": false, + "security": false + }, + { + "version": "v7.5.0", + "date": "2017-01-31", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "4.1.2", + "v8": "5.4.500.48", + "uv": "1.10.2", + "zlib": "1.2.8", + "openssl": "1.0.2k", + "modules": "51", + "lts": false, + "security": false + }, + { + "version": "v7.4.0", + "date": "2017-01-04", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "4.0.5", + "v8": "5.4.500.45", + "uv": "1.10.1", + "zlib": "1.2.8", + "openssl": "1.0.2j", + "modules": "51", + "lts": false, + "security": false + }, + { + "version": "v7.3.0", + "date": "2016-12-20", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.4.500.45", + "uv": "1.10.1", + "zlib": "1.2.8", + "openssl": "1.0.2j", + "modules": "51", + "lts": false, + "security": false + }, + { + "version": "v7.2.1", + "date": "2016-12-06", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.4.500.44", + "uv": "1.10.1", + "zlib": "1.2.8", + "openssl": "1.0.2j", + "modules": "51", + "lts": false, + "security": false + }, + { + "version": "v7.2.0", + "date": "2016-11-22", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.9", + "v8": "5.4.500.43", + "uv": "1.10.1", + "zlib": "1.2.8", + "openssl": "1.0.2j", + "modules": "51", + "lts": false, + "security": false + }, + { + "version": "v7.1.0", + "date": "2016-11-08", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.9", + "v8": "5.4.500.36", + "uv": "1.10.0", + "zlib": "1.2.8", + "openssl": "1.0.2j", + "modules": "51", + "lts": false, + "security": false + }, + { + "version": "v7.0.0", + "date": "2016-10-25", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.8", + "v8": "5.4.500.36", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2j", + "modules": "51", + "lts": false, + "security": false + }, + { + "version": "v6.17.1", + "date": "2019-04-03", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.111", + "uv": "1.16.1", + "zlib": "1.2.11", + "openssl": "1.0.2r", + "modules": "48", + "lts": "Boron", + "security": false + }, + { + "version": "v6.17.0", + "date": "2019-02-28", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.111", + "uv": "1.16.1", + "zlib": "1.2.11", + "openssl": "1.0.2r", + "modules": "48", + "lts": "Boron", + "security": true + }, + { + "version": "v6.16.0", + "date": "2018-12-26", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.111", + "uv": "1.16.1", + "zlib": "1.2.11", + "openssl": "1.0.2q", + "modules": "48", + "lts": "Boron", + "security": false + }, + { + "version": "v6.15.1", + "date": "2018-12-03", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.111", + "uv": "1.16.1", + "zlib": "1.2.11", + "openssl": "1.0.2q", + "modules": "48", + "lts": "Boron", + "security": false + }, + { + "version": "v6.15.0", + "date": "2018-11-27", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.111", + "uv": "1.16.1", + "zlib": "1.2.11", + "openssl": "1.0.2q", + "modules": "48", + "lts": "Boron", + "security": true + }, + { + "version": "v6.14.4", + "date": "2018-08-15", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.111", + "uv": "1.16.1", + "zlib": "1.2.11", + "openssl": "1.0.2p", + "modules": "48", + "lts": "Boron", + "security": true + }, + { + "version": "v6.14.3", + "date": "2018-06-12", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.111", + "uv": "1.16.1", + "zlib": "1.2.11", + "openssl": "1.0.2o", + "modules": "48", + "lts": "Boron", + "security": false + }, + { + "version": "v6.14.2", + "date": "2018-04-30", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.111", + "uv": "1.16.1", + "zlib": "1.2.11", + "openssl": "1.0.2o", + "modules": "48", + "lts": "Boron", + "security": false + }, + { + "version": "v6.14.1", + "date": "2018-03-29", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.111", + "uv": "1.16.1", + "zlib": "1.2.11", + "openssl": "1.0.2o", + "modules": "48", + "lts": "Boron", + "security": false + }, + { + "version": "v6.14.0", + "date": "2018-03-28", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.111", + "uv": "1.16.1", + "zlib": "1.2.11", + "openssl": "1.0.2o", + "modules": "48", + "lts": "Boron", + "security": true + }, + { + "version": "v6.13.1", + "date": "2018-03-06", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.111", + "uv": "1.16.1", + "zlib": "1.2.11", + "openssl": "1.0.2n", + "modules": "48", + "lts": "Boron", + "security": false + }, + { + "version": "v6.13.0", + "date": "2018-02-10", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.111", + "uv": "1.16.1", + "zlib": "1.2.11", + "openssl": "1.0.2n", + "modules": "48", + "lts": "Boron", + "security": false + }, + { + "version": "v6.12.3", + "date": "2018-01-02", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.111", + "uv": "1.15.0", + "zlib": "1.2.11", + "openssl": "1.0.2n", + "modules": "48", + "lts": "Boron", + "security": false + }, + { + "version": "v6.12.2", + "date": "2017-12-07", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.109", + "uv": "1.15.0", + "zlib": "1.2.11", + "openssl": "1.0.2n", + "modules": "48", + "lts": "Boron", + "security": true + }, + { + "version": "v6.12.1", + "date": "2017-12-05", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.109", + "uv": "1.15.0", + "zlib": "1.2.11", + "openssl": "1.0.2m", + "modules": "48", + "lts": "Boron", + "security": false + }, + { + "version": "v6.12.0", + "date": "2017-11-06", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.108", + "uv": "1.15.0", + "zlib": "1.2.11", + "openssl": "1.0.2m", + "modules": "48", + "lts": "Boron", + "security": false + }, + { + "version": "v6.11.5", + "date": "2017-10-24", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.108", + "uv": "1.11.0", + "zlib": "1.2.11", + "openssl": "1.0.2l", + "modules": "48", + "lts": "Boron", + "security": true + }, + { + "version": "v6.11.4", + "date": "2017-10-03", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.108", + "uv": "1.11.0", + "zlib": "1.2.11", + "openssl": "1.0.2l", + "modules": "48", + "lts": "Boron", + "security": false + }, + { + "version": "v6.11.3", + "date": "2017-09-05", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.107", + "uv": "1.11.0", + "zlib": "1.2.11", + "openssl": "1.0.2l", + "modules": "48", + "lts": "Boron", + "security": false + }, + { + "version": "v6.11.2", + "date": "2017-08-01", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.103", + "uv": "1.11.0", + "zlib": "1.2.11", + "openssl": "1.0.2l", + "modules": "48", + "lts": "Boron", + "security": false + }, + { + "version": "v6.11.1", + "date": "2017-07-10", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.103", + "uv": "1.11.0", + "zlib": "1.2.11", + "openssl": "1.0.2k", + "modules": "48", + "lts": "Boron", + "security": true + }, + { + "version": "v6.11.0", + "date": "2017-06-06", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.102", + "uv": "1.11.0", + "zlib": "1.2.11", + "openssl": "1.0.2k", + "modules": "48", + "lts": "Boron", + "security": false + }, + { + "version": "v6.10.3", + "date": "2017-05-02", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.101", + "uv": "1.9.1", + "zlib": "1.2.11", + "openssl": "1.0.2k", + "modules": "48", + "lts": "Boron", + "security": false + }, + { + "version": "v6.10.2", + "date": "2017-04-04", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.98", + "uv": "1.9.1", + "zlib": "1.2.11", + "openssl": "1.0.2k", + "modules": "48", + "lts": "Boron", + "security": false + }, + { + "version": "v6.10.1", + "date": "2017-03-21", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.95", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2k", + "modules": "48", + "lts": "Boron", + "security": false + }, + { + "version": "v6.10.0", + "date": "2017-02-21", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.93", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2k", + "modules": "48", + "lts": "Boron", + "security": false + }, + { + "version": "v6.9.5", + "date": "2017-01-31", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.89", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2k", + "modules": "48", + "lts": "Boron", + "security": false + }, + { + "version": "v6.9.4", + "date": "2017-01-05", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.89", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2j", + "modules": "48", + "lts": "Boron", + "security": false + }, + { + "version": "v6.9.3", + "date": "2017-01-05", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.10", + "v8": "5.1.281.89", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2j", + "modules": "48", + "lts": "Boron", + "security": false + }, + { + "version": "v6.9.2", + "date": "2016-12-06", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.9", + "v8": "5.1.281.88", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2j", + "modules": "48", + "lts": "Boron", + "security": false + }, + { + "version": "v6.9.1", + "date": "2016-10-19", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.8", + "v8": "5.1.281.84", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2j", + "modules": "48", + "lts": "Boron", + "security": false + }, + { + "version": "v6.9.0", + "date": "2016-10-18", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.8", + "v8": "5.1.281.84", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2j", + "modules": "48", + "lts": "Boron", + "security": false + }, + { + "version": "v6.8.1", + "date": "2016-10-14", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.8", + "v8": "5.1.281.84", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2j", + "modules": "48", + "lts": false, + "security": false + }, + { + "version": "v6.8.0", + "date": "2016-10-12", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.8", + "v8": "5.1.281.84", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2j", + "modules": "48", + "lts": false, + "security": false + }, + { + "version": "v6.7.0", + "date": "2016-09-27", + "files": [ + "aix-ppc64", + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.3", + "v8": "5.1.281.83", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2j", + "modules": "48", + "lts": false, + "security": true + }, + { + "version": "v6.6.0", + "date": "2016-09-14", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-s390x", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.3", + "v8": "5.1.281.83", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2h", + "modules": "48", + "lts": false, + "security": false + }, + { + "version": "v6.5.0", + "date": "2016-08-26", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.3", + "v8": "5.1.281.81", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2h", + "modules": "48", + "lts": false, + "security": false + }, + { + "version": "v6.4.0", + "date": "2016-08-12", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.3", + "v8": "5.0.71.60", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2h", + "modules": "48", + "lts": false, + "security": false + }, + { + "version": "v6.3.1", + "date": "2016-07-21", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.3", + "v8": "5.0.71.57", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2h", + "modules": "48", + "lts": false, + "security": false + }, + { + "version": "v6.3.0", + "date": "2016-07-06", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.10.3", + "v8": "5.0.71.52", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2h", + "modules": "48", + "lts": false, + "security": false + }, + { + "version": "v6.2.2", + "date": "2016-06-16", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.9.5", + "v8": "5.0.71.52", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2h", + "modules": "48", + "lts": false, + "security": false + }, + { + "version": "v6.2.1", + "date": "2016-06-02", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "3.9.3", + "v8": "5.0.71.52", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2h", + "modules": "48", + "lts": false, + "security": false + }, + { + "version": "v6.2.0", + "date": "2016-05-17", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "3.8.9", + "v8": "5.0.71.47", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2h", + "modules": "48", + "lts": false, + "security": false + }, + { + "version": "v6.1.0", + "date": "2016-05-05", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "3.8.6", + "v8": "5.0.71.35", + "uv": "1.9.0", + "zlib": "1.2.8", + "openssl": "1.0.2h", + "modules": "48", + "lts": false, + "security": false + }, + { + "version": "v6.0.0", + "date": "2016-04-26", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "3.8.6", + "v8": "5.0.71.35", + "uv": "1.9.0", + "zlib": "1.2.8", + "openssl": "1.0.2g", + "modules": "48", + "lts": false, + "security": false + }, + { + "version": "v5.12.0", + "date": "2016-06-23", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "3.8.6", + "v8": "4.6.85.32", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2h", + "modules": "47", + "lts": false, + "security": false + }, + { + "version": "v5.11.1", + "date": "2016-05-05", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "3.8.6", + "v8": "4.6.85.31", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2h", + "modules": "47", + "lts": false, + "security": false + }, + { + "version": "v5.11.0", + "date": "2016-04-21", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "3.8.6", + "v8": "4.6.85.31", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2g", + "modules": "47", + "lts": false, + "security": false + }, + { + "version": "v5.10.1", + "date": "2016-04-05", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "3.8.3", + "v8": "4.6.85.31", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2g", + "modules": "47", + "lts": false, + "security": false + }, + { + "version": "v5.10.0", + "date": "2016-04-01", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "3.8.3", + "v8": "4.6.85.31", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2g", + "modules": "47", + "lts": false, + "security": false + }, + { + "version": "v5.9.1", + "date": "2016-03-22", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "3.7.3", + "v8": "4.6.85.31", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2g", + "modules": "47", + "lts": false, + "security": false + }, + { + "version": "v5.9.0", + "date": "2016-03-16", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "3.7.3", + "v8": "4.6.85.31", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2g", + "modules": "47", + "lts": false, + "security": false + }, + { + "version": "v5.8.0", + "date": "2016-03-09", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "3.7.3", + "v8": "4.6.85.31", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2g", + "modules": "47", + "lts": false, + "security": false + }, + { + "version": "v5.7.1", + "date": "2016-03-02", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "3.6.0", + "v8": "4.6.85.31", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2g", + "modules": "47", + "lts": false, + "security": false + }, + { + "version": "v5.7.0", + "date": "2016-02-23", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "3.6.0", + "v8": "4.6.85.31", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2f", + "modules": "47", + "lts": false, + "security": false + }, + { + "version": "v5.6.0", + "date": "2016-02-09", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "3.6.0", + "v8": "4.6.85.31", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2f", + "modules": "47", + "lts": false, + "security": false + }, + { + "version": "v5.5.0", + "date": "2016-01-21", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "3.3.12", + "v8": "4.6.85.31", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2e", + "modules": "47", + "lts": false, + "security": false + }, + { + "version": "v5.4.1", + "date": "2016-01-12", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "3.3.12", + "v8": "4.6.85.31", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2e", + "modules": "47", + "lts": false, + "security": false + }, + { + "version": "v5.4.0", + "date": "2016-01-06", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "3.3.12", + "v8": "4.6.85.31", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2e", + "modules": "47", + "lts": false, + "security": false + }, + { + "version": "v5.3.0", + "date": "2015-12-15", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "3.3.12", + "v8": "4.6.85.31", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2e", + "modules": "47", + "lts": false, + "security": false + }, + { + "version": "v5.2.0", + "date": "2015-12-09", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "3.3.12", + "v8": "4.6.85.31", + "uv": "1.7.5", + "zlib": "1.2.8", + "openssl": "1.0.2e", + "modules": "47", + "lts": false, + "security": false + }, + { + "version": "v5.1.1", + "date": "2015-12-03", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "3.3.12", + "v8": "4.6.85.31", + "uv": "1.7.5", + "zlib": "1.2.8", + "openssl": "1.0.2e", + "modules": "47", + "lts": false, + "security": false + }, + { + "version": "v5.1.0", + "date": "2015-11-17", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "3.3.12", + "v8": "4.6.85.31", + "uv": "1.7.5", + "zlib": "1.2.8", + "openssl": "1.0.2d", + "modules": "47", + "lts": false, + "security": false + }, + { + "version": "v5.0.0", + "date": "2015-10-29", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "3.3.6", + "v8": "4.6.85.28", + "uv": "1.7.5", + "zlib": "1.2.8", + "openssl": "1.0.2d", + "modules": "47", + "lts": false, + "security": false + }, + { + "version": "v4.9.1", + "date": "2018-03-29", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "2.15.11", + "v8": "4.5.103.53", + "uv": "1.9.1", + "zlib": "1.2.11", + "openssl": "1.0.2o", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.9.0", + "date": "2018-03-28", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "2.15.11", + "v8": "4.5.103.53", + "uv": "1.9.1", + "zlib": "1.2.11", + "openssl": "1.0.2o", + "modules": "46", + "lts": "Argon", + "security": true + }, + { + "version": "v4.8.7", + "date": "2017-12-07", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "2.15.11", + "v8": "4.5.103.53", + "uv": "1.9.1", + "zlib": "1.2.11", + "openssl": "1.0.2n", + "modules": "46", + "lts": "Argon", + "security": true + }, + { + "version": "v4.8.6", + "date": "2017-11-06", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "2.15.11", + "v8": "4.5.103.53", + "uv": "1.9.1", + "zlib": "1.2.11", + "openssl": "1.0.2m", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.8.5", + "date": "2017-10-24", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "2.15.11", + "v8": "4.5.103.47", + "uv": "1.9.1", + "zlib": "1.2.11", + "openssl": "1.0.2k", + "modules": "46", + "lts": "Argon", + "security": true + }, + { + "version": "v4.8.4", + "date": "2017-07-11", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "2.15.11", + "v8": "4.5.103.47", + "uv": "1.9.1", + "zlib": "1.2.11", + "openssl": "1.0.2k", + "modules": "46", + "lts": "Argon", + "security": true + }, + { + "version": "v4.8.3", + "date": "2017-05-02", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "2.15.11", + "v8": "4.5.103.47", + "uv": "1.9.1", + "zlib": "1.2.11", + "openssl": "1.0.2k", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.8.2", + "date": "2017-04-04", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "2.15.11", + "v8": "4.5.103.46", + "uv": "1.9.1", + "zlib": "1.2.11", + "openssl": "1.0.2k", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.8.1", + "date": "2017-03-21", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "2.15.11", + "v8": "4.5.103.46", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2k", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.8.0", + "date": "2017-02-21", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "2.15.11", + "v8": "4.5.103.45", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2k", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.7.3", + "date": "2017-01-31", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "2.15.11", + "v8": "4.5.103.43", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2k", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.7.2", + "date": "2017-01-05", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "2.15.11", + "v8": "4.5.103.43", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2j", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.7.1", + "date": "2017-01-05", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "2.15.11", + "v8": "4.5.103.43", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2j", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.7.0", + "date": "2016-12-06", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "2.15.11", + "v8": "4.5.103.43", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2j", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.6.2", + "date": "2016-11-08", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "2.15.11", + "v8": "4.5.103.42", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2j", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.6.1", + "date": "2016-10-18", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "2.15.9", + "v8": "4.5.103.37", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2j", + "modules": "46", + "lts": "Argon", + "security": true + }, + { + "version": "v4.6.0", + "date": "2016-09-27", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "2.15.9", + "v8": "4.5.103.37", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2j", + "modules": "46", + "lts": "Argon", + "security": true + }, + { + "version": "v4.5.0", + "date": "2016-08-16", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-7z", + "win-x64-exe", + "win-x64-msi", + "win-x64-zip", + "win-x86-7z", + "win-x86-exe", + "win-x86-msi", + "win-x86-zip" + ], + "npm": "2.15.9", + "v8": "4.5.103.37", + "uv": "1.9.1", + "zlib": "1.2.8", + "openssl": "1.0.2h", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.4.7", + "date": "2016-06-28", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.15.8", + "v8": "4.5.103.36", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2h", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.4.6", + "date": "2016-06-23", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.15.5", + "v8": "4.5.103.36", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2h", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.4.5", + "date": "2016-05-24", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.15.5", + "v8": "4.5.103.35", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2h", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.4.4", + "date": "2016-05-05", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.15.1", + "v8": "4.5.103.35", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2h", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.4.3", + "date": "2016-04-12", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.15.1", + "v8": "4.5.103.35", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2g", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.4.2", + "date": "2016-04-01", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.15.0", + "v8": "4.5.103.35", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2g", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.4.1", + "date": "2016-03-22", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.14.20", + "v8": "4.5.103.35", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2g", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.4.0", + "date": "2016-03-08", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.14.20", + "v8": "4.5.103.35", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2g", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.3.2", + "date": "2016-03-02", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-ppc64le", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.14.12", + "v8": "4.5.103.35", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2g", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.3.1", + "date": "2016-02-16", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.14.12", + "v8": "4.5.103.35", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2f", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.3.0", + "date": "2016-02-09", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.14.12", + "v8": "4.5.103.35", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2f", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.2.6", + "date": "2016-01-21", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.14.12", + "v8": "4.5.103.35", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2e", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.2.5", + "date": "2016-01-20", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.14.12", + "v8": "4.5.103.35", + "uv": "1.8.0", + "zlib": "1.2.8", + "openssl": "1.0.2e", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.2.4", + "date": "2015-12-23", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.14.12", + "v8": "4.5.103.35", + "uv": "1.7.5", + "zlib": "1.2.8", + "openssl": "1.0.2e", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.2.3", + "date": "2015-12-03", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.14.7", + "v8": "4.5.103.35", + "uv": "1.7.5", + "zlib": "1.2.8", + "openssl": "1.0.2e", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.2.2", + "date": "2015-11-03", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.14.7", + "v8": "4.5.103.35", + "uv": "1.7.5", + "zlib": "1.2.8", + "openssl": "1.0.2d", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.2.1", + "date": "2015-10-13", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.14.7", + "v8": "4.5.103.35", + "uv": "1.7.5", + "zlib": "1.2.8", + "openssl": "1.0.2d", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.2.0", + "date": "2015-10-12", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.14.7", + "v8": "4.5.103.35", + "uv": "1.7.5", + "zlib": "1.2.8", + "openssl": "1.0.2d", + "modules": "46", + "lts": "Argon", + "security": false + }, + { + "version": "v4.1.2", + "date": "2015-10-05", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.14.4", + "v8": "4.5.103.35", + "uv": "1.7.5", + "zlib": "1.2.8", + "openssl": "1.0.2d", + "modules": "46", + "lts": false, + "security": false + }, + { + "version": "v4.1.1", + "date": "2015-09-23", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.14.4", + "v8": "4.5.103.33", + "uv": "1.7.4", + "zlib": "1.2.8", + "openssl": "1.0.2d", + "modules": "46", + "lts": false, + "security": false + }, + { + "version": "v4.1.0", + "date": "2015-09-17", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.14.3", + "v8": "4.5.103.33", + "uv": "1.7.4", + "zlib": "1.2.8", + "openssl": "1.0.2d", + "modules": "46", + "lts": false, + "security": false + }, + { + "version": "v4.0.0", + "date": "2015-09-08", + "files": [ + "headers", + "linux-arm64", + "linux-armv6l", + "linux-armv7l", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.14.2", + "v8": "4.5.103.30", + "uv": "1.7.3", + "zlib": "1.2.8", + "openssl": "1.0.2d", + "modules": "46", + "lts": false, + "security": false + }, + { + "version": "v0.12.18", + "date": "2017-02-22", + "files": [ + "headers", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.15.11", + "v8": "3.28.71.20", + "uv": "1.6.1", + "zlib": "1.2.8", + "openssl": "1.0.1u", + "modules": "14", + "lts": false, + "security": false + }, + { + "version": "v0.12.17", + "date": "2016-10-18", + "files": [ + "headers", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.15.1", + "v8": "3.28.71.19", + "uv": "1.6.1", + "zlib": "1.2.8", + "openssl": "1.0.1u", + "modules": "14", + "lts": false, + "security": true + }, + { + "version": "v0.12.16", + "date": "2016-09-27", + "files": [ + "headers", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.15.1", + "v8": "3.28.71.19", + "uv": "1.6.1", + "zlib": "1.2.8", + "openssl": "1.0.1u", + "modules": "14", + "lts": false, + "security": true + }, + { + "version": "v0.12.15", + "date": "2016-06-23", + "files": [ + "headers", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.15.1", + "v8": "3.28.71.19", + "uv": "1.6.1", + "zlib": "1.2.8", + "openssl": "1.0.1t", + "modules": "14", + "lts": false, + "security": true + }, + { + "version": "v0.12.14", + "date": "2016-05-06", + "files": [ + "headers", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.15.1", + "v8": "3.28.71.19", + "uv": "1.6.1", + "zlib": "1.2.8", + "openssl": "1.0.1t", + "modules": "14", + "lts": false, + "security": false + }, + { + "version": "v0.12.13", + "date": "2016-03-31", + "files": [ + "headers", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.15.0", + "v8": "3.28.71.19", + "uv": "1.6.1", + "zlib": "1.2.8", + "openssl": "1.0.1s", + "modules": "14", + "lts": false, + "security": false + }, + { + "version": "v0.12.12", + "date": "2016-03-08", + "files": [ + "headers", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.14.9", + "v8": "3.28.71.19", + "uv": "1.6.1", + "zlib": "1.2.8", + "openssl": "1.0.1s", + "modules": "14", + "lts": false, + "security": false + }, + { + "version": "v0.12.11", + "date": "2016-03-03", + "files": [ + "headers", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.14.9", + "v8": "3.28.71.19", + "uv": "1.6.1", + "zlib": "1.2.8", + "openssl": "1.0.1s", + "modules": "14", + "lts": false, + "security": false + }, + { + "version": "v0.12.10", + "date": "2016-02-09", + "files": [ + "headers", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.14.9", + "v8": "3.28.71.19", + "uv": "1.6.1", + "zlib": "1.2.8", + "openssl": "1.0.1r", + "modules": "14", + "lts": false, + "security": false + }, + { + "version": "v0.12.9", + "date": "2015-12-03", + "files": [ + "headers", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.14.9", + "v8": "3.28.71.19", + "uv": "1.6.1", + "zlib": "1.2.8", + "openssl": "1.0.1q", + "modules": "14", + "lts": false, + "security": false + }, + { + "version": "v0.12.8", + "date": "2015-11-24", + "files": [ + "headers", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.14.9", + "v8": "3.28.71.19", + "uv": "1.6.1", + "zlib": "1.2.8", + "openssl": "1.0.1p", + "modules": "14", + "lts": false, + "security": false + }, + { + "version": "v0.12.7", + "date": "2015-07-09", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.11.3", + "v8": "3.28.71.19", + "uv": "1.6.1", + "zlib": "1.2.8", + "openssl": "1.0.1p", + "modules": "14", + "lts": false, + "security": false + }, + { + "version": "v0.12.6", + "date": "2015-07-04", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.11.2", + "v8": "3.28.71.19", + "uv": "1.6.1", + "zlib": "1.2.8", + "openssl": "1.0.1o", + "modules": "14", + "lts": false, + "security": false + }, + { + "version": "v0.12.5", + "date": "2015-06-22", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.11.2", + "v8": "3.28.71.19", + "uv": "1.6.1", + "zlib": "1.2.8", + "openssl": "1.0.1o", + "modules": "14", + "lts": false, + "security": false + }, + { + "version": "v0.12.4", + "date": "2015-05-23", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.10.1", + "v8": "3.28.71.19", + "uv": "1.5.0", + "zlib": "1.2.8", + "openssl": "1.0.1m", + "modules": "14", + "lts": false, + "security": false + }, + { + "version": "v0.12.3", + "date": "2015-05-14", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.9.1", + "v8": "3.28.71.19", + "uv": "1.5.0", + "zlib": "1.2.8", + "openssl": "1.0.1m", + "modules": "14", + "lts": false, + "security": false + }, + { + "version": "v0.12.2", + "date": "2015-03-31", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.7.4", + "v8": "3.28.73.0", + "uv": "1.4.2", + "zlib": "1.2.8", + "openssl": "1.0.1m", + "modules": "14", + "lts": false, + "security": false + }, + { + "version": "v0.12.1", + "date": "2015-03-24", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.5.1", + "v8": "3.28.73.0", + "uv": "1.0.2", + "zlib": "1.2.8", + "openssl": "1.0.1m", + "modules": "14", + "lts": false, + "security": false + }, + { + "version": "v0.12.0", + "date": "2015-02-06", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.5.1", + "v8": "3.28.73.0", + "uv": "1.0.2", + "zlib": "1.2.8", + "openssl": "1.0.1l", + "modules": "14", + "lts": false, + "security": false + }, + { + "version": "v0.11.16", + "date": "2015-01-30", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.3.0", + "v8": "3.28.73.0", + "uv": "1.0.2", + "zlib": "1.2.8", + "openssl": "1.0.1l", + "modules": "14", + "lts": false, + "security": false + }, + { + "version": "v0.11.15", + "date": "2015-01-20", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.1.6", + "v8": "3.28.73.0", + "uv": "1.0.2", + "zlib": "1.2.8", + "openssl": "1.0.1j", + "modules": "14", + "lts": false, + "security": false + }, + { + "version": "v0.11.14", + "date": "2014-08-19", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.0.0", + "v8": "3.26.33.0", + "uv": "1.0.0", + "zlib": "1.2.3", + "openssl": "1.0.1i", + "modules": "14", + "lts": false, + "security": false + }, + { + "version": "v0.11.13", + "date": "2014-05-02", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.4.9", + "v8": "3.25.30.0", + "uv": "0.11.25", + "zlib": "1.2.3", + "openssl": "1.0.1g", + "modules": "14", + "lts": false, + "security": false + }, + { + "version": "v0.11.12", + "date": "2014-03-11", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.4.3", + "v8": "3.22.24.19", + "uv": "0.11.22", + "zlib": "1.2.3", + "openssl": "1.0.1f", + "modules": "14", + "lts": false, + "security": false + }, + { + "version": "v0.11.11", + "date": "2014-01-29", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.3.25", + "v8": "3.22.24.19", + "uv": "0.11.18", + "zlib": "1.2.3", + "openssl": "1.0.1f", + "modules": "14", + "lts": false, + "security": false + }, + { + "version": "v0.11.10", + "date": "2013-12-31", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.3.22", + "v8": "3.22.24.10", + "uv": "0.11.17", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "13", + "lts": false, + "security": false + }, + { + "version": "v0.11.9", + "date": "2013-11-21", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.3.15", + "v8": "3.22.24.5", + "uv": "0.11.15", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "13", + "lts": false, + "security": false + }, + { + "version": "v0.11.8", + "date": "2013-10-30", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.3.13", + "v8": "3.21.18.3", + "uv": "0.11.14", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "13", + "lts": false, + "security": false + }, + { + "version": "v0.11.7", + "date": "2013-09-04", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.3.8", + "v8": "3.20.17.0", + "uv": "0.11.13", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "0x000C", + "lts": false, + "security": false + }, + { + "version": "v0.11.6", + "date": "2013-08-21", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x86-msi" + ], + "npm": "1.3.8", + "v8": "3.20.14.1", + "uv": "0.11.8", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "0x000C", + "lts": false, + "security": false + }, + { + "version": "v0.11.5", + "date": "2013-08-07", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.3.6", + "v8": "3.20.11.0", + "uv": "0.11.7", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "0x000C", + "lts": false, + "security": false + }, + { + "version": "v0.11.4", + "date": "2013-07-12", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x86-msi" + ], + "npm": "1.3.4", + "v8": "3.20.2.0", + "uv": "0.11.5", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "0x000C", + "lts": false, + "security": false + }, + { + "version": "v0.11.3", + "date": "2013-06-26", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.25", + "v8": "3.19.13.0", + "uv": "0.11.5", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "0x000C", + "lts": false, + "security": false + }, + { + "version": "v0.11.2", + "date": "2013-05-13", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.21", + "v8": "3.19.0.0", + "uv": "0.11.2", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "0x000C", + "lts": false, + "security": false + }, + { + "version": "v0.11.1", + "date": "2013-04-19", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.18", + "v8": "3.18.0.0", + "uv": "0.11.1", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "0x000C", + "lts": false, + "security": false + }, + { + "version": "v0.11.0", + "date": "2013-03-28", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.15", + "v8": "3.17.13.0", + "uv": "0.10.3", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "0x000C", + "lts": false, + "security": false + }, + { + "version": "v0.10.48", + "date": "2016-10-18", + "files": [ + "headers", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.15.1", + "v8": "3.14.5.11", + "uv": "0.10.37", + "zlib": "1.2.8", + "openssl": "1.0.1u", + "modules": "11", + "lts": false, + "security": true + }, + { + "version": "v0.10.47", + "date": "2016-09-27", + "files": [ + "headers", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.15.1", + "v8": "3.14.5.11", + "uv": "0.10.37", + "zlib": "1.2.8", + "openssl": "1.0.1u", + "modules": "11", + "lts": false, + "security": true + }, + { + "version": "v0.10.46", + "date": "2016-06-23", + "files": [ + "headers", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.15.1", + "v8": "3.14.5.9", + "uv": "0.10.37", + "zlib": "1.2.8", + "openssl": "1.0.1t", + "modules": "11", + "lts": false, + "security": true + }, + { + "version": "v0.10.45", + "date": "2016-05-06", + "files": [ + "headers", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.15.1", + "v8": "3.14.5.9", + "uv": "0.10.36", + "zlib": "1.2.8", + "openssl": "1.0.1t", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.44", + "date": "2016-03-31", + "files": [ + "headers", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "2.15.0", + "v8": "3.14.5.9", + "uv": "0.10.36", + "zlib": "1.2.8", + "openssl": "1.0.1s", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.43", + "date": "2016-03-03", + "files": [ + "headers", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.4.29", + "v8": "3.14.5.9", + "uv": "0.10.36", + "zlib": "1.2.8", + "openssl": "1.0.1s", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.42", + "date": "2016-02-09", + "files": [ + "headers", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.4.29", + "v8": "3.14.5.9", + "uv": "0.10.36", + "zlib": "1.2.8", + "openssl": "1.0.1r", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.41", + "date": "2015-12-03", + "files": [ + "headers", + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.4.29", + "v8": "3.14.5.9", + "uv": "0.10.36", + "zlib": "1.2.8", + "openssl": "1.0.1q", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.40", + "date": "2015-07-09", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.4.28", + "v8": "3.14.5.9", + "uv": "0.10.36", + "zlib": "1.2.8", + "openssl": "1.0.1p", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.39", + "date": "2015-06-19", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.4.28", + "v8": "3.14.5.9", + "uv": "0.10.36", + "zlib": "1.2.8", + "openssl": "1.0.1o", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.38", + "date": "2015-03-23", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.4.28", + "v8": "3.14.5.9", + "uv": "0.10.36", + "zlib": "1.2.8", + "openssl": "1.0.1m", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.37", + "date": "2015-03-11", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.4.28", + "v8": "3.14.5.9", + "uv": "0.10.36", + "zlib": "1.2.8", + "openssl": "1.0.1l", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.36", + "date": "2015-01-26", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.4.28", + "v8": "3.14.5.9", + "uv": "0.10.30", + "zlib": "1.2.8", + "openssl": "1.0.1l", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.35", + "date": "2014-12-22", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.4.28", + "v8": "3.14.5.9", + "uv": "0.10.30", + "zlib": "1.2.8", + "openssl": "1.0.1j", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.34", + "date": "2014-12-17", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.4.28", + "v8": "3.14.5.9", + "uv": "0.10.30", + "zlib": "1.2.8", + "openssl": "1.0.1j", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.33", + "date": "2014-10-21", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.4.28", + "v8": "3.14.5.9", + "uv": "0.10.29", + "zlib": "1.2.3", + "openssl": "1.0.1j", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.32", + "date": "2014-09-16", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.4.28", + "v8": "3.14.5.9", + "uv": "0.10.28", + "zlib": "1.2.3", + "openssl": "1.0.1i", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.31", + "date": "2014-08-19", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.4.23", + "v8": "3.14.5.9", + "uv": "0.10.28", + "zlib": "1.2.3", + "openssl": "1.0.1i", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.30", + "date": "2014-07-31", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.4.21", + "v8": "3.14.5.9", + "uv": "0.10.28", + "zlib": "1.2.3", + "openssl": "1.0.1h", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.29", + "date": "2014-06-09", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.4.14", + "v8": "3.14.5.9", + "uv": "0.10.27", + "zlib": "1.2.3", + "openssl": "1.0.1h", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.28", + "date": "2014-05-02", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.4.9", + "v8": "3.14.5.9", + "uv": "0.10.27", + "zlib": "1.2.3", + "openssl": "1.0.1g", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.27", + "date": "2014-05-01", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.4.8", + "v8": "3.14.5.9", + "uv": "0.10.27", + "zlib": "1.2.3", + "openssl": "1.0.1g", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.26", + "date": "2014-02-18", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.4.3", + "v8": "3.14.5.9", + "uv": "0.10.25", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.25", + "date": "2014-01-23", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.3.24", + "v8": "3.14.5.9", + "uv": "0.10.23", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.24", + "date": "2013-12-19", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.3.21", + "v8": "3.14.5.9", + "uv": "0.10.21", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.23", + "date": "2013-12-12", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.3.17", + "v8": "3.14.5.9", + "uv": "0.10.20", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.22", + "date": "2013-11-12", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.3.14", + "v8": "3.14.5.9", + "uv": "0.10.19", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.21", + "date": "2013-10-18", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.3.11", + "v8": "3.14.5.9", + "uv": "0.10.18", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.20", + "date": "2013-09-30", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.3.11", + "v8": "3.14.5.9", + "uv": "0.10.17", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.19", + "date": "2013-09-24", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.3.11", + "v8": "3.14.5.9", + "uv": "0.10.17", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.18", + "date": "2013-09-04", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.3.8", + "v8": "3.14.5.9", + "uv": "0.10.15", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.17", + "date": "2013-08-21", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.3.8", + "v8": "3.14.5.9", + "uv": "0.10.14", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.16", + "date": "2013-08-16", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.3.8", + "v8": "3.14.5.9", + "uv": "0.10.13", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.15", + "date": "2013-07-25", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.3.5", + "v8": "3.14.5.9", + "uv": "0.10.13", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.14", + "date": "2013-07-25", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.3.5", + "v8": "3.14.5.9", + "uv": "0.10.13", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.13", + "date": "2013-07-09", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.3.2", + "v8": "3.14.5.9", + "uv": "0.10.12", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.12", + "date": "2013-06-18", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.32", + "v8": "3.14.5.9", + "uv": "0.10.11", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.11", + "date": "2013-06-13", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.30", + "v8": "3.14.5.9", + "uv": "0.10.11", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.10", + "date": "2013-06-04", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.25", + "v8": "3.14.5.9", + "uv": "0.10.10", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.9", + "date": "2013-05-30", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.24", + "v8": "3.14.5.9", + "uv": "0.10.9", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.8", + "date": "2013-05-24", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.23", + "v8": "3.14.5.9", + "uv": "0.10.8", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.7", + "date": "2013-05-17", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.21", + "v8": "3.14.5.8", + "uv": "0.10.7", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.6", + "date": "2013-05-14", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.18", + "v8": "3.14.5.8", + "uv": "0.10.5", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.5", + "date": "2013-04-23", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.18", + "v8": "3.14.5.8", + "uv": "0.10.5", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.4", + "date": "2013-04-11", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.18", + "v8": "3.14.5.8", + "uv": "0.10.4", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "11", + "lts": false, + "security": false + }, + { + "version": "v0.10.3", + "date": "2013-04-03", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.17", + "v8": "3.14.5.8", + "uv": "0.10.3", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "0x000B", + "lts": false, + "security": false + }, + { + "version": "v0.10.2", + "date": "2013-03-28", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.15", + "v8": "3.14.5.8", + "uv": "0.10.3", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "0x000B", + "lts": false, + "security": false + }, + { + "version": "v0.10.1", + "date": "2013-03-21", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.15", + "v8": "3.14.5.8", + "uv": "0.10", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "0x000B", + "lts": false, + "security": false + }, + { + "version": "v0.10.0", + "date": "2013-03-11", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.14", + "v8": "3.14.5.8", + "uv": "0.9", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "0x000B", + "lts": false, + "security": false + }, + { + "version": "v0.9.12", + "date": "2013-03-06", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.12", + "v8": "3.14.5.8", + "uv": "0.9", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "0x000B", + "lts": false, + "security": false + }, + { + "version": "v0.9.11", + "date": "2013-03-01", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.12", + "v8": "3.14.5.0", + "uv": "0.9", + "zlib": "1.2.3", + "openssl": "1.0.1e", + "modules": "0x000B", + "lts": false, + "security": false + }, + { + "version": "v0.9.10", + "date": "2013-02-19", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.12", + "v8": "3.15.11.15", + "uv": "0.9", + "zlib": "1.2.3", + "openssl": "1.0.1c", + "modules": "0x000B", + "lts": false, + "security": false + }, + { + "version": "v0.9.9", + "date": "2013-02-07", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.10", + "v8": "3.15.11.10", + "uv": "0.9", + "zlib": "1.2.3", + "openssl": "1.0.1c", + "modules": "0x000B", + "lts": false, + "security": false + }, + { + "version": "v0.9.8", + "date": "2013-01-24", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.3", + "v8": "3.15.11.10", + "uv": "0.9", + "zlib": "1.2.3", + "openssl": "1.0.1c", + "modules": "0x000A", + "lts": false, + "security": false + }, + { + "version": "v0.9.7", + "date": "2013-01-18", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.2", + "v8": "3.15.11.7", + "uv": "0.9", + "zlib": "1.2.3", + "openssl": "1.0.1c", + "modules": "0x000A", + "lts": false, + "security": false + }, + { + "version": "v0.9.6", + "date": "2013-01-11", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.0", + "v8": "3.15.11.5", + "uv": "0.9", + "zlib": "1.2.3", + "openssl": "1.0.1c", + "modules": "0x000A", + "lts": false, + "security": false + }, + { + "version": "v0.9.5", + "date": "2012-12-30", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.1.70", + "v8": "3.13.7.4", + "uv": "0.9", + "zlib": "1.2.3", + "openssl": "1.0.1c", + "modules": "0x000A", + "lts": false, + "security": false + }, + { + "version": "v0.9.4", + "date": "2012-12-21", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.1.70", + "v8": "3.13.7.4", + "uv": "0.9", + "zlib": "1.2.3", + "openssl": "1.0.1c", + "modules": "0x000A", + "lts": false, + "security": false + }, + { + "version": "v0.9.3", + "date": "2012-10-24", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.1.64", + "v8": "3.13.7.4", + "uv": "0.9", + "zlib": "1.2.3", + "openssl": "1.0.1c", + "modules": "0x000A", + "lts": false, + "security": false + }, + { + "version": "v0.9.2", + "date": "2012-09-17", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.1.61", + "v8": "3.11.10.22", + "uv": "0.9", + "zlib": "1.2.3", + "openssl": "1.0.1c", + "modules": "0x000A", + "lts": false, + "security": false + }, + { + "version": "v0.9.1", + "date": "2012-08-28", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.1.59", + "v8": "3.11.10.19", + "uv": "0.9", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "0x000A", + "lts": false, + "security": false + }, + { + "version": "v0.9.0", + "date": "2012-07-20", + "files": [ + "osx-x64-pkg", + "src", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.1.44", + "v8": "3.11.10.15", + "uv": "0.9", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.28", + "date": "2014-07-31", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.30", + "v8": "3.11.10.26", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.27", + "date": "2014-06-09", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x86-msi" + ], + "npm": "1.2.30", + "v8": "3.11.10.26", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.26", + "date": "2013-10-18", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.30", + "v8": "3.11.10.26", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.25", + "date": "2013-06-13", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.30", + "v8": "3.11.10.25", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.24", + "date": "2013-06-03", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.24", + "v8": "3.11.10.25", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.23", + "date": "2013-04-09", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.18", + "v8": "3.11.10.25", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.22", + "date": "2013-03-06", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.14", + "v8": "3.11.10.25", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.21", + "date": "2013-02-25", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.11", + "v8": "3.11.10.25", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.20", + "date": "2013-02-15", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.11", + "v8": "3.11.10.25", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.19", + "date": "2013-02-06", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.10", + "v8": "3.11.10.25", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.18", + "date": "2013-01-18", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.2", + "v8": "3.11.10.25", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.17", + "date": "2013-01-10", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.2.0", + "v8": "3.11.10.25", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.16", + "date": "2012-12-12", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.1.69", + "v8": "3.11.10.25", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.15", + "date": "2012-11-26", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.1.66", + "v8": "3.11.10.25", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.14", + "date": "2012-10-25", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.1.65", + "v8": "3.11.10.25", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.13", + "date": "2012-10-25", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.1.65", + "v8": "3.11.10.25", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.12", + "date": "2012-10-11", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.1.63", + "v8": "3.11.10.22", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.11", + "date": "2012-09-27", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.1.62", + "v8": "3.11.10.22", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.10", + "date": "2012-09-25", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.1.62", + "v8": "3.11.10.22", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.9", + "date": "2012-09-11", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.1.61", + "v8": "3.11.10.22", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.8", + "date": "2012-08-22", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.1.59", + "v8": "3.11.10.19", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.7", + "date": "2012-08-15", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.1.49", + "v8": "3.11.10.17", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.6", + "date": "2012-08-06", + "files": [ + "linux-x64", + "linux-x86", + "osx-x64-pkg", + "osx-x64-tar", + "osx-x86-tar", + "src", + "sunos-x64", + "sunos-x86", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.1.48", + "v8": "3.11.10.17", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.5", + "date": "2012-08-02", + "files": [ + "osx-x64-pkg", + "src", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.1.46", + "v8": "3.11.10.17", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.4", + "date": "2012-07-24", + "files": [ + "osx-x64-pkg", + "src", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.1.45", + "v8": "3.11.10.17", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.3", + "date": "2012-07-17", + "files": [ + "osx-x64-pkg", + "src", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.1.43", + "v8": "3.11.10.15", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.2", + "date": "2012-07-09", + "files": [ + "osx-x64-pkg", + "src", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.1.36", + "v8": "3.11.10.14", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.1", + "date": "2012-06-29", + "files": [ + "osx-x64-pkg", + "src", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.1.33", + "v8": "3.11.10.12", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.8.0", + "date": "2012-06-22", + "files": [ + "osx-x64-pkg", + "src", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.1.32", + "v8": "3.11.10.10", + "uv": "0.8", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.7.12", + "date": "2012-06-19", + "files": [ + "osx-x64-pkg", + "src", + "win-x64-exe", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.1.30", + "v8": "3.11.10.0", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.7.11", + "date": "2012-06-15", + "files": [ + "osx-x64-pkg", + "src", + "win-x64-exe", + "win-x64-msi", + "win-x86-exe", + "win-x86-msi" + ], + "npm": "1.1.26", + "v8": "3.11.10.0", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.7.10", + "date": "2012-06-11", + "files": [ + "osx-x64-pkg", + "src", + "win-x64-exe", + "win-x86-exe" + ], + "npm": "1.1.25", + "v8": "3.9.24.31", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.7.9", + "date": "2012-05-29", + "files": [ + "osx-x64-pkg", + "src", + "win-x64-exe", + "win-x86-exe" + ], + "npm": "1.1.23", + "v8": "3.11.1.0", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.7.8", + "date": "2012-04-18", + "files": [ + "osx-x64-pkg", + "src", + "win-x64-exe", + "win-x86-exe" + ], + "npm": "1.1.18", + "v8": "3.9.24.9", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "1.0.0f", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.7.7", + "date": "2012-03-30", + "files": [ + "osx-x64-pkg", + "src", + "win-x64-exe", + "win-x86-exe" + ], + "npm": "1.1.15", + "v8": "3.9.24.7", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.7.6", + "date": "2012-03-13", + "files": [ + "osx-x64-pkg", + "src", + "win-x64-exe", + "win-x86-exe" + ], + "npm": "1.1.8", + "v8": "3.9.17.0", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.7.5", + "date": "2012-02-23", + "files": [ + "osx-x64-pkg", + "src", + "win-x64-exe", + "win-x86-exe" + ], + "npm": "1.1.1", + "v8": "3.9.5.0", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.7.4", + "date": "2012-02-14", + "files": [ + "osx-x64-pkg", + "src", + "win-x64-exe", + "win-x86-exe" + ], + "npm": "1.1.1", + "v8": "3.9.5.0", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.7.3", + "date": "2012-02-07", + "files": [ + "osx-x64-pkg", + "src", + "win-x86-exe" + ], + "npm": "1.1.0-3", + "v8": "3.9.2.0", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.7.2", + "date": "2012-02-01", + "files": [ + "osx-x64-pkg", + "src", + "win-x86-exe" + ], + "npm": "1.1.0-3", + "v8": "3.8.9.0", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.7.1", + "date": "2012-01-23", + "files": [ + "osx-x64-pkg", + "src", + "win-x86-exe" + ], + "npm": "1.1.0-2", + "v8": "3.8.8.0", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.7.0", + "date": "2012-01-17", + "files": [ + "osx-x64-pkg", + "src", + "win-x86-exe" + ], + "npm": "1.1.0-2", + "v8": "3.8.6.0", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.6.21", + "date": "2012-08-03", + "files": [ + "osx-x64-pkg", + "src", + "win-x64-exe", + "win-x86-exe" + ], + "npm": "1.1.37", + "v8": "3.6.6.25", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.6.20", + "date": "2012-07-10", + "files": [ + "osx-x64-pkg", + "src", + "win-x64-exe", + "win-x86-exe" + ], + "npm": "1.1.37", + "v8": "3.6.6.25", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.6.19", + "date": "2012-06-06", + "files": [ + "osx-x64-pkg", + "src", + "win-x64-exe", + "win-x86-exe" + ], + "npm": "1.1.24", + "v8": "3.6.6.25", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.6.18", + "date": "2012-05-14", + "files": [ + "osx-x64-pkg", + "src", + "win-x64-exe", + "win-x86-exe" + ], + "npm": "1.1.21", + "v8": "3.6.6.25", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.6.17", + "date": "2012-05-04", + "files": [ + "osx-x64-pkg", + "src", + "win-x64-exe", + "win-x86-exe" + ], + "npm": "1.1.21", + "v8": "3.6.6.25", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.6.16", + "date": "2012-04-27", + "files": [ + "osx-x64-pkg", + "src", + "win-x64-exe", + "win-x86-exe" + ], + "npm": "1.1.19", + "v8": "3.6.6.25", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.6.15", + "date": "2012-04-08", + "files": [ + "osx-x64-pkg", + "src", + "win-x64-exe", + "win-x86-exe" + ], + "npm": "1.1.16", + "v8": "3.6.6.24", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.6.14", + "date": "2012-03-23", + "files": [ + "osx-x64-pkg", + "src", + "win-x64-exe", + "win-x86-exe" + ], + "npm": "1.1.12", + "v8": "3.6.6.24", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.6.13", + "date": "2012-03-15", + "files": [ + "osx-x64-pkg", + "src", + "win-x64-exe", + "win-x86-exe" + ], + "npm": "1.1.9", + "v8": "3.6.6.24", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.6.12", + "date": "2012-03-02", + "files": [ + "osx-x64-pkg", + "src", + "win-x86-exe" + ], + "npm": "1.1.4", + "v8": "3.6.6.24", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.6.11", + "date": "2012-02-08", + "files": [ + "osx-x64-pkg", + "src", + "win-x86-exe" + ], + "npm": "1.1.1", + "v8": "3.6.6.20", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.6.10", + "date": "2012-02-03", + "files": [ + "osx-x64-pkg", + "src", + "win-x86-exe" + ], + "npm": "1.1.0-3", + "v8": "3.6.6.20", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.6.9", + "date": "2012-01-27", + "files": [ + "osx-x64-pkg", + "src", + "win-x86-exe" + ], + "npm": "1.1.0-3", + "v8": "3.6.6.19", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.6.8", + "date": "2012-01-20", + "files": [ + "osx-x64-pkg", + "src", + "win-x86-exe" + ], + "npm": "1.1.0-2", + "v8": "3.6.6.19", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.6.7", + "date": "2012-01-07", + "files": [ + "osx-x64-pkg", + "src", + "win-x86-exe" + ], + "npm": "1.1.0-beta-10", + "v8": "3.6.6.15", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.6.6", + "date": "2011-12-15", + "files": [ + "osx-x64-pkg", + "src", + "win-x86-exe" + ], + "npm": "1.1.0-beta-4", + "v8": "3.6.6.14", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.6.5", + "date": "2011-12-04", + "files": [ + "osx-x64-pkg", + "src", + "win-x86-exe" + ], + "npm": "1.1.0-alpha-6", + "v8": "3.6.6.11", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.6.4", + "date": "2011-12-02", + "files": [ + "osx-x64-pkg", + "src", + "win-x86-exe" + ], + "npm": "1.1.0-alpha-6", + "v8": "3.6.6.8", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.6.3", + "date": "2011-11-25", + "files": [ + "osx-x64-pkg", + "src", + "win-x86-exe" + ], + "npm": "1.1.0-alpha-2", + "v8": "3.6.6.8", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.6.2", + "date": "2011-11-18", + "files": [ + "osx-x64-pkg", + "src", + "win-x86-exe" + ], + "v8": "3.6.6.8", + "uv": "0.6", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.6.1", + "date": "2011-11-11", + "files": [ + "osx-x64-pkg", + "src", + "win-x86-exe" + ], + "v8": "3.6.6.7", + "uv": "0.1", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.6.0", + "date": "2011-11-04", + "files": [ + "src", + "win-x86-exe" + ], + "v8": "3.6.6.6", + "uv": "0.1", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.5.10", + "date": "2011-10-22", + "files": [ + "src", + "win-x86-exe" + ], + "v8": "3.7.0.0", + "uv": "0.1", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.5.9", + "date": "2011-10-11", + "files": [ + "src", + "win-x86-exe" + ], + "v8": "3.6.4.0", + "uv": "0.1", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.5.8", + "date": "2011-09-30", + "files": [ + "src", + "win-x86-exe" + ], + "v8": "3.6.4.0", + "uv": "0.1", + "zlib": "1.2.3", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.5.7", + "date": "2011-09-16", + "files": [ + "src", + "win-x86-exe" + ], + "v8": "3.6.4.0", + "uv": "0.1", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.5.6", + "date": "2011-08-26", + "files": [ + "src", + "win-x86-exe" + ], + "v8": "3.6.2.0", + "uv": "0.1", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.5.5", + "date": "2011-08-26", + "files": [ + "src", + "win-x86-exe" + ], + "v8": "3.5.8.0", + "uv": "0.1", + "openssl": "0.9.8r", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.5.4", + "date": "2011-08-26", + "files": [ + "src", + "win-x86-exe" + ], + "v8": "3.5.4.3", + "uv": "0.1", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.5.3", + "date": "2011-08-26", + "files": [ + "src", + "win-x86-exe" + ], + "v8": "3.4.14.0", + "uv": "0.1", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.5.2", + "date": "2011-08-26", + "files": [ + "src", + "win-x86-exe" + ], + "v8": "3.4.14.0", + "uv": "0.1", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.5.1", + "date": "2011-08-26", + "files": [ + "src", + "win-x86-exe" + ], + "v8": "3.4.10.0", + "uv": "0.1", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.5.0", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "3.1.8.25", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.4.12", + "date": "2011-09-15", + "files": [ + "src" + ], + "v8": "3.1.8.26", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.4.11", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "3.1.8.26", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.4.10", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "3.1.8.26", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.4.9", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "3.1.8.25", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.4.8", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "3.1.8.16", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.4.7", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "3.1.8.10", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.4.6", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "3.1.8.10", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.4.5", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "3.1.8.8", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.4.4", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "3.1.8.5", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.4.3", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "3.1.8.3", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.4.2", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "3.1.8.0", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.4.1", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "3.1.5.0", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.4.0", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "3.1.2.0", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.3.8", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "3.1.1.0", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.3.7", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "3.0.10.0", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.3.6", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "3.0.9.0", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.3.5", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "3.0.4.1", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.3.4", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "3.0.4.1", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.3.3", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "3.0.4.1", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.3.2", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "3.0.3.0", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.3.1", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.5.3.0", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.3.0", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.5.1.0", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.2.6", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.3.8.0", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.2.5", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.3.8.0", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.2.4", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.3.8.0", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.2.3", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.3.8.0", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.2.2", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.3.8.0", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.2.1", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.3.8.0", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.2.0", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.3.8.0", + "modules": "1", + "lts": false, + "security": false + }, + { + "version": "v0.1.104", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.3.6.1", + "lts": false, + "security": false + }, + { + "version": "v0.1.103", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.3.5.0", + "lts": false, + "security": false + }, + { + "version": "v0.1.102", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.3.2.0", + "lts": false, + "security": false + }, + { + "version": "v0.1.101", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.3.0.0", + "lts": false, + "security": false + }, + { + "version": "v0.1.100", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.2.21.0", + "lts": false, + "security": false + }, + { + "version": "v0.1.99", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.2.18.0", + "lts": false, + "security": false + }, + { + "version": "v0.1.98", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.2.16.0", + "lts": false, + "security": false + }, + { + "version": "v0.1.97", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.2.12.0", + "lts": false, + "security": false + }, + { + "version": "v0.1.96", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.2.0", + "lts": false, + "security": false + }, + { + "version": "v0.1.95", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.2.0", + "lts": false, + "security": false + }, + { + "version": "v0.1.94", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.2.8.0", + "lts": false, + "security": false + }, + { + "version": "v0.1.93", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.2.6.0", + "lts": false, + "security": false + }, + { + "version": "v0.1.92", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.2.4.2", + "lts": false, + "security": false + }, + { + "version": "v0.1.91", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.2.3.1", + "lts": false, + "security": false + }, + { + "version": "v0.1.90", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.2.0.3", + "lts": false, + "security": false + }, + { + "version": "v0.1.33", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.1.6.0", + "lts": false, + "security": false + }, + { + "version": "v0.1.32", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.1.3.0", + "lts": false, + "security": false + }, + { + "version": "v0.1.31", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.1.2.0", + "lts": false, + "security": false + }, + { + "version": "v0.1.30", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.1.1.1", + "lts": false, + "security": false + }, + { + "version": "v0.1.29", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.1.0.0", + "lts": false, + "security": false + }, + { + "version": "v0.1.28", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.1.0.0", + "lts": false, + "security": false + }, + { + "version": "v0.1.27", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.1.0.0", + "lts": false, + "security": false + }, + { + "version": "v0.1.26", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.0.6.1", + "lts": false, + "security": false + }, + { + "version": "v0.1.25", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.0.5.4", + "lts": false, + "security": false + }, + { + "version": "v0.1.24", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.0.5.4", + "lts": false, + "security": false + }, + { + "version": "v0.1.23", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.0.0", + "lts": false, + "security": false + }, + { + "version": "v0.1.22", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.0.0", + "lts": false, + "security": false + }, + { + "version": "v0.1.21", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.0.0", + "lts": false, + "security": false + }, + { + "version": "v0.1.20", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.0.2.0", + "lts": false, + "security": false + }, + { + "version": "v0.1.19", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "2.0.2.0", + "lts": false, + "security": false + }, + { + "version": "v0.1.18", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "1.3.18.0", + "lts": false, + "security": false + }, + { + "version": "v0.1.17", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "1.3.18.0", + "lts": false, + "security": false + }, + { + "version": "v0.1.16", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "1.3.18.0", + "lts": false, + "security": false + }, + { + "version": "v0.1.15", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "1.3.16.0", + "lts": false, + "security": false + }, + { + "version": "v0.1.14", + "date": "2011-08-26", + "files": [ + "src" + ], + "v8": "1.3.15.0", + "lts": false, + "security": false + } +] \ No newline at end of file diff --git a/_generated/UseNodeV1_Node20/Tests/L0FirstDownloadSuccess.ts b/_generated/UseNodeV1_Node20/Tests/L0FirstDownloadSuccess.ts new file mode 100644 index 000000000000..280eb03ab4ad --- /dev/null +++ b/_generated/UseNodeV1_Node20/Tests/L0FirstDownloadSuccess.ts @@ -0,0 +1,140 @@ +import { IRestResponse, IRequestOptions, RestClient } from 'typed-rest-client/RestClient'; +import * as ifm from 'typed-rest-client/Interfaces'; +import ma = require('azure-pipelines-task-lib/mock-answer'); +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import taskLib = require('azure-pipelines-task-lib/task'); +import fs = require('fs'); +import os = require('os'); +import path = require('path'); + +let taskPath = path.join(__dirname, '..', 'usenode.js'); +let tmr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +let a: ma.TaskLibAnswers = { + "assertAgent": { + "2.115.1": true + }}; +tmr.setAnswers(a); + + +//Create assertAgent and getVariable mocks +const tl = require('azure-pipelines-task-lib/mock-task'); +const tlClone = Object.assign({}, tl); +tlClone.getInput = function (inputName: string, required?: boolean) { + inputName = inputName.toLowerCase(); + if (inputName === 'version') { + return '11.3.0'; + } + if (inputName === 'checkLatest') { + return 'false'; + } + return tl.getInput(inputName, required); +} +tlClone.getVariable = function(variable: string) { + if (variable.toLowerCase() == 'agent.tempdirectory') { + return 'temp'; + } + return null; +}; +tlClone.assertAgent = function(variable: string) { + return; +}; +tlClone.setSecret = function(password){ + console.log('Setting secret', password); +}; +tlClone.setVariable = function(key, val) { + console.log('Setting', key, 'to', val); +}; +if (process.env["__proxy__"]) { + tlClone.getHttpProxyConfiguration = function(requestUrl?: string): taskLib.ProxyConfiguration | null { + return { proxyUrl: 'http://url.com', proxyUsername: 'username', proxyPassword: 'password', proxyBypassHosts: null, proxyFormattedUrl: 'http://username:password@url.com'}; + } +} +tmr.registerMock('azure-pipelines-task-lib/mock-task', tlClone); + +if (process.env['__proxy__']) { + tmr.registerMock('typed-rest-client/RestClient', { + RestClient: function(userAgent: string, baseUrl?: string, handlers?: ifm.IRequestHandler[], requestOptions?: ifm.IRequestOptions) { + return { + userAgent: userAgent, + baseUrl: baseUrl, + handlers: handlers, + requestOptions: requestOptions, + get: async function(resource: string, options?: IRequestOptions): Promise> { + if (resource != 'https://nodejs.org/dist/index.json') { + throw new Error(`Reading version from wrong url: ${resource}`); + } + if (!requestOptions || !requestOptions.proxy) { + throw new Error('Proxy not set up in RestClient'); + } + let response: IRestResponse = { result: require('./L0FakeIndex.json') as T, statusCode: 200 } as IRestResponse; + return response; + } + }; + } + }); +} + +//Create tool-lib mock +tmr.registerMock('azure-pipelines-tool-lib/tool', { + isExplicitVersion: function(versionSpec) { + return false; + }, + findLocalTool: function(toolName, versionSpec) { + if (toolName != 'node') { + throw new Error('Searching for wrong tool'); + } + return false; + }, + evaluateVersions: function(versions, versionSpec) { + let version: string; + for (let i = versions.length - 1; i >= 0; i--) { + let potential: string = versions[i]; + let satisfied: boolean = potential === '11.3.0'; + if (satisfied) { + version = potential; + break; + } + } + return version; + }, + cleanVersion: function(version) { + return '11.3.0'; + }, + downloadTool(url) { + if (url === `https://nodejs.org/dist/v11.3.0/node-v11.3.0-win-${os.arch()}.7z` || + url === `https://nodejs.org/dist/v11.3.0/node-v11.3.0-${os.platform()}-${os.arch()}.tar.gz`) { + return 'location'; + } + else { + throw new Error('Incorrect URL'); + } + }, + extract7z(downloadPath, extPath, _7zPath) { + return 'extPath'; + }, + extractTar(downloadPath, extPath, _7zPath) { + return 'extPath'; + }, + cacheDir(dir, tool, version) { + return 'path to tool'; + }, + prependPath(toolPath) { + return; + } +}); + +const fsClone = fs; +fsClone.existsSync = function(pathToFile: string): boolean { + if (pathToFile !== path.resolve(process.cwd(), '.npmrc')) { + return fs.existsSync(pathToFile); + } + return false; +}; +fsClone.writeFileSync = function(path: string, data: any, options: fs.WriteFileOptions) { + console.log('Writing file to path', path); + console.log(data); +}; +tmr.registerMock('fs', fsClone); + +tmr.run(); \ No newline at end of file diff --git a/_generated/UseNodeV1_Node20/Tests/L0GetsLatestVersion.ts b/_generated/UseNodeV1_Node20/Tests/L0GetsLatestVersion.ts new file mode 100644 index 000000000000..9cfef33a860f --- /dev/null +++ b/_generated/UseNodeV1_Node20/Tests/L0GetsLatestVersion.ts @@ -0,0 +1,52 @@ +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import assert = require('assert'); +import path = require('path'); + +let taskPath = path.join(__dirname, '..', 'usenode.js'); +let tmr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tmr.setInput('version', '>=12.0.0'); +tmr.setInput('checkLatest', 'true'); + +//Create tool-lib mock +tmr.registerMock('azure-pipelines-tool-lib/tool', { + isExplicitVersion: function() { + return false; + }, + evaluateVersions: function(versions: string[], versionSpec) { + const invalidVersions = versions.filter(v => !/^\d+\.\d+\.\d+$/.test(v)); + assert(invalidVersions.length === 0, "Invalid versions passed to evaluateVersions"); + return "12.8.0"; + }, + cleanVersion: function(version: string) { + return version.replace(/^v/i, ""); + }, + findLocalTool: function(toolName, versionSpec) { + assert(versionSpec === "v12.8.0", "Version returned should begin with 'v'"); + return "/path/to/node"; + }, + prependPath(toolPath) { + return; + } +}); + +tmr.registerMock('typed-rest-client/RestClient', { + RestClient: function() { + return { + get: async function(url, options) { + const versions = [ + {"version":"v12.8.0","date":"2019-08-06","files":["aix-ppc64","headers","linux-arm64","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-x64-pkg","osx-x64-tar","src","sunos-x64","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"npm":"6.10.2","v8":"7.5.288.22","uv":"1.30.1","zlib":"1.2.11","openssl":"1.1.1c","modules":"72","lts":false,"security":false}, + {"version":"v12.7.0","date":"2019-07-23","files":["aix-ppc64","headers","linux-arm64","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-x64-pkg","osx-x64-tar","src","sunos-x64","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"npm":"6.10.0","v8":"7.5.288.22","uv":"1.30.1","zlib":"1.2.11","openssl":"1.1.1c","modules":"72","lts":false,"security":false}, + {"version":"v11.15.0","date":"2019-04-30","files":["aix-ppc64","headers","linux-arm64","linux-armv6l","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-x64-pkg","osx-x64-tar","src","sunos-x64","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"npm":"6.7.0","v8":"7.0.276.38","uv":"1.27.0","zlib":"1.2.11","openssl":"1.1.1b","modules":"67","lts":false,"security":false}, + {"version":"v11.14.0","date":"2019-04-10","files":["aix-ppc64","headers","linux-arm64","linux-armv6l","linux-armv7l","linux-ppc64le","linux-s390x","linux-x64","osx-x64-pkg","osx-x64-tar","src","sunos-x64","win-x64-7z","win-x64-exe","win-x64-msi","win-x64-zip","win-x86-7z","win-x86-exe","win-x86-msi","win-x86-zip"],"npm":"6.7.0","v8":"7.0.276.38","uv":"1.27.0","zlib":"1.2.11","openssl":"1.1.1b","modules":"67","lts":false,"security":false} + ] + + return { + result: versions + }; + } + } + } +}); + +tmr.run(); \ No newline at end of file diff --git a/_generated/UseNodeV1_Node20/Tests/L0SecondDownloadSuccess.ts b/_generated/UseNodeV1_Node20/Tests/L0SecondDownloadSuccess.ts new file mode 100644 index 000000000000..5dc25bbd2a87 --- /dev/null +++ b/_generated/UseNodeV1_Node20/Tests/L0SecondDownloadSuccess.ts @@ -0,0 +1,90 @@ +import ma = require('azure-pipelines-task-lib/mock-answer'); +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import os = require('os'); +import path = require('path'); + +let taskPath = path.join(__dirname, '..', 'usenode.js'); +let tmr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tmr.setInput('version', '5.10.1'); +tmr.setInput('checkLatest', 'false'); + +let a: ma.TaskLibAnswers = { + "assertAgent": { + "2.115.1": true + }}; +tmr.setAnswers(a); + + +//Create assertAgent and getVariable mocks +const tl = require('azure-pipelines-task-lib/mock-task'); +const tlClone = Object.assign({}, tl); +tlClone.getVariable = function(variable: string) { + if (variable.toLowerCase() == 'agent.tempdirectory') { + return 'temp'; + } + return null; +}; +tlClone.assertAgent = function(variable: string) { + return; +}; +tmr.registerMock('azure-pipelines-task-lib/mock-task', tlClone); + +//Create tool-lib mock +tmr.registerMock('azure-pipelines-tool-lib/tool', { + isExplicitVersion: function(versionSpec) { + return false; + }, + findLocalTool: function(toolName, versionSpec) { + if (toolName != 'node') { + throw new Error('Searching for wrong tool'); + } + return false; + }, + evaluateVersions: function(versions, versionSpec) { + let version: string; + for (let i = versions.length - 1; i >= 0; i--) { + let potential: string = versions[i]; + let satisfied: boolean = potential === '5.10.1'; + if (satisfied) { + version = potential; + break; + } + } + return version; + }, + cleanVersion: function(version) { + return '5.10.1'; + }, + downloadTool(url) { + if (url === `https://nodejs.org/dist/v5.10.1/node-v5.10.1-win-${os.arch()}.7z` || + url === `https://nodejs.org/dist/v5.10.1/node-v5.10.1-${os.platform()}-${os.arch()}.tar.gz`) { + let err = new Error(); + err['httpStatusCode'] = '404'; + throw err; + } + else if (url === `https://nodejs.org/dist/v5.10.1/win-${os.arch()}/node.exe`) { + return 'exe_loc'; + } + else if (url === `https://nodejs.org/dist/v5.10.1/win-${os.arch()}/node.lib`) { + return 'exe_lib'; + } + else { + throw new Error('Incorrect URL'); + } + }, + extract7z(downloadPath, extPath, _7zPath) { + return 'extPath'; + }, + extractTar(downloadPath, extPath, _7zPath) { + return 'extPath'; + }, + cacheDir(dir, tool, version) { + return 'path to tool'; + }, + prependPath(toolPath) { + return; + } +}); + +tmr.run(); \ No newline at end of file diff --git a/_generated/UseNodeV1_Node20/Tests/L0ThirdDownloadSuccess.ts b/_generated/UseNodeV1_Node20/Tests/L0ThirdDownloadSuccess.ts new file mode 100644 index 000000000000..b4d8e0bb3bd8 --- /dev/null +++ b/_generated/UseNodeV1_Node20/Tests/L0ThirdDownloadSuccess.ts @@ -0,0 +1,96 @@ +import ma = require('azure-pipelines-task-lib/mock-answer'); +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import os = require('os'); +import path = require('path'); + +let taskPath = path.join(__dirname, '..', 'usenode.js'); +let tmr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tmr.setInput('version', '0.12.18'); +tmr.setInput('checkLatest', 'false'); + +let a: ma.TaskLibAnswers = { + "assertAgent": { + "2.115.1": true + }}; +tmr.setAnswers(a); + + +//Create assertAgent and getVariable mocks +const tl = require('azure-pipelines-task-lib/mock-task'); +const tlClone = Object.assign({}, tl); +tlClone.getVariable = function(variable: string) { + if (variable.toLowerCase() == 'agent.tempdirectory') { + return 'temp'; + } + return null; +}; +tlClone.assertAgent = function(variable: string) { + return; +}; +tmr.registerMock('azure-pipelines-task-lib/mock-task', tlClone); + +//Create tool-lib mock +tmr.registerMock('azure-pipelines-tool-lib/tool', { + isExplicitVersion: function(versionSpec) { + return false; + }, + findLocalTool: function(toolName, versionSpec) { + if (toolName != 'node') { + throw new Error('Searching for wrong tool'); + } + return false; + }, + evaluateVersions: function(versions, versionSpec) { + let version: string; + for (let i = versions.length - 1; i >= 0; i--) { + let potential: string = versions[i]; + let satisfied: boolean = potential === '0.12.18'; + if (satisfied) { + version = potential; + break; + } + } + return version; + }, + cleanVersion: function(version) { + return '0.12.18'; + }, + downloadTool(url) { + let err = new Error(); + err['httpStatusCode'] = '404'; + if (url === `https://nodejs.org/dist/v0.12.18/node-v0.12.18-win-${os.arch()}.7z` || + url === `https://nodejs.org/dist/v0.12.18/node-v0.12.18-${os.platform()}-${os.arch()}.tar.gz`) { + throw err; + } + else if (url === `https://nodejs.org/dist/v0.12.18/win-${os.arch()}/node.exe`) { + throw err; + } + else if (url === `https://nodejs.org/dist/v0.12.18/win-${os.arch()}/node.lib`) { + throw err; + } + else if (url === `https://nodejs.org/dist/v0.12.18/node.exe`) { + return 'exe_loc'; + } + else if (url === `https://nodejs.org/dist/v0.12.18/node.lib`) { + return 'exe_lib'; + } + else { + throw new Error('Incorrect URL'); + } + }, + extract7z(downloadPath, extPath, _7zPath) { + return 'extPath'; + }, + extractTar(downloadPath, extPath, _7zPath) { + return 'extPath'; + }, + cacheDir(dir, tool, version) { + return 'path to tool'; + }, + prependPath(toolPath) { + return; + } +}); + +tmr.run(); \ No newline at end of file diff --git a/_generated/UseNodeV1_Node20/icon.png b/_generated/UseNodeV1_Node20/icon.png new file mode 100644 index 000000000000..ccbddf54c6c9 Binary files /dev/null and b/_generated/UseNodeV1_Node20/icon.png differ diff --git a/_generated/UseNodeV1_Node20/icon.svg b/_generated/UseNodeV1_Node20/icon.svg new file mode 100644 index 000000000000..9522fcc4bbb6 --- /dev/null +++ b/_generated/UseNodeV1_Node20/icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/_generated/UseNodeV1_Node20/installer.ts b/_generated/UseNodeV1_Node20/installer.ts new file mode 100644 index 000000000000..4ffbff5ec24a --- /dev/null +++ b/_generated/UseNodeV1_Node20/installer.ts @@ -0,0 +1,250 @@ +import * as taskLib from 'azure-pipelines-task-lib/task'; +import * as toolLib from 'azure-pipelines-tool-lib/tool'; +import * as telemetry from 'azure-pipelines-tasks-utility-common/telemetry'; +import * as restm from 'typed-rest-client/RestClient'; +import * as ifm from 'typed-rest-client/Interfaces'; +import * as os from 'os'; +import * as path from 'path'; + +const osPlat: string = os.platform(); +// Don't use `os.arch()` to construct download URLs, +// Node.js uses a different set of arch identifiers for those. +const force32bit: boolean = taskLib.getBoolInput('force32bit', false); +const osArch: string = (os.arch() === 'ia32' || force32bit) ? 'x86' : os.arch(); + +// +// Node versions interface +// see https://nodejs.org/dist/index.json +// +interface INodeVersion { + version: string, + files: string[], + semanticVersion: string +} + +// +// Basic pattern: +// if !checkLatest +// toolPath = check cache +// if !toolPath +// if version is a range +// match = query nodejs.org +// if !match +// fail +// toolPath = check cache +// if !toolPath +// download, extract, and cache +// toolPath = cacheDir +// PATH = cacheDir + PATH +// +export async function getNode(versionSpec: string, checkLatest: boolean) { + let installedArch = osArch; + + if (toolLib.isExplicitVersion(versionSpec)) { + checkLatest = false; // check latest doesn't make sense when explicit version + } + + // check cache + let toolPath: string; + if (!checkLatest) { + toolPath = toolLib.findLocalTool('node', versionSpec, installedArch); + + // In case if it's darwin arm and toolPath is empty trying to find x64 version + if (!toolPath && isDarwinArm(osPlat, installedArch)) { + toolPath = toolLib.findLocalTool('node', versionSpec, 'x64'); + } + } + + if (!toolPath) { + let version: string; + if (toolLib.isExplicitVersion(versionSpec)) { + // version to download + version = versionSpec; + } else { + // query nodejs.org for a matching version + version = await queryLatestMatch(versionSpec, installedArch); + + if (!version && isDarwinArm(osPlat, installedArch)) { + // nodejs.org does not have an arm64 build for macOS, so we fall back to x64 + console.log(taskLib.loc('TryRosetta', osPlat, installedArch)); + + version = await queryLatestMatch(versionSpec, 'x64'); + installedArch = 'x64'; + } + + if (!version) { + throw new Error(taskLib.loc('NodeVersionNotFound', versionSpec, osPlat, installedArch)); + } + + // check cache + toolPath = toolLib.findLocalTool('node', version, installedArch) + } + + if (!toolPath) { + // download, extract, cache + toolPath = await acquireNode(version, installedArch); + } + } + + // + // a tool installer initimately knows details about the layout of that tool + // for example, node binary is in the bin folder after the extract on Mac/Linux. + // layouts could change by version, by platform etc... but that's the tool installers job + // + if (osPlat != 'win32') { + toolPath = path.join(toolPath, 'bin'); + } + + // + // prepend the tools path. instructs the agent to prepend for future tasks + // + toolLib.prependPath(toolPath); + telemetry.emitTelemetry('TaskHub', 'UseNodeV1', { + versionSpec, + checkLatest, + force32bit + }); +} + +async function queryLatestMatch(versionSpec: string, installedArch: string): Promise { + // node offers a json list of versions + let dataFileName: string; + switch (osPlat) { + case 'linux': dataFileName = 'linux-' + installedArch; break; + case 'darwin': dataFileName = 'osx-' + installedArch + '-tar'; break; + case 'win32': dataFileName = 'win-' + installedArch + '-exe'; break; + default: throw new Error(taskLib.loc('UnexpectedOS', osPlat)); + } + + const versions: string[] = []; + const dataUrl = 'https://nodejs.org/dist/index.json'; + const proxyRequestOptions: ifm.IRequestOptions = { + proxy: taskLib.getHttpProxyConfiguration(dataUrl), + cert: taskLib.getHttpCertConfiguration(), + ignoreSslError: !!taskLib.getVariable('Agent.SkipCertValidation') + }; + const rest: restm.RestClient = new restm.RestClient('vsts-node-tool', undefined, undefined, proxyRequestOptions); + const nodeVersions: INodeVersion[] = (await rest.get(dataUrl)).result; + nodeVersions.forEach((nodeVersion:INodeVersion) => { + // ensure this version supports your os and platform + if (nodeVersion.files.indexOf(dataFileName) >= 0) { + // versions in the file are prefixed with 'v', which is not valid SemVer + // remove 'v' so that toolLib.evaluateVersions behaves properly + nodeVersion.semanticVersion = toolLib.cleanVersion(nodeVersion.version); + versions.push(nodeVersion.semanticVersion); + } + }); + + // get the latest version that matches the version spec + const latestVersion: string = toolLib.evaluateVersions(versions, versionSpec); + // In case if that we had not found version that match + if (!latestVersion) return null; + + return nodeVersions.find(v => v.semanticVersion === latestVersion).version; +} + +async function acquireNode(version: string, installedArch: string): Promise { + // + // Download - a tool installer intimately knows how to get the tool (and construct urls) + // + version = toolLib.cleanVersion(version); + + const isWin32: boolean = osPlat == 'win32'; + + const platform: string = isWin32 ? 'win' : osPlat; + + const fileName: string = `node-v${version}-${platform}-${installedArch}`; + + const fileExtension: string = isWin32 ? '.7z' : '.tar.gz'; + + const downloadUrl: string = `https://nodejs.org/dist/v${version}/${fileName}${fileExtension}`; + + let downloadPath: string; + + try { + downloadPath = await toolLib.downloadTool(downloadUrl); + } catch (err) { + if (isWin32 && err['httpStatusCode'] == 404) { + return await acquireNodeFromFallbackLocation(version); + } + + throw err; + } + + // + // Extract + // + let extPath: string; + + if (isWin32) { + extPath = taskLib.getVariable('Agent.TempDirectory'); + if (!extPath) { + throw new Error(taskLib.loc('AgentTempDirNotSet')); + } + + const _7zPath = path.join(__dirname, '7zr.exe'); + extPath = await toolLib.extract7z(downloadPath, extPath, _7zPath); + } + else { + extPath = await toolLib.extractTar(downloadPath); + } + + // + // Install into the local tool cache - node extracts with a root folder that matches the fileName downloaded + // + const toolRoot = path.join(extPath, fileName); + return await toolLib.cacheDir(toolRoot, 'node', version, installedArch); +} + +// For non LTS versions of Node, the files we need (for Windows) are sometimes located +// in a different folder than they normally are for other versions. +// Normally the format is similar to: https://nodejs.org/dist/v5.10.1/node-v5.10.1-win-x64.7z +// In this case, there will be two files located at: +// /dist/v5.10.1/win-x64/node.exe +// /dist/v5.10.1/win-x64/node.lib +// If this is not the structure, there may also be two files located at: +// /dist/v0.12.18/node.exe +// /dist/v0.12.18/node.lib +// This method attempts to download and cache the resources from these alternative locations. +// Note also that the files are normally zipped but in this case they are just an exe +// and lib file in a folder, not zipped. +async function acquireNodeFromFallbackLocation(version: string): Promise { + // Create temporary folder to download in to + const tempDownloadFolder: string = 'temp_' + Math.floor(Math.random() * 2e9); + const tempDir: string = path.join(taskLib.getVariable('agent.tempDirectory'), tempDownloadFolder); + taskLib.mkdirP(tempDir); + + let exeUrl: string; + let libUrl: string; + try { + exeUrl = `https://nodejs.org/dist/v${version}/win-${osArch}/node.exe`; + libUrl = `https://nodejs.org/dist/v${version}/win-${osArch}/node.lib`; + + await toolLib.downloadTool(exeUrl, path.join(tempDir, 'node.exe')); + await toolLib.downloadTool(libUrl, path.join(tempDir, 'node.lib')); + } + catch (err) { + if (err['httpStatusCode'] && + err['httpStatusCode'] === '404') { + exeUrl = `https://nodejs.org/dist/v${version}/node.exe`; + libUrl = `https://nodejs.org/dist/v${version}/node.lib`; + + await toolLib.downloadTool(exeUrl, path.join(tempDir, 'node.exe')); + await toolLib.downloadTool(libUrl, path.join(tempDir, 'node.lib')); + } + else { + throw err; + } + } + return await toolLib.cacheDir(tempDir, 'node', version, osArch); +} + +// Check is the system are darwin arm and rosetta is installed +function isDarwinArm(osPlat: string, installedArch: string): boolean { + if (osPlat === 'darwin' && installedArch === 'arm64') { + // Check that Rosetta is installed and returns some pid + const execResult = taskLib.execSync('pgrep', 'oahd'); + return execResult.code === 0 && !!execResult.stdout; + } + return false; +} \ No newline at end of file diff --git a/_generated/UseNodeV1_Node20/make.json b/_generated/UseNodeV1_Node20/make.json new file mode 100644 index 000000000000..c58a8680a274 --- /dev/null +++ b/_generated/UseNodeV1_Node20/make.json @@ -0,0 +1,20 @@ +{ + "externals": { + "archivePackages": [ + { + "archiveName": "7zr.zip", + "url": "https://vstsagenttools.blob.core.windows.net/tools/7zr/1805_x86/7zr.zip", + "dest": "./" + } + ] + }, + "rm": [ + { + "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" + ], + "options": "-Rf" + } + ] +} \ No newline at end of file diff --git a/_generated/UseNodeV1_Node20/package-lock.json b/_generated/UseNodeV1_Node20/package-lock.json new file mode 100644 index 000000000000..7b026a7ddf82 --- /dev/null +++ b/_generated/UseNodeV1_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/_generated/UseNodeV1_Node20/package.json b/_generated/UseNodeV1_Node20/package.json new file mode 100644 index 000000000000..618e2277814e --- /dev/null +++ b/_generated/UseNodeV1_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/_generated/UseNodeV1_Node20/proxyutil.ts b/_generated/UseNodeV1_Node20/proxyutil.ts new file mode 100644 index 000000000000..d9d9fa9a01e4 --- /dev/null +++ b/_generated/UseNodeV1_Node20/proxyutil.ts @@ -0,0 +1,45 @@ +import * as taskLib from 'azure-pipelines-task-lib/task'; +import * as qs from 'querystring'; +import * as url from 'url'; + +interface ICurlProxy { + variable: string, + setting: string +} + +function toCurlProxy(proxyCfg: taskLib.ProxyConfiguration): ICurlProxy | null { + let curlProxy: ICurlProxy | null; + if (proxyCfg) { + if (proxyCfg.proxyUrl) { + taskLib.debug(`using proxy ${proxyCfg.proxyUrl}`); + const parsedUrl = url.parse(proxyCfg.proxyUrl); + const httpEnvVarName: string = parsedUrl.protocol === 'https:'? "HTTPS_PROXY" : "HTTP_PROXY"; + + let proxyUrl = new URL(proxyCfg.proxyUrl); + proxyUrl.username = proxyCfg.proxyUsername; + proxyUrl.password = proxyCfg.proxyPassword; + + curlProxy = {}; + curlProxy.variable = httpEnvVarName; + curlProxy.setting = proxyUrl.toString(); + } + } + + return curlProxy; +} + +export function setCurlProxySettings(proxyConfig: taskLib.ProxyConfiguration) { + if (taskLib.getVariable("HTTP_PROXY") || taskLib.getVariable("HTTPS_PROXY")) { + // Short circuit if proxy already set. + return; + } + let curlProxy: ICurlProxy | null = toCurlProxy(proxyConfig); + if (curlProxy) { + // register the escaped versions of password + if (proxyConfig.proxyPassword) { + taskLib.setSecret(qs.escape(proxyConfig.proxyPassword)) + } + + taskLib.setVariable(curlProxy.variable, curlProxy.setting); + } +} diff --git a/_generated/UseNodeV1_Node20/task.json b/_generated/UseNodeV1_Node20/task.json new file mode 100644 index 000000000000..43cd7b25a052 --- /dev/null +++ b/_generated/UseNodeV1_Node20/task.json @@ -0,0 +1,80 @@ +{ + "id": "31C75BBB-BCDF-4706-8D7C-4DA6A1959BC2", + "name": "UseNode", + "friendlyName": "Use Node.js ecosystem", + "description": "Set up a Node.js environment and add it to the PATH, additionally providing proxy support", + "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks", + "helpMarkDown": "", + "category": "Tool", + "preview": true, + "ecosystem": "node", + "minimumAgentVersion": "2.144.0", + "runsOn": [ + "Agent", + "DeploymentGroup" + ], + "author": "Microsoft Corporation", + "version": { + "Major": 1, + "Minor": 229, + "Patch": 4 + }, + "satisfies": [ + "Node", + "npm", + "node.js" + ], + "demands": [], + "instanceNameFormat": "Use Node $(versionSpec)", + "inputs": [ + { + "name": "version", + "type": "string", + "label": "Version", + "defaultValue": "10.x", + "required": false, + "helpMarkDown": "Version Spec of the version to use. Examples: 10.x, 10.15.1, >=10.15.0" + }, + { + "name": "checkLatest", + "type": "boolean", + "label": "Check for Latest Version", + "defaultValue": "false", + "required": false, + "helpMarkDown": "Always checks online for the latest available version that satisfies the version spec. This is typically false unless you have a specific scenario to always get latest. This will cause it to incur download costs when potentially not necessary, especially with the hosted build pool." + }, + { + "name": "force32bit", + "type": "boolean", + "label": "Use 32 bit version on x64 agents", + "defaultValue": "false", + "required": false, + "helpMarkDown": "Installs the x86 version of Node regardless of the CPU architecture of the agent." + } + ], + "execution": { + "Node10": { + "target": "usenode.js", + "argumentFormat": "" + }, + "Node16": { + "target": "usenode.js", + "argumentFormat": "" + }, + "Node20": { + "target": "usenode.js", + "argumentFormat": "" + } + }, + "messages": { + "ToolFailed": "Node install failed: %s", + "TryRosetta": "Unable to find Node for platform %s and architecture %s. Trying to install with Rosetta2", + "NodeVersionNotFound": "Unable to find Node version %s for platform %s and architecture %s.", + "UnexpectedOS": "Unexpected OS %s", + "AgentTempDirNotSet": "Expected Agent.TempDirectory to be set." + }, + "_buildConfigMapping": { + "Default": "1.229.3", + "Node20-225": "1.229.4" + } +} \ No newline at end of file diff --git a/_generated/UseNodeV1_Node20/task.loc.json b/_generated/UseNodeV1_Node20/task.loc.json new file mode 100644 index 000000000000..7346cb0dfdab --- /dev/null +++ b/_generated/UseNodeV1_Node20/task.loc.json @@ -0,0 +1,80 @@ +{ + "id": "31C75BBB-BCDF-4706-8D7C-4DA6A1959BC2", + "name": "UseNode", + "friendlyName": "ms-resource:loc.friendlyName", + "description": "ms-resource:loc.description", + "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks", + "helpMarkDown": "ms-resource:loc.helpMarkDown", + "category": "Tool", + "preview": true, + "ecosystem": "node", + "minimumAgentVersion": "2.144.0", + "runsOn": [ + "Agent", + "DeploymentGroup" + ], + "author": "Microsoft Corporation", + "version": { + "Major": 1, + "Minor": 229, + "Patch": 4 + }, + "satisfies": [ + "Node", + "npm", + "node.js" + ], + "demands": [], + "instanceNameFormat": "ms-resource:loc.instanceNameFormat", + "inputs": [ + { + "name": "version", + "type": "string", + "label": "ms-resource:loc.input.label.version", + "defaultValue": "10.x", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.version" + }, + { + "name": "checkLatest", + "type": "boolean", + "label": "ms-resource:loc.input.label.checkLatest", + "defaultValue": "false", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.checkLatest" + }, + { + "name": "force32bit", + "type": "boolean", + "label": "ms-resource:loc.input.label.force32bit", + "defaultValue": "false", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.force32bit" + } + ], + "execution": { + "Node10": { + "target": "usenode.js", + "argumentFormat": "" + }, + "Node16": { + "target": "usenode.js", + "argumentFormat": "" + }, + "Node20": { + "target": "usenode.js", + "argumentFormat": "" + } + }, + "messages": { + "ToolFailed": "ms-resource:loc.messages.ToolFailed", + "TryRosetta": "ms-resource:loc.messages.TryRosetta", + "NodeVersionNotFound": "ms-resource:loc.messages.NodeVersionNotFound", + "UnexpectedOS": "ms-resource:loc.messages.UnexpectedOS", + "AgentTempDirNotSet": "ms-resource:loc.messages.AgentTempDirNotSet" + }, + "_buildConfigMapping": { + "Default": "1.229.3", + "Node20-225": "1.229.4" + } +} \ No newline at end of file diff --git a/_generated/UseNodeV1_Node20/tsconfig.json b/_generated/UseNodeV1_Node20/tsconfig.json new file mode 100644 index 000000000000..0438b79f69ac --- /dev/null +++ b/_generated/UseNodeV1_Node20/tsconfig.json @@ -0,0 +1,6 @@ +{ + "compilerOptions": { + "target": "ES6", + "module": "commonjs" + } +} \ No newline at end of file diff --git a/_generated/UseNodeV1_Node20/usenode.ts b/_generated/UseNodeV1_Node20/usenode.ts new file mode 100644 index 000000000000..f282af29b7bc --- /dev/null +++ b/_generated/UseNodeV1_Node20/usenode.ts @@ -0,0 +1,39 @@ +// +// UseNode: +// Optionally install version at runtime, setup proxy and setup auth +// This allows for natural cmd line steps in yaml after "using" that eco-system +// since proxy vars and auth is setup for the rest of the job +// +// https://github.com/Microsoft/azure-pipelines-yaml/blob/master/design/use-statement.md +// + +import * as taskLib from 'azure-pipelines-task-lib/task'; +//import * as toolLib from 'vsts-task-tool-lib/tool'; +import * as installer from './installer'; +import * as proxyutil from './proxyutil'; +import * as path from 'path'; + +async function run() { + try { + // + // Version is optional. If supplied, install / use from the tool cache + // If not supplied then task is still used to setup proxy, auth, etc... + // + taskLib.setResourcePath(path.join(__dirname, 'task.json')); + const version = taskLib.getInput('version', false); + if (version) { + const checkLatest: boolean = taskLib.getBoolInput('checkLatest', false); + await installer.getNode(version, checkLatest); + } + + const proxyCfg: taskLib.ProxyConfiguration = taskLib.getHttpProxyConfiguration(); + if (proxyCfg) { + proxyutil.setCurlProxySettings(proxyCfg); + } + } + catch (error) { + taskLib.setResult(taskLib.TaskResult.Failed, error.message); + } +} + +run() \ No newline at end of file diff --git a/_generated/XcodeV5.versionmap.txt b/_generated/XcodeV5.versionmap.txt new file mode 100644 index 000000000000..f1e3e56d1bd8 --- /dev/null +++ b/_generated/XcodeV5.versionmap.txt @@ -0,0 +1,2 @@ +Default|5.229.3 +Node20-225|5.229.4 diff --git a/_generated/XcodeV5/Strings/resources.resjson/de-DE/resources.resjson b/_generated/XcodeV5/Strings/resources.resjson/de-DE/resources.resjson new file mode 100644 index 000000000000..71809588b74c --- /dev/null +++ b/_generated/XcodeV5/Strings/resources.resjson/de-DE/resources.resjson @@ -0,0 +1,101 @@ +{ + "loc.friendlyName": "Xcode", + "loc.helpMarkDown": "[Weitere Informationen zu dieser Aufgabe](https://go.microsoft.com/fwlink/?LinkID=613730) oder [Xcode-Dokumentation anzeigen](https://developer.apple.com/xcode/)", + "loc.description": "Hiermit wird ein Xcode-Arbeitsbereich unter macOS erstellt, getestet oder archiviert. Optional kann eine App paketiert werden.", + "loc.instanceNameFormat": "Xcode $(actions)", + "loc.releaseNotes": "Diese Version der Aufgabe ist mit Xcode 8 bis 13 kompatibel. Features, die ausschließlich der Kompatibilität mit Xcode 7 dienten, wurden entfernt. Die Aufgabe umfasst verbesserte Optionen zur Verwendung von macOS-Agents, die von Microsoft gehostet werden.", + "loc.group.displayName.sign": "Signierung und Bereitstellung", + "loc.group.displayName.package": "Paketoptionen", + "loc.group.displayName.devices": "Geräte und Simulatoren", + "loc.group.displayName.advanced": "Erweitert", + "loc.input.label.actions": "Aktionen", + "loc.input.help.actions": "Geben Sie eine durch Leerzeichen getrennte Liste mit Aktionen ein. Gültige Optionen sind beispielsweise \"build\", \"clean\", \"test\", \"analyze\" und \"archive\". Über \"clean build\" wird beispielsweise ein bereinigter Build ausgeführt.", + "loc.input.label.configuration": "Konfiguration", + "loc.input.help.configuration": "Geben Sie das Xcode-Projekt oder die Arbeitsbereichskonfiguration ein, das bzw. die erstellt werden soll. Als Standardwert für dieses Feld wird die Variable \"$(Configuration)\" verwendet. Bei Verwendung einer Variablen müssen Sie sicherstellen, dass ein Wert (z. B. \"Release\") auf der Registerkarte **Variablen** angegeben wird.", + "loc.input.label.sdk": "SDK", + "loc.input.help.sdk": "Geben Sie ein SDK für die Erstellung des Xcode-Projekts oder -Arbeitsbereichs an. Führen Sie aus der macOS-Terminalanwendung \"xcodebuild -showsdks\" aus, um die Liste gültiger SDKs anzuzeigen. Der Wert für dieses Feld ist standardmäßig auf die Variable \"$(SDK)\" festgelegt. Bei Verwendung einer Variablen müssen Sie sicherstellen, dass ein Wert (z. B. \"iphonesimulator\") auf der Registerkarte **Variablen** angegeben ist.", + "loc.input.label.xcWorkspacePath": "Arbeitsbereich oder Projektpfad", + "loc.input.help.xcWorkspacePath": "(Optional) Geben Sie einen relativen Pfad vom Stamm des Repositorys zum Xcode-Arbeitsbereich oder zum Projekt an. Beispiel: \"MyApp/MyApp.xcworkspace\" oder \"MyApp/MyApp.xcodeproj\". Platzhalter können verwendet werden ([weitere Informationen](https://go.microsoft.com/fwlink/?linkid=856077)).", + "loc.input.label.scheme": "Schema", + "loc.input.help.scheme": "(Optional) Geben Sie den Namen eines in Xcode definierten Schemas an. Es muss sich um ein freigegebenes Schema handeln, für das das Kontrollkästchen Freigegeben unter Verwaltete Schemas in Xcode aktiviert ist. Wenn Sie oben einen Arbeitsbereich oder Projektpfad ohne ein Schema angeben, und der Arbeitsbereich nur ein einziges freigegebenes Schema umfasst, wird dieses automatisch verwendet.", + "loc.input.label.xcodeVersion": "Xcode-Version", + "loc.input.help.xcodeVersion": "Geben Sie die Zielversion von Xcode an. Wählen Sie \"Standard\" aus, um die Standardversion von Xcode auf dem Agentcomputer zu verwenden. Die Auswahl einer Versionsnummer (z. B. \"Xcode 9\") hängt davon ab, ob für den Versionsspeicherort auf dem Agentcomputer Umgebungsvariablen festgelegt werden (z. B. \"XCODE_9_DEVELOPER_DIR=/Applications/Xcode_9.0.0.app/Contents/Developer\"). Wählen Sie \"Pfad angeben\" aus, um einen bestimmten Pfad zum Xcode-Entwicklerverzeichnis anzugeben.
Hinweis: XCode 12 ist auf macOS-10.15 installiert (oder höher)", + "loc.input.label.xcodeDeveloperDir": "Xcode-Entwicklerpfad", + "loc.input.help.xcodeDeveloperDir": "(Optional) Geben Sie einen Pfad zu einem bestimmten Xcode-Entwicklerverzeichnis an (z. B. \"/Applications/Xcode_9.0.0.app/Contents/Developer\"). Dies ist nützlich, wenn mehrere Versionen von Xcode auf dem Agent-Computer installiert sind.", + "loc.input.label.packageApp": "App-Paket erstellen", + "loc.input.help.packageApp": "Geben Sie an, ob eine IPA-App-Paketdatei als Teil des Builds generiert werden soll.", + "loc.input.label.archivePath": "Archivpfad", + "loc.input.help.archivePath": "(Optional) Geben Sie ein Verzeichnis an, in dem erstellte Archive abgelegt werden sollen.", + "loc.input.label.exportPath": "Exportpfad", + "loc.input.help.exportPath": "(Optional) Geben Sie das Ziel für das aus dem Archiv exportierte Produkt an.", + "loc.input.label.exportOptions": "Exportoptionen", + "loc.input.help.exportOptions": "Wählen Sie eine Methode zum Angeben von Optionen für das Exportieren des Archivs ein. Bei Auswahl des Standardwerts \"Automatisch\" wird die Exportmethode automatisch aus dem Archiv erkannt. Wählen Sie \"PLIST\", um eine PLIST-Datei mit Exportoptionen anzugeben. Wählen Sie \"Angeben\" aus, um eine bestimmte **Exportmethode** und eine **Team-ID** anzugeben.", + "loc.input.label.exportMethod": "Exportmethode", + "loc.input.help.exportMethod": "Geben Sie die Methode ein, die Xcode zum Exportieren des Archivs verwenden soll. Beispiel: \"app-store\", \"package\", \"ad-hoc\", \"enterprise\" oder \"development\".", + "loc.input.label.exportTeamId": "Team-ID", + "loc.input.help.exportTeamId": "(Optional) Geben Sie die aus 10 Zeichen bestehende Team-ID aus dem Apple Developer-Portal ein, die beim Export verwendet werden soll.", + "loc.input.label.exportOptionsPlist": "PLIST-Datei mit Exportoptionen", + "loc.input.help.exportOptionsPlist": "Geben Sie den Pfad zur PLIST-Datei ein, die Optionen für den Export enthält.", + "loc.input.label.exportArgs": "Exportargumente", + "loc.input.help.exportArgs": "(Optional) Geben Sie zusätzliche Befehlszeilenargumente ein, die beim Export verwendet werden.", + "loc.input.label.signingOption": "Signaturstil", + "loc.input.help.signingOption": "Wählen Sie die Methode zum Signieren des Builds aus. Wählen Sie \"Keine Codesignierung\" aus, um die Signatur zu deaktivieren. Wählen Sie \"Projektstandards\" aus, um nur die Signaturkonfiguration des Projekts zu verwenden. Wählen Sie \"Manuelle Signatur\" aus, um eine manuelle Signatur zu erzwingen und optional eine Signierungsidentität und ein Bereitstellungsprofil anzugeben. Wählen Sie \"Automatische Signatur\" aus, um eine automatische Signatur zu erzwingen und optional eine Entwicklungs-Team-ID anzugeben. Wenn Ihr Projekt eine Signatur erfordert, verwenden Sie die Aufgaben \"Apple-XX installieren...\", um vor dem Xcode-Build Zertifikate und Bereitstellungsprofile zu installieren.", + "loc.input.label.signingIdentity": "Signierungsidentität", + "loc.input.help.signingIdentity": "(Optional) Geben Sie eine Außerkraftsetzung für die Signierungsidentität ein, mit der der Build signiert werden soll. Hierzu kann es erforderlich sein, die Standardkeychain auf dem Agent-Computer zu entsperren. Wenn kein Wert eingegeben wird, wird die Einstellung des Xcode-Projekts verwendet.", + "loc.input.label.provisioningProfileUuid": "UUID des Bereitstellungsprofils", + "loc.input.help.provisioningProfileUuid": "(Optional) Geben Sie die optionale UUID eines installierten Bereitstellungsprofils ein, die für diesen Build verwendet werden soll. Verwenden Sie separate Buildtasks mit unterschiedlichen Schemas oder Zielen, um separate Bereitstellungsprofile nach Ziel in einem einzelnen Arbeitsbereich (iOS, tvOS, watchOS) anzugeben.", + "loc.input.label.provisioningProfileName": "Profilname wird bereitgestellt", + "loc.input.help.provisioningProfileName": "(Optional) Geben Sie den Namen eines installierten Bereitstellungsprofils ein, das für diesen Build verwendet werden soll. Sofern angegeben, hat dieser Name Vorrang vor der UUID des Bereitstellungsprofils. Verwenden Sie separate Buildaufgaben mit unterschiedlichen Schemas oder Zielen, um in einem einzigen Arbeitsbereich separate Bereitstellungsprofile nach Ziel anzugeben (iOS, tvOS, watchOS).", + "loc.input.label.teamId": "Team-ID", + "loc.input.help.teamId": "(Optional, sofern Sie kein Mitglied mehrerer Entwicklungsteams sind.) Geben Sie die aus 10 Zeichen bestehende Entwicklungsteam-ID an.", + "loc.input.label.destinationPlatformOption": "Zielplattform", + "loc.input.help.destinationPlatformOption": "Geben Sie eine Zielgeräteplattform für UI-Tests ein, die verwendet wird, wenn das generische Buildgerät ungültig ist. Wählen Sie \"Benutzerdefiniert\" aus, um eine Plattform anzugeben, die nicht in dieser Liste enthalten ist. Bei Auswahl von \"Standard\" werden als Ziel weder Simulatoren noch Geräte verwendet.", + "loc.input.label.destinationPlatform": "Benutzerdefinierte Zielplattform", + "loc.input.help.destinationPlatform": "Geben Sie eine Zielgeräteplattform für UI-Tests ein, die verwendet wird, wenn das generische Buildgerät ungültig ist.", + "loc.input.label.destinationTypeOption": "Zieltyp", + "loc.input.help.destinationTypeOption": "Wählen Sie den zu verwendenden Zieltyp für UI-Tests aus. Die Geräte müssen per Kabel- oder Netzwerkverbindung mit dem Mac für die Builderstellung verbunden sein. Siehe Geräte und Simulatoren in Xcode.", + "loc.input.label.destinationSimulators": "Simulator", + "loc.input.help.destinationSimulators": "Geben Sie den Namen eines Xcode-Simulators ein, der für UI-Tests verwendet wird. Geben Sie beispielsweise \"iPhone X\" (iOS und watchOS) oder \"Apple TV 4K\" (tvOS) ein. Eine Zielbetriebssystemversion ist optional und kann im Format \"OS=Versionsnummer\" angegeben werden, wie etwa \"iPhone X,OS=11.1\". Eine Liste der Simulatoren, die für den Agent Hosted macOS installiert sind, finden Sie [hier](https://go.microsoft.com/fwlink/?linkid=875290).", + "loc.input.label.destinationDevices": "Gerät", + "loc.input.help.destinationDevices": "Geben Sie den Namen des Geräts für die UI-Tests ein, z. B. \"iPad von Raisa\".", + "loc.input.label.args": "Argumente", + "loc.input.help.args": "(Optional) Geben Sie zusätzliche Befehlszeilenargumente für den Build ein. Dies ist nützlich, um anstelle eines Arbeitsbereichs/Projekts und Schemas Argumente wie \"-target\" oder \"-project\" anzugeben.", + "loc.input.label.cwd": "Arbeitsverzeichnis", + "loc.input.help.cwd": "(Optional) Geben Sie das Arbeitsverzeichnis ein, in dem der Build ausgeführt werden soll. Wenn kein Wert eingegeben wird, wird der Stamm des Repositorys verwendet.", + "loc.input.label.useXcpretty": "xcpretty verwenden", + "loc.input.help.useXcpretty": "Geben Sie an, ob xcpretty zum Formatieren der xcodebuild-Ausgabe verwendet werden soll. Bei Aktivierung dieser Einstellung muss xcpretty auf dem Agent-Computer installiert sein. Wenn xcpretty nicht installiert ist, wird die unformatierte xcodebuild-Ausgabe angezeigt. Auf Build-Agents, die mit Azure Pipelines gehostet werden, ist xcpretty vorinstalliert. Siehe [xcpretty](https://github.com/supermarin/xcpretty) auf GitHub.", + "loc.input.label.xcprettyArgs": "Xcpretty-Argumente", + "loc.input.help.xcprettyArgs": "Zusätzliche Argumente, die an xcpretty übergeben werden sollen.", + "loc.input.label.publishJUnitResults": "Testergebnisse in Azure Pipelines veröffentlichen", + "loc.input.help.publishJUnitResults": "Geben Sie an, ob JUnit-Testergebnisse in Azure Pipelines veröffentlicht werden sollen. Dies erfordert, dass xcpretty zum Generieren von JUnit-Testergebnissen aktiviert ist.", + "loc.input.label.testRunTitle": "Testlauftitel", + "loc.input.help.testRunTitle": "Der Titel des Testlaufs beim Veröffentlichen der JUnit-Testergebnisse in Azure Pipelines.", + "loc.messages.SignIdNotFound": "Fehler bei der Suche nach der iOS-Signaturidentität. Überprüfen Sie, ob Signatur- und Bereitstellungsinformationen angegeben wurden.", + "loc.messages.TempKeychainSetupFailed": "Fehler beim Hinzufügen der temporären Keychain zum Keychainssuchpfad.", + "loc.messages.ProvProfileDetailsNotFound": "Fehler bei der Suche nach Details für das Bereitstellungsprofil: %s", + "loc.messages.ProvProfileUUIDNotFound": "Fehler bei der Suche nach der UUID für das Bereitstellungsprofil: %s", + "loc.messages.MultipleWorkspacesFound": "Es wurden mehrere Übereinstimmungen für den Xcode-Arbeitsbereich gefunden. Es wird die erste Übereinstimmung verwendet: %s", + "loc.messages.WorkspaceDoesNotExist": "Der Xcode-Arbeitsbereich wurde angegeben, aber er ist nicht vorhanden, oder es handelt sich nicht um ein Verzeichnis: %s", + "loc.messages.UseXcprettyForTestPublishing": "Aktivieren Sie \"xcpretty verwenden\", um Testergebnisse zu veröffentlichen. Für diesen Build werden keine Testergebnisse veröffentlicht.", + "loc.messages.NoTestResultsFound": "Keine übereinstimmenden Testergebnisdateien für \"%s\" gefunden. Das Veröffentlichen von JUnit-Testergebnissen wird übersprungen.", + "loc.messages.XcodeSuccess": "Die Xcode-Taskausführung wurde ohne Fehler abgeschlossen.", + "loc.messages.TempKeychainDeleteFailed": "Fehler beim Löschen des temporären Schlüsselspeichers, der mit dem Build erstellt wurde: %s", + "loc.messages.ProvProfileDeleteFailed": "Fehler beim Löschen des Bereitstellungsprofils \"%s\".", + "loc.messages.ExportMethodNotIdentified": "Fehler beim automatischen Identifizieren der zu verwendenden Exportmethode aus der Archivdatei. Dies kann zu Fehlern während der Builderstellung oder zu einem ungültigen Paket führen. Wenn es beim Export zu Fehlern kommt, aktivieren Sie entweder die Signierung (legen Sie \"Signaturstil\" auf \"Projektstandards\" fest), oder konfigurieren Sie den Export manuell (legen Sie \"Exportoptionen\" auf \"PLIST\" oder \"Angeben\" fest).", + "loc.messages.ExportOptionsPlistInvalidFilePath": "Die PLIST-Datei mit Exportoptionen ist nicht unter \"%s\" vorhanden. Geben Sie einen Pfad zu einer gültigen PLIST-Datei an.", + "loc.messages.SchemeRequiredForArchive": "Das Schema muss angegeben werden, damit das Paket mit dem xcodebuild-Archiv und -Export generiert werden kann.", + "loc.messages.WorkspaceOrProjectRequiredForArchive": "Der Arbeitsbereichs- oder Projektpfad muss angegeben werden, damit das Paket mit dem xcodebuild-Archiv und -Export generiert werden kann.", + "loc.messages.FailedToGenerateExportOptionsPlist": "Fehler beim automatischen Generieren einer PLIST-Datei mit Exportoptionen zum Exportieren einer IPA. Geben Sie in den Paketoptionen eine PLIST-Datei mit Exportoptionen an.", + "loc.messages.LocateXcodeBasedOnVersion": "Entwicklerpfad für Xcode \"%s\" wird gesucht.", + "loc.messages.FailedToLocateSpecifiedXcode": "Der Entwicklerpfad für Xcode \"%s\" kann nicht aufgelöst werden. Legen Sie die Umgebungsvariable \"%s\" auf dem Agent-Computer fest, oder legen Sie \"Xcode-Version\" auf \"Standard\" oder \"Pfad angeben\" fest.", + "loc.messages.CantDetermineProvisioningStyle": "Der Bereitstellungsstil wurde nicht in der pbxProject-Datei gefunden. Es wird die automatische Signatur verwendet. Wenn das Projekt eine manuelle Signatur verwendet, kommt es beim automatischen Exportieren möglicherweise zu einem Fehler. Als Problemumgehung kann \"Exportoptionen\" auf \"Plist\" oder \"Angeben\" festgelegt werden.", + "loc.messages.MultipleSchemesFound": "Der Arbeitsbereich enthält mehrere Schemas. Es wurde kein Schema ausgewählt. Verwenden Sie \"Scheme\", um ein Zielschema anzugeben.", + "loc.messages.NoSchemeFound": "Kein freigegebenes Schema im Arbeitsbereich gefunden. Verwenden Sie \"Verwalten von Schemes\" in Xcode, um ein Schema freizugeben.", + "loc.messages.SchemeSelected": "Der Arbeitsbereich enthält ein einzelnes freigegebenes Schema. \"%s\" wird verwendet.", + "loc.messages.FailedToFindScheme": "Fehler beim Ermitteln eines Schemas im Arbeitsbereich. Verwenden Sie \"Schema\", um ein Zielschema anzugeben.", + "loc.messages.OutputDirectoryIgnored": "Das Ausgabeverzeichnis für die Buildausgabe (Binärdateien) wurde ignoriert. Die Angabe eines Ausgabeverzeichnisses ist nicht mit der Aktion \"%s\" kompatibel.", + "loc.messages.NoDestinationPlatformWarning": "UI-Tests müssen über einen Simulator oder ein verbundenes Gerät ausgeführt werden. Legen Sie \"Zielplattform\" in der Xcode-Aufgabe auf einen anderen Wert als \"Standard\" fest.", + "loc.messages.XcprettyNotInstalled": "xcpretty ist nicht auf dem Buildserver installiert. Es wird die unformatierte xcodebuild-Ausgabe angezeigt. Testergebnisse können nicht veröffentlicht werden, wenn xcpretty nicht installiert ist.", + "loc.messages.XcodeRequiresMac": "Für die Verwendung von Xcode ist ein macOS-Agent erforderlich. Die Builderstellung mit Xcode unter Linux oder Windows wird von Apple nicht unterstützt.", + "loc.messages.UsingDefaultSimulator": "Standardsimulator wird verwendet: %s." +} \ No newline at end of file diff --git a/_generated/XcodeV5/Strings/resources.resjson/en-US/resources.resjson b/_generated/XcodeV5/Strings/resources.resjson/en-US/resources.resjson new file mode 100644 index 000000000000..a67f18019279 --- /dev/null +++ b/_generated/XcodeV5/Strings/resources.resjson/en-US/resources.resjson @@ -0,0 +1,101 @@ +{ + "loc.friendlyName": "Xcode", + "loc.helpMarkDown": "[Learn more about this task](https://go.microsoft.com/fwlink/?LinkID=613730) or [see the Xcode documentation](https://developer.apple.com/xcode/)", + "loc.description": "Build, test, or archive an Xcode workspace on macOS. Optionally package an app.", + "loc.instanceNameFormat": "Xcode $(actions)", + "loc.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.", + "loc.group.displayName.sign": "Signing & provisioning", + "loc.group.displayName.package": "Package options", + "loc.group.displayName.devices": "Devices & simulators", + "loc.group.displayName.advanced": "Advanced", + "loc.input.label.actions": "Actions", + "loc.input.help.actions": "Enter a space-delimited list of actions. Some valid options are `build`, `clean`, `test`, `analyze`, and `archive`. For example,`clean build` will run a clean build.", + "loc.input.label.configuration": "Configuration", + "loc.input.help.configuration": "Enter the Xcode project or workspace configuration to be built. The default value of this field is the variable `$(Configuration)`. When using a variable, make sure to specify a value (for example, `Release`) on the **Variables** tab.", + "loc.input.label.sdk": "SDK", + "loc.input.help.sdk": "Specify an SDK to use when building the Xcode project or workspace. From the macOS Terminal application, run `xcodebuild -showsdks` to display the valid list of SDKs. The default value of this field is the variable `$(SDK)`. When using a variable, make sure to specify a value (for example, `iphonesimulator`) on the **Variables** tab.", + "loc.input.label.xcWorkspacePath": "Workspace or project path", + "loc.input.help.xcWorkspacePath": "(Optional) Enter a relative path from the root of the repository to the Xcode workspace or project. For example, `MyApp/MyApp.xcworkspace` or `MyApp/MyApp.xcodeproj`. Wildcards can be used ([more information](https://go.microsoft.com/fwlink/?linkid=856077)).", + "loc.input.label.scheme": "Scheme", + "loc.input.help.scheme": "(Optional) Enter a scheme name defined in Xcode. It must be a shared scheme, with its Shared checkbox enabled under Managed Schemes in Xcode. If you specify a Workspace or project path above without specifying a scheme, and the workspace has a single shared scheme, it will be automatically used.", + "loc.input.label.xcodeVersion": "Xcode version", + "loc.input.help.xcodeVersion": "Specify the target version of Xcode. Select `Default` to use the default version of Xcode on the agent machine. Selecting a version number (e.g. `Xcode 9`) relies on environment variables being set on the agent machine for the version's location (e.g. `XCODE_9_DEVELOPER_DIR=/Applications/Xcode_9.0.0.app/Contents/Developer`). Select `Specify path` to provide a specific path to the Xcode developer directory.
Note: XCode 12 is installed on macOS-10.15 (or higher)", + "loc.input.label.xcodeDeveloperDir": "Xcode developer path", + "loc.input.help.xcodeDeveloperDir": "(Optional) Enter a path to a specific Xcode developer directory (e.g. `/Applications/Xcode_9.0.0.app/Contents/Developer`). This is useful when multiple versions of Xcode are installed on the agent machine.", + "loc.input.label.packageApp": "Create app package", + "loc.input.help.packageApp": "Indicate whether an IPA app package file should be generated as a part of the build.", + "loc.input.label.archivePath": "Archive path", + "loc.input.help.archivePath": "(Optional) Specify a directory where created archives should be placed.", + "loc.input.label.exportPath": "Export path", + "loc.input.help.exportPath": "(Optional) Specify the destination for the product exported from the archive.", + "loc.input.label.exportOptions": "Export options", + "loc.input.help.exportOptions": "Select a way of providing options for exporting the archive. When the default value of `Automatic` is selected, the export method is automatically detected from the archive. Select `Plist` to specify a plist file containing export options. Select `Specify` to provide a specific **Export method** and **Team ID**.", + "loc.input.label.exportMethod": "Export method", + "loc.input.help.exportMethod": "Enter the method that Xcode should use to export the archive. For example: `app-store`, `package`, `ad-hoc`, `enterprise`, or `development`.", + "loc.input.label.exportTeamId": "Team ID", + "loc.input.help.exportTeamId": "(Optional) Enter the 10-character team ID from the Apple Developer Portal to use during export.", + "loc.input.label.exportOptionsPlist": "Export options plist", + "loc.input.help.exportOptionsPlist": "Enter the path to the plist file that contains options to use during export.", + "loc.input.label.exportArgs": "Export arguments", + "loc.input.help.exportArgs": "(Optional) Enter additional command line arguments to be used during export.", + "loc.input.label.signingOption": "Signing style", + "loc.input.help.signingOption": "Choose the method of signing the build. Select `Do not code sign` to disable signing. Select `Project defaults` to use only the project's signing configuration. Select `Manual signing` to force manual signing and optionally specify a signing identity and provisioning profile. Select `Automatic signing` to force automatic signing and optionally specify a development team ID. If your project requires signing, use the \"Install Apple...\" tasks to install certificates and provisioning profiles prior to the Xcode build.", + "loc.input.label.signingIdentity": "Signing identity", + "loc.input.help.signingIdentity": "(Optional) Enter a signing identity override with which to sign the build. This may require unlocking the default keychain on the agent machine. If no value is entered, the Xcode project's setting will be used.", + "loc.input.label.provisioningProfileUuid": "Provisioning profile UUID", + "loc.input.help.provisioningProfileUuid": "(Optional) Enter the UUID of an installed provisioning profile to be used for this build. Use separate build tasks with different schemes or targets to specify separate provisioning profiles by target in a single workspace (iOS, tvOS, watchOS).", + "loc.input.label.provisioningProfileName": "Provisioning profile name", + "loc.input.help.provisioningProfileName": "(Optional) Enter the name of an installed provisioning profile to be used for this build. If specified, this takes precedence over the provisioning profile UUID. Use separate build tasks with different schemes or targets to specify separate provisioning profiles by target in a single workspace (iOS, tvOS, watchOS).", + "loc.input.label.teamId": "Team ID", + "loc.input.help.teamId": "(Optional, unless you are a member of multiple development teams.) Specify the 10-character development team ID.", + "loc.input.label.destinationPlatformOption": "Destination platform", + "loc.input.help.destinationPlatformOption": "Select the destination device's platform to be used for UI testing when the generic build device isn't valid. Choose `Custom` to specify a platform not included in this list. When `Default` is selected, no simulators nor devices will be targeted.", + "loc.input.label.destinationPlatform": "Custom destination platform", + "loc.input.help.destinationPlatform": "Enter a destination device's platform to be used for UI testing when the generic build device isn't valid.", + "loc.input.label.destinationTypeOption": "Destination type", + "loc.input.help.destinationTypeOption": "Choose the destination type to be used for UI testing. Devices must be connected to the Mac performing the build via a cable or network connection. See Devices and Simulators in Xcode.", + "loc.input.label.destinationSimulators": "Simulator", + "loc.input.help.destinationSimulators": "Enter an Xcode simulator name to be used for UI testing. For example, enter `iPhone X` (iOS and watchOS) or `Apple TV 4K` (tvOS). A target OS version is optional and can be specified in the format 'OS=versionNumber', such as `iPhone X,OS=11.1`. A list of simulators installed on the Hosted macOS agent can be [found here](https://go.microsoft.com/fwlink/?linkid=875290).", + "loc.input.label.destinationDevices": "Device", + "loc.input.help.destinationDevices": "Enter the name of the device to be used for UI testing, such as `Raisa's iPad`.", + "loc.input.label.args": "Arguments", + "loc.input.help.args": "(Optional) Enter additional command line arguments with which to build. This is useful for specifying `-target` or `-project` arguments instead of specifying a workspace/project and scheme.", + "loc.input.label.cwd": "Working directory", + "loc.input.help.cwd": "(Optional) Enter the working directory in which to run the build. If no value is entered, the root of the repository will be used.", + "loc.input.label.useXcpretty": "Use xcpretty", + "loc.input.help.useXcpretty": "Specify whether to use xcpretty to format xcodebuild output. Enabling this requires xcpretty to be installed on the agent machine. If xcpretty is not installed, raw xcodebuild output is shown. xcpretty is preinstalled on Azure Pipelines hosted build agents. See [xcpretty](https://github.com/supermarin/xcpretty) on GitHub.", + "loc.input.label.xcprettyArgs": "Xcpretty arguments", + "loc.input.help.xcprettyArgs": "Additional arguments to pass to xcpretty.", + "loc.input.label.publishJUnitResults": "Publish test results to Azure Pipelines", + "loc.input.help.publishJUnitResults": "Specify whether to publish JUnit test results to Azure Pipelines. This requires xcpretty to be enabled to generate JUnit test results.", + "loc.input.label.testRunTitle": "Test run title", + "loc.input.help.testRunTitle": "Title of the test run when publishing JUnit test results to Azure Pipelines.", + "loc.messages.SignIdNotFound": "Failed to find the iOS signing identity. Verify that signing and provisioning information is provided.", + "loc.messages.TempKeychainSetupFailed": "Failed to add the temporary keychain to the keychains search path.", + "loc.messages.ProvProfileDetailsNotFound": "Failed to find details for the provisioning profile: %s", + "loc.messages.ProvProfileUUIDNotFound": "Failed to find the UUID for provisioning profile: %s", + "loc.messages.MultipleWorkspacesFound": "Multiple Xcode workspace matches were found. The first match will be used: %s", + "loc.messages.WorkspaceDoesNotExist": "The Xcode workspace was specified, but it does not exist or is not a directory: %s", + "loc.messages.UseXcprettyForTestPublishing": "Enable `Use xcpretty` to publish test results. For this build, no test results will be published.", + "loc.messages.NoTestResultsFound": "No test result files matching `%s` were found. Publishing JUnit test results will be skipped.", + "loc.messages.XcodeSuccess": "Xcode task execution completed with no errors.", + "loc.messages.TempKeychainDeleteFailed": "Failed to delete the temporary keychain created during the build: `%s`", + "loc.messages.ProvProfileDeleteFailed": "Failed to delete the provisioning profile `%s`.", + "loc.messages.ExportMethodNotIdentified": "Failed to automatically identify the export method to use from the archive file. This might cause errors during the build or produce an invalid package. If export fails, either enable signing (set `Signing Style` to `Project Defaults`), or configure export manually (set `Export options` to `Plist` or `Specify`).", + "loc.messages.ExportOptionsPlistInvalidFilePath": "The `Export options` plist file does not exist at `%s`. Provide the path to a valid plist file.", + "loc.messages.SchemeRequiredForArchive": "The scheme must be specified to generate the package with xcodebuild archive and export.", + "loc.messages.WorkspaceOrProjectRequiredForArchive": "The workspace or project path must be specified to generate the package with xcodebuild archive and export.", + "loc.messages.FailedToGenerateExportOptionsPlist": "Failed to automatically generate an `Export options` plist file to export an IPA. Please specify an `Export options` plist file in `Package options`.", + "loc.messages.LocateXcodeBasedOnVersion": "Locating the developer path for Xcode `%s`", + "loc.messages.FailedToLocateSpecifiedXcode": "Unable to resolve the developer path for Xcode `%s`. Set the `%s` environment variable on the agent machine, or set `Xcode version` to `Default` or `Specify path`.", + "loc.messages.CantDetermineProvisioningStyle": "The provisioning style was not found in a pbxProject file. Automatic signing will be used. If the project uses manual signing, auto-export may fail. As a workaround, `Export options` can be set to `Plist` or `Specify`.", + "loc.messages.MultipleSchemesFound": "The workspace contains multiple schemes. No scheme selected. Use `Scheme` to specify a target scheme.", + "loc.messages.NoSchemeFound": "No shared scheme found in the workspace. Use \"Manage Schemes\" in Xcode to share a scheme.", + "loc.messages.SchemeSelected": "The workspace contains a single shared scheme. '%s' will be used.", + "loc.messages.FailedToFindScheme": "Failed to find a scheme in the workspace. Use `Scheme` to specify a target scheme.", + "loc.messages.OutputDirectoryIgnored": "Output directory for build output (binaries) ignored. Specifying an output directory is incompatible with the '%s' action.", + "loc.messages.NoDestinationPlatformWarning": "UI tests must be run against a simulator or a connected device. In the Xcode task, set `Destination platform` to a value other than `Default`.", + "loc.messages.XcprettyNotInstalled": "xcpretty is not installed on the build server. xcodebuild raw output will be shown. Publishing test results will fail if xcpretty is not installed.", + "loc.messages.XcodeRequiresMac": "Using Xcode requires a macOS agent. Building with Xcode on Linux or Windows is not supported by Apple.", + "loc.messages.UsingDefaultSimulator": "Using default simulator: %s." +} \ No newline at end of file diff --git a/_generated/XcodeV5/Strings/resources.resjson/es-ES/resources.resjson b/_generated/XcodeV5/Strings/resources.resjson/es-ES/resources.resjson new file mode 100644 index 000000000000..4ea1e26e6cbb --- /dev/null +++ b/_generated/XcodeV5/Strings/resources.resjson/es-ES/resources.resjson @@ -0,0 +1,101 @@ +{ + "loc.friendlyName": "XCode", + "loc.helpMarkDown": "[Obtener más información acerca de esta tarea](https://go.microsoft.com/fwlink/?LinkID=613730) o [consultar la documentación de Xcode](https://developer.apple.com/xcode/)", + "loc.description": "Compile, pruebe o archive un área de trabajo de Xcode en macOS. Opcionalmente, puede empaquetar una aplicación.", + "loc.instanceNameFormat": "Xcode $(actions)", + "loc.releaseNotes": "Esta versión de la tarea es compatible con Xcode 8 - 13. Se han quitado las características que eran únicamente para mantener la compatibilidad con Xcode 7. Esta tarea tiene mejores opciones para usar agentes macOS hospedados por Microsoft.", + "loc.group.displayName.sign": "Firma y aprovisionamiento", + "loc.group.displayName.package": "Opciones del paquete", + "loc.group.displayName.devices": "Dispositivos y simuladores", + "loc.group.displayName.advanced": "Avanzado", + "loc.input.label.actions": "Acciones", + "loc.input.help.actions": "Especifique una lista de acciones delimitada por espacios. Algunas de las opciones válidas son \"build\", \"clean\", \"test\", \"analyze\" y \"archive\". Por ejemplo, \"clean build\" ejecutará una compilación limpia.", + "loc.input.label.configuration": "Configuración", + "loc.input.help.configuration": "Especifique la configuración del proyecto o área de trabajo de Xcode que se va a compilar. El valor predeterminado de este campo es la variable \"$(Configuration)\". Al usar una variable, asegúrese de especificar un valor (por ejemplo, \"Versión\") en la pestaña **Variables**.", + "loc.input.label.sdk": "SDK", + "loc.input.help.sdk": "Especifique el SDK que se va a usar al compilar el área de trabajo o proyecto de Xcode. Desde la aplicación Terminal de macOS, ejecute \"xcodebuild -showsdks\" para mostrar la lista de SDK válidos. El valor predeterminado de este campo es la variable \"$(SDK)\". Al usar una variable, asegúrese de especificar un valor (por ejemplo, \"iphonesimulator\") en la pestaña **Variables**.", + "loc.input.label.xcWorkspacePath": "Ruta de acceso de área de trabajo o proyecto", + "loc.input.help.xcWorkspacePath": "(Opcional) Escriba una ruta de acceso relativa desde la raíz del repositorio al proyecto o área de trabajo de Xcode. Por ejemplo, \"MyApp/MyApp.xcworkspace\" o \"MyApp/MyApp.xcodeproj\". Se pueden usar caracteres comodín ([más información](https://go.microsoft.com/fwlink/?linkid=856077)).", + "loc.input.label.scheme": "Esquema", + "loc.input.help.scheme": "(Opcional) Escriba un nombre de esquema definido en Xcode. Debe ser un esquema compartido, con la casilla Compartido habilitada en Esquemas compartidos en Xcode. Si especifica una Ruta de acceso de área de trabajo o proyecto anteriormente sin especificar un esquema y el área de trabajo tiene un solo esquema compartido, se utilizará automáticamente.", + "loc.input.label.xcodeVersion": "Versión de Xcode", + "loc.input.help.xcodeVersion": "Especifique la versión de destino de Xcode. Seleccione \"Predeterminado\" para utilizar la versión predeterminada de Xcode en el equipo del agente. Al seleccionar un número de versión (por ejemplo: \"Xcode 9\") se toman como base las variables de entorno que se están definiendo en el equipo del agente para la ubicación de la versión (por ejemplo: \"XCODE_9_DEVELOPER_DIR=/Applications/Xcode_9.0.0.app/Contents/Developer\"). Seleccione \"Especificar la ruta de acceso\" para proporcionar una ruta específica al directorio de desarrolladores de Xcode.
Nota: XCode 12 se instala en macOS-10.15 (o superior)", + "loc.input.label.xcodeDeveloperDir": "Ruta de acceso de desarrollador de Xcode", + "loc.input.help.xcodeDeveloperDir": "(Opcional) Escriba una ruta de acceso a un directorio específico de desarrollador de Xcode (por ejemplo, \"/Applications/Xcode_9.0.0.app/Contents/Developer\"). Esto resulta útil cuando se instalan varias versiones de Xcode en el equipo del agente.", + "loc.input.label.packageApp": "Crear paquete de aplicación", + "loc.input.help.packageApp": "Indica si debe generarse un archivo de paquete de aplicaciones IPA como parte de la compilación.", + "loc.input.label.archivePath": "Ruta de acceso de archivo", + "loc.input.help.archivePath": "(Opcional) Especifique un directorio donde deban colocarse los archivos creados.", + "loc.input.label.exportPath": "Ruta de acceso de exportación", + "loc.input.help.exportPath": "(Opcional) Especifique el destino del producto exportado desde el archivo.", + "loc.input.label.exportOptions": "Opciones de exportación", + "loc.input.help.exportOptions": "Seleccione una forma de proporcionar opciones para exportar el archivo. Cuando se selecciona el valor predeterminado \"Automático\", el método de exportación se detecta automáticamente en el archivo. Seleccione \"Plist\" para especificar un archivo .plist que contiene las opciones de exportación. Seleccione \"Especificar\" para proporcionar un **Método de exportación** y un **Id. de equipo** determinados.", + "loc.input.label.exportMethod": "Método de exportación", + "loc.input.help.exportMethod": "Especifique el método que Xcode debe usar para exportar el archivo. Por ejemplo: \"app-store\", \"package\", \"ad-hoc\", \"enterprise\" o \"development\".", + "loc.input.label.exportTeamId": "Id. de equipo", + "loc.input.help.exportTeamId": "(Opcional) Especifique el identificador de equipo de 10 caracteres del portal Apple Developer que se va a usar durante la exportación.", + "loc.input.label.exportOptionsPlist": "Archivo .plist de opciones de exportación", + "loc.input.help.exportOptionsPlist": "Especifique la ruta de acceso al archivo .plist que contiene opciones para usar durante la exportación.", + "loc.input.label.exportArgs": "Argumentos de exportación", + "loc.input.help.exportArgs": "(Opcional) Especifique argumentos adicionales de la línea de comandos que se usarán durante la exportación.", + "loc.input.label.signingOption": "Estilo de firma", + "loc.input.help.signingOption": "Elija un método para firmar la compilación. Seleccione “Do not code sign” para deshabilitar la firma. Seleccione “Valores predeterminados del proyecto” para usar solo la configuración de firma del proyecto. Seleccione “Manual signing” para forzar la firma manual y, opcionalmente, especificar una identidad de firma y un perfil de aprovisionamiento. Seleccione “Firma automática” para forzar la firma automática y, opcionalmente, especificar un identificador de equipo de desarrollo. Si su proyecto requiere firma, use las tareas \"Instalar… de Apple\" para instalar certificados y perfiles de aprovisionamiento antes de la compilación de Xcode.", + "loc.input.label.signingIdentity": "Identidad de firma", + "loc.input.help.signingIdentity": "(Opcional) Especifique un reemplazo de la identidad de firma para firmar la compilación. Esto puede requerir desbloquear la cadena de claves predeterminada en la máquina del agente. Si no se especifica ningún valor, se usará la configuración del proyecto de Xcode.", + "loc.input.label.provisioningProfileUuid": "UUID de perfil de aprovisionamiento", + "loc.input.help.provisioningProfileUuid": "(Opcional) Especifique el UUID de un archivo de aprovisionamiento instalado que se usará para la compilación. Use tareas de compilación independientes con diferentes esquemas o destinos a fin de especificar perfiles de aprovisionamiento independientes por destino en una sola área de trabajo (iOS, tvOS, watchOS).", + "loc.input.label.provisioningProfileName": "Nombre del perfil de aprovisionamiento", + "loc.input.help.provisioningProfileName": "(Opcional) Escriba el nombre de un perfil de aprovisionamiento instalado que se vaya a usar para esta compilación. Si se especifica, tiene prioridad sobre el UUID de dicho perfil. Use tareas de compilación distintas con esquemas o destinos diferentes para especificar perfiles de aprovisionamiento independientes por destino en una única área de trabajo (iOS, tvOS, watchOS).", + "loc.input.label.teamId": "Id. de equipo", + "loc.input.help.teamId": "(Opcional, a menos que sea miembro de varios equipos de desarrollo). Especifique el identificador de equipo de desarrollo de 10 caracteres.", + "loc.input.label.destinationPlatformOption": "Plataforma de destino", + "loc.input.help.destinationPlatformOption": "Seleccione la plataforma del dispositivo de destino que se va a usar para las pruebas de IU cuando el dispositivo de compilación genérico no es válido. Elija \"Personalizar\" para especificar una plataforma que no está incluida en la lista. Si se selecciona \"Predeterminado\", no se establecerán simuladores ni dispositivos como destino.", + "loc.input.label.destinationPlatform": "Plataforma de destino personalizada", + "loc.input.help.destinationPlatform": "Especifique una plataforma de dispositivo de destino para usarla en las pruebas de IU cuando el dispositivo de compilación genérico no sea válido.", + "loc.input.label.destinationTypeOption": "Tipo de destino", + "loc.input.help.destinationTypeOption": "Elija el tipo de destino que se va a usar para las pruebas de IU. Los dispositivos deben conectarse al equipo Mac que realiza la compilación por cable o por red. Consulte Simuladores y dispositivos en Xcode.", + "loc.input.label.destinationSimulators": "Simulador", + "loc.input.help.destinationSimulators": "Especifique un nombre de simulador de Xcode para usarlo en las pruebas de IU. Por ejemplo, escriba \" iPhone X\" (iOS y watchOS) o \" Apple TV 4K\" (tvOS). La versión del sistema operativo de destino es opcional y puede especificarse con el formato \"SO=númeroVersión\", como \"iPhone X,OS=11.1\". [Aquí puede encontrar](https://go.microsoft.com/fwlink/?linkid=875290) una lista de los simuladores instalados en el agente de macOS hospedado.", + "loc.input.label.destinationDevices": "Dispositivo", + "loc.input.help.destinationDevices": "Especifique el nombre del dispositivo que se va a usar para las pruebas de IU, por ejemplo, \"iPad de Ana\".", + "loc.input.label.args": "Argumentos", + "loc.input.help.args": "(Opcional) Especifique argumentos adicionales de la línea de comandos para compilar. Esto es útil para especificar los argumentos \"-target\" o \"-project\" en lugar de especificar un esquema y un área de trabajo o proyecto.", + "loc.input.label.cwd": "Directorio de trabajo", + "loc.input.help.cwd": "(Opcional) Especifique el directorio de trabajo en el que se va a ejecutar la compilación. Si no se especifica ningún valor, se usará la raíz del repositorio.", + "loc.input.label.useXcpretty": "Usar xcpretty", + "loc.input.help.useXcpretty": "Especifique si se va a usar xcpretty para formatear la salida de xcodebuild. Para habilitar esta opción, xcpretty debe estar instalado en la máquina del agente. Si no lo está, se muestra la salida de xcodebuild sin formato. xcpretty está preinstalado en los agentes de compilación hospedados de Azure Pipelines. Consulte [xcpretty](https://github.com/supermarin/xcpretty) en GitHub.", + "loc.input.label.xcprettyArgs": "Argumentos de xcpretty", + "loc.input.help.xcprettyArgs": "Argumentos adicionales que se pasan a xcpretty.", + "loc.input.label.publishJUnitResults": "Publicar resultados de pruebas en Azure Pipelines", + "loc.input.help.publishJUnitResults": "Especifique si los resultados de pruebas JUnit se van a publicar en Azure Pipelines. Para generar estos resultados de pruebas, es necesario que xcpretty esté habilitado.", + "loc.input.label.testRunTitle": "Título de la serie de pruebas", + "loc.input.help.testRunTitle": "Título de la serie de pruebas cuando se publican los resultados de pruebas de JUnit en Azure Pipelines.", + "loc.messages.SignIdNotFound": "No se encuentra la identidad de firma de iOS. Compruebe que la información de firma y aprovisionamiento se ha proporcionado.", + "loc.messages.TempKeychainSetupFailed": "No se pudo agregar la cadena de claves temporal a la ruta de acceso de búsqueda de cadenas de claves.", + "loc.messages.ProvProfileDetailsNotFound": "No se encuentran los detalles del perfil de aprovisionamiento: %s", + "loc.messages.ProvProfileUUIDNotFound": "No se encuentra el UUID del perfil de aprovisionamiento: %s", + "loc.messages.MultipleWorkspacesFound": "Se encontraron varias coincidencias del área de trabajo de Xcode. Se usará la primera: %s", + "loc.messages.WorkspaceDoesNotExist": "Se especificó el área de trabajo de Xcode, pero no existe o no es un directorio: %s", + "loc.messages.UseXcprettyForTestPublishing": "Habilite \"Usar xcpretty\" para publicar los resultados de las pruebas. No se publicará ningún resultado de pruebas para esta compilación.", + "loc.messages.NoTestResultsFound": "No se encontró ningún archivo de resultados de pruebas que coincida con \"%s\". La publicación de resultados de pruebas JUnit se omitirá.", + "loc.messages.XcodeSuccess": "La ejecución de la tarea de Xcode se completó sin errores.", + "loc.messages.TempKeychainDeleteFailed": "No se pudo eliminar la cadena de claves temporal creada durante la compilación: \"%s\"", + "loc.messages.ProvProfileDeleteFailed": "No se pudo eliminar el perfil de aprovisionamiento \"%s\".", + "loc.messages.ExportMethodNotIdentified": "No se pudo identificar automáticamente el método de exportación para usar desde el archivo. Esto puede causar errores durante la compilación o generar un paquete no válido. Si la exportación no se puede realizar, habilite la firma (establezca \"Estilo de firma\" en \"Valores predeterminados del proyecto\") o configure la exportación manualmente (establezca \"Opciones de exportación\" en \"Plist\" o \"Especificar\").", + "loc.messages.ExportOptionsPlistInvalidFilePath": "El archivo .plist de \"Opciones de exportación\" no existe en \"%s\". Proporcione la ruta de acceso a un archivo .plist válido.", + "loc.messages.SchemeRequiredForArchive": "Debe especificarse el esquema para generar el paquete con el archivo xcodebuild y exportarlo.", + "loc.messages.WorkspaceOrProjectRequiredForArchive": "Debe especificarse la ruta de acceso del proyecto o del área de trabajo para generar el paquete con el archivo xcodebuild y exportarlo.", + "loc.messages.FailedToGenerateExportOptionsPlist": "No se pudo generar automáticamente un archivo .plist de \"Opciones de exportación\" para exportar un IPA. Especifique un archivo .plist de \"Opciones de exportación\" en \"Opciones del paquete\".", + "loc.messages.LocateXcodeBasedOnVersion": "Buscando la ruta de acceso del desarrollador para Xcode \"%s\"", + "loc.messages.FailedToLocateSpecifiedXcode": "No se puede resolver la ruta de acceso de desarrollador para Xcode \"%s\". Establezca la variable de entorno \"%s\" en la máquina del agente o bien defina \"Versión de Xcode\" como \"Predeterminada\"o \"Especificar la ruta de acceso\".", + "loc.messages.CantDetermineProvisioningStyle": "No se encontró el estilo de aprovisionamiento en un archivo pbxProject. Se usará la firma automática. Si el proyecto usa la firma manual, la exportación automática puede generar errores. Como solución alternativa, establezca \"Opciones de exportación\" en \"Plist\" o \"Especificar\".", + "loc.messages.MultipleSchemesFound": "El área de trabajo contiene varios esquemas. No hay ningún esquema seleccionado. Use \"Scheme\" para especificar un esquema de destino.", + "loc.messages.NoSchemeFound": "No se encontró ningún esquema compartido en el área de trabajo. Use \"Administrar Schemes\" en Xcode para compartir un esquema.", + "loc.messages.SchemeSelected": "El área de trabajo contiene un solo esquema compartido. Se usará \"%s\".", + "loc.messages.FailedToFindScheme": "No se encontró ningún esquema en el área de trabajo. Use \"Esquema\" para especificar un esquema de destino.", + "loc.messages.OutputDirectoryIgnored": "El directorio de salida para la salida de compilación (binarios) se ha omitido. La especificación de un directorio de salida es incompatible con la acción \"%s\".", + "loc.messages.NoDestinationPlatformWarning": "Las pruebas de IU deben ejecutarse en un simulador o un dispositivo conectado. En la tarea de Xcode, establezca \"Plataforma de destino\" en un valor distinto de \"Predeterminado\".", + "loc.messages.XcprettyNotInstalled": "xcpretty no está instalado en el servidor de compilación. Se mostrará la salida sin formato de xcodebuild. Si xcpretty no está instalado, los resultados de pruebas no se podrán publicar.", + "loc.messages.XcodeRequiresMac": "El uso de Xcode requiere un agente de macOS. Apple no admite la compilación con Xcode en Linux o Windows.", + "loc.messages.UsingDefaultSimulator": "Usando el simulador predeterminado: %s." +} \ No newline at end of file diff --git a/_generated/XcodeV5/Strings/resources.resjson/fr-FR/resources.resjson b/_generated/XcodeV5/Strings/resources.resjson/fr-FR/resources.resjson new file mode 100644 index 000000000000..e66770166e44 --- /dev/null +++ b/_generated/XcodeV5/Strings/resources.resjson/fr-FR/resources.resjson @@ -0,0 +1,101 @@ +{ + "loc.friendlyName": "Xcode", + "loc.helpMarkDown": "[En savoir plus sur cette tâche](https://go.microsoft.com/fwlink/?LinkID=613730) ou [consulter la documentation de Xcode](https://developer.apple.com/xcode/)", + "loc.description": "Générez, testez ou archivez un espace de travail Xcode sur macOS. Créez éventuellement un package d'application.", + "loc.instanceNameFormat": "Xcode $(actions)", + "loc.releaseNotes": "Cette version de la tâche est compatible avec Xcode 8 - 13. Les fonctionnalités qui étaient présentes uniquement pour préserver la compatibilité avec Xcode 7 ont été supprimées. Cette tâche offre de meilleures options pour l'utilisation d'agents macOS hébergés par Microsoft.", + "loc.group.displayName.sign": "Signature et provisionnement", + "loc.group.displayName.package": "Options de package", + "loc.group.displayName.devices": "Appareils et simulateurs", + "loc.group.displayName.advanced": "Avancé", + "loc.input.label.actions": "Actions", + "loc.input.help.actions": "Entrez une liste d'actions délimitées par des espaces. Options valides : 'build', 'clean', 'test', 'analyze' et 'archive'. Par exemple, 'clean build' permet d'exécuter un nettoyage de build.", + "loc.input.label.configuration": "Configuration", + "loc.input.help.configuration": "Entrez la configuration du projet ou de l'espace de travail Xcode à générer. La valeur par défaut de ce champ est la variable '$(Configuration)'. Quand vous utilisez une variable, veillez à spécifier une valeur (par exemple 'Mise en production') sous l'onglet **Variables**.", + "loc.input.label.sdk": "SDK", + "loc.input.help.sdk": "Spécifiez un SDK à utiliser durant la génération du projet ou de l'espace de travail Xcode. À partir de l'application macOS Terminal, exécutez 'xcodebuild -showsdks' pour afficher la liste valide des SDK. La valeur par défaut de ce champ est la variable '$(SDK)'. Quand vous utilisez une variable, veillez à spécifier une valeur (par exemple 'simulateur_iphone') sous l'onglet **Variables**.", + "loc.input.label.xcWorkspacePath": "Chemin d'espace de travail ou de projet", + "loc.input.help.xcWorkspacePath": "(Facultatif) Entrez un chemin relatif à partir de la racine du dépôt vers l'espace de travail ou le projet Xcode. Par exemple, 'MyApp/MyApp.xcworkspace' ou 'MyApp/MyApp.xcodeproj'. Les caractères génériques sont autorisés. ([Plus d'informations](https://go.microsoft.com/fwlink/?linkid=856077)).", + "loc.input.label.scheme": "Schéma", + "loc.input.help.scheme": "(Facultatif) Entrez un nom de schéma défini dans Xcode. Il doit s'agir d'un schéma partagé, dont la case Partagé doit être cochée sous Schémas gérés dans Xcode. Si vous spécifiez un Chemin d'espace de travail ou de projet ci-dessus sans spécifier de schéma, et si l'espace de travail a un seul schéma partagé, il est automatiquement utilisé.", + "loc.input.label.xcodeVersion": "Version de Xcode", + "loc.input.help.xcodeVersion": "Spécifiez la version cible du code Xcode. Sélectionnez « Par défaut » pour utiliser la version par défaut du code Xcode sur l’ordinateur de l’agent. La sélection d’un numéro de version (par exemple« Code Xcode 9 » ) dépend du fait que des variables d’environnement sont définies sur l’ordinateur agent pour l’emplacement de la version (par exemple, « XCODE_9_DEVELOPER_DIR=/Applications/Xcode_9.0.0.app/Contents/Developer »). Sélectionnez « Spécifier le chemin d’accès » pour fournir un chemin d’accès spécifique au répertoire de développeurs Xcode.
Remarque : XCode 12 est installé sur macOS-10.15 (ou version supérieure)", + "loc.input.label.xcodeDeveloperDir": "Chemin de Xcode Developer", + "loc.input.help.xcodeDeveloperDir": "(Facultatif) Entrez le chemin d'un répertoire Xcode Developer spécifique (exemple : '/Applications/Xcode_9.0.0.app/Contents/Developer'). Cela est utile quand plusieurs versions de Xcode sont installées sur la machine d'agent.", + "loc.input.label.packageApp": "Créer le package de l'application", + "loc.input.help.packageApp": "Indique si un fichier de package d'application IPA doit être généré dans le cadre de la build.", + "loc.input.label.archivePath": "Chemin d'archivage", + "loc.input.help.archivePath": "(Facultatif) Spécifiez le répertoire où doivent être placées les archives créées.", + "loc.input.label.exportPath": "Chemin d'exportation", + "loc.input.help.exportPath": "(Facultatif) Spécifiez la destination du produit exporté à partir de l'archive.", + "loc.input.label.exportOptions": "Options d'exportation", + "loc.input.help.exportOptions": "Sélectionnez la façon dont les options d'exportation de l'archive sont fournies. Quand la valeur par défaut 'Automatique' est sélectionnée, la méthode d'exportation est automatiquement détectée à partir de l'archive. Sélectionnez 'Plist' pour spécifier un fichier plist contenant les options d'exportation. Sélectionnez 'Spécifier' pour fournir une **Méthode d'exportation** et un **ID d'équipe** spécifique.", + "loc.input.label.exportMethod": "Méthode d'exportation", + "loc.input.help.exportMethod": "Entrez la méthode que Xcode doit utiliser pour exporter l'archive. Exemple : 'app-store', 'package', 'ad-hoc', 'enterprise' ou 'development'.", + "loc.input.label.exportTeamId": "ID d'équipe", + "loc.input.help.exportTeamId": "(Facultatif) Entrez l'ID d'équipe à 10 caractères du portail des développeurs Apple à utiliser durant l'exportation.", + "loc.input.label.exportOptionsPlist": "Fichier plist d'options d'exportation", + "loc.input.help.exportOptionsPlist": "Entrez le chemin du fichier plist qui contient les options à utiliser durant l'exportation.", + "loc.input.label.exportArgs": "Exporter les arguments", + "loc.input.help.exportArgs": "(Facultatif) Entrez des arguments de ligne de commande supplémentaires à utiliser durant l'exportation.", + "loc.input.label.signingOption": "Style de signature", + "loc.input.help.signingOption": "Choisissez la méthode de signature de la build. Sélectionnez 'Ne pas signer le code' pour désactiver la signature. Sélectionnez 'Paramètres par défaut du projet' pour utiliser uniquement la configuration de signature du projet. Sélectionnez 'Signature manuelle' pour forcer la signature manuelle et spécifier éventuellement une identité de signature et un profil de provisionnement. Sélectionnez 'Signature automatique' pour forcer la signature automatique et spécifier éventuellement un ID d'équipe de développement. Si votre projet nécessite une signature, utilisez les tâches \"Installer Apple...\" pour installer les certificats et les profils de provisionnement avant la build Xcode.", + "loc.input.label.signingIdentity": "Identité de signature", + "loc.input.help.signingIdentity": "(Facultatif) Entrez une identité de signature de remplacement à utiliser pour signer la build. Cela peut nécessiter le déverrouillage du trousseau par défaut sur la machine d'agent. En l'absence de valeur, le paramètre du projet Xcode est utilisé.", + "loc.input.label.provisioningProfileUuid": "UUID du profil de provisionnement", + "loc.input.help.provisioningProfileUuid": "(Facultatif) Entrez l'UUID d'un profil de provisionnement installé à utiliser pour cette build. Utilisez des tâches de build distinctes avec différents schémas ou cibles pour spécifier des profils de provisionnement distincts par cible dans un espace de travail unique (iOS, tvOS, watchOS).", + "loc.input.label.provisioningProfileName": "Nom du profil de provisionnement", + "loc.input.help.provisioningProfileName": "(Facultatif) Entrez le nom d'un profil de provisionnement installé à utiliser pour cette build. Si cette option est spécifiée, elle est prioritaire sur l'UUID du profil de provisionnement. Utilisez des tâches de build distinctes avec différents schémas ou cibles pour spécifier des profils de provisionnement distincts par cible dans un seul espace de travail (iOS, tvOS, watchOS).", + "loc.input.label.teamId": "ID d'équipe", + "loc.input.help.teamId": "(Facultatif, sauf si vous êtes membre de plusieurs équipes de développement.) Spécifiez l'ID d'équipe de développement à 10 caractères.", + "loc.input.label.destinationPlatformOption": "Plateforme de destination", + "loc.input.help.destinationPlatformOption": "Sélectionnez la plateforme d'appareil de destination à utiliser pour les tests d'IU quand l'appareil de build générique est non valide. Choisissez 'Personnalisé' pour spécifier une plateforme non incluse dans cette liste. Quand 'Par défaut' est sélectionné, aucun simulateur ou appareil n'est ciblé.", + "loc.input.label.destinationPlatform": "Plateforme de destination personnalisée", + "loc.input.help.destinationPlatform": "Entrez une plateforme d'appareil de destination à utiliser pour les tests d'IU quand l'appareil de build générique est non valide.", + "loc.input.label.destinationTypeOption": "Type de destination", + "loc.input.help.destinationTypeOption": "Choisissez le type de destination à utiliser pour les tests d'IU. Les appareils doivent être connectés au Mac qui effectue la build via une connexion par câble ou réseau. Consultez Appareils et simulateurs dans Xcode.", + "loc.input.label.destinationSimulators": "Simulator", + "loc.input.help.destinationSimulators": "Entrez un nom de simulateur Xcode à utiliser pour les tests d'IU. Par exemple, entrez 'iPhone X' (iOS et watchOS) ou 'Apple TV 4K' (tvOS). La version du système d'exploitation cible est facultative et peut être spécifiée au format suivant 'OS=numéro_version', par exemple 'iPhone X,OS=11.1'. Vous trouverez une liste des simulateurs installés sur l'agent macOS hébergé [ici](https://go.microsoft.com/fwlink/?linkid=875290).", + "loc.input.label.destinationDevices": "Appareil", + "loc.input.help.destinationDevices": "Entrez le nom de l'appareil à utiliser pour les tests d'IU, par exemple 'iPad de Laurent'.", + "loc.input.label.args": "Arguments", + "loc.input.help.args": "(Facultatif) Entrez des arguments de ligne de commande supplémentaires à utiliser pour la build. Cela permet de spécifier les arguments '-target' ou '-project' au lieu de spécifier un espace de travail/projet et un schéma.", + "loc.input.label.cwd": "Répertoire de travail", + "loc.input.help.cwd": "(Facultatif) Entrez le répertoire de travail dans lequel exécuter la build. Si vous n'entrez aucune valeur, la racine du dépôt est utilisée.", + "loc.input.label.useXcpretty": "Utiliser xcpretty", + "loc.input.help.useXcpretty": "Indiquez si vous souhaitez utiliser xcpretty pour mettre en forme la sortie de xcodebuild. Au préalable, xcpretty doit être installé sur la machine d'agent. Si xcpretty n'est pas installé, la sortie brute de xcodebuild est affichée. Le formateur xcpretty est préinstallé sur les agents de build hébergés Azure Pipelines. Consultez [xcpretty](https://github.com/supermarin/xcpretty) sur GitHub.", + "loc.input.label.xcprettyArgs": "Arguments xcpretty", + "loc.input.help.xcprettyArgs": "Arguments supplémentaires à passer à xcpretty.", + "loc.input.label.publishJUnitResults": "Publier les résultats des tests sur Azure Pipelines", + "loc.input.help.publishJUnitResults": "Indiquez si les résultats des tests JUnit doivent être publiés sur Azure Pipelines. Vous devez activer xcpretty pour permettre la génération des résultats des tests JUnit.", + "loc.input.label.testRunTitle": "Titre de la série de tests", + "loc.input.help.testRunTitle": "Titre de la série de tests pour la publication des résultats des tests JUnit sur Azure Pipelines.", + "loc.messages.SignIdNotFound": "Échec de la localisation de l'identité de signature iOS. Vérifiez que les informations de signature et de provisionnement sont fournies.", + "loc.messages.TempKeychainSetupFailed": "Échec de l'ajout du trousseau de clés temporaire au chemin de recherche des trousseaux de clés.", + "loc.messages.ProvProfileDetailsNotFound": "Échec de la localisation des détails du profil de provisionnement : %s", + "loc.messages.ProvProfileUUIDNotFound": "Échec de la localisation de l'UUID du profil de provisionnement : %s", + "loc.messages.MultipleWorkspacesFound": "Plusieurs correspondances avec l'espace de travail Xcode ont été trouvées. La première correspondance est utilisée : %s", + "loc.messages.WorkspaceDoesNotExist": "L'espace de travail Xcode a été spécifié mais il n'existe pas ou n'est pas un répertoire : %s", + "loc.messages.UseXcprettyForTestPublishing": "Activez 'Utiliser xcpretty' pour publier les résultats des tests. Pour cette build, aucun résultat de test n'est publié.", + "loc.messages.NoTestResultsFound": "Il n'existe aucun fichier de résultat de test correspondant à '%s'. La publication des résultats des tests JUnit va être ignorée.", + "loc.messages.XcodeSuccess": "L'exécution de la tâche Xcode s'est effectuée sans erreurs.", + "loc.messages.TempKeychainDeleteFailed": "Échec de la suppression du trousseau temporaire créé durant la build : '%s'", + "loc.messages.ProvProfileDeleteFailed": "Échec de la suppression du profil de provisionnement '%s'.", + "loc.messages.ExportMethodNotIdentified": "Échec de l'identification automatique de la méthode d'exportation à utiliser à partir du fichier d'archive. Cela peut entraîner des erreurs de build ou produire un package non valide. En cas d'échec de l'exportation, activez la signature (affectez à 'Style de signature' la valeur 'Paramètres par défaut du projet'), ou configurez l'exportation manuellement (affectez à 'Options d'exportation' la valeur 'Plist' ou 'Spécifier').", + "loc.messages.ExportOptionsPlistInvalidFilePath": "Le fichier plist d'options d'exportation n'existe pas sur '%s'. Indiquez le chemin d'un fichier plist valide.", + "loc.messages.SchemeRequiredForArchive": "Vous devez spécifier le schéma pour pouvoir générer le package à l'aide des commandes d'archivage et d'exportation xcodebuild.", + "loc.messages.WorkspaceOrProjectRequiredForArchive": "Vous devez spécifier le chemin de l'espace de travail ou du projet pour pouvoir générer le package à l'aide des commandes d'archivage et d'exportation xcodebuild.", + "loc.messages.FailedToGenerateExportOptionsPlist": "Échec de la génération automatique d'un fichier Plist d'options d'exportation pour l'exportation d'un fichier IPA. Spécifiez un fichier plist d'options d'exportation dans 'Options de package'.", + "loc.messages.LocateXcodeBasedOnVersion": "Localisation du chemin du développeur pour Xcode '%s'.", + "loc.messages.FailedToLocateSpecifiedXcode": "Impossible de résoudre le chemin du développeur pour Xcode '%s'. Définissez la variable d'environnement '%s' sur la machine d'agent, ou affectez à 'Version de Xcode' la valeur 'Par défaut' ou 'Spécifier le chemin'.", + "loc.messages.CantDetermineProvisioningStyle": "Le style de provisionnement est introuvable dans un fichier pbxProject. La signature automatique va être utilisée. Si le projet utilise la signature manuelle, l'exportation automatique risque de ne pas pouvoir s'effectuer. Vous pouvez affecter à Options d'exportation les valeurs Plist ou Spécifier comme solution de contournement.", + "loc.messages.MultipleSchemesFound": "L'espace de travail contient plusieurs schémas. Aucun schéma sélectionné. Utilisez Scheme pour spécifier un schéma cible.", + "loc.messages.NoSchemeFound": "Schéma partagé introuvable dans l'espace de travail. Utilisez Gérer Schemes dans Xcode pour partager un schéma.", + "loc.messages.SchemeSelected": "L'espace de travail contient un seul schéma partagé. '%s' va être utilisé.", + "loc.messages.FailedToFindScheme": "Schéma introuvable dans l'espace de travail. Utilisez 'Schéma' pour spécifier un schéma cible.", + "loc.messages.OutputDirectoryIgnored": "Le répertoire de sortie de build (fichiers binaires) est ignoré. La spécification d'un répertoire de sortie est incompatible avec l'action '%s'.", + "loc.messages.NoDestinationPlatformWarning": "Les tests d'IU doivent être exécutés sur un simulateur ou un appareil connecté. Dans la tâche Xcode, affectez à Plateforme de destination une autre valeur que 'Par défaut'.", + "loc.messages.XcprettyNotInstalled": "xcpretty n'est pas installé sur le serveur de builds. La sortie brute de xcodebuild va être affichée. La publication des résultats des tests sera un échec, si xcpretty n'est pas installé.", + "loc.messages.XcodeRequiresMac": "L'utilisation de Xcode nécessite un agent macOS. La génération avec Xcode sur Linux ou Windows n'est pas prise en charge par Apple.", + "loc.messages.UsingDefaultSimulator": "Utilisation du simulateur par défaut : %s." +} \ No newline at end of file diff --git a/_generated/XcodeV5/Strings/resources.resjson/it-IT/resources.resjson b/_generated/XcodeV5/Strings/resources.resjson/it-IT/resources.resjson new file mode 100644 index 000000000000..b11c9063b905 --- /dev/null +++ b/_generated/XcodeV5/Strings/resources.resjson/it-IT/resources.resjson @@ -0,0 +1,101 @@ +{ + "loc.friendlyName": "Xcode", + "loc.helpMarkDown": "[Altre informazioni su questa attività](https://go.microsoft.com/fwlink/?LinkID=613730). In alternativa [vedere la documentazione di Xcode](https://developer.apple.com/xcode/)", + "loc.description": "Consente di compilare, testare o archiviare un'area di lavoro Xcode in macOS. Facoltativamente crea il pacchetto di un'app.", + "loc.instanceNameFormat": "Xcode $(actions)", + "loc.releaseNotes": "Questa versione dell'attività è compatibile con Xcode 8-13. Le funzionalità presenti solo per garantire la compatibilità con Xcode 7 sono state rimosse. L'attività include opzioni ottimizzate per l'uso di agenti macOS ospitati da Microsoft.", + "loc.group.displayName.sign": "Firma e provisioning", + "loc.group.displayName.package": "Opzioni pacchetto", + "loc.group.displayName.devices": "Dispositivi e simulatori", + "loc.group.displayName.advanced": "Avanzate", + "loc.input.label.actions": "Azioni", + "loc.input.help.actions": "Consente di immettere un elenco di azioni delimitate da spazi. Alcune opzioni valide sono `build`, `clean`, `test`, `analyze` e `archive`. Con `clean build`, ad esempio, verrà eseguita una compilazione pulita.", + "loc.input.label.configuration": "Configurazione", + "loc.input.help.configuration": "Consente di immettere la configurazione del progetto o dell'area di lavoro Xcode da compilare. Il valore predefinito di questo campo è la variabile `$(Configuration)`. Quando si usa una variabile, assicurarsi di specificare una variabile, ad esempio `Release` nella scheda **Variabili**.", + "loc.input.label.sdk": "SDK", + "loc.input.help.sdk": "Consente di specificare un SDK da usare durante la compilazione del progetto o dell'area di lavoro Xcode. Dall'applicazione Terminal di macOS eseguire `xcodebuild -showsdks` per visualizzare l'elenco di SDK validi. Il valore predefinito di questo campo è la variabile `$(SDK)`. Quando si usa una variabile, assicurarsi di specificare un valore, ad esempio `iphonesimulator`, nella scheda **Variabili**.", + "loc.input.label.xcWorkspacePath": "Percorso progetto o area di lavoro", + "loc.input.help.xcWorkspacePath": "(Facoltativo) Consente di immettere un percorso relativo dalla radice del repository all'area di lavoro o al progetto Xcode, ad esempio `MyApp/MyApp.xcworkspace` o `MyApp/MyApp.xcodeproj`. È possibile usare i caratteri jolly. [Altre informazioni](https://go.microsoft.com/fwlink/?linkid=856077)", + "loc.input.label.scheme": "Schema", + "loc.input.help.scheme": "(Facoltativo) Consente di immettere un nome di schema definito in Xcode. Deve essere uno schema condiviso, per il quale la casella di controllo Shared è selezionata in Managed Schemes in Xcode. Se si specifica sopra l'opzione Percorso progetto o area di lavoro senza specificare uno schema verrà usato automaticamente lo schema condiviso dell'area di lavoro, se questa ne include uno solo.", + "loc.input.label.xcodeVersion": "Versione di Xcode", + "loc.input.help.xcodeVersion": "Specificare la versione di destinazione di Xcode. Selezionare 'Predefinita' per usare la versione predefinita di Xcode nel computer agente. La selezione di un numero di versione, ad esempio 'Xcode 9', si basa sulle variabili di ambiente impostate nel computer agente per il percorso della versione (ad esempio, 'XCODE_9_DEVELOPER_DIR=/Applications/Xcode_9.0.0.app/Contents/Developer'). Selezionare 'Specifica percorso' per specificare un percorso per la directory per sviluppatori di Xcode.
Nota: Xcode 12 è installato su macOS-10.15 o versione successiva", + "loc.input.label.xcodeDeveloperDir": "Percorso sviluppatori Xcode", + "loc.input.help.xcodeDeveloperDir": "(Facoltativo) Consente di immettere un percorso di una directory specifica per sviluppatori Xcode, ad esempio `/Applications/Xcode_9.0.0.app/Contents/Developer`. È utile quando nel computer agente sono installate più versioni di Xcode.", + "loc.input.label.packageApp": "Crea pacchetto dell'app", + "loc.input.help.packageApp": "Indica se durante la compilazione deve essere generato un file di pacchetto dell'app IPA.", + "loc.input.label.archivePath": "Percorso archivio", + "loc.input.help.archivePath": "(Facoltativo) Consente di specificare una directory in cui inserire gli archivi creati.", + "loc.input.label.exportPath": "Percorso di esportazione", + "loc.input.help.exportPath": "(Facoltativo) Consente di specificare la destinazione del prodotto esportato dall'archivio.", + "loc.input.label.exportOptions": "Opzioni di esportazione", + "loc.input.help.exportOptions": "Consente di selezionare un modo per specificare le opzioni di esportazione dell'archivio. Quando si seleziona il valore predefinito `Automatico`, il metodo di esportazione viene rilevato automaticamente dall'archivio. Selezionare `Plist` per specificare un file plist contenente le opzioni di esportazione. Selezionare `Specifica` per indicare un valore specifico per **Metodo di esportazione** e **ID team**.", + "loc.input.label.exportMethod": "Metodo di esportazione", + "loc.input.help.exportMethod": "Consente di immettere il metodo che Xcode deve usare per esportare l'archivio, ad esempio `app-store`, `package`, `ad-hoc`, `enterprise` o `development`.", + "loc.input.label.exportTeamId": "ID team", + "loc.input.help.exportTeamId": "(Facoltativo) Consente di immettere l'ID team di 10 caratteri del portale Apple Developer da usare durante l'esportazione.", + "loc.input.label.exportOptionsPlist": "Plist opzioni esportazione", + "loc.input.help.exportOptionsPlist": "Consente di immettere il percorso del file plist contenente le opzioni da usare durante l'esportazione.", + "loc.input.label.exportArgs": "Argomenti per esportazione", + "loc.input.help.exportArgs": "(Facoltativo) Consente di immettere gli argomenti della riga di comando aggiuntivi da usare durante l'esportazione.", + "loc.input.label.signingOption": "Stile di firma", + "loc.input.help.signingOption": "Consente di scegliere il metodo di firma della compilazione. Selezionare `Non firmare il codice` per disabilitare la firma. Selezionare `Impostazioni predefinite progetto` per usare solo la configurazione di firma del progetto. Selezionare `Firma manuale` per forzare la firma manuale e specificare facoltativamente un'identità di firma e un profilo di provisioning. Selezionare `Firma automatica` per forzare la firma automatica e facoltativamente specificare un ID team di sviluppo. Se il progetto richiede la firma, usare le attività di tipo \"Installa Apple...\" per installare i certificati e i profili di provisioning prima della compilazione Xcode.", + "loc.input.label.signingIdentity": "Identità di firma", + "loc.input.help.signingIdentity": "(Facoltativo) Consente di immettere un override per l'identità di firma con cui firmare la compilazione. Per questa operazione potrebbe essere necessario sbloccare il keychain predefinito nel computer agente. Se non viene immesso alcun valore, verrà usata l'impostazione del progetto Xcode.", + "loc.input.label.provisioningProfileUuid": "UUID del profilo di provisioning", + "loc.input.help.provisioningProfileUuid": "(Facoltativo) Consente di immettere l'UUID di un profilo di provisioning installato da usare per questa compilazione. Usare attività di compilazione distinte con destinazioni o schemi diversi per specificare i profili di provisioning in base alla destinazione in una singola area di lavoro (iOS, tvOS, watchOS).", + "loc.input.label.provisioningProfileName": "Nome del profilo di provisioning", + "loc.input.help.provisioningProfileName": "(Facoltativo) Consente di immettere il nome di un profilo di provisioning installato da usare per questa compilazione. Se specificato, tale nome ha la precedenza rispetto all'UUID del profilo di provisioning. Usare attività di compilazione distinte con destinazioni o schemi diversi per specificare i profili di provisioning in base alla destinazione in una singola area di lavoro (iOS, tvOS, watchOS).", + "loc.input.label.teamId": "ID team", + "loc.input.help.teamId": "(Facoltativo, a meno che non si è membri di più team di sviluppo) Consente di specificare l'ID del team di sviluppo a 10 caratteri.", + "loc.input.label.destinationPlatformOption": "Piattaforma di destinazione", + "loc.input.help.destinationPlatformOption": "Consente di selezionare la piattaforma del dispositivo di destinazione da usare per il test dell'interfaccia utente quando il dispositivo di compilazione generico non è valido. Scegliere `Personalizzata` per specificare una piattaforma non inclusa in questo elenco. Se è selezionata l'opzione `Predefinita`, non verranno specificati simulatori o dispositivi di destinazione.", + "loc.input.label.destinationPlatform": "Piattaforma di destinazione personalizzata", + "loc.input.help.destinationPlatform": "Consente di immettere la piattaforma di un dispositivo di destinazione da usare per il test dell'interfaccia utente quando il dispositivo di compilazione generico non è valido.", + "loc.input.label.destinationTypeOption": "Tipo di destinazione", + "loc.input.help.destinationTypeOption": "Consente di scegliere il tipo di destinazione da usare per il test dell'interfaccia utente. I dispositivi devono essere connessi al Mac che esegue la compilazione tramite una connessione via cavo o di rete. Vedere Dispositivi e simulatori in Xcode.", + "loc.input.label.destinationSimulators": "Simulatore", + "loc.input.help.destinationSimulators": "Consente di immettere il nome di un simulatore Xcode da usare per il test dell'interfaccia utente. Ad esempio, immettere `iPhone X` (iOS e watchOS) o `Apple TV 4K` (tvOS). La versione del sistema operativo di destinazione è facoltativa e può essere specificata in formato 'OS=numeroVersione', ad esempio `iPhone X,OS=11.1`. Per un elenco di simulatori installati nell'agente Hosted macOS, vedere [qui](https://go.microsoft.com/fwlink/?linkid=875290).", + "loc.input.label.destinationDevices": "Dispositivo", + "loc.input.help.destinationDevices": "Consente di immettere il nome del dispositivo da usare per il test dell'interfaccia utente, ad esempio `iPad di Maria`.", + "loc.input.label.args": "Argomenti", + "loc.input.help.args": "(Facoltativo) Consente di immettere argomenti aggiuntivi della riga di comando con cui eseguire la compilazione. È utile per specificare gli argomenti `-target` o `-project` invece di specificare un'area di lavoro/un progetto e uno schema.", + "loc.input.label.cwd": "Directory di lavoro", + "loc.input.help.cwd": "(Facoltativo) Consente di immettere la directory di lavoro in cui eseguire la compilazione. Se non si specifica alcun valore, verrà usata la radice del repository.", + "loc.input.label.useXcpretty": "Usa xcpretty", + "loc.input.help.useXcpretty": "Consente di specificare se usare xcpretty per formattare l'output di xcodebuild. Se si abilita questa opzione, xcpretty deve essere installato nel computer agente. Se xcpretty non è installato, viene visualizzato output xcodebuild non elaborato. xcpretty è preinstallato in agenti di compilazione ospitati di Azure Pipelines. Vedere [xcpretty](https://github.com/supermarin/xcpretty) in GitHub.", + "loc.input.label.xcprettyArgs": "Argomenti di xcpretty", + "loc.input.help.xcprettyArgs": "Argomenti aggiuntivi da passare a xcpretty.", + "loc.input.label.publishJUnitResults": "Pubblica i risultati dei test in Azure Pipelines", + "loc.input.help.publishJUnitResults": "Specificare se pubblicare i risultati dei test di JUnit in Azure Pipelines. Per generare i risultati dei test di JUnit, è necessario abilitare xcpretty.", + "loc.input.label.testRunTitle": "Titolo dell'esecuzione dei test", + "loc.input.help.testRunTitle": "Titolo dell'esecuzione dei test durante la pubblicazione dei risultati dei test JUnit in Azure Pipelines.", + "loc.messages.SignIdNotFound": "Non è stato possibile trovare l'identità di firma iOS. Verificare che siano state specificate le informazioni su firma e provisioning.", + "loc.messages.TempKeychainSetupFailed": "Non è stato possibile aggiungere la keychain temporanea al percorso di ricerca delle keychain.", + "loc.messages.ProvProfileDetailsNotFound": "Non è stato possibile trovare i dettagli per il profilo di provisioning: %s", + "loc.messages.ProvProfileUUIDNotFound": "Non è stato possibile trovare l'UUID per il profilo di provisioning: %s", + "loc.messages.MultipleWorkspacesFound": "Sono state trovate più corrispondenze dell'area di lavoro Xcode. Verrà usata la prima corrispondenza: %s", + "loc.messages.WorkspaceDoesNotExist": "È stata specificata l'area di lavoro Xcode che però non esiste o non è una directory: %s", + "loc.messages.UseXcprettyForTestPublishing": "Abilitare 'Usa xcpretty' per pubblicare i risultati del test. Per questa compilazione non verrà pubblicato alcun risultato.", + "loc.messages.NoTestResultsFound": "Non sono stati trovati file dei risultati del test corrispondenti a `%s`. La pubblicazione dei risultati del test JUnit verrà ignorata.", + "loc.messages.XcodeSuccess": "L'esecuzione dell'attività Xcode è stata completata senza errori.", + "loc.messages.TempKeychainDeleteFailed": "Non è stato possibile eliminare la keychain temporanea creata durante la compilazione: `%s`", + "loc.messages.ProvProfileDeleteFailed": "Non è stato possibile eliminare il profilo di provisioning `%s`.", + "loc.messages.ExportMethodNotIdentified": "Non è stato possibile identificare automaticamente il metodo di esportazione da usare dal file di archivio. Potrebbero verificarsi errori durante la compilazione oppure il pacchetto prodotto potrebbe non essere valido. Se l'esportazione non riesce, abilitare la firma (impostare `Stile di firma` su `Impostazioni predefinite progetto`) oppure configurare manualmente l'esportazione (impostare `Opzioni di esportazione` su `Plist` o `Specifica`).", + "loc.messages.ExportOptionsPlistInvalidFilePath": "Il file plist di `Opzioni esportazione` non esiste in `%s`. Specificare il percorso di un file plist valido.", + "loc.messages.SchemeRequiredForArchive": "Per generare il pacchetto con xcodebuild archive ed export, è necessario specificare lo schema.", + "loc.messages.WorkspaceOrProjectRequiredForArchive": "Per generare il pacchetto con xcodebuild archive ed export, è necessario specificare il percorso dell'area di lavoro o del progetto.", + "loc.messages.FailedToGenerateExportOptionsPlist": "Non è stato possibile generare automaticamente un file plist di `Opzioni di esportazione` per esportare un IPA. Specificare un file plist `Opzioni di esportazione` in `Opzioni pacchetto`.", + "loc.messages.LocateXcodeBasedOnVersion": "Individuazione del percorso sviluppatori per Xcode `%s`", + "loc.messages.FailedToLocateSpecifiedXcode": "Non è possibile risolvere il percorso sviluppatori per Xcode `%s`. Impostare la variabile di ambiente `%s` nel computer agente oppure impostare `Versione di Xcode` su `Predefinita` o `Specificare il percorso`.", + "loc.messages.CantDetermineProvisioningStyle": "Lo stile di provisioning non è stato trovato in un file pbxProject. Verrà usata la firma automatica. Se il progetto usa la firma manuale, è possibile che l'esportazione automatica non riesca. Per ovviare al problema, è possibile impostare `Opzioni esportazione` su `Plist` o `Specifica`.", + "loc.messages.MultipleSchemesFound": "L'area di lavoro contiene più schemi, ma non ne è stato selezionato nessuno. Usare `Scheme` per specificare uno schema di destinazione.", + "loc.messages.NoSchemeFound": "Non è stato trovato alcuno schema condiviso nell'area di lavoro. Usare \"Gestisci Schemes\" in Xcode per condividere uno schema.", + "loc.messages.SchemeSelected": "L'area di lavoro contiene un unico schema condiviso. Verrà usato '%s'.", + "loc.messages.FailedToFindScheme": "Non è stato possibile trovare uno schema nell'area di lavoro. Usare `Schema` per specificare uno schema di destinazione.", + "loc.messages.OutputDirectoryIgnored": "La directory di output per l'output di compilazione (file binari) è stata ignorata. La specifica di una directory di output è incompatibile con l'azione '%s'.", + "loc.messages.NoDestinationPlatformWarning": "I test dell'interfaccia utente devono essere eseguiti su un simulatore o un dispositivo connesso. Nell'attività Xcode impostare `Piattaforma di destinazione` su un valore diverso da `Predefinita`.", + "loc.messages.XcprettyNotInstalled": "xcpretty non è installato nel server di compilazione. Verrà visualizzato l'output non elaborato di xcodebuild. La pubblicazione dei risultati dei test non riuscirà se xcpretty non è installato.", + "loc.messages.XcodeRequiresMac": "Per usare Xcode, è richiesto un agente macOS. La compilazione con Xcode in Linux o Windows non è supportata da Apple.", + "loc.messages.UsingDefaultSimulator": "Uso del simulatore predefinito: %s." +} \ No newline at end of file diff --git a/_generated/XcodeV5/Strings/resources.resjson/ja-JP/resources.resjson b/_generated/XcodeV5/Strings/resources.resjson/ja-JP/resources.resjson new file mode 100644 index 000000000000..539a14943218 --- /dev/null +++ b/_generated/XcodeV5/Strings/resources.resjson/ja-JP/resources.resjson @@ -0,0 +1,101 @@ +{ + "loc.friendlyName": "Xcode", + "loc.helpMarkDown": "[このタスクの詳細を表示](https://go.microsoft.com/fwlink/?LinkID=613730)、または [Xcode のドキュメントを参照](https://developer.apple.com/xcode/)", + "loc.description": "macOS で Xcode ワークスペースをビルド、テスト、アーカイブします。オプションでアプリをパッケージ化します。", + "loc.instanceNameFormat": "Xcode $(actions)", + "loc.releaseNotes": "タスクのこのバージョンは Xcode 8 から 13 と互換性があります。Xcode 7 との互換性を維持するためだけの機能は削除されています。Microsoft によってホストされている macOS エージェントを使用する場合、このタスクよりも良いオプションがあります。", + "loc.group.displayName.sign": "署名およびプロビジョニング", + "loc.group.displayName.package": "パッケージのオプション", + "loc.group.displayName.devices": "デバイスとシミュレーター", + "loc.group.displayName.advanced": "詳細設定", + "loc.input.label.actions": "アクション", + "loc.input.help.actions": "アクションのスペース区切りリストを入力してください。有効なオプションには、`build`、`clean`、`test`、`analyze`、`archive` があります。たとえば、`clean build` でクリーン ビルドが実行されます。", + "loc.input.label.configuration": "構成", + "loc.input.help.configuration": "ビルドする Xcode プロジェクトまたはワークスペース構成を入力します。このフィールドの既定値は変数 '$(Configuration)' です。変数を使用するときには、[変数] タブに値 (`Release` など) を必ず指定します。", + "loc.input.label.sdk": "SDK", + "loc.input.help.sdk": "Xcode プロジェクトまたはワークスペースをビルドするときに使う SDK を指定します。SDK の有効なリストを表示するには、macOS のターミナル アプリケーションから `xcodebuild -showsdks` を実行します。このフィールドの既定値は、変数 `$(SDK)` です。変数を使うときは、[**変数**] タブの値を必ず指定してください (例: `iphonesimulator`)。", + "loc.input.label.xcWorkspacePath": "ワークスペースまたはプロジェクト パス", + "loc.input.help.xcWorkspacePath": "(省略可能) Xcode ワークスペースまたはプロジェクトに対するリポジトリのルートからの相対パスを入力します。たとえば、'MyApp/MyApp.xcworkspace' または 'MyApp/MyApp.xcodeproj' です。ワイルドカードを使用できます ([詳細情報](https://go.microsoft.com/fwlink/?linkid=856077))。", + "loc.input.label.scheme": "スキーム", + "loc.input.help.scheme": "(省略可能) Xcode で定義されているスキーム名を入力します。共有スキームである必要があります。そのためには、Xcode の [管理スキーム] の下にある [共有] チェック ボックスを有効にします。スキームを指定しないで上の [ワークスペースまたはプロジェクトのパス] を指定し、かつワークスペースが単一の共有スキームを持つ場合、それが自動的に使用されます。", + "loc.input.label.xcodeVersion": "Xcode バージョン", + "loc.input.help.xcodeVersion": "Xcode のターゲット バージョンを指定します。エージェント マシン上の Xcode の既定バージョンを使用するには、[既定] を選択します。選択するバージョン番号 (例: [Xcode 9]) は、エージェント マシンに設定されているバージョンの場所の環境変数 (例: XCODE_9_DEVELOPER_DIR=/Applications/Xcode_9.0.0.app/Contents/Developer) に依存しています。Xcode Developer ディレクトリへの特定のパスを指定する場合には [パスの指定] を選択します。
注: XCode 12 は macOS-10.15 移行にインストールされます", + "loc.input.label.xcodeDeveloperDir": "Xcode Developer パス", + "loc.input.help.xcodeDeveloperDir": "(省略可能) 特定の Xcode Developer ディレクトリ パスを入力します (例: Applications/Xcode_9.0.0.app/Contents/Developer)。これは、エージェント マシンに複数のバージョンの Xcode がインストールされている場合に役立ちます。", + "loc.input.label.packageApp": "アプリ パッケージの作成", + "loc.input.help.packageApp": "ビルドの一部として、IPA アプリ パッケージ ファイルを生成するかどうかを指定します。", + "loc.input.label.archivePath": "アーカイブ パス", + "loc.input.help.archivePath": "(省略可能) 作成したアーカイブを入れるディレクトリを指定します。", + "loc.input.label.exportPath": "エクスポート パス", + "loc.input.help.exportPath": "(省略可能) アーカイブからエクスポートされた製品の宛先を指定します。", + "loc.input.label.exportOptions": "エクスポート オプション", + "loc.input.help.exportOptions": "アーカイブのエクスポートのオプションの指定方法を選択します。既定値の [自動] を選択すると、エクスポート方法はアーカイブから自動的に検出されます。エクスポートのオプションを記載した Plist ファイルを指定するには [Plist] を選択します。特定の [**エクスポート方法**] や [**チーム ID**] を指定するには、[指定] を選択します。", + "loc.input.label.exportMethod": "エクスポート方法", + "loc.input.help.exportMethod": "Xcode でアーカイブをエクスポートするときに使用するメソッドを入力します。例: `app-store`、`package`、`ad-hoc`、`enterprise`、`development`。", + "loc.input.label.exportTeamId": "チーム ID", + "loc.input.help.exportTeamId": "(省略可能) エクスポート時に使用する、Apple Developer ポータルのチーム ID (10 文字) を入力します。", + "loc.input.label.exportOptionsPlist": "エクスポート オプションの plist", + "loc.input.help.exportOptionsPlist": "エクスポート中に使用するオプションが入った plist ファイルのパスを入力します。", + "loc.input.label.exportArgs": "エクスポート引数", + "loc.input.help.exportArgs": "(省略可能) エクスポート時に使用する追加のコマンド ライン引数を入力します。", + "loc.input.label.signingOption": "署名スタイル", + "loc.input.help.signingOption": "ビルドに署名する方法を選択します。署名を無効にする場合は、[署名をコーディングしない] を選択します。プロジェクトの署名構成のみを使用する場合は、[プロジェクトの既定値] を選択します。手動による署名を強制し、必要に応じて署名 ID とプロビジョニング プロファイルを指定する場合は、[手動署名] を選択します。自動署名を強制し、必要に応じて開発チーム ID を指定する場合には [自動署名] を選択します。プロジェクトで署名が必要な場合、Xcode のビルドの前に \"Apple 証明書のインストール\" タスクや \"Apple プロビジョニング プロファイルのインストール\" タスクを使用して、証明書およびプロビジョニング プロファイルをインストールします。", + "loc.input.label.signingIdentity": "署名 ID", + "loc.input.help.signingIdentity": "(省略可能) ビルドへの署名に使用する署名 ID のオーバーライドを入力します。これには、エージェント マシン上の既定のキーチェーンをロック解除することが必要な場合があります。値を入力しない場合、Xcode プロジェクトの設定が使用されます。", + "loc.input.label.provisioningProfileUuid": "プロビジョニング プロファイル UUID", + "loc.input.help.provisioningProfileUuid": "(省略可能) このビルドに使用される、インストール済みプロビジョニング プロファイルの UUID を入力します。異なるスキームまたはターゲットを持つ個別のビルド タスクを用いて、1 つのワークスペース (iOS、tvOS、watchOS) でターゲットごとに個別のプロビジョニング プロファイルを指定します。", + "loc.input.label.provisioningProfileName": "プロビジョニング プロファイルの名前", + "loc.input.help.provisioningProfileName": "(省略可能) このビルドに使用される、インストール済みプロビジョニング プロファイルの名前を入力します。指定すると、この名前はプロビジョニング プロファイル UUID より優先されます。異なるスキームまたはターゲットを持つ個別のビルド タスクを用いて、1 つのワークスペース (iOS、tvOS、watchOS) でターゲットごとに個別のプロビジョニング プロファイルを指定します。", + "loc.input.label.teamId": "チーム ID", + "loc.input.help.teamId": "(複数の開発チームのメンバーではない場合には、省略可能) 開発チーム ID (10 文字) を指定します。", + "loc.input.label.destinationPlatformOption": "対象プラットフォーム", + "loc.input.help.destinationPlatformOption": "汎用のビルド デバイスが無効な場合に UI テストに使う宛先デバイスのプラットフォームを選択します。このリストに含まれていないプラットフォームを指定するには、[カスタム] を選択します。[既定] を選択すると、どのシミュレーターもデバイスも対象になりません。", + "loc.input.label.destinationPlatform": "カスタム対象プラットフォーム", + "loc.input.help.destinationPlatform": "汎用のビルド デバイスが無効な場合に UI テストに使用する対象デバイスのプラットフォームを入力します。", + "loc.input.label.destinationTypeOption": "対象の種類", + "loc.input.help.destinationTypeOption": "UI テストに使用する対象の種類を選択します。デバイスは、ケーブルまたはネットワーク接続を使用して、ビルドを実行する Mac に接続する必要があります。Xcode の [Devices and Simulators] を参照してください。", + "loc.input.label.destinationSimulators": "Simulator", + "loc.input.help.destinationSimulators": "UI テストに使用する Xcode シミュレーター名を入力します。たとえば、「iPhone X」(iOS と watchOS) または「Apple TV 4K」(tvOS) と入力します。ターゲット OS バージョンはオプションで、「OS=versionNumber」の形式 (例: 「iPhone X,OS=11.1」) で指定できます。Hosted macOS エージェントにインストールされているシミュレーターのリストは [ここをご覧ください](https://go.microsoft.com/fwlink/?linkid=875290)。", + "loc.input.label.destinationDevices": "デバイス", + "loc.input.help.destinationDevices": "UI テストに使用するデバイスの名前を入力します。例: 「Raisa の iPad」など。", + "loc.input.label.args": "引数", + "loc.input.help.args": "(オプション) ビルドに使用する追加のコマンド ライン引数を入力します。これは、ワークスペース/プロジェクトとスキームを指定するのではなく、`-target` または `-project` 引数を指定するのに役立ちます。", + "loc.input.label.cwd": "作業ディレクトリ", + "loc.input.help.cwd": "(省略可能) ビルドを実行する作業ディレクトリを入力します。値を入力しない場合は、リポジトリのルートが使用されます。", + "loc.input.label.useXcpretty": "xcpretty の使用", + "loc.input.help.useXcpretty": "xcpretty を使用して、xcodebuild 出力を書式設定するかどうかを指定します。これを有効にするには、xcpretty がエージェント マシンにインストールされている必要があります。xcpretty がインストールされていない場合は、未処理の xcodebuild 出力が表示されます。Azure Pipelines でホストされているビルド エージェントでは xcpretty はプレインストールされています。GitHub の [xcpretty](https://github.com/supermarin/xcpretty) を参照してください。", + "loc.input.label.xcprettyArgs": "xcpretty 引数", + "loc.input.help.xcprettyArgs": "xcpretty に渡す追加の引数。", + "loc.input.label.publishJUnitResults": "テスト結果を Azure Pipelines に公開する", + "loc.input.help.publishJUnitResults": "JUnit テスト結果を Azure Pipelines に公開するかどうかを指定します。これには、JUnit テスト結果を生成するために xcpretty が有効になっていることが必要です。", + "loc.input.label.testRunTitle": "テストの実行のタイトル", + "loc.input.help.testRunTitle": "JUnit のテスト結果を Azure Pipelines に公開するときの、テストの実行のタイトル。", + "loc.messages.SignIdNotFound": "iOS 署名 ID が見つかりませんでした。指定された署名とプロビジョニングの情報をご確認ください。", + "loc.messages.TempKeychainSetupFailed": "一時キーチェーンをキーチェーン検索パスに追加できませんでした。", + "loc.messages.ProvProfileDetailsNotFound": "プロビジョニング プロファイルの詳細が見つかりませんでした: %s", + "loc.messages.ProvProfileUUIDNotFound": "プロビジョニング プロファイルの UUID が見つかりませんでした: %s", + "loc.messages.MultipleWorkspacesFound": "Xcode ワークスペースの複数の一致が見つかりました。最初の一致が使用されます: %s", + "loc.messages.WorkspaceDoesNotExist": "Xcode ワークスペースが指定されていますが、存在しないか、ディレクトリではありません: %s", + "loc.messages.UseXcprettyForTestPublishing": "`Use xcpretty` を有効化してテスト結果を公開します。このビルドでは、テスト結果は公開されません。", + "loc.messages.NoTestResultsFound": "`%s` と一致するテスト結果ファイルが見つかりませんでした。JUnit テスト結果の発行はスキップされます。", + "loc.messages.XcodeSuccess": "Xcode タスクがエラーなしで実行されました。", + "loc.messages.TempKeychainDeleteFailed": "ビルド中に作成された一時キーチェーンを削除することができませんでした: `%s`", + "loc.messages.ProvProfileDeleteFailed": "プロビジョニング プロファイル `%s` を削除することができませんでした。", + "loc.messages.ExportMethodNotIdentified": "使用するエクスポート方法をアーカイブ ファイルから自動識別できませんでした。これにより、ビルド中にエラーが発生したり、無効なパッケージが生成されたりする可能性があります。エクスポートに失敗する場合、署名を有効にする ([署名スタイル] を [プロジェクトの既定値] に設定) か、エクスポートを手動で構成 ([エクスポート オプション] を [Plist] または [指定] に設定) してください。", + "loc.messages.ExportOptionsPlistInvalidFilePath": "[エクスポート オプション] の plist ファイルが '%s' に存在しません。有効な plist ファイルへのパスを指定してください。", + "loc.messages.SchemeRequiredForArchive": "xcodebuild アーカイブおよびエクスポートを使用してパッケージを生成するには、スキームを指定する必要があります。", + "loc.messages.WorkspaceOrProjectRequiredForArchive": "xcodebuild アーカイブおよびエクスポートを使用してパッケージを生成するには、ワークスペースまたはプロジェクト パスを指定する必要があります。", + "loc.messages.FailedToGenerateExportOptionsPlist": "IPA をエクスポートするための [エクスポート オプション] の plist ファイルの自動生成に失敗しました。[パッケージのオプション] で [エクスポート オプション] の plist ファイルを指定してください。", + "loc.messages.LocateXcodeBasedOnVersion": "Xcode `%s` の Developer パスを検索しています", + "loc.messages.FailedToLocateSpecifiedXcode": "Xcode '%s' の Developer パスを解決できません。エージェント マシンで '%s' 環境変数を設定するか、[Xcode バージョン] を [既定] または [パスの指定] に設定してください。", + "loc.messages.CantDetermineProvisioningStyle": "プロビジョニング スタイルが pbxProject ファイル内に見つかりませんでした。自動署名が使用されます。プロジェクトで手動署名を使用している場合は、自動エクスポートが失敗する可能性があります。この問題を回避するには、'Export options' を 'Plist' または 'Specify' に設定します。", + "loc.messages.MultipleSchemesFound": "ワークスペースに複数のスキームが含まれています。スキームが選択されていません。'Scheme' を使用してターゲット スキームを指定してください。", + "loc.messages.NoSchemeFound": "共有スキームがワークスペース内に見つかりません。スキームを共有するには、Xcode の \"Manage Schemes\" を使用します。", + "loc.messages.SchemeSelected": "ワークスペースには、単一の共有スキームが含まれています。'%s' が使用されます。", + "loc.messages.FailedToFindScheme": "ワークスペースでスキームが見つかりませんでした。[スキーム] を使用して、ターゲット スキームを指定します。", + "loc.messages.OutputDirectoryIgnored": "ビルド出力 (バイナリ) の出力ディレクトリは無視されます。出力ディレクトリを指定することは、'%s' アクションと矛盾します。", + "loc.messages.NoDestinationPlatformWarning": "UI テストをシミュレーターまたは接続されているデバイスに対して実行する必要があります。Xcode タスクでは、`Destination platform` を `Default` 以外の値に設定します。", + "loc.messages.XcprettyNotInstalled": "xcpretty はビルド サーバーにインストールされていません。xcodebuild の未加工の出力が表示されます。xcpretty がインストールされていない場合、テスト結果の公開は失敗します。", + "loc.messages.XcodeRequiresMac": "Xcode を使用するには、macOS エージェントが必要です。Apple は Linux または Windows 上で Xcode を使用するビルドをサポートしていません。", + "loc.messages.UsingDefaultSimulator": "既定のシミュレーターを使用しています: %s。" +} \ No newline at end of file diff --git a/_generated/XcodeV5/Strings/resources.resjson/ko-KR/resources.resjson b/_generated/XcodeV5/Strings/resources.resjson/ko-KR/resources.resjson new file mode 100644 index 000000000000..7fe8a001005f --- /dev/null +++ b/_generated/XcodeV5/Strings/resources.resjson/ko-KR/resources.resjson @@ -0,0 +1,101 @@ +{ + "loc.friendlyName": "Xcode", + "loc.helpMarkDown": "[이 작업에 대한 자세한 정보](https://go.microsoft.com/fwlink/?LinkID=613730) 또는 [Xcode 설명서 참조](https://developer.apple.com/xcode/)", + "loc.description": "macOS에서 Xcode 작업 영역을 빌드, 테스트 또는 보관합니다. 필요에 따라 앱을 패키지합니다.", + "loc.instanceNameFormat": "Xcode $(actions)", + "loc.releaseNotes": "이 버전의 작업은 Xcode 8~13과 호환됩니다. Xcode 7과 호환성을 유지하는 용도로만 사용되었던 기능은 제거되었습니다. 이 작업에서 Microsoft 호스팅 macOS 에이전트를 사용하는 옵션이 향상되었습니다.", + "loc.group.displayName.sign": "서명 및 프로비전", + "loc.group.displayName.package": "패키지 옵션", + "loc.group.displayName.devices": "장치 및 시뮬레이터", + "loc.group.displayName.advanced": "고급", + "loc.input.label.actions": "작업", + "loc.input.help.actions": "공백으로 구분된 작업 목록을 입력합니다. 유효한 몇 가지 옵션은 'build', 'clean', 'test', 'analyze', 'archive'입니다. 예를 들어 'clean build'는 클린 빌드를 실행합니다.", + "loc.input.label.configuration": "구성", + "loc.input.help.configuration": "빌드할 Xcode 프로젝트 또는 작업 영역 구성을 입력합니다. 이 필드의 기본값은 '$(Configuration)' 변수입니다. 변수를 사용하는 경우 **변수** 탭에서 값(예: '릴리스')을 지정해야 합니다.", + "loc.input.label.sdk": "SDK", + "loc.input.help.sdk": "Xcode 프로젝트 또는 작업 영역을 빌드할 때 사용할 SDK를 지정합니다. macOS 터미널 응용 프로그램에서 'xcodebuild -showsdks'를 실행하여 유효한 SDK 목록을 표시합니다. 이 필드의 기본값은 '$(SDK)' 변수입니다. 변수를 사용하는 경우 **변수** 탭에서 값(예: 'iphonesimulator')을 지정해야 합니다.", + "loc.input.label.xcWorkspacePath": "작업 영역 또는 프로젝트 경로", + "loc.input.help.xcWorkspacePath": "(선택 사항) 리포지토리의 루트에서 Xcode 작업 영역 또는 프로젝트로의 상대 경로를 입력합니다. 예를 들어 'MyApp/MyApp.xcworkspace' 또는 'MyApp/MyApp.xcodeproj'입니다. 와일드카드를 사용할 수 있습니다([자세한 정보](https://go.microsoft.com/fwlink/?linkid=856077)).", + "loc.input.label.scheme": "구성표", + "loc.input.help.scheme": "(옵션) Xcode에서 정의된 구성표 이름을 입력합니다. Xcode에서 관리된 구성표 아래의 공유 확인란이 선택된 공유 체계여야 합니다. 구성표를 지정하지 않고 위에서 작업 영역 또는 프로젝트 경로를 지정하면 작업 영역에 단일 공유 구성표가 있을 경우 이 구성표가 자동으로 사용됩니다.", + "loc.input.label.xcodeVersion": "Xcode 버전", + "loc.input.help.xcodeVersion": "Xcode의 대상 버전을 지정합니다. 에이전트 컴퓨터에서 Xcode의 기본 버전을 사용하려면 '기본값'을 선택합니다. 버전 번호(예: 'Xcode 9')를 선택하면 버전 위치(예: 'XCODE_9_DEVELOPER_DIR=/Applications/Xcode_9.0.0.app/Contents/Developer')에 대해 에이전트 컴퓨터에 설정되어 있는 환경 변수에 의존하게 됩니다. Xcode 개발자 디렉터리에 특정 경로를 제공하려면 '경로 지정'을 선택합니다.
참고: XCode 12는 macOS-10.15(또는 이상)에 설치됩니다", + "loc.input.label.xcodeDeveloperDir": "Xcode 개발자 경로", + "loc.input.help.xcodeDeveloperDir": "(옵션) 특정 Xcode 개발자 디렉터리의 경로를 입력합니다(예: '/Applications/Xcode_9.0.0.app/Contents/Developer'). 이 옵션은 여러 버전의 Xcode가 에이전트 컴퓨터에 설치된 경우에 유용합니다.", + "loc.input.label.packageApp": "앱 패키지 만들기", + "loc.input.help.packageApp": "IPA 앱 패키지 파일이 빌드의 일부로 생성되어야 하는지 여부를 나타냅니다.", + "loc.input.label.archivePath": "보관 경로", + "loc.input.help.archivePath": "(선택 사항) 만든 보관 파일을 저장할 디렉터리를 지정합니다.", + "loc.input.label.exportPath": "내보내기 경로", + "loc.input.help.exportPath": "(선택 사항) 보관 파일에서 내보낸 제품의 대상을 지정합니다.", + "loc.input.label.exportOptions": "내보내기 옵션", + "loc.input.help.exportOptions": "보관 파일 내보내기 옵션을 제공하는 방법을 선택합니다. 기본값인 '자동'을 선택하면 내보내기 방법이 보관 파일에서 자동으로 검색됩니다. 내보내기 옵션이 포함된 plist 파일을 지정하려면 'Plist'를 선택하세요. 특정 **내보내기 방법** 및 **팀 ID**를 제공하려면 '지정'을 선택하세요.", + "loc.input.label.exportMethod": "내보내기 방법", + "loc.input.help.exportMethod": "Xcode에서 보관 파일 내보내기에 사용할 방법을 입력합니다. 예: 'app-store', 'package', 'ad-hoc', 'enterprise' 또는 'development'.", + "loc.input.label.exportTeamId": "팀 ID", + "loc.input.help.exportTeamId": "(선택 사항) 내보내기 작업 중 사용할 Apple Developer 포털의 팀 ID(10자)를 입력합니다.", + "loc.input.label.exportOptionsPlist": "내보내기 옵션 plist", + "loc.input.help.exportOptionsPlist": "내보내기 작업 중 사용할 옵션이 포함된 plist 파일의 경로를 입력합니다.", + "loc.input.label.exportArgs": "내보내기 인수", + "loc.input.help.exportArgs": "(선택 사항) 내보내기 작업 중 사용할 추가 명령줄 인수를 입력합니다.", + "loc.input.label.signingOption": "서명 스타일", + "loc.input.help.signingOption": "빌드 서명 방법을 선택합니다. 서명을 사용하지 않도록 설정하려면 '코드 서명 안 함'을 선택하세요. 프로젝트의 서명 구성만 사용하려면 '프로젝트 기본값'을 선택하세요. 수동 서명을 강제 적용하고 필요에 따라 서명 ID 및 프로비전 프로필을 지정하려면 '수동 서명'을 선택하세요. 자동 서명을 강제 적용하고 필요에 따라 개발 팀 ID를 지정하려면 '자동 서명'을 선택하세요. 프로젝트에서 서명을 요구하는 경우 Xcode 빌드 전에 \"Apple 설치...\" 작업을 사용하여 인증서 및 프로비전 프로필을 설치하세요.", + "loc.input.label.signingIdentity": "서명 ID", + "loc.input.help.signingIdentity": "(선택 사항) 빌드 서명에 사용할 서명 ID 재정의를 입력합니다. 이 경우 에이전트 컴퓨터에서 기본 키 집합의 잠금을 해제해야 할 수 있습니다. 값을 입력하지 않으면 Xcode 프로젝트의 설정이 사용됩니다.", + "loc.input.label.provisioningProfileUuid": "프로비전 프로필 UUID", + "loc.input.help.provisioningProfileUuid": "(선택 사항) 이 빌드에 사용할 설치된 프로비전 프로필의 UUID를 입력합니다. 단일 작업 영역(iOS, tvOS, watchOS)에서 대상에 따라 별도의 프로비전 프로필을 지정하려면 스키마 또는 대상이 서로 다른 별도의 빌드 작업을 사용하세요.", + "loc.input.label.provisioningProfileName": "프로필 이름 프로비전", + "loc.input.help.provisioningProfileName": "(선택 사항) 이 빌드에 사용할 설치된 프로비저닝 프로필의 이름을 입력합니다. 지정하면, 이 값이 프로비저닝 프로필 UUID보다 우선합니다. 각각 다른 체계나 대상으로 별도의 빌드 작업을 사용하여 단일 작업 영역에서 대상별 프로비저닝 프로필을 개별적으로 지정합니다(iOS, tvOS, watchOS).", + "loc.input.label.teamId": "팀 ID", + "loc.input.help.teamId": "(선택 사항, 여러 개발 팀의 구성원인 경우 제외) 개발 팀 ID(10자)를 지정합니다.", + "loc.input.label.destinationPlatformOption": "대상 플랫폼", + "loc.input.help.destinationPlatformOption": "일반 빌드 장치가 잘못된 경우 UI 테스트에 사용할 대상 장치의 플랫폼을 선택합니다. 이 목록에 포함되지 않은 플랫폼을 지정하려면 '사용자 지정'을 선택합니다. '기본값'을 선택하면 시뮬레이터 및 장치가 대상으로 지정되지 않습니다.", + "loc.input.label.destinationPlatform": "사용자 지정 대상 플랫폼", + "loc.input.help.destinationPlatform": "일반 빌드 장치가 잘못된 경우 UI 테스트에 사용할 대상 장치의 플랫폼을 입력합니다.", + "loc.input.label.destinationTypeOption": "대상 유형", + "loc.input.help.destinationTypeOption": "UI 테스트에 사용할 대상 유형을 선택합니다. 케이블 또는 네트워크 연결을 통해 장치가 빌드를 수행하는 Mac에 연결되어야 합니다. Xcode에서 장치 및 시뮬레이터를 참조하세요.", + "loc.input.label.destinationSimulators": "시뮬레이터", + "loc.input.help.destinationSimulators": "UI 테스트에 사용할 Xcode 시뮬레이터 이름을 입력합니다. 예를 들어 'iPhone X'(iOS 및 watchOS) 또는 'Apple TV 4K'(tvOS)를 입력합니다. 대상 OS 버전은 선택적이며, 'OS=versionNumber' 형식으로 지정할 수 있습니다(예: 'iPhone X,OS=11.1'). 호스트된 macOS 에이전트에 설치된 시뮬레이터 목록은 [여기서 확인](https://go.microsoft.com/fwlink/?linkid=875290)할 수 있습니다.", + "loc.input.label.destinationDevices": "장치", + "loc.input.help.destinationDevices": "UI 테스트에 사용할 장치의 이름을 입력합니다(예: 'Raisa's iPad').", + "loc.input.label.args": "인수", + "loc.input.help.args": "(선택 사항) 빌드에 사용할 추가 명령줄 인수를 입력합니다. 작업 영역/프로젝트와 체계를 지정하는 대신 '-target' 또는 '-project' 인수를 지정하는 데 유용합니다.", + "loc.input.label.cwd": "작업 디렉터리", + "loc.input.help.cwd": "(선택 사항) 빌드를 실행할 작업 디렉터리를 입력합니다. 값을 입력하지 않으면 리포지토리의 루트가 사용됩니다.", + "loc.input.label.useXcpretty": "xcpretty 사용", + "loc.input.help.useXcpretty": "xcpretty를 사용하여 xcodebuild 출력의 서식을 지정할지 여부를 지정합니다. 이 기능을 사용하려면 에이전트 머신에 xcpretty가 설치되어 있어야 합니다. xcpretty가 설치되지 않은 경우 원시 xcodebuild 출력이 표시됩니다. xcpretty는 Azure Pipelines에 호스트된 빌드 에이전트에 미리 설치되어 있습니다. GitHub에서 [xcpretty](https://github.com/supermarin/xcpretty)를 참조하세요.", + "loc.input.label.xcprettyArgs": "xcpretty 인수", + "loc.input.help.xcprettyArgs": "xcpretty에 전달할 추가 인수입니다.", + "loc.input.label.publishJUnitResults": "테스트 결과를 Azure Pipelines에 게시합니다.", + "loc.input.help.publishJUnitResults": "JUnit 테스트 결과를 Azure Pipelines에 게시할지 여부를 지정합니다. JUnit 테스트 결과를 생성하려면 xcpretty를 사용하도록 설정해야 합니다.", + "loc.input.label.testRunTitle": "테스트 실행 제목", + "loc.input.help.testRunTitle": "JUnit 테스트 결과를 Azure Pipelines에 게시할 때 테스트 실행의 제목입니다.", + "loc.messages.SignIdNotFound": "iOS 서명 ID를 찾지 못했습니다. 서명 및 프로비전 정보를 제공했는지 확인하세요.", + "loc.messages.TempKeychainSetupFailed": "키 집합 검색 경로에 임시 키 집합을 추가하지 못했습니다.", + "loc.messages.ProvProfileDetailsNotFound": "프로비전 프로필의 세부 정보를 찾지 못함: %s", + "loc.messages.ProvProfileUUIDNotFound": "프로비전 프로필의 UUID를 찾지 못함: %s", + "loc.messages.MultipleWorkspacesFound": "일치하는 Xcode 작업 영역이 여러 개 있습니다. 처음 일치 항목이 사용됩니다. %s", + "loc.messages.WorkspaceDoesNotExist": "지정한 Xcode 작업 영역이 없거나 디렉터리가 아님: %s", + "loc.messages.UseXcprettyForTestPublishing": "테스트 결과를 게시하려면 'xcpretty 사용'을 설정하세요. 이 빌드에 대한 테스트 결과가 게시되지 않습니다.", + "loc.messages.NoTestResultsFound": "'%s'과(와) 일치하는 테스트 결과 파일이 없습니다. JUnit 테스트 결과 게시를 건너뜁니다.", + "loc.messages.XcodeSuccess": "Xcode 작업 실행이 오류 없이 완료되었습니다.", + "loc.messages.TempKeychainDeleteFailed": "빌드 중에 생성된 임시 키 집합을 삭제하지 못함: '%s'", + "loc.messages.ProvProfileDeleteFailed": "프로비전 프로필 '%s'을(를) 삭제하지 못했습니다.", + "loc.messages.ExportMethodNotIdentified": "보관 파일에서 사용할 내보내기 방법을 자동으로 식별하지 못했습니다. 이 경우 빌드 중에 오류가 발생하거나 잘못된 패키지가 생성될 수 있습니다. 내보내기에 실패할 경우 서명을 사용하도록 설정('서명 스타일'을 '프로젝트 기본값'으로 설정)하거나 내보내기를 수동으로 구성('내보내기 옵션'을 'Plist' 또는 '지정'으로 설정)하세요.", + "loc.messages.ExportOptionsPlistInvalidFilePath": "'내보내기 옵션' plist 파일이 '%s'에 없습니다. 유효한 plist 파일의 경로를 제공하세요.", + "loc.messages.SchemeRequiredForArchive": "xcodebuild 보관 및 내보내기를 사용하여 패키지를 생성하려면 스키마를 지정해야 합니다.", + "loc.messages.WorkspaceOrProjectRequiredForArchive": "xcodebuild 보관 및 내보내기를 사용하여 패키지를 생성하려면 작업 영역 또는 프로젝트 경로를 지정해야 합니다.", + "loc.messages.FailedToGenerateExportOptionsPlist": "IPA를 내보낼 '내보내기 옵션' plist 파일을 자동으로 생성하지 못했습니다. '패키지 옵션'에서 '내보내기 옵션' plist 파일을 지정하세요.", + "loc.messages.LocateXcodeBasedOnVersion": "Xcode '%s'의 개발자 경로를 찾는 중", + "loc.messages.FailedToLocateSpecifiedXcode": "Xcode '%s'의 개발자 경로를 확인할 수 없습니다. 에이전트 컴퓨터에서 '%s' 환경 변수를 설정하거나 'Xcode 버전'을 '기본값' 또는 '경로 지정'으로 설정하세요.", + "loc.messages.CantDetermineProvisioningStyle": "pbxProject 파일에 프로비저닝 스타일이 없습니다. 자동 서명이 사용됩니다. 프로젝트에서 수동 서명을 사용하는 경우 자동 내보내기가 실패할 수 있습니다. 이 문제를 해결하기 위해 '내보내기 옵션'을 'Plist' 또는 '지정'으로 설정할 수 있습니다.", + "loc.messages.MultipleSchemesFound": "작업 영역에 여러 스키마가 포함되어 있습니다. 선택된 스키마가 없습니다. 'Scheme'을 사용하여 대상 스키마를 지정하세요.", + "loc.messages.NoSchemeFound": "작업 영역에 공유 스키마가 없습니다. Xcode에서 \"Schemes 관리\"를 사용하여 스키마를 공유하세요.", + "loc.messages.SchemeSelected": "작업 영역에 단일 공유 스키마가 포함되어 있습니다. '%s'이(가) 사용됩니다.", + "loc.messages.FailedToFindScheme": "작업 영역에서 스키마를 찾지 못했습니다. '스키마'를 사용하여 대상 스키마를 지정하세요.", + "loc.messages.OutputDirectoryIgnored": "빌드 출력(이진)의 출력 디렉터리가 무시됩니다. 출력 디렉터리 지정은 '%s' 작업과 호환되지 않습니다.", + "loc.messages.NoDestinationPlatformWarning": "시뮬레이터 또는 연결된 장치에 대해 UI 테스트를 실행해야 합니다. Xcode 작업에서 '대상 플랫폼'을 '기본값' 이외의 값으로 설정합니다.", + "loc.messages.XcprettyNotInstalled": "xcpretty가 빌드 서버에 설치되어 있지 않습니다. xcodebuild 원시 출력이 표시됩니다. xcpretty가 설치되지 않은 경우 테스트 결과를 게시하면 실패합니다.", + "loc.messages.XcodeRequiresMac": "Xcode를 사용하려면 macOS 에이전트가 필요합니다. Apple에서는 Linux 또는 Windows에서 Xcode를 사용한 빌드를 지원하지 않습니다.", + "loc.messages.UsingDefaultSimulator": "기본 시뮬레이터 %s을(를) 사용합니다." +} \ No newline at end of file diff --git a/_generated/XcodeV5/Strings/resources.resjson/ru-RU/resources.resjson b/_generated/XcodeV5/Strings/resources.resjson/ru-RU/resources.resjson new file mode 100644 index 000000000000..6313ad31aefb --- /dev/null +++ b/_generated/XcodeV5/Strings/resources.resjson/ru-RU/resources.resjson @@ -0,0 +1,101 @@ +{ + "loc.friendlyName": "Xcode", + "loc.helpMarkDown": "[См. дополнительные сведения об этой задаче](https://go.microsoft.com/fwlink/?LinkID=613730) или [документацию по Xcode](https://developer.apple.com/xcode/)", + "loc.description": "Вы можете собирать, тестировать и архивировать рабочие области Xcode в macOS. При необходимости создавайте пакеты приложений.", + "loc.instanceNameFormat": "Xcode $(actions)", + "loc.releaseNotes": "Эта версия задачи совместима с Xcode версий 8–13. Функции, которые предназначались исключительно для обеспечения совместимости с Xcode 7, были удалены. Эта задача предоставляет более удобные варианты использования агентов macOS, размещенных на серверах Майкрософт.", + "loc.group.displayName.sign": "Подписывание и подготовка", + "loc.group.displayName.package": "Параметры пакета", + "loc.group.displayName.devices": "Устройства и симуляторы", + "loc.group.displayName.advanced": "Дополнительно", + "loc.input.label.actions": "Действия", + "loc.input.help.actions": "Введите список действий, разделенных пробелами. Некоторые допустимые параметры: \"build\", \"clean\", \"test\", \"analyze\" и \"archive\". Например, \"clean build\" запускает чистую сборку.", + "loc.input.label.configuration": "Конфигурация", + "loc.input.help.configuration": "Введите конфигурацию проекта или рабочей области Xcode для сборки. По умолчанию здесь используется содержимое переменной \"$(Configuration)\". При использовании переменной не забудьте указать ее значение (например, \"Release\") на вкладке **Переменные**.", + "loc.input.label.sdk": "SDK", + "loc.input.help.sdk": "Укажите пакет SDK, который будет использоваться при сборке проекта или рабочей области Xcode. В приложении Terminal в macOS выполните команду \"xcodebuild -showsdks\", чтобы вывести список доступных пакетов SDK. По умолчанию в качестве значения этого поля используется содержимое переменной \"$(SDK)\". При использовании переменной не забудьте указать ее значение (например, \"iphonesimulator\") на вкладке **Переменные**.", + "loc.input.label.xcWorkspacePath": "Путь к рабочей области или проекту", + "loc.input.help.xcWorkspacePath": "(Необязательно) Введите относительный путь от корня репозитория к рабочей области или проекту Xcode. Пример: MyApp/MyApp.xcworkspace или MyApp/MyApp.xcodeproj. Можно использовать подстановочные знаки ([дополнительные сведения](https://go.microsoft.com/fwlink/?linkid=856077)).", + "loc.input.label.scheme": "Схема", + "loc.input.help.scheme": "(Необязательно) Введите имя схемы, определенной в Xcode. Это должна быть общая схема, для которой в разделе Управляемые схемы в Xcode должен стоять флажок Общая. Если указать Путь к рабочей области или проекту выше без определения схемы и в рабочей области есть одна общая схема, она будет использована автоматически.", + "loc.input.label.xcodeVersion": "Версия Xcode", + "loc.input.help.xcodeVersion": "Укажите целевую версию Xcode. Выберите \"По умолчанию\", чтобы использовать версию Xcode по умолчанию на компьютере агента. Номер версии (например, \"Xcode 9\") указывается в зависимости от переменных среды, заданных на компьютере агента для расположения версии (например, \"XCODE_9_DEVELOPER_DIR=/Applications/Xcode_9.0.0.app/Contents/Developer\"). Выберите команду \"Указать путь\", чтобы указать путь к определенному каталогу для разработчиков Xcode.
Примечание. Версия Xcode 12 устанавливается на macOS-10.15 (или более поздней версии)", + "loc.input.label.xcodeDeveloperDir": "Путь к папке для разработчиков Xcode", + "loc.input.help.xcodeDeveloperDir": "(Необязательно) Введите путь к указанному каталогу для разработчиков Xcode (например, \"/Applications/Xcode_9.0.0.app/Contents/Developer/\"). Это удобно, если на компьютере агента установлено несколько версий Xcode.", + "loc.input.label.packageApp": "Создать пакет приложения", + "loc.input.help.packageApp": "Указывает, следует ли создать файл пакета приложения IPA в рамках сборки.", + "loc.input.label.archivePath": "Путь к архиву", + "loc.input.help.archivePath": "(Необязательно) Укажите каталог, в котором нужно разместить создаваемые архивы.", + "loc.input.label.exportPath": "Путь экспорта", + "loc.input.help.exportPath": "(Необязательно) Укажите расположение продукта, экспортируемого из архива.", + "loc.input.label.exportOptions": "Параметры экспорта", + "loc.input.help.exportOptions": "Выберите способ предоставления параметров для экспорта архива. Если выбрано значение по умолчанию \"Автоматически\", метод экспорта определяется автоматически на основе архива. Выберите \"Plist\", чтобы указать PLIST-файл, содержащий параметры экспорта. Выберите \"Указанный\", чтобы указать определенный **Метод экспорта** и **Идентификатор группы**.", + "loc.input.label.exportMethod": "Метод экспорта", + "loc.input.help.exportMethod": "Укажите метод Xcode для экспорта архива. Например: \"app-store\", \"package\", \"ad-hoc\", \"enterprise\" или \"development\".", + "loc.input.label.exportTeamId": "Идентификатор Team ID", + "loc.input.help.exportTeamId": "(Необязательно) Введите 10-символьный идентификатор группы с портала для разработчиков Apple, который будет использоваться во время экспорта.", + "loc.input.label.exportOptionsPlist": "PLIST-файл параметров экспорта", + "loc.input.help.exportOptionsPlist": "Введите путь к PLIST-файлу, содержащему параметры экспорта.", + "loc.input.label.exportArgs": "Аргументы экспорта", + "loc.input.help.exportArgs": "(Необязательно) Введите дополнительные аргументы командной строки, которые будут использоваться во время экспорта.", + "loc.input.label.signingOption": "Стиль подписывания", + "loc.input.help.signingOption": "Выберите метод подписывания сборки. Выберите \"Не подписывать код\", чтобы отключить подписывание. Выберите \"По умолчанию для проекта\", чтобы использовать только конфигурацию подписывания проекта. Выберите \"Подписывание вручную\", чтобы принудительно использовать подписывание вручую и при необходимости указать удостоверение подписывания и профиль подготовки. Выберите \"Автоматическое подписывание\", чтобы принудительно использовать автоматическое подписывание и при необходимости указать идентификатор группы разработки. Если для проекта требуется подписывание, используйте задачи \"Установить Apple...\" для установки сертификатов и профилей подготовки перед сборкой Xcode.", + "loc.input.label.signingIdentity": "Удостоверение подписывания", + "loc.input.help.signingIdentity": "(Необязательно) Укажите переопределение удостоверения для подписывания сборки. Может потребоваться снять блокировку цепочки ключей по умолчанию на компьютере агента. Если значение не указано, будет использоваться параметр проекта Xcode.", + "loc.input.label.provisioningProfileUuid": "UUID профиля подготовки", + "loc.input.help.provisioningProfileUuid": "(Необязательно) Введите UUID установленного профиля подготовки, который следует использовать для этой сборки. Используйте отдельные задачи сборки с различными схемами и целевыми объектами, чтобы указать отдельные профили подготовки для различных целей в одной рабочей области (iOS, WatchKit, tvOS).", + "loc.input.label.provisioningProfileName": "Идет подготовка имени профиля", + "loc.input.help.provisioningProfileName": "(Необязательно) Введите имя установленного профиля подготовки, который следует использовать для этой сборки. Если имя указано, оно имеет приоритет над UUID профиля подготовки. Используйте отдельные задачи сборки с разными схемами или целевыми платформами, чтобы задать отдельные профили подготовки по целевым платформам в одной рабочей области (iOS, tvOS, watchOS).", + "loc.input.label.teamId": "Идентификатор Team ID", + "loc.input.help.teamId": "(Необязательно, если пользователь не является членом нескольких групп разработчиков.) Укажите 10-символьный идентификатор группы разработчиков.", + "loc.input.label.destinationPlatformOption": "Платформа назначения", + "loc.input.help.destinationPlatformOption": "Выберите платформу целевого устройства, которая будет использована для тестирования пользовательского интерфейса, когда универсальное устройство сборки не является допустимым. Выберите вариант \"Пользовательская\", чтобы указать платформу, которой нет в списке. При выборе платформы \"По умолчанию\" целевые симуляторы и устройства выбраны не будут.", + "loc.input.label.destinationPlatform": "Настраиваемая платформа назначения", + "loc.input.help.destinationPlatform": "Укажите платформу устройства назначения, которая будет использоваться для тестирования пользовательского интерфейса, если универсальное устройство сборки недопустимо.", + "loc.input.label.destinationTypeOption": "Конечный тип", + "loc.input.help.destinationTypeOption": "Выберите тип назначения, который будет использоваться для тестирования пользовательского интерфейса. Устройства должны быть подключены к компьютеру Mac, на котором ведется сборка, с помощью кабеля или по сети. См. раздел Устройства и симуляторы в Xcode.", + "loc.input.label.destinationSimulators": "Симулятор", + "loc.input.help.destinationSimulators": "Введите имя симулятора Xcode, который следует использовать для тестирования пользовательского интерфейса. Например, введите \"iPhone X\" (iOS и watchOS) или \"Apple TV 4K\" (tvOS). Целевая версия ОС является необязательной. Ее можно указать в формате \"OS=номер_версии\", например \"iPhone X,OS=11.1\". Список симуляторов, установленных в размещенном агенте macOS, можно найти [здесь](https://go.microsoft.com/fwlink/?linkid=875290).", + "loc.input.label.destinationDevices": "Устройство", + "loc.input.help.destinationDevices": "Введите имя устройства для тестирования пользовательского интерфейса, например \"iPad Раисы\".", + "loc.input.label.args": "Аргументы", + "loc.input.help.args": "(Необязательно) Введите дополнительные аргументы командной строки для сборки. Это удобно для указания аргументов \"-target\" или \"-project\" вместо указания рабочей области/проекта и схемы.", + "loc.input.label.cwd": "Рабочий каталог", + "loc.input.help.cwd": "(Необязательно) Укажите рабочий каталог, в котором будет вестись сборка. Если значение не указано, будет использоваться корневой каталог хранилища.", + "loc.input.label.useXcpretty": "Использовать xcpretty", + "loc.input.help.useXcpretty": "Укажите, следует ли использовать xcpretty для форматирования выходных данных xcodebuild. Для этого средство xcpretty должно быть установлено на компьютере агента. Если средство xcpretty не установлено, выводятся необработанные выходные данные xcodebuild. Средство xcpretty предустановлено в размещенных агентах сборки Azure Pipelines. См. страницу [xcpretty](https://github.com/supermarin/xcpretty) в GitHub.", + "loc.input.label.xcprettyArgs": "Аргументы xcpretty", + "loc.input.help.xcprettyArgs": "Дополнительные аргументы для передачи команде xcpretty.", + "loc.input.label.publishJUnitResults": "Опубликовать результаты тестов в Azure Pipelines", + "loc.input.help.publishJUnitResults": "Укажите, следует ли публиковать результаты теста JUnit в Azure Pipelines. Для создания результатов теста JUnit требуется включить xcpretty.", + "loc.input.label.testRunTitle": "Название тестового запуска", + "loc.input.help.testRunTitle": "Название тестового запуска при публикации результатов теста JUnit в Azure Pipelines.", + "loc.messages.SignIdNotFound": "Не удалось найти удостоверение подписывания для iOS. Убедитесь, что указаны необходимые данные для подписывания и подготовки.", + "loc.messages.TempKeychainSetupFailed": "Не удалось добавить временную цепочку ключей в путь поиска цепочек ключей.", + "loc.messages.ProvProfileDetailsNotFound": "Не удалось найти сведения о профиле подготовки: %s", + "loc.messages.ProvProfileUUIDNotFound": "Не удалось найти UUID профиля подготовки: %s", + "loc.messages.MultipleWorkspacesFound": "Обнаружено несколько соответствий для рабочей области Xcode. Будет использовано первое соответствие: %s", + "loc.messages.WorkspaceDoesNotExist": "Указана рабочая область Xcode, но она не существует или не является каталогом: %s", + "loc.messages.UseXcprettyForTestPublishing": "Включите параметр \"Использовать xcpretty\" для публикации результатов тестов. Для этой сборки результаты тестов публиковаться не будут.", + "loc.messages.NoTestResultsFound": "Файлы результатов теста, соответствующие \"%s\", не найдены. Публикация результатов теста JUnit выполняться не будет.", + "loc.messages.XcodeSuccess": "Выполнение задачи Xcode завершено без ошибок.", + "loc.messages.TempKeychainDeleteFailed": "Не удалось удалить временную цепочку ключей, созданную во время сборки: \"%s\"", + "loc.messages.ProvProfileDeleteFailed": "Не удалось удалить профиль подготовки \"%s\".", + "loc.messages.ExportMethodNotIdentified": "Не удалось автоматически определить метод экспорта по файлу архива. Это может привести к ошибкам во время сборки или формированию некорректного пакета. Если экспорт завершается сбоем, включите подписывание (установите \"Стиль подписывания\" равным \"По умолчанию для проекта\") или настройте экспорт вручную (установите \"Параметры экспорта\" как \"Plist\" или \"Указать\").", + "loc.messages.ExportOptionsPlistInvalidFilePath": "PLIST-файл \"Параметры экспорта\" не существует по указанному пути \"%s\". Укажите допустимый путь к PLIST-файлу.", + "loc.messages.SchemeRequiredForArchive": "Для создания пакета с архивом xcodebuild и экспортом необходимо указать схему.", + "loc.messages.WorkspaceOrProjectRequiredForArchive": "Для создания пакета с архивом xcodebuild и экспортом укажите путь к рабочей области или проекту.", + "loc.messages.FailedToGenerateExportOptionsPlist": "Не удалось автоматически создать PLIST-файл \"Параметры экспорта\" для экспорта IPA. Укажите PLIST-файл \"Параметры экспорта\" в разделе \"Параметры пакета\".", + "loc.messages.LocateXcodeBasedOnVersion": "Поиск пути разработчика для Xcode \"%s\"", + "loc.messages.FailedToLocateSpecifiedXcode": "Не удалось разрешить путь разработчика для Xcode \"%s\". Установите переменную среды \"%s\" на компьютере агента или установите \"Версию Xcode\" как \"По умолчанию\" или \"Указать путь\".", + "loc.messages.CantDetermineProvisioningStyle": "Стиль подготовки не найден в файле pbxProject. Будет использовано автоматическое подписывание. Если в проекте используется ручное подписывание, автоматический экспорт может завершиться неудачно. В качестве обходного варианта можно установить \"Параметры экспорта\" как \"Plist\" или \"Указанные\".", + "loc.messages.MultipleSchemesFound": "Рабочая область содержит несколько схем. Схема не выбрана. Используйте параметр \"Scheme\", чтобы указать целевую схему.", + "loc.messages.NoSchemeFound": "Общая схема в рабочей области не найдена. Чтобы сделать схему общей, выберите Manage Schemes (Управление схемами) в Xcode.", + "loc.messages.SchemeSelected": "Рабочая область содержит одну общую схему. Будет использоваться \"%s\".", + "loc.messages.FailedToFindScheme": "Не удалось найти схему в рабочей области. Используйте \"Scheme\", чтобы указать целевую схему.", + "loc.messages.OutputDirectoryIgnored": "Выходной каталог для выходных данных сборки (двоичных файлов) игнорируется. Выходной каталог не может быть указан для действия \"%s\".", + "loc.messages.NoDestinationPlatformWarning": "Тесты пользовательского интерфейса должны запускаться в симуляторе или на подключенном устройстве. В задаче Xcode присвойте параметру \"Платформа назначения\" значение, отличное от \"По умолчанию\".", + "loc.messages.XcprettyNotInstalled": "Средство xcpretty не установлено на сервере сборки. Будут выведены необработанные выходные данные xcodebuild. Если средство xcpretty не установлено, опубликовать результаты тестов не удастся.", + "loc.messages.XcodeRequiresMac": "Для использования Xcode требуется агент macOS. Сборка с Xcode в Linux или Windows не поддерживается Apple.", + "loc.messages.UsingDefaultSimulator": "Используется симулятор по умолчанию: %s." +} \ No newline at end of file diff --git a/_generated/XcodeV5/Strings/resources.resjson/zh-CN/resources.resjson b/_generated/XcodeV5/Strings/resources.resjson/zh-CN/resources.resjson new file mode 100644 index 000000000000..ad003cc9974d --- /dev/null +++ b/_generated/XcodeV5/Strings/resources.resjson/zh-CN/resources.resjson @@ -0,0 +1,101 @@ +{ + "loc.friendlyName": "XCode", + "loc.helpMarkDown": "[详细了解此任务](https://go.microsoft.com/fwlink/?LinkID=613730)或[参阅 Xcode 文档](https://developer.apple.com/xcode/)", + "loc.description": "在 macOS 上生成、测试或存档 Xcode 工作区。可选择性地打包应用。", + "loc.instanceNameFormat": "Xcode $(actions)", + "loc.releaseNotes": "此任务版本与 Xcode 8 - 13 兼容。已删除仅与 Xcode 7 保持兼容的功能。此任务可通过更好的选项来使用 Microsoft 托管的 macOS 代理。", + "loc.group.displayName.sign": "签名和预配", + "loc.group.displayName.package": "包选项", + "loc.group.displayName.devices": "设备和模拟器", + "loc.group.displayName.advanced": "高级", + "loc.input.label.actions": "操作", + "loc.input.help.actions": "输入以空格分隔的操作列表。一些有效选项包括 `build`、`clean`、`test`、`analyze` 和 `archive`。例如,`clean build` 将运行清理生成。", + "loc.input.label.configuration": "配置", + "loc.input.help.configuration": "输入要生成的 Xcode 项目或工作区配置。此字段的默认值为变量 \"$(Configuration)\"。在使用变量时,请确保在“变量”选项卡指定一个值(例如“发布”)。", + "loc.input.label.sdk": "SDK", + "loc.input.help.sdk": "指定在生成 Xcode 项目或工作区时使用的 SDK。从 macOS 终端应用程序运行 \"xcodebuild showsdks\" 可显示 SDK 的有效列表。此字段的默认值是变量 \"$(SDK)\"。使用变量时,请确保在“变量”选项卡中指定一个值(例如 \"iphonesimulator\")。", + "loc.input.label.xcWorkspacePath": "工作区或项目的路径", + "loc.input.help.xcWorkspacePath": "(可选)输入从存储库的根路径到 Xcode 工作区或项目的相对路径。例如,\"MyApp/MyApp.xcworkspace\" 或 \"MyApp/MyApp.xcodeproj\"。可以使用通配符([详细信息](https://go.microsoft.com/fwlink/?linkid=856077))。", + "loc.input.label.scheme": "方案", + "loc.input.help.scheme": "(可选)输入 Xcode 中定义的方案名称。它必须是共享方案,其“共享”复选框已在 Xcode 中的“托管方案”下启用。如果在上面指定“工作区或项目路径”但未指定方案,并且工作区具有一个共享方案,则它将自动使用。", + "loc.input.label.xcodeVersion": "Xcode 版本", + "loc.input.help.xcodeVersion": "指定 Xcode 的目标版本。选择“默认”以在代理计算机上使用默认版本的 Xcode。选择版本号(如 “Xcode 9”)依赖于在代理计算机上为版本位置(e.g. `XCODE_9_DEVELOPER_DIR=/Applications/Xcode_9.0.0.app/Contents/Developer`)设置的环境变量。选择 `Specify path`,以提供 Xcode 开发人员目录的特定路径。
注意: XCode 12 安装在 macOS-10.15(或更高版本)上", + "loc.input.label.xcodeDeveloperDir": "Xcode 开发人员路径", + "loc.input.help.xcodeDeveloperDir": "(可选)输入到特定 Xcode 开发人员目录的路径(例如 \"/Applications/Xcode_9.0.0.app/Contents/Developer\")。在代理计算机上安装多个版本的 Xcode 时,这非常有用。", + "loc.input.label.packageApp": "创建应用包", + "loc.input.help.packageApp": "指示是否应作为生成的一部分生成 IPA 应用包文件。", + "loc.input.label.archivePath": "存档路径", + "loc.input.help.archivePath": "(可选)指定应放置已创建存档的目录。", + "loc.input.label.exportPath": "导出路径", + "loc.input.help.exportPath": "(可选)指定从存档中导出的产品的目标。", + "loc.input.label.exportOptions": "导出选项", + "loc.input.help.exportOptions": "选择一种为导出存档提供选项的方法。选择默认值“自动”时,将自动从存档中检测导出方法。选择 \"Plist\" 可指定包含导出选项的 plist 文件。选择“指定”可提供特定的“导出方法”和“团队 ID”。", + "loc.input.label.exportMethod": "导出方法", + "loc.input.help.exportMethod": "输入 Xcode 用于导出存档的方法。例如: \"app-store\"、\"package\"、\"ad-hoc\"、\"enterprise\" 或 \"development\"。", + "loc.input.label.exportTeamId": "团队 ID", + "loc.input.help.exportTeamId": "(可选)在 Apple 开发人员门户中输入 10 个字符的团队 ID,供导出过程使用。", + "loc.input.label.exportOptionsPlist": "导出选项 plist", + "loc.input.help.exportOptionsPlist": "输入包含要在导出期间使用的选项的 Plist 文件的路径。", + "loc.input.label.exportArgs": "导出参数", + "loc.input.help.exportArgs": "(可选)输入要在导出过程中使用的其他命令行参数。", + "loc.input.label.signingOption": "签名样式", + "loc.input.help.signingOption": "选择对生成签名的方法。选择“请勿对签名编码”可禁用签名。选择“项目默认值”可仅使用项目的签名配置。选择“手动签名”可强制进行手动签名并选择性地指定签名标识和预配配置文件。选择“自动签名”可强制进行自动签名并选择性地指定开发团队 ID。如果项目需要签名,请在 Xcode 生成前使用“安装 Apple...”任务来安装证书和预配配置文件。", + "loc.input.label.signingIdentity": "签名标识", + "loc.input.help.signingIdentity": "(可选)输入用于对生成签名的签名标识替代。这可能需要解锁代理计算机上的默认密钥链。如果未输入任何值,将使用 Xcode 项目的设置。", + "loc.input.label.provisioningProfileUuid": "预配配置文件 UUID", + "loc.input.help.provisioningProfileUuid": "(可选)输入用于此生成的已安装预配配置文件的 UUID。使用具有不同方案或目标的单独生成任务来按一个工作区中的目标(iOS、tvOS、watchOS)指定单独的预配配置文件。", + "loc.input.label.provisioningProfileName": "预配配置文件名称", + "loc.input.help.provisioningProfileName": "(可选)输入要用于此生成的已安装预配配置文件的名称。如果已指定,这将优先于预配配置文件 UUID。使用具有不同方案或目标的单独生成任务,可按一个工作区中的目标(iOS、tvOS、watchOS)指定单独的预配配置文件。", + "loc.input.label.teamId": "团队 ID", + "loc.input.help.teamId": "(可选,除非你是多个开发团队的成员。)指定 10 个字符的开发团队 ID。", + "loc.input.label.destinationPlatformOption": "目标平台", + "loc.input.help.destinationPlatformOption": "选择要在常规生成设备无效时用于 UI 测试的目标设备平台。选择“自定义”可指定未包括在此列表中的平台。选择“默认”时,不会以任何模拟器和设备为目标。", + "loc.input.label.destinationPlatform": "自定义目标平台", + "loc.input.help.destinationPlatform": "输入要在常规生成设备无效时用于 UI 测试的目标设备平台。", + "loc.input.label.destinationTypeOption": "目标类型", + "loc.input.help.destinationTypeOption": "选择要用于 UI 测试的目标类型。设备必须通过电缆或网络连接连接到执行生成的 Mac。请参阅 Xcode 中的设备和模拟器。", + "loc.input.label.destinationSimulators": "模拟器", + "loc.input.help.destinationSimulators": "输入要用于 UI 测试的 Xcode 模拟器名称。例如,输入 \"iPhone X\" (iOS 和 watchOS)或 \"Apple TV 4K\" (tvOS)。目标 OS 版本为可选项,可按格式 \"OS=versionNumber\" 指定,例如 \"iPhone X,OS=11.1\"。可在 [此处](https://go.microsoft.com/fwlink/?linkid=875290)查看托管 macOS 代理上的已安装模拟器列表。", + "loc.input.label.destinationDevices": "设备", + "loc.input.help.destinationDevices": "输入要用于 UI 测试的设备名称,例如 \"Raisa's iPad\"。", + "loc.input.label.args": "参数", + "loc.input.help.args": "(可选)输入要通过其进行生成的其他命令行参数。这对于指定 \"-target\" 或 \"-project\" 参数(而不是指定工作区/项目和方案)来说非常有用。", + "loc.input.label.cwd": "工作目录", + "loc.input.help.cwd": "(可选)输入要在其中运行生成的工作目录。如果未输入任何值,将使用存储库的根。", + "loc.input.label.useXcpretty": "使用 xcpretty", + "loc.input.help.useXcpretty": "指定是否使用 xcpretty 来设置 xcodebuild 输出的格式。启用此选项需要在代理计算机上安装 xcpretty。如果未安装 xcpretty,将显示原始 xcodebuild 输出。xcpretty 预安装在 Azure Pipelines 托管的生成代理上。请参阅 GitHub 上的 [xcpretty](https://github.com/supermarin/xcpretty)。", + "loc.input.label.xcprettyArgs": "Xcpretty 参数", + "loc.input.help.xcprettyArgs": "要传递给 xcpretty 的其他参数。", + "loc.input.label.publishJUnitResults": "将测试结果发布到 Azure Pipelines", + "loc.input.help.publishJUnitResults": "指定是否将 JUnit 测试结果发布到 Azure Pipelines。这要求启用 xcpretty 以生成 JUnit 测试结果。", + "loc.input.label.testRunTitle": "测试运行标题", + "loc.input.help.testRunTitle": "将 JUnit 测试结果发布到 Azure 管道时测试运行的标题。", + "loc.messages.SignIdNotFound": "未能找到 iOS 签名标识。请确认已提供了签名和预配信息。", + "loc.messages.TempKeychainSetupFailed": "未能将临时密钥链添加到密钥链搜索路径。", + "loc.messages.ProvProfileDetailsNotFound": "未能找到预配配置文件 %s 的详细信息", + "loc.messages.ProvProfileUUIDNotFound": "未能找到预配配置文件 %s 的 UUID", + "loc.messages.MultipleWorkspacesFound": "已找到多个 Xcode 工作区匹配项。将使用第一个匹配项: %s", + "loc.messages.WorkspaceDoesNotExist": "虽然指定了 Xcode 工作区,但它不存在或不是目录: %s", + "loc.messages.UseXcprettyForTestPublishing": "启用“使用 xcpretty”以发布测试结果。对于此生成,将不发布任何测试结果。", + "loc.messages.NoTestResultsFound": "找不到与“%s”匹配的测试结果文件。将跳过发布 JUnit 测试结果。", + "loc.messages.XcodeSuccess": "Xcode 任务执行完成,没有错误。", + "loc.messages.TempKeychainDeleteFailed": "未能删除生成过程中创建的临时密钥链:“%s”", + "loc.messages.ProvProfileDeleteFailed": "未能删除预配配置文件“%s”。", + "loc.messages.ExportMethodNotIdentified": "未能自动识别要从存档文件中使用的导出方法。这可能会导致生成过程中出错或生成无效的包。如果导出失败,请启用签名(将“签名样式”设置为“项目默认值”),或手动配置导出(将“导出选项”设置为 \"Plist\" 或“指定”)。", + "loc.messages.ExportOptionsPlistInvalidFilePath": "“%s”处不存在“导出选项”plist 文件。请提供有效 plist 文件的路径。", + "loc.messages.SchemeRequiredForArchive": "必须指定方案,以使用 xcodebuild 存档和导出生成包。", + "loc.messages.WorkspaceOrProjectRequiredForArchive": "必须指定工作区或项目路径才可使用 xcodebuild 存档和导出生成包。", + "loc.messages.FailedToGenerateExportOptionsPlist": "未能自动生成“导出选项”plist 文件以导出 IPA。请在“包选项”中指定一个“导出选项”plist 文件。", + "loc.messages.LocateXcodeBasedOnVersion": "正在定位 Xcode“%s”的开发人员路径", + "loc.messages.FailedToLocateSpecifiedXcode": "无法解析 Xcode“%s”的开发人员路径。请在代理计算机上设置“%s”环境变量,或将“Xcode 版本”设置为“默认”或“指定路径”。", + "loc.messages.CantDetermineProvisioningStyle": "pbxProject 文件中找不到预配样式。将使用自动签名。如果项目使用手动签名,自动导出可能会失败。一种变通方法是将 `Export options` 设置为 `Plist` 或 `Specify`。", + "loc.messages.MultipleSchemesFound": "工作区包含多个方案。未选定方案。使用 `Scheme` 指定一个目标方案。", + "loc.messages.NoSchemeFound": "工作区中找不到任何共享方案。在 Xcode 中使用“管理 Schemes”来共享方案。", + "loc.messages.SchemeSelected": "工作区包含一个共享方案。将使用“%s”。", + "loc.messages.FailedToFindScheme": "未能在工作区中找到方案。请使用“方案”指定一个目标方案。", + "loc.messages.OutputDirectoryIgnored": "已忽略生成输出(二进制文件)的输出目录。指定输出目录与“%s”操作不兼容。", + "loc.messages.NoDestinationPlatformWarning": "必须对模拟器或连接的设备运行 UI 测试。在 Xcode 任务中。将“目标平台”设置为不同于“默认值”的值。", + "loc.messages.XcprettyNotInstalled": "生成服务器上未安装 xcpretty。将显示 xcodebuild 原始输出。如果未安装 xcpretty,发布测试结果将失败。", + "loc.messages.XcodeRequiresMac": "使用 Xcode 需要 macOS 代理。Apple 不支持在 Linux 或 Windows 上通过 Xcode 进行生成。", + "loc.messages.UsingDefaultSimulator": "使用默认模拟器: %s。" +} \ No newline at end of file diff --git a/_generated/XcodeV5/Strings/resources.resjson/zh-TW/resources.resjson b/_generated/XcodeV5/Strings/resources.resjson/zh-TW/resources.resjson new file mode 100644 index 000000000000..e9ad479a3c5e --- /dev/null +++ b/_generated/XcodeV5/Strings/resources.resjson/zh-TW/resources.resjson @@ -0,0 +1,101 @@ +{ + "loc.friendlyName": "XCode", + "loc.helpMarkDown": "[深入了解此工作](https://go.microsoft.com/fwlink/?LinkID=613730)或[參閱 Xcode 文件](https://developer.apple.com/xcode/)", + "loc.description": "在 macOS 上建置、測試或封存 Xcode 工作區。選擇性地封裝應用程式。", + "loc.instanceNameFormat": "Xcode $(actions)", + "loc.releaseNotes": "此版本的工作與 Xcode 8 - 13 相容。已移除僅為維持與 Xcode 7 相容的功能。此工作在與使用 Microsoft 託管的 macOS 代理程式搭配方面具有較佳的選項。", + "loc.group.displayName.sign": "簽署與佈建", + "loc.group.displayName.package": "套件選項", + "loc.group.displayName.devices": "裝置和模擬器", + "loc.group.displayName.advanced": "進階", + "loc.input.label.actions": "動作", + "loc.input.help.actions": "請輸入以空格分隔的動作清單。部分有效選項包含: `build`、`clean`、`test`、`analyze` 和 `archive`。舉例來說,`clean build` 會執行清除組建。", + "loc.input.label.configuration": "組態", + "loc.input.help.configuration": "輸入要建置的 Xcode 專案或工作區組態。此欄位的預設值是變數 `$(Configuration)`。當您使用變數時,請確定在 **變數** 索引標籤上指定值 (例如 `Release`)。", + "loc.input.label.sdk": "SDK", + "loc.input.help.sdk": "指定建置 Xcode 專案或工作區時要使用的 SDK。從 macOS 終端機應用程式執行 `xcodebuild -showsdks` 即可顯示有效 SDK 的清單。此欄位的預設值為變數 `$(SDK)`。當使用變數時,請務必在 [Variables]**** 索引標籤指定值 (例如 `iphonesimulator`)。", + "loc.input.label.xcWorkspacePath": "工作區或專案路徑", + "loc.input.help.xcWorkspacePath": "(選擇性) 輸入 Xcode 工作區或專案相對於存放庫根目錄的路徑。例如 'MyApp/MyApp.xcworkspace' 或 'MyApp/MyApp.xcodeproj'。您可使用萬用字元 ([詳細資訊](https://go.microsoft.com/fwlink/?linkid=856077))。", + "loc.input.label.scheme": "配置", + "loc.input.help.scheme": "(選擇性) 輸入 Xcode 中定義的配置名稱。其必須是共用的配置 (必須啟用 Xcode 中,[受控配置] 下的 [共用] 核取方塊)。若您只在上列位置指定工作區或專案的路徑而未指定配置,且工作區只有一個共用配置,將會自動使用該配置。", + "loc.input.label.xcodeVersion": "Xcode 版本", + "loc.input.help.xcodeVersion": "指定 Xcode 的目標版本。選取 [預設] 可在代理程式機器上使用預設版本的 Xcode。選取版本號碼 (例如 'Xcode 9') 依賴在代理程式機器上為該版本位置 (例如 ' XCODE_9_DEVELOPER_DIR=/Applications/Xcode_9.0.0.app/Contents/Developer') 設定的環境變數。選取 [指定路徑] 可提供 Xcode 開發人員目錄的特定路徑。
注意: XCode 12 已安裝於 macOS-10.15 (或更高版本)", + "loc.input.label.xcodeDeveloperDir": "Xcode 開發人員路徑", + "loc.input.help.xcodeDeveloperDir": "(選擇性) 輸入特定 Xcode 開發人員目錄的路徑 (例如 '/ Applications/Xcode_9.0.0.app/Contents/Developer')。當代理程式電腦上安裝有多個版本的 Xcode 時,此路徑十分有用。", + "loc.input.label.packageApp": "建立應用程式套件", + "loc.input.help.packageApp": "表示是否要產生 IPA 應用程式套件檔案作為組建的一部份。", + "loc.input.label.archivePath": "封存路徑", + "loc.input.help.archivePath": "(選擇性) 指定應放置建立之封存的所在目錄。", + "loc.input.label.exportPath": "匯出路徑", + "loc.input.help.exportPath": "(選擇性) 為從封存匯出的產品指定目的地。", + "loc.input.label.exportOptions": "匯出選項", + "loc.input.help.exportOptions": "選取為匯出封存提供選項的方法。當選取預設值 `Automatic` 時,會自動從封存偵測匯出方法。選取 `Plist` 可指定包含匯出選項的 plist 檔案。選取 `Specify` 可提供特定的 **匯出方法** 與 **小組識別碼**。", + "loc.input.label.exportMethod": "匯出方法", + "loc.input.help.exportMethod": "輸入 Xcode 應該用於匯出封存的方法。例如: `app-store`、`package`、`ad-hoc`、`enterprise` 或 `development`。", + "loc.input.label.exportTeamId": "小組識別碼", + "loc.input.help.exportTeamId": "(選擇性) 輸入匯出期間要使用之 Apple Developer Portal 的 10 個字元小組識別碼。", + "loc.input.label.exportOptionsPlist": "匯出選項 plist", + "loc.input.help.exportOptionsPlist": "輸入匯出期間要使用之包含選項的 plist 檔案路徑。", + "loc.input.label.exportArgs": "匯出引數", + "loc.input.help.exportArgs": "(選擇性) 輸入匯出期間要使用的其他命令列引數。", + "loc.input.label.signingOption": "簽署樣式", + "loc.input.help.signingOption": "選擇簽署組建的方法。選取 [不執行程式碼簽署] 可停用簽署。選取 [專案預設] 可只使用專案的簽署組態。選取 [手動簽署] 可強制手動簽署,並選擇性地指定簽署身分識別和佈建設定檔。選取 [自動簽署] 可強制自動簽署,並選擇性地指定開發小組識別碼。如果您的專案需要簽署,請使用「安裝 Apple...」工作來安裝 Xcode 組建之前的憑證和佈建設定檔。", + "loc.input.label.signingIdentity": "簽署身分識別", + "loc.input.help.signingIdentity": "(選擇性) 輸入用來簽署組建的簽署識別覆寫。這可能需要將代理程式機器上的預設 keychain 解除鎖定。如果未輸入值,將會使用 Xcode 專案的設定。", + "loc.input.label.provisioningProfileUuid": "佈建設定檔 UUID", + "loc.input.help.provisioningProfileUuid": "(選擇性) 輸入要用於此組建之已安裝佈建設定檔的 UUID。請使用具有不同配置或目標的個別建置工作,以在單一工作區 (iOS、tvOS、watchOS) 中依照目標來指定個別佈建設定檔。", + "loc.input.label.provisioningProfileName": "正在佈建設定檔名稱", + "loc.input.help.provisioningProfileName": "(選擇性) 輸入要用於此組建的已安裝佈建設定檔名稱。若指定名稱,則優先使用此工作,而非佈建設定檔 UUID。使用配置或目標不同的獨立建置工作可以單一工作區 (iOS、tvOS、watchOS) 為目標,來指定獨立佈建設定檔。", + "loc.input.label.teamId": "小組識別碼", + "loc.input.help.teamId": "(選擇性,除非您是多個開發小組的成員。) 指定 10 個字元的開發小組識別碼。", + "loc.input.label.destinationPlatformOption": "目的地平台", + "loc.input.help.destinationPlatformOption": "選取當一般組建裝置無效時所要用於進行 UI 測試的目的地裝置平台。選擇 `Custom` 可指定此清單未包含的平台。當選取 `Default` 時,不會將任何模擬器或裝置作為目標。", + "loc.input.label.destinationPlatform": "自訂目的地平台", + "loc.input.help.destinationPlatform": "輸入要在一般建置裝置無效時用於測試 UI 的目的地裝置平台。", + "loc.input.label.destinationTypeOption": "目的地類型", + "loc.input.help.destinationTypeOption": "選擇要用於測試 UI 的目的地類型。裝置必須連線到透過纜線或網路連線執行組建的 Mac。請參閱 Xcode 中的裝置和模擬器。", + "loc.input.label.destinationSimulators": "模擬器", + "loc.input.help.destinationSimulators": "請輸入要用於 UI 測試的 Xcode 模擬器名稱。例如,請輸入 'iPhone X' (iOS 和 watchOS) 或 'Apple TV 4K' (tvOS)。您可選擇使用以下格式指定目標作業系統版本: 'OS =versionNumber',例如 'iPhone X,OS=11.1'。[前往此處](https://go.microsoft.com/fwlink/?linkid=875290)可取得裝載的 macOS 代理程式上安裝的模擬的清單。", + "loc.input.label.destinationDevices": "裝置", + "loc.input.help.destinationDevices": "輸入要用於測試 UI 的裝置名稱,例如 `Raisa's iPad`。", + "loc.input.label.args": "引數", + "loc.input.help.args": "(選擇性) 輸入其他命令列引數與要建置的項目。相對於指定工作區/專案及配置,這對於指定 `-target` 或 `-project` 引數較為實用。", + "loc.input.label.cwd": "工作目錄", + "loc.input.help.cwd": "(選擇性) 輸入要在其中執行組建的工作目錄。如果未輸入值,將會使用存放庫的根路徑。", + "loc.input.label.useXcpretty": "使用 xcpretty", + "loc.input.help.useXcpretty": "指定是否要使用 xcpretty 將 xcodebuild 輸出格式化。代理程式電腦上需要安裝 xcpretty 才能啟用此選項。若未安裝 xcpretty,則會顯示未經處理的 xcodebuild 輸出。xcpretty 會預先安裝在 Azure Pipelines 裝載的組建代理程式上。請參閱 GitHub 上的 [xcpretty](https://github.com/supermarin/xcpretty)。", + "loc.input.label.xcprettyArgs": "Xcpretty 引數", + "loc.input.help.xcprettyArgs": "要傳遞給 xcpretty 的其他引數。", + "loc.input.label.publishJUnitResults": "將測試結果發佈至 Azure Pipelines", + "loc.input.help.publishJUnitResults": "請指定是否要將 JUnit 測試結果發佈至 Azure Pipelines。需要啟用 xcpretty 才能產生 JUnit 測試結果。", + "loc.input.label.testRunTitle": "測試回合標題", + "loc.input.help.testRunTitle": "將 JUnit 測試結果發佈至 Azure Pipelines 時,測試回合的標題。", + "loc.messages.SignIdNotFound": "找不到 iOS 簽署身分識別。請驗證已提供簽署與佈建資訊。", + "loc.messages.TempKeychainSetupFailed": "無法將暫存的 Keychain 新增至 Keychain 搜尋路徑。", + "loc.messages.ProvProfileDetailsNotFound": "找不到發佈設定檔的詳細資料: %s", + "loc.messages.ProvProfileUUIDNotFound": "找不到佈建設定檔的 UUID: %s", + "loc.messages.MultipleWorkspacesFound": "已找到多個 Xcode 工作區相符。將使用最初相符: %s", + "loc.messages.WorkspaceDoesNotExist": "指定的 Xcode 工作區不存在或並非目錄: %s", + "loc.messages.UseXcprettyForTestPublishing": "啟用 [使用 xcpretty] 以發佈測試結果。對於這個組建,不會發佈任何測試結果。", + "loc.messages.NoTestResultsFound": "找不到任何與 `%s` 相符的測試結果。將跳過 JUnit 測試結果的發行。", + "loc.messages.XcodeSuccess": "Xcode 工作執行完成,未發生錯誤。", + "loc.messages.TempKeychainDeleteFailed": "無法刪除在組建 `%s` 期間建立的暫存 keychain", + "loc.messages.ProvProfileDeleteFailed": "無法刪除佈建設定檔 `%s`。", + "loc.messages.ExportMethodNotIdentified": "無法從封存檔案自動識別要使用的匯出方法。這可能造成建置期間發生錯誤,或產生無效的套件。如果匯出失敗,請啟用簽署 (將 `Signing Style` 設為 `Project Defaults`),或手動設定匯出 (將 `Export options` 設為 `Plist` 或 `Specify`)。", + "loc.messages.ExportOptionsPlistInvalidFilePath": "`%s` 沒有 `Export options` plist 檔案。請提供有效 plist 檔案的路徑。", + "loc.messages.SchemeRequiredForArchive": "必須指定配置,才能產生包含 xcodebuild 封存與匯出的套件。", + "loc.messages.WorkspaceOrProjectRequiredForArchive": "必須指定工作區或專案路徑,才能產生具備 xcodebuild 封存與匯出的套件。", + "loc.messages.FailedToGenerateExportOptionsPlist": "無法自動產生要匯出 IPA 的 `Export options` plist 檔案。請在 `Package options` 中指定 `Export options` plist 檔案。", + "loc.messages.LocateXcodeBasedOnVersion": "正在尋找 Xcode 開發人員路徑 `%s`", + "loc.messages.FailedToLocateSpecifiedXcode": "無法解析 Xcode `%s` 的開發人員路徑。請在代理程式機器上設定 `%s` 環境變數,或將 `Xcode version` 設定為 `Default` 或 `Specify path`。", + "loc.messages.CantDetermineProvisioningStyle": "無法在 pbxProject 檔案中找到佈建樣式。將會使用自動簽署。若專案使用手動簽署,則自動匯出可能會失敗。您可以將 [匯出選項] 設為 `Plist` 或 `Specify` 作為因應措施。", + "loc.messages.MultipleSchemesFound": "工作區包含多個配置。未選取任何配置。請使用 `Scheme` 來指定目標配置。", + "loc.messages.NoSchemeFound": "在工作區中找不到任何共用的配置。請在 Xcode 中使用 [受控 Schemes] 來共用配置。", + "loc.messages.SchemeSelected": "工作區包含單一共用配置。將會使用 '%s'。", + "loc.messages.FailedToFindScheme": "在工作區中找不到配置。請使用 `Scheme` 來指定目標配置。", + "loc.messages.OutputDirectoryIgnored": "已忽略建置輸出 (二進位檔案) 的輸出目錄。指定的輸出目錄與 '%s' 動作不相容。", + "loc.messages.NoDestinationPlatformWarning": "UI 測試的執行對象必須為模擬器或已連線的裝置。在 Xcode 工作中,請將 `Destination platform` 設為 `Default` 以外的值。", + "loc.messages.XcprettyNotInstalled": "組建伺服器上未安裝 xcpretty。會顯示 xcodebuild 未經處理的輸出。若未安裝 xcpretty,就無法發佈測試結果。", + "loc.messages.XcodeRequiresMac": "需要 macOS 代理程式才能使用 Xcode。Apple 不支援以 Xcode 在 Linux 或 Windows 上建置。", + "loc.messages.UsingDefaultSimulator": "使用預設模擬器: %s。" +} \ No newline at end of file diff --git a/_generated/XcodeV5/Tests/L0.ts b/_generated/XcodeV5/Tests/L0.ts new file mode 100644 index 000000000000..ca0ec9d1ca8b --- /dev/null +++ b/_generated/XcodeV5/Tests/L0.ts @@ -0,0 +1,760 @@ +// npm install mocha --save-dev +// typings install dt~mocha --save --global + +import * as path from 'path'; +import * as assert from 'assert'; +import * as ttm from 'azure-pipelines-task-lib/mock-test'; + +describe('Xcode L0 Suite', function () { + this.timeout(parseInt(process.env.TASK_TEST_TIMEOUT) || 20000); + + before(() => { + + }); + + after(() => { + + }); + + it('run Xcode with all default inputs', function (done: MochaDone) { + let tp = path.join(__dirname, 'L0XcodeDefaults.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + assert(tr.ran('/home/bin/xcodebuild -version'), 'xcodebuild for version should have been run.'); + assert(tr.ran('/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) ' + + '-workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme myscheme build'), + 'xcodebuild for building the ios project/workspace should have been run.'); + assert(tr.invokedToolCount == 2, 'should have run xcodebuild version, and xcodebuild build'); + assert(tr.stderr.length == 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + done(); + }); + + it('run Xcode with project and no workspace', function (done: MochaDone) { + let tp = path.join(__dirname, 'L0XcodeNoWorkspace.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + assert(tr.ran('/home/bin/xcodebuild -version'), 'xcodebuild for version should have been run.'); + assert(tr.ran('/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) ' + + 'build -project test.xcodeproj'), + 'xcodebuild for building the ios project should have been run.'); + assert(tr.invokedToolCount == 2, 'should have run xcodebuild version, and xcodebuild build.'); + assert(tr.stderr.length == 0, 'should not have written to stderr std=' + tr.stdout + ' err=' + tr.stderr); + assert(tr.succeeded, 'task should have succeeded'); + done(); + }); + + it('run Xcode build with test action, with xcpretty', function (done: MochaDone) { + let tp = path.join(__dirname, 'L0Xcpretty.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + assert(tr.ran('/home/bin/xcodebuild -version'), 'xcodebuild for version should have been run.'); + + assert(tr.ran('/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) ' + + '-workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme myscheme test ' + + '| /home/bin/xcpretty -r junit --no-color'), + 'xcodebuild for running tests in the ios project/workspace should have been run with xcpretty formatting.'); + + assert(tr.invokedToolCount == 2, 'should have xcodebuild for version, xcodebuild for test with xcpretty'); + assert(tr.stderr.length == 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + done(); + }); + + it('run Xcode build with test action, without choosing xcpretty', function (done: MochaDone) { + let tp = path.join(__dirname, 'L0NoXcpretty.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + assert(tr.ran('/home/bin/xcodebuild -version'), 'xcodebuild for version should have been run.'); + + assert(tr.ran('/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) ' + + '-workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme myscheme test'), + 'xcodebuild for running tests in the ios project/workspace should have been run without xcpretty formatting.'); + + assert(tr.stdout.search(/##vso\[results.publish type=JUnit;publishRunAttachments=true;resultFiles=\/user\/build\/build\/reports\/junit.xml;\]/) < 0, + 'publish test results should not have been called'); + + assert(tr.stdout.search(/[When using xcodebuild, check 'Use xcpretty' to publish test results. No results will be published.]/) >=0, + 'warning should have been provided that test results cannot be published with xcodebuild if xcpretty is not used.'); + + assert(tr.invokedToolCount == 2, 'should have xcodebuild for version, xcodebuild for test with xcpretty'); + assert(tr.stderr.length == 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + done(); + }); + + it('run Xcode build, signing with P12 and provisioning profile', function (done: MochaDone) { + let tp = path.join(__dirname, 'L0Signing.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + assert(tr.ran('/home/bin/xcodebuild -version'), 'xcodebuild for version should have been run.'); + assert(tr.ran('/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme fun build CODE_SIGN_STYLE=Manual CODE_SIGN_IDENTITY=iPhone Developer: XcodeTask Tester (HE432Y3E2Q) PROVISIONING_PROFILE=testuuid PROVISIONING_PROFILE_SPECIFIER='), + 'xcodebuild for building the ios project/workspace should have been run with signing options.'); + assert(tr.stderr.length == 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + done(); + }); + + it('run Xcode build, signing with P12 only, no provisioning profile', function (done: MochaDone) { + let tp = path.join(__dirname, 'L0SigningWithP12.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + assert(tr.ran('/home/bin/xcodebuild -version'), 'xcodebuild for version should have been run.'); + assert(tr.ran('/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme fun build CODE_SIGN_STYLE=Manual CODE_SIGN_IDENTITY=iPhone Developer: XcodeTask Tester (HE432Y3E2Q) PROVISIONING_PROFILE= PROVISIONING_PROFILE_SPECIFIER='), + 'xcodebuild for building the ios project/workspace should have been run with signing options with P12 signing identity, and empty provisioning profile/specifier values that override any values in the pbxproj file.'); + assert(tr.stderr.length == 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + done(); + }); + + it('run Xcode build, signing with provisioning profile only, no P12', function (done: MochaDone) { + let tp = path.join(__dirname, 'L0SigningWithProfile.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + assert(tr.ran('/home/bin/xcodebuild -version'), 'xcodebuild for version should have been run.'); + assert(tr.ran('/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme fun build CODE_SIGN_STYLE=Manual PROVISIONING_PROFILE=testuuid PROVISIONING_PROFILE_SPECIFIER='), + 'xcodebuild for building the ios project/workspace should have been run with signing options with provisioning profile only.'); + assert(tr.stderr.length == 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + done(); + }); + + it('run Xcode with required arg is not specified', function (done: MochaDone) { + let tp = path.join(__dirname, 'L0ErrorArgs.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + assert(tr.stdout.search(/Input required: actions/) > 0, 'Error should be shown if actions are not specified.'); + assert(tr.failed, 'task should have failed'); + done(); + }); + + it('run Xcode with optional args specified', function (done: MochaDone) { + let tp = path.join(__dirname, 'L0OptionalArgs.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + assert(tr.ran('/home/bin/xcodebuild -version'), 'xcodebuild for version should have been run.'); + assert(tr.ran('/home/bin/xcodebuild -sdk iphone -configuration Release -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme fun clean build -exportArchive -exportPath /user/build/output/iphone/release'), + 'xcodebuild for building the ios project/workspace should have been run with all optional args.'); + assert(tr.stderr.length == 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + done(); + }); + + + it('Xcode 7 create IPA with archive and auto export', function (done: MochaDone) { + let tp = path.join(__dirname, 'L0ExportArchiveWithAuto.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + //version + assert(tr.ran('/home/bin/xcodebuild -version'), 'xcodebuild for version should have been run.'); + //build + assert(tr.ran('/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) ' + + '-workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme build'), + 'xcodebuild for building the ios project/workspace should have been run.'); + //archive + assert(tr.ran('/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme ' + + 'archive -sdk $(SDK) -configuration $(Configuration) -archivePath /user/build/testScheme'), + 'xcodebuild archive should have been run to create the .xcarchive.'); + //export + assert(tr.ran('/home/bin/xcodebuild -exportArchive ' + + '-archivePath /user/build/testScheme.xcarchive ' + + '-exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist'), + 'xcodebuild exportArchive should have been run to export the IPA from the .xcarchive'); + + assert(tr.invokedToolCount === 11, 'should have run xcodebuild for version, build, archive and export and PlistBuddy to init and add export method.'); + assert(tr.stderr.length === 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + + done(); + }); + + it('Xcode 7 create IPA with archive and export with specified method', function (done: MochaDone) { + let tp = path.join(__dirname, 'L0ExportArchiveSpecify.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + //version + assert(tr.ran('/home/bin/xcodebuild -version'), 'xcodebuild for version should have been run.'); + //build + assert(tr.ran('/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) ' + + '-workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme build'), + 'xcodebuild for building the ios project/workspace should have been run.'); + //archive + assert(tr.ran('/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme ' + + 'archive -sdk $(SDK) -configuration $(Configuration) -archivePath /user/build/testScheme'), + 'xcodebuild archive should have been run to create the .xcarchive.'); + //export + assert(tr.ran('/home/bin/xcodebuild -exportArchive ' + + '-archivePath /user/build/testScheme.xcarchive ' + + '-exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist'), + 'xcodebuild exportArchive should have been run to export the IPA from the .xcarchive'); + + assert(tr.invokedToolCount === 6, 'should have run xcodebuild for version, build, archive and export and PlistBuddy to init and add export method.'); + assert(tr.stderr.length === 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + + done(); + }); + + it('Xcode 8 create IPA with export options plist', function (done: MochaDone) { + let tp = path.join(__dirname, 'L0ExportArchiveWithPlist.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + //version + assert(tr.ran('/home/bin/xcodebuild -version'), 'xcodebuild for version should have been run.'); + //build + assert(tr.ran('/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) ' + + '-workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme build'), + 'xcodebuild for building the ios project/workspace should have been run.'); + //archive + assert(tr.ran('/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme ' + + 'archive -sdk $(SDK) -configuration $(Configuration) -archivePath /user/build/testScheme'), + 'xcodebuild archive should have been run to create the .xcarchive.'); + //export + assert(tr.ran('/home/bin/xcodebuild -exportArchive ' + + '-archivePath /user/build/testScheme.xcarchive ' + + '-exportPath /user/build -exportOptionsPlist /user/build/exportOptions.plist'), + 'xcodebuild exportArchive should have been run to export the IPA from the .xcarchive'); + + assert(tr.invokedToolCount === 4, 'should have run xcodebuild for version, build, archive and export.'); + assert(tr.stderr.length === 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + + done(); + }); + + it('Xcode 8 create IPA with bad exportOptionsPlist path', function (done: MochaDone) { + let tp = path.join(__dirname, 'L0ExportOptionsPlistBadPath.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + //version + assert(tr.ran('/home/bin/xcodebuild -version'), 'xcodebuild for version should have been run.'); + //build + assert(tr.ran('/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) ' + + '-workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme build'), + 'xcodebuild for building the ios project/workspace should have been run.'); + //archive + assert(tr.ran('/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme ' + + 'archive -sdk $(SDK) -configuration $(Configuration) -archivePath /user/build/testScheme'), + 'xcodebuild archive should have been run to create the .xcarchive.'); + + assert(tr.invokedToolCount === 3, 'should have run xcodebuild for version, build, and archive.'); + assert(tr.failed, 'task should have failed'); + assert(tr.stdout.indexOf('##vso[task.issue type=error;]Error: loc_mock_ExportOptionsPlistInvalidFilePath') >= 0, + 'Build should show error indicating invalid Plist file path.'); + + done(); + }); + + it('Xcode create IPA with file paths for archive path and export path', function (done: MochaDone) { + let tp = path.join(__dirname, 'L0FilePathForArchiveAndExportPath.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + //version + assert(tr.ran('/home/bin/xcodebuild -version'), 'xcodebuild for version should have been run.'); + //build + assert(tr.ran('/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) ' + + '-workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme build'), + 'xcodebuild for building the ios project/workspace should have been run.'); + //archive + assert(tr.ran('/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme ' + + 'archive -sdk $(SDK) -configuration $(Configuration) -archivePath /user/build/testScheme.xcarchive'), + 'xcodebuild archive should have been run to create the .xcarchive.'); + //export + assert(tr.ran('/home/bin/xcodebuild -exportArchive ' + + '-archivePath /user/build/testScheme.xcarchive ' + + '-exportPath /user/build/testipa.ipa -exportOptionsPlist _XcodeTaskExportOptions.plist'), + 'xcodebuild exportArchive should have been run to export the IPA from the .xcarchive'); + + assert(tr.invokedToolCount === 6, 'should have run xcodebuild for version, build, archive and export and PlistBuddy to init and add export method.'); + assert(tr.stderr.length === 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + + done(); + }); + + it('Xcode 7 create IPA with code signing identifiers', function (done: MochaDone) { + let tp = path.join(__dirname, 'L0CreateIpaWithCodeSigningIdentifiers.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + //version + assert(tr.ran('/home/bin/xcodebuild -version'), 'xcodebuild for version should have been run.'); + //build + assert(tr.ran('/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) ' + + '-workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme build ' + + 'CODE_SIGN_STYLE=Manual CODE_SIGN_IDENTITY=iPhone Developer: XcodeTask Tester (HE432Y3E2Q) PROVISIONING_PROFILE=testuuid PROVISIONING_PROFILE_SPECIFIER='), + 'xcodebuild for building the ios project/workspace should have been run.'); + //archive + assert(tr.ran('/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme ' + + 'archive -sdk $(SDK) -configuration $(Configuration) -archivePath /user/build/testScheme ' + + 'CODE_SIGN_STYLE=Manual CODE_SIGN_IDENTITY=iPhone Developer: XcodeTask Tester (HE432Y3E2Q) PROVISIONING_PROFILE=testuuid PROVISIONING_PROFILE_SPECIFIER='), + 'xcodebuild archive should have been run to create the .xcarchive.'); + //export + assert(tr.ran('/home/bin/xcodebuild -exportArchive ' + + '-archivePath /user/build/testScheme.xcarchive ' + + '-exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist'), + 'xcodebuild exportArchive should have been run to export the IPA from the .xcarchive'); + + assert(tr.stderr.length === 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + + done(); + }); + + it('Xcode 8 automatic code signing with identifiers', function (done: MochaDone) { + let tp = path.join(__dirname, 'L0Xcode8AutomaticSignWithIdentifiers.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + //version + assert(tr.ran('/home/bin/xcodebuild -version'), 'xcodebuild for version should have been run.'); + //build + assert(tr.ran('/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) ' + + '-workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme build ' + + 'CODE_SIGN_STYLE=Automatic'), + 'xcodebuild for building the ios project/workspace should have been run.'); + //archive + assert(tr.ran('/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme ' + + 'archive -sdk $(SDK) -configuration $(Configuration) -archivePath /user/build/testScheme CODE_SIGN_STYLE=Automatic'), + 'xcodebuild archive should have been run to create the .xcarchive.'); + //export + assert(tr.ran('/home/bin/xcodebuild -exportArchive ' + + '-archivePath /user/build/testScheme.xcarchive ' + + '-exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist'), + 'xcodebuild exportArchive should have been run to export the IPA from the .xcarchive'); + + assert(tr.stderr.length === 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + + done(); + }); + + it('Xcode 8 automatic signing with development team', function (done: MochaDone) { + let tp = path.join(__dirname, 'L0Xcode8AutomaticSignWithDevTeam.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + //version + assert(tr.ran('/home/bin/xcodebuild -version'), 'xcodebuild for version should have been run.'); + //build + assert(tr.ran('/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) ' + + '-workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme build ' + + 'CODE_SIGN_STYLE=Automatic DEVELOPMENT_TEAM=testDevTeamId'), + 'xcodebuild for building the ios project/workspace should have been run.'); + + //archive + assert(tr.ran('/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme ' + + 'archive -sdk $(SDK) -configuration $(Configuration) ' + + '-archivePath /user/build/testScheme ' + + 'CODE_SIGN_STYLE=Automatic DEVELOPMENT_TEAM=testDevTeamId'), + 'xcodebuild archive should have been run to create the .xcarchive.'); + //export + assert(tr.ran('/home/bin/xcodebuild -exportArchive ' + + '-archivePath /user/build/testScheme.xcarchive ' + + '-exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist'), + 'xcodebuild exportArchive should have been run to export the IPA from the .xcarchive'); + + assert(tr.stderr.length === 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + + done(); + }); + + it('Xcode archive and export with project path', function (done: MochaDone) { + let tp = path.join(__dirname, 'L0XcodeArchiveExportProject.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + //version + assert(tr.ran('/home/bin/xcodebuild -version'), 'xcodebuild for version should have been run.'); + //build + assert(tr.ran('/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) ' + + '-project /user/build/fun.xcodeproj -scheme testScheme build ' + + 'CODE_SIGN_STYLE=Automatic DEVELOPMENT_TEAM=testDevTeamId'), + 'xcodebuild for building the ios project/workspace should have been run.'); + + //archive + assert(tr.ran('/home/bin/xcodebuild -project /user/build/fun.xcodeproj -scheme testScheme ' + + 'archive -sdk $(SDK) -configuration $(Configuration) ' + + '-archivePath /user/build/testScheme ' + + 'CODE_SIGN_STYLE=Automatic DEVELOPMENT_TEAM=testDevTeamId'), + 'xcodebuild archive should have been run to create the .xcarchive.'); + + //export + assert(tr.ran('/home/bin/xcodebuild -exportArchive ' + + '-archivePath /user/build/testScheme.xcarchive ' + + '-exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist'), + 'xcodebuild exportArchive should have been run to export the IPA from the .xcarchive'); + + assert(tr.stderr.length === 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + + done(); + }); + + it('Xcode 9 automatic signing with files', function (done: MochaDone) { + let tp = path.join(__dirname, 'L0Xcode9AutomaticSignWithFiles.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + //version + assert(tr.ran('/home/bin/xcodebuild -version'), 'xcodebuild for version should have been run.'); + //build + assert(tr.ran('/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) ' + + '-workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme build ' + + 'CODE_SIGN_STYLE=Automatic'), + 'xcodebuild for building the ios project/workspace should have been run.'); + + //archive + assert(tr.ran('/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme ' + + 'archive -sdk $(SDK) -configuration $(Configuration) ' + + '-archivePath /user/build/testScheme ' + + 'CODE_SIGN_STYLE=Automatic'), + 'xcodebuild archive should have been run to create the .xcarchive.'); + //export + assert(tr.ran('/home/bin/xcodebuild -exportArchive ' + + '-archivePath /user/build/testScheme.xcarchive ' + + '-exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist'), + 'xcodebuild exportArchive should have been run to export the IPA from the .xcarchive'); + + assert(tr.stderr.length === 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + + done(); + }); + + it('Xcode 9 automatic signing with allowProvisioningUpdates', function (done: MochaDone) { + let tp = path.join(__dirname, 'L0Xcode9AutomaticSignWithAllowProvisioningUpdates.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + //version + assert(tr.ran('/home/bin/xcodebuild -version'), 'xcodebuild for version should have been run.'); + //build + assert(tr.ran('/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) ' + + '-workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme build ' + + '-allowProvisioningUpdates CODE_SIGN_STYLE=Automatic'), + 'xcodebuild for building the ios project/workspace should have been run with -allowProvisioningUpdates.'); + + //archive + assert(tr.ran('/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme ' + + 'archive -sdk $(SDK) -configuration $(Configuration) ' + + '-archivePath /user/build/testScheme ' + + 'CODE_SIGN_STYLE=Automatic -allowProvisioningUpdates'), + 'xcodebuild archive should have been run to create the .xcarchive.'); + //export + assert(tr.ran('/home/bin/xcodebuild -exportArchive ' + + '-archivePath /user/build/testScheme.xcarchive ' + + '-exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist ' + + '-allowProvisioningUpdates'), + 'xcodebuild exportArchive should have been run with -allowProvisioningUpdates to export the IPA from the .xcarchive'); + + assert(tr.stderr.length === 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + + done(); + }); + + it('Xcode 9 signing defaults to automatic, with auto export', function (done: MochaDone) { + let tp = path.join(__dirname, 'L0XCode9SigningDefaultsToAutoWithAutoExport.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + //version + assert(tr.ran('/home/bin/xcodebuild -version'), 'xcodebuild for version should have been run.'); + + //export prep + assert(tr.ran("/usr/libexec/PlistBuddy -c Clear _XcodeTaskExportOptions.plist"), + 'PlistBuddy Clear should have run.'); + + assert(tr.ran("/usr/libexec/PlistBuddy -c Add method string app-store _XcodeTaskExportOptions.plist"), + 'PlistBuddy add method should have run.'); + + //export + assert(tr.ran('/home/bin/xcodebuild -exportArchive -archivePath /user/build/testScheme.xcarchive ' + + '-exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist'), + 'xcodebuild exportArchive should have been run to export the IPA from the .xcarchive'); + + assert(tr.stderr.length === 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.invokedToolCount === 14, 'Should have run \"PlistBuddy -c Add...\" once, and 13 other command lines.'); + + done(); + }); + + it('Xcode 9 signing defaults to manual, with auto export', function (done: MochaDone) { + let tp = path.join(__dirname, 'L0XCode9SigningDefaultsToManualWithAutoExport.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + //version + assert(tr.ran('/home/bin/xcodebuild -version'), 'xcodebuild for version should have been run.'); + + //export prep + assert(tr.ran("/usr/libexec/PlistBuddy -c Clear _XcodeTaskExportOptions.plist"), + 'PlistBuddy Clear should have run.'); + + assert(tr.ran("/usr/libexec/PlistBuddy -c Add method string app-store _XcodeTaskExportOptions.plist"), + 'PlistBuddy add method should have run.'); + + assert(tr.ran("/usr/libexec/PlistBuddy -c Add signingStyle string manual _XcodeTaskExportOptions.plist"), + 'PlistBuddy add signingStyle should have run.'); + + assert(tr.ran("/usr/libexec/PlistBuddy -c Add provisioningProfiles dict _XcodeTaskExportOptions.plist"), + 'PlistBuddy add provisioningProfiles should have run.'); + + assert(tr.ran("/usr/libexec/PlistBuddy -c Add provisioningProfiles:com.vsts.test.myApp string Bob _XcodeTaskExportOptions.plist"), + 'PlistBuddy add provisioningProfiles:com.vsts.test.myApp should have run.'); + + //export + assert(tr.ran('/home/bin/xcodebuild -exportArchive -archivePath /user/build/testScheme.xcarchive ' + + '-exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist'), + 'xcodebuild exportArchive should have been run to export the IPA from the .xcarchive'); + + assert(tr.stderr.length === 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.invokedToolCount === 21, 'Should have run \"PlistBuddy -c Add...\" four times, and 17 other command lines.'); + + done(); + }); + + it('Xcode 9 signing with auto export and cloud entitlement for production', function (done: MochaDone) { + const tp = path.join(__dirname, 'L0Xcode9ExportArchiveWithAutoAndCloudEntitlementForProduction.js'); + const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + //version + assert(tr.ran('/home/bin/xcodebuild -version'), 'xcodebuild for version should have been run.'); + + //export prep + assert(tr.ran("/usr/libexec/PlistBuddy -c Clear _XcodeTaskExportOptions.plist"), + 'PlistBuddy Clear should have run.'); + + assert(tr.ran("/usr/libexec/PlistBuddy -c Add method string app-store _XcodeTaskExportOptions.plist"), + 'PlistBuddy add method should have run.'); + + assert(tr.ran("/usr/libexec/PlistBuddy -c Add iCloudContainerEnvironment string Production _XcodeTaskExportOptions.plist"), + 'PlistBuddy add cloud entitlement list should have run.'); + + assert(tr.ran("/usr/libexec/PlistBuddy -c Add signingStyle string manual _XcodeTaskExportOptions.plist"), + 'PlistBuddy add signingStyle should have run.'); + + assert(tr.ran("/usr/libexec/PlistBuddy -c Add provisioningProfiles dict _XcodeTaskExportOptions.plist"), + 'PlistBuddy add provisioningProfiles should have run.'); + + assert(tr.ran("/usr/libexec/PlistBuddy -c Add provisioningProfiles:com.vsts.test.myApp string Bob _XcodeTaskExportOptions.plist"), + 'PlistBuddy add provisioningProfiles:com.vsts.test.myApp should have run.'); + + //export + assert(tr.ran('/home/bin/xcodebuild -exportArchive -archivePath /user/build/testScheme.xcarchive ' + + '-exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist'), + 'xcodebuild exportArchive should have been run to export the IPA from the .xcarchive'); + + assert(tr.stderr.length === 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.invokedToolCount === 22, 'Should have run \"PlistBuddy -c Add...\" four times, and 18 other command lines.'); + + done(); + }); + + it('Xcode 9 signing with auto export and cloud entitlement for development', function (done: MochaDone) { + const tp = path.join(__dirname, 'L0Xcode9ExportArchiveWithAutoAndCloudEntitlementForDevelopment.js'); + const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + //version + assert(tr.ran('/home/bin/xcodebuild -version'), 'xcodebuild for version should have been run.'); + + //export prep + assert(tr.ran("/usr/libexec/PlistBuddy -c Clear _XcodeTaskExportOptions.plist"), + 'PlistBuddy Clear should have run.'); + + assert(tr.ran("/usr/libexec/PlistBuddy -c Add method string development _XcodeTaskExportOptions.plist"), + 'PlistBuddy add method should have run.'); + + assert(tr.ran("/usr/libexec/PlistBuddy -c Add iCloudContainerEnvironment string Development _XcodeTaskExportOptions.plist"), + 'PlistBuddy add cloud entitlement for Development should have run.'); + + assert(tr.ran("/usr/libexec/PlistBuddy -c Add signingStyle string manual _XcodeTaskExportOptions.plist"), + 'PlistBuddy add signingStyle should have run.'); + + assert(tr.ran("/usr/libexec/PlistBuddy -c Add provisioningProfiles dict _XcodeTaskExportOptions.plist"), + 'PlistBuddy add provisioningProfiles should have run.'); + + assert(tr.ran("/usr/libexec/PlistBuddy -c Add provisioningProfiles:com.vsts.test.myApp string Bob _XcodeTaskExportOptions.plist"), + 'PlistBuddy add provisioningProfiles:com.vsts.test.myApp should have run.'); + + //export + assert(tr.ran('/home/bin/xcodebuild -exportArchive -archivePath /user/build/testScheme.xcarchive ' + + '-exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist'), + 'xcodebuild exportArchive should have been run to export the IPA from the .xcarchive'); + + assert(tr.stderr.length === 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.invokedToolCount === 21, 'Should have run \"PlistBuddy -c Add...\" four times, and 17 other command lines.'); + + done(); + }); + + it('Task defaults - v4.127.0', function (done: MochaDone) { + let tp = path.join(__dirname, 'L0TaskDefaults_4.127.0.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + //scheme + assert(tr.ran('/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -list'), + 'xcodebuild for listing schemes should have been run.'); + + //version + assert(tr.ran('/home/bin/xcodebuild -version'), + 'xcodebuild for version should have been run.'); + + //build + assert(tr.ran('/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) ' + + '-workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme funScheme build ' + + 'CODE_SIGNING_ALLOWED=NO'), + 'xcodebuild for building the ios project/workspace should have been run.'); + + assert(tr.invokedToolCount == 3, 'should have run xcodebuild for scheme list, version and build.'); + assert(tr.stderr.length === 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + + done(); + }); + + it('Test results should be published in postexecution to work even when Xcode test has failures', function (done: MochaDone) { + let tp = path.join(__dirname, 'L0TestResultsPublishedInPostExecutionJob.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + assert(tr.succeeded, 'post xcode task should have succeeded'); + assert(tr.stdout.indexOf('##vso[results.publish type=JUnit;mergeResults=false;publishRunAttachments=true;resultFiles=/home/build/testbuild1/build/reports/junit.xml;]') > 0, + 'test result should have been published even when there are test errors'); + done(); + }); + + it('Empty test results should not be published in postexecution', function (done: MochaDone) { + let tp = path.join(__dirname, 'L0EmptyTestResultsNotPublishedInPostExecutionJob.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + assert(tr.succeeded, 'post xcode task should have succeeded'); + assert(tr.stdout.indexOf('##vso[task.issue type=warning;]loc_mock_NoTestResultsFound /home/build/**/build/reports/junit.xml') > 0, + 'test result should not have been published when they are empty'); + done(); + }); + + it('Test results publishing should fail if xcpretty is not installed', function (done: MochaDone) { + let tp = path.join(__dirname, 'L0TestResultsPublishFailsIfXcprettyNotInstalled.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + assert(tr.stdout.indexOf('##vso[task.issue type=warning;]loc_mock_XcprettyNotInstalled') > 0, 'warning message should indicate that xcpretty has to be installed.') + assert(tr.succeeded, 'post xcode task should have succeeded with warnings'); + done(); + }); + + it('postexecution should not fail for errors', function (done: MochaDone) { + let tp = path.join(__dirname, 'L0ErrorsInPostExecutionJob.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + assert(tr.succeeded, 'post xcode task should have succeeded with warnings even when there are errors.'); + assert(tr.stdout.indexOf('XcodeRequiresMac'), 'warning for macos requirement should be shown.'); + done(); + }); + + it('macOS auto export', function (done: MochaDone) { + const tp = path.join(__dirname, 'L0macOSAutoExport.js'); + const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + //version + assert(tr.ran('/home/bin/xcodebuild -version'), 'xcodebuild for version should have been run.'); + + //export prep + assert(tr.ran("/usr/libexec/PlistBuddy -c Clear _XcodeTaskExportOptions.plist"), + 'PlistBuddy Clear should have run.'); + + // macOS Developer ID provisioning profile from the developer portal. + assert(tr.ran("/usr/libexec/PlistBuddy -c Add method string developer-id _XcodeTaskExportOptions.plist"), + 'PlistBuddy add method should have run.'); + + // provisioning profile includes iCloudContainerEnvironment. + assert(tr.ran("/usr/libexec/PlistBuddy -c Add iCloudContainerEnvironment string Production _XcodeTaskExportOptions.plist"), + 'PlistBuddy add cloud entitlement list should have run.'); + + assert(tr.ran("/usr/libexec/PlistBuddy -c Add signingStyle string manual _XcodeTaskExportOptions.plist"), + 'PlistBuddy add signingStyle should have run.'); + + assert(tr.ran("/usr/libexec/PlistBuddy -c Add provisioningProfiles dict _XcodeTaskExportOptions.plist"), + 'PlistBuddy add provisioningProfiles should have run.'); + + assert(tr.ran("/usr/libexec/PlistBuddy -c Add provisioningProfiles:com.vsts.test.myApp string Bob _XcodeTaskExportOptions.plist"), + 'PlistBuddy add provisioningProfiles:com.vsts.test.myApp should have run.'); + + //export + assert(tr.ran('/home/bin/xcodebuild -exportArchive -archivePath /user/build/testScheme.xcarchive' + +' -exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist'), + 'xcodebuild exportArchive should have been run to export the IPA from the .xcarchive'); + + assert(tr.stderr.length === 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + + assert(tr.invokedToolCount === 21, 'Should have run \"PlistBuddy -c Add...\" five times, and 16 other command lines.'); + + done(); + }); + + it('macOS provisionless auto export', function (done: MochaDone) { + const tp = path.join(__dirname, 'L0macOSProvisionlessAutoExport.js'); + const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + //version + assert(tr.ran('/home/bin/xcodebuild -version'), 'xcodebuild for version should have been run.'); + + //export prep + assert(tr.ran("/usr/libexec/PlistBuddy -c Clear _XcodeTaskExportOptions.plist"), + 'PlistBuddy Clear should have run. An empty exportOptions plist should be used when there\'s not an embedded provisioning profile.'); + + //export + assert(tr.ran('/home/bin/xcodebuild -exportArchive -archivePath /user/build/testScheme.xcarchive' + +' -exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist'), + 'xcodebuild exportArchive should have been run to export the IPA from the .xcarchive'); + + assert(tr.stderr.length === 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.invokedToolCount === 6, 'Should have ran 6 command lines.'); + + done(); + }); +}); \ No newline at end of file diff --git a/_generated/XcodeV5/Tests/L0CreateIpaWithCodeSigningIdentifiers.ts b/_generated/XcodeV5/Tests/L0CreateIpaWithCodeSigningIdentifiers.ts new file mode 100644 index 000000000000..222a9f53b987 --- /dev/null +++ b/_generated/XcodeV5/Tests/L0CreateIpaWithCodeSigningIdentifiers.ts @@ -0,0 +1,102 @@ + +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, '..', 'xcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +tr.setInput('actions', 'build'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('sdk', '$(SDK)'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/*.xcworkspace'); +tr.setInput('scheme', 'testScheme'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('packageApp', 'true'); +tr.setInput('signingOption', 'manual'); +tr.setInput('signingIdentity', 'iPhone Developer: XcodeTask Tester (HE432Y3E2Q)'); +tr.setInput('provisioningProfileUuid', 'testuuid'); +tr.setInput('args', ''); +tr.setInput('cwd', '/user/build'); +tr.setInput('outputPattern', 'output/$(SDK)/$(Configuration)'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('useXctool', 'false'); +tr.setInput('packageTool', 'xcodebuild'); +tr.setInput('xctoolReporter', ''); +tr.setInput('publishJUnitResults', 'false'); +tr.setInput('archivePath', '/user/build'); +tr.setInput('exportPath', '/user/build'); +tr.setInput('exportOptions', 'specify'); +tr.setInput('exportMethod', 'development'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild", + "security": "/usr/bin/security", + "/usr/libexec/PlistBuddy": "/usr/libexec/PlistBuddy", + "rm": "/bin/rm", + "cp": "/bin/cp" + }, + "checkPath": { + "/home/bin/xcodebuild": true, + "/usr/bin/security": true, + "/usr/libexec/PlistBuddy": true, + "/bin/rm": true, + "/bin/cp": true + }, + "filePathSupplied": { + "archivePath": false + }, + "getVariable": { + "HOME": "/users/test" + }, + "stats": { + "/user/build": { + "isFile": false + } + }, + "findMatch": { + "**/*.xcodeproj/*.xcworkspace": [ + "/user/build/fun.xcodeproj/project.xcworkspace" + ], + "**/*.app": [ + "/user/build/output/$(SDK)/$(Configuration)/build.sym/Release.iphoneos/fun.app" + ], + "**/*.xcarchive": [ + "/user/build/testScheme.xcarchive" + ] + }, + "exec": { + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 7.3.1" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme build CODE_SIGN_STYLE=Manual CODE_SIGN_IDENTITY=iPhone Developer: XcodeTask Tester (HE432Y3E2Q) PROVISIONING_PROFILE=testuuid PROVISIONING_PROFILE_SPECIFIER=": { + "code": 0, + "stdout": "xcodebuild output here" + }, + "/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme archive -sdk $(SDK) -configuration $(Configuration) -archivePath /user/build/testScheme CODE_SIGN_STYLE=Manual CODE_SIGN_IDENTITY=iPhone Developer: XcodeTask Tester (HE432Y3E2Q) PROVISIONING_PROFILE=testuuid PROVISIONING_PROFILE_SPECIFIER=": { + "code": 0, + "stdout": "xcodebuild archive output here" + }, + "/home/bin/xcodebuild -exportArchive -archivePath /user/build/testScheme.xcarchive -exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "xcodebuild export output here" + }, + "/usr/libexec/PlistBuddy -c Clear _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist initialized output here" + }, + "/usr/libexec/PlistBuddy -c Add method string development _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/XcodeV5/Tests/L0EmptyTestResultsNotPublishedInPostExecutionJob.ts b/_generated/XcodeV5/Tests/L0EmptyTestResultsNotPublishedInPostExecutionJob.ts new file mode 100644 index 000000000000..b6bd2c84b200 --- /dev/null +++ b/_generated/XcodeV5/Tests/L0EmptyTestResultsNotPublishedInPostExecutionJob.ts @@ -0,0 +1,49 @@ + +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, '..', 'postxcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +// Xcode task run tests +tr.setInput('actions', 'test'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/project.xcworkspace'); +tr.setInput('scheme', 'testScheme'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('packageApp', 'false'); +tr.setInput('signingOption', 'default'); +tr.setInput('destinationPlatformOption', 'default'); +tr.setInput('destinationPlatform', ''); +tr.setInput('destinationTypeOption', 'simulators'); +tr.setInput('destinationSimulators', 'iPhone 7'); +tr.setInput('destinationDevices', ''); +tr.setInput('useXcpretty', 'true'); +tr.setInput('publishJUnitResults', 'true'); +tr.setInput('cwd', '/home/build'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "getVariable": { + "HOME": "/users/test" + }, + "which": { + "xcpretty": "/users/xcpretty" + }, + "findMatch": { + "/home/build/**/build/reports/junit.xml": [] + } +}; +tr.setAnswers(a); + +os.platform = () => { + return 'darwin'; +} +tr.registerMock('os', os); + +tr.run(); + diff --git a/_generated/XcodeV5/Tests/L0ErrorArgs.ts b/_generated/XcodeV5/Tests/L0ErrorArgs.ts new file mode 100644 index 000000000000..8dafbd5f0b5f --- /dev/null +++ b/_generated/XcodeV5/Tests/L0ErrorArgs.ts @@ -0,0 +1,60 @@ + +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, '..', 'xcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tr.setInput('actions', ''); +tr.setInput('configuration', ''); +tr.setInput('sdk', ''); +tr.setInput('xcWorkspacePath', '/user/build'); +tr.setInput('scheme', ''); +tr.setInput('packageApp', 'false'); +tr.setInput('signingOption', 'default'); +tr.setInput('signingIdentity', ''); +tr.setInput('provisioningProfileUuid', ''); +tr.setInput('args', ''); +tr.setInput('cwd', '/user/build'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('publishJUnitResults', 'false'); + +process.env['AGENT_VERSION'] = '2.122.0'; +process.env['BUILD_SOURCESDIRECTORY'] = '/user/build'; +process.env['SYSTEM_DEFAULTWORKINGDIRECTORY'] = "/user/build"; +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild" + }, + "checkPath" : { + "/home/bin/xcodebuild": true + }, + "getVariable": { + "build.sourcesDirectory": "/user/build", + "HOME": "/users/test" + }, + "findMatch": { + "**/*.xcodeproj/*.xcworkspace": [ + "/user/build/fun.xcodeproj/project.xcworkspace" + ] + }, + "exec": { + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 7.3.1" + }, + "/home/bin/xcodebuild build": { + "code": 0, + "stdout": "xcodebuild output here" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/XcodeV5/Tests/L0ErrorsInPostExecutionJob.ts b/_generated/XcodeV5/Tests/L0ErrorsInPostExecutionJob.ts new file mode 100644 index 000000000000..e952a5f734db --- /dev/null +++ b/_generated/XcodeV5/Tests/L0ErrorsInPostExecutionJob.ts @@ -0,0 +1,51 @@ + +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, '..', 'postxcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +// Xcode task run tests +tr.setInput('actions', 'test'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/project.xcworkspace'); +tr.setInput('scheme', 'testScheme'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('packageApp', 'false'); +tr.setInput('signingOption', 'default'); +tr.setInput('destinationPlatformOption', 'default'); +tr.setInput('destinationPlatform', ''); +tr.setInput('destinationTypeOption', 'simulators'); +tr.setInput('destinationSimulators', 'iPhone 7'); +tr.setInput('destinationDevices', ''); +tr.setInput('useXcpretty', 'true'); +tr.setInput('publishJUnitResults', 'true'); +tr.setInput('cwd', '/home/build'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "getVariable": { + "HOME": "/users/test" + }, + "which": { + "xcpretty": "/users/xcpretty" + }, + "findMatch": { + "/home/build/**/build/reports/junit.xml": [ + "/home/build/testbuild1/build/reports/junit.xml" + ] + } +}; +tr.setAnswers(a); + +os.platform = () => { + return 'darwin'; +} +tr.registerMock('os', os); + +tr.run(); + diff --git a/_generated/XcodeV5/Tests/L0ExportArchiveAtSpecificPath.ts b/_generated/XcodeV5/Tests/L0ExportArchiveAtSpecificPath.ts new file mode 100644 index 000000000000..c28b20997ed5 --- /dev/null +++ b/_generated/XcodeV5/Tests/L0ExportArchiveAtSpecificPath.ts @@ -0,0 +1,91 @@ + +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, '..', 'xcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tr.setInput('actions', 'build'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('sdk', '$(SDK)'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/*.xcworkspace'); +tr.setInput('scheme', 'testScheme'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('packageApp', 'true'); +tr.setInput('signingOption', 'default'); +tr.setInput('signingIdentity', ''); +tr.setInput('provisioningProfileUuid', ''); +tr.setInput('args', ''); +tr.setInput('cwd', '/user/build'); +tr.setInput('outputPattern', 'output/$(SDK)/$(Configuration)'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('useXctool', 'false'); +tr.setInput('xctoolReporter', ''); +tr.setInput('publishJUnitResults', 'false'); +tr.setInput('archivePath', '/user/output/myarchive.xcarchive'); +tr.setInput('exportPath', '/user/output/myipa.ipa'); +tr.setInput('exportOptions', 'specify'); +tr.setInput('exportMethod', 'development'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild", + "/usr/libexec/PlistBuddy": "/usr/libexec/PlistBuddy" + }, + "checkPath": { + "/home/bin/xcodebuild": true, + "/usr/libexec/PlistBuddy": true + }, + "filePathSupplied": { + "archivePath": false + }, + "getVariable": { + "build.sourcesDirectory": "/user/build", + "HOME": "/users/test" + }, + "stats": { + "/user/build": { + "isFile": false + } + }, + "findMatch": { + "**/*.xcodeproj/*.xcworkspace": [ + "/user/build/fun.xcodeproj/project.xcworkspace" + ], + "**/*.app": [ + "/user/build/output/$(SDK)/$(Configuration)/build.sym/Release.iphoneos/fun.app" + ] + }, + "exec": { + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 7.3.1" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme build": { + "code": 0, + "stdout": "xcodebuild output here" + }, + "/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme archive -sdk $(SDK) -configuration $(Configuration) -archivePath /user/output/myarchive.xcarchive": { + "code": 0, + "stdout": "xcodebuild archive output here" + }, + "/home/bin/xcodebuild -exportArchive -archivePath /user/build/testScheme.xcarchive -exportPath /user/output/myipa.ipa -exportOptionsPlist _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "xcodebuild export output here" + }, + "/usr/libexec/PlistBuddy -c Clear _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist initialized output here" + }, + "/usr/libexec/PlistBuddy -c Add method string development _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/XcodeV5/Tests/L0ExportArchiveSpecify.ts b/_generated/XcodeV5/Tests/L0ExportArchiveSpecify.ts new file mode 100644 index 000000000000..c58bc8c66dd1 --- /dev/null +++ b/_generated/XcodeV5/Tests/L0ExportArchiveSpecify.ts @@ -0,0 +1,97 @@ + +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, '..', 'xcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +tr.setInput('actions', 'build'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('sdk', '$(SDK)'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/*.xcworkspace'); +tr.setInput('scheme', 'testScheme'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('packageApp', 'true'); +tr.setInput('signingOption', 'default'); +tr.setInput('signingIdentity', ''); +tr.setInput('provisioningProfileUuid', ''); +tr.setInput('args', ''); +tr.setInput('cwd', '/user/build'); +tr.setInput('outputPattern', 'output/$(SDK)/$(Configuration)'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('useXctool', 'false'); +tr.setInput('packageTool', 'xcodebuild'); +tr.setInput('xctoolReporter', ''); +tr.setInput('publishJUnitResults', 'false'); +tr.setInput('archivePath', '/user/build'); +tr.setInput('exportPath', '/user/build'); +tr.setInput('exportOptions', 'specify'); +tr.setInput('exportMethod', 'development'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild", + "/usr/libexec/PlistBuddy": "/usr/libexec/PlistBuddy" + }, + "checkPath": { + "/home/bin/xcodebuild": true, + "/usr/libexec/PlistBuddy": true + }, + "filePathSupplied": { + "archivePath": false + }, + "getVariable": { + "build.sourcesDirectory": "/user/build", + "HOME": "/users/test" + }, + "stats": { + "/user/build": { + "isFile": false + } + }, + "findMatch": { + "**/*.xcodeproj/*.xcworkspace": [ + "/user/build/fun.xcodeproj/project.xcworkspace" + ], + "**/*.app": [ + "/user/build/output/$(SDK)/$(Configuration)/build.sym/Release.iphoneos/fun.app" + ], + "**/*.xcarchive": [ + "/user/build/testScheme.xcarchive" + ] + }, + "exec": { + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 7.3.1" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme build": { + "code": 0, + "stdout": "xcodebuild output here" + }, + "/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme archive -sdk $(SDK) -configuration $(Configuration) -archivePath /user/build/testScheme": { + "code": 0, + "stdout": "xcodebuild archive output here" + }, + "/home/bin/xcodebuild -exportArchive -archivePath /user/build/testScheme.xcarchive -exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "xcodebuild export output here" + }, + "/usr/libexec/PlistBuddy -c Clear _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist initialized output here" + }, + "/usr/libexec/PlistBuddy -c Add method string development _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/XcodeV5/Tests/L0ExportArchiveWithAuto.ts b/_generated/XcodeV5/Tests/L0ExportArchiveWithAuto.ts new file mode 100644 index 000000000000..aca5d80f5be3 --- /dev/null +++ b/_generated/XcodeV5/Tests/L0ExportArchiveWithAuto.ts @@ -0,0 +1,123 @@ + +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, '..', 'xcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +tr.setInput('actions', 'build'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('sdk', '$(SDK)'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/*.xcworkspace'); +tr.setInput('scheme', 'testScheme'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('packageApp', 'true'); +tr.setInput('signingOption', 'default'); +tr.setInput('signingIdentity', ''); +tr.setInput('provisioningProfileUuid', ''); +tr.setInput('args', ''); +tr.setInput('cwd', '/user/build'); +tr.setInput('outputPattern', 'output/$(SDK)/$(Configuration)'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('useXctool', 'false'); +tr.setInput('packageTool', 'xcodebuild'); +tr.setInput('xctoolReporter', ''); +tr.setInput('publishJUnitResults', 'false'); +tr.setInput('archivePath', '/user/build'); +tr.setInput('exportPath', '/user/build'); +tr.setInput('exportOptions', 'auto'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild", + "security": "/usr/bin/security", + "/usr/libexec/PlistBuddy": "/usr/libexec/PlistBuddy", + "rm": "/bin/rm" + }, + "checkPath": { + "/home/bin/xcodebuild": true, + "/usr/bin/security": true, + "/usr/libexec/PlistBuddy": true, + "/bin/rm": true, + }, + "filePathSupplied": { + "archivePath": false + }, + "getVariable": { + "build.sourcesDirectory": "/user/build", + "HOME": "/users/test" + }, + "stats": { + "/user/build": { + "isFile": false + } + }, + "findMatch": { + "**/*.xcodeproj/*.xcworkspace": [ + "/user/build/fun.xcodeproj/project.xcworkspace" + ], + "**/*.app": [ + "/user/build/output/$(SDK)/$(Configuration)/build.sym/Release.iphoneos/fun.app" + ], + "**/*.xcarchive": [ + "/user/build/testScheme.xcarchive" + ], + "**/embedded.mobileprovision": [ + "/user/build/testScheme.xcarchive/Products/testScheme.app/embedded.mobileprovision" + ] + }, + "exec": { + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 7.3.1" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme build": { + "code": 0, + "stdout": "xcodebuild output here" + }, + "/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme archive -sdk $(SDK) -configuration $(Configuration) -archivePath /user/build/testScheme": { + "code": 0, + "stdout": "xcodebuild archive output here" + }, + "/home/bin/xcodebuild -exportArchive -archivePath /user/build/testScheme.xcarchive -exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "xcodebuild export output here" + }, + "/usr/libexec/PlistBuddy -c Clear _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist initialized output here" + }, + "/usr/libexec/PlistBuddy -c Add method string app-store _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + }, + "/usr/bin/security cms -D -i /user/build/testScheme.xcarchive/Products/testScheme.app/embedded.mobileprovision": { + "code": 0, + "stdout": "prov profile details here" + }, + "/usr/libexec/PlistBuddy -c Print ProvisionsAllDevices _xcodetasktmp.plist": { + "code": 1, + "stdout": "ProvisionsAllDevices not found" + }, + "/usr/libexec/PlistBuddy -c Print Entitlements:get-task-allow _xcodetasktmp.plist": { + "code": 0, + "stdout": "false" + }, + "/usr/libexec/PlistBuddy -c Print ProvisionedDevices _xcodetasktmp.plist": { + "code": 1, + "stdout": "ProvisionedDevices not found" + }, + "/bin/rm -f _xcodetasktmp.plist": { + "code": 0, + "stdout": "delete output here" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/XcodeV5/Tests/L0ExportArchiveWithPlist.ts b/_generated/XcodeV5/Tests/L0ExportArchiveWithPlist.ts new file mode 100644 index 000000000000..383722cfd567 --- /dev/null +++ b/_generated/XcodeV5/Tests/L0ExportArchiveWithPlist.ts @@ -0,0 +1,93 @@ + +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, '..', 'xcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support +process.env['USEXCRUN'] = 'false'; + +tr.setInput('actions', 'build'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('sdk', '$(SDK)'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/*.xcworkspace'); +tr.setInput('scheme', 'testScheme'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('packageApp', 'true'); +tr.setInput('signingOption', 'default'); +tr.setInput('signingIdentity', ''); +tr.setInput('provisioningProfileUuid', ''); +tr.setInput('args', ''); +tr.setInput('cwd', '/user/build'); +tr.setInput('outputPattern', 'output/$(SDK)/$(Configuration)'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('useXctool', 'false'); +tr.setInput('xctoolReporter', ''); +tr.setInput('publishJUnitResults', 'false'); +tr.setInput('archivePath', '/user/build'); +tr.setInput('exportPath', '/user/build'); +tr.setInput('exportOptions', 'plist'); +tr.setInput('exportOptionsPlist', '/user/build/exportOptions.plist'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild", + "/usr/libexec/PlistBuddy": "/usr/libexec/PlistBuddy" + }, + "checkPath": { + "/home/bin/xcodebuild": true, + "/usr/libexec/PlistBuddy": true + }, + "filePathSupplied": { + "archivePath": false, + "exportOptionsPlist": false + }, + "getVariable": { + "build.sourcesDirectory": "/user/build", + "HOME": "/users/test" + }, + "stats": { + "/user/build": { + "isFile": false + }, + "/user/build/exportOptions.plist": { + "isFile": true + } + }, + "findMatch": { + "**/*.xcodeproj/*.xcworkspace": [ + "/user/build/fun.xcodeproj/project.xcworkspace" + ], + "**/*.app": [ + "/user/build/output/$(SDK)/$(Configuration)/build.sym/Release.iphoneos/fun.app" + ], + "**/*.xcarchive": [ + "/user/build/testScheme.xcarchive" + ] + }, + "exec": { + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 8.0" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme build": { + "code": 0, + "stdout": "xcodebuild output here" + }, + "/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme archive -sdk $(SDK) -configuration $(Configuration) -archivePath /user/build/testScheme": { + "code": 0, + "stdout": "xcodebuild archive output here" + }, + "/home/bin/xcodebuild -exportArchive -archivePath /user/build/testScheme.xcarchive -exportPath /user/build -exportOptionsPlist /user/build/exportOptions.plist": { + "code": 0, + "stdout": "xcodebuild export output here" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/XcodeV5/Tests/L0ExportOptionsPlistBadPath.ts b/_generated/XcodeV5/Tests/L0ExportOptionsPlistBadPath.ts new file mode 100644 index 000000000000..5adb88777522 --- /dev/null +++ b/_generated/XcodeV5/Tests/L0ExportOptionsPlistBadPath.ts @@ -0,0 +1,89 @@ + +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, '..', 'xcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +tr.setInput('actions', 'build'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('sdk', '$(SDK)'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/*.xcworkspace'); +tr.setInput('scheme', 'testScheme'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('packageApp', 'true'); +tr.setInput('signingOption', 'default'); +tr.setInput('signingIdentity', ''); +tr.setInput('provisioningProfileUuid', ''); +tr.setInput('args', ''); +tr.setInput('cwd', '/user/build'); +tr.setInput('outputPattern', 'output/$(SDK)/$(Configuration)'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('useXctool', 'false'); +tr.setInput('packageTool', 'xcodebuild'); +tr.setInput('xctoolReporter', ''); +tr.setInput('publishJUnitResults', 'false'); +tr.setInput('archivePath', '/user/build'); +tr.setInput('exportPath', '/user/build'); +tr.setInput('exportOptions', 'plist'); +tr.setInput('exportOptionsPlist', '/user/build/exportOptions.plist'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild", + "/usr/libexec/PlistBuddy": "/usr/libexec/PlistBuddy" + }, + "checkPath": { + "/home/bin/xcodebuild": true, + "/usr/libexec/PlistBuddy": true + }, + "filePathSupplied": { + "archivePath": false, + "exportOptionsPlist": false + }, + "getVariable": { + "build.sourcesDirectory": "/user/build", + "HOME": "/users/test" + }, + "stats": { + "/user/build": { + "isFile": false + }, + "/user/build/exportOptions.plist": { + "isFile": false + } + }, + "findMatch": { + "**/*.xcodeproj/*.xcworkspace": [ + "/user/build/fun.xcodeproj/project.xcworkspace" + ], + "**/*.app": [ + "/user/build/output/$(SDK)/$(Configuration)/build.sym/Release.iphoneos/fun.app" + ], + "**/*.xcarchive": [ + "/user/build/testScheme.xcarchive" + ] + }, + "exec": { + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 8.0" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme build": { + "code": 0, + "stdout": "xcodebuild output here" + }, + "/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme archive -sdk $(SDK) -configuration $(Configuration) -archivePath /user/build/testScheme": { + "code": 0, + "stdout": "xcodebuild archive output here" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/XcodeV5/Tests/L0FilePathForArchiveAndExportPath.ts b/_generated/XcodeV5/Tests/L0FilePathForArchiveAndExportPath.ts new file mode 100644 index 000000000000..7ac43fb00aaf --- /dev/null +++ b/_generated/XcodeV5/Tests/L0FilePathForArchiveAndExportPath.ts @@ -0,0 +1,97 @@ + +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, '..', 'xcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support +process.env['USEXCRUN'] = 'false'; + +tr.setInput('actions', 'build'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('sdk', '$(SDK)'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/*.xcworkspace'); +tr.setInput('scheme', 'testScheme'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('packageApp', 'true'); +tr.setInput('signingOption', 'default'); +tr.setInput('signingIdentity', ''); +tr.setInput('provisioningProfileUuid', ''); +tr.setInput('args', ''); +tr.setInput('cwd', '/user/build'); +tr.setInput('outputPattern', 'output/$(SDK)/$(Configuration)'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('useXctool', 'false'); +tr.setInput('xctoolReporter', ''); +tr.setInput('publishJUnitResults', 'false'); +tr.setInput('archivePath', '/user/build/testScheme.xcarchive'); +tr.setInput('exportPath', '/user/build/testipa.ipa'); +tr.setInput('exportOptions', 'specify'); +tr.setInput('exportMethod', 'development'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild", + "/usr/libexec/PlistBuddy": "/usr/libexec/PlistBuddy" + }, + "checkPath": { + "/home/bin/xcodebuild": true, + "/usr/libexec/PlistBuddy": true + }, + "filePathSupplied": { + "archivePath": false + }, + "getVariable": { + "build.sourcesDirectory": "/user/build", + "HOME": "/users/test" + }, + "stats": { + "/user/build": { + "isFile": false + } + }, + "findMatch": { + "**/*.xcodeproj/*.xcworkspace": [ + "/user/build/fun.xcodeproj/project.xcworkspace" + ], + "**/*.app": [ + "/user/build/output/$(SDK)/$(Configuration)/build.sym/Release.iphoneos/fun.app" + ], + "**/*.xcarchive": [ + "/user/build/testScheme.xcarchive" + ] + }, + "exec": { + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 7.3.1" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme build": { + "code": 0, + "stdout": "xcodebuild output here" + }, + "/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme archive -sdk $(SDK) -configuration $(Configuration) -archivePath /user/build/testScheme.xcarchive": { + "code": 0, + "stdout": "xcodebuild archive output here" + }, + "/home/bin/xcodebuild -exportArchive -archivePath /user/build/testScheme.xcarchive -exportPath /user/build/testipa.ipa -exportOptionsPlist _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "xcodebuild export output here" + }, + "/usr/libexec/PlistBuddy -c Clear _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist initialized output here" + }, + "/usr/libexec/PlistBuddy -c Add method string development _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/XcodeV5/Tests/L0NoXcpretty.ts b/_generated/XcodeV5/Tests/L0NoXcpretty.ts new file mode 100644 index 000000000000..86c0b8e421a8 --- /dev/null +++ b/_generated/XcodeV5/Tests/L0NoXcpretty.ts @@ -0,0 +1,80 @@ + +import ma = require('azure-pipelines-task-lib/mock-answer'); +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import path = require('path'); +import { emitTelemetry } from '../xcodeutils'; + +let taskPath = path.join(__dirname, '..', 'xcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tr.setInput('actions', 'test'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('sdk', '$(SDK)'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/*.xcworkspace'); +tr.setInput('scheme', 'myscheme'); +tr.setInput('packageApp', 'false'); +tr.setInput('signingOption', 'default'); +tr.setInput('signingIdentity', ''); +tr.setInput('provisioningProfileUuid', ''); +tr.setInput('args', ''); +tr.setInput('cwd', '/user/build'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('useXcpretty', 'false'); +tr.setInput('publishJUnitResults', 'true'); + +tr.registerMock('./xcodeutils', { + getUniqueLogFileName: function (logPrefix: string) { + return '/build/temp' + logPrefix + '.log'; + }, + emitTelemetry: function(area: string, feature: string, taskSpecificTelemetry: { [key: string]: any; }) { + console.log('Xcode task telemetry'); + } +}); + +process.env['AGENT_VERSION'] = '2.122.0'; +process.env['BUILD_SOURCESDIRECTORY'] = '/user/build'; +process.env['SYSTEM_DEFAULTWORKINGDIRECTORY'] = "/user/build"; +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild", + "xcpretty": "/home/bin/xcpretty" + }, + "checkPath" : { + "/home/bin/xcodebuild": true, + "/home/bin/xcpretty": true + }, + "findMatch": { + "**/*.xcodeproj/*.xcworkspace": [ + "/user/build/fun.xcodeproj/project.xcworkspace" + ], + "/user/build": [ + "/user/build/build/reports/junit.xml" + ] + }, + "getVariable": { + "build.sourcesDirectory": "/user/build", + "HOME": "/users/test" + }, + "exec": { + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 7.3.1" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme myscheme test | /home/bin/xcpretty -r junit --no-color": { + "code": 0, + "stdout": "xcodebuild | xcpretty output here" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme myscheme test": { + "code": 0, + "stdout": "xcodebuild output without xcpretty here" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/XcodeV5/Tests/L0OptionalArgs.ts b/_generated/XcodeV5/Tests/L0OptionalArgs.ts new file mode 100644 index 000000000000..430c6d2d90c6 --- /dev/null +++ b/_generated/XcodeV5/Tests/L0OptionalArgs.ts @@ -0,0 +1,60 @@ + +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, '..', 'xcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tr.setInput('actions', 'clean build'); +tr.setInput('configuration', 'Release'); +tr.setInput('sdk', 'iphone'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/*.xcworkspace'); +tr.setInput('scheme', 'fun'); +tr.setInput('packageApp', 'false'); +tr.setInput('signingOption', 'default'); +tr.setInput('signingIdentity', ''); +tr.setInput('provisioningProfileUuid', ''); +tr.setInput('args', '-exportArchive -exportPath /user/build/output/iphone/release'); +tr.setInput('cwd', '/user/build'); +tr.setInput('xcodeVersion', 'specifyPath'); +tr.setInput('xcodeDeveloperDir', '/Applications/Xcode5'); +tr.setInput('publishJUnitResults', 'false'); + +process.env['AGENT_VERSION'] = '2.122.0'; +process.env['BUILD_SOURCESDIRECTORY'] = '/user/build'; +process.env['SYSTEM_DEFAULTWORKINGDIRECTORY'] = "/user/build"; +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild" + }, + "checkPath" : { + "/home/bin/xcodebuild": true + }, + "getVariable": { + "build.sourcesDirectory": "/user/build", + "HOME": "/users/test" + }, + "findMatch": { + "**/*.xcodeproj/*.xcworkspace": [ + "/user/build/fun.xcodeproj/project.xcworkspace" + ] + }, + "exec": { + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 7.3.1" + }, + "/home/bin/xcodebuild -sdk iphone -configuration Release -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme fun clean build -exportArchive -exportPath /user/build/output/iphone/release": { + "code": 0, + "stdout": "xcodebuild output here" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/XcodeV5/Tests/L0Signing.ts b/_generated/XcodeV5/Tests/L0Signing.ts new file mode 100644 index 000000000000..8910e2967bc3 --- /dev/null +++ b/_generated/XcodeV5/Tests/L0Signing.ts @@ -0,0 +1,88 @@ + +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, '..', 'xcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tr.setInput('actions', 'build'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('sdk', '$(SDK)'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/*.xcworkspace'); +tr.setInput('scheme', 'fun'); +tr.setInput('packageApp', 'false'); +tr.setInput('signingOption', 'manual'); +tr.setInput('signingIdentity', 'iPhone Developer: XcodeTask Tester (HE432Y3E2Q)'); +tr.setInput('provisioningProfileUuid', 'testuuid'); +tr.setInput('args', ''); +tr.setInput('cwd', '/user/build'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('publishJUnitResults', 'false'); + +process.env['AGENT_VERSION'] = '2.122.0'; +process.env['BUILD_SOURCESDIRECTORY'] = '/user/build'; +process.env['SYSTEM_DEFAULTWORKINGDIRECTORY'] = "/user/build"; +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild", + "security": "/usr/bin/security", + "/usr/libexec/PlistBuddy": "/usr/libexec/PlistBuddy" + }, + "checkPath" : { + "/home/bin/xcodebuild": true, + "/usr/bin/security": true, + "/usr/libexec/PlistBuddy": true + }, + "exist": { + "/user/build/cert.p12": true, + "/user/build/testuuid.mobileprovision": true + }, + "getVariable": { + "build.sourcesDirectory": "/user/build", + "HOME": "/users/test" + }, + "findMatch": { + "**/*.xcodeproj/*.xcworkspace": [ + "/user/build/fun.xcodeproj/project.xcworkspace" + ] + }, + "exec": { + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 7.3.1" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme fun build CODE_SIGN_STYLE=Manual CODE_SIGN_IDENTITY=iPhone Developer: XcodeTask Tester (HE432Y3E2Q) PROVISIONING_PROFILE=testuuid PROVISIONING_PROFILE_SPECIFIER=": { + "code": 0, + "stdout": "xcodebuild output here" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme fun build CODE_SIGN_STYLE=Manual CODE_SIGN_IDENTITY=iPhone Developer: XcodeTask Tester (HE432Y3E2Q) PROVISIONING_PROFILE= PROVISIONING_PROFILE_SPECIFIER=": { + "code": 0, + "stdout": "xcodebuild output here" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme fun build CODE_SIGN_STYLE=Manual PROVISIONING_PROFILE=testuuid PROVISIONING_PROFILE_SPECIFIER=": { + "code": 0, + "stdout": "xcodebuild output here" + }, + "/usr/bin/security find-identity -v -p codesigning /user/build/_xcodetasktmp.keychain" : { + "code": 0, + "stdout": "1) 5229BFC905F473E52FAD51208174528106966930 \"iPhone Developer: XcodeTask Tester (HE432Y3E2Q)\"\n 1 valid identities found" + }, + "/usr/bin/security cms -D -i /user/build/testuuid.mobileprovision": { + "code": 0, + "stdout": "prov profile details here" + }, + "/usr/libexec/PlistBuddy -c Print UUID _xcodetasktmp.plist": { + "code": 0, + "stdout": "testuuid" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/XcodeV5/Tests/L0SigningWithP12.ts b/_generated/XcodeV5/Tests/L0SigningWithP12.ts new file mode 100644 index 000000000000..b8db1dd8f2a0 --- /dev/null +++ b/_generated/XcodeV5/Tests/L0SigningWithP12.ts @@ -0,0 +1,80 @@ + +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, '..', 'xcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tr.setInput('actions', 'build'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('sdk', '$(SDK)'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/*.xcworkspace'); +tr.setInput('scheme', 'fun'); +tr.setInput('packageApp', 'false'); +tr.setInput('signingOption', 'manual'); +tr.setInput('signingIdentity', 'iPhone Developer: XcodeTask Tester (HE432Y3E2Q)'); +tr.setInput('provisioningProfileUuid', ''); +tr.setInput('args', ''); +tr.setInput('cwd', '/user/build'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('publishJUnitResults', 'false'); + +process.env['AGENT_VERSION'] = '2.122.0'; +process.env['BUILD_SOURCESDIRECTORY'] = '/user/build'; +process.env['SYSTEM_DEFAULTWORKINGDIRECTORY'] = "/user/build"; +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild", + "security": "/usr/bin/security", + "/usr/libexec/PlistBuddy": "/usr/libexec/PlistBuddy" + }, + "checkPath" : { + "/home/bin/xcodebuild": true, + "/usr/bin/security": true, + "/usr/libexec/PlistBuddy": true + }, + "exist": { + "/user/build/cert.p12": true, + "/user/build/testuuid.mobileprovision": true + }, + "getVariable": { + "build.sourcesDirectory": "/user/build", + "HOME": "/users/test" + }, + "findMatch": { + "**/*.xcodeproj/*.xcworkspace": [ + "/user/build/fun.xcodeproj/project.xcworkspace" + ] + }, + "exec": { + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 7.3.1" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme fun build CODE_SIGN_STYLE=Manual CODE_SIGN_IDENTITY=iPhone Developer: XcodeTask Tester (HE432Y3E2Q) PROVISIONING_PROFILE=testuuid PROVISIONING_PROFILE_SPECIFIER=": { + "code": 0, + "stdout": "xcodebuild output here" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme fun build CODE_SIGN_STYLE=Manual CODE_SIGN_IDENTITY=iPhone Developer: XcodeTask Tester (HE432Y3E2Q) PROVISIONING_PROFILE= PROVISIONING_PROFILE_SPECIFIER=": { + "code": 0, + "stdout": "xcodebuild output here" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme fun build CODE_SIGN_STYLE=Manual PROVISIONING_PROFILE=testuuid PROVISIONING_PROFILE_SPECIFIER=": { + "code": 0, + "stdout": "xcodebuild output here" + }, + "/usr/bin/security find-identity -v -p codesigning /user/build/_xcodetasktmp.keychain" : { + "code": 0, + "stdout": "1) 5229BFC905F473E52FAD51208174528106966930 \"iPhone Developer: XcodeTask Tester (HE432Y3E2Q)\"\n 1 valid identities found" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/XcodeV5/Tests/L0SigningWithProfile.ts b/_generated/XcodeV5/Tests/L0SigningWithProfile.ts new file mode 100644 index 000000000000..5ef2194614e5 --- /dev/null +++ b/_generated/XcodeV5/Tests/L0SigningWithProfile.ts @@ -0,0 +1,84 @@ + +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, '..', 'xcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tr.setInput('actions', 'build'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('sdk', '$(SDK)'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/*.xcworkspace'); +tr.setInput('scheme', 'fun'); +tr.setInput('packageApp', 'false'); +tr.setInput('signingOption', 'manual'); +tr.setInput('signingIdentity', ''); +tr.setInput('provisioningProfileUuid', 'testuuid'); +tr.setInput('args', ''); +tr.setInput('cwd', '/user/build'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('publishJUnitResults', 'false'); + +process.env['AGENT_VERSION'] = '2.122.0'; +process.env['BUILD_SOURCESDIRECTORY'] = '/user/build'; +process.env['SYSTEM_DEFAULTWORKINGDIRECTORY'] = "/user/build"; +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild", + "security": "/usr/bin/security", + "/usr/libexec/PlistBuddy": "/usr/libexec/PlistBuddy" + }, + "checkPath" : { + "/home/bin/xcodebuild": true, + "/usr/bin/security": true, + "/usr/libexec/PlistBuddy": true + }, + "exist": { + "/user/build/cert.p12": true, + "/user/build/testuuid.mobileprovision": true + }, + "getVariable": { + "build.sourcesDirectory": "/user/build", + "HOME": "/users/test" + }, + "findMatch": { + "**/*.xcodeproj/*.xcworkspace": [ + "/user/build/fun.xcodeproj/project.xcworkspace" + ] + }, + "exec": { + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 7.3.1" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme fun build CODE_SIGN_STYLE=Manual CODE_SIGN_IDENTITY=iPhone Developer: XcodeTask Tester (HE432Y3E2Q) PROVISIONING_PROFILE=testuuid PROVISIONING_PROFILE_SPECIFIER=": { + "code": 0, + "stdout": "xcodebuild output here" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme fun build CODE_SIGN_STYLE=Manual CODE_SIGN_IDENTITY=iPhone Developer: XcodeTask Tester (HE432Y3E2Q) PROVISIONING_PROFILE= PROVISIONING_PROFILE_SPECIFIER=": { + "code": 0, + "stdout": "xcodebuild output here" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme fun build CODE_SIGN_STYLE=Manual PROVISIONING_PROFILE=testuuid PROVISIONING_PROFILE_SPECIFIER=": { + "code": 0, + "stdout": "xcodebuild output here" + }, + "/usr/bin/security cms -D -i /user/build/testuuid.mobileprovision": { + "code": 0, + "stdout": "prov profile details here" + }, + "/usr/libexec/PlistBuddy -c Print UUID _xcodetasktmp.plist": { + "code": 0, + "stdout": "testuuid" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/XcodeV5/Tests/L0TaskDefaults_4.127.0.ts b/_generated/XcodeV5/Tests/L0TaskDefaults_4.127.0.ts new file mode 100644 index 000000000000..ad859179020a --- /dev/null +++ b/_generated/XcodeV5/Tests/L0TaskDefaults_4.127.0.ts @@ -0,0 +1,84 @@ + +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, '..', 'xcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +// Xcode task defaults used for version 4.127.0. +tr.setInput('actions', 'build'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('sdk', '$(SDK)'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/project.xcworkspace'); +tr.setInput('scheme', ''); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('packageApp', 'false'); +tr.setInput('archivePath', ''); +tr.setInput('exportPath', 'output/$(SDK)/$(Configuration)'); +tr.setInput('exportOptions', 'auto'); +tr.setInput('exportMethod', 'development'); +tr.setInput('exportTeamId', ''); +tr.setInput('exportOptionsPlist', ''); +tr.setInput('exportArgs', ''); +tr.setInput('signingOption', 'nosign'); +tr.setInput('signingIdentity', ''); +tr.setInput('provisioningProfileUuid', ''); +tr.setInput('teamId', ''); +tr.setInput('destinationPlatformOption', 'default'); +tr.setInput('destinationPlatform', ''); +tr.setInput('destinationTypeOption', 'simulators'); +tr.setInput('destinationSimulators', 'iPhone 7'); +tr.setInput('destinationDevices', ''); +tr.setInput('args', ''); +tr.setInput('cwd', ''); +tr.setInput('outputPattern', ''); +tr.setInput('useXcpretty', 'false'); +tr.setInput('publishJUnitResults', 'false'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild" + }, + "checkPath": { + "/home/bin/xcodebuild": true + }, + "filePathSupplied": { + "archivePath": false + }, + "getVariable": { + "HOME": "/users/test" + }, + "stats": { + "/user/build": { + "isFile": false + } + }, + "findMatch": { + "**/*.xcodeproj/project.xcworkspace": [ + "/user/build/fun.xcodeproj/project.xcworkspace" + ] + }, + "exec": { + "/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -list": { + "code": 0, + "stdout": 'Information about workspace "Fun":\n Schemes:\n funScheme\n\n' + }, + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 7.3.1" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme funScheme build CODE_SIGNING_ALLOWED=NO": { + "code": 0, + "stdout": "xcodebuild output here" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/XcodeV5/Tests/L0TestResultsPublishFailsIfXcprettyNotInstalled.ts b/_generated/XcodeV5/Tests/L0TestResultsPublishFailsIfXcprettyNotInstalled.ts new file mode 100644 index 000000000000..5c446edfd189 --- /dev/null +++ b/_generated/XcodeV5/Tests/L0TestResultsPublishFailsIfXcprettyNotInstalled.ts @@ -0,0 +1,50 @@ +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, '..', 'postxcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +// Xcode task run tests +tr.setInput('actions', 'test'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/project.xcworkspace'); +tr.setInput('scheme', 'testScheme'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('packageApp', 'false'); +tr.setInput('signingOption', 'default'); +tr.setInput('destinationPlatformOption', 'default'); +tr.setInput('destinationPlatform', ''); +tr.setInput('destinationTypeOption', 'simulators'); +tr.setInput('destinationSimulators', 'iPhone 7'); +tr.setInput('destinationDevices', ''); +tr.setInput('useXcpretty', 'true'); +tr.setInput('publishJUnitResults', 'true'); +tr.setInput('cwd', '/home/build'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "getVariable": { + "HOME": "/users/test" + }, + "which": { + "xcpretty": "" + }, + "findMatch": { + "/home/build/**/build/reports/junit.xml": [ + "/home/build/testbuild1/build/reports/junit.xml" + ] + } +}; +tr.setAnswers(a); + +os.platform = () => { + return 'darwin'; +} +tr.registerMock('os', os); + +tr.run(); + diff --git a/_generated/XcodeV5/Tests/L0TestResultsPublishedInPostExecutionJob.ts b/_generated/XcodeV5/Tests/L0TestResultsPublishedInPostExecutionJob.ts new file mode 100644 index 000000000000..e952a5f734db --- /dev/null +++ b/_generated/XcodeV5/Tests/L0TestResultsPublishedInPostExecutionJob.ts @@ -0,0 +1,51 @@ + +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, '..', 'postxcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +// Xcode task run tests +tr.setInput('actions', 'test'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/project.xcworkspace'); +tr.setInput('scheme', 'testScheme'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('packageApp', 'false'); +tr.setInput('signingOption', 'default'); +tr.setInput('destinationPlatformOption', 'default'); +tr.setInput('destinationPlatform', ''); +tr.setInput('destinationTypeOption', 'simulators'); +tr.setInput('destinationSimulators', 'iPhone 7'); +tr.setInput('destinationDevices', ''); +tr.setInput('useXcpretty', 'true'); +tr.setInput('publishJUnitResults', 'true'); +tr.setInput('cwd', '/home/build'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "getVariable": { + "HOME": "/users/test" + }, + "which": { + "xcpretty": "/users/xcpretty" + }, + "findMatch": { + "/home/build/**/build/reports/junit.xml": [ + "/home/build/testbuild1/build/reports/junit.xml" + ] + } +}; +tr.setAnswers(a); + +os.platform = () => { + return 'darwin'; +} +tr.registerMock('os', os); + +tr.run(); + diff --git a/_generated/XcodeV5/Tests/L0XCode9SigningDefaultsToAutoWithAutoExport.ts b/_generated/XcodeV5/Tests/L0XCode9SigningDefaultsToAutoWithAutoExport.ts new file mode 100644 index 000000000000..7996a8f01c2a --- /dev/null +++ b/_generated/XcodeV5/Tests/L0XCode9SigningDefaultsToAutoWithAutoExport.ts @@ -0,0 +1,160 @@ + +import ma = require('azure-pipelines-task-lib/mock-answer'); +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import path = require('path'); +import fs = require('fs'); + +let taskPath = path.join(__dirname, '..', 'xcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +tr.registerMock('fs', { + ...fs, + createReadStream: function (path) { + if (path === '/user/build/fun.xcodeproj/project.pbxproj') { + return undefined; + } + throw "createReadStream mocking: path not expected"; + }, + statSync: fs.statSync, + readFileSync: fs.readFileSync, + writeFileSync: function (filePath, contents) { + }, +}); + +tr.registerMock('readline', { + createInterface: function () { + return { + on: function(event, cb) { + if (event === 'line') { + cb("Foo"); + cb(" ProvisioningStyle = Automatic;"); // First line wins. This should be ignored. + cb("Bar"); + cb("Baz"); + } + } + }; + } +}); + +tr.setInput('actions', 'build'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('sdk', '$(SDK)'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/*.xcworkspace'); +tr.setInput('scheme', 'testScheme'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('packageApp', 'true'); +tr.setInput('signingOption', 'default'); +tr.setInput('signingIdentity', ''); +tr.setInput('provisioningProfileUuid', ''); +tr.setInput('args', ''); +tr.setInput('cwd', '/user/build'); +tr.setInput('outputPattern', 'output/$(SDK)/$(Configuration)'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('useXctool', 'false'); +tr.setInput('packageTool', 'xcodebuild'); +tr.setInput('xctoolReporter', ''); +tr.setInput('publishJUnitResults', 'false'); +tr.setInput('archivePath', '/user/build'); +tr.setInput('exportPath', '/user/build'); +tr.setInput('exportOptions', 'auto'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild", + "security": "/usr/bin/security", + "/usr/libexec/PlistBuddy": "/usr/libexec/PlistBuddy", + "rm": "/bin/rm" + }, + "checkPath": { + "/home/bin/xcodebuild": true, + "/usr/bin/security": true, + "/usr/libexec/PlistBuddy": true, + "/bin/rm": true, + }, + "filePathSupplied": { + "archivePath": false + }, + "getVariable": { + "build.sourcesDirectory": "/user/build", + "HOME": "/users/test" + }, + "stats": { + "/user/build": { + "isFile": false + }, + "/user/build/fun.xcodeproj/project.pbxproj": { + "isFile": true + } + }, + "findMatch": { + "**/*.xcodeproj/*.xcworkspace": [ + "/user/build/fun.xcodeproj/project.xcworkspace" + ], + "**/*.app": [ + "/user/build/output/$(SDK)/$(Configuration)/build.sym/Release.iphoneos/fun.app" + ], + "**/*.xcarchive": [ + "/user/build/testScheme.xcarchive" + ], + "**/embedded.mobileprovision": [ + "/user/build/testScheme.xcarchive/Products/testScheme.app/embedded.mobileprovision" + ] + }, + "exec": { + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 9.0" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme build": { + "code": 0, + "stdout": "xcodebuild output here" + }, + "/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme archive -sdk $(SDK) -configuration $(Configuration) -archivePath /user/build/testScheme": { + "code": 0, + "stdout": "xcodebuild archive output here" + }, + "/home/bin/xcodebuild -exportArchive -archivePath /user/build/testScheme.xcarchive -exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "xcodebuild export output here" + }, + "/usr/libexec/PlistBuddy -c Clear _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist initialized output here" + }, + "/usr/libexec/PlistBuddy -c Add method string app-store _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + }, + "/usr/bin/security cms -D -i /user/build/testScheme.xcarchive/Products/testScheme.app/embedded.mobileprovision": { + "code": 0, + "stdout": "prov profile details here" + }, + "/usr/libexec/PlistBuddy -c Print ProvisionsAllDevices _xcodetasktmp.plist": { + "code": 1, + "stdout": "ProvisionsAllDevices not found" + }, + "/usr/libexec/PlistBuddy -c Print Entitlements:get-task-allow _xcodetasktmp.plist": { + "code": 0, + "stdout": "false" + }, + "/usr/libexec/PlistBuddy -c Print ProvisionedDevices _xcodetasktmp.plist": { + "code": 1, + "stdout": "ProvisionedDevices not found" + }, + "/bin/rm -f _xcodetasktmp.plist": { + "code": 0, + "stdout": "delete output here" + }, + "/usr/libexec/PlistBuddy -c Print Entitlements:com.apple.developer.icloud-container-environment _xcodetasktmp.plist": { + "code": 1, + "stdout": ":com.apple.developer.icloud-container-environment, Does Not Exist" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/XcodeV5/Tests/L0XCode9SigningDefaultsToManualWithAutoExport.ts b/_generated/XcodeV5/Tests/L0XCode9SigningDefaultsToManualWithAutoExport.ts new file mode 100644 index 000000000000..4990091a0993 --- /dev/null +++ b/_generated/XcodeV5/Tests/L0XCode9SigningDefaultsToManualWithAutoExport.ts @@ -0,0 +1,181 @@ + +import ma = require('azure-pipelines-task-lib/mock-answer'); +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import path = require('path'); +import fs = require('fs'); + +let taskPath = path.join(__dirname, '..', 'xcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +tr.registerMock('fs', { + ...fs, + createReadStream: function (path) { + if (path === '/user/build/fun.xcodeproj/project.pbxproj') { + return undefined; + } + throw "createReadStream mocking: path not expected"; + }, + statSync: fs.statSync, + readFileSync: fs.readFileSync, + writeFileSync: function (filePath, contents) { + }, +}); + +tr.registerMock('readline', { + createInterface: function () { + return { + on: function(event, cb) { + if (event === 'line') { + cb("Foo"); + cb(" ProvisioningStyle = Manual;"); + cb("Bar"); + cb(" ProvisioningStyle = Automatic;"); // First line wins. This should be ignored. + cb("Baz"); + } + } + }; + } +}); + +tr.setInput('actions', 'build'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('sdk', '$(SDK)'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/*.xcworkspace'); +tr.setInput('scheme', 'testScheme'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('packageApp', 'true'); +tr.setInput('signingOption', 'default'); +tr.setInput('signingIdentity', ''); +tr.setInput('provisioningProfileUuid', ''); +tr.setInput('args', ''); +tr.setInput('cwd', '/user/build'); +tr.setInput('outputPattern', 'output/$(SDK)/$(Configuration)'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('useXctool', 'false'); +tr.setInput('packageTool', 'xcodebuild'); +tr.setInput('xctoolReporter', ''); +tr.setInput('publishJUnitResults', 'false'); +tr.setInput('archivePath', '/user/build'); +tr.setInput('exportPath', '/user/build'); +tr.setInput('exportOptions', 'auto'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild", + "security": "/usr/bin/security", + "/usr/libexec/PlistBuddy": "/usr/libexec/PlistBuddy", + "rm": "/bin/rm" + }, + "checkPath": { + "/home/bin/xcodebuild": true, + "/usr/bin/security": true, + "/usr/libexec/PlistBuddy": true, + "/bin/rm": true, + }, + "filePathSupplied": { + "archivePath": false + }, + "getVariable": { + "build.sourcesDirectory": "/user/build", + "HOME": "/users/test" + }, + "stats": { + "/user/build": { + "isFile": false + }, + "/user/build/fun.xcodeproj/project.pbxproj": { + "isFile": true + } + }, + "findMatch": { + "**/*.xcodeproj/*.xcworkspace": [ + "/user/build/fun.xcodeproj/project.xcworkspace" + ], + "**/*.app": [ + "/user/build/output/$(SDK)/$(Configuration)/build.sym/Release.iphoneos/fun.app" + ], + "**/*.xcarchive": [ + "/user/build/testScheme.xcarchive" + ], + "**/embedded.mobileprovision": [ + "/user/build/testScheme.xcarchive/Products/testScheme.app/embedded.mobileprovision" + ] + }, + "exec": { + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 9.0" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme build": { + "code": 0, + "stdout": "xcodebuild output here" + }, + "/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme archive -sdk $(SDK) -configuration $(Configuration) -archivePath /user/build/testScheme": { + "code": 0, + "stdout": "xcodebuild archive output here" + }, + "/home/bin/xcodebuild -exportArchive -archivePath /user/build/testScheme.xcarchive -exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "xcodebuild export output here" + }, + "/usr/libexec/PlistBuddy -c Clear _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist initialized output here" + }, + "/usr/libexec/PlistBuddy -c Add method string app-store _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + }, + "/usr/bin/security cms -D -i /user/build/testScheme.xcarchive/Products/testScheme.app/embedded.mobileprovision": { + "code": 0, + "stdout": "prov profile details here" + }, + "/usr/libexec/PlistBuddy -c Print ProvisionsAllDevices _xcodetasktmp.plist": { + "code": 1, + "stdout": "ProvisionsAllDevices not found" + }, + "/usr/libexec/PlistBuddy -c Print Entitlements:get-task-allow _xcodetasktmp.plist": { + "code": 0, + "stdout": "false" + }, + "/usr/libexec/PlistBuddy -c Print ProvisionedDevices _xcodetasktmp.plist": { + "code": 1, + "stdout": "ProvisionedDevices not found" + }, + "/bin/rm -f _xcodetasktmp.plist": { + "code": 0, + "stdout": "delete output here" + }, + "/usr/libexec/PlistBuddy -c Add signingStyle string manual _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + }, + "/usr/libexec/PlistBuddy -c Add provisioningProfiles dict _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + }, + "/usr/libexec/PlistBuddy -c Print CFBundleIdentifier /user/build/testScheme.xcarchive/Products/testScheme.app/Info.plist": { + "code": 0, + "stdout": "com.vsts.test.myApp" + }, + "/usr/libexec/PlistBuddy -c Print Name _xcodetasktmp.plist": { + "code": 0, + "stdout": "Bob" + }, + "/usr/libexec/PlistBuddy -c Add provisioningProfiles:com.vsts.test.myApp string Bob _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + }, + "/usr/libexec/PlistBuddy -c Print Entitlements:com.apple.developer.icloud-container-environment _xcodetasktmp.plist": { + "code": 1, + "stdout": ":com.apple.developer.icloud-container-environment, Does Not Exist" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/XcodeV5/Tests/L0Xcode8AutomaticSignWithDevTeam.ts b/_generated/XcodeV5/Tests/L0Xcode8AutomaticSignWithDevTeam.ts new file mode 100644 index 000000000000..92b6ad58df7c --- /dev/null +++ b/_generated/XcodeV5/Tests/L0Xcode8AutomaticSignWithDevTeam.ts @@ -0,0 +1,111 @@ + +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, '..', 'xcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +tr.setInput('actions', 'build'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('sdk', '$(SDK)'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/*.xcworkspace'); +tr.setInput('scheme', 'testScheme'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('packageApp', 'true'); +tr.setInput('signingOption', 'auto'); +tr.setInput('teamId', 'testDevTeamId'); +tr.setInput('signingIdentity', ''); +tr.setInput('provisioningProfileUuid', ''); +tr.setInput('args', ''); +tr.setInput('cwd', '/user/build'); +tr.setInput('outputPattern', 'output/$(SDK)/$(Configuration)'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('useXctool', 'false'); +tr.setInput('packageTool', 'xcodebuild'); +tr.setInput('xctoolReporter', ''); +tr.setInput('publishJUnitResults', 'false'); +tr.setInput('archivePath', '/user/build'); +tr.setInput('exportPath', '/user/build'); +tr.setInput('exportOptions', 'specify'); +tr.setInput('exportMethod', 'development'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild", + "security": "/usr/bin/security", + "/usr/libexec/PlistBuddy": "/usr/libexec/PlistBuddy", + "rm": "/bin/rm", + "cp": "/bin/cp" + }, + "checkPath": { + "/home/bin/xcodebuild": true, + "/usr/bin/security": true, + "/usr/libexec/PlistBuddy": true, + "/bin/rm": true, + "/bin/cp": true + }, + "filePathSupplied": { + "archivePath": false + }, + "getVariable": { + "HOME": "/users/test" + }, + "stats": { + "/user/build": { + "isFile": false + } + }, + "findMatch": { + "**/*.xcodeproj/*.xcworkspace": [ + "/user/build/fun.xcodeproj/project.xcworkspace" + ], + "**/*.app": [ + "/user/build/output/$(SDK)/$(Configuration)/build.sym/Release.iphoneos/fun.app" + ], + "**/*.xcarchive": [ + "/user/build/testScheme.xcarchive" + ] + }, + "exec": { + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 8.0" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme build CODE_SIGN_STYLE=Automatic DEVELOPMENT_TEAM=testDevTeamId": { + "code": 0, + "stdout": "xcodebuild output here" + }, + "/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme archive -sdk $(SDK) -configuration $(Configuration) -archivePath /user/build/testScheme CODE_SIGN_STYLE=Automatic DEVELOPMENT_TEAM=testDevTeamId": { + "code": 0, + "stdout": "xcodebuild archive output here" + }, + "/home/bin/xcodebuild -exportArchive -archivePath /user/build/testScheme.xcarchive -exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "xcodebuild export output here" + }, + "/usr/libexec/PlistBuddy -c Clear _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist initialized output here" + }, + "/usr/libexec/PlistBuddy -c Add method string development _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + }, + "/usr/libexec/PlistBuddy -c Print UUID _xcodetasktmp.plist": { + "code": 0, + "stdout": "testuuid" + }, + "/bin/rm -f _xcodetasktmp.plist": { + "code": 0, + "stdout": "delete output here" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/XcodeV5/Tests/L0Xcode8AutomaticSignWithIdentifiers.ts b/_generated/XcodeV5/Tests/L0Xcode8AutomaticSignWithIdentifiers.ts new file mode 100644 index 000000000000..da2d275683d9 --- /dev/null +++ b/_generated/XcodeV5/Tests/L0Xcode8AutomaticSignWithIdentifiers.ts @@ -0,0 +1,102 @@ + +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, '..', 'xcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +tr.setInput('actions', 'build'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('sdk', '$(SDK)'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/*.xcworkspace'); +tr.setInput('scheme', 'testScheme'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('packageApp', 'true'); +tr.setInput('signingOption', 'auto'); +tr.setInput('signingIdentity', 'testSignIdentity'); +tr.setInput('provisioningProfileUuid', 'testUUID'); +tr.setInput('args', ''); +tr.setInput('cwd', '/user/build'); +tr.setInput('outputPattern', 'output/$(SDK)/$(Configuration)'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('useXctool', 'false'); +tr.setInput('packageTool', 'xcodebuild'); +tr.setInput('xctoolReporter', ''); +tr.setInput('publishJUnitResults', 'false'); +tr.setInput('archivePath', '/user/build'); +tr.setInput('exportPath', '/user/build'); +tr.setInput('exportOptions', 'specify'); +tr.setInput('exportMethod', 'development'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild", + "security": "/usr/bin/security", + "/usr/libexec/PlistBuddy": "/usr/libexec/PlistBuddy", + "rm": "/bin/rm", + "cp": "/bin/cp" + }, + "checkPath": { + "/home/bin/xcodebuild": true, + "/usr/bin/security": true, + "/usr/libexec/PlistBuddy": true, + "/bin/rm": true, + "/bin/cp": true + }, + "filePathSupplied": { + "archivePath": false + }, + "getVariable": { + "HOME": "/users/test" + }, + "stats": { + "/user/build": { + "isFile": false + } + }, + "findMatch": { + "**/*.xcodeproj/*.xcworkspace": [ + "/user/build/fun.xcodeproj/project.xcworkspace" + ], + "**/*.app": [ + "/user/build/output/$(SDK)/$(Configuration)/build.sym/Release.iphoneos/fun.app" + ], + "**/*.xcarchive": [ + "/user/build/testScheme.xcarchive" + ] + }, + "exec": { + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 8.0" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme build CODE_SIGN_STYLE=Automatic": { + "code": 0, + "stdout": "xcodebuild output here" + }, + "/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme archive -sdk $(SDK) -configuration $(Configuration) -archivePath /user/build/testScheme CODE_SIGN_STYLE=Automatic": { + "code": 0, + "stdout": "xcodebuild archive output here" + }, + "/home/bin/xcodebuild -exportArchive -archivePath /user/build/testScheme.xcarchive -exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "xcodebuild export output here" + }, + "/usr/libexec/PlistBuddy -c Clear _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist initialized output here" + }, + "/usr/libexec/PlistBuddy -c Add method string development _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/XcodeV5/Tests/L0Xcode9AutomaticSignWithAllowProvisioningUpdates.ts b/_generated/XcodeV5/Tests/L0Xcode9AutomaticSignWithAllowProvisioningUpdates.ts new file mode 100644 index 000000000000..8c1c65b37783 --- /dev/null +++ b/_generated/XcodeV5/Tests/L0Xcode9AutomaticSignWithAllowProvisioningUpdates.ts @@ -0,0 +1,101 @@ + +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, '..', 'xcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +tr.setInput('actions', 'build'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('sdk', '$(SDK)'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/*.xcworkspace'); +tr.setInput('scheme', 'testScheme'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('packageApp', 'true'); +tr.setInput('signingOption', 'auto'); +tr.setInput('args', ''); +tr.setInput('cwd', '/user/build'); +tr.setInput('outputPattern', 'output/$(SDK)/$(Configuration)'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('args', '-allowProvisioningUpdates'); +tr.setInput('packageTool', 'xcodebuild'); +tr.setInput('xctoolReporter', ''); +tr.setInput('publishJUnitResults', 'false'); +tr.setInput('archivePath', '/user/build'); +tr.setInput('exportPath', '/user/build'); +tr.setInput('exportOptions', 'specify'); +tr.setInput('exportMethod', 'development'); +tr.setInput('exportArgs', '-allowProvisioningUpdates'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild", + "security": "/usr/bin/security", + "/usr/libexec/PlistBuddy": "/usr/libexec/PlistBuddy", + "rm": "/bin/rm", + "cp": "/bin/cp" + }, + "checkPath": { + "/home/bin/xcodebuild": true, + "/usr/bin/security": true, + "/usr/libexec/PlistBuddy": true, + "/bin/rm": true, + "/bin/cp": true + }, + "filePathSupplied": { + "archivePath": false + }, + "getVariable": { + "HOME": "/users/test" + }, + "stats": { + "/user/build": { + "isFile": false + } + }, + "findMatch": { + "**/*.xcodeproj/*.xcworkspace": [ + "/user/build/fun.xcodeproj/project.xcworkspace" + ], + "**/*.app": [ + "/user/build/output/$(SDK)/$(Configuration)/build.sym/Release.iphoneos/fun.app" + ], + "**/*.xcarchive": [ + "/user/build/testScheme.xcarchive" + ] + }, + "exec": { + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 9.0" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme build -allowProvisioningUpdates CODE_SIGN_STYLE=Automatic": { + "code": 0, + "stdout": "xcodebuild output here" + }, + "/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme archive -sdk $(SDK) -configuration $(Configuration) -archivePath /user/build/testScheme CODE_SIGN_STYLE=Automatic -allowProvisioningUpdates": { + "code": 0, + "stdout": "xcodebuild archive output here" + }, + "/home/bin/xcodebuild -exportArchive -archivePath /user/build/testScheme.xcarchive -exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist -allowProvisioningUpdates": { + "code": 0, + "stdout": "xcodebuild export output here" + }, + "/usr/libexec/PlistBuddy -c Clear _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist initialized output here" + }, + "/usr/libexec/PlistBuddy -c Add method string development _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/XcodeV5/Tests/L0Xcode9AutomaticSignWithFiles.ts b/_generated/XcodeV5/Tests/L0Xcode9AutomaticSignWithFiles.ts new file mode 100644 index 000000000000..29cba73b8530 --- /dev/null +++ b/_generated/XcodeV5/Tests/L0Xcode9AutomaticSignWithFiles.ts @@ -0,0 +1,110 @@ + +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, '..', 'xcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +tr.setInput('actions', 'build'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('sdk', '$(SDK)'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/*.xcworkspace'); +tr.setInput('scheme', 'testScheme'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('packageApp', 'true'); +tr.setInput('signingOption', 'auto'); +tr.setInput('signingIdentity', ''); +tr.setInput('provisioningProfileUuid', ''); +tr.setInput('args', ''); +tr.setInput('cwd', '/user/build'); +tr.setInput('outputPattern', 'output/$(SDK)/$(Configuration)'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('useXctool', 'false'); +tr.setInput('packageTool', 'xcodebuild'); +tr.setInput('xctoolReporter', ''); +tr.setInput('publishJUnitResults', 'false'); +tr.setInput('archivePath', '/user/build'); +tr.setInput('exportPath', '/user/build'); +tr.setInput('exportOptions', 'specify'); +tr.setInput('exportMethod', 'development'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild", + "security": "/usr/bin/security", + "/usr/libexec/PlistBuddy": "/usr/libexec/PlistBuddy", + "rm": "/bin/rm", + "cp": "/bin/cp" + }, + "checkPath": { + "/home/bin/xcodebuild": true, + "/usr/bin/security": true, + "/usr/libexec/PlistBuddy": true, + "/bin/rm": true, + "/bin/cp": true + }, + "filePathSupplied": { + "archivePath": false + }, + "getVariable": { + "HOME": "/users/test" + }, + "stats": { + "/user/build": { + "isFile": false + } + }, + "findMatch": { + "**/*.xcodeproj/*.xcworkspace": [ + "/user/build/fun.xcodeproj/project.xcworkspace" + ], + "**/*.app": [ + "/user/build/output/$(SDK)/$(Configuration)/build.sym/Release.iphoneos/fun.app" + ], + "**/*.xcarchive": [ + "/user/build/testScheme.xcarchive" + ] + }, + "exec": { + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 9.0" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme build CODE_SIGN_STYLE=Automatic": { + "code": 0, + "stdout": "xcodebuild output here" + }, + "/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme archive -sdk $(SDK) -configuration $(Configuration) -archivePath /user/build/testScheme CODE_SIGN_STYLE=Automatic": { + "code": 0, + "stdout": "xcodebuild archive output here" + }, + "/home/bin/xcodebuild -exportArchive -archivePath /user/build/testScheme.xcarchive -exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "xcodebuild export output here" + }, + "/usr/libexec/PlistBuddy -c Clear _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist initialized output here" + }, + "/usr/libexec/PlistBuddy -c Add method string development _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + }, + "/usr/libexec/PlistBuddy -c Print UUID _xcodetasktmp.plist": { + "code": 0, + "stdout": "testuuid" + }, + "/bin/rm -f _xcodetasktmp.plist": { + "code": 0, + "stdout": "delete output here" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/XcodeV5/Tests/L0Xcode9ExportArchiveWithAutoAndCloudEntitlementForDevelopment.ts b/_generated/XcodeV5/Tests/L0Xcode9ExportArchiveWithAutoAndCloudEntitlementForDevelopment.ts new file mode 100644 index 000000000000..cf54161390d5 --- /dev/null +++ b/_generated/XcodeV5/Tests/L0Xcode9ExportArchiveWithAutoAndCloudEntitlementForDevelopment.ts @@ -0,0 +1,182 @@ + +import ma = require('azure-pipelines-task-lib/mock-answer'); +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import path = require('path'); +import fs = require('fs'); + +const taskPath = path.join(__dirname, '..', 'xcode.js'); +const tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +tr.registerMock('fs', { + ...fs, + createReadStream: function (path) { + if (path === '/user/build/fun.xcodeproj/project.pbxproj') { + return undefined; + } + throw "createReadStream mocking: path not expected"; + }, + statSync: fs.statSync, + readFileSync: fs.readFileSync, + writeFileSync: function (filePath, contents) { + }, +}); + +tr.registerMock('readline', { + createInterface: function () { + return { + on: function (event, cb) { + if (event === 'line') { + cb("Foo"); + cb(" ProvisioningStyle = Manual;"); + cb("Bar"); + cb(" ProvisioningStyle = Automatic;"); // First line wins. This should be ignored. + cb("Baz"); + } + } + }; + } +}); + +tr.setInput('actions', 'build'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('sdk', '$(SDK)'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/*.xcworkspace'); +tr.setInput('scheme', 'testScheme'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('packageApp', 'true'); +tr.setInput('signingOption', 'default'); +tr.setInput('signingIdentity', ''); +tr.setInput('provisioningProfileUuid', ''); +tr.setInput('args', ''); +tr.setInput('cwd', '/user/build'); +tr.setInput('outputPattern', 'output/$(SDK)/$(Configuration)'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('useXctool', 'false'); +tr.setInput('packageTool', 'xcodebuild'); +tr.setInput('xctoolReporter', ''); +tr.setInput('publishJUnitResults', 'false'); +tr.setInput('archivePath', '/user/build'); +tr.setInput('exportPath', '/user/build'); +tr.setInput('exportOptions', 'auto'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild", + "security": "/usr/bin/security", + "/usr/libexec/PlistBuddy": "/usr/libexec/PlistBuddy", + "rm": "/bin/rm" + }, + "checkPath": { + "/home/bin/xcodebuild": true, + "/usr/bin/security": true, + "/usr/libexec/PlistBuddy": true, + "/bin/rm": true, + }, + "filePathSupplied": { + "archivePath": false + }, + "getVariable": { + "build.sourcesDirectory": "/user/build", + "HOME": "/users/test" + }, + "stats": { + "/user/build": { + "isFile": false + }, + "/user/build/fun.xcodeproj/project.pbxproj": { + "isFile": true + } + }, + "findMatch": { + "**/*.xcodeproj/*.xcworkspace": [ + "/user/build/fun.xcodeproj/project.xcworkspace" + ], + "**/*.app": [ + "/user/build/output/$(SDK)/$(Configuration)/build.sym/Release.iphoneos/fun.app" + ], + "**/*.xcarchive": [ + "/user/build/testScheme.xcarchive" + ], + "**/embedded.mobileprovision": [ + "/user/build/testScheme.xcarchive/Products/testScheme.app/embedded.mobileprovision" + ] + }, + "exec": { + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 9.0" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme build": { + "code": 0, + "stdout": "xcodebuild output here" + }, + "/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme archive -sdk $(SDK) -configuration $(Configuration) -archivePath /user/build/testScheme": { + "code": 0, + "stdout": "xcodebuild archive output here" + }, + "/home/bin/xcodebuild -exportArchive -archivePath /user/build/testScheme.xcarchive -exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "xcodebuild export output here" + }, + "/usr/libexec/PlistBuddy -c Clear _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist initialized output here" + }, + "/usr/libexec/PlistBuddy -c Add method string development _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + }, + "/usr/bin/security cms -D -i /user/build/testScheme.xcarchive/Products/testScheme.app/embedded.mobileprovision": { + "code": 0, + "stdout": "prov profile details here" + }, + "/usr/libexec/PlistBuddy -c Print ProvisionsAllDevices _xcodetasktmp.plist": { + "code": 1, + "stdout": "ProvisionsAllDevices not found" + }, + "/usr/libexec/PlistBuddy -c Print Entitlements:get-task-allow _xcodetasktmp.plist": { + "code": 0, + "stdout": "true" + }, + "/usr/libexec/PlistBuddy -c Print Entitlements:com.apple.developer.icloud-container-environment _xcodetasktmp.plist": { + "code": 0, + "stdout": "Array { Development, Production}" + }, + "/bin/rm -f _xcodetasktmp.plist": { + "code": 0, + "stdout": "delete output here" + }, + "/usr/libexec/PlistBuddy -c Add signingStyle string manual _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + }, + "/usr/libexec/PlistBuddy -c Add provisioningProfiles dict _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + }, + "/usr/libexec/PlistBuddy -c Print CFBundleIdentifier /user/build/testScheme.xcarchive/Products/testScheme.app/Info.plist": { + "code": 0, + "stdout": "com.vsts.test.myApp" + }, + "/usr/libexec/PlistBuddy -c Print Name _xcodetasktmp.plist": { + "code": 0, + "stdout": "Bob" + }, + "/usr/libexec/PlistBuddy -c Add provisioningProfiles:com.vsts.test.myApp string Bob _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + }, + "/usr/libexec/PlistBuddy -c Add iCloudContainerEnvironment string Development _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + } + } +}; +tr.setAnswers(a); + +tr.run(); + + diff --git a/_generated/XcodeV5/Tests/L0Xcode9ExportArchiveWithAutoAndCloudEntitlementForProduction.ts b/_generated/XcodeV5/Tests/L0Xcode9ExportArchiveWithAutoAndCloudEntitlementForProduction.ts new file mode 100644 index 000000000000..56a1c6070293 --- /dev/null +++ b/_generated/XcodeV5/Tests/L0Xcode9ExportArchiveWithAutoAndCloudEntitlementForProduction.ts @@ -0,0 +1,186 @@ + +import ma = require('azure-pipelines-task-lib/mock-answer'); +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import path = require('path'); +import fs = require('fs'); + +const taskPath = path.join(__dirname, '..', 'xcode.js'); +const tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +tr.registerMock('fs', { + ...fs, + createReadStream: function (path) { + if (path === '/user/build/fun.xcodeproj/project.pbxproj') { + return undefined; + } + throw "createReadStream mocking: path not expected"; + }, + statSync: fs.statSync, + readFileSync: fs.readFileSync, + writeFileSync: function (filePath, contents) { + }, +}); + +tr.registerMock('readline', { + createInterface: function () { + return { + on: function (event, cb) { + if (event === 'line') { + cb("Foo"); + cb(" ProvisioningStyle = Manual;"); + cb("Bar"); + cb(" ProvisioningStyle = Automatic;"); // First line wins. This should be ignored. + cb("Baz"); + } + } + }; + } +}); + +tr.setInput('actions', 'build'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('sdk', '$(SDK)'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/*.xcworkspace'); +tr.setInput('scheme', 'testScheme'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('packageApp', 'true'); +tr.setInput('signingOption', 'default'); +tr.setInput('signingIdentity', ''); +tr.setInput('provisioningProfileUuid', ''); +tr.setInput('args', ''); +tr.setInput('cwd', '/user/build'); +tr.setInput('outputPattern', 'output/$(SDK)/$(Configuration)'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('useXctool', 'false'); +tr.setInput('packageTool', 'xcodebuild'); +tr.setInput('xctoolReporter', ''); +tr.setInput('publishJUnitResults', 'false'); +tr.setInput('archivePath', '/user/build'); +tr.setInput('exportPath', '/user/build'); +tr.setInput('exportOptions', 'auto'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild", + "security": "/usr/bin/security", + "/usr/libexec/PlistBuddy": "/usr/libexec/PlistBuddy", + "rm": "/bin/rm" + }, + "checkPath": { + "/home/bin/xcodebuild": true, + "/usr/bin/security": true, + "/usr/libexec/PlistBuddy": true, + "/bin/rm": true, + }, + "filePathSupplied": { + "archivePath": false + }, + "getVariable": { + "build.sourcesDirectory": "/user/build", + "HOME": "/users/test" + }, + "stats": { + "/user/build": { + "isFile": false + }, + "/user/build/fun.xcodeproj/project.pbxproj": { + "isFile": true + } + }, + "findMatch": { + "**/*.xcodeproj/*.xcworkspace": [ + "/user/build/fun.xcodeproj/project.xcworkspace" + ], + "**/*.app": [ + "/user/build/output/$(SDK)/$(Configuration)/build.sym/Release.iphoneos/fun.app" + ], + "**/*.xcarchive": [ + "/user/build/testScheme.xcarchive" + ], + "**/embedded.mobileprovision": [ + "/user/build/testScheme.xcarchive/Products/testScheme.app/embedded.mobileprovision" + ] + }, + "exec": { + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 9.0" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme build": { + "code": 0, + "stdout": "xcodebuild output here" + }, + "/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme archive -sdk $(SDK) -configuration $(Configuration) -archivePath /user/build/testScheme": { + "code": 0, + "stdout": "xcodebuild archive output here" + }, + "/home/bin/xcodebuild -exportArchive -archivePath /user/build/testScheme.xcarchive -exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "xcodebuild export output here" + }, + "/usr/libexec/PlistBuddy -c Clear _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist initialized output here" + }, + "/usr/libexec/PlistBuddy -c Add method string app-store _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + }, + "/usr/bin/security cms -D -i /user/build/testScheme.xcarchive/Products/testScheme.app/embedded.mobileprovision": { + "code": 0, + "stdout": "prov profile details here" + }, + "/usr/libexec/PlistBuddy -c Print ProvisionsAllDevices _xcodetasktmp.plist": { + "code": 1, + "stdout": "ProvisionsAllDevices not found" + }, + "/usr/libexec/PlistBuddy -c Print Entitlements:get-task-allow _xcodetasktmp.plist": { + "code": 0, + "stdout": "false" + }, + "/usr/libexec/PlistBuddy -c Print ProvisionedDevices _xcodetasktmp.plist": { + "code": 1, + "stdout": "ProvisionedDevices not found" + }, + "/usr/libexec/PlistBuddy -c Print Entitlements:com.apple.developer.icloud-container-environment _xcodetasktmp.plist": { + "code": 0, + "stdout": "Array { Development, Production}" + }, + "/bin/rm -f _xcodetasktmp.plist": { + "code": 0, + "stdout": "delete output here" + }, + "/usr/libexec/PlistBuddy -c Add signingStyle string manual _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + }, + "/usr/libexec/PlistBuddy -c Add provisioningProfiles dict _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + }, + "/usr/libexec/PlistBuddy -c Print CFBundleIdentifier /user/build/testScheme.xcarchive/Products/testScheme.app/Info.plist": { + "code": 0, + "stdout": "com.vsts.test.myApp" + }, + "/usr/libexec/PlistBuddy -c Print Name _xcodetasktmp.plist": { + "code": 0, + "stdout": "Bob" + }, + "/usr/libexec/PlistBuddy -c Add provisioningProfiles:com.vsts.test.myApp string Bob _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + }, + "/usr/libexec/PlistBuddy -c Add iCloudContainerEnvironment string Production _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + } + } +}; +tr.setAnswers(a); + +tr.run(); + + diff --git a/_generated/XcodeV5/Tests/L0XcodeArchiveExportProject.ts b/_generated/XcodeV5/Tests/L0XcodeArchiveExportProject.ts new file mode 100644 index 000000000000..99024258a275 --- /dev/null +++ b/_generated/XcodeV5/Tests/L0XcodeArchiveExportProject.ts @@ -0,0 +1,111 @@ + +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, '..', 'xcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +tr.setInput('actions', 'build'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('sdk', '$(SDK)'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj'); +tr.setInput('scheme', 'testScheme'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('packageApp', 'true'); +tr.setInput('teamId', 'testDevTeamId'); +tr.setInput('signingOption', 'auto'); +tr.setInput('signingIdentity', ''); +tr.setInput('provisioningProfileUuid', ''); +tr.setInput('args', ''); +tr.setInput('cwd', '/user/build'); +tr.setInput('outputPattern', 'output/$(SDK)/$(Configuration)'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('useXctool', 'false'); +tr.setInput('packageTool', 'xcodebuild'); +tr.setInput('xctoolReporter', ''); +tr.setInput('publishJUnitResults', 'false'); +tr.setInput('archivePath', '/user/build'); +tr.setInput('exportPath', '/user/build'); +tr.setInput('exportOptions', 'specify'); +tr.setInput('exportMethod', 'development'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild", + "security": "/usr/bin/security", + "/usr/libexec/PlistBuddy": "/usr/libexec/PlistBuddy", + "rm": "/bin/rm", + "cp": "/bin/cp" + }, + "checkPath": { + "/home/bin/xcodebuild": true, + "/usr/bin/security": true, + "/usr/libexec/PlistBuddy": true, + "/bin/rm": true, + "/bin/cp": true + }, + "filePathSupplied": { + "archivePath": false + }, + "getVariable": { + "HOME": "/users/test" + }, + "stats": { + "/user/build": { + "isFile": false + } + }, + "findMatch": { + "**/*.xcodeproj": [ + "/user/build/fun.xcodeproj" + ], + "**/*.app": [ + "/user/build/output/$(SDK)/$(Configuration)/build.sym/Release.iphoneos/fun.app" + ], + "**/*.xcarchive": [ + "/user/build/testScheme.xcarchive" + ] + }, + "exec": { + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 8.0" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -project /user/build/fun.xcodeproj -scheme testScheme build CODE_SIGN_STYLE=Automatic DEVELOPMENT_TEAM=testDevTeamId": { + "code": 0, + "stdout": "xcodebuild output here" + }, + "/home/bin/xcodebuild -project /user/build/fun.xcodeproj -scheme testScheme archive -sdk $(SDK) -configuration $(Configuration) -archivePath /user/build/testScheme CODE_SIGN_STYLE=Automatic DEVELOPMENT_TEAM=testDevTeamId": { + "code": 0, + "stdout": "xcodebuild archive output here" + }, + "/home/bin/xcodebuild -exportArchive -archivePath /user/build/testScheme.xcarchive -exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "xcodebuild export output here" + }, + "/usr/libexec/PlistBuddy -c Clear _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist initialized output here" + }, + "/usr/libexec/PlistBuddy -c Add method string development _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + }, + "/usr/libexec/PlistBuddy -c Print UUID _xcodetasktmp.plist": { + "code": 0, + "stdout": "testuuid" + }, + "/bin/rm -f _xcodetasktmp.plist": { + "code": 0, + "stdout": "delete output here" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/XcodeV5/Tests/L0XcodeDefaults.ts b/_generated/XcodeV5/Tests/L0XcodeDefaults.ts new file mode 100644 index 000000000000..6bdfd2a118eb --- /dev/null +++ b/_generated/XcodeV5/Tests/L0XcodeDefaults.ts @@ -0,0 +1,61 @@ + +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, '..', 'xcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +// Xcode task defaults used for version 5 +tr.setInput('actions', 'build'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('sdk', '$(SDK)'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/*.xcworkspace'); +tr.setInput('scheme', 'myscheme'); +tr.setInput('packageApp', 'false'); +tr.setInput('signingOption', 'default'); +tr.setInput('signingIdentity', ''); +tr.setInput('provisioningProfileUuid', ''); +tr.setInput('args', ''); +tr.setInput('cwd', '/user/build'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('publishJUnitResults', 'false'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild" + }, + "checkPath" : { + "/home/bin/xcodebuild": true + }, + "getVariable": { + "build.sourcesDirectory": "/user/build", + "HOME": "/users/test" + }, + "findMatch": { + "**/*.xcodeproj/*.xcworkspace": [ + "/user/build/fun.xcodeproj/project.xcworkspace" + ], + "**/*.app": [ + "/user/build/output/$(SDK)/$(Configuration)/build.sym/Release.iphoneos/fun.app" + ] + }, + "exec": { + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 7.2.1" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme myscheme build": { + "code": 0, + "stdout": "xcodebuild output here" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/XcodeV5/Tests/L0XcodeNoWorkspace.ts b/_generated/XcodeV5/Tests/L0XcodeNoWorkspace.ts new file mode 100644 index 000000000000..6d5f87ee33a3 --- /dev/null +++ b/_generated/XcodeV5/Tests/L0XcodeNoWorkspace.ts @@ -0,0 +1,60 @@ + +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, '..', 'xcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tr.setInput('actions', 'build'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('sdk', '$(SDK)'); +tr.setInput('xcWorkspacePath', '/user/build'); +tr.setInput('scheme', ''); +tr.setInput('packageApp', 'false'); +tr.setInput('signingOption', 'default'); +tr.setInput('signingIdentity', ''); +tr.setInput('provisioningProfileUuid', ''); +tr.setInput('args', '-project test.xcodeproj'); +tr.setInput('cwd', '/user/build'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('publishJUnitResults', 'false'); + +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support +process.env['AGENT_VERSION'] = '2.122.0'; +process.env['BUILD_SOURCESDIRECTORY'] = '/user/build'; + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild" + }, + "checkPath" : { + "/home/bin/xcodebuild": true + }, + "getVariable": { + "build.sourcesDirectory": "/user/build", + "HOME": "/users/test", + "agent.version": "2.122.0" + }, + "findMatch": { + "/user/build": [ + "/user/build/output/$(SDK)/$(Configuration)/build.sym/Release.iphoneos/fun.app" + ] + }, + "exec": { + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 6.4" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) build -project test.xcodeproj": { + "code": 0, + "stdout": "xcodebuild output here" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/XcodeV5/Tests/L0Xcpretty.ts b/_generated/XcodeV5/Tests/L0Xcpretty.ts new file mode 100644 index 000000000000..b8f13483c9c9 --- /dev/null +++ b/_generated/XcodeV5/Tests/L0Xcpretty.ts @@ -0,0 +1,82 @@ + +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, '..', 'xcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tr.setInput('actions', 'test'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('sdk', '$(SDK)'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/*.xcworkspace'); +tr.setInput('scheme', 'myscheme'); +tr.setInput('packageApp', 'false'); +tr.setInput('signingOption', 'default'); +tr.setInput('signingIdentity', ''); +tr.setInput('provisioningProfileUuid', ''); +tr.setInput('args', ''); +tr.setInput('cwd', '/user/build'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('useXcpretty', 'true'); +tr.setInput('publishJUnitResults', 'true'); + +tr.registerMock('./xcodeutils', { + getUniqueLogFileName: function (logPrefix: string) { + return '/build/temp' + logPrefix + '.log'; + }, + emitTelemetry: function(area: string, feature: string, taskSpecificTelemetry: { [key: string]: any; }) { + console.log('Xcode task telemetry'); + }, + setTaskState: function(variableName: string, variableValue: string) { + console.log('Xcode set task state ' + variableName + ' = ' + variableValue); + } +}); + +process.env['AGENT_VERSION'] = '2.122.0'; +process.env['BUILD_SOURCESDIRECTORY'] = '/user/build'; +process.env['SYSTEM_DEFAULTWORKINGDIRECTORY'] = "/user/build"; +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild", + "xcpretty": "/home/bin/xcpretty" + }, + "checkPath" : { + "/home/bin/xcodebuild": true, + "/home/bin/xcpretty": true + }, + "findMatch": { + "**/*.xcodeproj/*.xcworkspace": [ + "/user/build/fun.xcodeproj/project.xcworkspace" + ], + "/user/build": [ + "/user/build/build/reports/junit.xml" + ] + }, + "getVariable": { + "build.sourcesDirectory": "/user/build", + "HOME": "/users/test" + }, + "exec": { + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 7.3.1" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme myscheme test | /home/bin/xcpretty -r junit --no-color": { + "code": 0, + "stdout": "xcodebuild | xcpretty output here" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme myscheme test": { + "code": 0, + "stdout": "xcodebuild output without xcpretty here" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/XcodeV5/Tests/L0macOSAutoExport.ts b/_generated/XcodeV5/Tests/L0macOSAutoExport.ts new file mode 100644 index 000000000000..427f776102c7 --- /dev/null +++ b/_generated/XcodeV5/Tests/L0macOSAutoExport.ts @@ -0,0 +1,178 @@ + +import ma = require('azure-pipelines-task-lib/mock-answer'); +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import path = require('path'); +import fs = require('fs'); + +let taskPath = path.join(__dirname, '..', 'xcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +tr.registerMock('fs', { + ...fs, + createReadStream: function (path) { + if (path === '/user/build/fun.xcodeproj/project.pbxproj') { + return undefined; + } + throw "createReadStream mocking: path not expected"; + }, + statSync: fs.statSync, + readFileSync: fs.readFileSync, + writeFileSync: function (filePath, contents) { + }, +}); + +tr.registerMock('readline', { + createInterface: function () { + return { + on: function(event, cb) { + if (event === 'line') { + cb("Foo"); + cb(" ProvisioningStyle = Manual;"); + cb("Bar"); + cb(" ProvisioningStyle = Automatic;"); // First line wins. This should be ignored. + cb("Baz"); + } + } + }; + } +}); + +tr.setInput('actions', 'build'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('sdk', '$(SDK)'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/project.xcworkspace'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('packageApp', 'true'); +tr.setInput('archivePath', '/user/build'); +tr.setInput('exportPath', '/user/build'); +tr.setInput('exportOptions', 'auto'); +tr.setInput('exportOptionsPlist', ''); +tr.setInput('exportArgs', ''); +tr.setInput('signingOption', 'default'); +tr.setInput('cwd', '/user/build'); +tr.setInput('destinationPlatformOption', 'default'); +tr.setInput('outputPattern', ''); +tr.setInput('useXcpretty', 'false'); +tr.setInput('publishJUnitResults', 'false'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild", + "security": "/usr/bin/security", + "/usr/libexec/PlistBuddy": "/usr/libexec/PlistBuddy", + "rm": "/bin/rm" + }, + "checkPath": { + "/home/bin/xcodebuild": true, + "/usr/bin/security": true, + "/usr/libexec/PlistBuddy": true, + "/bin/rm": true, + }, + "filePathSupplied": { + "archivePath": false + }, + "getVariable": { + "HOME": "/users/test" + }, + "stats": { + "/user/build": { + "isFile": false + }, + "/user/build/fun.xcodeproj/project.pbxproj": { + "isFile": true + } + }, + "findMatch": { + "**/*.xcodeproj/project.xcworkspace": [ + "/user/build/fun.xcodeproj/project.xcworkspace" + ], + "**/*.app": [ + "/user/build/output/$(SDK)/$(Configuration)/build.sym/Release.iphoneos/fun.app" + ], + "**/*.xcarchive": [ + "/user/build/testScheme.xcarchive" + ], + "**/embedded.mobileprovision": [], + "**/embedded.provisionprofile": [ + "/user/build/testScheme.xcarchive/Products/testScheme.app/embedded.provisionprofile" + ] + }, + "exec": { + "/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -list": { + "code": 0, + "stdout": 'Information about workspace "Fun":\n Schemes:\n funScheme\n\n' + }, + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 9.2" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme funScheme build": { + "code": 0, + "stdout": "xcodebuild output here" + }, + "/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme funScheme archive -sdk $(SDK) -configuration $(Configuration) -archivePath /user/build/funScheme": { + "code": 0, + "stdout": "xcodebuild archive output here" + }, + "/home/bin/xcodebuild -exportArchive -archivePath /user/build/testScheme.xcarchive -exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "xcodebuild export output here" + }, + "/usr/libexec/PlistBuddy -c Clear _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist initialized output here" + }, + "/usr/libexec/PlistBuddy -c Add method string developer-id _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + }, + "/usr/bin/security cms -D -i /user/build/testScheme.xcarchive/Products/testScheme.app/embedded.provisionprofile": { + "code": 0, + "stdout": "prov profile details here" + }, + "/usr/libexec/PlistBuddy -c Print ProvisionsAllDevices _xcodetasktmp.plist": { + "code": 0, + "stdout": "true" + }, + "/usr/libexec/PlistBuddy -c Print Entitlements:com.apple.developer.icloud-container-environment _xcodetasktmp.plist": { + "code": 0, + "stdout": "Array { Development, Production}" + }, + "/usr/libexec/PlistBuddy -c Add iCloudContainerEnvironment string Production _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + }, + "/usr/libexec/PlistBuddy -c Print Name _xcodetasktmp.plist": { + "code": 0, + "stdout": "Bob" + }, + "/usr/libexec/PlistBuddy -c Print CFBundleIdentifier /user/build/testScheme.xcarchive/Products/testScheme.app/Info.plist": { + "code": 0, + "stdout": "com.vsts.test.myApp" + }, + "/usr/libexec/PlistBuddy -c Add signingStyle string manual _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + }, + "/usr/libexec/PlistBuddy -c Add provisioningProfiles dict _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + }, + "/usr/libexec/PlistBuddy -c Add provisioningProfiles:com.vsts.test.myApp string Bob _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + }, + "/bin/rm -f _xcodetasktmp.plist": { + "code": 0, + "stdout": "delete output here" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/XcodeV5/Tests/L0macOSProvisionlessAutoExport.ts b/_generated/XcodeV5/Tests/L0macOSProvisionlessAutoExport.ts new file mode 100644 index 000000000000..6296f9057b86 --- /dev/null +++ b/_generated/XcodeV5/Tests/L0macOSProvisionlessAutoExport.ts @@ -0,0 +1,136 @@ + +import ma = require('azure-pipelines-task-lib/mock-answer'); +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import path = require('path'); +import fs = require('fs'); + +let taskPath = path.join(__dirname, '..', 'xcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +tr.registerMock('fs', { + ...fs, + createReadStream: function (path) { + if (path === '/user/build/fun.xcodeproj/project.pbxproj') { + return undefined; + } + throw "createReadStream mocking: path not expected"; + }, + statSync: fs.statSync, + readFileSync: fs.readFileSync, + writeFileSync: function (filePath, contents) { + }, +}); + +tr.registerMock('readline', { + createInterface: function () { + return { + on: function(event, cb) { + if (event === 'line') { + cb("Foo"); + cb(" ProvisioningStyle = Automatic;"); // First line wins. This should be ignored. + cb("Bar"); + } + } + }; + } +}); + +tr.setInput('actions', 'build'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('sdk', '$(SDK)'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/project.xcworkspace'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('packageApp', 'true'); +tr.setInput('archivePath', '/user/build'); +tr.setInput('exportPath', '/user/build'); +tr.setInput('exportOptions', 'auto'); +tr.setInput('exportOptionsPlist', ''); +tr.setInput('exportArgs', ''); +tr.setInput('signingOption', 'default'); +tr.setInput('cwd', '/user/build'); +tr.setInput('destinationPlatformOption', 'default'); +tr.setInput('outputPattern', ''); +tr.setInput('useXcpretty', 'false'); +tr.setInput('publishJUnitResults', 'false'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild", + "security": "/usr/bin/security", + "/usr/libexec/PlistBuddy": "/usr/libexec/PlistBuddy", + "rm": "/bin/rm" + }, + "checkPath": { + "/home/bin/xcodebuild": true, + "/usr/bin/security": true, + "/usr/libexec/PlistBuddy": true, + "/bin/rm": true, + }, + "filePathSupplied": { + "archivePath": false + }, + "getVariable": { + "HOME": "/users/test" + }, + "stats": { + "/user/build": { + "isFile": false + }, + "/user/build/fun.xcodeproj/project.pbxproj": { + "isFile": true + } + }, + "findMatch": { + "**/*.xcodeproj/project.xcworkspace": [ + "/user/build/fun.xcodeproj/project.xcworkspace" + ], + "**/*.app": [ + "/user/build/output/$(SDK)/$(Configuration)/build.sym/Release.iphoneos/fun.app" + ], + "**/*.xcarchive": [ + "/user/build/testScheme.xcarchive" + ], + "**/embedded.mobileprovision": [], + "**/embedded.provisionprofile": [ + // An automatic signed macOS app might not have an embedded provisioning profile + ] + }, + "exec": { + "/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -list": { + "code": 0, + "stdout": 'Information about workspace "Fun":\n Schemes:\n funScheme\n\n' + }, + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 9.2" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme funScheme build": { + "code": 0, + "stdout": "xcodebuild output here" + }, + "/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme funScheme archive -sdk $(SDK) -configuration $(Configuration) -archivePath /user/build/funScheme": { + "code": 0, + "stdout": "xcodebuild archive output here" + }, + "/home/bin/xcodebuild -exportArchive -archivePath /user/build/testScheme.xcarchive -exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "xcodebuild export output here" + }, + "/usr/libexec/PlistBuddy -c Clear _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist initialized output here" + }, + "/bin/rm -f _xcodetasktmp.plist": { + "code": 0, + "stdout": "delete output here" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/XcodeV5/Tests/package-lock.json b/_generated/XcodeV5/Tests/package-lock.json new file mode 100644 index 000000000000..8019855cbcc2 --- /dev/null +++ b/_generated/XcodeV5/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/_generated/XcodeV5/Tests/package.json b/_generated/XcodeV5/Tests/package.json new file mode 100644 index 000000000000..ad95fd92c3a3 --- /dev/null +++ b/_generated/XcodeV5/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/_generated/XcodeV5/ThirdPartyNotice.txt b/_generated/XcodeV5/ThirdPartyNotice.txt new file mode 100644 index 000000000000..2c70f06c9446 --- /dev/null +++ b/_generated/XcodeV5/ThirdPartyNotice.txt @@ -0,0 +1,322 @@ + +THIRD-PARTY SOFTWARE NOTICES AND INFORMATION +Do Not Translate or Localize + +This Azure DevOps extension (XcodeV5) 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. uuid (git+https://github.com/kelektiv/node-uuid.git) +12. 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 + +%% 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 + +%% 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/XcodeV5/icon.png b/_generated/XcodeV5/icon.png new file mode 100644 index 000000000000..5dda42229aad Binary files /dev/null and b/_generated/XcodeV5/icon.png differ diff --git a/_generated/XcodeV5/icon.svg b/_generated/XcodeV5/icon.svg new file mode 100644 index 000000000000..74474e20632b --- /dev/null +++ b/_generated/XcodeV5/icon.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/_generated/XcodeV5/make.json b/_generated/XcodeV5/make.json new file mode 100644 index 000000000000..7e5057afbbed --- /dev/null +++ b/_generated/XcodeV5/make.json @@ -0,0 +1,13 @@ +{ + "rm": [ + { + "items": [ + "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" + ], + "options": "-Rf" + } + ] +} \ No newline at end of file diff --git a/_generated/XcodeV5/package-lock.json b/_generated/XcodeV5/package-lock.json new file mode 100644 index 000000000000..ed67aefcde77 --- /dev/null +++ b/_generated/XcodeV5/package-lock.json @@ -0,0 +1,655 @@ +{ + "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": "10.17.44", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.44.tgz", + "integrity": "sha512-vHPAyBX1ffLcy4fQHmDyIUMUb42gHZjPHU66nhvbMzAWJqHnySGZ6STwN3rwrnSd1FHB0DI/RWgGELgKSYRDmw==" + }, + "@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": "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.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": { + "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/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==" + }, + "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==" + } + } + }, + "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" + } + }, + "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": "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/XcodeV5/package.json b/_generated/XcodeV5/package.json new file mode 100644 index 000000000000..592adcf39290 --- /dev/null +++ b/_generated/XcodeV5/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": "^10.17.0", + "@types/mocha": "^5.2.7", + "@types/uuid": "^8.3.0", + "azure-pipelines-task-lib": "^5.0.0-preview.0", + "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": "4.0.2" + } +} diff --git a/_generated/XcodeV5/postxcode.ts b/_generated/XcodeV5/postxcode.ts new file mode 100644 index 000000000000..7acad98b8095 --- /dev/null +++ b/_generated/XcodeV5/postxcode.ts @@ -0,0 +1,91 @@ +import os = require('os'); +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 utils = require('./xcodeutils'); + +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('XcodeRequiresMac')); + } else { + //-------------------------------------------------------- + // Test publishing - publish even if tests fail + //-------------------------------------------------------- + let testResultsFiles: string; + const publishResults: boolean = tl.getBoolInput('publishJUnitResults', false); + const useXcpretty: boolean = tl.getBoolInput('useXcpretty', false); + const workingDir: string = tl.getPathInput('cwd'); + + if (publishResults) { + if (!useXcpretty) { + throw tl.loc('UseXcprettyForTestPublishing'); + } else if (useXcpretty && !tl.which('xcpretty')) { + throw tl.loc("XcprettyNotInstalled"); + } + else { + // xcpretty is enabled and installed + testResultsFiles = tl.resolve(workingDir, '**/build/reports/junit.xml'); + + if (testResultsFiles && 0 !== testResultsFiles.length) { + //check for pattern in testResultsFiles + let matchingTestResultsFiles: string[]; + if (testResultsFiles.indexOf('*') >= 0) { + tl.debug('Pattern found in testResultsFiles parameter'); + matchingTestResultsFiles = tl.findMatch(workingDir, testResultsFiles, + { allowBrokenSymbolicLinks: false, followSpecifiedSymbolicLink: false, followSymbolicLinks: false }, + { matchBase: true, nocase: true }); + } + else { + tl.debug('No pattern found in testResultsFiles parameter'); + matchingTestResultsFiles = [testResultsFiles]; + } + + if (!matchingTestResultsFiles || matchingTestResultsFiles.length === 0) { + tl.warning(tl.loc('NoTestResultsFound', testResultsFiles)); + } else { + const TESTRUN_SYSTEM = "VSTS - xcode"; + const tp = new tl.TestPublisher("JUnit"); + const testRunTitle: string = tl.getInput('testRunTitle'); + tp.publish(matchingTestResultsFiles, "false", "", "", testRunTitle, "true", TESTRUN_SYSTEM); + } + } + } + } + + //clean up the temporary keychain, so it is not used to search for code signing identity in future builds + const keychainToDelete = utils.getTaskState('XCODE_KEYCHAIN_TO_DELETE') + if (keychainToDelete) { + try { + await sign.deleteKeychain(keychainToDelete); + } catch (err) { + tl.debug('Failed to delete temporary keychain. Error = ' + err); + tl.warning(tl.loc('TempKeychainDeleteFailed', keychainToDelete)); + } + } + + //delete provisioning profile if specified + const profileToDelete = utils.getTaskState('XCODE_PROFILE_TO_DELETE'); + if (profileToDelete) { + try { + await sign.deleteProvisioningProfile(profileToDelete); + } catch (err) { + tl.debug('Failed to delete provisioning profile. Error = ' + err); + tl.warning(tl.loc('ProvProfileDeleteFailed', profileToDelete)); + } + } + + //upload detailed logs from xcodebuild if using xcpretty + utils.uploadLogFile(utils.getTaskState('XCODEBUILD_LOG')); + utils.uploadLogFile(utils.getTaskState('XCODEBUILD_ARCHIVE_LOG')); + utils.uploadLogFile(utils.getTaskState('XCODEBUILD_EXPORT_LOG')); + } + } catch (err) { + tl.warning(err); + } +} + +run(); \ No newline at end of file diff --git a/_generated/XcodeV5/task.json b/_generated/XcodeV5/task.json new file mode 100644 index 000000000000..1b90cb6bb4c6 --- /dev/null +++ b/_generated/XcodeV5/task.json @@ -0,0 +1,418 @@ +{ + "id": "1E78DC1B-9132-4B18-9C75-0E7ECC634B74", + "name": "Xcode", + "friendlyName": "Xcode", + "description": "Build, test, or archive an Xcode workspace on macOS. Optionally package an app.", + "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/build/xcode", + "helpMarkDown": "[Learn more about this task](https://go.microsoft.com/fwlink/?LinkID=613730) or [see the Xcode documentation](https://developer.apple.com/xcode/)", + "category": "Build", + "visibility": [ + "Build" + ], + "author": "Microsoft Corporation", + "version": { + "Major": 5, + "Minor": 229, + "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": [ + "xcode" + ], + "instanceNameFormat": "Xcode $(actions)", + "groups": [ + { + "name": "sign", + "displayName": "Signing & provisioning", + "isExpanded": true + }, + { + "name": "package", + "displayName": "Package options", + "isExpanded": true + }, + { + "name": "devices", + "displayName": "Devices & simulators", + "isExpanded": true + }, + { + "name": "advanced", + "displayName": "Advanced", + "isExpanded": false + } + ], + "inputs": [ + { + "name": "actions", + "type": "string", + "label": "Actions", + "defaultValue": "build", + "required": true, + "helpMarkDown": "Enter a space-delimited list of actions. Some valid options are `build`, `clean`, `test`, `analyze`, and `archive`. For example,`clean build` will run a clean build." + }, + { + "name": "configuration", + "type": "string", + "label": "Configuration", + "defaultValue": "$(Configuration)", + "required": false, + "helpMarkDown": "Enter the Xcode project or workspace configuration to be built. The default value of this field is the variable `$(Configuration)`. When using a variable, make sure to specify a value (for example, `Release`) on the **Variables** tab." + }, + { + "name": "sdk", + "type": "string", + "label": "SDK", + "defaultValue": "$(SDK)", + "required": false, + "helpMarkDown": "Specify an SDK to use when building the Xcode project or workspace. From the macOS Terminal application, run `xcodebuild -showsdks` to display the valid list of SDKs. The default value of this field is the variable `$(SDK)`. When using a variable, make sure to specify a value (for example, `iphonesimulator`) on the **Variables** tab." + }, + { + "name": "xcWorkspacePath", + "type": "filePath", + "label": "Workspace or project path", + "defaultValue": "**/*.xcodeproj/project.xcworkspace", + "required": false, + "helpMarkDown": "(Optional) Enter a relative path from the root of the repository to the Xcode workspace or project. For example, `MyApp/MyApp.xcworkspace` or `MyApp/MyApp.xcodeproj`. Wildcards can be used ([more information](https://go.microsoft.com/fwlink/?linkid=856077))." + }, + { + "name": "scheme", + "type": "string", + "label": "Scheme", + "required": false, + "helpMarkDown": "(Optional) Enter a scheme name defined in Xcode. It must be a shared scheme, with its Shared checkbox enabled under Managed Schemes in Xcode. If you specify a Workspace or project path above without specifying a scheme, and the workspace has a single shared scheme, it will be automatically used." + }, + { + "name": "xcodeVersion", + "type": "pickList", + "label": "Xcode version", + "required": false, + "helpMarkDown": "Specify the target version of Xcode. Select `Default` to use the default version of Xcode on the agent machine. Selecting a version number (e.g. `Xcode 9`) relies on environment variables being set on the agent machine for the version's location (e.g. `XCODE_9_DEVELOPER_DIR=/Applications/Xcode_9.0.0.app/Contents/Developer`). Select `Specify path` to provide a specific path to the Xcode developer directory.
Note: XCode 12 is installed on macOS-10.15 (or higher)", + "defaultValue": "default", + ".comment": "//If you update the options here, be sure to update the Xcode.json build template as well.", + "options": { + "8": "Xcode 8", + "9": "Xcode 9", + "10": "Xcode 10", + "11": "Xcode 11", + "12": "Xcode 12", + "13": "Xcode 13", + "default": "Default", + "specifyPath": "Specify path" + } + }, + { + "name": "xcodeDeveloperDir", + "type": "string", + "label": "Xcode developer path", + "required": false, + "helpMarkDown": "(Optional) Enter a path to a specific Xcode developer directory (e.g. `/Applications/Xcode_9.0.0.app/Contents/Developer`). This is useful when multiple versions of Xcode are installed on the agent machine.", + "visibleRule": "xcodeVersion == specifyPath" + }, + { + "name": "packageApp", + "type": "boolean", + "label": "Create app package", + "defaultValue": false, + "required": true, + "helpMarkDown": "Indicate whether an IPA app package file should be generated as a part of the build.", + "groupName": "package" + }, + { + "name": "archivePath", + "type": "filePath", + "label": "Archive path", + "defaultValue": "", + "required": false, + "helpMarkDown": "(Optional) Specify a directory where created archives should be placed.", + "groupName": "package", + "visibleRule": "packageApp == true" + }, + { + "name": "exportPath", + "type": "filePath", + "label": "Export path", + "defaultValue": "output/$(SDK)/$(Configuration)", + "required": false, + "helpMarkDown": "(Optional) Specify the destination for the product exported from the archive.", + "groupName": "package", + "visibleRule": "packageApp == true" + }, + { + "name": "exportOptions", + "type": "pickList", + "label": "Export options", + "defaultValue": "auto", + "required": false, + "groupName": "package", + "options": { + "auto": "Automatic", + "plist": "Plist", + "specify": "Specify" + }, + "helpMarkDown": "Select a way of providing options for exporting the archive. When the default value of `Automatic` is selected, the export method is automatically detected from the archive. Select `Plist` to specify a plist file containing export options. Select `Specify` to provide a specific **Export method** and **Team ID**.", + "visibleRule": "packageApp == true" + }, + { + "name": "exportMethod", + "type": "string", + "label": "Export method", + "defaultValue": "development", + "required": true, + "helpMarkDown": "Enter the method that Xcode should use to export the archive. For example: `app-store`, `package`, `ad-hoc`, `enterprise`, or `development`.", + "groupName": "package", + "visibleRule": "exportOptions == specify" + }, + { + "name": "exportTeamId", + "type": "string", + "label": "Team ID", + "defaultValue": "", + "required": false, + "helpMarkDown": "(Optional) Enter the 10-character team ID from the Apple Developer Portal to use during export.", + "groupName": "package", + "visibleRule": "exportOptions == specify" + }, + { + "name": "exportOptionsPlist", + "type": "filePath", + "label": "Export options plist", + "defaultValue": "", + "required": true, + "helpMarkDown": "Enter the path to the plist file that contains options to use during export.", + "groupName": "package", + "visibleRule": "exportOptions == plist" + }, + { + "name": "exportArgs", + "type": "string", + "label": "Export arguments", + "defaultValue": "", + "required": false, + "helpMarkDown": "(Optional) Enter additional command line arguments to be used during export.", + "groupName": "package", + "visibleRule": "packageApp == true" + }, + { + "name": "signingOption", + "type": "pickList", + "label": "Signing style", + "required": false, + "groupName": "sign", + "defaultValue": "nosign", + "helpMarkDown": "Choose the method of signing the build. Select `Do not code sign` to disable signing. Select `Project defaults` to use only the project's signing configuration. Select `Manual signing` to force manual signing and optionally specify a signing identity and provisioning profile. Select `Automatic signing` to force automatic signing and optionally specify a development team ID. If your project requires signing, use the \"Install Apple...\" tasks to install certificates and provisioning profiles prior to the Xcode build.", + "options": { + "nosign": "Do not code sign", + "default": "Project defaults", + "manual": "Manual signing", + "auto": "Automatic signing" + } + }, + { + "name": "signingIdentity", + "type": "string", + "label": "Signing identity", + "required": false, + "helpMarkDown": "(Optional) Enter a signing identity override with which to sign the build. This may require unlocking the default keychain on the agent machine. If no value is entered, the Xcode project's setting will be used.", + "groupName": "sign", + "visibleRule": "signingOption = manual" + }, + { + "name": "provisioningProfileUuid", + "type": "string", + "label": "Provisioning profile UUID", + "required": false, + "helpMarkDown": "(Optional) Enter the UUID of an installed provisioning profile to be used for this build. Use separate build tasks with different schemes or targets to specify separate provisioning profiles by target in a single workspace (iOS, tvOS, watchOS).", + "groupName": "sign", + "visibleRule": "signingOption = manual" + }, + { + "name": "provisioningProfileName", + "type": "string", + "label": "Provisioning profile name", + "required": false, + "helpMarkDown": "(Optional) Enter the name of an installed provisioning profile to be used for this build. If specified, this takes precedence over the provisioning profile UUID. Use separate build tasks with different schemes or targets to specify separate provisioning profiles by target in a single workspace (iOS, tvOS, watchOS).", + "groupName": "sign", + "visibleRule": "signingOption = manual" + }, + { + "name": "teamId", + "type": "string", + "label": "Team ID", + "defaultValue": "", + "required": false, + "helpMarkDown": "(Optional, unless you are a member of multiple development teams.) Specify the 10-character development team ID.", + "groupName": "sign", + "visibleRule": "signingOption = auto" + }, + { + "name": "destinationPlatformOption", + "type": "picklist", + "label": "Destination platform", + "defaultValue": "default", + "required": false, + "helpMarkDown": "Select the destination device's platform to be used for UI testing when the generic build device isn't valid. Choose `Custom` to specify a platform not included in this list. When `Default` is selected, no simulators nor devices will be targeted.", + "groupName": "devices", + "options": { + "default": "Default", + "iOS": "iOS and watchOS", + "tvOS": "tvOS", + "macOS": "macOS", + "custom": "Custom" + } + }, + { + "name": "destinationPlatform", + "type": "string", + "label": "Custom destination platform", + "required": false, + "helpMarkDown": "Enter a destination device's platform to be used for UI testing when the generic build device isn't valid.", + "groupName": "devices", + "visibleRule": "destinationPlatformOption == custom" + }, + { + "name": "destinationTypeOption", + "type": "radio", + "label": "Destination type", + "defaultValue": "simulators", + "required": false, + "helpMarkDown": "Choose the destination type to be used for UI testing. Devices must be connected to the Mac performing the build via a cable or network connection. See Devices and Simulators in Xcode.", + "groupName": "devices", + "visibleRule": "destinationPlatformOption != default && destinationPlatformOption != macOS", + "options": { + "simulators": "Simulator", + "devices": "Connected Device" + } + }, + { + "name": "destinationSimulators", + "label": "Simulator", + "type": "string", + "defaultValue": "", + "required": false, + "groupName": "devices", + "helpMarkDown": "Enter an Xcode simulator name to be used for UI testing. For example, enter `iPhone X` (iOS and watchOS) or `Apple TV 4K` (tvOS). A target OS version is optional and can be specified in the format 'OS=versionNumber', such as `iPhone X,OS=11.1`. A list of simulators installed on the Hosted macOS agent can be [found here](https://go.microsoft.com/fwlink/?linkid=875290).", + "visibleRule": "destinationPlatformOption != default && destinationPlatformOption != macOS && destinationTypeOption == simulators" + }, + { + "name": "destinationDevices", + "label": "Device", + "type": "string", + "defaultValue": "", + "required": false, + "groupName": "devices", + "helpMarkDown": "Enter the name of the device to be used for UI testing, such as `Raisa's iPad`.", + "visibleRule": "destinationPlatformOption != default && destinationPlatformOption != macOS && destinationTypeOption == devices" + }, + { + "name": "args", + "type": "string", + "label": "Arguments", + "required": false, + "helpMarkDown": "(Optional) Enter additional command line arguments with which to build. This is useful for specifying `-target` or `-project` arguments instead of specifying a workspace/project and scheme.", + "groupName": "advanced" + }, + { + "name": "cwd", + "aliases": [ + "workingDirectory" + ], + "type": "filePath", + "label": "Working directory", + "defaultValue": "", + "required": false, + "helpMarkDown": "(Optional) Enter the working directory in which to run the build. If no value is entered, the root of the repository will be used.", + "groupName": "advanced" + }, + { + "name": "useXcpretty", + "type": "boolean", + "label": "Use xcpretty", + "required": false, + "defaultValue": true, + "helpMarkDown": "Specify whether to use xcpretty to format xcodebuild output. Enabling this requires xcpretty to be installed on the agent machine. If xcpretty is not installed, raw xcodebuild output is shown. xcpretty is preinstalled on Azure Pipelines hosted build agents. See [xcpretty](https://github.com/supermarin/xcpretty) on GitHub.", + "groupName": "advanced" + }, + { + "name": "xcprettyArgs", + "type": "string", + "label": "Xcpretty arguments", + "required": false, + "helpMarkDown": "Additional arguments to pass to xcpretty.", + "groupName": "advanced", + "visibleRule": "useXcpretty == true" + }, + { + "name": "publishJUnitResults", + "type": "boolean", + "label": "Publish test results to Azure Pipelines", + "required": false, + "defaultValue": false, + "groupName": "advanced", + "helpMarkDown": "Specify whether to publish JUnit test results to Azure Pipelines. This requires xcpretty to be enabled to generate JUnit test results." + }, + { + "name": "testRunTitle", + "type": "string", + "label": "Test run title", + "required": false, + "groupName": "advanced", + "helpMarkDown": "Title of the test run when publishing JUnit test results to Azure Pipelines.", + "visibleRule": "publishJUnitResults == true" + } + ], + "execution": { + "Node10": { + "target": "xcode.js", + "argumentFormat": "" + }, + "Node16": { + "target": "xcode.js", + "argumentFormat": "" + } + }, + "postjobexecution": { + "Node10": { + "target": "postxcode.js", + "argumentFormat": "" + }, + "Node16": { + "target": "postxcode.js", + "argumentFormat": "" + } + }, + "messages": { + "SignIdNotFound": "Failed to find the iOS signing identity. Verify that signing and provisioning information is provided.", + "TempKeychainSetupFailed": "Failed to add the temporary keychain to the keychains search path.", + "ProvProfileDetailsNotFound": "Failed to find details for the provisioning profile: %s", + "ProvProfileUUIDNotFound": "Failed to find the UUID for provisioning profile: %s", + "MultipleWorkspacesFound": "Multiple Xcode workspace matches were found. The first match will be used: %s", + "WorkspaceDoesNotExist": "The Xcode workspace was specified, but it does not exist or is not a directory: %s", + "UseXcprettyForTestPublishing": "Enable `Use xcpretty` to publish test results. For this build, no test results will be published.", + "NoTestResultsFound": "No test result files matching `%s` were found. Publishing JUnit test results will be skipped.", + "XcodeSuccess": "Xcode task execution completed with no errors.", + "TempKeychainDeleteFailed": "Failed to delete the temporary keychain created during the build: `%s`", + "ProvProfileDeleteFailed": "Failed to delete the provisioning profile `%s`.", + "ExportMethodNotIdentified": "Failed to automatically identify the export method to use from the archive file. This might cause errors during the build or produce an invalid package. If export fails, either enable signing (set `Signing Style` to `Project Defaults`), or configure export manually (set `Export options` to `Plist` or `Specify`).", + "ExportOptionsPlistInvalidFilePath": "The `Export options` plist file does not exist at `%s`. Provide the path to a valid plist file.", + "SchemeRequiredForArchive": "The scheme must be specified to generate the package with xcodebuild archive and export.", + "WorkspaceOrProjectRequiredForArchive": "The workspace or project path must be specified to generate the package with xcodebuild archive and export.", + "FailedToGenerateExportOptionsPlist": "Failed to automatically generate an `Export options` plist file to export an IPA. Please specify an `Export options` plist file in `Package options`.", + "LocateXcodeBasedOnVersion": "Locating the developer path for Xcode `%s`", + "FailedToLocateSpecifiedXcode": "Unable to resolve the developer path for Xcode `%s`. Set the `%s` environment variable on the agent machine, or set `Xcode version` to `Default` or `Specify path`.", + "CantDetermineProvisioningStyle": "The provisioning style was not found in a pbxProject file. Automatic signing will be used. If the project uses manual signing, auto-export may fail. As a workaround, `Export options` can be set to `Plist` or `Specify`.", + "MultipleSchemesFound": "The workspace contains multiple schemes. No scheme selected. Use `Scheme` to specify a target scheme.", + "NoSchemeFound": "No shared scheme found in the workspace. Use \"Manage Schemes\" in Xcode to share a scheme.", + "SchemeSelected": "The workspace contains a single shared scheme. '%s' will be used.", + "FailedToFindScheme": "Failed to find a scheme in the workspace. Use `Scheme` to specify a target scheme.", + "OutputDirectoryIgnored": "Output directory for build output (binaries) ignored. Specifying an output directory is incompatible with the '%s' action.", + "NoDestinationPlatformWarning": "UI tests must be run against a simulator or a connected device. In the Xcode task, set `Destination platform` to a value other than `Default`.", + "XcprettyNotInstalled": "xcpretty is not installed on the build server. xcodebuild raw output will be shown. Publishing test results will fail if xcpretty is not installed.", + "XcodeRequiresMac": "Using Xcode requires a macOS agent. Building with Xcode on Linux or Windows is not supported by Apple.", + "UsingDefaultSimulator": "Using default simulator: %s." + }, + "_buildConfigMapping": { + "Default": "5.229.3", + "Node20-225": "5.229.4" + } +} \ No newline at end of file diff --git a/_generated/XcodeV5/task.loc.json b/_generated/XcodeV5/task.loc.json new file mode 100644 index 000000000000..5c9d0d7ee244 --- /dev/null +++ b/_generated/XcodeV5/task.loc.json @@ -0,0 +1,418 @@ +{ + "id": "1E78DC1B-9132-4B18-9C75-0E7ECC634B74", + "name": "Xcode", + "friendlyName": "ms-resource:loc.friendlyName", + "description": "ms-resource:loc.description", + "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/build/xcode", + "helpMarkDown": "ms-resource:loc.helpMarkDown", + "category": "Build", + "visibility": [ + "Build" + ], + "author": "Microsoft Corporation", + "version": { + "Major": 5, + "Minor": 229, + "Patch": 3 + }, + "releaseNotes": "ms-resource:loc.releaseNotes", + "demands": [ + "xcode" + ], + "instanceNameFormat": "ms-resource:loc.instanceNameFormat", + "groups": [ + { + "name": "sign", + "displayName": "ms-resource:loc.group.displayName.sign", + "isExpanded": true + }, + { + "name": "package", + "displayName": "ms-resource:loc.group.displayName.package", + "isExpanded": true + }, + { + "name": "devices", + "displayName": "ms-resource:loc.group.displayName.devices", + "isExpanded": true + }, + { + "name": "advanced", + "displayName": "ms-resource:loc.group.displayName.advanced", + "isExpanded": false + } + ], + "inputs": [ + { + "name": "actions", + "type": "string", + "label": "ms-resource:loc.input.label.actions", + "defaultValue": "build", + "required": true, + "helpMarkDown": "ms-resource:loc.input.help.actions" + }, + { + "name": "configuration", + "type": "string", + "label": "ms-resource:loc.input.label.configuration", + "defaultValue": "$(Configuration)", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.configuration" + }, + { + "name": "sdk", + "type": "string", + "label": "ms-resource:loc.input.label.sdk", + "defaultValue": "$(SDK)", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.sdk" + }, + { + "name": "xcWorkspacePath", + "type": "filePath", + "label": "ms-resource:loc.input.label.xcWorkspacePath", + "defaultValue": "**/*.xcodeproj/project.xcworkspace", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.xcWorkspacePath" + }, + { + "name": "scheme", + "type": "string", + "label": "ms-resource:loc.input.label.scheme", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.scheme" + }, + { + "name": "xcodeVersion", + "type": "pickList", + "label": "ms-resource:loc.input.label.xcodeVersion", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.xcodeVersion", + "defaultValue": "default", + ".comment": "//If you update the options here, be sure to update the Xcode.json build template as well.", + "options": { + "8": "Xcode 8", + "9": "Xcode 9", + "10": "Xcode 10", + "11": "Xcode 11", + "12": "Xcode 12", + "13": "Xcode 13", + "default": "Default", + "specifyPath": "Specify path" + } + }, + { + "name": "xcodeDeveloperDir", + "type": "string", + "label": "ms-resource:loc.input.label.xcodeDeveloperDir", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.xcodeDeveloperDir", + "visibleRule": "xcodeVersion == specifyPath" + }, + { + "name": "packageApp", + "type": "boolean", + "label": "ms-resource:loc.input.label.packageApp", + "defaultValue": false, + "required": true, + "helpMarkDown": "ms-resource:loc.input.help.packageApp", + "groupName": "package" + }, + { + "name": "archivePath", + "type": "filePath", + "label": "ms-resource:loc.input.label.archivePath", + "defaultValue": "", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.archivePath", + "groupName": "package", + "visibleRule": "packageApp == true" + }, + { + "name": "exportPath", + "type": "filePath", + "label": "ms-resource:loc.input.label.exportPath", + "defaultValue": "output/$(SDK)/$(Configuration)", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.exportPath", + "groupName": "package", + "visibleRule": "packageApp == true" + }, + { + "name": "exportOptions", + "type": "pickList", + "label": "ms-resource:loc.input.label.exportOptions", + "defaultValue": "auto", + "required": false, + "groupName": "package", + "options": { + "auto": "Automatic", + "plist": "Plist", + "specify": "Specify" + }, + "helpMarkDown": "ms-resource:loc.input.help.exportOptions", + "visibleRule": "packageApp == true" + }, + { + "name": "exportMethod", + "type": "string", + "label": "ms-resource:loc.input.label.exportMethod", + "defaultValue": "development", + "required": true, + "helpMarkDown": "ms-resource:loc.input.help.exportMethod", + "groupName": "package", + "visibleRule": "exportOptions == specify" + }, + { + "name": "exportTeamId", + "type": "string", + "label": "ms-resource:loc.input.label.exportTeamId", + "defaultValue": "", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.exportTeamId", + "groupName": "package", + "visibleRule": "exportOptions == specify" + }, + { + "name": "exportOptionsPlist", + "type": "filePath", + "label": "ms-resource:loc.input.label.exportOptionsPlist", + "defaultValue": "", + "required": true, + "helpMarkDown": "ms-resource:loc.input.help.exportOptionsPlist", + "groupName": "package", + "visibleRule": "exportOptions == plist" + }, + { + "name": "exportArgs", + "type": "string", + "label": "ms-resource:loc.input.label.exportArgs", + "defaultValue": "", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.exportArgs", + "groupName": "package", + "visibleRule": "packageApp == true" + }, + { + "name": "signingOption", + "type": "pickList", + "label": "ms-resource:loc.input.label.signingOption", + "required": false, + "groupName": "sign", + "defaultValue": "nosign", + "helpMarkDown": "ms-resource:loc.input.help.signingOption", + "options": { + "nosign": "Do not code sign", + "default": "Project defaults", + "manual": "Manual signing", + "auto": "Automatic signing" + } + }, + { + "name": "signingIdentity", + "type": "string", + "label": "ms-resource:loc.input.label.signingIdentity", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.signingIdentity", + "groupName": "sign", + "visibleRule": "signingOption = manual" + }, + { + "name": "provisioningProfileUuid", + "type": "string", + "label": "ms-resource:loc.input.label.provisioningProfileUuid", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.provisioningProfileUuid", + "groupName": "sign", + "visibleRule": "signingOption = manual" + }, + { + "name": "provisioningProfileName", + "type": "string", + "label": "ms-resource:loc.input.label.provisioningProfileName", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.provisioningProfileName", + "groupName": "sign", + "visibleRule": "signingOption = manual" + }, + { + "name": "teamId", + "type": "string", + "label": "ms-resource:loc.input.label.teamId", + "defaultValue": "", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.teamId", + "groupName": "sign", + "visibleRule": "signingOption = auto" + }, + { + "name": "destinationPlatformOption", + "type": "picklist", + "label": "ms-resource:loc.input.label.destinationPlatformOption", + "defaultValue": "default", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.destinationPlatformOption", + "groupName": "devices", + "options": { + "default": "Default", + "iOS": "iOS and watchOS", + "tvOS": "tvOS", + "macOS": "macOS", + "custom": "Custom" + } + }, + { + "name": "destinationPlatform", + "type": "string", + "label": "ms-resource:loc.input.label.destinationPlatform", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.destinationPlatform", + "groupName": "devices", + "visibleRule": "destinationPlatformOption == custom" + }, + { + "name": "destinationTypeOption", + "type": "radio", + "label": "ms-resource:loc.input.label.destinationTypeOption", + "defaultValue": "simulators", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.destinationTypeOption", + "groupName": "devices", + "visibleRule": "destinationPlatformOption != default && destinationPlatformOption != macOS", + "options": { + "simulators": "Simulator", + "devices": "Connected Device" + } + }, + { + "name": "destinationSimulators", + "label": "ms-resource:loc.input.label.destinationSimulators", + "type": "string", + "defaultValue": "", + "required": false, + "groupName": "devices", + "helpMarkDown": "ms-resource:loc.input.help.destinationSimulators", + "visibleRule": "destinationPlatformOption != default && destinationPlatformOption != macOS && destinationTypeOption == simulators" + }, + { + "name": "destinationDevices", + "label": "ms-resource:loc.input.label.destinationDevices", + "type": "string", + "defaultValue": "", + "required": false, + "groupName": "devices", + "helpMarkDown": "ms-resource:loc.input.help.destinationDevices", + "visibleRule": "destinationPlatformOption != default && destinationPlatformOption != macOS && destinationTypeOption == devices" + }, + { + "name": "args", + "type": "string", + "label": "ms-resource:loc.input.label.args", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.args", + "groupName": "advanced" + }, + { + "name": "cwd", + "aliases": [ + "workingDirectory" + ], + "type": "filePath", + "label": "ms-resource:loc.input.label.cwd", + "defaultValue": "", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.cwd", + "groupName": "advanced" + }, + { + "name": "useXcpretty", + "type": "boolean", + "label": "ms-resource:loc.input.label.useXcpretty", + "required": false, + "defaultValue": true, + "helpMarkDown": "ms-resource:loc.input.help.useXcpretty", + "groupName": "advanced" + }, + { + "name": "xcprettyArgs", + "type": "string", + "label": "ms-resource:loc.input.label.xcprettyArgs", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.xcprettyArgs", + "groupName": "advanced", + "visibleRule": "useXcpretty == true" + }, + { + "name": "publishJUnitResults", + "type": "boolean", + "label": "ms-resource:loc.input.label.publishJUnitResults", + "required": false, + "defaultValue": false, + "groupName": "advanced", + "helpMarkDown": "ms-resource:loc.input.help.publishJUnitResults" + }, + { + "name": "testRunTitle", + "type": "string", + "label": "ms-resource:loc.input.label.testRunTitle", + "required": false, + "groupName": "advanced", + "helpMarkDown": "ms-resource:loc.input.help.testRunTitle", + "visibleRule": "publishJUnitResults == true" + } + ], + "execution": { + "Node10": { + "target": "xcode.js", + "argumentFormat": "" + }, + "Node16": { + "target": "xcode.js", + "argumentFormat": "" + } + }, + "postjobexecution": { + "Node10": { + "target": "postxcode.js", + "argumentFormat": "" + }, + "Node16": { + "target": "postxcode.js", + "argumentFormat": "" + } + }, + "messages": { + "SignIdNotFound": "ms-resource:loc.messages.SignIdNotFound", + "TempKeychainSetupFailed": "ms-resource:loc.messages.TempKeychainSetupFailed", + "ProvProfileDetailsNotFound": "ms-resource:loc.messages.ProvProfileDetailsNotFound", + "ProvProfileUUIDNotFound": "ms-resource:loc.messages.ProvProfileUUIDNotFound", + "MultipleWorkspacesFound": "ms-resource:loc.messages.MultipleWorkspacesFound", + "WorkspaceDoesNotExist": "ms-resource:loc.messages.WorkspaceDoesNotExist", + "UseXcprettyForTestPublishing": "ms-resource:loc.messages.UseXcprettyForTestPublishing", + "NoTestResultsFound": "ms-resource:loc.messages.NoTestResultsFound", + "XcodeSuccess": "ms-resource:loc.messages.XcodeSuccess", + "TempKeychainDeleteFailed": "ms-resource:loc.messages.TempKeychainDeleteFailed", + "ProvProfileDeleteFailed": "ms-resource:loc.messages.ProvProfileDeleteFailed", + "ExportMethodNotIdentified": "ms-resource:loc.messages.ExportMethodNotIdentified", + "ExportOptionsPlistInvalidFilePath": "ms-resource:loc.messages.ExportOptionsPlistInvalidFilePath", + "SchemeRequiredForArchive": "ms-resource:loc.messages.SchemeRequiredForArchive", + "WorkspaceOrProjectRequiredForArchive": "ms-resource:loc.messages.WorkspaceOrProjectRequiredForArchive", + "FailedToGenerateExportOptionsPlist": "ms-resource:loc.messages.FailedToGenerateExportOptionsPlist", + "LocateXcodeBasedOnVersion": "ms-resource:loc.messages.LocateXcodeBasedOnVersion", + "FailedToLocateSpecifiedXcode": "ms-resource:loc.messages.FailedToLocateSpecifiedXcode", + "CantDetermineProvisioningStyle": "ms-resource:loc.messages.CantDetermineProvisioningStyle", + "MultipleSchemesFound": "ms-resource:loc.messages.MultipleSchemesFound", + "NoSchemeFound": "ms-resource:loc.messages.NoSchemeFound", + "SchemeSelected": "ms-resource:loc.messages.SchemeSelected", + "FailedToFindScheme": "ms-resource:loc.messages.FailedToFindScheme", + "OutputDirectoryIgnored": "ms-resource:loc.messages.OutputDirectoryIgnored", + "NoDestinationPlatformWarning": "ms-resource:loc.messages.NoDestinationPlatformWarning", + "XcprettyNotInstalled": "ms-resource:loc.messages.XcprettyNotInstalled", + "XcodeRequiresMac": "ms-resource:loc.messages.XcodeRequiresMac", + "UsingDefaultSimulator": "ms-resource:loc.messages.UsingDefaultSimulator" + }, + "_buildConfigMapping": { + "Default": "5.229.3", + "Node20-225": "5.229.4" + } +} \ No newline at end of file diff --git a/_generated/XcodeV5/tsconfig.json b/_generated/XcodeV5/tsconfig.json new file mode 100644 index 000000000000..0438b79f69ac --- /dev/null +++ b/_generated/XcodeV5/tsconfig.json @@ -0,0 +1,6 @@ +{ + "compilerOptions": { + "target": "ES6", + "module": "commonjs" + } +} \ No newline at end of file diff --git a/_generated/XcodeV5/xcode.ts b/_generated/XcodeV5/xcode.ts new file mode 100644 index 000000000000..d3f7555a1122 --- /dev/null +++ b/_generated/XcodeV5/xcode.ts @@ -0,0 +1,507 @@ +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 utils = require('./xcodeutils'); +import * as telemetry from 'azure-pipelines-tasks-utility-common/telemetry'; + +import { ToolRunner } from 'azure-pipelines-task-lib/toolrunner'; + +async function run() { + const telemetryData: { [key: string]: any; } = {}; + + try { + tl.setResourcePath(path.join(__dirname, 'task.json')); + + //-------------------------------------------------------- + // Tooling + //-------------------------------------------------------- + + let xcodeVersionSelection: string = tl.getInput('xcodeVersion', true); + telemetryData.xcodeVersionSelection = xcodeVersionSelection; + + if (xcodeVersionSelection === 'specifyPath') { + let devDir = tl.getInput('xcodeDeveloperDir', true); + tl.setVariable('DEVELOPER_DIR', devDir); + if (devDir) { + telemetryData.xcodeFileName = utils.getXcodeFileName(devDir); + } + } + else if (xcodeVersionSelection !== 'default') { + // resolve the developer dir for a version like "8" or "9". + let devDir = utils.findDeveloperDir(xcodeVersionSelection); + tl.setVariable('DEVELOPER_DIR', devDir); + } + + let tool: string = tl.which('xcodebuild', true); + tl.debug('Tool selected: ' + tool); + + let workingDir: string = tl.getPathInput('cwd'); + tl.cd(workingDir); + + //-------------------------------------------------------- + // Xcode args + //-------------------------------------------------------- + let ws: string = tl.getPathInput('xcWorkspacePath', false, false); + if (tl.filePathSupplied('xcWorkspacePath')) { + let workspaceMatches = tl.findMatch(workingDir, ws, { allowBrokenSymbolicLinks: false, followSpecifiedSymbolicLink: false, followSymbolicLinks: false }); + tl.debug("Found " + workspaceMatches.length + ' workspaces matching.'); + + if (workspaceMatches.length > 0) { + ws = workspaceMatches[0]; + if (workspaceMatches.length > 1) { + tl.warning(tl.loc('MultipleWorkspacesFound', ws)); + } + } + else { + throw new Error(tl.loc('WorkspaceDoesNotExist', ws)); + } + } + + let isProject = false; + if (ws && ws.trim().toLowerCase().endsWith('.xcodeproj')) { + isProject = true; + } + + let scheme: string = tl.getInput('scheme', false); + + // If we have a workspace argument but no scheme, see if there's + // single shared scheme we can use. + if (!scheme && !isProject && ws && tl.filePathSupplied('xcWorkspacePath')) { + try { + let schemes: string[] = await utils.getWorkspaceSchemes(tool, ws); + + if (schemes.length > 1) { + tl.warning(tl.loc('MultipleSchemesFound')); + } + else if (schemes.length === 0) { + tl.warning(tl.loc('NoSchemeFound')); + } + else { + scheme = schemes[0]; + console.log(tl.loc('SchemeSelected', scheme)); + } + } + catch (err) { + tl.warning(tl.loc('FailedToFindScheme')); + } + } + + let destinations: string[]; + + let platform: string = tl.getInput('destinationPlatformOption', false); + if (platform === 'custom') { + // Read the custom platform from the text input. + platform = tl.getInput('destinationPlatform', false); + } + + if (platform === 'macOS') { + destinations = ['platform=macOS']; + } + else if (platform && platform !== 'default') { + // To be yaml friendly, destinationTypeOption is optional and we default to simulators. + let destinationType: string = tl.getInput('destinationTypeOption', false); + let targetingSimulators: boolean = destinationType !== 'devices'; + + let devices: string[]; + if (targetingSimulators) { + let simulator = tl.getInput('destinationSimulators'); + + if(!simulator){ + simulator = utils.getDefaultSimulator(platform, xcodeVersionSelection); + console.log(tl.loc('UsingDefaultSimulator', simulator)); + } + + // Only one simulator for now. + devices = [simulator]; + } + else { + // Only one device for now. + devices = [tl.getInput('destinationDevices')]; + } + + destinations = utils.buildDestinationArgs(platform, devices, targetingSimulators); + } + + let sdk: string = tl.getInput('sdk', false); + let configuration: string = tl.getInput('configuration', false); + let useXcpretty: boolean = tl.getBoolInput('useXcpretty', false); + let actions: string[] = tl.getDelimitedInput('actions', ' ', true); + let packageApp: boolean = tl.getBoolInput('packageApp', true); + let args: string = tl.getInput('args', false); + + telemetryData.actions = actions; + telemetryData.packageApp = packageApp; + + //-------------------------------------------------------- + // Exec Tools + //-------------------------------------------------------- + + // --- Xcode Version --- + let xcv: ToolRunner = tl.tool(tool); + xcv.arg('-version'); + let xcodeMajorVersion: number = 0; + xcv.on('stdout', (data) => { + const match = data.toString().trim().match(/Xcode (.+)/g); + tl.debug('match = ' + match); + if (match) { + const versionString = match.toString().replace('Xcode', '').trim(); + const majorVersion: number = parseInt(versionString); + tl.debug('majorVersion = ' + majorVersion); + telemetryData.xcodeVersion = versionString; + + if (!isNaN(majorVersion)) { + xcodeMajorVersion = majorVersion; + } + } + }); + + await xcv.exec(); + tl.debug('xcodeMajorVersion = ' + xcodeMajorVersion); + + // --- Xcode build arguments --- + let xcb: ToolRunner = tl.tool(tool); + xcb.argIf(sdk, ['-sdk', sdk]); + xcb.argIf(configuration, ['-configuration', configuration]); + if (ws && tl.filePathSupplied('xcWorkspacePath')) { + xcb.argIf(isProject, '-project'); + xcb.argIf(!isProject, '-workspace'); + xcb.arg(ws); + } + xcb.argIf(scheme, ['-scheme', scheme]); + // Add a -destination argument for each device and simulator. + if (destinations) { + destinations.forEach(destination => { + xcb.arg(['-destination', destination]); + }); + } + xcb.arg(actions); + if (args) { + xcb.line(args); + } + + //-------------------------------------------------------- + // iOS signing and provisioning + //-------------------------------------------------------- + let signingOption: string = tl.getInput('signingOption', true); + let xcode_codeSigningAllowed: string; + let xcode_codeSignStyle: string; + let xcode_otherCodeSignFlags: string; + let xcode_codeSignIdentity: string; + let xcode_provProfile: string; + let xcode_provProfileSpecifier: string; + let xcode_devTeam: string; + + telemetryData.signingOption = signingOption; + + if (signingOption === 'nosign') { + xcode_codeSigningAllowed = 'CODE_SIGNING_ALLOWED=NO'; + } + else if (signingOption === 'manual') { + xcode_codeSignStyle = 'CODE_SIGN_STYLE=Manual'; + + const signIdentity: string = tl.getInput('signingIdentity'); + if (signIdentity) { + xcode_codeSignIdentity = 'CODE_SIGN_IDENTITY=' + signIdentity; + } + + let provProfileUUID: string = tl.getInput('provisioningProfileUuid'); + let provProfileName: string = tl.getInput('provisioningProfileName'); + + if (!provProfileUUID) { + provProfileUUID = ""; + } + + if (!provProfileName) { + provProfileName = ""; + } + + // PROVISIONING_PROFILE_SPECIFIER takes predence over PROVISIONING_PROFILE, + // so it's important to pass it to Xcode even if it's empty. That way Xcode + // will ignore any specifier in the project file and honor the specifier + // or uuid we passed on the commandline. If the user wants to use the specifier + // in the project file, they should choose the "Project Defaults" signing style. + xcode_provProfile = `PROVISIONING_PROFILE=${provProfileUUID}`; + xcode_provProfileSpecifier = `PROVISIONING_PROFILE_SPECIFIER=${provProfileName}`; + } + else if (signingOption === 'auto') { + xcode_codeSignStyle = 'CODE_SIGN_STYLE=Automatic'; + + let teamId: string = tl.getInput('teamId'); + if (teamId) { + xcode_devTeam = 'DEVELOPMENT_TEAM=' + teamId; + } + } + + xcb.argIf(xcode_codeSigningAllowed, xcode_codeSigningAllowed); + xcb.argIf(xcode_codeSignStyle, xcode_codeSignStyle); + xcb.argIf(xcode_codeSignIdentity, xcode_codeSignIdentity); + xcb.argIf(xcode_provProfile, xcode_provProfile); + xcb.argIf(xcode_provProfileSpecifier, xcode_provProfileSpecifier); + xcb.argIf(xcode_devTeam, xcode_devTeam); + + //--- Enable Xcpretty formatting --- + if (useXcpretty && !tl.which('xcpretty')) { + // user wants to enable xcpretty but it is not installed, fallback to xcodebuild raw output + useXcpretty = false; + tl.warning(tl.loc("XcprettyNotInstalled")); + } + + if (useXcpretty) { + let xcPrettyPath: string = tl.which('xcpretty', true); + let xcPrettyTool: ToolRunner = tl.tool(xcPrettyPath); + xcPrettyTool.arg(['-r', 'junit', '--no-color']); + const xcPrettyArgs: string = tl.getInput('xcprettyArgs'); + if (xcPrettyArgs) { + xcPrettyTool.line(xcPrettyArgs); + } + + const logFile: string = utils.getUniqueLogFileName('xcodebuild'); + xcb.pipeExecOutputToTool(xcPrettyTool, logFile); + utils.setTaskState('XCODEBUILD_LOG', logFile); + } + + //--- Xcode Build --- + let buildOnlyDeviceErrorFound: boolean; + xcb.on('errline', (line: string) => { + if (!buildOnlyDeviceErrorFound && line.includes('build only device cannot be used to run this target')) { + buildOnlyDeviceErrorFound = true; + } + }); + + try { + await xcb.exec(); + } catch (err) { + if (buildOnlyDeviceErrorFound) { + // Tell the user they need to change Destination platform to fix this build error. + tl.warning(tl.loc('NoDestinationPlatformWarning')); + } + throw err; + } + + //-------------------------------------------------------- + // Package app to generate .ipa + //-------------------------------------------------------- + + if (packageApp && sdk !== 'iphonesimulator') { + // use xcodebuild to create the app package + if (!scheme) { + throw new Error(tl.loc("SchemeRequiredForArchive")); + } + if (!ws || !tl.filePathSupplied('xcWorkspacePath')) { + throw new Error(tl.loc("WorkspaceOrProjectRequiredForArchive")); + } + + // create archive + let xcodeArchive: ToolRunner = tl.tool(tl.which('xcodebuild', true)); + if (ws && tl.filePathSupplied('xcWorkspacePath')) { + xcodeArchive.argIf(isProject, '-project'); + xcodeArchive.argIf(!isProject, '-workspace'); + xcodeArchive.arg(ws); + } + xcodeArchive.argIf(scheme, ['-scheme', scheme]); + xcodeArchive.arg('archive'); //archive action + xcodeArchive.argIf(sdk, ['-sdk', sdk]); + xcodeArchive.argIf(configuration, ['-configuration', configuration]); + let archivePath: string = tl.getInput('archivePath'); + let archiveFolderRoot: string; + if (!archivePath.endsWith('.xcarchive')) { + archiveFolderRoot = archivePath; + archivePath = tl.resolve(archivePath, scheme); + } else { + //user specified a file path for archivePath + archiveFolderRoot = path.dirname(archivePath); + } + xcodeArchive.arg(['-archivePath', archivePath]); + xcodeArchive.argIf(xcode_otherCodeSignFlags, xcode_otherCodeSignFlags); + xcodeArchive.argIf(xcode_codeSigningAllowed, xcode_codeSigningAllowed); + xcodeArchive.argIf(xcode_codeSignStyle, xcode_codeSignStyle); + xcodeArchive.argIf(xcode_codeSignIdentity, xcode_codeSignIdentity); + xcodeArchive.argIf(xcode_provProfile, xcode_provProfile); + xcodeArchive.argIf(xcode_provProfileSpecifier, xcode_provProfileSpecifier); + xcodeArchive.argIf(xcode_devTeam, xcode_devTeam); + if (args) { + xcodeArchive.line(args); + } + + if (useXcpretty) { + let xcPrettyTool: ToolRunner = tl.tool(tl.which('xcpretty', true)); + xcPrettyTool.arg('--no-color'); + const xcPrettyArgs: string = tl.getInput('xcprettyArgs'); + if (xcPrettyArgs) { + xcPrettyTool.line(xcPrettyArgs); + } + + const logFile: string = utils.getUniqueLogFileName('xcodebuild_archive'); + xcodeArchive.pipeExecOutputToTool(xcPrettyTool, logFile); + utils.setTaskState('XCODEBUILD_ARCHIVE_LOG', logFile); + } + await xcodeArchive.exec(); + + let archiveFolders: string[] = tl.findMatch(archiveFolderRoot, '**/*.xcarchive', { allowBrokenSymbolicLinks: false, followSpecifiedSymbolicLink: false, followSymbolicLinks: false }); + if (archiveFolders && archiveFolders.length > 0) { + tl.debug(archiveFolders.length + ' archives found for exporting.'); + + //export options plist + let exportOptions: string = tl.getInput('exportOptions'); + let exportMethod: string; + let exportTeamId: string; + let exportOptionsPlist: string; + let archiveToCheck: string = archiveFolders[0]; + let macOSEmbeddedProfilesFound: boolean; + + telemetryData.exportOptions = exportOptions; + + // iOS provisioning profiles use the .mobileprovision suffix. macOS profiles have the .provisionprofile suffix. + let embeddedProvProfiles: string[] = tl.findMatch(archiveToCheck, '**/embedded.mobileprovision', { allowBrokenSymbolicLinks: false, followSpecifiedSymbolicLink: false, followSymbolicLinks: false }); + + if (embeddedProvProfiles && embeddedProvProfiles.length > 0) { + tl.debug(`${embeddedProvProfiles.length} iOS embedded.mobileprovision file(s) found.`); + } else { + embeddedProvProfiles = tl.findMatch(archiveToCheck, '**/embedded.provisionprofile', { allowBrokenSymbolicLinks: false, followSpecifiedSymbolicLink: false, followSymbolicLinks: false }); + + if (embeddedProvProfiles && embeddedProvProfiles.length > 0) { + tl.debug(`${embeddedProvProfiles.length} macOS embedded.provisionprofile file(s) found.`); + macOSEmbeddedProfilesFound = true; + } + } + + if (exportOptions === 'auto') { + // Automatically try to detect the export-method to use from the provisioning profile + // embedded in the .xcarchive file + if (embeddedProvProfiles && embeddedProvProfiles.length > 0) { + tl.debug('embedded prov profile = ' + embeddedProvProfiles[0]); + + if (macOSEmbeddedProfilesFound) { + exportMethod = await sign.getmacOSProvisioningProfileType(embeddedProvProfiles[0]); + } else { + exportMethod = await sign.getiOSProvisioningProfileType(embeddedProvProfiles[0]); + } + + tl.debug('Using export method = ' + exportMethod); + } + + // If you create a simple macOS app with automatic signing and no entitlements, it won't have an embedded profile. + // And export for that app will work with an empty exportOptionsPlist. + if (!exportMethod && sdk && sdk !== 'macosx') { + tl.warning(tl.loc('ExportMethodNotIdentified')); + } + } else if (exportOptions === 'specify') { + exportMethod = tl.getInput('exportMethod', true); + exportTeamId = tl.getInput('exportTeamId'); + } else if (exportOptions === 'plist') { + exportOptionsPlist = tl.getInput('exportOptionsPlist'); + if (!tl.filePathSupplied('exportOptionsPlist') || !utils.pathExistsAsFile(exportOptionsPlist)) { + throw new Error(tl.loc('ExportOptionsPlistInvalidFilePath', exportOptionsPlist)); + } + } + + if (exportOptions !== 'plist') { + // As long as the user didn't provide a plist, start with an empty one. + // Xcode 7 warns "-exportArchive without -exportOptionsPlist is deprecated" + // Xcode 8+ will error if a plist isn't provided. + let plist: string = tl.which('/usr/libexec/PlistBuddy', true); + + exportOptionsPlist = '_XcodeTaskExportOptions.plist'; + tl.tool(plist).arg(['-c', 'Clear', exportOptionsPlist]).execSync(); + + // Add the teamId if provided. + if (exportTeamId) { + tl.tool(plist).arg(['-c', 'Add teamID string ' + exportTeamId, exportOptionsPlist]).execSync(); + } + + // Add the export method if provided or determined above. + if (exportMethod) { + tl.tool(plist).arg(['-c', 'Add method string ' + exportMethod, exportOptionsPlist]).execSync(); + } + + // For auto export, conditionally add entitlements, signingStyle and provisioning profiles. + if (xcodeMajorVersion >= 9 && exportOptions === 'auto') { + // Propagate any iCloud entitlement. + if (embeddedProvProfiles && embeddedProvProfiles.length > 0) { + const cloudEntitlement = await sign.getCloudEntitlement(embeddedProvProfiles[0], exportMethod); + if (cloudEntitlement) { + tl.debug("Adding cloud entitlement"); + tl.tool(plist).arg(['-c', `Add iCloudContainerEnvironment string ${cloudEntitlement}`, exportOptionsPlist]).execSync(); + } + } + + let signingOptionForExport = signingOption; + + // If we're using the project defaults, scan the pbxProject file for the type of signing being used. + if (signingOptionForExport === 'default') { + signingOptionForExport = await utils.getProvisioningStyle(ws); + + if (!signingOptionForExport) { + tl.warning(tl.loc('CantDetermineProvisioningStyle')); + } + } + + if (signingOptionForExport === 'manual') { + // Xcode 9 manual signing, set code sign style = manual + tl.tool(plist).arg(['-c', 'Add signingStyle string ' + 'manual', exportOptionsPlist]).execSync(); + + // add provisioning profiles to the exportOptions plist + // find bundle Id from Info.plist and prov profile name from the embedded profile in each .app package + tl.tool(plist).arg(['-c', 'Add provisioningProfiles dict', exportOptionsPlist]).execSync(); + + for (let i = 0; i < embeddedProvProfiles.length; i++) { + let embeddedProvProfile: string = embeddedProvProfiles[i]; + let profileName: string = await sign.getProvisioningProfileName(embeddedProvProfile); + tl.debug('embedded provisioning profile = ' + embeddedProvProfile + ', profile name = ' + profileName); + + let embeddedInfoPlist: string = tl.resolve(path.dirname(embeddedProvProfile), 'Info.plist'); + let bundleId: string = await sign.getBundleIdFromPlist(embeddedInfoPlist); + tl.debug('embeddedInfoPlist path = ' + embeddedInfoPlist + ', bundle identifier = ' + bundleId); + + if (!profileName || !bundleId) { + throw new Error(tl.loc('FailedToGenerateExportOptionsPlist')); + } + + tl.tool(plist).arg(['-c', 'Add provisioningProfiles:' + bundleId + ' string ' + profileName, exportOptionsPlist]).execSync(); + } + } + } + } + + //export path + let exportPath: string = tl.getInput('exportPath'); + + for (let i = 0; i < archiveFolders.length; i++) { + let archive: string = archiveFolders.pop(); + + //export the archive + let xcodeExport: ToolRunner = tl.tool(tl.which('xcodebuild', true)); + xcodeExport.arg(['-exportArchive', '-archivePath', archive]); + xcodeExport.arg(['-exportPath', exportPath]); + xcodeExport.argIf(exportOptionsPlist, ['-exportOptionsPlist', exportOptionsPlist]); + let exportArgs: string = tl.getInput('exportArgs'); + xcodeExport.argIf(exportArgs, exportArgs); + + if (useXcpretty) { + let xcPrettyTool: ToolRunner = tl.tool(tl.which('xcpretty', true)); + xcPrettyTool.arg('--no-color'); + const xcPrettyArgs: string = tl.getInput('xcprettyArgs'); + if (xcPrettyArgs) { + xcPrettyTool.line(xcPrettyArgs); + } + + const logFile: string = utils.getUniqueLogFileName('xcodebuild_export'); + xcodeExport.pipeExecOutputToTool(xcPrettyTool, logFile); + utils.setTaskState('XCODEBUILD_EXPORT_LOG', logFile); + } + await xcodeExport.exec(); + } + } + } + tl.setResult(tl.TaskResult.Succeeded, tl.loc('XcodeSuccess')); + } + catch (err) { + tl.setResult(tl.TaskResult.Failed, err); + } + finally { + // Publish telemetry + telemetry.emitTelemetry('TaskHub', 'Xcode', telemetryData); + } +} + +run(); diff --git a/_generated/XcodeV5/xcodeutils.ts b/_generated/XcodeV5/xcodeutils.ts new file mode 100644 index 000000000000..721068f632c0 --- /dev/null +++ b/_generated/XcodeV5/xcodeutils.ts @@ -0,0 +1,276 @@ +import tl = require('azure-pipelines-task-lib/task'); +const readline = require('readline'); +const fs = require('fs'); + +import { ToolRunner } from 'azure-pipelines-task-lib/toolrunner'; +import * as semver from 'semver'; + +// These fallback paths are checked if a XCODE_N_DEVELOPER_DIR environment variable is not found. +// Using the environment variable for resolution is preferable to these hardcoded paths. +const fallbackDeveloperDirs = { + "8": "/Applications/Xcode_8.3.3.app/Contents/Developer", + "9": "/Applications/Xcode_9.1.app/Contents/Developer" +}; + +const DefaultSimulators = { + iPhone7: 'iPhone 7', + iPhone8: 'iPhone 8', + appleTv: 'Apple TV' +} + +export function setTaskState(variableName: string, variableValue: string) { + if (agentSupportsTaskState()) { + tl.setTaskVariable(variableName, variableValue); + } +} + +export function getTaskState(variableName: string) { + if (agentSupportsTaskState()) { + return tl.getTaskVariable(variableName); + } +} + +export function findDeveloperDir(xcodeVersion: string): string { + tl.debug(tl.loc('LocateXcodeBasedOnVersion', xcodeVersion)); + + // xcodeVersion should be in the form of "8" or "9". + // envName for version 9.*.* would be "XCODE_9_DEVELOPER_DIR" + let envName = `XCODE_${xcodeVersion}_DEVELOPER_DIR`; + let discoveredDeveloperDir = tl.getVariable(envName); + if (!discoveredDeveloperDir) { + discoveredDeveloperDir = fallbackDeveloperDirs[xcodeVersion]; + + if (discoveredDeveloperDir && !tl.exist(discoveredDeveloperDir)) { + tl.debug(`Ignoring fallback developer path. ${discoveredDeveloperDir} doesn't exist.`); + discoveredDeveloperDir = undefined; + } + + if (!discoveredDeveloperDir) { + throw new Error(tl.loc('FailedToLocateSpecifiedXcode', xcodeVersion, envName)); + } + } + + return discoveredDeveloperDir; +} + +export function buildDestinationArgs(platform: string, devices: string[], targetingSimulators: boolean): string[] { + let destinations: string[] = []; + + devices.forEach((device: string) => { + device = device.trim(); + + let destination; + if (device) { + if (targetingSimulators) { + destination = `platform=${platform} Simulator`; + } + else { + destination = `platform=${platform}`; + } + + // The device name may be followed by additional key-value pairs. Example: "iPhone X,OS=11.1" + destination += `,name=${device}`; + + tl.debug(`Constructed destination: ${destination}`); + destinations.push(destination); + } + }); + + return destinations; +} + +/** + * Queries the schemes in a workspace. + * @param xcbuild xcodebuild path + * @param workspace workspace path + * + * Testing shows Xcode 9 returns shared schemes only (a good thing). + */ +export async function getWorkspaceSchemes(xcbuild: string, workspace: string) : Promise { + let xcv: ToolRunner = tl.tool(xcbuild); + xcv.arg(['-workspace', workspace]); + xcv.arg('-list'); + + let schemes: string[] = []; + let inSchemesSection = false; + + let output = ''; + xcv.on('stdout', (data) => { + output = output + data.toString(); + }); + await xcv.exec(); + + output.split('\n').forEach((line: string) => { + tl.debug(`Line: ${line}`); + + line = line.trim(); + + if (inSchemesSection) { + if (line !== '') { + tl.debug(`Scheme: ${line}`); + schemes.push(line); + } + else { + inSchemesSection = false; + } + } + else if (line === 'Schemes:') { + inSchemesSection = true; + } + }); + + return schemes; +} + +/** + * Returns the first provisioning/signing style found in workspace's project files: "auto", "manual" or undefined if not found. + */ +export async function getProvisioningStyle(workspace: string) : Promise { + let provisioningStyle: string; + + if (workspace) { + let pbxProjectPath = getPbxProjectPath(workspace); + tl.debug(`pbxProjectPath is ${pbxProjectPath}`); + + if (pbxProjectPath) { + provisioningStyle = await getProvisioningStyleFromPbxProject(pbxProjectPath); + tl.debug(`pbxProjectPath provisioning style: ${provisioningStyle}`); + } + } + + return provisioningStyle; +} + +function getPbxProjectPath(workspace: string) { + if (workspace && workspace.trim().toLowerCase().endsWith('.xcworkspace')) { + let pbxProjectPath: string = workspace.trim().toLowerCase().replace('.xcworkspace', '.pbxproj'); + + if (pathExistsAsFile(pbxProjectPath)) { + return pbxProjectPath; + } + + tl.debug("Corresponding pbxProject file doesn't exist: " + pbxProjectPath + ", checking alternative location"); + + let altPbxProjectPath = workspace.trim().toLowerCase().replace('.xcworkspace', '.xcodeproj/project.pbxproj'); + if (pathExistsAsFile(altPbxProjectPath)) { + return altPbxProjectPath; + } + else { + tl.debug("Corresponding pbxProject file doesn't exist at alternative location: " + altPbxProjectPath); + } + } +} + +function getProvisioningStyleFromPbxProject(pbxProjectPath) : Promise { + return new Promise((resolve, reject) => { + const rl = readline.createInterface({ + input: fs.createReadStream(pbxProjectPath) + }); + let firstProvisioningStyleFound = false; + let linesExamined = 0; + rl.on('line', (line) => { + if (!firstProvisioningStyleFound) { + linesExamined++; + let trimmedLine = line.trim(); + if (trimmedLine === 'ProvisioningStyle = Automatic;') { + tl.debug(`first provisioning style line: ${line}`); + firstProvisioningStyleFound = true; + resolve("auto"); + } + else if (trimmedLine === 'ProvisioningStyle = Manual;') { + tl.debug(`first provisioning style line: ${line}`); + firstProvisioningStyleFound = true; + resolve("manual"); + } + } + }).on('close', () => { + if (!firstProvisioningStyleFound) { + tl.debug(`close event occurred before a provisioning style was found in the pbxProject file. Lines examined: ${linesExamined}`); + resolve(undefined); + } + }); + }); +} + +export function pathExistsAsFile(path: string) { + try { + return tl.stats(path).isFile(); + } + catch (error) { + return false; + } +} + +export function getUniqueLogFileName(logPrefix: string): string { + //find a unique log file name + let filePath: string = tl.resolve(tl.getVariable('Agent.TempDirectory'), logPrefix + '.log'); + let index = 1; + while (tl.exist(filePath)) { + filePath = tl.resolve(tl.getVariable('Agent.TempDirectory'), logPrefix + index.toString() + '.log'); + index++; + } + + return filePath; +} + +export function uploadLogFile(logFile: string) { + if (tl.exist(logFile)) { + console.log(`##vso[task.uploadfile]${logFile}`); + } +} + +// Same signature and behavior as utility-common/telemetry's emitTelemetry, minus the common vars. +export function emitTelemetry(area: string, feature: string, taskSpecificTelemetry: { [key: string]: any; }): void { + try { + let agentVersion = tl.getVariable('Agent.Version'); + if (semver.gte(agentVersion, '2.120.0')) { + console.log("##vso[telemetry.publish area=%s;feature=%s]%s", + area, + feature, + JSON.stringify(taskSpecificTelemetry)); + } else { + tl.debug(`Agent version is ${agentVersion}. Version 2.120.0 or higher is needed for telemetry.`); + } + } catch (err) { + tl.debug(`Unable to log telemetry. Err:( ${err} )`); + } +} + +function agentSupportsTaskState() { + let agentSupportsTaskState = true; + try { + tl.assertAgent('2.115.0'); + } catch (e) { + agentSupportsTaskState = false; + } + return agentSupportsTaskState; +} + +/** + * Getting default simulator according to the platform and xcode + * @param platform selected platform option + * @param xcodeVersion selected xcode version option + */ +export function getDefaultSimulator(platform: string, xcodeVersion: string): string { + let iPhoneSimulator = DefaultSimulators.iPhone7; + const appleTvSimulator = DefaultSimulators.appleTv; + + if (xcodeVersion !== 'default' && xcodeVersion !== 'specifyPath') { + const xcodeVersionNumber = parseInt(xcodeVersion); + if (xcodeVersionNumber && xcodeVersionNumber >= 11) { + iPhoneSimulator = DefaultSimulators.iPhone8; + } + } + + return platform === 'tvOS' ? appleTvSimulator : iPhoneSimulator; +} + +/** + * Return file name of Xcode application (e.g Xcode_12.1.app) + * if the name has .app extention, otherwise return 'unknown Xcode filename' + * @param xcodeDeveloperDir path to Xcode + */ +export function getXcodeFileName(xcodeDeveloperDir: string): string { + const xcodeFileName: string = xcodeDeveloperDir.split('/').find(item => item.includes('.app')); + return xcodeFileName || 'unknown Xcode filename'; +} diff --git a/_generated/XcodeV5_Node20/.npmrc b/_generated/XcodeV5_Node20/.npmrc new file mode 100644 index 000000000000..5fca0d518be7 --- /dev/null +++ b/_generated/XcodeV5_Node20/.npmrc @@ -0,0 +1 @@ +scripts-prepend-node-path=true diff --git a/_generated/XcodeV5_Node20/Strings/resources.resjson/de-DE/resources.resjson b/_generated/XcodeV5_Node20/Strings/resources.resjson/de-DE/resources.resjson new file mode 100644 index 000000000000..71809588b74c --- /dev/null +++ b/_generated/XcodeV5_Node20/Strings/resources.resjson/de-DE/resources.resjson @@ -0,0 +1,101 @@ +{ + "loc.friendlyName": "Xcode", + "loc.helpMarkDown": "[Weitere Informationen zu dieser Aufgabe](https://go.microsoft.com/fwlink/?LinkID=613730) oder [Xcode-Dokumentation anzeigen](https://developer.apple.com/xcode/)", + "loc.description": "Hiermit wird ein Xcode-Arbeitsbereich unter macOS erstellt, getestet oder archiviert. Optional kann eine App paketiert werden.", + "loc.instanceNameFormat": "Xcode $(actions)", + "loc.releaseNotes": "Diese Version der Aufgabe ist mit Xcode 8 bis 13 kompatibel. Features, die ausschließlich der Kompatibilität mit Xcode 7 dienten, wurden entfernt. Die Aufgabe umfasst verbesserte Optionen zur Verwendung von macOS-Agents, die von Microsoft gehostet werden.", + "loc.group.displayName.sign": "Signierung und Bereitstellung", + "loc.group.displayName.package": "Paketoptionen", + "loc.group.displayName.devices": "Geräte und Simulatoren", + "loc.group.displayName.advanced": "Erweitert", + "loc.input.label.actions": "Aktionen", + "loc.input.help.actions": "Geben Sie eine durch Leerzeichen getrennte Liste mit Aktionen ein. Gültige Optionen sind beispielsweise \"build\", \"clean\", \"test\", \"analyze\" und \"archive\". Über \"clean build\" wird beispielsweise ein bereinigter Build ausgeführt.", + "loc.input.label.configuration": "Konfiguration", + "loc.input.help.configuration": "Geben Sie das Xcode-Projekt oder die Arbeitsbereichskonfiguration ein, das bzw. die erstellt werden soll. Als Standardwert für dieses Feld wird die Variable \"$(Configuration)\" verwendet. Bei Verwendung einer Variablen müssen Sie sicherstellen, dass ein Wert (z. B. \"Release\") auf der Registerkarte **Variablen** angegeben wird.", + "loc.input.label.sdk": "SDK", + "loc.input.help.sdk": "Geben Sie ein SDK für die Erstellung des Xcode-Projekts oder -Arbeitsbereichs an. Führen Sie aus der macOS-Terminalanwendung \"xcodebuild -showsdks\" aus, um die Liste gültiger SDKs anzuzeigen. Der Wert für dieses Feld ist standardmäßig auf die Variable \"$(SDK)\" festgelegt. Bei Verwendung einer Variablen müssen Sie sicherstellen, dass ein Wert (z. B. \"iphonesimulator\") auf der Registerkarte **Variablen** angegeben ist.", + "loc.input.label.xcWorkspacePath": "Arbeitsbereich oder Projektpfad", + "loc.input.help.xcWorkspacePath": "(Optional) Geben Sie einen relativen Pfad vom Stamm des Repositorys zum Xcode-Arbeitsbereich oder zum Projekt an. Beispiel: \"MyApp/MyApp.xcworkspace\" oder \"MyApp/MyApp.xcodeproj\". Platzhalter können verwendet werden ([weitere Informationen](https://go.microsoft.com/fwlink/?linkid=856077)).", + "loc.input.label.scheme": "Schema", + "loc.input.help.scheme": "(Optional) Geben Sie den Namen eines in Xcode definierten Schemas an. Es muss sich um ein freigegebenes Schema handeln, für das das Kontrollkästchen Freigegeben unter Verwaltete Schemas in Xcode aktiviert ist. Wenn Sie oben einen Arbeitsbereich oder Projektpfad ohne ein Schema angeben, und der Arbeitsbereich nur ein einziges freigegebenes Schema umfasst, wird dieses automatisch verwendet.", + "loc.input.label.xcodeVersion": "Xcode-Version", + "loc.input.help.xcodeVersion": "Geben Sie die Zielversion von Xcode an. Wählen Sie \"Standard\" aus, um die Standardversion von Xcode auf dem Agentcomputer zu verwenden. Die Auswahl einer Versionsnummer (z. B. \"Xcode 9\") hängt davon ab, ob für den Versionsspeicherort auf dem Agentcomputer Umgebungsvariablen festgelegt werden (z. B. \"XCODE_9_DEVELOPER_DIR=/Applications/Xcode_9.0.0.app/Contents/Developer\"). Wählen Sie \"Pfad angeben\" aus, um einen bestimmten Pfad zum Xcode-Entwicklerverzeichnis anzugeben.
Hinweis: XCode 12 ist auf macOS-10.15 installiert (oder höher)", + "loc.input.label.xcodeDeveloperDir": "Xcode-Entwicklerpfad", + "loc.input.help.xcodeDeveloperDir": "(Optional) Geben Sie einen Pfad zu einem bestimmten Xcode-Entwicklerverzeichnis an (z. B. \"/Applications/Xcode_9.0.0.app/Contents/Developer\"). Dies ist nützlich, wenn mehrere Versionen von Xcode auf dem Agent-Computer installiert sind.", + "loc.input.label.packageApp": "App-Paket erstellen", + "loc.input.help.packageApp": "Geben Sie an, ob eine IPA-App-Paketdatei als Teil des Builds generiert werden soll.", + "loc.input.label.archivePath": "Archivpfad", + "loc.input.help.archivePath": "(Optional) Geben Sie ein Verzeichnis an, in dem erstellte Archive abgelegt werden sollen.", + "loc.input.label.exportPath": "Exportpfad", + "loc.input.help.exportPath": "(Optional) Geben Sie das Ziel für das aus dem Archiv exportierte Produkt an.", + "loc.input.label.exportOptions": "Exportoptionen", + "loc.input.help.exportOptions": "Wählen Sie eine Methode zum Angeben von Optionen für das Exportieren des Archivs ein. Bei Auswahl des Standardwerts \"Automatisch\" wird die Exportmethode automatisch aus dem Archiv erkannt. Wählen Sie \"PLIST\", um eine PLIST-Datei mit Exportoptionen anzugeben. Wählen Sie \"Angeben\" aus, um eine bestimmte **Exportmethode** und eine **Team-ID** anzugeben.", + "loc.input.label.exportMethod": "Exportmethode", + "loc.input.help.exportMethod": "Geben Sie die Methode ein, die Xcode zum Exportieren des Archivs verwenden soll. Beispiel: \"app-store\", \"package\", \"ad-hoc\", \"enterprise\" oder \"development\".", + "loc.input.label.exportTeamId": "Team-ID", + "loc.input.help.exportTeamId": "(Optional) Geben Sie die aus 10 Zeichen bestehende Team-ID aus dem Apple Developer-Portal ein, die beim Export verwendet werden soll.", + "loc.input.label.exportOptionsPlist": "PLIST-Datei mit Exportoptionen", + "loc.input.help.exportOptionsPlist": "Geben Sie den Pfad zur PLIST-Datei ein, die Optionen für den Export enthält.", + "loc.input.label.exportArgs": "Exportargumente", + "loc.input.help.exportArgs": "(Optional) Geben Sie zusätzliche Befehlszeilenargumente ein, die beim Export verwendet werden.", + "loc.input.label.signingOption": "Signaturstil", + "loc.input.help.signingOption": "Wählen Sie die Methode zum Signieren des Builds aus. Wählen Sie \"Keine Codesignierung\" aus, um die Signatur zu deaktivieren. Wählen Sie \"Projektstandards\" aus, um nur die Signaturkonfiguration des Projekts zu verwenden. Wählen Sie \"Manuelle Signatur\" aus, um eine manuelle Signatur zu erzwingen und optional eine Signierungsidentität und ein Bereitstellungsprofil anzugeben. Wählen Sie \"Automatische Signatur\" aus, um eine automatische Signatur zu erzwingen und optional eine Entwicklungs-Team-ID anzugeben. Wenn Ihr Projekt eine Signatur erfordert, verwenden Sie die Aufgaben \"Apple-XX installieren...\", um vor dem Xcode-Build Zertifikate und Bereitstellungsprofile zu installieren.", + "loc.input.label.signingIdentity": "Signierungsidentität", + "loc.input.help.signingIdentity": "(Optional) Geben Sie eine Außerkraftsetzung für die Signierungsidentität ein, mit der der Build signiert werden soll. Hierzu kann es erforderlich sein, die Standardkeychain auf dem Agent-Computer zu entsperren. Wenn kein Wert eingegeben wird, wird die Einstellung des Xcode-Projekts verwendet.", + "loc.input.label.provisioningProfileUuid": "UUID des Bereitstellungsprofils", + "loc.input.help.provisioningProfileUuid": "(Optional) Geben Sie die optionale UUID eines installierten Bereitstellungsprofils ein, die für diesen Build verwendet werden soll. Verwenden Sie separate Buildtasks mit unterschiedlichen Schemas oder Zielen, um separate Bereitstellungsprofile nach Ziel in einem einzelnen Arbeitsbereich (iOS, tvOS, watchOS) anzugeben.", + "loc.input.label.provisioningProfileName": "Profilname wird bereitgestellt", + "loc.input.help.provisioningProfileName": "(Optional) Geben Sie den Namen eines installierten Bereitstellungsprofils ein, das für diesen Build verwendet werden soll. Sofern angegeben, hat dieser Name Vorrang vor der UUID des Bereitstellungsprofils. Verwenden Sie separate Buildaufgaben mit unterschiedlichen Schemas oder Zielen, um in einem einzigen Arbeitsbereich separate Bereitstellungsprofile nach Ziel anzugeben (iOS, tvOS, watchOS).", + "loc.input.label.teamId": "Team-ID", + "loc.input.help.teamId": "(Optional, sofern Sie kein Mitglied mehrerer Entwicklungsteams sind.) Geben Sie die aus 10 Zeichen bestehende Entwicklungsteam-ID an.", + "loc.input.label.destinationPlatformOption": "Zielplattform", + "loc.input.help.destinationPlatformOption": "Geben Sie eine Zielgeräteplattform für UI-Tests ein, die verwendet wird, wenn das generische Buildgerät ungültig ist. Wählen Sie \"Benutzerdefiniert\" aus, um eine Plattform anzugeben, die nicht in dieser Liste enthalten ist. Bei Auswahl von \"Standard\" werden als Ziel weder Simulatoren noch Geräte verwendet.", + "loc.input.label.destinationPlatform": "Benutzerdefinierte Zielplattform", + "loc.input.help.destinationPlatform": "Geben Sie eine Zielgeräteplattform für UI-Tests ein, die verwendet wird, wenn das generische Buildgerät ungültig ist.", + "loc.input.label.destinationTypeOption": "Zieltyp", + "loc.input.help.destinationTypeOption": "Wählen Sie den zu verwendenden Zieltyp für UI-Tests aus. Die Geräte müssen per Kabel- oder Netzwerkverbindung mit dem Mac für die Builderstellung verbunden sein. Siehe Geräte und Simulatoren in Xcode.", + "loc.input.label.destinationSimulators": "Simulator", + "loc.input.help.destinationSimulators": "Geben Sie den Namen eines Xcode-Simulators ein, der für UI-Tests verwendet wird. Geben Sie beispielsweise \"iPhone X\" (iOS und watchOS) oder \"Apple TV 4K\" (tvOS) ein. Eine Zielbetriebssystemversion ist optional und kann im Format \"OS=Versionsnummer\" angegeben werden, wie etwa \"iPhone X,OS=11.1\". Eine Liste der Simulatoren, die für den Agent Hosted macOS installiert sind, finden Sie [hier](https://go.microsoft.com/fwlink/?linkid=875290).", + "loc.input.label.destinationDevices": "Gerät", + "loc.input.help.destinationDevices": "Geben Sie den Namen des Geräts für die UI-Tests ein, z. B. \"iPad von Raisa\".", + "loc.input.label.args": "Argumente", + "loc.input.help.args": "(Optional) Geben Sie zusätzliche Befehlszeilenargumente für den Build ein. Dies ist nützlich, um anstelle eines Arbeitsbereichs/Projekts und Schemas Argumente wie \"-target\" oder \"-project\" anzugeben.", + "loc.input.label.cwd": "Arbeitsverzeichnis", + "loc.input.help.cwd": "(Optional) Geben Sie das Arbeitsverzeichnis ein, in dem der Build ausgeführt werden soll. Wenn kein Wert eingegeben wird, wird der Stamm des Repositorys verwendet.", + "loc.input.label.useXcpretty": "xcpretty verwenden", + "loc.input.help.useXcpretty": "Geben Sie an, ob xcpretty zum Formatieren der xcodebuild-Ausgabe verwendet werden soll. Bei Aktivierung dieser Einstellung muss xcpretty auf dem Agent-Computer installiert sein. Wenn xcpretty nicht installiert ist, wird die unformatierte xcodebuild-Ausgabe angezeigt. Auf Build-Agents, die mit Azure Pipelines gehostet werden, ist xcpretty vorinstalliert. Siehe [xcpretty](https://github.com/supermarin/xcpretty) auf GitHub.", + "loc.input.label.xcprettyArgs": "Xcpretty-Argumente", + "loc.input.help.xcprettyArgs": "Zusätzliche Argumente, die an xcpretty übergeben werden sollen.", + "loc.input.label.publishJUnitResults": "Testergebnisse in Azure Pipelines veröffentlichen", + "loc.input.help.publishJUnitResults": "Geben Sie an, ob JUnit-Testergebnisse in Azure Pipelines veröffentlicht werden sollen. Dies erfordert, dass xcpretty zum Generieren von JUnit-Testergebnissen aktiviert ist.", + "loc.input.label.testRunTitle": "Testlauftitel", + "loc.input.help.testRunTitle": "Der Titel des Testlaufs beim Veröffentlichen der JUnit-Testergebnisse in Azure Pipelines.", + "loc.messages.SignIdNotFound": "Fehler bei der Suche nach der iOS-Signaturidentität. Überprüfen Sie, ob Signatur- und Bereitstellungsinformationen angegeben wurden.", + "loc.messages.TempKeychainSetupFailed": "Fehler beim Hinzufügen der temporären Keychain zum Keychainssuchpfad.", + "loc.messages.ProvProfileDetailsNotFound": "Fehler bei der Suche nach Details für das Bereitstellungsprofil: %s", + "loc.messages.ProvProfileUUIDNotFound": "Fehler bei der Suche nach der UUID für das Bereitstellungsprofil: %s", + "loc.messages.MultipleWorkspacesFound": "Es wurden mehrere Übereinstimmungen für den Xcode-Arbeitsbereich gefunden. Es wird die erste Übereinstimmung verwendet: %s", + "loc.messages.WorkspaceDoesNotExist": "Der Xcode-Arbeitsbereich wurde angegeben, aber er ist nicht vorhanden, oder es handelt sich nicht um ein Verzeichnis: %s", + "loc.messages.UseXcprettyForTestPublishing": "Aktivieren Sie \"xcpretty verwenden\", um Testergebnisse zu veröffentlichen. Für diesen Build werden keine Testergebnisse veröffentlicht.", + "loc.messages.NoTestResultsFound": "Keine übereinstimmenden Testergebnisdateien für \"%s\" gefunden. Das Veröffentlichen von JUnit-Testergebnissen wird übersprungen.", + "loc.messages.XcodeSuccess": "Die Xcode-Taskausführung wurde ohne Fehler abgeschlossen.", + "loc.messages.TempKeychainDeleteFailed": "Fehler beim Löschen des temporären Schlüsselspeichers, der mit dem Build erstellt wurde: %s", + "loc.messages.ProvProfileDeleteFailed": "Fehler beim Löschen des Bereitstellungsprofils \"%s\".", + "loc.messages.ExportMethodNotIdentified": "Fehler beim automatischen Identifizieren der zu verwendenden Exportmethode aus der Archivdatei. Dies kann zu Fehlern während der Builderstellung oder zu einem ungültigen Paket führen. Wenn es beim Export zu Fehlern kommt, aktivieren Sie entweder die Signierung (legen Sie \"Signaturstil\" auf \"Projektstandards\" fest), oder konfigurieren Sie den Export manuell (legen Sie \"Exportoptionen\" auf \"PLIST\" oder \"Angeben\" fest).", + "loc.messages.ExportOptionsPlistInvalidFilePath": "Die PLIST-Datei mit Exportoptionen ist nicht unter \"%s\" vorhanden. Geben Sie einen Pfad zu einer gültigen PLIST-Datei an.", + "loc.messages.SchemeRequiredForArchive": "Das Schema muss angegeben werden, damit das Paket mit dem xcodebuild-Archiv und -Export generiert werden kann.", + "loc.messages.WorkspaceOrProjectRequiredForArchive": "Der Arbeitsbereichs- oder Projektpfad muss angegeben werden, damit das Paket mit dem xcodebuild-Archiv und -Export generiert werden kann.", + "loc.messages.FailedToGenerateExportOptionsPlist": "Fehler beim automatischen Generieren einer PLIST-Datei mit Exportoptionen zum Exportieren einer IPA. Geben Sie in den Paketoptionen eine PLIST-Datei mit Exportoptionen an.", + "loc.messages.LocateXcodeBasedOnVersion": "Entwicklerpfad für Xcode \"%s\" wird gesucht.", + "loc.messages.FailedToLocateSpecifiedXcode": "Der Entwicklerpfad für Xcode \"%s\" kann nicht aufgelöst werden. Legen Sie die Umgebungsvariable \"%s\" auf dem Agent-Computer fest, oder legen Sie \"Xcode-Version\" auf \"Standard\" oder \"Pfad angeben\" fest.", + "loc.messages.CantDetermineProvisioningStyle": "Der Bereitstellungsstil wurde nicht in der pbxProject-Datei gefunden. Es wird die automatische Signatur verwendet. Wenn das Projekt eine manuelle Signatur verwendet, kommt es beim automatischen Exportieren möglicherweise zu einem Fehler. Als Problemumgehung kann \"Exportoptionen\" auf \"Plist\" oder \"Angeben\" festgelegt werden.", + "loc.messages.MultipleSchemesFound": "Der Arbeitsbereich enthält mehrere Schemas. Es wurde kein Schema ausgewählt. Verwenden Sie \"Scheme\", um ein Zielschema anzugeben.", + "loc.messages.NoSchemeFound": "Kein freigegebenes Schema im Arbeitsbereich gefunden. Verwenden Sie \"Verwalten von Schemes\" in Xcode, um ein Schema freizugeben.", + "loc.messages.SchemeSelected": "Der Arbeitsbereich enthält ein einzelnes freigegebenes Schema. \"%s\" wird verwendet.", + "loc.messages.FailedToFindScheme": "Fehler beim Ermitteln eines Schemas im Arbeitsbereich. Verwenden Sie \"Schema\", um ein Zielschema anzugeben.", + "loc.messages.OutputDirectoryIgnored": "Das Ausgabeverzeichnis für die Buildausgabe (Binärdateien) wurde ignoriert. Die Angabe eines Ausgabeverzeichnisses ist nicht mit der Aktion \"%s\" kompatibel.", + "loc.messages.NoDestinationPlatformWarning": "UI-Tests müssen über einen Simulator oder ein verbundenes Gerät ausgeführt werden. Legen Sie \"Zielplattform\" in der Xcode-Aufgabe auf einen anderen Wert als \"Standard\" fest.", + "loc.messages.XcprettyNotInstalled": "xcpretty ist nicht auf dem Buildserver installiert. Es wird die unformatierte xcodebuild-Ausgabe angezeigt. Testergebnisse können nicht veröffentlicht werden, wenn xcpretty nicht installiert ist.", + "loc.messages.XcodeRequiresMac": "Für die Verwendung von Xcode ist ein macOS-Agent erforderlich. Die Builderstellung mit Xcode unter Linux oder Windows wird von Apple nicht unterstützt.", + "loc.messages.UsingDefaultSimulator": "Standardsimulator wird verwendet: %s." +} \ No newline at end of file diff --git a/_generated/XcodeV5_Node20/Strings/resources.resjson/en-US/resources.resjson b/_generated/XcodeV5_Node20/Strings/resources.resjson/en-US/resources.resjson new file mode 100644 index 000000000000..a67f18019279 --- /dev/null +++ b/_generated/XcodeV5_Node20/Strings/resources.resjson/en-US/resources.resjson @@ -0,0 +1,101 @@ +{ + "loc.friendlyName": "Xcode", + "loc.helpMarkDown": "[Learn more about this task](https://go.microsoft.com/fwlink/?LinkID=613730) or [see the Xcode documentation](https://developer.apple.com/xcode/)", + "loc.description": "Build, test, or archive an Xcode workspace on macOS. Optionally package an app.", + "loc.instanceNameFormat": "Xcode $(actions)", + "loc.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.", + "loc.group.displayName.sign": "Signing & provisioning", + "loc.group.displayName.package": "Package options", + "loc.group.displayName.devices": "Devices & simulators", + "loc.group.displayName.advanced": "Advanced", + "loc.input.label.actions": "Actions", + "loc.input.help.actions": "Enter a space-delimited list of actions. Some valid options are `build`, `clean`, `test`, `analyze`, and `archive`. For example,`clean build` will run a clean build.", + "loc.input.label.configuration": "Configuration", + "loc.input.help.configuration": "Enter the Xcode project or workspace configuration to be built. The default value of this field is the variable `$(Configuration)`. When using a variable, make sure to specify a value (for example, `Release`) on the **Variables** tab.", + "loc.input.label.sdk": "SDK", + "loc.input.help.sdk": "Specify an SDK to use when building the Xcode project or workspace. From the macOS Terminal application, run `xcodebuild -showsdks` to display the valid list of SDKs. The default value of this field is the variable `$(SDK)`. When using a variable, make sure to specify a value (for example, `iphonesimulator`) on the **Variables** tab.", + "loc.input.label.xcWorkspacePath": "Workspace or project path", + "loc.input.help.xcWorkspacePath": "(Optional) Enter a relative path from the root of the repository to the Xcode workspace or project. For example, `MyApp/MyApp.xcworkspace` or `MyApp/MyApp.xcodeproj`. Wildcards can be used ([more information](https://go.microsoft.com/fwlink/?linkid=856077)).", + "loc.input.label.scheme": "Scheme", + "loc.input.help.scheme": "(Optional) Enter a scheme name defined in Xcode. It must be a shared scheme, with its Shared checkbox enabled under Managed Schemes in Xcode. If you specify a Workspace or project path above without specifying a scheme, and the workspace has a single shared scheme, it will be automatically used.", + "loc.input.label.xcodeVersion": "Xcode version", + "loc.input.help.xcodeVersion": "Specify the target version of Xcode. Select `Default` to use the default version of Xcode on the agent machine. Selecting a version number (e.g. `Xcode 9`) relies on environment variables being set on the agent machine for the version's location (e.g. `XCODE_9_DEVELOPER_DIR=/Applications/Xcode_9.0.0.app/Contents/Developer`). Select `Specify path` to provide a specific path to the Xcode developer directory.
Note: XCode 12 is installed on macOS-10.15 (or higher)", + "loc.input.label.xcodeDeveloperDir": "Xcode developer path", + "loc.input.help.xcodeDeveloperDir": "(Optional) Enter a path to a specific Xcode developer directory (e.g. `/Applications/Xcode_9.0.0.app/Contents/Developer`). This is useful when multiple versions of Xcode are installed on the agent machine.", + "loc.input.label.packageApp": "Create app package", + "loc.input.help.packageApp": "Indicate whether an IPA app package file should be generated as a part of the build.", + "loc.input.label.archivePath": "Archive path", + "loc.input.help.archivePath": "(Optional) Specify a directory where created archives should be placed.", + "loc.input.label.exportPath": "Export path", + "loc.input.help.exportPath": "(Optional) Specify the destination for the product exported from the archive.", + "loc.input.label.exportOptions": "Export options", + "loc.input.help.exportOptions": "Select a way of providing options for exporting the archive. When the default value of `Automatic` is selected, the export method is automatically detected from the archive. Select `Plist` to specify a plist file containing export options. Select `Specify` to provide a specific **Export method** and **Team ID**.", + "loc.input.label.exportMethod": "Export method", + "loc.input.help.exportMethod": "Enter the method that Xcode should use to export the archive. For example: `app-store`, `package`, `ad-hoc`, `enterprise`, or `development`.", + "loc.input.label.exportTeamId": "Team ID", + "loc.input.help.exportTeamId": "(Optional) Enter the 10-character team ID from the Apple Developer Portal to use during export.", + "loc.input.label.exportOptionsPlist": "Export options plist", + "loc.input.help.exportOptionsPlist": "Enter the path to the plist file that contains options to use during export.", + "loc.input.label.exportArgs": "Export arguments", + "loc.input.help.exportArgs": "(Optional) Enter additional command line arguments to be used during export.", + "loc.input.label.signingOption": "Signing style", + "loc.input.help.signingOption": "Choose the method of signing the build. Select `Do not code sign` to disable signing. Select `Project defaults` to use only the project's signing configuration. Select `Manual signing` to force manual signing and optionally specify a signing identity and provisioning profile. Select `Automatic signing` to force automatic signing and optionally specify a development team ID. If your project requires signing, use the \"Install Apple...\" tasks to install certificates and provisioning profiles prior to the Xcode build.", + "loc.input.label.signingIdentity": "Signing identity", + "loc.input.help.signingIdentity": "(Optional) Enter a signing identity override with which to sign the build. This may require unlocking the default keychain on the agent machine. If no value is entered, the Xcode project's setting will be used.", + "loc.input.label.provisioningProfileUuid": "Provisioning profile UUID", + "loc.input.help.provisioningProfileUuid": "(Optional) Enter the UUID of an installed provisioning profile to be used for this build. Use separate build tasks with different schemes or targets to specify separate provisioning profiles by target in a single workspace (iOS, tvOS, watchOS).", + "loc.input.label.provisioningProfileName": "Provisioning profile name", + "loc.input.help.provisioningProfileName": "(Optional) Enter the name of an installed provisioning profile to be used for this build. If specified, this takes precedence over the provisioning profile UUID. Use separate build tasks with different schemes or targets to specify separate provisioning profiles by target in a single workspace (iOS, tvOS, watchOS).", + "loc.input.label.teamId": "Team ID", + "loc.input.help.teamId": "(Optional, unless you are a member of multiple development teams.) Specify the 10-character development team ID.", + "loc.input.label.destinationPlatformOption": "Destination platform", + "loc.input.help.destinationPlatformOption": "Select the destination device's platform to be used for UI testing when the generic build device isn't valid. Choose `Custom` to specify a platform not included in this list. When `Default` is selected, no simulators nor devices will be targeted.", + "loc.input.label.destinationPlatform": "Custom destination platform", + "loc.input.help.destinationPlatform": "Enter a destination device's platform to be used for UI testing when the generic build device isn't valid.", + "loc.input.label.destinationTypeOption": "Destination type", + "loc.input.help.destinationTypeOption": "Choose the destination type to be used for UI testing. Devices must be connected to the Mac performing the build via a cable or network connection. See Devices and Simulators in Xcode.", + "loc.input.label.destinationSimulators": "Simulator", + "loc.input.help.destinationSimulators": "Enter an Xcode simulator name to be used for UI testing. For example, enter `iPhone X` (iOS and watchOS) or `Apple TV 4K` (tvOS). A target OS version is optional and can be specified in the format 'OS=versionNumber', such as `iPhone X,OS=11.1`. A list of simulators installed on the Hosted macOS agent can be [found here](https://go.microsoft.com/fwlink/?linkid=875290).", + "loc.input.label.destinationDevices": "Device", + "loc.input.help.destinationDevices": "Enter the name of the device to be used for UI testing, such as `Raisa's iPad`.", + "loc.input.label.args": "Arguments", + "loc.input.help.args": "(Optional) Enter additional command line arguments with which to build. This is useful for specifying `-target` or `-project` arguments instead of specifying a workspace/project and scheme.", + "loc.input.label.cwd": "Working directory", + "loc.input.help.cwd": "(Optional) Enter the working directory in which to run the build. If no value is entered, the root of the repository will be used.", + "loc.input.label.useXcpretty": "Use xcpretty", + "loc.input.help.useXcpretty": "Specify whether to use xcpretty to format xcodebuild output. Enabling this requires xcpretty to be installed on the agent machine. If xcpretty is not installed, raw xcodebuild output is shown. xcpretty is preinstalled on Azure Pipelines hosted build agents. See [xcpretty](https://github.com/supermarin/xcpretty) on GitHub.", + "loc.input.label.xcprettyArgs": "Xcpretty arguments", + "loc.input.help.xcprettyArgs": "Additional arguments to pass to xcpretty.", + "loc.input.label.publishJUnitResults": "Publish test results to Azure Pipelines", + "loc.input.help.publishJUnitResults": "Specify whether to publish JUnit test results to Azure Pipelines. This requires xcpretty to be enabled to generate JUnit test results.", + "loc.input.label.testRunTitle": "Test run title", + "loc.input.help.testRunTitle": "Title of the test run when publishing JUnit test results to Azure Pipelines.", + "loc.messages.SignIdNotFound": "Failed to find the iOS signing identity. Verify that signing and provisioning information is provided.", + "loc.messages.TempKeychainSetupFailed": "Failed to add the temporary keychain to the keychains search path.", + "loc.messages.ProvProfileDetailsNotFound": "Failed to find details for the provisioning profile: %s", + "loc.messages.ProvProfileUUIDNotFound": "Failed to find the UUID for provisioning profile: %s", + "loc.messages.MultipleWorkspacesFound": "Multiple Xcode workspace matches were found. The first match will be used: %s", + "loc.messages.WorkspaceDoesNotExist": "The Xcode workspace was specified, but it does not exist or is not a directory: %s", + "loc.messages.UseXcprettyForTestPublishing": "Enable `Use xcpretty` to publish test results. For this build, no test results will be published.", + "loc.messages.NoTestResultsFound": "No test result files matching `%s` were found. Publishing JUnit test results will be skipped.", + "loc.messages.XcodeSuccess": "Xcode task execution completed with no errors.", + "loc.messages.TempKeychainDeleteFailed": "Failed to delete the temporary keychain created during the build: `%s`", + "loc.messages.ProvProfileDeleteFailed": "Failed to delete the provisioning profile `%s`.", + "loc.messages.ExportMethodNotIdentified": "Failed to automatically identify the export method to use from the archive file. This might cause errors during the build or produce an invalid package. If export fails, either enable signing (set `Signing Style` to `Project Defaults`), or configure export manually (set `Export options` to `Plist` or `Specify`).", + "loc.messages.ExportOptionsPlistInvalidFilePath": "The `Export options` plist file does not exist at `%s`. Provide the path to a valid plist file.", + "loc.messages.SchemeRequiredForArchive": "The scheme must be specified to generate the package with xcodebuild archive and export.", + "loc.messages.WorkspaceOrProjectRequiredForArchive": "The workspace or project path must be specified to generate the package with xcodebuild archive and export.", + "loc.messages.FailedToGenerateExportOptionsPlist": "Failed to automatically generate an `Export options` plist file to export an IPA. Please specify an `Export options` plist file in `Package options`.", + "loc.messages.LocateXcodeBasedOnVersion": "Locating the developer path for Xcode `%s`", + "loc.messages.FailedToLocateSpecifiedXcode": "Unable to resolve the developer path for Xcode `%s`. Set the `%s` environment variable on the agent machine, or set `Xcode version` to `Default` or `Specify path`.", + "loc.messages.CantDetermineProvisioningStyle": "The provisioning style was not found in a pbxProject file. Automatic signing will be used. If the project uses manual signing, auto-export may fail. As a workaround, `Export options` can be set to `Plist` or `Specify`.", + "loc.messages.MultipleSchemesFound": "The workspace contains multiple schemes. No scheme selected. Use `Scheme` to specify a target scheme.", + "loc.messages.NoSchemeFound": "No shared scheme found in the workspace. Use \"Manage Schemes\" in Xcode to share a scheme.", + "loc.messages.SchemeSelected": "The workspace contains a single shared scheme. '%s' will be used.", + "loc.messages.FailedToFindScheme": "Failed to find a scheme in the workspace. Use `Scheme` to specify a target scheme.", + "loc.messages.OutputDirectoryIgnored": "Output directory for build output (binaries) ignored. Specifying an output directory is incompatible with the '%s' action.", + "loc.messages.NoDestinationPlatformWarning": "UI tests must be run against a simulator or a connected device. In the Xcode task, set `Destination platform` to a value other than `Default`.", + "loc.messages.XcprettyNotInstalled": "xcpretty is not installed on the build server. xcodebuild raw output will be shown. Publishing test results will fail if xcpretty is not installed.", + "loc.messages.XcodeRequiresMac": "Using Xcode requires a macOS agent. Building with Xcode on Linux or Windows is not supported by Apple.", + "loc.messages.UsingDefaultSimulator": "Using default simulator: %s." +} \ No newline at end of file diff --git a/_generated/XcodeV5_Node20/Strings/resources.resjson/es-ES/resources.resjson b/_generated/XcodeV5_Node20/Strings/resources.resjson/es-ES/resources.resjson new file mode 100644 index 000000000000..4ea1e26e6cbb --- /dev/null +++ b/_generated/XcodeV5_Node20/Strings/resources.resjson/es-ES/resources.resjson @@ -0,0 +1,101 @@ +{ + "loc.friendlyName": "XCode", + "loc.helpMarkDown": "[Obtener más información acerca de esta tarea](https://go.microsoft.com/fwlink/?LinkID=613730) o [consultar la documentación de Xcode](https://developer.apple.com/xcode/)", + "loc.description": "Compile, pruebe o archive un área de trabajo de Xcode en macOS. Opcionalmente, puede empaquetar una aplicación.", + "loc.instanceNameFormat": "Xcode $(actions)", + "loc.releaseNotes": "Esta versión de la tarea es compatible con Xcode 8 - 13. Se han quitado las características que eran únicamente para mantener la compatibilidad con Xcode 7. Esta tarea tiene mejores opciones para usar agentes macOS hospedados por Microsoft.", + "loc.group.displayName.sign": "Firma y aprovisionamiento", + "loc.group.displayName.package": "Opciones del paquete", + "loc.group.displayName.devices": "Dispositivos y simuladores", + "loc.group.displayName.advanced": "Avanzado", + "loc.input.label.actions": "Acciones", + "loc.input.help.actions": "Especifique una lista de acciones delimitada por espacios. Algunas de las opciones válidas son \"build\", \"clean\", \"test\", \"analyze\" y \"archive\". Por ejemplo, \"clean build\" ejecutará una compilación limpia.", + "loc.input.label.configuration": "Configuración", + "loc.input.help.configuration": "Especifique la configuración del proyecto o área de trabajo de Xcode que se va a compilar. El valor predeterminado de este campo es la variable \"$(Configuration)\". Al usar una variable, asegúrese de especificar un valor (por ejemplo, \"Versión\") en la pestaña **Variables**.", + "loc.input.label.sdk": "SDK", + "loc.input.help.sdk": "Especifique el SDK que se va a usar al compilar el área de trabajo o proyecto de Xcode. Desde la aplicación Terminal de macOS, ejecute \"xcodebuild -showsdks\" para mostrar la lista de SDK válidos. El valor predeterminado de este campo es la variable \"$(SDK)\". Al usar una variable, asegúrese de especificar un valor (por ejemplo, \"iphonesimulator\") en la pestaña **Variables**.", + "loc.input.label.xcWorkspacePath": "Ruta de acceso de área de trabajo o proyecto", + "loc.input.help.xcWorkspacePath": "(Opcional) Escriba una ruta de acceso relativa desde la raíz del repositorio al proyecto o área de trabajo de Xcode. Por ejemplo, \"MyApp/MyApp.xcworkspace\" o \"MyApp/MyApp.xcodeproj\". Se pueden usar caracteres comodín ([más información](https://go.microsoft.com/fwlink/?linkid=856077)).", + "loc.input.label.scheme": "Esquema", + "loc.input.help.scheme": "(Opcional) Escriba un nombre de esquema definido en Xcode. Debe ser un esquema compartido, con la casilla Compartido habilitada en Esquemas compartidos en Xcode. Si especifica una Ruta de acceso de área de trabajo o proyecto anteriormente sin especificar un esquema y el área de trabajo tiene un solo esquema compartido, se utilizará automáticamente.", + "loc.input.label.xcodeVersion": "Versión de Xcode", + "loc.input.help.xcodeVersion": "Especifique la versión de destino de Xcode. Seleccione \"Predeterminado\" para utilizar la versión predeterminada de Xcode en el equipo del agente. Al seleccionar un número de versión (por ejemplo: \"Xcode 9\") se toman como base las variables de entorno que se están definiendo en el equipo del agente para la ubicación de la versión (por ejemplo: \"XCODE_9_DEVELOPER_DIR=/Applications/Xcode_9.0.0.app/Contents/Developer\"). Seleccione \"Especificar la ruta de acceso\" para proporcionar una ruta específica al directorio de desarrolladores de Xcode.
Nota: XCode 12 se instala en macOS-10.15 (o superior)", + "loc.input.label.xcodeDeveloperDir": "Ruta de acceso de desarrollador de Xcode", + "loc.input.help.xcodeDeveloperDir": "(Opcional) Escriba una ruta de acceso a un directorio específico de desarrollador de Xcode (por ejemplo, \"/Applications/Xcode_9.0.0.app/Contents/Developer\"). Esto resulta útil cuando se instalan varias versiones de Xcode en el equipo del agente.", + "loc.input.label.packageApp": "Crear paquete de aplicación", + "loc.input.help.packageApp": "Indica si debe generarse un archivo de paquete de aplicaciones IPA como parte de la compilación.", + "loc.input.label.archivePath": "Ruta de acceso de archivo", + "loc.input.help.archivePath": "(Opcional) Especifique un directorio donde deban colocarse los archivos creados.", + "loc.input.label.exportPath": "Ruta de acceso de exportación", + "loc.input.help.exportPath": "(Opcional) Especifique el destino del producto exportado desde el archivo.", + "loc.input.label.exportOptions": "Opciones de exportación", + "loc.input.help.exportOptions": "Seleccione una forma de proporcionar opciones para exportar el archivo. Cuando se selecciona el valor predeterminado \"Automático\", el método de exportación se detecta automáticamente en el archivo. Seleccione \"Plist\" para especificar un archivo .plist que contiene las opciones de exportación. Seleccione \"Especificar\" para proporcionar un **Método de exportación** y un **Id. de equipo** determinados.", + "loc.input.label.exportMethod": "Método de exportación", + "loc.input.help.exportMethod": "Especifique el método que Xcode debe usar para exportar el archivo. Por ejemplo: \"app-store\", \"package\", \"ad-hoc\", \"enterprise\" o \"development\".", + "loc.input.label.exportTeamId": "Id. de equipo", + "loc.input.help.exportTeamId": "(Opcional) Especifique el identificador de equipo de 10 caracteres del portal Apple Developer que se va a usar durante la exportación.", + "loc.input.label.exportOptionsPlist": "Archivo .plist de opciones de exportación", + "loc.input.help.exportOptionsPlist": "Especifique la ruta de acceso al archivo .plist que contiene opciones para usar durante la exportación.", + "loc.input.label.exportArgs": "Argumentos de exportación", + "loc.input.help.exportArgs": "(Opcional) Especifique argumentos adicionales de la línea de comandos que se usarán durante la exportación.", + "loc.input.label.signingOption": "Estilo de firma", + "loc.input.help.signingOption": "Elija un método para firmar la compilación. Seleccione “Do not code sign” para deshabilitar la firma. Seleccione “Valores predeterminados del proyecto” para usar solo la configuración de firma del proyecto. Seleccione “Manual signing” para forzar la firma manual y, opcionalmente, especificar una identidad de firma y un perfil de aprovisionamiento. Seleccione “Firma automática” para forzar la firma automática y, opcionalmente, especificar un identificador de equipo de desarrollo. Si su proyecto requiere firma, use las tareas \"Instalar… de Apple\" para instalar certificados y perfiles de aprovisionamiento antes de la compilación de Xcode.", + "loc.input.label.signingIdentity": "Identidad de firma", + "loc.input.help.signingIdentity": "(Opcional) Especifique un reemplazo de la identidad de firma para firmar la compilación. Esto puede requerir desbloquear la cadena de claves predeterminada en la máquina del agente. Si no se especifica ningún valor, se usará la configuración del proyecto de Xcode.", + "loc.input.label.provisioningProfileUuid": "UUID de perfil de aprovisionamiento", + "loc.input.help.provisioningProfileUuid": "(Opcional) Especifique el UUID de un archivo de aprovisionamiento instalado que se usará para la compilación. Use tareas de compilación independientes con diferentes esquemas o destinos a fin de especificar perfiles de aprovisionamiento independientes por destino en una sola área de trabajo (iOS, tvOS, watchOS).", + "loc.input.label.provisioningProfileName": "Nombre del perfil de aprovisionamiento", + "loc.input.help.provisioningProfileName": "(Opcional) Escriba el nombre de un perfil de aprovisionamiento instalado que se vaya a usar para esta compilación. Si se especifica, tiene prioridad sobre el UUID de dicho perfil. Use tareas de compilación distintas con esquemas o destinos diferentes para especificar perfiles de aprovisionamiento independientes por destino en una única área de trabajo (iOS, tvOS, watchOS).", + "loc.input.label.teamId": "Id. de equipo", + "loc.input.help.teamId": "(Opcional, a menos que sea miembro de varios equipos de desarrollo). Especifique el identificador de equipo de desarrollo de 10 caracteres.", + "loc.input.label.destinationPlatformOption": "Plataforma de destino", + "loc.input.help.destinationPlatformOption": "Seleccione la plataforma del dispositivo de destino que se va a usar para las pruebas de IU cuando el dispositivo de compilación genérico no es válido. Elija \"Personalizar\" para especificar una plataforma que no está incluida en la lista. Si se selecciona \"Predeterminado\", no se establecerán simuladores ni dispositivos como destino.", + "loc.input.label.destinationPlatform": "Plataforma de destino personalizada", + "loc.input.help.destinationPlatform": "Especifique una plataforma de dispositivo de destino para usarla en las pruebas de IU cuando el dispositivo de compilación genérico no sea válido.", + "loc.input.label.destinationTypeOption": "Tipo de destino", + "loc.input.help.destinationTypeOption": "Elija el tipo de destino que se va a usar para las pruebas de IU. Los dispositivos deben conectarse al equipo Mac que realiza la compilación por cable o por red. Consulte Simuladores y dispositivos en Xcode.", + "loc.input.label.destinationSimulators": "Simulador", + "loc.input.help.destinationSimulators": "Especifique un nombre de simulador de Xcode para usarlo en las pruebas de IU. Por ejemplo, escriba \" iPhone X\" (iOS y watchOS) o \" Apple TV 4K\" (tvOS). La versión del sistema operativo de destino es opcional y puede especificarse con el formato \"SO=númeroVersión\", como \"iPhone X,OS=11.1\". [Aquí puede encontrar](https://go.microsoft.com/fwlink/?linkid=875290) una lista de los simuladores instalados en el agente de macOS hospedado.", + "loc.input.label.destinationDevices": "Dispositivo", + "loc.input.help.destinationDevices": "Especifique el nombre del dispositivo que se va a usar para las pruebas de IU, por ejemplo, \"iPad de Ana\".", + "loc.input.label.args": "Argumentos", + "loc.input.help.args": "(Opcional) Especifique argumentos adicionales de la línea de comandos para compilar. Esto es útil para especificar los argumentos \"-target\" o \"-project\" en lugar de especificar un esquema y un área de trabajo o proyecto.", + "loc.input.label.cwd": "Directorio de trabajo", + "loc.input.help.cwd": "(Opcional) Especifique el directorio de trabajo en el que se va a ejecutar la compilación. Si no se especifica ningún valor, se usará la raíz del repositorio.", + "loc.input.label.useXcpretty": "Usar xcpretty", + "loc.input.help.useXcpretty": "Especifique si se va a usar xcpretty para formatear la salida de xcodebuild. Para habilitar esta opción, xcpretty debe estar instalado en la máquina del agente. Si no lo está, se muestra la salida de xcodebuild sin formato. xcpretty está preinstalado en los agentes de compilación hospedados de Azure Pipelines. Consulte [xcpretty](https://github.com/supermarin/xcpretty) en GitHub.", + "loc.input.label.xcprettyArgs": "Argumentos de xcpretty", + "loc.input.help.xcprettyArgs": "Argumentos adicionales que se pasan a xcpretty.", + "loc.input.label.publishJUnitResults": "Publicar resultados de pruebas en Azure Pipelines", + "loc.input.help.publishJUnitResults": "Especifique si los resultados de pruebas JUnit se van a publicar en Azure Pipelines. Para generar estos resultados de pruebas, es necesario que xcpretty esté habilitado.", + "loc.input.label.testRunTitle": "Título de la serie de pruebas", + "loc.input.help.testRunTitle": "Título de la serie de pruebas cuando se publican los resultados de pruebas de JUnit en Azure Pipelines.", + "loc.messages.SignIdNotFound": "No se encuentra la identidad de firma de iOS. Compruebe que la información de firma y aprovisionamiento se ha proporcionado.", + "loc.messages.TempKeychainSetupFailed": "No se pudo agregar la cadena de claves temporal a la ruta de acceso de búsqueda de cadenas de claves.", + "loc.messages.ProvProfileDetailsNotFound": "No se encuentran los detalles del perfil de aprovisionamiento: %s", + "loc.messages.ProvProfileUUIDNotFound": "No se encuentra el UUID del perfil de aprovisionamiento: %s", + "loc.messages.MultipleWorkspacesFound": "Se encontraron varias coincidencias del área de trabajo de Xcode. Se usará la primera: %s", + "loc.messages.WorkspaceDoesNotExist": "Se especificó el área de trabajo de Xcode, pero no existe o no es un directorio: %s", + "loc.messages.UseXcprettyForTestPublishing": "Habilite \"Usar xcpretty\" para publicar los resultados de las pruebas. No se publicará ningún resultado de pruebas para esta compilación.", + "loc.messages.NoTestResultsFound": "No se encontró ningún archivo de resultados de pruebas que coincida con \"%s\". La publicación de resultados de pruebas JUnit se omitirá.", + "loc.messages.XcodeSuccess": "La ejecución de la tarea de Xcode se completó sin errores.", + "loc.messages.TempKeychainDeleteFailed": "No se pudo eliminar la cadena de claves temporal creada durante la compilación: \"%s\"", + "loc.messages.ProvProfileDeleteFailed": "No se pudo eliminar el perfil de aprovisionamiento \"%s\".", + "loc.messages.ExportMethodNotIdentified": "No se pudo identificar automáticamente el método de exportación para usar desde el archivo. Esto puede causar errores durante la compilación o generar un paquete no válido. Si la exportación no se puede realizar, habilite la firma (establezca \"Estilo de firma\" en \"Valores predeterminados del proyecto\") o configure la exportación manualmente (establezca \"Opciones de exportación\" en \"Plist\" o \"Especificar\").", + "loc.messages.ExportOptionsPlistInvalidFilePath": "El archivo .plist de \"Opciones de exportación\" no existe en \"%s\". Proporcione la ruta de acceso a un archivo .plist válido.", + "loc.messages.SchemeRequiredForArchive": "Debe especificarse el esquema para generar el paquete con el archivo xcodebuild y exportarlo.", + "loc.messages.WorkspaceOrProjectRequiredForArchive": "Debe especificarse la ruta de acceso del proyecto o del área de trabajo para generar el paquete con el archivo xcodebuild y exportarlo.", + "loc.messages.FailedToGenerateExportOptionsPlist": "No se pudo generar automáticamente un archivo .plist de \"Opciones de exportación\" para exportar un IPA. Especifique un archivo .plist de \"Opciones de exportación\" en \"Opciones del paquete\".", + "loc.messages.LocateXcodeBasedOnVersion": "Buscando la ruta de acceso del desarrollador para Xcode \"%s\"", + "loc.messages.FailedToLocateSpecifiedXcode": "No se puede resolver la ruta de acceso de desarrollador para Xcode \"%s\". Establezca la variable de entorno \"%s\" en la máquina del agente o bien defina \"Versión de Xcode\" como \"Predeterminada\"o \"Especificar la ruta de acceso\".", + "loc.messages.CantDetermineProvisioningStyle": "No se encontró el estilo de aprovisionamiento en un archivo pbxProject. Se usará la firma automática. Si el proyecto usa la firma manual, la exportación automática puede generar errores. Como solución alternativa, establezca \"Opciones de exportación\" en \"Plist\" o \"Especificar\".", + "loc.messages.MultipleSchemesFound": "El área de trabajo contiene varios esquemas. No hay ningún esquema seleccionado. Use \"Scheme\" para especificar un esquema de destino.", + "loc.messages.NoSchemeFound": "No se encontró ningún esquema compartido en el área de trabajo. Use \"Administrar Schemes\" en Xcode para compartir un esquema.", + "loc.messages.SchemeSelected": "El área de trabajo contiene un solo esquema compartido. Se usará \"%s\".", + "loc.messages.FailedToFindScheme": "No se encontró ningún esquema en el área de trabajo. Use \"Esquema\" para especificar un esquema de destino.", + "loc.messages.OutputDirectoryIgnored": "El directorio de salida para la salida de compilación (binarios) se ha omitido. La especificación de un directorio de salida es incompatible con la acción \"%s\".", + "loc.messages.NoDestinationPlatformWarning": "Las pruebas de IU deben ejecutarse en un simulador o un dispositivo conectado. En la tarea de Xcode, establezca \"Plataforma de destino\" en un valor distinto de \"Predeterminado\".", + "loc.messages.XcprettyNotInstalled": "xcpretty no está instalado en el servidor de compilación. Se mostrará la salida sin formato de xcodebuild. Si xcpretty no está instalado, los resultados de pruebas no se podrán publicar.", + "loc.messages.XcodeRequiresMac": "El uso de Xcode requiere un agente de macOS. Apple no admite la compilación con Xcode en Linux o Windows.", + "loc.messages.UsingDefaultSimulator": "Usando el simulador predeterminado: %s." +} \ No newline at end of file diff --git a/_generated/XcodeV5_Node20/Strings/resources.resjson/fr-FR/resources.resjson b/_generated/XcodeV5_Node20/Strings/resources.resjson/fr-FR/resources.resjson new file mode 100644 index 000000000000..e66770166e44 --- /dev/null +++ b/_generated/XcodeV5_Node20/Strings/resources.resjson/fr-FR/resources.resjson @@ -0,0 +1,101 @@ +{ + "loc.friendlyName": "Xcode", + "loc.helpMarkDown": "[En savoir plus sur cette tâche](https://go.microsoft.com/fwlink/?LinkID=613730) ou [consulter la documentation de Xcode](https://developer.apple.com/xcode/)", + "loc.description": "Générez, testez ou archivez un espace de travail Xcode sur macOS. Créez éventuellement un package d'application.", + "loc.instanceNameFormat": "Xcode $(actions)", + "loc.releaseNotes": "Cette version de la tâche est compatible avec Xcode 8 - 13. Les fonctionnalités qui étaient présentes uniquement pour préserver la compatibilité avec Xcode 7 ont été supprimées. Cette tâche offre de meilleures options pour l'utilisation d'agents macOS hébergés par Microsoft.", + "loc.group.displayName.sign": "Signature et provisionnement", + "loc.group.displayName.package": "Options de package", + "loc.group.displayName.devices": "Appareils et simulateurs", + "loc.group.displayName.advanced": "Avancé", + "loc.input.label.actions": "Actions", + "loc.input.help.actions": "Entrez une liste d'actions délimitées par des espaces. Options valides : 'build', 'clean', 'test', 'analyze' et 'archive'. Par exemple, 'clean build' permet d'exécuter un nettoyage de build.", + "loc.input.label.configuration": "Configuration", + "loc.input.help.configuration": "Entrez la configuration du projet ou de l'espace de travail Xcode à générer. La valeur par défaut de ce champ est la variable '$(Configuration)'. Quand vous utilisez une variable, veillez à spécifier une valeur (par exemple 'Mise en production') sous l'onglet **Variables**.", + "loc.input.label.sdk": "SDK", + "loc.input.help.sdk": "Spécifiez un SDK à utiliser durant la génération du projet ou de l'espace de travail Xcode. À partir de l'application macOS Terminal, exécutez 'xcodebuild -showsdks' pour afficher la liste valide des SDK. La valeur par défaut de ce champ est la variable '$(SDK)'. Quand vous utilisez une variable, veillez à spécifier une valeur (par exemple 'simulateur_iphone') sous l'onglet **Variables**.", + "loc.input.label.xcWorkspacePath": "Chemin d'espace de travail ou de projet", + "loc.input.help.xcWorkspacePath": "(Facultatif) Entrez un chemin relatif à partir de la racine du dépôt vers l'espace de travail ou le projet Xcode. Par exemple, 'MyApp/MyApp.xcworkspace' ou 'MyApp/MyApp.xcodeproj'. Les caractères génériques sont autorisés. ([Plus d'informations](https://go.microsoft.com/fwlink/?linkid=856077)).", + "loc.input.label.scheme": "Schéma", + "loc.input.help.scheme": "(Facultatif) Entrez un nom de schéma défini dans Xcode. Il doit s'agir d'un schéma partagé, dont la case Partagé doit être cochée sous Schémas gérés dans Xcode. Si vous spécifiez un Chemin d'espace de travail ou de projet ci-dessus sans spécifier de schéma, et si l'espace de travail a un seul schéma partagé, il est automatiquement utilisé.", + "loc.input.label.xcodeVersion": "Version de Xcode", + "loc.input.help.xcodeVersion": "Spécifiez la version cible du code Xcode. Sélectionnez « Par défaut » pour utiliser la version par défaut du code Xcode sur l’ordinateur de l’agent. La sélection d’un numéro de version (par exemple« Code Xcode 9 » ) dépend du fait que des variables d’environnement sont définies sur l’ordinateur agent pour l’emplacement de la version (par exemple, « XCODE_9_DEVELOPER_DIR=/Applications/Xcode_9.0.0.app/Contents/Developer »). Sélectionnez « Spécifier le chemin d’accès » pour fournir un chemin d’accès spécifique au répertoire de développeurs Xcode.
Remarque : XCode 12 est installé sur macOS-10.15 (ou version supérieure)", + "loc.input.label.xcodeDeveloperDir": "Chemin de Xcode Developer", + "loc.input.help.xcodeDeveloperDir": "(Facultatif) Entrez le chemin d'un répertoire Xcode Developer spécifique (exemple : '/Applications/Xcode_9.0.0.app/Contents/Developer'). Cela est utile quand plusieurs versions de Xcode sont installées sur la machine d'agent.", + "loc.input.label.packageApp": "Créer le package de l'application", + "loc.input.help.packageApp": "Indique si un fichier de package d'application IPA doit être généré dans le cadre de la build.", + "loc.input.label.archivePath": "Chemin d'archivage", + "loc.input.help.archivePath": "(Facultatif) Spécifiez le répertoire où doivent être placées les archives créées.", + "loc.input.label.exportPath": "Chemin d'exportation", + "loc.input.help.exportPath": "(Facultatif) Spécifiez la destination du produit exporté à partir de l'archive.", + "loc.input.label.exportOptions": "Options d'exportation", + "loc.input.help.exportOptions": "Sélectionnez la façon dont les options d'exportation de l'archive sont fournies. Quand la valeur par défaut 'Automatique' est sélectionnée, la méthode d'exportation est automatiquement détectée à partir de l'archive. Sélectionnez 'Plist' pour spécifier un fichier plist contenant les options d'exportation. Sélectionnez 'Spécifier' pour fournir une **Méthode d'exportation** et un **ID d'équipe** spécifique.", + "loc.input.label.exportMethod": "Méthode d'exportation", + "loc.input.help.exportMethod": "Entrez la méthode que Xcode doit utiliser pour exporter l'archive. Exemple : 'app-store', 'package', 'ad-hoc', 'enterprise' ou 'development'.", + "loc.input.label.exportTeamId": "ID d'équipe", + "loc.input.help.exportTeamId": "(Facultatif) Entrez l'ID d'équipe à 10 caractères du portail des développeurs Apple à utiliser durant l'exportation.", + "loc.input.label.exportOptionsPlist": "Fichier plist d'options d'exportation", + "loc.input.help.exportOptionsPlist": "Entrez le chemin du fichier plist qui contient les options à utiliser durant l'exportation.", + "loc.input.label.exportArgs": "Exporter les arguments", + "loc.input.help.exportArgs": "(Facultatif) Entrez des arguments de ligne de commande supplémentaires à utiliser durant l'exportation.", + "loc.input.label.signingOption": "Style de signature", + "loc.input.help.signingOption": "Choisissez la méthode de signature de la build. Sélectionnez 'Ne pas signer le code' pour désactiver la signature. Sélectionnez 'Paramètres par défaut du projet' pour utiliser uniquement la configuration de signature du projet. Sélectionnez 'Signature manuelle' pour forcer la signature manuelle et spécifier éventuellement une identité de signature et un profil de provisionnement. Sélectionnez 'Signature automatique' pour forcer la signature automatique et spécifier éventuellement un ID d'équipe de développement. Si votre projet nécessite une signature, utilisez les tâches \"Installer Apple...\" pour installer les certificats et les profils de provisionnement avant la build Xcode.", + "loc.input.label.signingIdentity": "Identité de signature", + "loc.input.help.signingIdentity": "(Facultatif) Entrez une identité de signature de remplacement à utiliser pour signer la build. Cela peut nécessiter le déverrouillage du trousseau par défaut sur la machine d'agent. En l'absence de valeur, le paramètre du projet Xcode est utilisé.", + "loc.input.label.provisioningProfileUuid": "UUID du profil de provisionnement", + "loc.input.help.provisioningProfileUuid": "(Facultatif) Entrez l'UUID d'un profil de provisionnement installé à utiliser pour cette build. Utilisez des tâches de build distinctes avec différents schémas ou cibles pour spécifier des profils de provisionnement distincts par cible dans un espace de travail unique (iOS, tvOS, watchOS).", + "loc.input.label.provisioningProfileName": "Nom du profil de provisionnement", + "loc.input.help.provisioningProfileName": "(Facultatif) Entrez le nom d'un profil de provisionnement installé à utiliser pour cette build. Si cette option est spécifiée, elle est prioritaire sur l'UUID du profil de provisionnement. Utilisez des tâches de build distinctes avec différents schémas ou cibles pour spécifier des profils de provisionnement distincts par cible dans un seul espace de travail (iOS, tvOS, watchOS).", + "loc.input.label.teamId": "ID d'équipe", + "loc.input.help.teamId": "(Facultatif, sauf si vous êtes membre de plusieurs équipes de développement.) Spécifiez l'ID d'équipe de développement à 10 caractères.", + "loc.input.label.destinationPlatformOption": "Plateforme de destination", + "loc.input.help.destinationPlatformOption": "Sélectionnez la plateforme d'appareil de destination à utiliser pour les tests d'IU quand l'appareil de build générique est non valide. Choisissez 'Personnalisé' pour spécifier une plateforme non incluse dans cette liste. Quand 'Par défaut' est sélectionné, aucun simulateur ou appareil n'est ciblé.", + "loc.input.label.destinationPlatform": "Plateforme de destination personnalisée", + "loc.input.help.destinationPlatform": "Entrez une plateforme d'appareil de destination à utiliser pour les tests d'IU quand l'appareil de build générique est non valide.", + "loc.input.label.destinationTypeOption": "Type de destination", + "loc.input.help.destinationTypeOption": "Choisissez le type de destination à utiliser pour les tests d'IU. Les appareils doivent être connectés au Mac qui effectue la build via une connexion par câble ou réseau. Consultez Appareils et simulateurs dans Xcode.", + "loc.input.label.destinationSimulators": "Simulator", + "loc.input.help.destinationSimulators": "Entrez un nom de simulateur Xcode à utiliser pour les tests d'IU. Par exemple, entrez 'iPhone X' (iOS et watchOS) ou 'Apple TV 4K' (tvOS). La version du système d'exploitation cible est facultative et peut être spécifiée au format suivant 'OS=numéro_version', par exemple 'iPhone X,OS=11.1'. Vous trouverez une liste des simulateurs installés sur l'agent macOS hébergé [ici](https://go.microsoft.com/fwlink/?linkid=875290).", + "loc.input.label.destinationDevices": "Appareil", + "loc.input.help.destinationDevices": "Entrez le nom de l'appareil à utiliser pour les tests d'IU, par exemple 'iPad de Laurent'.", + "loc.input.label.args": "Arguments", + "loc.input.help.args": "(Facultatif) Entrez des arguments de ligne de commande supplémentaires à utiliser pour la build. Cela permet de spécifier les arguments '-target' ou '-project' au lieu de spécifier un espace de travail/projet et un schéma.", + "loc.input.label.cwd": "Répertoire de travail", + "loc.input.help.cwd": "(Facultatif) Entrez le répertoire de travail dans lequel exécuter la build. Si vous n'entrez aucune valeur, la racine du dépôt est utilisée.", + "loc.input.label.useXcpretty": "Utiliser xcpretty", + "loc.input.help.useXcpretty": "Indiquez si vous souhaitez utiliser xcpretty pour mettre en forme la sortie de xcodebuild. Au préalable, xcpretty doit être installé sur la machine d'agent. Si xcpretty n'est pas installé, la sortie brute de xcodebuild est affichée. Le formateur xcpretty est préinstallé sur les agents de build hébergés Azure Pipelines. Consultez [xcpretty](https://github.com/supermarin/xcpretty) sur GitHub.", + "loc.input.label.xcprettyArgs": "Arguments xcpretty", + "loc.input.help.xcprettyArgs": "Arguments supplémentaires à passer à xcpretty.", + "loc.input.label.publishJUnitResults": "Publier les résultats des tests sur Azure Pipelines", + "loc.input.help.publishJUnitResults": "Indiquez si les résultats des tests JUnit doivent être publiés sur Azure Pipelines. Vous devez activer xcpretty pour permettre la génération des résultats des tests JUnit.", + "loc.input.label.testRunTitle": "Titre de la série de tests", + "loc.input.help.testRunTitle": "Titre de la série de tests pour la publication des résultats des tests JUnit sur Azure Pipelines.", + "loc.messages.SignIdNotFound": "Échec de la localisation de l'identité de signature iOS. Vérifiez que les informations de signature et de provisionnement sont fournies.", + "loc.messages.TempKeychainSetupFailed": "Échec de l'ajout du trousseau de clés temporaire au chemin de recherche des trousseaux de clés.", + "loc.messages.ProvProfileDetailsNotFound": "Échec de la localisation des détails du profil de provisionnement : %s", + "loc.messages.ProvProfileUUIDNotFound": "Échec de la localisation de l'UUID du profil de provisionnement : %s", + "loc.messages.MultipleWorkspacesFound": "Plusieurs correspondances avec l'espace de travail Xcode ont été trouvées. La première correspondance est utilisée : %s", + "loc.messages.WorkspaceDoesNotExist": "L'espace de travail Xcode a été spécifié mais il n'existe pas ou n'est pas un répertoire : %s", + "loc.messages.UseXcprettyForTestPublishing": "Activez 'Utiliser xcpretty' pour publier les résultats des tests. Pour cette build, aucun résultat de test n'est publié.", + "loc.messages.NoTestResultsFound": "Il n'existe aucun fichier de résultat de test correspondant à '%s'. La publication des résultats des tests JUnit va être ignorée.", + "loc.messages.XcodeSuccess": "L'exécution de la tâche Xcode s'est effectuée sans erreurs.", + "loc.messages.TempKeychainDeleteFailed": "Échec de la suppression du trousseau temporaire créé durant la build : '%s'", + "loc.messages.ProvProfileDeleteFailed": "Échec de la suppression du profil de provisionnement '%s'.", + "loc.messages.ExportMethodNotIdentified": "Échec de l'identification automatique de la méthode d'exportation à utiliser à partir du fichier d'archive. Cela peut entraîner des erreurs de build ou produire un package non valide. En cas d'échec de l'exportation, activez la signature (affectez à 'Style de signature' la valeur 'Paramètres par défaut du projet'), ou configurez l'exportation manuellement (affectez à 'Options d'exportation' la valeur 'Plist' ou 'Spécifier').", + "loc.messages.ExportOptionsPlistInvalidFilePath": "Le fichier plist d'options d'exportation n'existe pas sur '%s'. Indiquez le chemin d'un fichier plist valide.", + "loc.messages.SchemeRequiredForArchive": "Vous devez spécifier le schéma pour pouvoir générer le package à l'aide des commandes d'archivage et d'exportation xcodebuild.", + "loc.messages.WorkspaceOrProjectRequiredForArchive": "Vous devez spécifier le chemin de l'espace de travail ou du projet pour pouvoir générer le package à l'aide des commandes d'archivage et d'exportation xcodebuild.", + "loc.messages.FailedToGenerateExportOptionsPlist": "Échec de la génération automatique d'un fichier Plist d'options d'exportation pour l'exportation d'un fichier IPA. Spécifiez un fichier plist d'options d'exportation dans 'Options de package'.", + "loc.messages.LocateXcodeBasedOnVersion": "Localisation du chemin du développeur pour Xcode '%s'.", + "loc.messages.FailedToLocateSpecifiedXcode": "Impossible de résoudre le chemin du développeur pour Xcode '%s'. Définissez la variable d'environnement '%s' sur la machine d'agent, ou affectez à 'Version de Xcode' la valeur 'Par défaut' ou 'Spécifier le chemin'.", + "loc.messages.CantDetermineProvisioningStyle": "Le style de provisionnement est introuvable dans un fichier pbxProject. La signature automatique va être utilisée. Si le projet utilise la signature manuelle, l'exportation automatique risque de ne pas pouvoir s'effectuer. Vous pouvez affecter à Options d'exportation les valeurs Plist ou Spécifier comme solution de contournement.", + "loc.messages.MultipleSchemesFound": "L'espace de travail contient plusieurs schémas. Aucun schéma sélectionné. Utilisez Scheme pour spécifier un schéma cible.", + "loc.messages.NoSchemeFound": "Schéma partagé introuvable dans l'espace de travail. Utilisez Gérer Schemes dans Xcode pour partager un schéma.", + "loc.messages.SchemeSelected": "L'espace de travail contient un seul schéma partagé. '%s' va être utilisé.", + "loc.messages.FailedToFindScheme": "Schéma introuvable dans l'espace de travail. Utilisez 'Schéma' pour spécifier un schéma cible.", + "loc.messages.OutputDirectoryIgnored": "Le répertoire de sortie de build (fichiers binaires) est ignoré. La spécification d'un répertoire de sortie est incompatible avec l'action '%s'.", + "loc.messages.NoDestinationPlatformWarning": "Les tests d'IU doivent être exécutés sur un simulateur ou un appareil connecté. Dans la tâche Xcode, affectez à Plateforme de destination une autre valeur que 'Par défaut'.", + "loc.messages.XcprettyNotInstalled": "xcpretty n'est pas installé sur le serveur de builds. La sortie brute de xcodebuild va être affichée. La publication des résultats des tests sera un échec, si xcpretty n'est pas installé.", + "loc.messages.XcodeRequiresMac": "L'utilisation de Xcode nécessite un agent macOS. La génération avec Xcode sur Linux ou Windows n'est pas prise en charge par Apple.", + "loc.messages.UsingDefaultSimulator": "Utilisation du simulateur par défaut : %s." +} \ No newline at end of file diff --git a/_generated/XcodeV5_Node20/Strings/resources.resjson/it-IT/resources.resjson b/_generated/XcodeV5_Node20/Strings/resources.resjson/it-IT/resources.resjson new file mode 100644 index 000000000000..b11c9063b905 --- /dev/null +++ b/_generated/XcodeV5_Node20/Strings/resources.resjson/it-IT/resources.resjson @@ -0,0 +1,101 @@ +{ + "loc.friendlyName": "Xcode", + "loc.helpMarkDown": "[Altre informazioni su questa attività](https://go.microsoft.com/fwlink/?LinkID=613730). In alternativa [vedere la documentazione di Xcode](https://developer.apple.com/xcode/)", + "loc.description": "Consente di compilare, testare o archiviare un'area di lavoro Xcode in macOS. Facoltativamente crea il pacchetto di un'app.", + "loc.instanceNameFormat": "Xcode $(actions)", + "loc.releaseNotes": "Questa versione dell'attività è compatibile con Xcode 8-13. Le funzionalità presenti solo per garantire la compatibilità con Xcode 7 sono state rimosse. L'attività include opzioni ottimizzate per l'uso di agenti macOS ospitati da Microsoft.", + "loc.group.displayName.sign": "Firma e provisioning", + "loc.group.displayName.package": "Opzioni pacchetto", + "loc.group.displayName.devices": "Dispositivi e simulatori", + "loc.group.displayName.advanced": "Avanzate", + "loc.input.label.actions": "Azioni", + "loc.input.help.actions": "Consente di immettere un elenco di azioni delimitate da spazi. Alcune opzioni valide sono `build`, `clean`, `test`, `analyze` e `archive`. Con `clean build`, ad esempio, verrà eseguita una compilazione pulita.", + "loc.input.label.configuration": "Configurazione", + "loc.input.help.configuration": "Consente di immettere la configurazione del progetto o dell'area di lavoro Xcode da compilare. Il valore predefinito di questo campo è la variabile `$(Configuration)`. Quando si usa una variabile, assicurarsi di specificare una variabile, ad esempio `Release` nella scheda **Variabili**.", + "loc.input.label.sdk": "SDK", + "loc.input.help.sdk": "Consente di specificare un SDK da usare durante la compilazione del progetto o dell'area di lavoro Xcode. Dall'applicazione Terminal di macOS eseguire `xcodebuild -showsdks` per visualizzare l'elenco di SDK validi. Il valore predefinito di questo campo è la variabile `$(SDK)`. Quando si usa una variabile, assicurarsi di specificare un valore, ad esempio `iphonesimulator`, nella scheda **Variabili**.", + "loc.input.label.xcWorkspacePath": "Percorso progetto o area di lavoro", + "loc.input.help.xcWorkspacePath": "(Facoltativo) Consente di immettere un percorso relativo dalla radice del repository all'area di lavoro o al progetto Xcode, ad esempio `MyApp/MyApp.xcworkspace` o `MyApp/MyApp.xcodeproj`. È possibile usare i caratteri jolly. [Altre informazioni](https://go.microsoft.com/fwlink/?linkid=856077)", + "loc.input.label.scheme": "Schema", + "loc.input.help.scheme": "(Facoltativo) Consente di immettere un nome di schema definito in Xcode. Deve essere uno schema condiviso, per il quale la casella di controllo Shared è selezionata in Managed Schemes in Xcode. Se si specifica sopra l'opzione Percorso progetto o area di lavoro senza specificare uno schema verrà usato automaticamente lo schema condiviso dell'area di lavoro, se questa ne include uno solo.", + "loc.input.label.xcodeVersion": "Versione di Xcode", + "loc.input.help.xcodeVersion": "Specificare la versione di destinazione di Xcode. Selezionare 'Predefinita' per usare la versione predefinita di Xcode nel computer agente. La selezione di un numero di versione, ad esempio 'Xcode 9', si basa sulle variabili di ambiente impostate nel computer agente per il percorso della versione (ad esempio, 'XCODE_9_DEVELOPER_DIR=/Applications/Xcode_9.0.0.app/Contents/Developer'). Selezionare 'Specifica percorso' per specificare un percorso per la directory per sviluppatori di Xcode.
Nota: Xcode 12 è installato su macOS-10.15 o versione successiva", + "loc.input.label.xcodeDeveloperDir": "Percorso sviluppatori Xcode", + "loc.input.help.xcodeDeveloperDir": "(Facoltativo) Consente di immettere un percorso di una directory specifica per sviluppatori Xcode, ad esempio `/Applications/Xcode_9.0.0.app/Contents/Developer`. È utile quando nel computer agente sono installate più versioni di Xcode.", + "loc.input.label.packageApp": "Crea pacchetto dell'app", + "loc.input.help.packageApp": "Indica se durante la compilazione deve essere generato un file di pacchetto dell'app IPA.", + "loc.input.label.archivePath": "Percorso archivio", + "loc.input.help.archivePath": "(Facoltativo) Consente di specificare una directory in cui inserire gli archivi creati.", + "loc.input.label.exportPath": "Percorso di esportazione", + "loc.input.help.exportPath": "(Facoltativo) Consente di specificare la destinazione del prodotto esportato dall'archivio.", + "loc.input.label.exportOptions": "Opzioni di esportazione", + "loc.input.help.exportOptions": "Consente di selezionare un modo per specificare le opzioni di esportazione dell'archivio. Quando si seleziona il valore predefinito `Automatico`, il metodo di esportazione viene rilevato automaticamente dall'archivio. Selezionare `Plist` per specificare un file plist contenente le opzioni di esportazione. Selezionare `Specifica` per indicare un valore specifico per **Metodo di esportazione** e **ID team**.", + "loc.input.label.exportMethod": "Metodo di esportazione", + "loc.input.help.exportMethod": "Consente di immettere il metodo che Xcode deve usare per esportare l'archivio, ad esempio `app-store`, `package`, `ad-hoc`, `enterprise` o `development`.", + "loc.input.label.exportTeamId": "ID team", + "loc.input.help.exportTeamId": "(Facoltativo) Consente di immettere l'ID team di 10 caratteri del portale Apple Developer da usare durante l'esportazione.", + "loc.input.label.exportOptionsPlist": "Plist opzioni esportazione", + "loc.input.help.exportOptionsPlist": "Consente di immettere il percorso del file plist contenente le opzioni da usare durante l'esportazione.", + "loc.input.label.exportArgs": "Argomenti per esportazione", + "loc.input.help.exportArgs": "(Facoltativo) Consente di immettere gli argomenti della riga di comando aggiuntivi da usare durante l'esportazione.", + "loc.input.label.signingOption": "Stile di firma", + "loc.input.help.signingOption": "Consente di scegliere il metodo di firma della compilazione. Selezionare `Non firmare il codice` per disabilitare la firma. Selezionare `Impostazioni predefinite progetto` per usare solo la configurazione di firma del progetto. Selezionare `Firma manuale` per forzare la firma manuale e specificare facoltativamente un'identità di firma e un profilo di provisioning. Selezionare `Firma automatica` per forzare la firma automatica e facoltativamente specificare un ID team di sviluppo. Se il progetto richiede la firma, usare le attività di tipo \"Installa Apple...\" per installare i certificati e i profili di provisioning prima della compilazione Xcode.", + "loc.input.label.signingIdentity": "Identità di firma", + "loc.input.help.signingIdentity": "(Facoltativo) Consente di immettere un override per l'identità di firma con cui firmare la compilazione. Per questa operazione potrebbe essere necessario sbloccare il keychain predefinito nel computer agente. Se non viene immesso alcun valore, verrà usata l'impostazione del progetto Xcode.", + "loc.input.label.provisioningProfileUuid": "UUID del profilo di provisioning", + "loc.input.help.provisioningProfileUuid": "(Facoltativo) Consente di immettere l'UUID di un profilo di provisioning installato da usare per questa compilazione. Usare attività di compilazione distinte con destinazioni o schemi diversi per specificare i profili di provisioning in base alla destinazione in una singola area di lavoro (iOS, tvOS, watchOS).", + "loc.input.label.provisioningProfileName": "Nome del profilo di provisioning", + "loc.input.help.provisioningProfileName": "(Facoltativo) Consente di immettere il nome di un profilo di provisioning installato da usare per questa compilazione. Se specificato, tale nome ha la precedenza rispetto all'UUID del profilo di provisioning. Usare attività di compilazione distinte con destinazioni o schemi diversi per specificare i profili di provisioning in base alla destinazione in una singola area di lavoro (iOS, tvOS, watchOS).", + "loc.input.label.teamId": "ID team", + "loc.input.help.teamId": "(Facoltativo, a meno che non si è membri di più team di sviluppo) Consente di specificare l'ID del team di sviluppo a 10 caratteri.", + "loc.input.label.destinationPlatformOption": "Piattaforma di destinazione", + "loc.input.help.destinationPlatformOption": "Consente di selezionare la piattaforma del dispositivo di destinazione da usare per il test dell'interfaccia utente quando il dispositivo di compilazione generico non è valido. Scegliere `Personalizzata` per specificare una piattaforma non inclusa in questo elenco. Se è selezionata l'opzione `Predefinita`, non verranno specificati simulatori o dispositivi di destinazione.", + "loc.input.label.destinationPlatform": "Piattaforma di destinazione personalizzata", + "loc.input.help.destinationPlatform": "Consente di immettere la piattaforma di un dispositivo di destinazione da usare per il test dell'interfaccia utente quando il dispositivo di compilazione generico non è valido.", + "loc.input.label.destinationTypeOption": "Tipo di destinazione", + "loc.input.help.destinationTypeOption": "Consente di scegliere il tipo di destinazione da usare per il test dell'interfaccia utente. I dispositivi devono essere connessi al Mac che esegue la compilazione tramite una connessione via cavo o di rete. Vedere Dispositivi e simulatori in Xcode.", + "loc.input.label.destinationSimulators": "Simulatore", + "loc.input.help.destinationSimulators": "Consente di immettere il nome di un simulatore Xcode da usare per il test dell'interfaccia utente. Ad esempio, immettere `iPhone X` (iOS e watchOS) o `Apple TV 4K` (tvOS). La versione del sistema operativo di destinazione è facoltativa e può essere specificata in formato 'OS=numeroVersione', ad esempio `iPhone X,OS=11.1`. Per un elenco di simulatori installati nell'agente Hosted macOS, vedere [qui](https://go.microsoft.com/fwlink/?linkid=875290).", + "loc.input.label.destinationDevices": "Dispositivo", + "loc.input.help.destinationDevices": "Consente di immettere il nome del dispositivo da usare per il test dell'interfaccia utente, ad esempio `iPad di Maria`.", + "loc.input.label.args": "Argomenti", + "loc.input.help.args": "(Facoltativo) Consente di immettere argomenti aggiuntivi della riga di comando con cui eseguire la compilazione. È utile per specificare gli argomenti `-target` o `-project` invece di specificare un'area di lavoro/un progetto e uno schema.", + "loc.input.label.cwd": "Directory di lavoro", + "loc.input.help.cwd": "(Facoltativo) Consente di immettere la directory di lavoro in cui eseguire la compilazione. Se non si specifica alcun valore, verrà usata la radice del repository.", + "loc.input.label.useXcpretty": "Usa xcpretty", + "loc.input.help.useXcpretty": "Consente di specificare se usare xcpretty per formattare l'output di xcodebuild. Se si abilita questa opzione, xcpretty deve essere installato nel computer agente. Se xcpretty non è installato, viene visualizzato output xcodebuild non elaborato. xcpretty è preinstallato in agenti di compilazione ospitati di Azure Pipelines. Vedere [xcpretty](https://github.com/supermarin/xcpretty) in GitHub.", + "loc.input.label.xcprettyArgs": "Argomenti di xcpretty", + "loc.input.help.xcprettyArgs": "Argomenti aggiuntivi da passare a xcpretty.", + "loc.input.label.publishJUnitResults": "Pubblica i risultati dei test in Azure Pipelines", + "loc.input.help.publishJUnitResults": "Specificare se pubblicare i risultati dei test di JUnit in Azure Pipelines. Per generare i risultati dei test di JUnit, è necessario abilitare xcpretty.", + "loc.input.label.testRunTitle": "Titolo dell'esecuzione dei test", + "loc.input.help.testRunTitle": "Titolo dell'esecuzione dei test durante la pubblicazione dei risultati dei test JUnit in Azure Pipelines.", + "loc.messages.SignIdNotFound": "Non è stato possibile trovare l'identità di firma iOS. Verificare che siano state specificate le informazioni su firma e provisioning.", + "loc.messages.TempKeychainSetupFailed": "Non è stato possibile aggiungere la keychain temporanea al percorso di ricerca delle keychain.", + "loc.messages.ProvProfileDetailsNotFound": "Non è stato possibile trovare i dettagli per il profilo di provisioning: %s", + "loc.messages.ProvProfileUUIDNotFound": "Non è stato possibile trovare l'UUID per il profilo di provisioning: %s", + "loc.messages.MultipleWorkspacesFound": "Sono state trovate più corrispondenze dell'area di lavoro Xcode. Verrà usata la prima corrispondenza: %s", + "loc.messages.WorkspaceDoesNotExist": "È stata specificata l'area di lavoro Xcode che però non esiste o non è una directory: %s", + "loc.messages.UseXcprettyForTestPublishing": "Abilitare 'Usa xcpretty' per pubblicare i risultati del test. Per questa compilazione non verrà pubblicato alcun risultato.", + "loc.messages.NoTestResultsFound": "Non sono stati trovati file dei risultati del test corrispondenti a `%s`. La pubblicazione dei risultati del test JUnit verrà ignorata.", + "loc.messages.XcodeSuccess": "L'esecuzione dell'attività Xcode è stata completata senza errori.", + "loc.messages.TempKeychainDeleteFailed": "Non è stato possibile eliminare la keychain temporanea creata durante la compilazione: `%s`", + "loc.messages.ProvProfileDeleteFailed": "Non è stato possibile eliminare il profilo di provisioning `%s`.", + "loc.messages.ExportMethodNotIdentified": "Non è stato possibile identificare automaticamente il metodo di esportazione da usare dal file di archivio. Potrebbero verificarsi errori durante la compilazione oppure il pacchetto prodotto potrebbe non essere valido. Se l'esportazione non riesce, abilitare la firma (impostare `Stile di firma` su `Impostazioni predefinite progetto`) oppure configurare manualmente l'esportazione (impostare `Opzioni di esportazione` su `Plist` o `Specifica`).", + "loc.messages.ExportOptionsPlistInvalidFilePath": "Il file plist di `Opzioni esportazione` non esiste in `%s`. Specificare il percorso di un file plist valido.", + "loc.messages.SchemeRequiredForArchive": "Per generare il pacchetto con xcodebuild archive ed export, è necessario specificare lo schema.", + "loc.messages.WorkspaceOrProjectRequiredForArchive": "Per generare il pacchetto con xcodebuild archive ed export, è necessario specificare il percorso dell'area di lavoro o del progetto.", + "loc.messages.FailedToGenerateExportOptionsPlist": "Non è stato possibile generare automaticamente un file plist di `Opzioni di esportazione` per esportare un IPA. Specificare un file plist `Opzioni di esportazione` in `Opzioni pacchetto`.", + "loc.messages.LocateXcodeBasedOnVersion": "Individuazione del percorso sviluppatori per Xcode `%s`", + "loc.messages.FailedToLocateSpecifiedXcode": "Non è possibile risolvere il percorso sviluppatori per Xcode `%s`. Impostare la variabile di ambiente `%s` nel computer agente oppure impostare `Versione di Xcode` su `Predefinita` o `Specificare il percorso`.", + "loc.messages.CantDetermineProvisioningStyle": "Lo stile di provisioning non è stato trovato in un file pbxProject. Verrà usata la firma automatica. Se il progetto usa la firma manuale, è possibile che l'esportazione automatica non riesca. Per ovviare al problema, è possibile impostare `Opzioni esportazione` su `Plist` o `Specifica`.", + "loc.messages.MultipleSchemesFound": "L'area di lavoro contiene più schemi, ma non ne è stato selezionato nessuno. Usare `Scheme` per specificare uno schema di destinazione.", + "loc.messages.NoSchemeFound": "Non è stato trovato alcuno schema condiviso nell'area di lavoro. Usare \"Gestisci Schemes\" in Xcode per condividere uno schema.", + "loc.messages.SchemeSelected": "L'area di lavoro contiene un unico schema condiviso. Verrà usato '%s'.", + "loc.messages.FailedToFindScheme": "Non è stato possibile trovare uno schema nell'area di lavoro. Usare `Schema` per specificare uno schema di destinazione.", + "loc.messages.OutputDirectoryIgnored": "La directory di output per l'output di compilazione (file binari) è stata ignorata. La specifica di una directory di output è incompatibile con l'azione '%s'.", + "loc.messages.NoDestinationPlatformWarning": "I test dell'interfaccia utente devono essere eseguiti su un simulatore o un dispositivo connesso. Nell'attività Xcode impostare `Piattaforma di destinazione` su un valore diverso da `Predefinita`.", + "loc.messages.XcprettyNotInstalled": "xcpretty non è installato nel server di compilazione. Verrà visualizzato l'output non elaborato di xcodebuild. La pubblicazione dei risultati dei test non riuscirà se xcpretty non è installato.", + "loc.messages.XcodeRequiresMac": "Per usare Xcode, è richiesto un agente macOS. La compilazione con Xcode in Linux o Windows non è supportata da Apple.", + "loc.messages.UsingDefaultSimulator": "Uso del simulatore predefinito: %s." +} \ No newline at end of file diff --git a/_generated/XcodeV5_Node20/Strings/resources.resjson/ja-JP/resources.resjson b/_generated/XcodeV5_Node20/Strings/resources.resjson/ja-JP/resources.resjson new file mode 100644 index 000000000000..539a14943218 --- /dev/null +++ b/_generated/XcodeV5_Node20/Strings/resources.resjson/ja-JP/resources.resjson @@ -0,0 +1,101 @@ +{ + "loc.friendlyName": "Xcode", + "loc.helpMarkDown": "[このタスクの詳細を表示](https://go.microsoft.com/fwlink/?LinkID=613730)、または [Xcode のドキュメントを参照](https://developer.apple.com/xcode/)", + "loc.description": "macOS で Xcode ワークスペースをビルド、テスト、アーカイブします。オプションでアプリをパッケージ化します。", + "loc.instanceNameFormat": "Xcode $(actions)", + "loc.releaseNotes": "タスクのこのバージョンは Xcode 8 から 13 と互換性があります。Xcode 7 との互換性を維持するためだけの機能は削除されています。Microsoft によってホストされている macOS エージェントを使用する場合、このタスクよりも良いオプションがあります。", + "loc.group.displayName.sign": "署名およびプロビジョニング", + "loc.group.displayName.package": "パッケージのオプション", + "loc.group.displayName.devices": "デバイスとシミュレーター", + "loc.group.displayName.advanced": "詳細設定", + "loc.input.label.actions": "アクション", + "loc.input.help.actions": "アクションのスペース区切りリストを入力してください。有効なオプションには、`build`、`clean`、`test`、`analyze`、`archive` があります。たとえば、`clean build` でクリーン ビルドが実行されます。", + "loc.input.label.configuration": "構成", + "loc.input.help.configuration": "ビルドする Xcode プロジェクトまたはワークスペース構成を入力します。このフィールドの既定値は変数 '$(Configuration)' です。変数を使用するときには、[変数] タブに値 (`Release` など) を必ず指定します。", + "loc.input.label.sdk": "SDK", + "loc.input.help.sdk": "Xcode プロジェクトまたはワークスペースをビルドするときに使う SDK を指定します。SDK の有効なリストを表示するには、macOS のターミナル アプリケーションから `xcodebuild -showsdks` を実行します。このフィールドの既定値は、変数 `$(SDK)` です。変数を使うときは、[**変数**] タブの値を必ず指定してください (例: `iphonesimulator`)。", + "loc.input.label.xcWorkspacePath": "ワークスペースまたはプロジェクト パス", + "loc.input.help.xcWorkspacePath": "(省略可能) Xcode ワークスペースまたはプロジェクトに対するリポジトリのルートからの相対パスを入力します。たとえば、'MyApp/MyApp.xcworkspace' または 'MyApp/MyApp.xcodeproj' です。ワイルドカードを使用できます ([詳細情報](https://go.microsoft.com/fwlink/?linkid=856077))。", + "loc.input.label.scheme": "スキーム", + "loc.input.help.scheme": "(省略可能) Xcode で定義されているスキーム名を入力します。共有スキームである必要があります。そのためには、Xcode の [管理スキーム] の下にある [共有] チェック ボックスを有効にします。スキームを指定しないで上の [ワークスペースまたはプロジェクトのパス] を指定し、かつワークスペースが単一の共有スキームを持つ場合、それが自動的に使用されます。", + "loc.input.label.xcodeVersion": "Xcode バージョン", + "loc.input.help.xcodeVersion": "Xcode のターゲット バージョンを指定します。エージェント マシン上の Xcode の既定バージョンを使用するには、[既定] を選択します。選択するバージョン番号 (例: [Xcode 9]) は、エージェント マシンに設定されているバージョンの場所の環境変数 (例: XCODE_9_DEVELOPER_DIR=/Applications/Xcode_9.0.0.app/Contents/Developer) に依存しています。Xcode Developer ディレクトリへの特定のパスを指定する場合には [パスの指定] を選択します。
注: XCode 12 は macOS-10.15 移行にインストールされます", + "loc.input.label.xcodeDeveloperDir": "Xcode Developer パス", + "loc.input.help.xcodeDeveloperDir": "(省略可能) 特定の Xcode Developer ディレクトリ パスを入力します (例: Applications/Xcode_9.0.0.app/Contents/Developer)。これは、エージェント マシンに複数のバージョンの Xcode がインストールされている場合に役立ちます。", + "loc.input.label.packageApp": "アプリ パッケージの作成", + "loc.input.help.packageApp": "ビルドの一部として、IPA アプリ パッケージ ファイルを生成するかどうかを指定します。", + "loc.input.label.archivePath": "アーカイブ パス", + "loc.input.help.archivePath": "(省略可能) 作成したアーカイブを入れるディレクトリを指定します。", + "loc.input.label.exportPath": "エクスポート パス", + "loc.input.help.exportPath": "(省略可能) アーカイブからエクスポートされた製品の宛先を指定します。", + "loc.input.label.exportOptions": "エクスポート オプション", + "loc.input.help.exportOptions": "アーカイブのエクスポートのオプションの指定方法を選択します。既定値の [自動] を選択すると、エクスポート方法はアーカイブから自動的に検出されます。エクスポートのオプションを記載した Plist ファイルを指定するには [Plist] を選択します。特定の [**エクスポート方法**] や [**チーム ID**] を指定するには、[指定] を選択します。", + "loc.input.label.exportMethod": "エクスポート方法", + "loc.input.help.exportMethod": "Xcode でアーカイブをエクスポートするときに使用するメソッドを入力します。例: `app-store`、`package`、`ad-hoc`、`enterprise`、`development`。", + "loc.input.label.exportTeamId": "チーム ID", + "loc.input.help.exportTeamId": "(省略可能) エクスポート時に使用する、Apple Developer ポータルのチーム ID (10 文字) を入力します。", + "loc.input.label.exportOptionsPlist": "エクスポート オプションの plist", + "loc.input.help.exportOptionsPlist": "エクスポート中に使用するオプションが入った plist ファイルのパスを入力します。", + "loc.input.label.exportArgs": "エクスポート引数", + "loc.input.help.exportArgs": "(省略可能) エクスポート時に使用する追加のコマンド ライン引数を入力します。", + "loc.input.label.signingOption": "署名スタイル", + "loc.input.help.signingOption": "ビルドに署名する方法を選択します。署名を無効にする場合は、[署名をコーディングしない] を選択します。プロジェクトの署名構成のみを使用する場合は、[プロジェクトの既定値] を選択します。手動による署名を強制し、必要に応じて署名 ID とプロビジョニング プロファイルを指定する場合は、[手動署名] を選択します。自動署名を強制し、必要に応じて開発チーム ID を指定する場合には [自動署名] を選択します。プロジェクトで署名が必要な場合、Xcode のビルドの前に \"Apple 証明書のインストール\" タスクや \"Apple プロビジョニング プロファイルのインストール\" タスクを使用して、証明書およびプロビジョニング プロファイルをインストールします。", + "loc.input.label.signingIdentity": "署名 ID", + "loc.input.help.signingIdentity": "(省略可能) ビルドへの署名に使用する署名 ID のオーバーライドを入力します。これには、エージェント マシン上の既定のキーチェーンをロック解除することが必要な場合があります。値を入力しない場合、Xcode プロジェクトの設定が使用されます。", + "loc.input.label.provisioningProfileUuid": "プロビジョニング プロファイル UUID", + "loc.input.help.provisioningProfileUuid": "(省略可能) このビルドに使用される、インストール済みプロビジョニング プロファイルの UUID を入力します。異なるスキームまたはターゲットを持つ個別のビルド タスクを用いて、1 つのワークスペース (iOS、tvOS、watchOS) でターゲットごとに個別のプロビジョニング プロファイルを指定します。", + "loc.input.label.provisioningProfileName": "プロビジョニング プロファイルの名前", + "loc.input.help.provisioningProfileName": "(省略可能) このビルドに使用される、インストール済みプロビジョニング プロファイルの名前を入力します。指定すると、この名前はプロビジョニング プロファイル UUID より優先されます。異なるスキームまたはターゲットを持つ個別のビルド タスクを用いて、1 つのワークスペース (iOS、tvOS、watchOS) でターゲットごとに個別のプロビジョニング プロファイルを指定します。", + "loc.input.label.teamId": "チーム ID", + "loc.input.help.teamId": "(複数の開発チームのメンバーではない場合には、省略可能) 開発チーム ID (10 文字) を指定します。", + "loc.input.label.destinationPlatformOption": "対象プラットフォーム", + "loc.input.help.destinationPlatformOption": "汎用のビルド デバイスが無効な場合に UI テストに使う宛先デバイスのプラットフォームを選択します。このリストに含まれていないプラットフォームを指定するには、[カスタム] を選択します。[既定] を選択すると、どのシミュレーターもデバイスも対象になりません。", + "loc.input.label.destinationPlatform": "カスタム対象プラットフォーム", + "loc.input.help.destinationPlatform": "汎用のビルド デバイスが無効な場合に UI テストに使用する対象デバイスのプラットフォームを入力します。", + "loc.input.label.destinationTypeOption": "対象の種類", + "loc.input.help.destinationTypeOption": "UI テストに使用する対象の種類を選択します。デバイスは、ケーブルまたはネットワーク接続を使用して、ビルドを実行する Mac に接続する必要があります。Xcode の [Devices and Simulators] を参照してください。", + "loc.input.label.destinationSimulators": "Simulator", + "loc.input.help.destinationSimulators": "UI テストに使用する Xcode シミュレーター名を入力します。たとえば、「iPhone X」(iOS と watchOS) または「Apple TV 4K」(tvOS) と入力します。ターゲット OS バージョンはオプションで、「OS=versionNumber」の形式 (例: 「iPhone X,OS=11.1」) で指定できます。Hosted macOS エージェントにインストールされているシミュレーターのリストは [ここをご覧ください](https://go.microsoft.com/fwlink/?linkid=875290)。", + "loc.input.label.destinationDevices": "デバイス", + "loc.input.help.destinationDevices": "UI テストに使用するデバイスの名前を入力します。例: 「Raisa の iPad」など。", + "loc.input.label.args": "引数", + "loc.input.help.args": "(オプション) ビルドに使用する追加のコマンド ライン引数を入力します。これは、ワークスペース/プロジェクトとスキームを指定するのではなく、`-target` または `-project` 引数を指定するのに役立ちます。", + "loc.input.label.cwd": "作業ディレクトリ", + "loc.input.help.cwd": "(省略可能) ビルドを実行する作業ディレクトリを入力します。値を入力しない場合は、リポジトリのルートが使用されます。", + "loc.input.label.useXcpretty": "xcpretty の使用", + "loc.input.help.useXcpretty": "xcpretty を使用して、xcodebuild 出力を書式設定するかどうかを指定します。これを有効にするには、xcpretty がエージェント マシンにインストールされている必要があります。xcpretty がインストールされていない場合は、未処理の xcodebuild 出力が表示されます。Azure Pipelines でホストされているビルド エージェントでは xcpretty はプレインストールされています。GitHub の [xcpretty](https://github.com/supermarin/xcpretty) を参照してください。", + "loc.input.label.xcprettyArgs": "xcpretty 引数", + "loc.input.help.xcprettyArgs": "xcpretty に渡す追加の引数。", + "loc.input.label.publishJUnitResults": "テスト結果を Azure Pipelines に公開する", + "loc.input.help.publishJUnitResults": "JUnit テスト結果を Azure Pipelines に公開するかどうかを指定します。これには、JUnit テスト結果を生成するために xcpretty が有効になっていることが必要です。", + "loc.input.label.testRunTitle": "テストの実行のタイトル", + "loc.input.help.testRunTitle": "JUnit のテスト結果を Azure Pipelines に公開するときの、テストの実行のタイトル。", + "loc.messages.SignIdNotFound": "iOS 署名 ID が見つかりませんでした。指定された署名とプロビジョニングの情報をご確認ください。", + "loc.messages.TempKeychainSetupFailed": "一時キーチェーンをキーチェーン検索パスに追加できませんでした。", + "loc.messages.ProvProfileDetailsNotFound": "プロビジョニング プロファイルの詳細が見つかりませんでした: %s", + "loc.messages.ProvProfileUUIDNotFound": "プロビジョニング プロファイルの UUID が見つかりませんでした: %s", + "loc.messages.MultipleWorkspacesFound": "Xcode ワークスペースの複数の一致が見つかりました。最初の一致が使用されます: %s", + "loc.messages.WorkspaceDoesNotExist": "Xcode ワークスペースが指定されていますが、存在しないか、ディレクトリではありません: %s", + "loc.messages.UseXcprettyForTestPublishing": "`Use xcpretty` を有効化してテスト結果を公開します。このビルドでは、テスト結果は公開されません。", + "loc.messages.NoTestResultsFound": "`%s` と一致するテスト結果ファイルが見つかりませんでした。JUnit テスト結果の発行はスキップされます。", + "loc.messages.XcodeSuccess": "Xcode タスクがエラーなしで実行されました。", + "loc.messages.TempKeychainDeleteFailed": "ビルド中に作成された一時キーチェーンを削除することができませんでした: `%s`", + "loc.messages.ProvProfileDeleteFailed": "プロビジョニング プロファイル `%s` を削除することができませんでした。", + "loc.messages.ExportMethodNotIdentified": "使用するエクスポート方法をアーカイブ ファイルから自動識別できませんでした。これにより、ビルド中にエラーが発生したり、無効なパッケージが生成されたりする可能性があります。エクスポートに失敗する場合、署名を有効にする ([署名スタイル] を [プロジェクトの既定値] に設定) か、エクスポートを手動で構成 ([エクスポート オプション] を [Plist] または [指定] に設定) してください。", + "loc.messages.ExportOptionsPlistInvalidFilePath": "[エクスポート オプション] の plist ファイルが '%s' に存在しません。有効な plist ファイルへのパスを指定してください。", + "loc.messages.SchemeRequiredForArchive": "xcodebuild アーカイブおよびエクスポートを使用してパッケージを生成するには、スキームを指定する必要があります。", + "loc.messages.WorkspaceOrProjectRequiredForArchive": "xcodebuild アーカイブおよびエクスポートを使用してパッケージを生成するには、ワークスペースまたはプロジェクト パスを指定する必要があります。", + "loc.messages.FailedToGenerateExportOptionsPlist": "IPA をエクスポートするための [エクスポート オプション] の plist ファイルの自動生成に失敗しました。[パッケージのオプション] で [エクスポート オプション] の plist ファイルを指定してください。", + "loc.messages.LocateXcodeBasedOnVersion": "Xcode `%s` の Developer パスを検索しています", + "loc.messages.FailedToLocateSpecifiedXcode": "Xcode '%s' の Developer パスを解決できません。エージェント マシンで '%s' 環境変数を設定するか、[Xcode バージョン] を [既定] または [パスの指定] に設定してください。", + "loc.messages.CantDetermineProvisioningStyle": "プロビジョニング スタイルが pbxProject ファイル内に見つかりませんでした。自動署名が使用されます。プロジェクトで手動署名を使用している場合は、自動エクスポートが失敗する可能性があります。この問題を回避するには、'Export options' を 'Plist' または 'Specify' に設定します。", + "loc.messages.MultipleSchemesFound": "ワークスペースに複数のスキームが含まれています。スキームが選択されていません。'Scheme' を使用してターゲット スキームを指定してください。", + "loc.messages.NoSchemeFound": "共有スキームがワークスペース内に見つかりません。スキームを共有するには、Xcode の \"Manage Schemes\" を使用します。", + "loc.messages.SchemeSelected": "ワークスペースには、単一の共有スキームが含まれています。'%s' が使用されます。", + "loc.messages.FailedToFindScheme": "ワークスペースでスキームが見つかりませんでした。[スキーム] を使用して、ターゲット スキームを指定します。", + "loc.messages.OutputDirectoryIgnored": "ビルド出力 (バイナリ) の出力ディレクトリは無視されます。出力ディレクトリを指定することは、'%s' アクションと矛盾します。", + "loc.messages.NoDestinationPlatformWarning": "UI テストをシミュレーターまたは接続されているデバイスに対して実行する必要があります。Xcode タスクでは、`Destination platform` を `Default` 以外の値に設定します。", + "loc.messages.XcprettyNotInstalled": "xcpretty はビルド サーバーにインストールされていません。xcodebuild の未加工の出力が表示されます。xcpretty がインストールされていない場合、テスト結果の公開は失敗します。", + "loc.messages.XcodeRequiresMac": "Xcode を使用するには、macOS エージェントが必要です。Apple は Linux または Windows 上で Xcode を使用するビルドをサポートしていません。", + "loc.messages.UsingDefaultSimulator": "既定のシミュレーターを使用しています: %s。" +} \ No newline at end of file diff --git a/_generated/XcodeV5_Node20/Strings/resources.resjson/ko-KR/resources.resjson b/_generated/XcodeV5_Node20/Strings/resources.resjson/ko-KR/resources.resjson new file mode 100644 index 000000000000..7fe8a001005f --- /dev/null +++ b/_generated/XcodeV5_Node20/Strings/resources.resjson/ko-KR/resources.resjson @@ -0,0 +1,101 @@ +{ + "loc.friendlyName": "Xcode", + "loc.helpMarkDown": "[이 작업에 대한 자세한 정보](https://go.microsoft.com/fwlink/?LinkID=613730) 또는 [Xcode 설명서 참조](https://developer.apple.com/xcode/)", + "loc.description": "macOS에서 Xcode 작업 영역을 빌드, 테스트 또는 보관합니다. 필요에 따라 앱을 패키지합니다.", + "loc.instanceNameFormat": "Xcode $(actions)", + "loc.releaseNotes": "이 버전의 작업은 Xcode 8~13과 호환됩니다. Xcode 7과 호환성을 유지하는 용도로만 사용되었던 기능은 제거되었습니다. 이 작업에서 Microsoft 호스팅 macOS 에이전트를 사용하는 옵션이 향상되었습니다.", + "loc.group.displayName.sign": "서명 및 프로비전", + "loc.group.displayName.package": "패키지 옵션", + "loc.group.displayName.devices": "장치 및 시뮬레이터", + "loc.group.displayName.advanced": "고급", + "loc.input.label.actions": "작업", + "loc.input.help.actions": "공백으로 구분된 작업 목록을 입력합니다. 유효한 몇 가지 옵션은 'build', 'clean', 'test', 'analyze', 'archive'입니다. 예를 들어 'clean build'는 클린 빌드를 실행합니다.", + "loc.input.label.configuration": "구성", + "loc.input.help.configuration": "빌드할 Xcode 프로젝트 또는 작업 영역 구성을 입력합니다. 이 필드의 기본값은 '$(Configuration)' 변수입니다. 변수를 사용하는 경우 **변수** 탭에서 값(예: '릴리스')을 지정해야 합니다.", + "loc.input.label.sdk": "SDK", + "loc.input.help.sdk": "Xcode 프로젝트 또는 작업 영역을 빌드할 때 사용할 SDK를 지정합니다. macOS 터미널 응용 프로그램에서 'xcodebuild -showsdks'를 실행하여 유효한 SDK 목록을 표시합니다. 이 필드의 기본값은 '$(SDK)' 변수입니다. 변수를 사용하는 경우 **변수** 탭에서 값(예: 'iphonesimulator')을 지정해야 합니다.", + "loc.input.label.xcWorkspacePath": "작업 영역 또는 프로젝트 경로", + "loc.input.help.xcWorkspacePath": "(선택 사항) 리포지토리의 루트에서 Xcode 작업 영역 또는 프로젝트로의 상대 경로를 입력합니다. 예를 들어 'MyApp/MyApp.xcworkspace' 또는 'MyApp/MyApp.xcodeproj'입니다. 와일드카드를 사용할 수 있습니다([자세한 정보](https://go.microsoft.com/fwlink/?linkid=856077)).", + "loc.input.label.scheme": "구성표", + "loc.input.help.scheme": "(옵션) Xcode에서 정의된 구성표 이름을 입력합니다. Xcode에서 관리된 구성표 아래의 공유 확인란이 선택된 공유 체계여야 합니다. 구성표를 지정하지 않고 위에서 작업 영역 또는 프로젝트 경로를 지정하면 작업 영역에 단일 공유 구성표가 있을 경우 이 구성표가 자동으로 사용됩니다.", + "loc.input.label.xcodeVersion": "Xcode 버전", + "loc.input.help.xcodeVersion": "Xcode의 대상 버전을 지정합니다. 에이전트 컴퓨터에서 Xcode의 기본 버전을 사용하려면 '기본값'을 선택합니다. 버전 번호(예: 'Xcode 9')를 선택하면 버전 위치(예: 'XCODE_9_DEVELOPER_DIR=/Applications/Xcode_9.0.0.app/Contents/Developer')에 대해 에이전트 컴퓨터에 설정되어 있는 환경 변수에 의존하게 됩니다. Xcode 개발자 디렉터리에 특정 경로를 제공하려면 '경로 지정'을 선택합니다.
참고: XCode 12는 macOS-10.15(또는 이상)에 설치됩니다", + "loc.input.label.xcodeDeveloperDir": "Xcode 개발자 경로", + "loc.input.help.xcodeDeveloperDir": "(옵션) 특정 Xcode 개발자 디렉터리의 경로를 입력합니다(예: '/Applications/Xcode_9.0.0.app/Contents/Developer'). 이 옵션은 여러 버전의 Xcode가 에이전트 컴퓨터에 설치된 경우에 유용합니다.", + "loc.input.label.packageApp": "앱 패키지 만들기", + "loc.input.help.packageApp": "IPA 앱 패키지 파일이 빌드의 일부로 생성되어야 하는지 여부를 나타냅니다.", + "loc.input.label.archivePath": "보관 경로", + "loc.input.help.archivePath": "(선택 사항) 만든 보관 파일을 저장할 디렉터리를 지정합니다.", + "loc.input.label.exportPath": "내보내기 경로", + "loc.input.help.exportPath": "(선택 사항) 보관 파일에서 내보낸 제품의 대상을 지정합니다.", + "loc.input.label.exportOptions": "내보내기 옵션", + "loc.input.help.exportOptions": "보관 파일 내보내기 옵션을 제공하는 방법을 선택합니다. 기본값인 '자동'을 선택하면 내보내기 방법이 보관 파일에서 자동으로 검색됩니다. 내보내기 옵션이 포함된 plist 파일을 지정하려면 'Plist'를 선택하세요. 특정 **내보내기 방법** 및 **팀 ID**를 제공하려면 '지정'을 선택하세요.", + "loc.input.label.exportMethod": "내보내기 방법", + "loc.input.help.exportMethod": "Xcode에서 보관 파일 내보내기에 사용할 방법을 입력합니다. 예: 'app-store', 'package', 'ad-hoc', 'enterprise' 또는 'development'.", + "loc.input.label.exportTeamId": "팀 ID", + "loc.input.help.exportTeamId": "(선택 사항) 내보내기 작업 중 사용할 Apple Developer 포털의 팀 ID(10자)를 입력합니다.", + "loc.input.label.exportOptionsPlist": "내보내기 옵션 plist", + "loc.input.help.exportOptionsPlist": "내보내기 작업 중 사용할 옵션이 포함된 plist 파일의 경로를 입력합니다.", + "loc.input.label.exportArgs": "내보내기 인수", + "loc.input.help.exportArgs": "(선택 사항) 내보내기 작업 중 사용할 추가 명령줄 인수를 입력합니다.", + "loc.input.label.signingOption": "서명 스타일", + "loc.input.help.signingOption": "빌드 서명 방법을 선택합니다. 서명을 사용하지 않도록 설정하려면 '코드 서명 안 함'을 선택하세요. 프로젝트의 서명 구성만 사용하려면 '프로젝트 기본값'을 선택하세요. 수동 서명을 강제 적용하고 필요에 따라 서명 ID 및 프로비전 프로필을 지정하려면 '수동 서명'을 선택하세요. 자동 서명을 강제 적용하고 필요에 따라 개발 팀 ID를 지정하려면 '자동 서명'을 선택하세요. 프로젝트에서 서명을 요구하는 경우 Xcode 빌드 전에 \"Apple 설치...\" 작업을 사용하여 인증서 및 프로비전 프로필을 설치하세요.", + "loc.input.label.signingIdentity": "서명 ID", + "loc.input.help.signingIdentity": "(선택 사항) 빌드 서명에 사용할 서명 ID 재정의를 입력합니다. 이 경우 에이전트 컴퓨터에서 기본 키 집합의 잠금을 해제해야 할 수 있습니다. 값을 입력하지 않으면 Xcode 프로젝트의 설정이 사용됩니다.", + "loc.input.label.provisioningProfileUuid": "프로비전 프로필 UUID", + "loc.input.help.provisioningProfileUuid": "(선택 사항) 이 빌드에 사용할 설치된 프로비전 프로필의 UUID를 입력합니다. 단일 작업 영역(iOS, tvOS, watchOS)에서 대상에 따라 별도의 프로비전 프로필을 지정하려면 스키마 또는 대상이 서로 다른 별도의 빌드 작업을 사용하세요.", + "loc.input.label.provisioningProfileName": "프로필 이름 프로비전", + "loc.input.help.provisioningProfileName": "(선택 사항) 이 빌드에 사용할 설치된 프로비저닝 프로필의 이름을 입력합니다. 지정하면, 이 값이 프로비저닝 프로필 UUID보다 우선합니다. 각각 다른 체계나 대상으로 별도의 빌드 작업을 사용하여 단일 작업 영역에서 대상별 프로비저닝 프로필을 개별적으로 지정합니다(iOS, tvOS, watchOS).", + "loc.input.label.teamId": "팀 ID", + "loc.input.help.teamId": "(선택 사항, 여러 개발 팀의 구성원인 경우 제외) 개발 팀 ID(10자)를 지정합니다.", + "loc.input.label.destinationPlatformOption": "대상 플랫폼", + "loc.input.help.destinationPlatformOption": "일반 빌드 장치가 잘못된 경우 UI 테스트에 사용할 대상 장치의 플랫폼을 선택합니다. 이 목록에 포함되지 않은 플랫폼을 지정하려면 '사용자 지정'을 선택합니다. '기본값'을 선택하면 시뮬레이터 및 장치가 대상으로 지정되지 않습니다.", + "loc.input.label.destinationPlatform": "사용자 지정 대상 플랫폼", + "loc.input.help.destinationPlatform": "일반 빌드 장치가 잘못된 경우 UI 테스트에 사용할 대상 장치의 플랫폼을 입력합니다.", + "loc.input.label.destinationTypeOption": "대상 유형", + "loc.input.help.destinationTypeOption": "UI 테스트에 사용할 대상 유형을 선택합니다. 케이블 또는 네트워크 연결을 통해 장치가 빌드를 수행하는 Mac에 연결되어야 합니다. Xcode에서 장치 및 시뮬레이터를 참조하세요.", + "loc.input.label.destinationSimulators": "시뮬레이터", + "loc.input.help.destinationSimulators": "UI 테스트에 사용할 Xcode 시뮬레이터 이름을 입력합니다. 예를 들어 'iPhone X'(iOS 및 watchOS) 또는 'Apple TV 4K'(tvOS)를 입력합니다. 대상 OS 버전은 선택적이며, 'OS=versionNumber' 형식으로 지정할 수 있습니다(예: 'iPhone X,OS=11.1'). 호스트된 macOS 에이전트에 설치된 시뮬레이터 목록은 [여기서 확인](https://go.microsoft.com/fwlink/?linkid=875290)할 수 있습니다.", + "loc.input.label.destinationDevices": "장치", + "loc.input.help.destinationDevices": "UI 테스트에 사용할 장치의 이름을 입력합니다(예: 'Raisa's iPad').", + "loc.input.label.args": "인수", + "loc.input.help.args": "(선택 사항) 빌드에 사용할 추가 명령줄 인수를 입력합니다. 작업 영역/프로젝트와 체계를 지정하는 대신 '-target' 또는 '-project' 인수를 지정하는 데 유용합니다.", + "loc.input.label.cwd": "작업 디렉터리", + "loc.input.help.cwd": "(선택 사항) 빌드를 실행할 작업 디렉터리를 입력합니다. 값을 입력하지 않으면 리포지토리의 루트가 사용됩니다.", + "loc.input.label.useXcpretty": "xcpretty 사용", + "loc.input.help.useXcpretty": "xcpretty를 사용하여 xcodebuild 출력의 서식을 지정할지 여부를 지정합니다. 이 기능을 사용하려면 에이전트 머신에 xcpretty가 설치되어 있어야 합니다. xcpretty가 설치되지 않은 경우 원시 xcodebuild 출력이 표시됩니다. xcpretty는 Azure Pipelines에 호스트된 빌드 에이전트에 미리 설치되어 있습니다. GitHub에서 [xcpretty](https://github.com/supermarin/xcpretty)를 참조하세요.", + "loc.input.label.xcprettyArgs": "xcpretty 인수", + "loc.input.help.xcprettyArgs": "xcpretty에 전달할 추가 인수입니다.", + "loc.input.label.publishJUnitResults": "테스트 결과를 Azure Pipelines에 게시합니다.", + "loc.input.help.publishJUnitResults": "JUnit 테스트 결과를 Azure Pipelines에 게시할지 여부를 지정합니다. JUnit 테스트 결과를 생성하려면 xcpretty를 사용하도록 설정해야 합니다.", + "loc.input.label.testRunTitle": "테스트 실행 제목", + "loc.input.help.testRunTitle": "JUnit 테스트 결과를 Azure Pipelines에 게시할 때 테스트 실행의 제목입니다.", + "loc.messages.SignIdNotFound": "iOS 서명 ID를 찾지 못했습니다. 서명 및 프로비전 정보를 제공했는지 확인하세요.", + "loc.messages.TempKeychainSetupFailed": "키 집합 검색 경로에 임시 키 집합을 추가하지 못했습니다.", + "loc.messages.ProvProfileDetailsNotFound": "프로비전 프로필의 세부 정보를 찾지 못함: %s", + "loc.messages.ProvProfileUUIDNotFound": "프로비전 프로필의 UUID를 찾지 못함: %s", + "loc.messages.MultipleWorkspacesFound": "일치하는 Xcode 작업 영역이 여러 개 있습니다. 처음 일치 항목이 사용됩니다. %s", + "loc.messages.WorkspaceDoesNotExist": "지정한 Xcode 작업 영역이 없거나 디렉터리가 아님: %s", + "loc.messages.UseXcprettyForTestPublishing": "테스트 결과를 게시하려면 'xcpretty 사용'을 설정하세요. 이 빌드에 대한 테스트 결과가 게시되지 않습니다.", + "loc.messages.NoTestResultsFound": "'%s'과(와) 일치하는 테스트 결과 파일이 없습니다. JUnit 테스트 결과 게시를 건너뜁니다.", + "loc.messages.XcodeSuccess": "Xcode 작업 실행이 오류 없이 완료되었습니다.", + "loc.messages.TempKeychainDeleteFailed": "빌드 중에 생성된 임시 키 집합을 삭제하지 못함: '%s'", + "loc.messages.ProvProfileDeleteFailed": "프로비전 프로필 '%s'을(를) 삭제하지 못했습니다.", + "loc.messages.ExportMethodNotIdentified": "보관 파일에서 사용할 내보내기 방법을 자동으로 식별하지 못했습니다. 이 경우 빌드 중에 오류가 발생하거나 잘못된 패키지가 생성될 수 있습니다. 내보내기에 실패할 경우 서명을 사용하도록 설정('서명 스타일'을 '프로젝트 기본값'으로 설정)하거나 내보내기를 수동으로 구성('내보내기 옵션'을 'Plist' 또는 '지정'으로 설정)하세요.", + "loc.messages.ExportOptionsPlistInvalidFilePath": "'내보내기 옵션' plist 파일이 '%s'에 없습니다. 유효한 plist 파일의 경로를 제공하세요.", + "loc.messages.SchemeRequiredForArchive": "xcodebuild 보관 및 내보내기를 사용하여 패키지를 생성하려면 스키마를 지정해야 합니다.", + "loc.messages.WorkspaceOrProjectRequiredForArchive": "xcodebuild 보관 및 내보내기를 사용하여 패키지를 생성하려면 작업 영역 또는 프로젝트 경로를 지정해야 합니다.", + "loc.messages.FailedToGenerateExportOptionsPlist": "IPA를 내보낼 '내보내기 옵션' plist 파일을 자동으로 생성하지 못했습니다. '패키지 옵션'에서 '내보내기 옵션' plist 파일을 지정하세요.", + "loc.messages.LocateXcodeBasedOnVersion": "Xcode '%s'의 개발자 경로를 찾는 중", + "loc.messages.FailedToLocateSpecifiedXcode": "Xcode '%s'의 개발자 경로를 확인할 수 없습니다. 에이전트 컴퓨터에서 '%s' 환경 변수를 설정하거나 'Xcode 버전'을 '기본값' 또는 '경로 지정'으로 설정하세요.", + "loc.messages.CantDetermineProvisioningStyle": "pbxProject 파일에 프로비저닝 스타일이 없습니다. 자동 서명이 사용됩니다. 프로젝트에서 수동 서명을 사용하는 경우 자동 내보내기가 실패할 수 있습니다. 이 문제를 해결하기 위해 '내보내기 옵션'을 'Plist' 또는 '지정'으로 설정할 수 있습니다.", + "loc.messages.MultipleSchemesFound": "작업 영역에 여러 스키마가 포함되어 있습니다. 선택된 스키마가 없습니다. 'Scheme'을 사용하여 대상 스키마를 지정하세요.", + "loc.messages.NoSchemeFound": "작업 영역에 공유 스키마가 없습니다. Xcode에서 \"Schemes 관리\"를 사용하여 스키마를 공유하세요.", + "loc.messages.SchemeSelected": "작업 영역에 단일 공유 스키마가 포함되어 있습니다. '%s'이(가) 사용됩니다.", + "loc.messages.FailedToFindScheme": "작업 영역에서 스키마를 찾지 못했습니다. '스키마'를 사용하여 대상 스키마를 지정하세요.", + "loc.messages.OutputDirectoryIgnored": "빌드 출력(이진)의 출력 디렉터리가 무시됩니다. 출력 디렉터리 지정은 '%s' 작업과 호환되지 않습니다.", + "loc.messages.NoDestinationPlatformWarning": "시뮬레이터 또는 연결된 장치에 대해 UI 테스트를 실행해야 합니다. Xcode 작업에서 '대상 플랫폼'을 '기본값' 이외의 값으로 설정합니다.", + "loc.messages.XcprettyNotInstalled": "xcpretty가 빌드 서버에 설치되어 있지 않습니다. xcodebuild 원시 출력이 표시됩니다. xcpretty가 설치되지 않은 경우 테스트 결과를 게시하면 실패합니다.", + "loc.messages.XcodeRequiresMac": "Xcode를 사용하려면 macOS 에이전트가 필요합니다. Apple에서는 Linux 또는 Windows에서 Xcode를 사용한 빌드를 지원하지 않습니다.", + "loc.messages.UsingDefaultSimulator": "기본 시뮬레이터 %s을(를) 사용합니다." +} \ No newline at end of file diff --git a/_generated/XcodeV5_Node20/Strings/resources.resjson/ru-RU/resources.resjson b/_generated/XcodeV5_Node20/Strings/resources.resjson/ru-RU/resources.resjson new file mode 100644 index 000000000000..6313ad31aefb --- /dev/null +++ b/_generated/XcodeV5_Node20/Strings/resources.resjson/ru-RU/resources.resjson @@ -0,0 +1,101 @@ +{ + "loc.friendlyName": "Xcode", + "loc.helpMarkDown": "[См. дополнительные сведения об этой задаче](https://go.microsoft.com/fwlink/?LinkID=613730) или [документацию по Xcode](https://developer.apple.com/xcode/)", + "loc.description": "Вы можете собирать, тестировать и архивировать рабочие области Xcode в macOS. При необходимости создавайте пакеты приложений.", + "loc.instanceNameFormat": "Xcode $(actions)", + "loc.releaseNotes": "Эта версия задачи совместима с Xcode версий 8–13. Функции, которые предназначались исключительно для обеспечения совместимости с Xcode 7, были удалены. Эта задача предоставляет более удобные варианты использования агентов macOS, размещенных на серверах Майкрософт.", + "loc.group.displayName.sign": "Подписывание и подготовка", + "loc.group.displayName.package": "Параметры пакета", + "loc.group.displayName.devices": "Устройства и симуляторы", + "loc.group.displayName.advanced": "Дополнительно", + "loc.input.label.actions": "Действия", + "loc.input.help.actions": "Введите список действий, разделенных пробелами. Некоторые допустимые параметры: \"build\", \"clean\", \"test\", \"analyze\" и \"archive\". Например, \"clean build\" запускает чистую сборку.", + "loc.input.label.configuration": "Конфигурация", + "loc.input.help.configuration": "Введите конфигурацию проекта или рабочей области Xcode для сборки. По умолчанию здесь используется содержимое переменной \"$(Configuration)\". При использовании переменной не забудьте указать ее значение (например, \"Release\") на вкладке **Переменные**.", + "loc.input.label.sdk": "SDK", + "loc.input.help.sdk": "Укажите пакет SDK, который будет использоваться при сборке проекта или рабочей области Xcode. В приложении Terminal в macOS выполните команду \"xcodebuild -showsdks\", чтобы вывести список доступных пакетов SDK. По умолчанию в качестве значения этого поля используется содержимое переменной \"$(SDK)\". При использовании переменной не забудьте указать ее значение (например, \"iphonesimulator\") на вкладке **Переменные**.", + "loc.input.label.xcWorkspacePath": "Путь к рабочей области или проекту", + "loc.input.help.xcWorkspacePath": "(Необязательно) Введите относительный путь от корня репозитория к рабочей области или проекту Xcode. Пример: MyApp/MyApp.xcworkspace или MyApp/MyApp.xcodeproj. Можно использовать подстановочные знаки ([дополнительные сведения](https://go.microsoft.com/fwlink/?linkid=856077)).", + "loc.input.label.scheme": "Схема", + "loc.input.help.scheme": "(Необязательно) Введите имя схемы, определенной в Xcode. Это должна быть общая схема, для которой в разделе Управляемые схемы в Xcode должен стоять флажок Общая. Если указать Путь к рабочей области или проекту выше без определения схемы и в рабочей области есть одна общая схема, она будет использована автоматически.", + "loc.input.label.xcodeVersion": "Версия Xcode", + "loc.input.help.xcodeVersion": "Укажите целевую версию Xcode. Выберите \"По умолчанию\", чтобы использовать версию Xcode по умолчанию на компьютере агента. Номер версии (например, \"Xcode 9\") указывается в зависимости от переменных среды, заданных на компьютере агента для расположения версии (например, \"XCODE_9_DEVELOPER_DIR=/Applications/Xcode_9.0.0.app/Contents/Developer\"). Выберите команду \"Указать путь\", чтобы указать путь к определенному каталогу для разработчиков Xcode.
Примечание. Версия Xcode 12 устанавливается на macOS-10.15 (или более поздней версии)", + "loc.input.label.xcodeDeveloperDir": "Путь к папке для разработчиков Xcode", + "loc.input.help.xcodeDeveloperDir": "(Необязательно) Введите путь к указанному каталогу для разработчиков Xcode (например, \"/Applications/Xcode_9.0.0.app/Contents/Developer/\"). Это удобно, если на компьютере агента установлено несколько версий Xcode.", + "loc.input.label.packageApp": "Создать пакет приложения", + "loc.input.help.packageApp": "Указывает, следует ли создать файл пакета приложения IPA в рамках сборки.", + "loc.input.label.archivePath": "Путь к архиву", + "loc.input.help.archivePath": "(Необязательно) Укажите каталог, в котором нужно разместить создаваемые архивы.", + "loc.input.label.exportPath": "Путь экспорта", + "loc.input.help.exportPath": "(Необязательно) Укажите расположение продукта, экспортируемого из архива.", + "loc.input.label.exportOptions": "Параметры экспорта", + "loc.input.help.exportOptions": "Выберите способ предоставления параметров для экспорта архива. Если выбрано значение по умолчанию \"Автоматически\", метод экспорта определяется автоматически на основе архива. Выберите \"Plist\", чтобы указать PLIST-файл, содержащий параметры экспорта. Выберите \"Указанный\", чтобы указать определенный **Метод экспорта** и **Идентификатор группы**.", + "loc.input.label.exportMethod": "Метод экспорта", + "loc.input.help.exportMethod": "Укажите метод Xcode для экспорта архива. Например: \"app-store\", \"package\", \"ad-hoc\", \"enterprise\" или \"development\".", + "loc.input.label.exportTeamId": "Идентификатор Team ID", + "loc.input.help.exportTeamId": "(Необязательно) Введите 10-символьный идентификатор группы с портала для разработчиков Apple, который будет использоваться во время экспорта.", + "loc.input.label.exportOptionsPlist": "PLIST-файл параметров экспорта", + "loc.input.help.exportOptionsPlist": "Введите путь к PLIST-файлу, содержащему параметры экспорта.", + "loc.input.label.exportArgs": "Аргументы экспорта", + "loc.input.help.exportArgs": "(Необязательно) Введите дополнительные аргументы командной строки, которые будут использоваться во время экспорта.", + "loc.input.label.signingOption": "Стиль подписывания", + "loc.input.help.signingOption": "Выберите метод подписывания сборки. Выберите \"Не подписывать код\", чтобы отключить подписывание. Выберите \"По умолчанию для проекта\", чтобы использовать только конфигурацию подписывания проекта. Выберите \"Подписывание вручную\", чтобы принудительно использовать подписывание вручую и при необходимости указать удостоверение подписывания и профиль подготовки. Выберите \"Автоматическое подписывание\", чтобы принудительно использовать автоматическое подписывание и при необходимости указать идентификатор группы разработки. Если для проекта требуется подписывание, используйте задачи \"Установить Apple...\" для установки сертификатов и профилей подготовки перед сборкой Xcode.", + "loc.input.label.signingIdentity": "Удостоверение подписывания", + "loc.input.help.signingIdentity": "(Необязательно) Укажите переопределение удостоверения для подписывания сборки. Может потребоваться снять блокировку цепочки ключей по умолчанию на компьютере агента. Если значение не указано, будет использоваться параметр проекта Xcode.", + "loc.input.label.provisioningProfileUuid": "UUID профиля подготовки", + "loc.input.help.provisioningProfileUuid": "(Необязательно) Введите UUID установленного профиля подготовки, который следует использовать для этой сборки. Используйте отдельные задачи сборки с различными схемами и целевыми объектами, чтобы указать отдельные профили подготовки для различных целей в одной рабочей области (iOS, WatchKit, tvOS).", + "loc.input.label.provisioningProfileName": "Идет подготовка имени профиля", + "loc.input.help.provisioningProfileName": "(Необязательно) Введите имя установленного профиля подготовки, который следует использовать для этой сборки. Если имя указано, оно имеет приоритет над UUID профиля подготовки. Используйте отдельные задачи сборки с разными схемами или целевыми платформами, чтобы задать отдельные профили подготовки по целевым платформам в одной рабочей области (iOS, tvOS, watchOS).", + "loc.input.label.teamId": "Идентификатор Team ID", + "loc.input.help.teamId": "(Необязательно, если пользователь не является членом нескольких групп разработчиков.) Укажите 10-символьный идентификатор группы разработчиков.", + "loc.input.label.destinationPlatformOption": "Платформа назначения", + "loc.input.help.destinationPlatformOption": "Выберите платформу целевого устройства, которая будет использована для тестирования пользовательского интерфейса, когда универсальное устройство сборки не является допустимым. Выберите вариант \"Пользовательская\", чтобы указать платформу, которой нет в списке. При выборе платформы \"По умолчанию\" целевые симуляторы и устройства выбраны не будут.", + "loc.input.label.destinationPlatform": "Настраиваемая платформа назначения", + "loc.input.help.destinationPlatform": "Укажите платформу устройства назначения, которая будет использоваться для тестирования пользовательского интерфейса, если универсальное устройство сборки недопустимо.", + "loc.input.label.destinationTypeOption": "Конечный тип", + "loc.input.help.destinationTypeOption": "Выберите тип назначения, который будет использоваться для тестирования пользовательского интерфейса. Устройства должны быть подключены к компьютеру Mac, на котором ведется сборка, с помощью кабеля или по сети. См. раздел Устройства и симуляторы в Xcode.", + "loc.input.label.destinationSimulators": "Симулятор", + "loc.input.help.destinationSimulators": "Введите имя симулятора Xcode, который следует использовать для тестирования пользовательского интерфейса. Например, введите \"iPhone X\" (iOS и watchOS) или \"Apple TV 4K\" (tvOS). Целевая версия ОС является необязательной. Ее можно указать в формате \"OS=номер_версии\", например \"iPhone X,OS=11.1\". Список симуляторов, установленных в размещенном агенте macOS, можно найти [здесь](https://go.microsoft.com/fwlink/?linkid=875290).", + "loc.input.label.destinationDevices": "Устройство", + "loc.input.help.destinationDevices": "Введите имя устройства для тестирования пользовательского интерфейса, например \"iPad Раисы\".", + "loc.input.label.args": "Аргументы", + "loc.input.help.args": "(Необязательно) Введите дополнительные аргументы командной строки для сборки. Это удобно для указания аргументов \"-target\" или \"-project\" вместо указания рабочей области/проекта и схемы.", + "loc.input.label.cwd": "Рабочий каталог", + "loc.input.help.cwd": "(Необязательно) Укажите рабочий каталог, в котором будет вестись сборка. Если значение не указано, будет использоваться корневой каталог хранилища.", + "loc.input.label.useXcpretty": "Использовать xcpretty", + "loc.input.help.useXcpretty": "Укажите, следует ли использовать xcpretty для форматирования выходных данных xcodebuild. Для этого средство xcpretty должно быть установлено на компьютере агента. Если средство xcpretty не установлено, выводятся необработанные выходные данные xcodebuild. Средство xcpretty предустановлено в размещенных агентах сборки Azure Pipelines. См. страницу [xcpretty](https://github.com/supermarin/xcpretty) в GitHub.", + "loc.input.label.xcprettyArgs": "Аргументы xcpretty", + "loc.input.help.xcprettyArgs": "Дополнительные аргументы для передачи команде xcpretty.", + "loc.input.label.publishJUnitResults": "Опубликовать результаты тестов в Azure Pipelines", + "loc.input.help.publishJUnitResults": "Укажите, следует ли публиковать результаты теста JUnit в Azure Pipelines. Для создания результатов теста JUnit требуется включить xcpretty.", + "loc.input.label.testRunTitle": "Название тестового запуска", + "loc.input.help.testRunTitle": "Название тестового запуска при публикации результатов теста JUnit в Azure Pipelines.", + "loc.messages.SignIdNotFound": "Не удалось найти удостоверение подписывания для iOS. Убедитесь, что указаны необходимые данные для подписывания и подготовки.", + "loc.messages.TempKeychainSetupFailed": "Не удалось добавить временную цепочку ключей в путь поиска цепочек ключей.", + "loc.messages.ProvProfileDetailsNotFound": "Не удалось найти сведения о профиле подготовки: %s", + "loc.messages.ProvProfileUUIDNotFound": "Не удалось найти UUID профиля подготовки: %s", + "loc.messages.MultipleWorkspacesFound": "Обнаружено несколько соответствий для рабочей области Xcode. Будет использовано первое соответствие: %s", + "loc.messages.WorkspaceDoesNotExist": "Указана рабочая область Xcode, но она не существует или не является каталогом: %s", + "loc.messages.UseXcprettyForTestPublishing": "Включите параметр \"Использовать xcpretty\" для публикации результатов тестов. Для этой сборки результаты тестов публиковаться не будут.", + "loc.messages.NoTestResultsFound": "Файлы результатов теста, соответствующие \"%s\", не найдены. Публикация результатов теста JUnit выполняться не будет.", + "loc.messages.XcodeSuccess": "Выполнение задачи Xcode завершено без ошибок.", + "loc.messages.TempKeychainDeleteFailed": "Не удалось удалить временную цепочку ключей, созданную во время сборки: \"%s\"", + "loc.messages.ProvProfileDeleteFailed": "Не удалось удалить профиль подготовки \"%s\".", + "loc.messages.ExportMethodNotIdentified": "Не удалось автоматически определить метод экспорта по файлу архива. Это может привести к ошибкам во время сборки или формированию некорректного пакета. Если экспорт завершается сбоем, включите подписывание (установите \"Стиль подписывания\" равным \"По умолчанию для проекта\") или настройте экспорт вручную (установите \"Параметры экспорта\" как \"Plist\" или \"Указать\").", + "loc.messages.ExportOptionsPlistInvalidFilePath": "PLIST-файл \"Параметры экспорта\" не существует по указанному пути \"%s\". Укажите допустимый путь к PLIST-файлу.", + "loc.messages.SchemeRequiredForArchive": "Для создания пакета с архивом xcodebuild и экспортом необходимо указать схему.", + "loc.messages.WorkspaceOrProjectRequiredForArchive": "Для создания пакета с архивом xcodebuild и экспортом укажите путь к рабочей области или проекту.", + "loc.messages.FailedToGenerateExportOptionsPlist": "Не удалось автоматически создать PLIST-файл \"Параметры экспорта\" для экспорта IPA. Укажите PLIST-файл \"Параметры экспорта\" в разделе \"Параметры пакета\".", + "loc.messages.LocateXcodeBasedOnVersion": "Поиск пути разработчика для Xcode \"%s\"", + "loc.messages.FailedToLocateSpecifiedXcode": "Не удалось разрешить путь разработчика для Xcode \"%s\". Установите переменную среды \"%s\" на компьютере агента или установите \"Версию Xcode\" как \"По умолчанию\" или \"Указать путь\".", + "loc.messages.CantDetermineProvisioningStyle": "Стиль подготовки не найден в файле pbxProject. Будет использовано автоматическое подписывание. Если в проекте используется ручное подписывание, автоматический экспорт может завершиться неудачно. В качестве обходного варианта можно установить \"Параметры экспорта\" как \"Plist\" или \"Указанные\".", + "loc.messages.MultipleSchemesFound": "Рабочая область содержит несколько схем. Схема не выбрана. Используйте параметр \"Scheme\", чтобы указать целевую схему.", + "loc.messages.NoSchemeFound": "Общая схема в рабочей области не найдена. Чтобы сделать схему общей, выберите Manage Schemes (Управление схемами) в Xcode.", + "loc.messages.SchemeSelected": "Рабочая область содержит одну общую схему. Будет использоваться \"%s\".", + "loc.messages.FailedToFindScheme": "Не удалось найти схему в рабочей области. Используйте \"Scheme\", чтобы указать целевую схему.", + "loc.messages.OutputDirectoryIgnored": "Выходной каталог для выходных данных сборки (двоичных файлов) игнорируется. Выходной каталог не может быть указан для действия \"%s\".", + "loc.messages.NoDestinationPlatformWarning": "Тесты пользовательского интерфейса должны запускаться в симуляторе или на подключенном устройстве. В задаче Xcode присвойте параметру \"Платформа назначения\" значение, отличное от \"По умолчанию\".", + "loc.messages.XcprettyNotInstalled": "Средство xcpretty не установлено на сервере сборки. Будут выведены необработанные выходные данные xcodebuild. Если средство xcpretty не установлено, опубликовать результаты тестов не удастся.", + "loc.messages.XcodeRequiresMac": "Для использования Xcode требуется агент macOS. Сборка с Xcode в Linux или Windows не поддерживается Apple.", + "loc.messages.UsingDefaultSimulator": "Используется симулятор по умолчанию: %s." +} \ No newline at end of file diff --git a/_generated/XcodeV5_Node20/Strings/resources.resjson/zh-CN/resources.resjson b/_generated/XcodeV5_Node20/Strings/resources.resjson/zh-CN/resources.resjson new file mode 100644 index 000000000000..ad003cc9974d --- /dev/null +++ b/_generated/XcodeV5_Node20/Strings/resources.resjson/zh-CN/resources.resjson @@ -0,0 +1,101 @@ +{ + "loc.friendlyName": "XCode", + "loc.helpMarkDown": "[详细了解此任务](https://go.microsoft.com/fwlink/?LinkID=613730)或[参阅 Xcode 文档](https://developer.apple.com/xcode/)", + "loc.description": "在 macOS 上生成、测试或存档 Xcode 工作区。可选择性地打包应用。", + "loc.instanceNameFormat": "Xcode $(actions)", + "loc.releaseNotes": "此任务版本与 Xcode 8 - 13 兼容。已删除仅与 Xcode 7 保持兼容的功能。此任务可通过更好的选项来使用 Microsoft 托管的 macOS 代理。", + "loc.group.displayName.sign": "签名和预配", + "loc.group.displayName.package": "包选项", + "loc.group.displayName.devices": "设备和模拟器", + "loc.group.displayName.advanced": "高级", + "loc.input.label.actions": "操作", + "loc.input.help.actions": "输入以空格分隔的操作列表。一些有效选项包括 `build`、`clean`、`test`、`analyze` 和 `archive`。例如,`clean build` 将运行清理生成。", + "loc.input.label.configuration": "配置", + "loc.input.help.configuration": "输入要生成的 Xcode 项目或工作区配置。此字段的默认值为变量 \"$(Configuration)\"。在使用变量时,请确保在“变量”选项卡指定一个值(例如“发布”)。", + "loc.input.label.sdk": "SDK", + "loc.input.help.sdk": "指定在生成 Xcode 项目或工作区时使用的 SDK。从 macOS 终端应用程序运行 \"xcodebuild showsdks\" 可显示 SDK 的有效列表。此字段的默认值是变量 \"$(SDK)\"。使用变量时,请确保在“变量”选项卡中指定一个值(例如 \"iphonesimulator\")。", + "loc.input.label.xcWorkspacePath": "工作区或项目的路径", + "loc.input.help.xcWorkspacePath": "(可选)输入从存储库的根路径到 Xcode 工作区或项目的相对路径。例如,\"MyApp/MyApp.xcworkspace\" 或 \"MyApp/MyApp.xcodeproj\"。可以使用通配符([详细信息](https://go.microsoft.com/fwlink/?linkid=856077))。", + "loc.input.label.scheme": "方案", + "loc.input.help.scheme": "(可选)输入 Xcode 中定义的方案名称。它必须是共享方案,其“共享”复选框已在 Xcode 中的“托管方案”下启用。如果在上面指定“工作区或项目路径”但未指定方案,并且工作区具有一个共享方案,则它将自动使用。", + "loc.input.label.xcodeVersion": "Xcode 版本", + "loc.input.help.xcodeVersion": "指定 Xcode 的目标版本。选择“默认”以在代理计算机上使用默认版本的 Xcode。选择版本号(如 “Xcode 9”)依赖于在代理计算机上为版本位置(e.g. `XCODE_9_DEVELOPER_DIR=/Applications/Xcode_9.0.0.app/Contents/Developer`)设置的环境变量。选择 `Specify path`,以提供 Xcode 开发人员目录的特定路径。
注意: XCode 12 安装在 macOS-10.15(或更高版本)上", + "loc.input.label.xcodeDeveloperDir": "Xcode 开发人员路径", + "loc.input.help.xcodeDeveloperDir": "(可选)输入到特定 Xcode 开发人员目录的路径(例如 \"/Applications/Xcode_9.0.0.app/Contents/Developer\")。在代理计算机上安装多个版本的 Xcode 时,这非常有用。", + "loc.input.label.packageApp": "创建应用包", + "loc.input.help.packageApp": "指示是否应作为生成的一部分生成 IPA 应用包文件。", + "loc.input.label.archivePath": "存档路径", + "loc.input.help.archivePath": "(可选)指定应放置已创建存档的目录。", + "loc.input.label.exportPath": "导出路径", + "loc.input.help.exportPath": "(可选)指定从存档中导出的产品的目标。", + "loc.input.label.exportOptions": "导出选项", + "loc.input.help.exportOptions": "选择一种为导出存档提供选项的方法。选择默认值“自动”时,将自动从存档中检测导出方法。选择 \"Plist\" 可指定包含导出选项的 plist 文件。选择“指定”可提供特定的“导出方法”和“团队 ID”。", + "loc.input.label.exportMethod": "导出方法", + "loc.input.help.exportMethod": "输入 Xcode 用于导出存档的方法。例如: \"app-store\"、\"package\"、\"ad-hoc\"、\"enterprise\" 或 \"development\"。", + "loc.input.label.exportTeamId": "团队 ID", + "loc.input.help.exportTeamId": "(可选)在 Apple 开发人员门户中输入 10 个字符的团队 ID,供导出过程使用。", + "loc.input.label.exportOptionsPlist": "导出选项 plist", + "loc.input.help.exportOptionsPlist": "输入包含要在导出期间使用的选项的 Plist 文件的路径。", + "loc.input.label.exportArgs": "导出参数", + "loc.input.help.exportArgs": "(可选)输入要在导出过程中使用的其他命令行参数。", + "loc.input.label.signingOption": "签名样式", + "loc.input.help.signingOption": "选择对生成签名的方法。选择“请勿对签名编码”可禁用签名。选择“项目默认值”可仅使用项目的签名配置。选择“手动签名”可强制进行手动签名并选择性地指定签名标识和预配配置文件。选择“自动签名”可强制进行自动签名并选择性地指定开发团队 ID。如果项目需要签名,请在 Xcode 生成前使用“安装 Apple...”任务来安装证书和预配配置文件。", + "loc.input.label.signingIdentity": "签名标识", + "loc.input.help.signingIdentity": "(可选)输入用于对生成签名的签名标识替代。这可能需要解锁代理计算机上的默认密钥链。如果未输入任何值,将使用 Xcode 项目的设置。", + "loc.input.label.provisioningProfileUuid": "预配配置文件 UUID", + "loc.input.help.provisioningProfileUuid": "(可选)输入用于此生成的已安装预配配置文件的 UUID。使用具有不同方案或目标的单独生成任务来按一个工作区中的目标(iOS、tvOS、watchOS)指定单独的预配配置文件。", + "loc.input.label.provisioningProfileName": "预配配置文件名称", + "loc.input.help.provisioningProfileName": "(可选)输入要用于此生成的已安装预配配置文件的名称。如果已指定,这将优先于预配配置文件 UUID。使用具有不同方案或目标的单独生成任务,可按一个工作区中的目标(iOS、tvOS、watchOS)指定单独的预配配置文件。", + "loc.input.label.teamId": "团队 ID", + "loc.input.help.teamId": "(可选,除非你是多个开发团队的成员。)指定 10 个字符的开发团队 ID。", + "loc.input.label.destinationPlatformOption": "目标平台", + "loc.input.help.destinationPlatformOption": "选择要在常规生成设备无效时用于 UI 测试的目标设备平台。选择“自定义”可指定未包括在此列表中的平台。选择“默认”时,不会以任何模拟器和设备为目标。", + "loc.input.label.destinationPlatform": "自定义目标平台", + "loc.input.help.destinationPlatform": "输入要在常规生成设备无效时用于 UI 测试的目标设备平台。", + "loc.input.label.destinationTypeOption": "目标类型", + "loc.input.help.destinationTypeOption": "选择要用于 UI 测试的目标类型。设备必须通过电缆或网络连接连接到执行生成的 Mac。请参阅 Xcode 中的设备和模拟器。", + "loc.input.label.destinationSimulators": "模拟器", + "loc.input.help.destinationSimulators": "输入要用于 UI 测试的 Xcode 模拟器名称。例如,输入 \"iPhone X\" (iOS 和 watchOS)或 \"Apple TV 4K\" (tvOS)。目标 OS 版本为可选项,可按格式 \"OS=versionNumber\" 指定,例如 \"iPhone X,OS=11.1\"。可在 [此处](https://go.microsoft.com/fwlink/?linkid=875290)查看托管 macOS 代理上的已安装模拟器列表。", + "loc.input.label.destinationDevices": "设备", + "loc.input.help.destinationDevices": "输入要用于 UI 测试的设备名称,例如 \"Raisa's iPad\"。", + "loc.input.label.args": "参数", + "loc.input.help.args": "(可选)输入要通过其进行生成的其他命令行参数。这对于指定 \"-target\" 或 \"-project\" 参数(而不是指定工作区/项目和方案)来说非常有用。", + "loc.input.label.cwd": "工作目录", + "loc.input.help.cwd": "(可选)输入要在其中运行生成的工作目录。如果未输入任何值,将使用存储库的根。", + "loc.input.label.useXcpretty": "使用 xcpretty", + "loc.input.help.useXcpretty": "指定是否使用 xcpretty 来设置 xcodebuild 输出的格式。启用此选项需要在代理计算机上安装 xcpretty。如果未安装 xcpretty,将显示原始 xcodebuild 输出。xcpretty 预安装在 Azure Pipelines 托管的生成代理上。请参阅 GitHub 上的 [xcpretty](https://github.com/supermarin/xcpretty)。", + "loc.input.label.xcprettyArgs": "Xcpretty 参数", + "loc.input.help.xcprettyArgs": "要传递给 xcpretty 的其他参数。", + "loc.input.label.publishJUnitResults": "将测试结果发布到 Azure Pipelines", + "loc.input.help.publishJUnitResults": "指定是否将 JUnit 测试结果发布到 Azure Pipelines。这要求启用 xcpretty 以生成 JUnit 测试结果。", + "loc.input.label.testRunTitle": "测试运行标题", + "loc.input.help.testRunTitle": "将 JUnit 测试结果发布到 Azure 管道时测试运行的标题。", + "loc.messages.SignIdNotFound": "未能找到 iOS 签名标识。请确认已提供了签名和预配信息。", + "loc.messages.TempKeychainSetupFailed": "未能将临时密钥链添加到密钥链搜索路径。", + "loc.messages.ProvProfileDetailsNotFound": "未能找到预配配置文件 %s 的详细信息", + "loc.messages.ProvProfileUUIDNotFound": "未能找到预配配置文件 %s 的 UUID", + "loc.messages.MultipleWorkspacesFound": "已找到多个 Xcode 工作区匹配项。将使用第一个匹配项: %s", + "loc.messages.WorkspaceDoesNotExist": "虽然指定了 Xcode 工作区,但它不存在或不是目录: %s", + "loc.messages.UseXcprettyForTestPublishing": "启用“使用 xcpretty”以发布测试结果。对于此生成,将不发布任何测试结果。", + "loc.messages.NoTestResultsFound": "找不到与“%s”匹配的测试结果文件。将跳过发布 JUnit 测试结果。", + "loc.messages.XcodeSuccess": "Xcode 任务执行完成,没有错误。", + "loc.messages.TempKeychainDeleteFailed": "未能删除生成过程中创建的临时密钥链:“%s”", + "loc.messages.ProvProfileDeleteFailed": "未能删除预配配置文件“%s”。", + "loc.messages.ExportMethodNotIdentified": "未能自动识别要从存档文件中使用的导出方法。这可能会导致生成过程中出错或生成无效的包。如果导出失败,请启用签名(将“签名样式”设置为“项目默认值”),或手动配置导出(将“导出选项”设置为 \"Plist\" 或“指定”)。", + "loc.messages.ExportOptionsPlistInvalidFilePath": "“%s”处不存在“导出选项”plist 文件。请提供有效 plist 文件的路径。", + "loc.messages.SchemeRequiredForArchive": "必须指定方案,以使用 xcodebuild 存档和导出生成包。", + "loc.messages.WorkspaceOrProjectRequiredForArchive": "必须指定工作区或项目路径才可使用 xcodebuild 存档和导出生成包。", + "loc.messages.FailedToGenerateExportOptionsPlist": "未能自动生成“导出选项”plist 文件以导出 IPA。请在“包选项”中指定一个“导出选项”plist 文件。", + "loc.messages.LocateXcodeBasedOnVersion": "正在定位 Xcode“%s”的开发人员路径", + "loc.messages.FailedToLocateSpecifiedXcode": "无法解析 Xcode“%s”的开发人员路径。请在代理计算机上设置“%s”环境变量,或将“Xcode 版本”设置为“默认”或“指定路径”。", + "loc.messages.CantDetermineProvisioningStyle": "pbxProject 文件中找不到预配样式。将使用自动签名。如果项目使用手动签名,自动导出可能会失败。一种变通方法是将 `Export options` 设置为 `Plist` 或 `Specify`。", + "loc.messages.MultipleSchemesFound": "工作区包含多个方案。未选定方案。使用 `Scheme` 指定一个目标方案。", + "loc.messages.NoSchemeFound": "工作区中找不到任何共享方案。在 Xcode 中使用“管理 Schemes”来共享方案。", + "loc.messages.SchemeSelected": "工作区包含一个共享方案。将使用“%s”。", + "loc.messages.FailedToFindScheme": "未能在工作区中找到方案。请使用“方案”指定一个目标方案。", + "loc.messages.OutputDirectoryIgnored": "已忽略生成输出(二进制文件)的输出目录。指定输出目录与“%s”操作不兼容。", + "loc.messages.NoDestinationPlatformWarning": "必须对模拟器或连接的设备运行 UI 测试。在 Xcode 任务中。将“目标平台”设置为不同于“默认值”的值。", + "loc.messages.XcprettyNotInstalled": "生成服务器上未安装 xcpretty。将显示 xcodebuild 原始输出。如果未安装 xcpretty,发布测试结果将失败。", + "loc.messages.XcodeRequiresMac": "使用 Xcode 需要 macOS 代理。Apple 不支持在 Linux 或 Windows 上通过 Xcode 进行生成。", + "loc.messages.UsingDefaultSimulator": "使用默认模拟器: %s。" +} \ No newline at end of file diff --git a/_generated/XcodeV5_Node20/Strings/resources.resjson/zh-TW/resources.resjson b/_generated/XcodeV5_Node20/Strings/resources.resjson/zh-TW/resources.resjson new file mode 100644 index 000000000000..e9ad479a3c5e --- /dev/null +++ b/_generated/XcodeV5_Node20/Strings/resources.resjson/zh-TW/resources.resjson @@ -0,0 +1,101 @@ +{ + "loc.friendlyName": "XCode", + "loc.helpMarkDown": "[深入了解此工作](https://go.microsoft.com/fwlink/?LinkID=613730)或[參閱 Xcode 文件](https://developer.apple.com/xcode/)", + "loc.description": "在 macOS 上建置、測試或封存 Xcode 工作區。選擇性地封裝應用程式。", + "loc.instanceNameFormat": "Xcode $(actions)", + "loc.releaseNotes": "此版本的工作與 Xcode 8 - 13 相容。已移除僅為維持與 Xcode 7 相容的功能。此工作在與使用 Microsoft 託管的 macOS 代理程式搭配方面具有較佳的選項。", + "loc.group.displayName.sign": "簽署與佈建", + "loc.group.displayName.package": "套件選項", + "loc.group.displayName.devices": "裝置和模擬器", + "loc.group.displayName.advanced": "進階", + "loc.input.label.actions": "動作", + "loc.input.help.actions": "請輸入以空格分隔的動作清單。部分有效選項包含: `build`、`clean`、`test`、`analyze` 和 `archive`。舉例來說,`clean build` 會執行清除組建。", + "loc.input.label.configuration": "組態", + "loc.input.help.configuration": "輸入要建置的 Xcode 專案或工作區組態。此欄位的預設值是變數 `$(Configuration)`。當您使用變數時,請確定在 **變數** 索引標籤上指定值 (例如 `Release`)。", + "loc.input.label.sdk": "SDK", + "loc.input.help.sdk": "指定建置 Xcode 專案或工作區時要使用的 SDK。從 macOS 終端機應用程式執行 `xcodebuild -showsdks` 即可顯示有效 SDK 的清單。此欄位的預設值為變數 `$(SDK)`。當使用變數時,請務必在 [Variables]**** 索引標籤指定值 (例如 `iphonesimulator`)。", + "loc.input.label.xcWorkspacePath": "工作區或專案路徑", + "loc.input.help.xcWorkspacePath": "(選擇性) 輸入 Xcode 工作區或專案相對於存放庫根目錄的路徑。例如 'MyApp/MyApp.xcworkspace' 或 'MyApp/MyApp.xcodeproj'。您可使用萬用字元 ([詳細資訊](https://go.microsoft.com/fwlink/?linkid=856077))。", + "loc.input.label.scheme": "配置", + "loc.input.help.scheme": "(選擇性) 輸入 Xcode 中定義的配置名稱。其必須是共用的配置 (必須啟用 Xcode 中,[受控配置] 下的 [共用] 核取方塊)。若您只在上列位置指定工作區或專案的路徑而未指定配置,且工作區只有一個共用配置,將會自動使用該配置。", + "loc.input.label.xcodeVersion": "Xcode 版本", + "loc.input.help.xcodeVersion": "指定 Xcode 的目標版本。選取 [預設] 可在代理程式機器上使用預設版本的 Xcode。選取版本號碼 (例如 'Xcode 9') 依賴在代理程式機器上為該版本位置 (例如 ' XCODE_9_DEVELOPER_DIR=/Applications/Xcode_9.0.0.app/Contents/Developer') 設定的環境變數。選取 [指定路徑] 可提供 Xcode 開發人員目錄的特定路徑。
注意: XCode 12 已安裝於 macOS-10.15 (或更高版本)", + "loc.input.label.xcodeDeveloperDir": "Xcode 開發人員路徑", + "loc.input.help.xcodeDeveloperDir": "(選擇性) 輸入特定 Xcode 開發人員目錄的路徑 (例如 '/ Applications/Xcode_9.0.0.app/Contents/Developer')。當代理程式電腦上安裝有多個版本的 Xcode 時,此路徑十分有用。", + "loc.input.label.packageApp": "建立應用程式套件", + "loc.input.help.packageApp": "表示是否要產生 IPA 應用程式套件檔案作為組建的一部份。", + "loc.input.label.archivePath": "封存路徑", + "loc.input.help.archivePath": "(選擇性) 指定應放置建立之封存的所在目錄。", + "loc.input.label.exportPath": "匯出路徑", + "loc.input.help.exportPath": "(選擇性) 為從封存匯出的產品指定目的地。", + "loc.input.label.exportOptions": "匯出選項", + "loc.input.help.exportOptions": "選取為匯出封存提供選項的方法。當選取預設值 `Automatic` 時,會自動從封存偵測匯出方法。選取 `Plist` 可指定包含匯出選項的 plist 檔案。選取 `Specify` 可提供特定的 **匯出方法** 與 **小組識別碼**。", + "loc.input.label.exportMethod": "匯出方法", + "loc.input.help.exportMethod": "輸入 Xcode 應該用於匯出封存的方法。例如: `app-store`、`package`、`ad-hoc`、`enterprise` 或 `development`。", + "loc.input.label.exportTeamId": "小組識別碼", + "loc.input.help.exportTeamId": "(選擇性) 輸入匯出期間要使用之 Apple Developer Portal 的 10 個字元小組識別碼。", + "loc.input.label.exportOptionsPlist": "匯出選項 plist", + "loc.input.help.exportOptionsPlist": "輸入匯出期間要使用之包含選項的 plist 檔案路徑。", + "loc.input.label.exportArgs": "匯出引數", + "loc.input.help.exportArgs": "(選擇性) 輸入匯出期間要使用的其他命令列引數。", + "loc.input.label.signingOption": "簽署樣式", + "loc.input.help.signingOption": "選擇簽署組建的方法。選取 [不執行程式碼簽署] 可停用簽署。選取 [專案預設] 可只使用專案的簽署組態。選取 [手動簽署] 可強制手動簽署,並選擇性地指定簽署身分識別和佈建設定檔。選取 [自動簽署] 可強制自動簽署,並選擇性地指定開發小組識別碼。如果您的專案需要簽署,請使用「安裝 Apple...」工作來安裝 Xcode 組建之前的憑證和佈建設定檔。", + "loc.input.label.signingIdentity": "簽署身分識別", + "loc.input.help.signingIdentity": "(選擇性) 輸入用來簽署組建的簽署識別覆寫。這可能需要將代理程式機器上的預設 keychain 解除鎖定。如果未輸入值,將會使用 Xcode 專案的設定。", + "loc.input.label.provisioningProfileUuid": "佈建設定檔 UUID", + "loc.input.help.provisioningProfileUuid": "(選擇性) 輸入要用於此組建之已安裝佈建設定檔的 UUID。請使用具有不同配置或目標的個別建置工作,以在單一工作區 (iOS、tvOS、watchOS) 中依照目標來指定個別佈建設定檔。", + "loc.input.label.provisioningProfileName": "正在佈建設定檔名稱", + "loc.input.help.provisioningProfileName": "(選擇性) 輸入要用於此組建的已安裝佈建設定檔名稱。若指定名稱,則優先使用此工作,而非佈建設定檔 UUID。使用配置或目標不同的獨立建置工作可以單一工作區 (iOS、tvOS、watchOS) 為目標,來指定獨立佈建設定檔。", + "loc.input.label.teamId": "小組識別碼", + "loc.input.help.teamId": "(選擇性,除非您是多個開發小組的成員。) 指定 10 個字元的開發小組識別碼。", + "loc.input.label.destinationPlatformOption": "目的地平台", + "loc.input.help.destinationPlatformOption": "選取當一般組建裝置無效時所要用於進行 UI 測試的目的地裝置平台。選擇 `Custom` 可指定此清單未包含的平台。當選取 `Default` 時,不會將任何模擬器或裝置作為目標。", + "loc.input.label.destinationPlatform": "自訂目的地平台", + "loc.input.help.destinationPlatform": "輸入要在一般建置裝置無效時用於測試 UI 的目的地裝置平台。", + "loc.input.label.destinationTypeOption": "目的地類型", + "loc.input.help.destinationTypeOption": "選擇要用於測試 UI 的目的地類型。裝置必須連線到透過纜線或網路連線執行組建的 Mac。請參閱 Xcode 中的裝置和模擬器。", + "loc.input.label.destinationSimulators": "模擬器", + "loc.input.help.destinationSimulators": "請輸入要用於 UI 測試的 Xcode 模擬器名稱。例如,請輸入 'iPhone X' (iOS 和 watchOS) 或 'Apple TV 4K' (tvOS)。您可選擇使用以下格式指定目標作業系統版本: 'OS =versionNumber',例如 'iPhone X,OS=11.1'。[前往此處](https://go.microsoft.com/fwlink/?linkid=875290)可取得裝載的 macOS 代理程式上安裝的模擬的清單。", + "loc.input.label.destinationDevices": "裝置", + "loc.input.help.destinationDevices": "輸入要用於測試 UI 的裝置名稱,例如 `Raisa's iPad`。", + "loc.input.label.args": "引數", + "loc.input.help.args": "(選擇性) 輸入其他命令列引數與要建置的項目。相對於指定工作區/專案及配置,這對於指定 `-target` 或 `-project` 引數較為實用。", + "loc.input.label.cwd": "工作目錄", + "loc.input.help.cwd": "(選擇性) 輸入要在其中執行組建的工作目錄。如果未輸入值,將會使用存放庫的根路徑。", + "loc.input.label.useXcpretty": "使用 xcpretty", + "loc.input.help.useXcpretty": "指定是否要使用 xcpretty 將 xcodebuild 輸出格式化。代理程式電腦上需要安裝 xcpretty 才能啟用此選項。若未安裝 xcpretty,則會顯示未經處理的 xcodebuild 輸出。xcpretty 會預先安裝在 Azure Pipelines 裝載的組建代理程式上。請參閱 GitHub 上的 [xcpretty](https://github.com/supermarin/xcpretty)。", + "loc.input.label.xcprettyArgs": "Xcpretty 引數", + "loc.input.help.xcprettyArgs": "要傳遞給 xcpretty 的其他引數。", + "loc.input.label.publishJUnitResults": "將測試結果發佈至 Azure Pipelines", + "loc.input.help.publishJUnitResults": "請指定是否要將 JUnit 測試結果發佈至 Azure Pipelines。需要啟用 xcpretty 才能產生 JUnit 測試結果。", + "loc.input.label.testRunTitle": "測試回合標題", + "loc.input.help.testRunTitle": "將 JUnit 測試結果發佈至 Azure Pipelines 時,測試回合的標題。", + "loc.messages.SignIdNotFound": "找不到 iOS 簽署身分識別。請驗證已提供簽署與佈建資訊。", + "loc.messages.TempKeychainSetupFailed": "無法將暫存的 Keychain 新增至 Keychain 搜尋路徑。", + "loc.messages.ProvProfileDetailsNotFound": "找不到發佈設定檔的詳細資料: %s", + "loc.messages.ProvProfileUUIDNotFound": "找不到佈建設定檔的 UUID: %s", + "loc.messages.MultipleWorkspacesFound": "已找到多個 Xcode 工作區相符。將使用最初相符: %s", + "loc.messages.WorkspaceDoesNotExist": "指定的 Xcode 工作區不存在或並非目錄: %s", + "loc.messages.UseXcprettyForTestPublishing": "啟用 [使用 xcpretty] 以發佈測試結果。對於這個組建,不會發佈任何測試結果。", + "loc.messages.NoTestResultsFound": "找不到任何與 `%s` 相符的測試結果。將跳過 JUnit 測試結果的發行。", + "loc.messages.XcodeSuccess": "Xcode 工作執行完成,未發生錯誤。", + "loc.messages.TempKeychainDeleteFailed": "無法刪除在組建 `%s` 期間建立的暫存 keychain", + "loc.messages.ProvProfileDeleteFailed": "無法刪除佈建設定檔 `%s`。", + "loc.messages.ExportMethodNotIdentified": "無法從封存檔案自動識別要使用的匯出方法。這可能造成建置期間發生錯誤,或產生無效的套件。如果匯出失敗,請啟用簽署 (將 `Signing Style` 設為 `Project Defaults`),或手動設定匯出 (將 `Export options` 設為 `Plist` 或 `Specify`)。", + "loc.messages.ExportOptionsPlistInvalidFilePath": "`%s` 沒有 `Export options` plist 檔案。請提供有效 plist 檔案的路徑。", + "loc.messages.SchemeRequiredForArchive": "必須指定配置,才能產生包含 xcodebuild 封存與匯出的套件。", + "loc.messages.WorkspaceOrProjectRequiredForArchive": "必須指定工作區或專案路徑,才能產生具備 xcodebuild 封存與匯出的套件。", + "loc.messages.FailedToGenerateExportOptionsPlist": "無法自動產生要匯出 IPA 的 `Export options` plist 檔案。請在 `Package options` 中指定 `Export options` plist 檔案。", + "loc.messages.LocateXcodeBasedOnVersion": "正在尋找 Xcode 開發人員路徑 `%s`", + "loc.messages.FailedToLocateSpecifiedXcode": "無法解析 Xcode `%s` 的開發人員路徑。請在代理程式機器上設定 `%s` 環境變數,或將 `Xcode version` 設定為 `Default` 或 `Specify path`。", + "loc.messages.CantDetermineProvisioningStyle": "無法在 pbxProject 檔案中找到佈建樣式。將會使用自動簽署。若專案使用手動簽署,則自動匯出可能會失敗。您可以將 [匯出選項] 設為 `Plist` 或 `Specify` 作為因應措施。", + "loc.messages.MultipleSchemesFound": "工作區包含多個配置。未選取任何配置。請使用 `Scheme` 來指定目標配置。", + "loc.messages.NoSchemeFound": "在工作區中找不到任何共用的配置。請在 Xcode 中使用 [受控 Schemes] 來共用配置。", + "loc.messages.SchemeSelected": "工作區包含單一共用配置。將會使用 '%s'。", + "loc.messages.FailedToFindScheme": "在工作區中找不到配置。請使用 `Scheme` 來指定目標配置。", + "loc.messages.OutputDirectoryIgnored": "已忽略建置輸出 (二進位檔案) 的輸出目錄。指定的輸出目錄與 '%s' 動作不相容。", + "loc.messages.NoDestinationPlatformWarning": "UI 測試的執行對象必須為模擬器或已連線的裝置。在 Xcode 工作中,請將 `Destination platform` 設為 `Default` 以外的值。", + "loc.messages.XcprettyNotInstalled": "組建伺服器上未安裝 xcpretty。會顯示 xcodebuild 未經處理的輸出。若未安裝 xcpretty,就無法發佈測試結果。", + "loc.messages.XcodeRequiresMac": "需要 macOS 代理程式才能使用 Xcode。Apple 不支援以 Xcode 在 Linux 或 Windows 上建置。", + "loc.messages.UsingDefaultSimulator": "使用預設模擬器: %s。" +} \ No newline at end of file diff --git a/_generated/XcodeV5_Node20/Tests/L0.ts b/_generated/XcodeV5_Node20/Tests/L0.ts new file mode 100644 index 000000000000..ca0ec9d1ca8b --- /dev/null +++ b/_generated/XcodeV5_Node20/Tests/L0.ts @@ -0,0 +1,760 @@ +// npm install mocha --save-dev +// typings install dt~mocha --save --global + +import * as path from 'path'; +import * as assert from 'assert'; +import * as ttm from 'azure-pipelines-task-lib/mock-test'; + +describe('Xcode L0 Suite', function () { + this.timeout(parseInt(process.env.TASK_TEST_TIMEOUT) || 20000); + + before(() => { + + }); + + after(() => { + + }); + + it('run Xcode with all default inputs', function (done: MochaDone) { + let tp = path.join(__dirname, 'L0XcodeDefaults.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + assert(tr.ran('/home/bin/xcodebuild -version'), 'xcodebuild for version should have been run.'); + assert(tr.ran('/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) ' + + '-workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme myscheme build'), + 'xcodebuild for building the ios project/workspace should have been run.'); + assert(tr.invokedToolCount == 2, 'should have run xcodebuild version, and xcodebuild build'); + assert(tr.stderr.length == 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + done(); + }); + + it('run Xcode with project and no workspace', function (done: MochaDone) { + let tp = path.join(__dirname, 'L0XcodeNoWorkspace.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + assert(tr.ran('/home/bin/xcodebuild -version'), 'xcodebuild for version should have been run.'); + assert(tr.ran('/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) ' + + 'build -project test.xcodeproj'), + 'xcodebuild for building the ios project should have been run.'); + assert(tr.invokedToolCount == 2, 'should have run xcodebuild version, and xcodebuild build.'); + assert(tr.stderr.length == 0, 'should not have written to stderr std=' + tr.stdout + ' err=' + tr.stderr); + assert(tr.succeeded, 'task should have succeeded'); + done(); + }); + + it('run Xcode build with test action, with xcpretty', function (done: MochaDone) { + let tp = path.join(__dirname, 'L0Xcpretty.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + assert(tr.ran('/home/bin/xcodebuild -version'), 'xcodebuild for version should have been run.'); + + assert(tr.ran('/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) ' + + '-workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme myscheme test ' + + '| /home/bin/xcpretty -r junit --no-color'), + 'xcodebuild for running tests in the ios project/workspace should have been run with xcpretty formatting.'); + + assert(tr.invokedToolCount == 2, 'should have xcodebuild for version, xcodebuild for test with xcpretty'); + assert(tr.stderr.length == 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + done(); + }); + + it('run Xcode build with test action, without choosing xcpretty', function (done: MochaDone) { + let tp = path.join(__dirname, 'L0NoXcpretty.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + assert(tr.ran('/home/bin/xcodebuild -version'), 'xcodebuild for version should have been run.'); + + assert(tr.ran('/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) ' + + '-workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme myscheme test'), + 'xcodebuild for running tests in the ios project/workspace should have been run without xcpretty formatting.'); + + assert(tr.stdout.search(/##vso\[results.publish type=JUnit;publishRunAttachments=true;resultFiles=\/user\/build\/build\/reports\/junit.xml;\]/) < 0, + 'publish test results should not have been called'); + + assert(tr.stdout.search(/[When using xcodebuild, check 'Use xcpretty' to publish test results. No results will be published.]/) >=0, + 'warning should have been provided that test results cannot be published with xcodebuild if xcpretty is not used.'); + + assert(tr.invokedToolCount == 2, 'should have xcodebuild for version, xcodebuild for test with xcpretty'); + assert(tr.stderr.length == 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + done(); + }); + + it('run Xcode build, signing with P12 and provisioning profile', function (done: MochaDone) { + let tp = path.join(__dirname, 'L0Signing.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + assert(tr.ran('/home/bin/xcodebuild -version'), 'xcodebuild for version should have been run.'); + assert(tr.ran('/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme fun build CODE_SIGN_STYLE=Manual CODE_SIGN_IDENTITY=iPhone Developer: XcodeTask Tester (HE432Y3E2Q) PROVISIONING_PROFILE=testuuid PROVISIONING_PROFILE_SPECIFIER='), + 'xcodebuild for building the ios project/workspace should have been run with signing options.'); + assert(tr.stderr.length == 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + done(); + }); + + it('run Xcode build, signing with P12 only, no provisioning profile', function (done: MochaDone) { + let tp = path.join(__dirname, 'L0SigningWithP12.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + assert(tr.ran('/home/bin/xcodebuild -version'), 'xcodebuild for version should have been run.'); + assert(tr.ran('/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme fun build CODE_SIGN_STYLE=Manual CODE_SIGN_IDENTITY=iPhone Developer: XcodeTask Tester (HE432Y3E2Q) PROVISIONING_PROFILE= PROVISIONING_PROFILE_SPECIFIER='), + 'xcodebuild for building the ios project/workspace should have been run with signing options with P12 signing identity, and empty provisioning profile/specifier values that override any values in the pbxproj file.'); + assert(tr.stderr.length == 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + done(); + }); + + it('run Xcode build, signing with provisioning profile only, no P12', function (done: MochaDone) { + let tp = path.join(__dirname, 'L0SigningWithProfile.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + assert(tr.ran('/home/bin/xcodebuild -version'), 'xcodebuild for version should have been run.'); + assert(tr.ran('/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme fun build CODE_SIGN_STYLE=Manual PROVISIONING_PROFILE=testuuid PROVISIONING_PROFILE_SPECIFIER='), + 'xcodebuild for building the ios project/workspace should have been run with signing options with provisioning profile only.'); + assert(tr.stderr.length == 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + done(); + }); + + it('run Xcode with required arg is not specified', function (done: MochaDone) { + let tp = path.join(__dirname, 'L0ErrorArgs.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + assert(tr.stdout.search(/Input required: actions/) > 0, 'Error should be shown if actions are not specified.'); + assert(tr.failed, 'task should have failed'); + done(); + }); + + it('run Xcode with optional args specified', function (done: MochaDone) { + let tp = path.join(__dirname, 'L0OptionalArgs.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + assert(tr.ran('/home/bin/xcodebuild -version'), 'xcodebuild for version should have been run.'); + assert(tr.ran('/home/bin/xcodebuild -sdk iphone -configuration Release -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme fun clean build -exportArchive -exportPath /user/build/output/iphone/release'), + 'xcodebuild for building the ios project/workspace should have been run with all optional args.'); + assert(tr.stderr.length == 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + done(); + }); + + + it('Xcode 7 create IPA with archive and auto export', function (done: MochaDone) { + let tp = path.join(__dirname, 'L0ExportArchiveWithAuto.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + //version + assert(tr.ran('/home/bin/xcodebuild -version'), 'xcodebuild for version should have been run.'); + //build + assert(tr.ran('/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) ' + + '-workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme build'), + 'xcodebuild for building the ios project/workspace should have been run.'); + //archive + assert(tr.ran('/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme ' + + 'archive -sdk $(SDK) -configuration $(Configuration) -archivePath /user/build/testScheme'), + 'xcodebuild archive should have been run to create the .xcarchive.'); + //export + assert(tr.ran('/home/bin/xcodebuild -exportArchive ' + + '-archivePath /user/build/testScheme.xcarchive ' + + '-exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist'), + 'xcodebuild exportArchive should have been run to export the IPA from the .xcarchive'); + + assert(tr.invokedToolCount === 11, 'should have run xcodebuild for version, build, archive and export and PlistBuddy to init and add export method.'); + assert(tr.stderr.length === 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + + done(); + }); + + it('Xcode 7 create IPA with archive and export with specified method', function (done: MochaDone) { + let tp = path.join(__dirname, 'L0ExportArchiveSpecify.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + //version + assert(tr.ran('/home/bin/xcodebuild -version'), 'xcodebuild for version should have been run.'); + //build + assert(tr.ran('/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) ' + + '-workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme build'), + 'xcodebuild for building the ios project/workspace should have been run.'); + //archive + assert(tr.ran('/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme ' + + 'archive -sdk $(SDK) -configuration $(Configuration) -archivePath /user/build/testScheme'), + 'xcodebuild archive should have been run to create the .xcarchive.'); + //export + assert(tr.ran('/home/bin/xcodebuild -exportArchive ' + + '-archivePath /user/build/testScheme.xcarchive ' + + '-exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist'), + 'xcodebuild exportArchive should have been run to export the IPA from the .xcarchive'); + + assert(tr.invokedToolCount === 6, 'should have run xcodebuild for version, build, archive and export and PlistBuddy to init and add export method.'); + assert(tr.stderr.length === 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + + done(); + }); + + it('Xcode 8 create IPA with export options plist', function (done: MochaDone) { + let tp = path.join(__dirname, 'L0ExportArchiveWithPlist.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + //version + assert(tr.ran('/home/bin/xcodebuild -version'), 'xcodebuild for version should have been run.'); + //build + assert(tr.ran('/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) ' + + '-workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme build'), + 'xcodebuild for building the ios project/workspace should have been run.'); + //archive + assert(tr.ran('/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme ' + + 'archive -sdk $(SDK) -configuration $(Configuration) -archivePath /user/build/testScheme'), + 'xcodebuild archive should have been run to create the .xcarchive.'); + //export + assert(tr.ran('/home/bin/xcodebuild -exportArchive ' + + '-archivePath /user/build/testScheme.xcarchive ' + + '-exportPath /user/build -exportOptionsPlist /user/build/exportOptions.plist'), + 'xcodebuild exportArchive should have been run to export the IPA from the .xcarchive'); + + assert(tr.invokedToolCount === 4, 'should have run xcodebuild for version, build, archive and export.'); + assert(tr.stderr.length === 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + + done(); + }); + + it('Xcode 8 create IPA with bad exportOptionsPlist path', function (done: MochaDone) { + let tp = path.join(__dirname, 'L0ExportOptionsPlistBadPath.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + //version + assert(tr.ran('/home/bin/xcodebuild -version'), 'xcodebuild for version should have been run.'); + //build + assert(tr.ran('/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) ' + + '-workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme build'), + 'xcodebuild for building the ios project/workspace should have been run.'); + //archive + assert(tr.ran('/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme ' + + 'archive -sdk $(SDK) -configuration $(Configuration) -archivePath /user/build/testScheme'), + 'xcodebuild archive should have been run to create the .xcarchive.'); + + assert(tr.invokedToolCount === 3, 'should have run xcodebuild for version, build, and archive.'); + assert(tr.failed, 'task should have failed'); + assert(tr.stdout.indexOf('##vso[task.issue type=error;]Error: loc_mock_ExportOptionsPlistInvalidFilePath') >= 0, + 'Build should show error indicating invalid Plist file path.'); + + done(); + }); + + it('Xcode create IPA with file paths for archive path and export path', function (done: MochaDone) { + let tp = path.join(__dirname, 'L0FilePathForArchiveAndExportPath.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + //version + assert(tr.ran('/home/bin/xcodebuild -version'), 'xcodebuild for version should have been run.'); + //build + assert(tr.ran('/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) ' + + '-workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme build'), + 'xcodebuild for building the ios project/workspace should have been run.'); + //archive + assert(tr.ran('/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme ' + + 'archive -sdk $(SDK) -configuration $(Configuration) -archivePath /user/build/testScheme.xcarchive'), + 'xcodebuild archive should have been run to create the .xcarchive.'); + //export + assert(tr.ran('/home/bin/xcodebuild -exportArchive ' + + '-archivePath /user/build/testScheme.xcarchive ' + + '-exportPath /user/build/testipa.ipa -exportOptionsPlist _XcodeTaskExportOptions.plist'), + 'xcodebuild exportArchive should have been run to export the IPA from the .xcarchive'); + + assert(tr.invokedToolCount === 6, 'should have run xcodebuild for version, build, archive and export and PlistBuddy to init and add export method.'); + assert(tr.stderr.length === 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + + done(); + }); + + it('Xcode 7 create IPA with code signing identifiers', function (done: MochaDone) { + let tp = path.join(__dirname, 'L0CreateIpaWithCodeSigningIdentifiers.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + //version + assert(tr.ran('/home/bin/xcodebuild -version'), 'xcodebuild for version should have been run.'); + //build + assert(tr.ran('/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) ' + + '-workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme build ' + + 'CODE_SIGN_STYLE=Manual CODE_SIGN_IDENTITY=iPhone Developer: XcodeTask Tester (HE432Y3E2Q) PROVISIONING_PROFILE=testuuid PROVISIONING_PROFILE_SPECIFIER='), + 'xcodebuild for building the ios project/workspace should have been run.'); + //archive + assert(tr.ran('/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme ' + + 'archive -sdk $(SDK) -configuration $(Configuration) -archivePath /user/build/testScheme ' + + 'CODE_SIGN_STYLE=Manual CODE_SIGN_IDENTITY=iPhone Developer: XcodeTask Tester (HE432Y3E2Q) PROVISIONING_PROFILE=testuuid PROVISIONING_PROFILE_SPECIFIER='), + 'xcodebuild archive should have been run to create the .xcarchive.'); + //export + assert(tr.ran('/home/bin/xcodebuild -exportArchive ' + + '-archivePath /user/build/testScheme.xcarchive ' + + '-exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist'), + 'xcodebuild exportArchive should have been run to export the IPA from the .xcarchive'); + + assert(tr.stderr.length === 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + + done(); + }); + + it('Xcode 8 automatic code signing with identifiers', function (done: MochaDone) { + let tp = path.join(__dirname, 'L0Xcode8AutomaticSignWithIdentifiers.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + //version + assert(tr.ran('/home/bin/xcodebuild -version'), 'xcodebuild for version should have been run.'); + //build + assert(tr.ran('/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) ' + + '-workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme build ' + + 'CODE_SIGN_STYLE=Automatic'), + 'xcodebuild for building the ios project/workspace should have been run.'); + //archive + assert(tr.ran('/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme ' + + 'archive -sdk $(SDK) -configuration $(Configuration) -archivePath /user/build/testScheme CODE_SIGN_STYLE=Automatic'), + 'xcodebuild archive should have been run to create the .xcarchive.'); + //export + assert(tr.ran('/home/bin/xcodebuild -exportArchive ' + + '-archivePath /user/build/testScheme.xcarchive ' + + '-exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist'), + 'xcodebuild exportArchive should have been run to export the IPA from the .xcarchive'); + + assert(tr.stderr.length === 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + + done(); + }); + + it('Xcode 8 automatic signing with development team', function (done: MochaDone) { + let tp = path.join(__dirname, 'L0Xcode8AutomaticSignWithDevTeam.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + //version + assert(tr.ran('/home/bin/xcodebuild -version'), 'xcodebuild for version should have been run.'); + //build + assert(tr.ran('/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) ' + + '-workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme build ' + + 'CODE_SIGN_STYLE=Automatic DEVELOPMENT_TEAM=testDevTeamId'), + 'xcodebuild for building the ios project/workspace should have been run.'); + + //archive + assert(tr.ran('/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme ' + + 'archive -sdk $(SDK) -configuration $(Configuration) ' + + '-archivePath /user/build/testScheme ' + + 'CODE_SIGN_STYLE=Automatic DEVELOPMENT_TEAM=testDevTeamId'), + 'xcodebuild archive should have been run to create the .xcarchive.'); + //export + assert(tr.ran('/home/bin/xcodebuild -exportArchive ' + + '-archivePath /user/build/testScheme.xcarchive ' + + '-exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist'), + 'xcodebuild exportArchive should have been run to export the IPA from the .xcarchive'); + + assert(tr.stderr.length === 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + + done(); + }); + + it('Xcode archive and export with project path', function (done: MochaDone) { + let tp = path.join(__dirname, 'L0XcodeArchiveExportProject.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + //version + assert(tr.ran('/home/bin/xcodebuild -version'), 'xcodebuild for version should have been run.'); + //build + assert(tr.ran('/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) ' + + '-project /user/build/fun.xcodeproj -scheme testScheme build ' + + 'CODE_SIGN_STYLE=Automatic DEVELOPMENT_TEAM=testDevTeamId'), + 'xcodebuild for building the ios project/workspace should have been run.'); + + //archive + assert(tr.ran('/home/bin/xcodebuild -project /user/build/fun.xcodeproj -scheme testScheme ' + + 'archive -sdk $(SDK) -configuration $(Configuration) ' + + '-archivePath /user/build/testScheme ' + + 'CODE_SIGN_STYLE=Automatic DEVELOPMENT_TEAM=testDevTeamId'), + 'xcodebuild archive should have been run to create the .xcarchive.'); + + //export + assert(tr.ran('/home/bin/xcodebuild -exportArchive ' + + '-archivePath /user/build/testScheme.xcarchive ' + + '-exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist'), + 'xcodebuild exportArchive should have been run to export the IPA from the .xcarchive'); + + assert(tr.stderr.length === 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + + done(); + }); + + it('Xcode 9 automatic signing with files', function (done: MochaDone) { + let tp = path.join(__dirname, 'L0Xcode9AutomaticSignWithFiles.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + //version + assert(tr.ran('/home/bin/xcodebuild -version'), 'xcodebuild for version should have been run.'); + //build + assert(tr.ran('/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) ' + + '-workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme build ' + + 'CODE_SIGN_STYLE=Automatic'), + 'xcodebuild for building the ios project/workspace should have been run.'); + + //archive + assert(tr.ran('/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme ' + + 'archive -sdk $(SDK) -configuration $(Configuration) ' + + '-archivePath /user/build/testScheme ' + + 'CODE_SIGN_STYLE=Automatic'), + 'xcodebuild archive should have been run to create the .xcarchive.'); + //export + assert(tr.ran('/home/bin/xcodebuild -exportArchive ' + + '-archivePath /user/build/testScheme.xcarchive ' + + '-exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist'), + 'xcodebuild exportArchive should have been run to export the IPA from the .xcarchive'); + + assert(tr.stderr.length === 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + + done(); + }); + + it('Xcode 9 automatic signing with allowProvisioningUpdates', function (done: MochaDone) { + let tp = path.join(__dirname, 'L0Xcode9AutomaticSignWithAllowProvisioningUpdates.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + //version + assert(tr.ran('/home/bin/xcodebuild -version'), 'xcodebuild for version should have been run.'); + //build + assert(tr.ran('/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) ' + + '-workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme build ' + + '-allowProvisioningUpdates CODE_SIGN_STYLE=Automatic'), + 'xcodebuild for building the ios project/workspace should have been run with -allowProvisioningUpdates.'); + + //archive + assert(tr.ran('/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme ' + + 'archive -sdk $(SDK) -configuration $(Configuration) ' + + '-archivePath /user/build/testScheme ' + + 'CODE_SIGN_STYLE=Automatic -allowProvisioningUpdates'), + 'xcodebuild archive should have been run to create the .xcarchive.'); + //export + assert(tr.ran('/home/bin/xcodebuild -exportArchive ' + + '-archivePath /user/build/testScheme.xcarchive ' + + '-exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist ' + + '-allowProvisioningUpdates'), + 'xcodebuild exportArchive should have been run with -allowProvisioningUpdates to export the IPA from the .xcarchive'); + + assert(tr.stderr.length === 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + + done(); + }); + + it('Xcode 9 signing defaults to automatic, with auto export', function (done: MochaDone) { + let tp = path.join(__dirname, 'L0XCode9SigningDefaultsToAutoWithAutoExport.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + //version + assert(tr.ran('/home/bin/xcodebuild -version'), 'xcodebuild for version should have been run.'); + + //export prep + assert(tr.ran("/usr/libexec/PlistBuddy -c Clear _XcodeTaskExportOptions.plist"), + 'PlistBuddy Clear should have run.'); + + assert(tr.ran("/usr/libexec/PlistBuddy -c Add method string app-store _XcodeTaskExportOptions.plist"), + 'PlistBuddy add method should have run.'); + + //export + assert(tr.ran('/home/bin/xcodebuild -exportArchive -archivePath /user/build/testScheme.xcarchive ' + + '-exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist'), + 'xcodebuild exportArchive should have been run to export the IPA from the .xcarchive'); + + assert(tr.stderr.length === 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.invokedToolCount === 14, 'Should have run \"PlistBuddy -c Add...\" once, and 13 other command lines.'); + + done(); + }); + + it('Xcode 9 signing defaults to manual, with auto export', function (done: MochaDone) { + let tp = path.join(__dirname, 'L0XCode9SigningDefaultsToManualWithAutoExport.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + //version + assert(tr.ran('/home/bin/xcodebuild -version'), 'xcodebuild for version should have been run.'); + + //export prep + assert(tr.ran("/usr/libexec/PlistBuddy -c Clear _XcodeTaskExportOptions.plist"), + 'PlistBuddy Clear should have run.'); + + assert(tr.ran("/usr/libexec/PlistBuddy -c Add method string app-store _XcodeTaskExportOptions.plist"), + 'PlistBuddy add method should have run.'); + + assert(tr.ran("/usr/libexec/PlistBuddy -c Add signingStyle string manual _XcodeTaskExportOptions.plist"), + 'PlistBuddy add signingStyle should have run.'); + + assert(tr.ran("/usr/libexec/PlistBuddy -c Add provisioningProfiles dict _XcodeTaskExportOptions.plist"), + 'PlistBuddy add provisioningProfiles should have run.'); + + assert(tr.ran("/usr/libexec/PlistBuddy -c Add provisioningProfiles:com.vsts.test.myApp string Bob _XcodeTaskExportOptions.plist"), + 'PlistBuddy add provisioningProfiles:com.vsts.test.myApp should have run.'); + + //export + assert(tr.ran('/home/bin/xcodebuild -exportArchive -archivePath /user/build/testScheme.xcarchive ' + + '-exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist'), + 'xcodebuild exportArchive should have been run to export the IPA from the .xcarchive'); + + assert(tr.stderr.length === 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.invokedToolCount === 21, 'Should have run \"PlistBuddy -c Add...\" four times, and 17 other command lines.'); + + done(); + }); + + it('Xcode 9 signing with auto export and cloud entitlement for production', function (done: MochaDone) { + const tp = path.join(__dirname, 'L0Xcode9ExportArchiveWithAutoAndCloudEntitlementForProduction.js'); + const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + //version + assert(tr.ran('/home/bin/xcodebuild -version'), 'xcodebuild for version should have been run.'); + + //export prep + assert(tr.ran("/usr/libexec/PlistBuddy -c Clear _XcodeTaskExportOptions.plist"), + 'PlistBuddy Clear should have run.'); + + assert(tr.ran("/usr/libexec/PlistBuddy -c Add method string app-store _XcodeTaskExportOptions.plist"), + 'PlistBuddy add method should have run.'); + + assert(tr.ran("/usr/libexec/PlistBuddy -c Add iCloudContainerEnvironment string Production _XcodeTaskExportOptions.plist"), + 'PlistBuddy add cloud entitlement list should have run.'); + + assert(tr.ran("/usr/libexec/PlistBuddy -c Add signingStyle string manual _XcodeTaskExportOptions.plist"), + 'PlistBuddy add signingStyle should have run.'); + + assert(tr.ran("/usr/libexec/PlistBuddy -c Add provisioningProfiles dict _XcodeTaskExportOptions.plist"), + 'PlistBuddy add provisioningProfiles should have run.'); + + assert(tr.ran("/usr/libexec/PlistBuddy -c Add provisioningProfiles:com.vsts.test.myApp string Bob _XcodeTaskExportOptions.plist"), + 'PlistBuddy add provisioningProfiles:com.vsts.test.myApp should have run.'); + + //export + assert(tr.ran('/home/bin/xcodebuild -exportArchive -archivePath /user/build/testScheme.xcarchive ' + + '-exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist'), + 'xcodebuild exportArchive should have been run to export the IPA from the .xcarchive'); + + assert(tr.stderr.length === 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.invokedToolCount === 22, 'Should have run \"PlistBuddy -c Add...\" four times, and 18 other command lines.'); + + done(); + }); + + it('Xcode 9 signing with auto export and cloud entitlement for development', function (done: MochaDone) { + const tp = path.join(__dirname, 'L0Xcode9ExportArchiveWithAutoAndCloudEntitlementForDevelopment.js'); + const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + //version + assert(tr.ran('/home/bin/xcodebuild -version'), 'xcodebuild for version should have been run.'); + + //export prep + assert(tr.ran("/usr/libexec/PlistBuddy -c Clear _XcodeTaskExportOptions.plist"), + 'PlistBuddy Clear should have run.'); + + assert(tr.ran("/usr/libexec/PlistBuddy -c Add method string development _XcodeTaskExportOptions.plist"), + 'PlistBuddy add method should have run.'); + + assert(tr.ran("/usr/libexec/PlistBuddy -c Add iCloudContainerEnvironment string Development _XcodeTaskExportOptions.plist"), + 'PlistBuddy add cloud entitlement for Development should have run.'); + + assert(tr.ran("/usr/libexec/PlistBuddy -c Add signingStyle string manual _XcodeTaskExportOptions.plist"), + 'PlistBuddy add signingStyle should have run.'); + + assert(tr.ran("/usr/libexec/PlistBuddy -c Add provisioningProfiles dict _XcodeTaskExportOptions.plist"), + 'PlistBuddy add provisioningProfiles should have run.'); + + assert(tr.ran("/usr/libexec/PlistBuddy -c Add provisioningProfiles:com.vsts.test.myApp string Bob _XcodeTaskExportOptions.plist"), + 'PlistBuddy add provisioningProfiles:com.vsts.test.myApp should have run.'); + + //export + assert(tr.ran('/home/bin/xcodebuild -exportArchive -archivePath /user/build/testScheme.xcarchive ' + + '-exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist'), + 'xcodebuild exportArchive should have been run to export the IPA from the .xcarchive'); + + assert(tr.stderr.length === 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.invokedToolCount === 21, 'Should have run \"PlistBuddy -c Add...\" four times, and 17 other command lines.'); + + done(); + }); + + it('Task defaults - v4.127.0', function (done: MochaDone) { + let tp = path.join(__dirname, 'L0TaskDefaults_4.127.0.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + //scheme + assert(tr.ran('/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -list'), + 'xcodebuild for listing schemes should have been run.'); + + //version + assert(tr.ran('/home/bin/xcodebuild -version'), + 'xcodebuild for version should have been run.'); + + //build + assert(tr.ran('/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) ' + + '-workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme funScheme build ' + + 'CODE_SIGNING_ALLOWED=NO'), + 'xcodebuild for building the ios project/workspace should have been run.'); + + assert(tr.invokedToolCount == 3, 'should have run xcodebuild for scheme list, version and build.'); + assert(tr.stderr.length === 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + + done(); + }); + + it('Test results should be published in postexecution to work even when Xcode test has failures', function (done: MochaDone) { + let tp = path.join(__dirname, 'L0TestResultsPublishedInPostExecutionJob.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + assert(tr.succeeded, 'post xcode task should have succeeded'); + assert(tr.stdout.indexOf('##vso[results.publish type=JUnit;mergeResults=false;publishRunAttachments=true;resultFiles=/home/build/testbuild1/build/reports/junit.xml;]') > 0, + 'test result should have been published even when there are test errors'); + done(); + }); + + it('Empty test results should not be published in postexecution', function (done: MochaDone) { + let tp = path.join(__dirname, 'L0EmptyTestResultsNotPublishedInPostExecutionJob.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + assert(tr.succeeded, 'post xcode task should have succeeded'); + assert(tr.stdout.indexOf('##vso[task.issue type=warning;]loc_mock_NoTestResultsFound /home/build/**/build/reports/junit.xml') > 0, + 'test result should not have been published when they are empty'); + done(); + }); + + it('Test results publishing should fail if xcpretty is not installed', function (done: MochaDone) { + let tp = path.join(__dirname, 'L0TestResultsPublishFailsIfXcprettyNotInstalled.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + assert(tr.stdout.indexOf('##vso[task.issue type=warning;]loc_mock_XcprettyNotInstalled') > 0, 'warning message should indicate that xcpretty has to be installed.') + assert(tr.succeeded, 'post xcode task should have succeeded with warnings'); + done(); + }); + + it('postexecution should not fail for errors', function (done: MochaDone) { + let tp = path.join(__dirname, 'L0ErrorsInPostExecutionJob.js'); + let tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + + assert(tr.succeeded, 'post xcode task should have succeeded with warnings even when there are errors.'); + assert(tr.stdout.indexOf('XcodeRequiresMac'), 'warning for macos requirement should be shown.'); + done(); + }); + + it('macOS auto export', function (done: MochaDone) { + const tp = path.join(__dirname, 'L0macOSAutoExport.js'); + const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + //version + assert(tr.ran('/home/bin/xcodebuild -version'), 'xcodebuild for version should have been run.'); + + //export prep + assert(tr.ran("/usr/libexec/PlistBuddy -c Clear _XcodeTaskExportOptions.plist"), + 'PlistBuddy Clear should have run.'); + + // macOS Developer ID provisioning profile from the developer portal. + assert(tr.ran("/usr/libexec/PlistBuddy -c Add method string developer-id _XcodeTaskExportOptions.plist"), + 'PlistBuddy add method should have run.'); + + // provisioning profile includes iCloudContainerEnvironment. + assert(tr.ran("/usr/libexec/PlistBuddy -c Add iCloudContainerEnvironment string Production _XcodeTaskExportOptions.plist"), + 'PlistBuddy add cloud entitlement list should have run.'); + + assert(tr.ran("/usr/libexec/PlistBuddy -c Add signingStyle string manual _XcodeTaskExportOptions.plist"), + 'PlistBuddy add signingStyle should have run.'); + + assert(tr.ran("/usr/libexec/PlistBuddy -c Add provisioningProfiles dict _XcodeTaskExportOptions.plist"), + 'PlistBuddy add provisioningProfiles should have run.'); + + assert(tr.ran("/usr/libexec/PlistBuddy -c Add provisioningProfiles:com.vsts.test.myApp string Bob _XcodeTaskExportOptions.plist"), + 'PlistBuddy add provisioningProfiles:com.vsts.test.myApp should have run.'); + + //export + assert(tr.ran('/home/bin/xcodebuild -exportArchive -archivePath /user/build/testScheme.xcarchive' + +' -exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist'), + 'xcodebuild exportArchive should have been run to export the IPA from the .xcarchive'); + + assert(tr.stderr.length === 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + + assert(tr.invokedToolCount === 21, 'Should have run \"PlistBuddy -c Add...\" five times, and 16 other command lines.'); + + done(); + }); + + it('macOS provisionless auto export', function (done: MochaDone) { + const tp = path.join(__dirname, 'L0macOSProvisionlessAutoExport.js'); + const tr: ttm.MockTestRunner = new ttm.MockTestRunner(tp); + + tr.run(); + //version + assert(tr.ran('/home/bin/xcodebuild -version'), 'xcodebuild for version should have been run.'); + + //export prep + assert(tr.ran("/usr/libexec/PlistBuddy -c Clear _XcodeTaskExportOptions.plist"), + 'PlistBuddy Clear should have run. An empty exportOptions plist should be used when there\'s not an embedded provisioning profile.'); + + //export + assert(tr.ran('/home/bin/xcodebuild -exportArchive -archivePath /user/build/testScheme.xcarchive' + +' -exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist'), + 'xcodebuild exportArchive should have been run to export the IPA from the .xcarchive'); + + assert(tr.stderr.length === 0, 'should not have written to stderr'); + assert(tr.succeeded, 'task should have succeeded'); + assert(tr.invokedToolCount === 6, 'Should have ran 6 command lines.'); + + done(); + }); +}); \ No newline at end of file diff --git a/_generated/XcodeV5_Node20/Tests/L0CreateIpaWithCodeSigningIdentifiers.ts b/_generated/XcodeV5_Node20/Tests/L0CreateIpaWithCodeSigningIdentifiers.ts new file mode 100644 index 000000000000..222a9f53b987 --- /dev/null +++ b/_generated/XcodeV5_Node20/Tests/L0CreateIpaWithCodeSigningIdentifiers.ts @@ -0,0 +1,102 @@ + +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, '..', 'xcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +tr.setInput('actions', 'build'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('sdk', '$(SDK)'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/*.xcworkspace'); +tr.setInput('scheme', 'testScheme'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('packageApp', 'true'); +tr.setInput('signingOption', 'manual'); +tr.setInput('signingIdentity', 'iPhone Developer: XcodeTask Tester (HE432Y3E2Q)'); +tr.setInput('provisioningProfileUuid', 'testuuid'); +tr.setInput('args', ''); +tr.setInput('cwd', '/user/build'); +tr.setInput('outputPattern', 'output/$(SDK)/$(Configuration)'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('useXctool', 'false'); +tr.setInput('packageTool', 'xcodebuild'); +tr.setInput('xctoolReporter', ''); +tr.setInput('publishJUnitResults', 'false'); +tr.setInput('archivePath', '/user/build'); +tr.setInput('exportPath', '/user/build'); +tr.setInput('exportOptions', 'specify'); +tr.setInput('exportMethod', 'development'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild", + "security": "/usr/bin/security", + "/usr/libexec/PlistBuddy": "/usr/libexec/PlistBuddy", + "rm": "/bin/rm", + "cp": "/bin/cp" + }, + "checkPath": { + "/home/bin/xcodebuild": true, + "/usr/bin/security": true, + "/usr/libexec/PlistBuddy": true, + "/bin/rm": true, + "/bin/cp": true + }, + "filePathSupplied": { + "archivePath": false + }, + "getVariable": { + "HOME": "/users/test" + }, + "stats": { + "/user/build": { + "isFile": false + } + }, + "findMatch": { + "**/*.xcodeproj/*.xcworkspace": [ + "/user/build/fun.xcodeproj/project.xcworkspace" + ], + "**/*.app": [ + "/user/build/output/$(SDK)/$(Configuration)/build.sym/Release.iphoneos/fun.app" + ], + "**/*.xcarchive": [ + "/user/build/testScheme.xcarchive" + ] + }, + "exec": { + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 7.3.1" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme build CODE_SIGN_STYLE=Manual CODE_SIGN_IDENTITY=iPhone Developer: XcodeTask Tester (HE432Y3E2Q) PROVISIONING_PROFILE=testuuid PROVISIONING_PROFILE_SPECIFIER=": { + "code": 0, + "stdout": "xcodebuild output here" + }, + "/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme archive -sdk $(SDK) -configuration $(Configuration) -archivePath /user/build/testScheme CODE_SIGN_STYLE=Manual CODE_SIGN_IDENTITY=iPhone Developer: XcodeTask Tester (HE432Y3E2Q) PROVISIONING_PROFILE=testuuid PROVISIONING_PROFILE_SPECIFIER=": { + "code": 0, + "stdout": "xcodebuild archive output here" + }, + "/home/bin/xcodebuild -exportArchive -archivePath /user/build/testScheme.xcarchive -exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "xcodebuild export output here" + }, + "/usr/libexec/PlistBuddy -c Clear _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist initialized output here" + }, + "/usr/libexec/PlistBuddy -c Add method string development _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/XcodeV5_Node20/Tests/L0EmptyTestResultsNotPublishedInPostExecutionJob.ts b/_generated/XcodeV5_Node20/Tests/L0EmptyTestResultsNotPublishedInPostExecutionJob.ts new file mode 100644 index 000000000000..b6bd2c84b200 --- /dev/null +++ b/_generated/XcodeV5_Node20/Tests/L0EmptyTestResultsNotPublishedInPostExecutionJob.ts @@ -0,0 +1,49 @@ + +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, '..', 'postxcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +// Xcode task run tests +tr.setInput('actions', 'test'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/project.xcworkspace'); +tr.setInput('scheme', 'testScheme'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('packageApp', 'false'); +tr.setInput('signingOption', 'default'); +tr.setInput('destinationPlatformOption', 'default'); +tr.setInput('destinationPlatform', ''); +tr.setInput('destinationTypeOption', 'simulators'); +tr.setInput('destinationSimulators', 'iPhone 7'); +tr.setInput('destinationDevices', ''); +tr.setInput('useXcpretty', 'true'); +tr.setInput('publishJUnitResults', 'true'); +tr.setInput('cwd', '/home/build'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "getVariable": { + "HOME": "/users/test" + }, + "which": { + "xcpretty": "/users/xcpretty" + }, + "findMatch": { + "/home/build/**/build/reports/junit.xml": [] + } +}; +tr.setAnswers(a); + +os.platform = () => { + return 'darwin'; +} +tr.registerMock('os', os); + +tr.run(); + diff --git a/_generated/XcodeV5_Node20/Tests/L0ErrorArgs.ts b/_generated/XcodeV5_Node20/Tests/L0ErrorArgs.ts new file mode 100644 index 000000000000..8dafbd5f0b5f --- /dev/null +++ b/_generated/XcodeV5_Node20/Tests/L0ErrorArgs.ts @@ -0,0 +1,60 @@ + +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, '..', 'xcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tr.setInput('actions', ''); +tr.setInput('configuration', ''); +tr.setInput('sdk', ''); +tr.setInput('xcWorkspacePath', '/user/build'); +tr.setInput('scheme', ''); +tr.setInput('packageApp', 'false'); +tr.setInput('signingOption', 'default'); +tr.setInput('signingIdentity', ''); +tr.setInput('provisioningProfileUuid', ''); +tr.setInput('args', ''); +tr.setInput('cwd', '/user/build'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('publishJUnitResults', 'false'); + +process.env['AGENT_VERSION'] = '2.122.0'; +process.env['BUILD_SOURCESDIRECTORY'] = '/user/build'; +process.env['SYSTEM_DEFAULTWORKINGDIRECTORY'] = "/user/build"; +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild" + }, + "checkPath" : { + "/home/bin/xcodebuild": true + }, + "getVariable": { + "build.sourcesDirectory": "/user/build", + "HOME": "/users/test" + }, + "findMatch": { + "**/*.xcodeproj/*.xcworkspace": [ + "/user/build/fun.xcodeproj/project.xcworkspace" + ] + }, + "exec": { + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 7.3.1" + }, + "/home/bin/xcodebuild build": { + "code": 0, + "stdout": "xcodebuild output here" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/XcodeV5_Node20/Tests/L0ErrorsInPostExecutionJob.ts b/_generated/XcodeV5_Node20/Tests/L0ErrorsInPostExecutionJob.ts new file mode 100644 index 000000000000..e952a5f734db --- /dev/null +++ b/_generated/XcodeV5_Node20/Tests/L0ErrorsInPostExecutionJob.ts @@ -0,0 +1,51 @@ + +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, '..', 'postxcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +// Xcode task run tests +tr.setInput('actions', 'test'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/project.xcworkspace'); +tr.setInput('scheme', 'testScheme'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('packageApp', 'false'); +tr.setInput('signingOption', 'default'); +tr.setInput('destinationPlatformOption', 'default'); +tr.setInput('destinationPlatform', ''); +tr.setInput('destinationTypeOption', 'simulators'); +tr.setInput('destinationSimulators', 'iPhone 7'); +tr.setInput('destinationDevices', ''); +tr.setInput('useXcpretty', 'true'); +tr.setInput('publishJUnitResults', 'true'); +tr.setInput('cwd', '/home/build'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "getVariable": { + "HOME": "/users/test" + }, + "which": { + "xcpretty": "/users/xcpretty" + }, + "findMatch": { + "/home/build/**/build/reports/junit.xml": [ + "/home/build/testbuild1/build/reports/junit.xml" + ] + } +}; +tr.setAnswers(a); + +os.platform = () => { + return 'darwin'; +} +tr.registerMock('os', os); + +tr.run(); + diff --git a/_generated/XcodeV5_Node20/Tests/L0ExportArchiveAtSpecificPath.ts b/_generated/XcodeV5_Node20/Tests/L0ExportArchiveAtSpecificPath.ts new file mode 100644 index 000000000000..c28b20997ed5 --- /dev/null +++ b/_generated/XcodeV5_Node20/Tests/L0ExportArchiveAtSpecificPath.ts @@ -0,0 +1,91 @@ + +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, '..', 'xcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tr.setInput('actions', 'build'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('sdk', '$(SDK)'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/*.xcworkspace'); +tr.setInput('scheme', 'testScheme'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('packageApp', 'true'); +tr.setInput('signingOption', 'default'); +tr.setInput('signingIdentity', ''); +tr.setInput('provisioningProfileUuid', ''); +tr.setInput('args', ''); +tr.setInput('cwd', '/user/build'); +tr.setInput('outputPattern', 'output/$(SDK)/$(Configuration)'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('useXctool', 'false'); +tr.setInput('xctoolReporter', ''); +tr.setInput('publishJUnitResults', 'false'); +tr.setInput('archivePath', '/user/output/myarchive.xcarchive'); +tr.setInput('exportPath', '/user/output/myipa.ipa'); +tr.setInput('exportOptions', 'specify'); +tr.setInput('exportMethod', 'development'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild", + "/usr/libexec/PlistBuddy": "/usr/libexec/PlistBuddy" + }, + "checkPath": { + "/home/bin/xcodebuild": true, + "/usr/libexec/PlistBuddy": true + }, + "filePathSupplied": { + "archivePath": false + }, + "getVariable": { + "build.sourcesDirectory": "/user/build", + "HOME": "/users/test" + }, + "stats": { + "/user/build": { + "isFile": false + } + }, + "findMatch": { + "**/*.xcodeproj/*.xcworkspace": [ + "/user/build/fun.xcodeproj/project.xcworkspace" + ], + "**/*.app": [ + "/user/build/output/$(SDK)/$(Configuration)/build.sym/Release.iphoneos/fun.app" + ] + }, + "exec": { + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 7.3.1" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme build": { + "code": 0, + "stdout": "xcodebuild output here" + }, + "/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme archive -sdk $(SDK) -configuration $(Configuration) -archivePath /user/output/myarchive.xcarchive": { + "code": 0, + "stdout": "xcodebuild archive output here" + }, + "/home/bin/xcodebuild -exportArchive -archivePath /user/build/testScheme.xcarchive -exportPath /user/output/myipa.ipa -exportOptionsPlist _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "xcodebuild export output here" + }, + "/usr/libexec/PlistBuddy -c Clear _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist initialized output here" + }, + "/usr/libexec/PlistBuddy -c Add method string development _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/XcodeV5_Node20/Tests/L0ExportArchiveSpecify.ts b/_generated/XcodeV5_Node20/Tests/L0ExportArchiveSpecify.ts new file mode 100644 index 000000000000..c58bc8c66dd1 --- /dev/null +++ b/_generated/XcodeV5_Node20/Tests/L0ExportArchiveSpecify.ts @@ -0,0 +1,97 @@ + +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, '..', 'xcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +tr.setInput('actions', 'build'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('sdk', '$(SDK)'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/*.xcworkspace'); +tr.setInput('scheme', 'testScheme'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('packageApp', 'true'); +tr.setInput('signingOption', 'default'); +tr.setInput('signingIdentity', ''); +tr.setInput('provisioningProfileUuid', ''); +tr.setInput('args', ''); +tr.setInput('cwd', '/user/build'); +tr.setInput('outputPattern', 'output/$(SDK)/$(Configuration)'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('useXctool', 'false'); +tr.setInput('packageTool', 'xcodebuild'); +tr.setInput('xctoolReporter', ''); +tr.setInput('publishJUnitResults', 'false'); +tr.setInput('archivePath', '/user/build'); +tr.setInput('exportPath', '/user/build'); +tr.setInput('exportOptions', 'specify'); +tr.setInput('exportMethod', 'development'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild", + "/usr/libexec/PlistBuddy": "/usr/libexec/PlistBuddy" + }, + "checkPath": { + "/home/bin/xcodebuild": true, + "/usr/libexec/PlistBuddy": true + }, + "filePathSupplied": { + "archivePath": false + }, + "getVariable": { + "build.sourcesDirectory": "/user/build", + "HOME": "/users/test" + }, + "stats": { + "/user/build": { + "isFile": false + } + }, + "findMatch": { + "**/*.xcodeproj/*.xcworkspace": [ + "/user/build/fun.xcodeproj/project.xcworkspace" + ], + "**/*.app": [ + "/user/build/output/$(SDK)/$(Configuration)/build.sym/Release.iphoneos/fun.app" + ], + "**/*.xcarchive": [ + "/user/build/testScheme.xcarchive" + ] + }, + "exec": { + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 7.3.1" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme build": { + "code": 0, + "stdout": "xcodebuild output here" + }, + "/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme archive -sdk $(SDK) -configuration $(Configuration) -archivePath /user/build/testScheme": { + "code": 0, + "stdout": "xcodebuild archive output here" + }, + "/home/bin/xcodebuild -exportArchive -archivePath /user/build/testScheme.xcarchive -exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "xcodebuild export output here" + }, + "/usr/libexec/PlistBuddy -c Clear _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist initialized output here" + }, + "/usr/libexec/PlistBuddy -c Add method string development _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/XcodeV5_Node20/Tests/L0ExportArchiveWithAuto.ts b/_generated/XcodeV5_Node20/Tests/L0ExportArchiveWithAuto.ts new file mode 100644 index 000000000000..aca5d80f5be3 --- /dev/null +++ b/_generated/XcodeV5_Node20/Tests/L0ExportArchiveWithAuto.ts @@ -0,0 +1,123 @@ + +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, '..', 'xcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +tr.setInput('actions', 'build'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('sdk', '$(SDK)'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/*.xcworkspace'); +tr.setInput('scheme', 'testScheme'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('packageApp', 'true'); +tr.setInput('signingOption', 'default'); +tr.setInput('signingIdentity', ''); +tr.setInput('provisioningProfileUuid', ''); +tr.setInput('args', ''); +tr.setInput('cwd', '/user/build'); +tr.setInput('outputPattern', 'output/$(SDK)/$(Configuration)'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('useXctool', 'false'); +tr.setInput('packageTool', 'xcodebuild'); +tr.setInput('xctoolReporter', ''); +tr.setInput('publishJUnitResults', 'false'); +tr.setInput('archivePath', '/user/build'); +tr.setInput('exportPath', '/user/build'); +tr.setInput('exportOptions', 'auto'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild", + "security": "/usr/bin/security", + "/usr/libexec/PlistBuddy": "/usr/libexec/PlistBuddy", + "rm": "/bin/rm" + }, + "checkPath": { + "/home/bin/xcodebuild": true, + "/usr/bin/security": true, + "/usr/libexec/PlistBuddy": true, + "/bin/rm": true, + }, + "filePathSupplied": { + "archivePath": false + }, + "getVariable": { + "build.sourcesDirectory": "/user/build", + "HOME": "/users/test" + }, + "stats": { + "/user/build": { + "isFile": false + } + }, + "findMatch": { + "**/*.xcodeproj/*.xcworkspace": [ + "/user/build/fun.xcodeproj/project.xcworkspace" + ], + "**/*.app": [ + "/user/build/output/$(SDK)/$(Configuration)/build.sym/Release.iphoneos/fun.app" + ], + "**/*.xcarchive": [ + "/user/build/testScheme.xcarchive" + ], + "**/embedded.mobileprovision": [ + "/user/build/testScheme.xcarchive/Products/testScheme.app/embedded.mobileprovision" + ] + }, + "exec": { + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 7.3.1" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme build": { + "code": 0, + "stdout": "xcodebuild output here" + }, + "/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme archive -sdk $(SDK) -configuration $(Configuration) -archivePath /user/build/testScheme": { + "code": 0, + "stdout": "xcodebuild archive output here" + }, + "/home/bin/xcodebuild -exportArchive -archivePath /user/build/testScheme.xcarchive -exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "xcodebuild export output here" + }, + "/usr/libexec/PlistBuddy -c Clear _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist initialized output here" + }, + "/usr/libexec/PlistBuddy -c Add method string app-store _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + }, + "/usr/bin/security cms -D -i /user/build/testScheme.xcarchive/Products/testScheme.app/embedded.mobileprovision": { + "code": 0, + "stdout": "prov profile details here" + }, + "/usr/libexec/PlistBuddy -c Print ProvisionsAllDevices _xcodetasktmp.plist": { + "code": 1, + "stdout": "ProvisionsAllDevices not found" + }, + "/usr/libexec/PlistBuddy -c Print Entitlements:get-task-allow _xcodetasktmp.plist": { + "code": 0, + "stdout": "false" + }, + "/usr/libexec/PlistBuddy -c Print ProvisionedDevices _xcodetasktmp.plist": { + "code": 1, + "stdout": "ProvisionedDevices not found" + }, + "/bin/rm -f _xcodetasktmp.plist": { + "code": 0, + "stdout": "delete output here" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/XcodeV5_Node20/Tests/L0ExportArchiveWithPlist.ts b/_generated/XcodeV5_Node20/Tests/L0ExportArchiveWithPlist.ts new file mode 100644 index 000000000000..383722cfd567 --- /dev/null +++ b/_generated/XcodeV5_Node20/Tests/L0ExportArchiveWithPlist.ts @@ -0,0 +1,93 @@ + +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, '..', 'xcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support +process.env['USEXCRUN'] = 'false'; + +tr.setInput('actions', 'build'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('sdk', '$(SDK)'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/*.xcworkspace'); +tr.setInput('scheme', 'testScheme'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('packageApp', 'true'); +tr.setInput('signingOption', 'default'); +tr.setInput('signingIdentity', ''); +tr.setInput('provisioningProfileUuid', ''); +tr.setInput('args', ''); +tr.setInput('cwd', '/user/build'); +tr.setInput('outputPattern', 'output/$(SDK)/$(Configuration)'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('useXctool', 'false'); +tr.setInput('xctoolReporter', ''); +tr.setInput('publishJUnitResults', 'false'); +tr.setInput('archivePath', '/user/build'); +tr.setInput('exportPath', '/user/build'); +tr.setInput('exportOptions', 'plist'); +tr.setInput('exportOptionsPlist', '/user/build/exportOptions.plist'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild", + "/usr/libexec/PlistBuddy": "/usr/libexec/PlistBuddy" + }, + "checkPath": { + "/home/bin/xcodebuild": true, + "/usr/libexec/PlistBuddy": true + }, + "filePathSupplied": { + "archivePath": false, + "exportOptionsPlist": false + }, + "getVariable": { + "build.sourcesDirectory": "/user/build", + "HOME": "/users/test" + }, + "stats": { + "/user/build": { + "isFile": false + }, + "/user/build/exportOptions.plist": { + "isFile": true + } + }, + "findMatch": { + "**/*.xcodeproj/*.xcworkspace": [ + "/user/build/fun.xcodeproj/project.xcworkspace" + ], + "**/*.app": [ + "/user/build/output/$(SDK)/$(Configuration)/build.sym/Release.iphoneos/fun.app" + ], + "**/*.xcarchive": [ + "/user/build/testScheme.xcarchive" + ] + }, + "exec": { + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 8.0" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme build": { + "code": 0, + "stdout": "xcodebuild output here" + }, + "/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme archive -sdk $(SDK) -configuration $(Configuration) -archivePath /user/build/testScheme": { + "code": 0, + "stdout": "xcodebuild archive output here" + }, + "/home/bin/xcodebuild -exportArchive -archivePath /user/build/testScheme.xcarchive -exportPath /user/build -exportOptionsPlist /user/build/exportOptions.plist": { + "code": 0, + "stdout": "xcodebuild export output here" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/XcodeV5_Node20/Tests/L0ExportOptionsPlistBadPath.ts b/_generated/XcodeV5_Node20/Tests/L0ExportOptionsPlistBadPath.ts new file mode 100644 index 000000000000..5adb88777522 --- /dev/null +++ b/_generated/XcodeV5_Node20/Tests/L0ExportOptionsPlistBadPath.ts @@ -0,0 +1,89 @@ + +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, '..', 'xcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +tr.setInput('actions', 'build'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('sdk', '$(SDK)'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/*.xcworkspace'); +tr.setInput('scheme', 'testScheme'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('packageApp', 'true'); +tr.setInput('signingOption', 'default'); +tr.setInput('signingIdentity', ''); +tr.setInput('provisioningProfileUuid', ''); +tr.setInput('args', ''); +tr.setInput('cwd', '/user/build'); +tr.setInput('outputPattern', 'output/$(SDK)/$(Configuration)'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('useXctool', 'false'); +tr.setInput('packageTool', 'xcodebuild'); +tr.setInput('xctoolReporter', ''); +tr.setInput('publishJUnitResults', 'false'); +tr.setInput('archivePath', '/user/build'); +tr.setInput('exportPath', '/user/build'); +tr.setInput('exportOptions', 'plist'); +tr.setInput('exportOptionsPlist', '/user/build/exportOptions.plist'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild", + "/usr/libexec/PlistBuddy": "/usr/libexec/PlistBuddy" + }, + "checkPath": { + "/home/bin/xcodebuild": true, + "/usr/libexec/PlistBuddy": true + }, + "filePathSupplied": { + "archivePath": false, + "exportOptionsPlist": false + }, + "getVariable": { + "build.sourcesDirectory": "/user/build", + "HOME": "/users/test" + }, + "stats": { + "/user/build": { + "isFile": false + }, + "/user/build/exportOptions.plist": { + "isFile": false + } + }, + "findMatch": { + "**/*.xcodeproj/*.xcworkspace": [ + "/user/build/fun.xcodeproj/project.xcworkspace" + ], + "**/*.app": [ + "/user/build/output/$(SDK)/$(Configuration)/build.sym/Release.iphoneos/fun.app" + ], + "**/*.xcarchive": [ + "/user/build/testScheme.xcarchive" + ] + }, + "exec": { + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 8.0" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme build": { + "code": 0, + "stdout": "xcodebuild output here" + }, + "/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme archive -sdk $(SDK) -configuration $(Configuration) -archivePath /user/build/testScheme": { + "code": 0, + "stdout": "xcodebuild archive output here" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/XcodeV5_Node20/Tests/L0FilePathForArchiveAndExportPath.ts b/_generated/XcodeV5_Node20/Tests/L0FilePathForArchiveAndExportPath.ts new file mode 100644 index 000000000000..7ac43fb00aaf --- /dev/null +++ b/_generated/XcodeV5_Node20/Tests/L0FilePathForArchiveAndExportPath.ts @@ -0,0 +1,97 @@ + +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, '..', 'xcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support +process.env['USEXCRUN'] = 'false'; + +tr.setInput('actions', 'build'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('sdk', '$(SDK)'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/*.xcworkspace'); +tr.setInput('scheme', 'testScheme'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('packageApp', 'true'); +tr.setInput('signingOption', 'default'); +tr.setInput('signingIdentity', ''); +tr.setInput('provisioningProfileUuid', ''); +tr.setInput('args', ''); +tr.setInput('cwd', '/user/build'); +tr.setInput('outputPattern', 'output/$(SDK)/$(Configuration)'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('useXctool', 'false'); +tr.setInput('xctoolReporter', ''); +tr.setInput('publishJUnitResults', 'false'); +tr.setInput('archivePath', '/user/build/testScheme.xcarchive'); +tr.setInput('exportPath', '/user/build/testipa.ipa'); +tr.setInput('exportOptions', 'specify'); +tr.setInput('exportMethod', 'development'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild", + "/usr/libexec/PlistBuddy": "/usr/libexec/PlistBuddy" + }, + "checkPath": { + "/home/bin/xcodebuild": true, + "/usr/libexec/PlistBuddy": true + }, + "filePathSupplied": { + "archivePath": false + }, + "getVariable": { + "build.sourcesDirectory": "/user/build", + "HOME": "/users/test" + }, + "stats": { + "/user/build": { + "isFile": false + } + }, + "findMatch": { + "**/*.xcodeproj/*.xcworkspace": [ + "/user/build/fun.xcodeproj/project.xcworkspace" + ], + "**/*.app": [ + "/user/build/output/$(SDK)/$(Configuration)/build.sym/Release.iphoneos/fun.app" + ], + "**/*.xcarchive": [ + "/user/build/testScheme.xcarchive" + ] + }, + "exec": { + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 7.3.1" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme build": { + "code": 0, + "stdout": "xcodebuild output here" + }, + "/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme archive -sdk $(SDK) -configuration $(Configuration) -archivePath /user/build/testScheme.xcarchive": { + "code": 0, + "stdout": "xcodebuild archive output here" + }, + "/home/bin/xcodebuild -exportArchive -archivePath /user/build/testScheme.xcarchive -exportPath /user/build/testipa.ipa -exportOptionsPlist _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "xcodebuild export output here" + }, + "/usr/libexec/PlistBuddy -c Clear _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist initialized output here" + }, + "/usr/libexec/PlistBuddy -c Add method string development _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/XcodeV5_Node20/Tests/L0NoXcpretty.ts b/_generated/XcodeV5_Node20/Tests/L0NoXcpretty.ts new file mode 100644 index 000000000000..86c0b8e421a8 --- /dev/null +++ b/_generated/XcodeV5_Node20/Tests/L0NoXcpretty.ts @@ -0,0 +1,80 @@ + +import ma = require('azure-pipelines-task-lib/mock-answer'); +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import path = require('path'); +import { emitTelemetry } from '../xcodeutils'; + +let taskPath = path.join(__dirname, '..', 'xcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tr.setInput('actions', 'test'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('sdk', '$(SDK)'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/*.xcworkspace'); +tr.setInput('scheme', 'myscheme'); +tr.setInput('packageApp', 'false'); +tr.setInput('signingOption', 'default'); +tr.setInput('signingIdentity', ''); +tr.setInput('provisioningProfileUuid', ''); +tr.setInput('args', ''); +tr.setInput('cwd', '/user/build'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('useXcpretty', 'false'); +tr.setInput('publishJUnitResults', 'true'); + +tr.registerMock('./xcodeutils', { + getUniqueLogFileName: function (logPrefix: string) { + return '/build/temp' + logPrefix + '.log'; + }, + emitTelemetry: function(area: string, feature: string, taskSpecificTelemetry: { [key: string]: any; }) { + console.log('Xcode task telemetry'); + } +}); + +process.env['AGENT_VERSION'] = '2.122.0'; +process.env['BUILD_SOURCESDIRECTORY'] = '/user/build'; +process.env['SYSTEM_DEFAULTWORKINGDIRECTORY'] = "/user/build"; +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild", + "xcpretty": "/home/bin/xcpretty" + }, + "checkPath" : { + "/home/bin/xcodebuild": true, + "/home/bin/xcpretty": true + }, + "findMatch": { + "**/*.xcodeproj/*.xcworkspace": [ + "/user/build/fun.xcodeproj/project.xcworkspace" + ], + "/user/build": [ + "/user/build/build/reports/junit.xml" + ] + }, + "getVariable": { + "build.sourcesDirectory": "/user/build", + "HOME": "/users/test" + }, + "exec": { + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 7.3.1" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme myscheme test | /home/bin/xcpretty -r junit --no-color": { + "code": 0, + "stdout": "xcodebuild | xcpretty output here" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme myscheme test": { + "code": 0, + "stdout": "xcodebuild output without xcpretty here" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/XcodeV5_Node20/Tests/L0OptionalArgs.ts b/_generated/XcodeV5_Node20/Tests/L0OptionalArgs.ts new file mode 100644 index 000000000000..430c6d2d90c6 --- /dev/null +++ b/_generated/XcodeV5_Node20/Tests/L0OptionalArgs.ts @@ -0,0 +1,60 @@ + +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, '..', 'xcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tr.setInput('actions', 'clean build'); +tr.setInput('configuration', 'Release'); +tr.setInput('sdk', 'iphone'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/*.xcworkspace'); +tr.setInput('scheme', 'fun'); +tr.setInput('packageApp', 'false'); +tr.setInput('signingOption', 'default'); +tr.setInput('signingIdentity', ''); +tr.setInput('provisioningProfileUuid', ''); +tr.setInput('args', '-exportArchive -exportPath /user/build/output/iphone/release'); +tr.setInput('cwd', '/user/build'); +tr.setInput('xcodeVersion', 'specifyPath'); +tr.setInput('xcodeDeveloperDir', '/Applications/Xcode5'); +tr.setInput('publishJUnitResults', 'false'); + +process.env['AGENT_VERSION'] = '2.122.0'; +process.env['BUILD_SOURCESDIRECTORY'] = '/user/build'; +process.env['SYSTEM_DEFAULTWORKINGDIRECTORY'] = "/user/build"; +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild" + }, + "checkPath" : { + "/home/bin/xcodebuild": true + }, + "getVariable": { + "build.sourcesDirectory": "/user/build", + "HOME": "/users/test" + }, + "findMatch": { + "**/*.xcodeproj/*.xcworkspace": [ + "/user/build/fun.xcodeproj/project.xcworkspace" + ] + }, + "exec": { + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 7.3.1" + }, + "/home/bin/xcodebuild -sdk iphone -configuration Release -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme fun clean build -exportArchive -exportPath /user/build/output/iphone/release": { + "code": 0, + "stdout": "xcodebuild output here" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/XcodeV5_Node20/Tests/L0Signing.ts b/_generated/XcodeV5_Node20/Tests/L0Signing.ts new file mode 100644 index 000000000000..8910e2967bc3 --- /dev/null +++ b/_generated/XcodeV5_Node20/Tests/L0Signing.ts @@ -0,0 +1,88 @@ + +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, '..', 'xcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tr.setInput('actions', 'build'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('sdk', '$(SDK)'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/*.xcworkspace'); +tr.setInput('scheme', 'fun'); +tr.setInput('packageApp', 'false'); +tr.setInput('signingOption', 'manual'); +tr.setInput('signingIdentity', 'iPhone Developer: XcodeTask Tester (HE432Y3E2Q)'); +tr.setInput('provisioningProfileUuid', 'testuuid'); +tr.setInput('args', ''); +tr.setInput('cwd', '/user/build'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('publishJUnitResults', 'false'); + +process.env['AGENT_VERSION'] = '2.122.0'; +process.env['BUILD_SOURCESDIRECTORY'] = '/user/build'; +process.env['SYSTEM_DEFAULTWORKINGDIRECTORY'] = "/user/build"; +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild", + "security": "/usr/bin/security", + "/usr/libexec/PlistBuddy": "/usr/libexec/PlistBuddy" + }, + "checkPath" : { + "/home/bin/xcodebuild": true, + "/usr/bin/security": true, + "/usr/libexec/PlistBuddy": true + }, + "exist": { + "/user/build/cert.p12": true, + "/user/build/testuuid.mobileprovision": true + }, + "getVariable": { + "build.sourcesDirectory": "/user/build", + "HOME": "/users/test" + }, + "findMatch": { + "**/*.xcodeproj/*.xcworkspace": [ + "/user/build/fun.xcodeproj/project.xcworkspace" + ] + }, + "exec": { + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 7.3.1" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme fun build CODE_SIGN_STYLE=Manual CODE_SIGN_IDENTITY=iPhone Developer: XcodeTask Tester (HE432Y3E2Q) PROVISIONING_PROFILE=testuuid PROVISIONING_PROFILE_SPECIFIER=": { + "code": 0, + "stdout": "xcodebuild output here" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme fun build CODE_SIGN_STYLE=Manual CODE_SIGN_IDENTITY=iPhone Developer: XcodeTask Tester (HE432Y3E2Q) PROVISIONING_PROFILE= PROVISIONING_PROFILE_SPECIFIER=": { + "code": 0, + "stdout": "xcodebuild output here" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme fun build CODE_SIGN_STYLE=Manual PROVISIONING_PROFILE=testuuid PROVISIONING_PROFILE_SPECIFIER=": { + "code": 0, + "stdout": "xcodebuild output here" + }, + "/usr/bin/security find-identity -v -p codesigning /user/build/_xcodetasktmp.keychain" : { + "code": 0, + "stdout": "1) 5229BFC905F473E52FAD51208174528106966930 \"iPhone Developer: XcodeTask Tester (HE432Y3E2Q)\"\n 1 valid identities found" + }, + "/usr/bin/security cms -D -i /user/build/testuuid.mobileprovision": { + "code": 0, + "stdout": "prov profile details here" + }, + "/usr/libexec/PlistBuddy -c Print UUID _xcodetasktmp.plist": { + "code": 0, + "stdout": "testuuid" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/XcodeV5_Node20/Tests/L0SigningWithP12.ts b/_generated/XcodeV5_Node20/Tests/L0SigningWithP12.ts new file mode 100644 index 000000000000..b8db1dd8f2a0 --- /dev/null +++ b/_generated/XcodeV5_Node20/Tests/L0SigningWithP12.ts @@ -0,0 +1,80 @@ + +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, '..', 'xcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tr.setInput('actions', 'build'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('sdk', '$(SDK)'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/*.xcworkspace'); +tr.setInput('scheme', 'fun'); +tr.setInput('packageApp', 'false'); +tr.setInput('signingOption', 'manual'); +tr.setInput('signingIdentity', 'iPhone Developer: XcodeTask Tester (HE432Y3E2Q)'); +tr.setInput('provisioningProfileUuid', ''); +tr.setInput('args', ''); +tr.setInput('cwd', '/user/build'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('publishJUnitResults', 'false'); + +process.env['AGENT_VERSION'] = '2.122.0'; +process.env['BUILD_SOURCESDIRECTORY'] = '/user/build'; +process.env['SYSTEM_DEFAULTWORKINGDIRECTORY'] = "/user/build"; +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild", + "security": "/usr/bin/security", + "/usr/libexec/PlistBuddy": "/usr/libexec/PlistBuddy" + }, + "checkPath" : { + "/home/bin/xcodebuild": true, + "/usr/bin/security": true, + "/usr/libexec/PlistBuddy": true + }, + "exist": { + "/user/build/cert.p12": true, + "/user/build/testuuid.mobileprovision": true + }, + "getVariable": { + "build.sourcesDirectory": "/user/build", + "HOME": "/users/test" + }, + "findMatch": { + "**/*.xcodeproj/*.xcworkspace": [ + "/user/build/fun.xcodeproj/project.xcworkspace" + ] + }, + "exec": { + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 7.3.1" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme fun build CODE_SIGN_STYLE=Manual CODE_SIGN_IDENTITY=iPhone Developer: XcodeTask Tester (HE432Y3E2Q) PROVISIONING_PROFILE=testuuid PROVISIONING_PROFILE_SPECIFIER=": { + "code": 0, + "stdout": "xcodebuild output here" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme fun build CODE_SIGN_STYLE=Manual CODE_SIGN_IDENTITY=iPhone Developer: XcodeTask Tester (HE432Y3E2Q) PROVISIONING_PROFILE= PROVISIONING_PROFILE_SPECIFIER=": { + "code": 0, + "stdout": "xcodebuild output here" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme fun build CODE_SIGN_STYLE=Manual PROVISIONING_PROFILE=testuuid PROVISIONING_PROFILE_SPECIFIER=": { + "code": 0, + "stdout": "xcodebuild output here" + }, + "/usr/bin/security find-identity -v -p codesigning /user/build/_xcodetasktmp.keychain" : { + "code": 0, + "stdout": "1) 5229BFC905F473E52FAD51208174528106966930 \"iPhone Developer: XcodeTask Tester (HE432Y3E2Q)\"\n 1 valid identities found" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/XcodeV5_Node20/Tests/L0SigningWithProfile.ts b/_generated/XcodeV5_Node20/Tests/L0SigningWithProfile.ts new file mode 100644 index 000000000000..5ef2194614e5 --- /dev/null +++ b/_generated/XcodeV5_Node20/Tests/L0SigningWithProfile.ts @@ -0,0 +1,84 @@ + +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, '..', 'xcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tr.setInput('actions', 'build'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('sdk', '$(SDK)'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/*.xcworkspace'); +tr.setInput('scheme', 'fun'); +tr.setInput('packageApp', 'false'); +tr.setInput('signingOption', 'manual'); +tr.setInput('signingIdentity', ''); +tr.setInput('provisioningProfileUuid', 'testuuid'); +tr.setInput('args', ''); +tr.setInput('cwd', '/user/build'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('publishJUnitResults', 'false'); + +process.env['AGENT_VERSION'] = '2.122.0'; +process.env['BUILD_SOURCESDIRECTORY'] = '/user/build'; +process.env['SYSTEM_DEFAULTWORKINGDIRECTORY'] = "/user/build"; +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild", + "security": "/usr/bin/security", + "/usr/libexec/PlistBuddy": "/usr/libexec/PlistBuddy" + }, + "checkPath" : { + "/home/bin/xcodebuild": true, + "/usr/bin/security": true, + "/usr/libexec/PlistBuddy": true + }, + "exist": { + "/user/build/cert.p12": true, + "/user/build/testuuid.mobileprovision": true + }, + "getVariable": { + "build.sourcesDirectory": "/user/build", + "HOME": "/users/test" + }, + "findMatch": { + "**/*.xcodeproj/*.xcworkspace": [ + "/user/build/fun.xcodeproj/project.xcworkspace" + ] + }, + "exec": { + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 7.3.1" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme fun build CODE_SIGN_STYLE=Manual CODE_SIGN_IDENTITY=iPhone Developer: XcodeTask Tester (HE432Y3E2Q) PROVISIONING_PROFILE=testuuid PROVISIONING_PROFILE_SPECIFIER=": { + "code": 0, + "stdout": "xcodebuild output here" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme fun build CODE_SIGN_STYLE=Manual CODE_SIGN_IDENTITY=iPhone Developer: XcodeTask Tester (HE432Y3E2Q) PROVISIONING_PROFILE= PROVISIONING_PROFILE_SPECIFIER=": { + "code": 0, + "stdout": "xcodebuild output here" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme fun build CODE_SIGN_STYLE=Manual PROVISIONING_PROFILE=testuuid PROVISIONING_PROFILE_SPECIFIER=": { + "code": 0, + "stdout": "xcodebuild output here" + }, + "/usr/bin/security cms -D -i /user/build/testuuid.mobileprovision": { + "code": 0, + "stdout": "prov profile details here" + }, + "/usr/libexec/PlistBuddy -c Print UUID _xcodetasktmp.plist": { + "code": 0, + "stdout": "testuuid" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/XcodeV5_Node20/Tests/L0TaskDefaults_4.127.0.ts b/_generated/XcodeV5_Node20/Tests/L0TaskDefaults_4.127.0.ts new file mode 100644 index 000000000000..ad859179020a --- /dev/null +++ b/_generated/XcodeV5_Node20/Tests/L0TaskDefaults_4.127.0.ts @@ -0,0 +1,84 @@ + +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, '..', 'xcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +// Xcode task defaults used for version 4.127.0. +tr.setInput('actions', 'build'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('sdk', '$(SDK)'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/project.xcworkspace'); +tr.setInput('scheme', ''); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('packageApp', 'false'); +tr.setInput('archivePath', ''); +tr.setInput('exportPath', 'output/$(SDK)/$(Configuration)'); +tr.setInput('exportOptions', 'auto'); +tr.setInput('exportMethod', 'development'); +tr.setInput('exportTeamId', ''); +tr.setInput('exportOptionsPlist', ''); +tr.setInput('exportArgs', ''); +tr.setInput('signingOption', 'nosign'); +tr.setInput('signingIdentity', ''); +tr.setInput('provisioningProfileUuid', ''); +tr.setInput('teamId', ''); +tr.setInput('destinationPlatformOption', 'default'); +tr.setInput('destinationPlatform', ''); +tr.setInput('destinationTypeOption', 'simulators'); +tr.setInput('destinationSimulators', 'iPhone 7'); +tr.setInput('destinationDevices', ''); +tr.setInput('args', ''); +tr.setInput('cwd', ''); +tr.setInput('outputPattern', ''); +tr.setInput('useXcpretty', 'false'); +tr.setInput('publishJUnitResults', 'false'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild" + }, + "checkPath": { + "/home/bin/xcodebuild": true + }, + "filePathSupplied": { + "archivePath": false + }, + "getVariable": { + "HOME": "/users/test" + }, + "stats": { + "/user/build": { + "isFile": false + } + }, + "findMatch": { + "**/*.xcodeproj/project.xcworkspace": [ + "/user/build/fun.xcodeproj/project.xcworkspace" + ] + }, + "exec": { + "/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -list": { + "code": 0, + "stdout": 'Information about workspace "Fun":\n Schemes:\n funScheme\n\n' + }, + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 7.3.1" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme funScheme build CODE_SIGNING_ALLOWED=NO": { + "code": 0, + "stdout": "xcodebuild output here" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/XcodeV5_Node20/Tests/L0TestResultsPublishFailsIfXcprettyNotInstalled.ts b/_generated/XcodeV5_Node20/Tests/L0TestResultsPublishFailsIfXcprettyNotInstalled.ts new file mode 100644 index 000000000000..5c446edfd189 --- /dev/null +++ b/_generated/XcodeV5_Node20/Tests/L0TestResultsPublishFailsIfXcprettyNotInstalled.ts @@ -0,0 +1,50 @@ +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, '..', 'postxcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +// Xcode task run tests +tr.setInput('actions', 'test'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/project.xcworkspace'); +tr.setInput('scheme', 'testScheme'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('packageApp', 'false'); +tr.setInput('signingOption', 'default'); +tr.setInput('destinationPlatformOption', 'default'); +tr.setInput('destinationPlatform', ''); +tr.setInput('destinationTypeOption', 'simulators'); +tr.setInput('destinationSimulators', 'iPhone 7'); +tr.setInput('destinationDevices', ''); +tr.setInput('useXcpretty', 'true'); +tr.setInput('publishJUnitResults', 'true'); +tr.setInput('cwd', '/home/build'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "getVariable": { + "HOME": "/users/test" + }, + "which": { + "xcpretty": "" + }, + "findMatch": { + "/home/build/**/build/reports/junit.xml": [ + "/home/build/testbuild1/build/reports/junit.xml" + ] + } +}; +tr.setAnswers(a); + +os.platform = () => { + return 'darwin'; +} +tr.registerMock('os', os); + +tr.run(); + diff --git a/_generated/XcodeV5_Node20/Tests/L0TestResultsPublishedInPostExecutionJob.ts b/_generated/XcodeV5_Node20/Tests/L0TestResultsPublishedInPostExecutionJob.ts new file mode 100644 index 000000000000..e952a5f734db --- /dev/null +++ b/_generated/XcodeV5_Node20/Tests/L0TestResultsPublishedInPostExecutionJob.ts @@ -0,0 +1,51 @@ + +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, '..', 'postxcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +// Xcode task run tests +tr.setInput('actions', 'test'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/project.xcworkspace'); +tr.setInput('scheme', 'testScheme'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('packageApp', 'false'); +tr.setInput('signingOption', 'default'); +tr.setInput('destinationPlatformOption', 'default'); +tr.setInput('destinationPlatform', ''); +tr.setInput('destinationTypeOption', 'simulators'); +tr.setInput('destinationSimulators', 'iPhone 7'); +tr.setInput('destinationDevices', ''); +tr.setInput('useXcpretty', 'true'); +tr.setInput('publishJUnitResults', 'true'); +tr.setInput('cwd', '/home/build'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "getVariable": { + "HOME": "/users/test" + }, + "which": { + "xcpretty": "/users/xcpretty" + }, + "findMatch": { + "/home/build/**/build/reports/junit.xml": [ + "/home/build/testbuild1/build/reports/junit.xml" + ] + } +}; +tr.setAnswers(a); + +os.platform = () => { + return 'darwin'; +} +tr.registerMock('os', os); + +tr.run(); + diff --git a/_generated/XcodeV5_Node20/Tests/L0XCode9SigningDefaultsToAutoWithAutoExport.ts b/_generated/XcodeV5_Node20/Tests/L0XCode9SigningDefaultsToAutoWithAutoExport.ts new file mode 100644 index 000000000000..7996a8f01c2a --- /dev/null +++ b/_generated/XcodeV5_Node20/Tests/L0XCode9SigningDefaultsToAutoWithAutoExport.ts @@ -0,0 +1,160 @@ + +import ma = require('azure-pipelines-task-lib/mock-answer'); +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import path = require('path'); +import fs = require('fs'); + +let taskPath = path.join(__dirname, '..', 'xcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +tr.registerMock('fs', { + ...fs, + createReadStream: function (path) { + if (path === '/user/build/fun.xcodeproj/project.pbxproj') { + return undefined; + } + throw "createReadStream mocking: path not expected"; + }, + statSync: fs.statSync, + readFileSync: fs.readFileSync, + writeFileSync: function (filePath, contents) { + }, +}); + +tr.registerMock('readline', { + createInterface: function () { + return { + on: function(event, cb) { + if (event === 'line') { + cb("Foo"); + cb(" ProvisioningStyle = Automatic;"); // First line wins. This should be ignored. + cb("Bar"); + cb("Baz"); + } + } + }; + } +}); + +tr.setInput('actions', 'build'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('sdk', '$(SDK)'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/*.xcworkspace'); +tr.setInput('scheme', 'testScheme'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('packageApp', 'true'); +tr.setInput('signingOption', 'default'); +tr.setInput('signingIdentity', ''); +tr.setInput('provisioningProfileUuid', ''); +tr.setInput('args', ''); +tr.setInput('cwd', '/user/build'); +tr.setInput('outputPattern', 'output/$(SDK)/$(Configuration)'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('useXctool', 'false'); +tr.setInput('packageTool', 'xcodebuild'); +tr.setInput('xctoolReporter', ''); +tr.setInput('publishJUnitResults', 'false'); +tr.setInput('archivePath', '/user/build'); +tr.setInput('exportPath', '/user/build'); +tr.setInput('exportOptions', 'auto'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild", + "security": "/usr/bin/security", + "/usr/libexec/PlistBuddy": "/usr/libexec/PlistBuddy", + "rm": "/bin/rm" + }, + "checkPath": { + "/home/bin/xcodebuild": true, + "/usr/bin/security": true, + "/usr/libexec/PlistBuddy": true, + "/bin/rm": true, + }, + "filePathSupplied": { + "archivePath": false + }, + "getVariable": { + "build.sourcesDirectory": "/user/build", + "HOME": "/users/test" + }, + "stats": { + "/user/build": { + "isFile": false + }, + "/user/build/fun.xcodeproj/project.pbxproj": { + "isFile": true + } + }, + "findMatch": { + "**/*.xcodeproj/*.xcworkspace": [ + "/user/build/fun.xcodeproj/project.xcworkspace" + ], + "**/*.app": [ + "/user/build/output/$(SDK)/$(Configuration)/build.sym/Release.iphoneos/fun.app" + ], + "**/*.xcarchive": [ + "/user/build/testScheme.xcarchive" + ], + "**/embedded.mobileprovision": [ + "/user/build/testScheme.xcarchive/Products/testScheme.app/embedded.mobileprovision" + ] + }, + "exec": { + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 9.0" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme build": { + "code": 0, + "stdout": "xcodebuild output here" + }, + "/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme archive -sdk $(SDK) -configuration $(Configuration) -archivePath /user/build/testScheme": { + "code": 0, + "stdout": "xcodebuild archive output here" + }, + "/home/bin/xcodebuild -exportArchive -archivePath /user/build/testScheme.xcarchive -exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "xcodebuild export output here" + }, + "/usr/libexec/PlistBuddy -c Clear _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist initialized output here" + }, + "/usr/libexec/PlistBuddy -c Add method string app-store _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + }, + "/usr/bin/security cms -D -i /user/build/testScheme.xcarchive/Products/testScheme.app/embedded.mobileprovision": { + "code": 0, + "stdout": "prov profile details here" + }, + "/usr/libexec/PlistBuddy -c Print ProvisionsAllDevices _xcodetasktmp.plist": { + "code": 1, + "stdout": "ProvisionsAllDevices not found" + }, + "/usr/libexec/PlistBuddy -c Print Entitlements:get-task-allow _xcodetasktmp.plist": { + "code": 0, + "stdout": "false" + }, + "/usr/libexec/PlistBuddy -c Print ProvisionedDevices _xcodetasktmp.plist": { + "code": 1, + "stdout": "ProvisionedDevices not found" + }, + "/bin/rm -f _xcodetasktmp.plist": { + "code": 0, + "stdout": "delete output here" + }, + "/usr/libexec/PlistBuddy -c Print Entitlements:com.apple.developer.icloud-container-environment _xcodetasktmp.plist": { + "code": 1, + "stdout": ":com.apple.developer.icloud-container-environment, Does Not Exist" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/XcodeV5_Node20/Tests/L0XCode9SigningDefaultsToManualWithAutoExport.ts b/_generated/XcodeV5_Node20/Tests/L0XCode9SigningDefaultsToManualWithAutoExport.ts new file mode 100644 index 000000000000..4990091a0993 --- /dev/null +++ b/_generated/XcodeV5_Node20/Tests/L0XCode9SigningDefaultsToManualWithAutoExport.ts @@ -0,0 +1,181 @@ + +import ma = require('azure-pipelines-task-lib/mock-answer'); +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import path = require('path'); +import fs = require('fs'); + +let taskPath = path.join(__dirname, '..', 'xcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +tr.registerMock('fs', { + ...fs, + createReadStream: function (path) { + if (path === '/user/build/fun.xcodeproj/project.pbxproj') { + return undefined; + } + throw "createReadStream mocking: path not expected"; + }, + statSync: fs.statSync, + readFileSync: fs.readFileSync, + writeFileSync: function (filePath, contents) { + }, +}); + +tr.registerMock('readline', { + createInterface: function () { + return { + on: function(event, cb) { + if (event === 'line') { + cb("Foo"); + cb(" ProvisioningStyle = Manual;"); + cb("Bar"); + cb(" ProvisioningStyle = Automatic;"); // First line wins. This should be ignored. + cb("Baz"); + } + } + }; + } +}); + +tr.setInput('actions', 'build'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('sdk', '$(SDK)'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/*.xcworkspace'); +tr.setInput('scheme', 'testScheme'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('packageApp', 'true'); +tr.setInput('signingOption', 'default'); +tr.setInput('signingIdentity', ''); +tr.setInput('provisioningProfileUuid', ''); +tr.setInput('args', ''); +tr.setInput('cwd', '/user/build'); +tr.setInput('outputPattern', 'output/$(SDK)/$(Configuration)'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('useXctool', 'false'); +tr.setInput('packageTool', 'xcodebuild'); +tr.setInput('xctoolReporter', ''); +tr.setInput('publishJUnitResults', 'false'); +tr.setInput('archivePath', '/user/build'); +tr.setInput('exportPath', '/user/build'); +tr.setInput('exportOptions', 'auto'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild", + "security": "/usr/bin/security", + "/usr/libexec/PlistBuddy": "/usr/libexec/PlistBuddy", + "rm": "/bin/rm" + }, + "checkPath": { + "/home/bin/xcodebuild": true, + "/usr/bin/security": true, + "/usr/libexec/PlistBuddy": true, + "/bin/rm": true, + }, + "filePathSupplied": { + "archivePath": false + }, + "getVariable": { + "build.sourcesDirectory": "/user/build", + "HOME": "/users/test" + }, + "stats": { + "/user/build": { + "isFile": false + }, + "/user/build/fun.xcodeproj/project.pbxproj": { + "isFile": true + } + }, + "findMatch": { + "**/*.xcodeproj/*.xcworkspace": [ + "/user/build/fun.xcodeproj/project.xcworkspace" + ], + "**/*.app": [ + "/user/build/output/$(SDK)/$(Configuration)/build.sym/Release.iphoneos/fun.app" + ], + "**/*.xcarchive": [ + "/user/build/testScheme.xcarchive" + ], + "**/embedded.mobileprovision": [ + "/user/build/testScheme.xcarchive/Products/testScheme.app/embedded.mobileprovision" + ] + }, + "exec": { + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 9.0" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme build": { + "code": 0, + "stdout": "xcodebuild output here" + }, + "/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme archive -sdk $(SDK) -configuration $(Configuration) -archivePath /user/build/testScheme": { + "code": 0, + "stdout": "xcodebuild archive output here" + }, + "/home/bin/xcodebuild -exportArchive -archivePath /user/build/testScheme.xcarchive -exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "xcodebuild export output here" + }, + "/usr/libexec/PlistBuddy -c Clear _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist initialized output here" + }, + "/usr/libexec/PlistBuddy -c Add method string app-store _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + }, + "/usr/bin/security cms -D -i /user/build/testScheme.xcarchive/Products/testScheme.app/embedded.mobileprovision": { + "code": 0, + "stdout": "prov profile details here" + }, + "/usr/libexec/PlistBuddy -c Print ProvisionsAllDevices _xcodetasktmp.plist": { + "code": 1, + "stdout": "ProvisionsAllDevices not found" + }, + "/usr/libexec/PlistBuddy -c Print Entitlements:get-task-allow _xcodetasktmp.plist": { + "code": 0, + "stdout": "false" + }, + "/usr/libexec/PlistBuddy -c Print ProvisionedDevices _xcodetasktmp.plist": { + "code": 1, + "stdout": "ProvisionedDevices not found" + }, + "/bin/rm -f _xcodetasktmp.plist": { + "code": 0, + "stdout": "delete output here" + }, + "/usr/libexec/PlistBuddy -c Add signingStyle string manual _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + }, + "/usr/libexec/PlistBuddy -c Add provisioningProfiles dict _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + }, + "/usr/libexec/PlistBuddy -c Print CFBundleIdentifier /user/build/testScheme.xcarchive/Products/testScheme.app/Info.plist": { + "code": 0, + "stdout": "com.vsts.test.myApp" + }, + "/usr/libexec/PlistBuddy -c Print Name _xcodetasktmp.plist": { + "code": 0, + "stdout": "Bob" + }, + "/usr/libexec/PlistBuddy -c Add provisioningProfiles:com.vsts.test.myApp string Bob _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + }, + "/usr/libexec/PlistBuddy -c Print Entitlements:com.apple.developer.icloud-container-environment _xcodetasktmp.plist": { + "code": 1, + "stdout": ":com.apple.developer.icloud-container-environment, Does Not Exist" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/XcodeV5_Node20/Tests/L0Xcode8AutomaticSignWithDevTeam.ts b/_generated/XcodeV5_Node20/Tests/L0Xcode8AutomaticSignWithDevTeam.ts new file mode 100644 index 000000000000..92b6ad58df7c --- /dev/null +++ b/_generated/XcodeV5_Node20/Tests/L0Xcode8AutomaticSignWithDevTeam.ts @@ -0,0 +1,111 @@ + +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, '..', 'xcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +tr.setInput('actions', 'build'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('sdk', '$(SDK)'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/*.xcworkspace'); +tr.setInput('scheme', 'testScheme'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('packageApp', 'true'); +tr.setInput('signingOption', 'auto'); +tr.setInput('teamId', 'testDevTeamId'); +tr.setInput('signingIdentity', ''); +tr.setInput('provisioningProfileUuid', ''); +tr.setInput('args', ''); +tr.setInput('cwd', '/user/build'); +tr.setInput('outputPattern', 'output/$(SDK)/$(Configuration)'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('useXctool', 'false'); +tr.setInput('packageTool', 'xcodebuild'); +tr.setInput('xctoolReporter', ''); +tr.setInput('publishJUnitResults', 'false'); +tr.setInput('archivePath', '/user/build'); +tr.setInput('exportPath', '/user/build'); +tr.setInput('exportOptions', 'specify'); +tr.setInput('exportMethod', 'development'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild", + "security": "/usr/bin/security", + "/usr/libexec/PlistBuddy": "/usr/libexec/PlistBuddy", + "rm": "/bin/rm", + "cp": "/bin/cp" + }, + "checkPath": { + "/home/bin/xcodebuild": true, + "/usr/bin/security": true, + "/usr/libexec/PlistBuddy": true, + "/bin/rm": true, + "/bin/cp": true + }, + "filePathSupplied": { + "archivePath": false + }, + "getVariable": { + "HOME": "/users/test" + }, + "stats": { + "/user/build": { + "isFile": false + } + }, + "findMatch": { + "**/*.xcodeproj/*.xcworkspace": [ + "/user/build/fun.xcodeproj/project.xcworkspace" + ], + "**/*.app": [ + "/user/build/output/$(SDK)/$(Configuration)/build.sym/Release.iphoneos/fun.app" + ], + "**/*.xcarchive": [ + "/user/build/testScheme.xcarchive" + ] + }, + "exec": { + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 8.0" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme build CODE_SIGN_STYLE=Automatic DEVELOPMENT_TEAM=testDevTeamId": { + "code": 0, + "stdout": "xcodebuild output here" + }, + "/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme archive -sdk $(SDK) -configuration $(Configuration) -archivePath /user/build/testScheme CODE_SIGN_STYLE=Automatic DEVELOPMENT_TEAM=testDevTeamId": { + "code": 0, + "stdout": "xcodebuild archive output here" + }, + "/home/bin/xcodebuild -exportArchive -archivePath /user/build/testScheme.xcarchive -exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "xcodebuild export output here" + }, + "/usr/libexec/PlistBuddy -c Clear _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist initialized output here" + }, + "/usr/libexec/PlistBuddy -c Add method string development _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + }, + "/usr/libexec/PlistBuddy -c Print UUID _xcodetasktmp.plist": { + "code": 0, + "stdout": "testuuid" + }, + "/bin/rm -f _xcodetasktmp.plist": { + "code": 0, + "stdout": "delete output here" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/XcodeV5_Node20/Tests/L0Xcode8AutomaticSignWithIdentifiers.ts b/_generated/XcodeV5_Node20/Tests/L0Xcode8AutomaticSignWithIdentifiers.ts new file mode 100644 index 000000000000..da2d275683d9 --- /dev/null +++ b/_generated/XcodeV5_Node20/Tests/L0Xcode8AutomaticSignWithIdentifiers.ts @@ -0,0 +1,102 @@ + +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, '..', 'xcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +tr.setInput('actions', 'build'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('sdk', '$(SDK)'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/*.xcworkspace'); +tr.setInput('scheme', 'testScheme'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('packageApp', 'true'); +tr.setInput('signingOption', 'auto'); +tr.setInput('signingIdentity', 'testSignIdentity'); +tr.setInput('provisioningProfileUuid', 'testUUID'); +tr.setInput('args', ''); +tr.setInput('cwd', '/user/build'); +tr.setInput('outputPattern', 'output/$(SDK)/$(Configuration)'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('useXctool', 'false'); +tr.setInput('packageTool', 'xcodebuild'); +tr.setInput('xctoolReporter', ''); +tr.setInput('publishJUnitResults', 'false'); +tr.setInput('archivePath', '/user/build'); +tr.setInput('exportPath', '/user/build'); +tr.setInput('exportOptions', 'specify'); +tr.setInput('exportMethod', 'development'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild", + "security": "/usr/bin/security", + "/usr/libexec/PlistBuddy": "/usr/libexec/PlistBuddy", + "rm": "/bin/rm", + "cp": "/bin/cp" + }, + "checkPath": { + "/home/bin/xcodebuild": true, + "/usr/bin/security": true, + "/usr/libexec/PlistBuddy": true, + "/bin/rm": true, + "/bin/cp": true + }, + "filePathSupplied": { + "archivePath": false + }, + "getVariable": { + "HOME": "/users/test" + }, + "stats": { + "/user/build": { + "isFile": false + } + }, + "findMatch": { + "**/*.xcodeproj/*.xcworkspace": [ + "/user/build/fun.xcodeproj/project.xcworkspace" + ], + "**/*.app": [ + "/user/build/output/$(SDK)/$(Configuration)/build.sym/Release.iphoneos/fun.app" + ], + "**/*.xcarchive": [ + "/user/build/testScheme.xcarchive" + ] + }, + "exec": { + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 8.0" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme build CODE_SIGN_STYLE=Automatic": { + "code": 0, + "stdout": "xcodebuild output here" + }, + "/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme archive -sdk $(SDK) -configuration $(Configuration) -archivePath /user/build/testScheme CODE_SIGN_STYLE=Automatic": { + "code": 0, + "stdout": "xcodebuild archive output here" + }, + "/home/bin/xcodebuild -exportArchive -archivePath /user/build/testScheme.xcarchive -exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "xcodebuild export output here" + }, + "/usr/libexec/PlistBuddy -c Clear _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist initialized output here" + }, + "/usr/libexec/PlistBuddy -c Add method string development _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/XcodeV5_Node20/Tests/L0Xcode9AutomaticSignWithAllowProvisioningUpdates.ts b/_generated/XcodeV5_Node20/Tests/L0Xcode9AutomaticSignWithAllowProvisioningUpdates.ts new file mode 100644 index 000000000000..8c1c65b37783 --- /dev/null +++ b/_generated/XcodeV5_Node20/Tests/L0Xcode9AutomaticSignWithAllowProvisioningUpdates.ts @@ -0,0 +1,101 @@ + +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, '..', 'xcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +tr.setInput('actions', 'build'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('sdk', '$(SDK)'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/*.xcworkspace'); +tr.setInput('scheme', 'testScheme'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('packageApp', 'true'); +tr.setInput('signingOption', 'auto'); +tr.setInput('args', ''); +tr.setInput('cwd', '/user/build'); +tr.setInput('outputPattern', 'output/$(SDK)/$(Configuration)'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('args', '-allowProvisioningUpdates'); +tr.setInput('packageTool', 'xcodebuild'); +tr.setInput('xctoolReporter', ''); +tr.setInput('publishJUnitResults', 'false'); +tr.setInput('archivePath', '/user/build'); +tr.setInput('exportPath', '/user/build'); +tr.setInput('exportOptions', 'specify'); +tr.setInput('exportMethod', 'development'); +tr.setInput('exportArgs', '-allowProvisioningUpdates'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild", + "security": "/usr/bin/security", + "/usr/libexec/PlistBuddy": "/usr/libexec/PlistBuddy", + "rm": "/bin/rm", + "cp": "/bin/cp" + }, + "checkPath": { + "/home/bin/xcodebuild": true, + "/usr/bin/security": true, + "/usr/libexec/PlistBuddy": true, + "/bin/rm": true, + "/bin/cp": true + }, + "filePathSupplied": { + "archivePath": false + }, + "getVariable": { + "HOME": "/users/test" + }, + "stats": { + "/user/build": { + "isFile": false + } + }, + "findMatch": { + "**/*.xcodeproj/*.xcworkspace": [ + "/user/build/fun.xcodeproj/project.xcworkspace" + ], + "**/*.app": [ + "/user/build/output/$(SDK)/$(Configuration)/build.sym/Release.iphoneos/fun.app" + ], + "**/*.xcarchive": [ + "/user/build/testScheme.xcarchive" + ] + }, + "exec": { + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 9.0" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme build -allowProvisioningUpdates CODE_SIGN_STYLE=Automatic": { + "code": 0, + "stdout": "xcodebuild output here" + }, + "/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme archive -sdk $(SDK) -configuration $(Configuration) -archivePath /user/build/testScheme CODE_SIGN_STYLE=Automatic -allowProvisioningUpdates": { + "code": 0, + "stdout": "xcodebuild archive output here" + }, + "/home/bin/xcodebuild -exportArchive -archivePath /user/build/testScheme.xcarchive -exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist -allowProvisioningUpdates": { + "code": 0, + "stdout": "xcodebuild export output here" + }, + "/usr/libexec/PlistBuddy -c Clear _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist initialized output here" + }, + "/usr/libexec/PlistBuddy -c Add method string development _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/XcodeV5_Node20/Tests/L0Xcode9AutomaticSignWithFiles.ts b/_generated/XcodeV5_Node20/Tests/L0Xcode9AutomaticSignWithFiles.ts new file mode 100644 index 000000000000..29cba73b8530 --- /dev/null +++ b/_generated/XcodeV5_Node20/Tests/L0Xcode9AutomaticSignWithFiles.ts @@ -0,0 +1,110 @@ + +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, '..', 'xcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +tr.setInput('actions', 'build'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('sdk', '$(SDK)'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/*.xcworkspace'); +tr.setInput('scheme', 'testScheme'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('packageApp', 'true'); +tr.setInput('signingOption', 'auto'); +tr.setInput('signingIdentity', ''); +tr.setInput('provisioningProfileUuid', ''); +tr.setInput('args', ''); +tr.setInput('cwd', '/user/build'); +tr.setInput('outputPattern', 'output/$(SDK)/$(Configuration)'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('useXctool', 'false'); +tr.setInput('packageTool', 'xcodebuild'); +tr.setInput('xctoolReporter', ''); +tr.setInput('publishJUnitResults', 'false'); +tr.setInput('archivePath', '/user/build'); +tr.setInput('exportPath', '/user/build'); +tr.setInput('exportOptions', 'specify'); +tr.setInput('exportMethod', 'development'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild", + "security": "/usr/bin/security", + "/usr/libexec/PlistBuddy": "/usr/libexec/PlistBuddy", + "rm": "/bin/rm", + "cp": "/bin/cp" + }, + "checkPath": { + "/home/bin/xcodebuild": true, + "/usr/bin/security": true, + "/usr/libexec/PlistBuddy": true, + "/bin/rm": true, + "/bin/cp": true + }, + "filePathSupplied": { + "archivePath": false + }, + "getVariable": { + "HOME": "/users/test" + }, + "stats": { + "/user/build": { + "isFile": false + } + }, + "findMatch": { + "**/*.xcodeproj/*.xcworkspace": [ + "/user/build/fun.xcodeproj/project.xcworkspace" + ], + "**/*.app": [ + "/user/build/output/$(SDK)/$(Configuration)/build.sym/Release.iphoneos/fun.app" + ], + "**/*.xcarchive": [ + "/user/build/testScheme.xcarchive" + ] + }, + "exec": { + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 9.0" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme build CODE_SIGN_STYLE=Automatic": { + "code": 0, + "stdout": "xcodebuild output here" + }, + "/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme archive -sdk $(SDK) -configuration $(Configuration) -archivePath /user/build/testScheme CODE_SIGN_STYLE=Automatic": { + "code": 0, + "stdout": "xcodebuild archive output here" + }, + "/home/bin/xcodebuild -exportArchive -archivePath /user/build/testScheme.xcarchive -exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "xcodebuild export output here" + }, + "/usr/libexec/PlistBuddy -c Clear _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist initialized output here" + }, + "/usr/libexec/PlistBuddy -c Add method string development _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + }, + "/usr/libexec/PlistBuddy -c Print UUID _xcodetasktmp.plist": { + "code": 0, + "stdout": "testuuid" + }, + "/bin/rm -f _xcodetasktmp.plist": { + "code": 0, + "stdout": "delete output here" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/XcodeV5_Node20/Tests/L0Xcode9ExportArchiveWithAutoAndCloudEntitlementForDevelopment.ts b/_generated/XcodeV5_Node20/Tests/L0Xcode9ExportArchiveWithAutoAndCloudEntitlementForDevelopment.ts new file mode 100644 index 000000000000..cf54161390d5 --- /dev/null +++ b/_generated/XcodeV5_Node20/Tests/L0Xcode9ExportArchiveWithAutoAndCloudEntitlementForDevelopment.ts @@ -0,0 +1,182 @@ + +import ma = require('azure-pipelines-task-lib/mock-answer'); +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import path = require('path'); +import fs = require('fs'); + +const taskPath = path.join(__dirname, '..', 'xcode.js'); +const tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +tr.registerMock('fs', { + ...fs, + createReadStream: function (path) { + if (path === '/user/build/fun.xcodeproj/project.pbxproj') { + return undefined; + } + throw "createReadStream mocking: path not expected"; + }, + statSync: fs.statSync, + readFileSync: fs.readFileSync, + writeFileSync: function (filePath, contents) { + }, +}); + +tr.registerMock('readline', { + createInterface: function () { + return { + on: function (event, cb) { + if (event === 'line') { + cb("Foo"); + cb(" ProvisioningStyle = Manual;"); + cb("Bar"); + cb(" ProvisioningStyle = Automatic;"); // First line wins. This should be ignored. + cb("Baz"); + } + } + }; + } +}); + +tr.setInput('actions', 'build'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('sdk', '$(SDK)'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/*.xcworkspace'); +tr.setInput('scheme', 'testScheme'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('packageApp', 'true'); +tr.setInput('signingOption', 'default'); +tr.setInput('signingIdentity', ''); +tr.setInput('provisioningProfileUuid', ''); +tr.setInput('args', ''); +tr.setInput('cwd', '/user/build'); +tr.setInput('outputPattern', 'output/$(SDK)/$(Configuration)'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('useXctool', 'false'); +tr.setInput('packageTool', 'xcodebuild'); +tr.setInput('xctoolReporter', ''); +tr.setInput('publishJUnitResults', 'false'); +tr.setInput('archivePath', '/user/build'); +tr.setInput('exportPath', '/user/build'); +tr.setInput('exportOptions', 'auto'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild", + "security": "/usr/bin/security", + "/usr/libexec/PlistBuddy": "/usr/libexec/PlistBuddy", + "rm": "/bin/rm" + }, + "checkPath": { + "/home/bin/xcodebuild": true, + "/usr/bin/security": true, + "/usr/libexec/PlistBuddy": true, + "/bin/rm": true, + }, + "filePathSupplied": { + "archivePath": false + }, + "getVariable": { + "build.sourcesDirectory": "/user/build", + "HOME": "/users/test" + }, + "stats": { + "/user/build": { + "isFile": false + }, + "/user/build/fun.xcodeproj/project.pbxproj": { + "isFile": true + } + }, + "findMatch": { + "**/*.xcodeproj/*.xcworkspace": [ + "/user/build/fun.xcodeproj/project.xcworkspace" + ], + "**/*.app": [ + "/user/build/output/$(SDK)/$(Configuration)/build.sym/Release.iphoneos/fun.app" + ], + "**/*.xcarchive": [ + "/user/build/testScheme.xcarchive" + ], + "**/embedded.mobileprovision": [ + "/user/build/testScheme.xcarchive/Products/testScheme.app/embedded.mobileprovision" + ] + }, + "exec": { + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 9.0" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme build": { + "code": 0, + "stdout": "xcodebuild output here" + }, + "/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme archive -sdk $(SDK) -configuration $(Configuration) -archivePath /user/build/testScheme": { + "code": 0, + "stdout": "xcodebuild archive output here" + }, + "/home/bin/xcodebuild -exportArchive -archivePath /user/build/testScheme.xcarchive -exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "xcodebuild export output here" + }, + "/usr/libexec/PlistBuddy -c Clear _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist initialized output here" + }, + "/usr/libexec/PlistBuddy -c Add method string development _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + }, + "/usr/bin/security cms -D -i /user/build/testScheme.xcarchive/Products/testScheme.app/embedded.mobileprovision": { + "code": 0, + "stdout": "prov profile details here" + }, + "/usr/libexec/PlistBuddy -c Print ProvisionsAllDevices _xcodetasktmp.plist": { + "code": 1, + "stdout": "ProvisionsAllDevices not found" + }, + "/usr/libexec/PlistBuddy -c Print Entitlements:get-task-allow _xcodetasktmp.plist": { + "code": 0, + "stdout": "true" + }, + "/usr/libexec/PlistBuddy -c Print Entitlements:com.apple.developer.icloud-container-environment _xcodetasktmp.plist": { + "code": 0, + "stdout": "Array { Development, Production}" + }, + "/bin/rm -f _xcodetasktmp.plist": { + "code": 0, + "stdout": "delete output here" + }, + "/usr/libexec/PlistBuddy -c Add signingStyle string manual _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + }, + "/usr/libexec/PlistBuddy -c Add provisioningProfiles dict _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + }, + "/usr/libexec/PlistBuddy -c Print CFBundleIdentifier /user/build/testScheme.xcarchive/Products/testScheme.app/Info.plist": { + "code": 0, + "stdout": "com.vsts.test.myApp" + }, + "/usr/libexec/PlistBuddy -c Print Name _xcodetasktmp.plist": { + "code": 0, + "stdout": "Bob" + }, + "/usr/libexec/PlistBuddy -c Add provisioningProfiles:com.vsts.test.myApp string Bob _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + }, + "/usr/libexec/PlistBuddy -c Add iCloudContainerEnvironment string Development _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + } + } +}; +tr.setAnswers(a); + +tr.run(); + + diff --git a/_generated/XcodeV5_Node20/Tests/L0Xcode9ExportArchiveWithAutoAndCloudEntitlementForProduction.ts b/_generated/XcodeV5_Node20/Tests/L0Xcode9ExportArchiveWithAutoAndCloudEntitlementForProduction.ts new file mode 100644 index 000000000000..56a1c6070293 --- /dev/null +++ b/_generated/XcodeV5_Node20/Tests/L0Xcode9ExportArchiveWithAutoAndCloudEntitlementForProduction.ts @@ -0,0 +1,186 @@ + +import ma = require('azure-pipelines-task-lib/mock-answer'); +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import path = require('path'); +import fs = require('fs'); + +const taskPath = path.join(__dirname, '..', 'xcode.js'); +const tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +tr.registerMock('fs', { + ...fs, + createReadStream: function (path) { + if (path === '/user/build/fun.xcodeproj/project.pbxproj') { + return undefined; + } + throw "createReadStream mocking: path not expected"; + }, + statSync: fs.statSync, + readFileSync: fs.readFileSync, + writeFileSync: function (filePath, contents) { + }, +}); + +tr.registerMock('readline', { + createInterface: function () { + return { + on: function (event, cb) { + if (event === 'line') { + cb("Foo"); + cb(" ProvisioningStyle = Manual;"); + cb("Bar"); + cb(" ProvisioningStyle = Automatic;"); // First line wins. This should be ignored. + cb("Baz"); + } + } + }; + } +}); + +tr.setInput('actions', 'build'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('sdk', '$(SDK)'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/*.xcworkspace'); +tr.setInput('scheme', 'testScheme'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('packageApp', 'true'); +tr.setInput('signingOption', 'default'); +tr.setInput('signingIdentity', ''); +tr.setInput('provisioningProfileUuid', ''); +tr.setInput('args', ''); +tr.setInput('cwd', '/user/build'); +tr.setInput('outputPattern', 'output/$(SDK)/$(Configuration)'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('useXctool', 'false'); +tr.setInput('packageTool', 'xcodebuild'); +tr.setInput('xctoolReporter', ''); +tr.setInput('publishJUnitResults', 'false'); +tr.setInput('archivePath', '/user/build'); +tr.setInput('exportPath', '/user/build'); +tr.setInput('exportOptions', 'auto'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild", + "security": "/usr/bin/security", + "/usr/libexec/PlistBuddy": "/usr/libexec/PlistBuddy", + "rm": "/bin/rm" + }, + "checkPath": { + "/home/bin/xcodebuild": true, + "/usr/bin/security": true, + "/usr/libexec/PlistBuddy": true, + "/bin/rm": true, + }, + "filePathSupplied": { + "archivePath": false + }, + "getVariable": { + "build.sourcesDirectory": "/user/build", + "HOME": "/users/test" + }, + "stats": { + "/user/build": { + "isFile": false + }, + "/user/build/fun.xcodeproj/project.pbxproj": { + "isFile": true + } + }, + "findMatch": { + "**/*.xcodeproj/*.xcworkspace": [ + "/user/build/fun.xcodeproj/project.xcworkspace" + ], + "**/*.app": [ + "/user/build/output/$(SDK)/$(Configuration)/build.sym/Release.iphoneos/fun.app" + ], + "**/*.xcarchive": [ + "/user/build/testScheme.xcarchive" + ], + "**/embedded.mobileprovision": [ + "/user/build/testScheme.xcarchive/Products/testScheme.app/embedded.mobileprovision" + ] + }, + "exec": { + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 9.0" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme build": { + "code": 0, + "stdout": "xcodebuild output here" + }, + "/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme testScheme archive -sdk $(SDK) -configuration $(Configuration) -archivePath /user/build/testScheme": { + "code": 0, + "stdout": "xcodebuild archive output here" + }, + "/home/bin/xcodebuild -exportArchive -archivePath /user/build/testScheme.xcarchive -exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "xcodebuild export output here" + }, + "/usr/libexec/PlistBuddy -c Clear _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist initialized output here" + }, + "/usr/libexec/PlistBuddy -c Add method string app-store _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + }, + "/usr/bin/security cms -D -i /user/build/testScheme.xcarchive/Products/testScheme.app/embedded.mobileprovision": { + "code": 0, + "stdout": "prov profile details here" + }, + "/usr/libexec/PlistBuddy -c Print ProvisionsAllDevices _xcodetasktmp.plist": { + "code": 1, + "stdout": "ProvisionsAllDevices not found" + }, + "/usr/libexec/PlistBuddy -c Print Entitlements:get-task-allow _xcodetasktmp.plist": { + "code": 0, + "stdout": "false" + }, + "/usr/libexec/PlistBuddy -c Print ProvisionedDevices _xcodetasktmp.plist": { + "code": 1, + "stdout": "ProvisionedDevices not found" + }, + "/usr/libexec/PlistBuddy -c Print Entitlements:com.apple.developer.icloud-container-environment _xcodetasktmp.plist": { + "code": 0, + "stdout": "Array { Development, Production}" + }, + "/bin/rm -f _xcodetasktmp.plist": { + "code": 0, + "stdout": "delete output here" + }, + "/usr/libexec/PlistBuddy -c Add signingStyle string manual _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + }, + "/usr/libexec/PlistBuddy -c Add provisioningProfiles dict _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + }, + "/usr/libexec/PlistBuddy -c Print CFBundleIdentifier /user/build/testScheme.xcarchive/Products/testScheme.app/Info.plist": { + "code": 0, + "stdout": "com.vsts.test.myApp" + }, + "/usr/libexec/PlistBuddy -c Print Name _xcodetasktmp.plist": { + "code": 0, + "stdout": "Bob" + }, + "/usr/libexec/PlistBuddy -c Add provisioningProfiles:com.vsts.test.myApp string Bob _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + }, + "/usr/libexec/PlistBuddy -c Add iCloudContainerEnvironment string Production _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + } + } +}; +tr.setAnswers(a); + +tr.run(); + + diff --git a/_generated/XcodeV5_Node20/Tests/L0XcodeArchiveExportProject.ts b/_generated/XcodeV5_Node20/Tests/L0XcodeArchiveExportProject.ts new file mode 100644 index 000000000000..99024258a275 --- /dev/null +++ b/_generated/XcodeV5_Node20/Tests/L0XcodeArchiveExportProject.ts @@ -0,0 +1,111 @@ + +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, '..', 'xcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +tr.setInput('actions', 'build'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('sdk', '$(SDK)'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj'); +tr.setInput('scheme', 'testScheme'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('packageApp', 'true'); +tr.setInput('teamId', 'testDevTeamId'); +tr.setInput('signingOption', 'auto'); +tr.setInput('signingIdentity', ''); +tr.setInput('provisioningProfileUuid', ''); +tr.setInput('args', ''); +tr.setInput('cwd', '/user/build'); +tr.setInput('outputPattern', 'output/$(SDK)/$(Configuration)'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('useXctool', 'false'); +tr.setInput('packageTool', 'xcodebuild'); +tr.setInput('xctoolReporter', ''); +tr.setInput('publishJUnitResults', 'false'); +tr.setInput('archivePath', '/user/build'); +tr.setInput('exportPath', '/user/build'); +tr.setInput('exportOptions', 'specify'); +tr.setInput('exportMethod', 'development'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild", + "security": "/usr/bin/security", + "/usr/libexec/PlistBuddy": "/usr/libexec/PlistBuddy", + "rm": "/bin/rm", + "cp": "/bin/cp" + }, + "checkPath": { + "/home/bin/xcodebuild": true, + "/usr/bin/security": true, + "/usr/libexec/PlistBuddy": true, + "/bin/rm": true, + "/bin/cp": true + }, + "filePathSupplied": { + "archivePath": false + }, + "getVariable": { + "HOME": "/users/test" + }, + "stats": { + "/user/build": { + "isFile": false + } + }, + "findMatch": { + "**/*.xcodeproj": [ + "/user/build/fun.xcodeproj" + ], + "**/*.app": [ + "/user/build/output/$(SDK)/$(Configuration)/build.sym/Release.iphoneos/fun.app" + ], + "**/*.xcarchive": [ + "/user/build/testScheme.xcarchive" + ] + }, + "exec": { + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 8.0" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -project /user/build/fun.xcodeproj -scheme testScheme build CODE_SIGN_STYLE=Automatic DEVELOPMENT_TEAM=testDevTeamId": { + "code": 0, + "stdout": "xcodebuild output here" + }, + "/home/bin/xcodebuild -project /user/build/fun.xcodeproj -scheme testScheme archive -sdk $(SDK) -configuration $(Configuration) -archivePath /user/build/testScheme CODE_SIGN_STYLE=Automatic DEVELOPMENT_TEAM=testDevTeamId": { + "code": 0, + "stdout": "xcodebuild archive output here" + }, + "/home/bin/xcodebuild -exportArchive -archivePath /user/build/testScheme.xcarchive -exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "xcodebuild export output here" + }, + "/usr/libexec/PlistBuddy -c Clear _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist initialized output here" + }, + "/usr/libexec/PlistBuddy -c Add method string development _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + }, + "/usr/libexec/PlistBuddy -c Print UUID _xcodetasktmp.plist": { + "code": 0, + "stdout": "testuuid" + }, + "/bin/rm -f _xcodetasktmp.plist": { + "code": 0, + "stdout": "delete output here" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/XcodeV5_Node20/Tests/L0XcodeDefaults.ts b/_generated/XcodeV5_Node20/Tests/L0XcodeDefaults.ts new file mode 100644 index 000000000000..6bdfd2a118eb --- /dev/null +++ b/_generated/XcodeV5_Node20/Tests/L0XcodeDefaults.ts @@ -0,0 +1,61 @@ + +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, '..', 'xcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +// Xcode task defaults used for version 5 +tr.setInput('actions', 'build'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('sdk', '$(SDK)'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/*.xcworkspace'); +tr.setInput('scheme', 'myscheme'); +tr.setInput('packageApp', 'false'); +tr.setInput('signingOption', 'default'); +tr.setInput('signingIdentity', ''); +tr.setInput('provisioningProfileUuid', ''); +tr.setInput('args', ''); +tr.setInput('cwd', '/user/build'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('publishJUnitResults', 'false'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild" + }, + "checkPath" : { + "/home/bin/xcodebuild": true + }, + "getVariable": { + "build.sourcesDirectory": "/user/build", + "HOME": "/users/test" + }, + "findMatch": { + "**/*.xcodeproj/*.xcworkspace": [ + "/user/build/fun.xcodeproj/project.xcworkspace" + ], + "**/*.app": [ + "/user/build/output/$(SDK)/$(Configuration)/build.sym/Release.iphoneos/fun.app" + ] + }, + "exec": { + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 7.2.1" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme myscheme build": { + "code": 0, + "stdout": "xcodebuild output here" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/XcodeV5_Node20/Tests/L0XcodeNoWorkspace.ts b/_generated/XcodeV5_Node20/Tests/L0XcodeNoWorkspace.ts new file mode 100644 index 000000000000..6d5f87ee33a3 --- /dev/null +++ b/_generated/XcodeV5_Node20/Tests/L0XcodeNoWorkspace.ts @@ -0,0 +1,60 @@ + +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, '..', 'xcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tr.setInput('actions', 'build'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('sdk', '$(SDK)'); +tr.setInput('xcWorkspacePath', '/user/build'); +tr.setInput('scheme', ''); +tr.setInput('packageApp', 'false'); +tr.setInput('signingOption', 'default'); +tr.setInput('signingIdentity', ''); +tr.setInput('provisioningProfileUuid', ''); +tr.setInput('args', '-project test.xcodeproj'); +tr.setInput('cwd', '/user/build'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('publishJUnitResults', 'false'); + +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support +process.env['AGENT_VERSION'] = '2.122.0'; +process.env['BUILD_SOURCESDIRECTORY'] = '/user/build'; + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild" + }, + "checkPath" : { + "/home/bin/xcodebuild": true + }, + "getVariable": { + "build.sourcesDirectory": "/user/build", + "HOME": "/users/test", + "agent.version": "2.122.0" + }, + "findMatch": { + "/user/build": [ + "/user/build/output/$(SDK)/$(Configuration)/build.sym/Release.iphoneos/fun.app" + ] + }, + "exec": { + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 6.4" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) build -project test.xcodeproj": { + "code": 0, + "stdout": "xcodebuild output here" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/XcodeV5_Node20/Tests/L0Xcpretty.ts b/_generated/XcodeV5_Node20/Tests/L0Xcpretty.ts new file mode 100644 index 000000000000..b8f13483c9c9 --- /dev/null +++ b/_generated/XcodeV5_Node20/Tests/L0Xcpretty.ts @@ -0,0 +1,82 @@ + +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, '..', 'xcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +tr.setInput('actions', 'test'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('sdk', '$(SDK)'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/*.xcworkspace'); +tr.setInput('scheme', 'myscheme'); +tr.setInput('packageApp', 'false'); +tr.setInput('signingOption', 'default'); +tr.setInput('signingIdentity', ''); +tr.setInput('provisioningProfileUuid', ''); +tr.setInput('args', ''); +tr.setInput('cwd', '/user/build'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('useXcpretty', 'true'); +tr.setInput('publishJUnitResults', 'true'); + +tr.registerMock('./xcodeutils', { + getUniqueLogFileName: function (logPrefix: string) { + return '/build/temp' + logPrefix + '.log'; + }, + emitTelemetry: function(area: string, feature: string, taskSpecificTelemetry: { [key: string]: any; }) { + console.log('Xcode task telemetry'); + }, + setTaskState: function(variableName: string, variableValue: string) { + console.log('Xcode set task state ' + variableName + ' = ' + variableValue); + } +}); + +process.env['AGENT_VERSION'] = '2.122.0'; +process.env['BUILD_SOURCESDIRECTORY'] = '/user/build'; +process.env['SYSTEM_DEFAULTWORKINGDIRECTORY'] = "/user/build"; +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild", + "xcpretty": "/home/bin/xcpretty" + }, + "checkPath" : { + "/home/bin/xcodebuild": true, + "/home/bin/xcpretty": true + }, + "findMatch": { + "**/*.xcodeproj/*.xcworkspace": [ + "/user/build/fun.xcodeproj/project.xcworkspace" + ], + "/user/build": [ + "/user/build/build/reports/junit.xml" + ] + }, + "getVariable": { + "build.sourcesDirectory": "/user/build", + "HOME": "/users/test" + }, + "exec": { + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 7.3.1" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme myscheme test | /home/bin/xcpretty -r junit --no-color": { + "code": 0, + "stdout": "xcodebuild | xcpretty output here" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme myscheme test": { + "code": 0, + "stdout": "xcodebuild output without xcpretty here" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/XcodeV5_Node20/Tests/L0macOSAutoExport.ts b/_generated/XcodeV5_Node20/Tests/L0macOSAutoExport.ts new file mode 100644 index 000000000000..427f776102c7 --- /dev/null +++ b/_generated/XcodeV5_Node20/Tests/L0macOSAutoExport.ts @@ -0,0 +1,178 @@ + +import ma = require('azure-pipelines-task-lib/mock-answer'); +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import path = require('path'); +import fs = require('fs'); + +let taskPath = path.join(__dirname, '..', 'xcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +tr.registerMock('fs', { + ...fs, + createReadStream: function (path) { + if (path === '/user/build/fun.xcodeproj/project.pbxproj') { + return undefined; + } + throw "createReadStream mocking: path not expected"; + }, + statSync: fs.statSync, + readFileSync: fs.readFileSync, + writeFileSync: function (filePath, contents) { + }, +}); + +tr.registerMock('readline', { + createInterface: function () { + return { + on: function(event, cb) { + if (event === 'line') { + cb("Foo"); + cb(" ProvisioningStyle = Manual;"); + cb("Bar"); + cb(" ProvisioningStyle = Automatic;"); // First line wins. This should be ignored. + cb("Baz"); + } + } + }; + } +}); + +tr.setInput('actions', 'build'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('sdk', '$(SDK)'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/project.xcworkspace'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('packageApp', 'true'); +tr.setInput('archivePath', '/user/build'); +tr.setInput('exportPath', '/user/build'); +tr.setInput('exportOptions', 'auto'); +tr.setInput('exportOptionsPlist', ''); +tr.setInput('exportArgs', ''); +tr.setInput('signingOption', 'default'); +tr.setInput('cwd', '/user/build'); +tr.setInput('destinationPlatformOption', 'default'); +tr.setInput('outputPattern', ''); +tr.setInput('useXcpretty', 'false'); +tr.setInput('publishJUnitResults', 'false'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild", + "security": "/usr/bin/security", + "/usr/libexec/PlistBuddy": "/usr/libexec/PlistBuddy", + "rm": "/bin/rm" + }, + "checkPath": { + "/home/bin/xcodebuild": true, + "/usr/bin/security": true, + "/usr/libexec/PlistBuddy": true, + "/bin/rm": true, + }, + "filePathSupplied": { + "archivePath": false + }, + "getVariable": { + "HOME": "/users/test" + }, + "stats": { + "/user/build": { + "isFile": false + }, + "/user/build/fun.xcodeproj/project.pbxproj": { + "isFile": true + } + }, + "findMatch": { + "**/*.xcodeproj/project.xcworkspace": [ + "/user/build/fun.xcodeproj/project.xcworkspace" + ], + "**/*.app": [ + "/user/build/output/$(SDK)/$(Configuration)/build.sym/Release.iphoneos/fun.app" + ], + "**/*.xcarchive": [ + "/user/build/testScheme.xcarchive" + ], + "**/embedded.mobileprovision": [], + "**/embedded.provisionprofile": [ + "/user/build/testScheme.xcarchive/Products/testScheme.app/embedded.provisionprofile" + ] + }, + "exec": { + "/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -list": { + "code": 0, + "stdout": 'Information about workspace "Fun":\n Schemes:\n funScheme\n\n' + }, + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 9.2" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme funScheme build": { + "code": 0, + "stdout": "xcodebuild output here" + }, + "/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme funScheme archive -sdk $(SDK) -configuration $(Configuration) -archivePath /user/build/funScheme": { + "code": 0, + "stdout": "xcodebuild archive output here" + }, + "/home/bin/xcodebuild -exportArchive -archivePath /user/build/testScheme.xcarchive -exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "xcodebuild export output here" + }, + "/usr/libexec/PlistBuddy -c Clear _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist initialized output here" + }, + "/usr/libexec/PlistBuddy -c Add method string developer-id _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + }, + "/usr/bin/security cms -D -i /user/build/testScheme.xcarchive/Products/testScheme.app/embedded.provisionprofile": { + "code": 0, + "stdout": "prov profile details here" + }, + "/usr/libexec/PlistBuddy -c Print ProvisionsAllDevices _xcodetasktmp.plist": { + "code": 0, + "stdout": "true" + }, + "/usr/libexec/PlistBuddy -c Print Entitlements:com.apple.developer.icloud-container-environment _xcodetasktmp.plist": { + "code": 0, + "stdout": "Array { Development, Production}" + }, + "/usr/libexec/PlistBuddy -c Add iCloudContainerEnvironment string Production _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + }, + "/usr/libexec/PlistBuddy -c Print Name _xcodetasktmp.plist": { + "code": 0, + "stdout": "Bob" + }, + "/usr/libexec/PlistBuddy -c Print CFBundleIdentifier /user/build/testScheme.xcarchive/Products/testScheme.app/Info.plist": { + "code": 0, + "stdout": "com.vsts.test.myApp" + }, + "/usr/libexec/PlistBuddy -c Add signingStyle string manual _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + }, + "/usr/libexec/PlistBuddy -c Add provisioningProfiles dict _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + }, + "/usr/libexec/PlistBuddy -c Add provisioningProfiles:com.vsts.test.myApp string Bob _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist add output here" + }, + "/bin/rm -f _xcodetasktmp.plist": { + "code": 0, + "stdout": "delete output here" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/XcodeV5_Node20/Tests/L0macOSProvisionlessAutoExport.ts b/_generated/XcodeV5_Node20/Tests/L0macOSProvisionlessAutoExport.ts new file mode 100644 index 000000000000..6296f9057b86 --- /dev/null +++ b/_generated/XcodeV5_Node20/Tests/L0macOSProvisionlessAutoExport.ts @@ -0,0 +1,136 @@ + +import ma = require('azure-pipelines-task-lib/mock-answer'); +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import path = require('path'); +import fs = require('fs'); + +let taskPath = path.join(__dirname, '..', 'xcode.js'); +let tr: tmrm.TaskMockRunner = new tmrm.TaskMockRunner(taskPath); + +process.env['HOME'] = '/users/test'; //replace with mock of setVariable when task-lib has the support + +tr.registerMock('fs', { + ...fs, + createReadStream: function (path) { + if (path === '/user/build/fun.xcodeproj/project.pbxproj') { + return undefined; + } + throw "createReadStream mocking: path not expected"; + }, + statSync: fs.statSync, + readFileSync: fs.readFileSync, + writeFileSync: function (filePath, contents) { + }, +}); + +tr.registerMock('readline', { + createInterface: function () { + return { + on: function(event, cb) { + if (event === 'line') { + cb("Foo"); + cb(" ProvisioningStyle = Automatic;"); // First line wins. This should be ignored. + cb("Bar"); + } + } + }; + } +}); + +tr.setInput('actions', 'build'); +tr.setInput('configuration', '$(Configuration)'); +tr.setInput('sdk', '$(SDK)'); +tr.setInput('xcWorkspacePath', '**/*.xcodeproj/project.xcworkspace'); +tr.setInput('xcodeVersion', 'default'); +tr.setInput('xcodeDeveloperDir', ''); +tr.setInput('packageApp', 'true'); +tr.setInput('archivePath', '/user/build'); +tr.setInput('exportPath', '/user/build'); +tr.setInput('exportOptions', 'auto'); +tr.setInput('exportOptionsPlist', ''); +tr.setInput('exportArgs', ''); +tr.setInput('signingOption', 'default'); +tr.setInput('cwd', '/user/build'); +tr.setInput('destinationPlatformOption', 'default'); +tr.setInput('outputPattern', ''); +tr.setInput('useXcpretty', 'false'); +tr.setInput('publishJUnitResults', 'false'); + +// provide answers for task mock +let a: ma.TaskLibAnswers = { + "which": { + "xcodebuild": "/home/bin/xcodebuild", + "security": "/usr/bin/security", + "/usr/libexec/PlistBuddy": "/usr/libexec/PlistBuddy", + "rm": "/bin/rm" + }, + "checkPath": { + "/home/bin/xcodebuild": true, + "/usr/bin/security": true, + "/usr/libexec/PlistBuddy": true, + "/bin/rm": true, + }, + "filePathSupplied": { + "archivePath": false + }, + "getVariable": { + "HOME": "/users/test" + }, + "stats": { + "/user/build": { + "isFile": false + }, + "/user/build/fun.xcodeproj/project.pbxproj": { + "isFile": true + } + }, + "findMatch": { + "**/*.xcodeproj/project.xcworkspace": [ + "/user/build/fun.xcodeproj/project.xcworkspace" + ], + "**/*.app": [ + "/user/build/output/$(SDK)/$(Configuration)/build.sym/Release.iphoneos/fun.app" + ], + "**/*.xcarchive": [ + "/user/build/testScheme.xcarchive" + ], + "**/embedded.mobileprovision": [], + "**/embedded.provisionprofile": [ + // An automatic signed macOS app might not have an embedded provisioning profile + ] + }, + "exec": { + "/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -list": { + "code": 0, + "stdout": 'Information about workspace "Fun":\n Schemes:\n funScheme\n\n' + }, + "/home/bin/xcodebuild -version": { + "code": 0, + "stdout": "Xcode 9.2" + }, + "/home/bin/xcodebuild -sdk $(SDK) -configuration $(Configuration) -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme funScheme build": { + "code": 0, + "stdout": "xcodebuild output here" + }, + "/home/bin/xcodebuild -workspace /user/build/fun.xcodeproj/project.xcworkspace -scheme funScheme archive -sdk $(SDK) -configuration $(Configuration) -archivePath /user/build/funScheme": { + "code": 0, + "stdout": "xcodebuild archive output here" + }, + "/home/bin/xcodebuild -exportArchive -archivePath /user/build/testScheme.xcarchive -exportPath /user/build -exportOptionsPlist _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "xcodebuild export output here" + }, + "/usr/libexec/PlistBuddy -c Clear _XcodeTaskExportOptions.plist": { + "code": 0, + "stdout": "plist initialized output here" + }, + "/bin/rm -f _xcodetasktmp.plist": { + "code": 0, + "stdout": "delete output here" + } + } +}; +tr.setAnswers(a); + +tr.run(); + diff --git a/_generated/XcodeV5_Node20/Tests/package-lock.json b/_generated/XcodeV5_Node20/Tests/package-lock.json new file mode 100644 index 000000000000..8019855cbcc2 --- /dev/null +++ b/_generated/XcodeV5_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/_generated/XcodeV5_Node20/Tests/package.json b/_generated/XcodeV5_Node20/Tests/package.json new file mode 100644 index 000000000000..ad95fd92c3a3 --- /dev/null +++ b/_generated/XcodeV5_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/_generated/XcodeV5_Node20/ThirdPartyNotice.txt b/_generated/XcodeV5_Node20/ThirdPartyNotice.txt new file mode 100644 index 000000000000..2c70f06c9446 --- /dev/null +++ b/_generated/XcodeV5_Node20/ThirdPartyNotice.txt @@ -0,0 +1,322 @@ + +THIRD-PARTY SOFTWARE NOTICES AND INFORMATION +Do Not Translate or Localize + +This Azure DevOps extension (XcodeV5) 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. uuid (git+https://github.com/kelektiv/node-uuid.git) +12. 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 + +%% 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 + +%% 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/XcodeV5_Node20/icon.png b/_generated/XcodeV5_Node20/icon.png new file mode 100644 index 000000000000..5dda42229aad Binary files /dev/null and b/_generated/XcodeV5_Node20/icon.png differ diff --git a/_generated/XcodeV5_Node20/icon.svg b/_generated/XcodeV5_Node20/icon.svg new file mode 100644 index 000000000000..74474e20632b --- /dev/null +++ b/_generated/XcodeV5_Node20/icon.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/_generated/XcodeV5_Node20/make.json b/_generated/XcodeV5_Node20/make.json new file mode 100644 index 000000000000..7e5057afbbed --- /dev/null +++ b/_generated/XcodeV5_Node20/make.json @@ -0,0 +1,13 @@ +{ + "rm": [ + { + "items": [ + "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" + ], + "options": "-Rf" + } + ] +} \ No newline at end of file diff --git a/_generated/XcodeV5_Node20/package-lock.json b/_generated/XcodeV5_Node20/package-lock.json new file mode 100644 index 000000000000..8a3bab64bb0e --- /dev/null +++ b/_generated/XcodeV5_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/_generated/XcodeV5_Node20/package.json b/_generated/XcodeV5_Node20/package.json new file mode 100644 index 000000000000..d5261a273419 --- /dev/null +++ b/_generated/XcodeV5_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/_generated/XcodeV5_Node20/postxcode.ts b/_generated/XcodeV5_Node20/postxcode.ts new file mode 100644 index 000000000000..7acad98b8095 --- /dev/null +++ b/_generated/XcodeV5_Node20/postxcode.ts @@ -0,0 +1,91 @@ +import os = require('os'); +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 utils = require('./xcodeutils'); + +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('XcodeRequiresMac')); + } else { + //-------------------------------------------------------- + // Test publishing - publish even if tests fail + //-------------------------------------------------------- + let testResultsFiles: string; + const publishResults: boolean = tl.getBoolInput('publishJUnitResults', false); + const useXcpretty: boolean = tl.getBoolInput('useXcpretty', false); + const workingDir: string = tl.getPathInput('cwd'); + + if (publishResults) { + if (!useXcpretty) { + throw tl.loc('UseXcprettyForTestPublishing'); + } else if (useXcpretty && !tl.which('xcpretty')) { + throw tl.loc("XcprettyNotInstalled"); + } + else { + // xcpretty is enabled and installed + testResultsFiles = tl.resolve(workingDir, '**/build/reports/junit.xml'); + + if (testResultsFiles && 0 !== testResultsFiles.length) { + //check for pattern in testResultsFiles + let matchingTestResultsFiles: string[]; + if (testResultsFiles.indexOf('*') >= 0) { + tl.debug('Pattern found in testResultsFiles parameter'); + matchingTestResultsFiles = tl.findMatch(workingDir, testResultsFiles, + { allowBrokenSymbolicLinks: false, followSpecifiedSymbolicLink: false, followSymbolicLinks: false }, + { matchBase: true, nocase: true }); + } + else { + tl.debug('No pattern found in testResultsFiles parameter'); + matchingTestResultsFiles = [testResultsFiles]; + } + + if (!matchingTestResultsFiles || matchingTestResultsFiles.length === 0) { + tl.warning(tl.loc('NoTestResultsFound', testResultsFiles)); + } else { + const TESTRUN_SYSTEM = "VSTS - xcode"; + const tp = new tl.TestPublisher("JUnit"); + const testRunTitle: string = tl.getInput('testRunTitle'); + tp.publish(matchingTestResultsFiles, "false", "", "", testRunTitle, "true", TESTRUN_SYSTEM); + } + } + } + } + + //clean up the temporary keychain, so it is not used to search for code signing identity in future builds + const keychainToDelete = utils.getTaskState('XCODE_KEYCHAIN_TO_DELETE') + if (keychainToDelete) { + try { + await sign.deleteKeychain(keychainToDelete); + } catch (err) { + tl.debug('Failed to delete temporary keychain. Error = ' + err); + tl.warning(tl.loc('TempKeychainDeleteFailed', keychainToDelete)); + } + } + + //delete provisioning profile if specified + const profileToDelete = utils.getTaskState('XCODE_PROFILE_TO_DELETE'); + if (profileToDelete) { + try { + await sign.deleteProvisioningProfile(profileToDelete); + } catch (err) { + tl.debug('Failed to delete provisioning profile. Error = ' + err); + tl.warning(tl.loc('ProvProfileDeleteFailed', profileToDelete)); + } + } + + //upload detailed logs from xcodebuild if using xcpretty + utils.uploadLogFile(utils.getTaskState('XCODEBUILD_LOG')); + utils.uploadLogFile(utils.getTaskState('XCODEBUILD_ARCHIVE_LOG')); + utils.uploadLogFile(utils.getTaskState('XCODEBUILD_EXPORT_LOG')); + } + } catch (err) { + tl.warning(err); + } +} + +run(); \ No newline at end of file diff --git a/_generated/XcodeV5_Node20/task.json b/_generated/XcodeV5_Node20/task.json new file mode 100644 index 000000000000..df72b247e868 --- /dev/null +++ b/_generated/XcodeV5_Node20/task.json @@ -0,0 +1,426 @@ +{ + "id": "1E78DC1B-9132-4B18-9C75-0E7ECC634B74", + "name": "Xcode", + "friendlyName": "Xcode", + "description": "Build, test, or archive an Xcode workspace on macOS. Optionally package an app.", + "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/build/xcode", + "helpMarkDown": "[Learn more about this task](https://go.microsoft.com/fwlink/?LinkID=613730) or [see the Xcode documentation](https://developer.apple.com/xcode/)", + "category": "Build", + "visibility": [ + "Build" + ], + "author": "Microsoft Corporation", + "version": { + "Major": 5, + "Minor": 229, + "Patch": 4 + }, + "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": [ + "xcode" + ], + "instanceNameFormat": "Xcode $(actions)", + "groups": [ + { + "name": "sign", + "displayName": "Signing & provisioning", + "isExpanded": true + }, + { + "name": "package", + "displayName": "Package options", + "isExpanded": true + }, + { + "name": "devices", + "displayName": "Devices & simulators", + "isExpanded": true + }, + { + "name": "advanced", + "displayName": "Advanced", + "isExpanded": false + } + ], + "inputs": [ + { + "name": "actions", + "type": "string", + "label": "Actions", + "defaultValue": "build", + "required": true, + "helpMarkDown": "Enter a space-delimited list of actions. Some valid options are `build`, `clean`, `test`, `analyze`, and `archive`. For example,`clean build` will run a clean build." + }, + { + "name": "configuration", + "type": "string", + "label": "Configuration", + "defaultValue": "$(Configuration)", + "required": false, + "helpMarkDown": "Enter the Xcode project or workspace configuration to be built. The default value of this field is the variable `$(Configuration)`. When using a variable, make sure to specify a value (for example, `Release`) on the **Variables** tab." + }, + { + "name": "sdk", + "type": "string", + "label": "SDK", + "defaultValue": "$(SDK)", + "required": false, + "helpMarkDown": "Specify an SDK to use when building the Xcode project or workspace. From the macOS Terminal application, run `xcodebuild -showsdks` to display the valid list of SDKs. The default value of this field is the variable `$(SDK)`. When using a variable, make sure to specify a value (for example, `iphonesimulator`) on the **Variables** tab." + }, + { + "name": "xcWorkspacePath", + "type": "filePath", + "label": "Workspace or project path", + "defaultValue": "**/*.xcodeproj/project.xcworkspace", + "required": false, + "helpMarkDown": "(Optional) Enter a relative path from the root of the repository to the Xcode workspace or project. For example, `MyApp/MyApp.xcworkspace` or `MyApp/MyApp.xcodeproj`. Wildcards can be used ([more information](https://go.microsoft.com/fwlink/?linkid=856077))." + }, + { + "name": "scheme", + "type": "string", + "label": "Scheme", + "required": false, + "helpMarkDown": "(Optional) Enter a scheme name defined in Xcode. It must be a shared scheme, with its Shared checkbox enabled under Managed Schemes in Xcode. If you specify a Workspace or project path above without specifying a scheme, and the workspace has a single shared scheme, it will be automatically used." + }, + { + "name": "xcodeVersion", + "type": "pickList", + "label": "Xcode version", + "required": false, + "helpMarkDown": "Specify the target version of Xcode. Select `Default` to use the default version of Xcode on the agent machine. Selecting a version number (e.g. `Xcode 9`) relies on environment variables being set on the agent machine for the version's location (e.g. `XCODE_9_DEVELOPER_DIR=/Applications/Xcode_9.0.0.app/Contents/Developer`). Select `Specify path` to provide a specific path to the Xcode developer directory.
Note: XCode 12 is installed on macOS-10.15 (or higher)", + "defaultValue": "default", + ".comment": "//If you update the options here, be sure to update the Xcode.json build template as well.", + "options": { + "8": "Xcode 8", + "9": "Xcode 9", + "10": "Xcode 10", + "11": "Xcode 11", + "12": "Xcode 12", + "13": "Xcode 13", + "default": "Default", + "specifyPath": "Specify path" + } + }, + { + "name": "xcodeDeveloperDir", + "type": "string", + "label": "Xcode developer path", + "required": false, + "helpMarkDown": "(Optional) Enter a path to a specific Xcode developer directory (e.g. `/Applications/Xcode_9.0.0.app/Contents/Developer`). This is useful when multiple versions of Xcode are installed on the agent machine.", + "visibleRule": "xcodeVersion == specifyPath" + }, + { + "name": "packageApp", + "type": "boolean", + "label": "Create app package", + "defaultValue": false, + "required": true, + "helpMarkDown": "Indicate whether an IPA app package file should be generated as a part of the build.", + "groupName": "package" + }, + { + "name": "archivePath", + "type": "filePath", + "label": "Archive path", + "defaultValue": "", + "required": false, + "helpMarkDown": "(Optional) Specify a directory where created archives should be placed.", + "groupName": "package", + "visibleRule": "packageApp == true" + }, + { + "name": "exportPath", + "type": "filePath", + "label": "Export path", + "defaultValue": "output/$(SDK)/$(Configuration)", + "required": false, + "helpMarkDown": "(Optional) Specify the destination for the product exported from the archive.", + "groupName": "package", + "visibleRule": "packageApp == true" + }, + { + "name": "exportOptions", + "type": "pickList", + "label": "Export options", + "defaultValue": "auto", + "required": false, + "groupName": "package", + "options": { + "auto": "Automatic", + "plist": "Plist", + "specify": "Specify" + }, + "helpMarkDown": "Select a way of providing options for exporting the archive. When the default value of `Automatic` is selected, the export method is automatically detected from the archive. Select `Plist` to specify a plist file containing export options. Select `Specify` to provide a specific **Export method** and **Team ID**.", + "visibleRule": "packageApp == true" + }, + { + "name": "exportMethod", + "type": "string", + "label": "Export method", + "defaultValue": "development", + "required": true, + "helpMarkDown": "Enter the method that Xcode should use to export the archive. For example: `app-store`, `package`, `ad-hoc`, `enterprise`, or `development`.", + "groupName": "package", + "visibleRule": "exportOptions == specify" + }, + { + "name": "exportTeamId", + "type": "string", + "label": "Team ID", + "defaultValue": "", + "required": false, + "helpMarkDown": "(Optional) Enter the 10-character team ID from the Apple Developer Portal to use during export.", + "groupName": "package", + "visibleRule": "exportOptions == specify" + }, + { + "name": "exportOptionsPlist", + "type": "filePath", + "label": "Export options plist", + "defaultValue": "", + "required": true, + "helpMarkDown": "Enter the path to the plist file that contains options to use during export.", + "groupName": "package", + "visibleRule": "exportOptions == plist" + }, + { + "name": "exportArgs", + "type": "string", + "label": "Export arguments", + "defaultValue": "", + "required": false, + "helpMarkDown": "(Optional) Enter additional command line arguments to be used during export.", + "groupName": "package", + "visibleRule": "packageApp == true" + }, + { + "name": "signingOption", + "type": "pickList", + "label": "Signing style", + "required": false, + "groupName": "sign", + "defaultValue": "nosign", + "helpMarkDown": "Choose the method of signing the build. Select `Do not code sign` to disable signing. Select `Project defaults` to use only the project's signing configuration. Select `Manual signing` to force manual signing and optionally specify a signing identity and provisioning profile. Select `Automatic signing` to force automatic signing and optionally specify a development team ID. If your project requires signing, use the \"Install Apple...\" tasks to install certificates and provisioning profiles prior to the Xcode build.", + "options": { + "nosign": "Do not code sign", + "default": "Project defaults", + "manual": "Manual signing", + "auto": "Automatic signing" + } + }, + { + "name": "signingIdentity", + "type": "string", + "label": "Signing identity", + "required": false, + "helpMarkDown": "(Optional) Enter a signing identity override with which to sign the build. This may require unlocking the default keychain on the agent machine. If no value is entered, the Xcode project's setting will be used.", + "groupName": "sign", + "visibleRule": "signingOption = manual" + }, + { + "name": "provisioningProfileUuid", + "type": "string", + "label": "Provisioning profile UUID", + "required": false, + "helpMarkDown": "(Optional) Enter the UUID of an installed provisioning profile to be used for this build. Use separate build tasks with different schemes or targets to specify separate provisioning profiles by target in a single workspace (iOS, tvOS, watchOS).", + "groupName": "sign", + "visibleRule": "signingOption = manual" + }, + { + "name": "provisioningProfileName", + "type": "string", + "label": "Provisioning profile name", + "required": false, + "helpMarkDown": "(Optional) Enter the name of an installed provisioning profile to be used for this build. If specified, this takes precedence over the provisioning profile UUID. Use separate build tasks with different schemes or targets to specify separate provisioning profiles by target in a single workspace (iOS, tvOS, watchOS).", + "groupName": "sign", + "visibleRule": "signingOption = manual" + }, + { + "name": "teamId", + "type": "string", + "label": "Team ID", + "defaultValue": "", + "required": false, + "helpMarkDown": "(Optional, unless you are a member of multiple development teams.) Specify the 10-character development team ID.", + "groupName": "sign", + "visibleRule": "signingOption = auto" + }, + { + "name": "destinationPlatformOption", + "type": "picklist", + "label": "Destination platform", + "defaultValue": "default", + "required": false, + "helpMarkDown": "Select the destination device's platform to be used for UI testing when the generic build device isn't valid. Choose `Custom` to specify a platform not included in this list. When `Default` is selected, no simulators nor devices will be targeted.", + "groupName": "devices", + "options": { + "default": "Default", + "iOS": "iOS and watchOS", + "tvOS": "tvOS", + "macOS": "macOS", + "custom": "Custom" + } + }, + { + "name": "destinationPlatform", + "type": "string", + "label": "Custom destination platform", + "required": false, + "helpMarkDown": "Enter a destination device's platform to be used for UI testing when the generic build device isn't valid.", + "groupName": "devices", + "visibleRule": "destinationPlatformOption == custom" + }, + { + "name": "destinationTypeOption", + "type": "radio", + "label": "Destination type", + "defaultValue": "simulators", + "required": false, + "helpMarkDown": "Choose the destination type to be used for UI testing. Devices must be connected to the Mac performing the build via a cable or network connection. See Devices and Simulators in Xcode.", + "groupName": "devices", + "visibleRule": "destinationPlatformOption != default && destinationPlatformOption != macOS", + "options": { + "simulators": "Simulator", + "devices": "Connected Device" + } + }, + { + "name": "destinationSimulators", + "label": "Simulator", + "type": "string", + "defaultValue": "", + "required": false, + "groupName": "devices", + "helpMarkDown": "Enter an Xcode simulator name to be used for UI testing. For example, enter `iPhone X` (iOS and watchOS) or `Apple TV 4K` (tvOS). A target OS version is optional and can be specified in the format 'OS=versionNumber', such as `iPhone X,OS=11.1`. A list of simulators installed on the Hosted macOS agent can be [found here](https://go.microsoft.com/fwlink/?linkid=875290).", + "visibleRule": "destinationPlatformOption != default && destinationPlatformOption != macOS && destinationTypeOption == simulators" + }, + { + "name": "destinationDevices", + "label": "Device", + "type": "string", + "defaultValue": "", + "required": false, + "groupName": "devices", + "helpMarkDown": "Enter the name of the device to be used for UI testing, such as `Raisa's iPad`.", + "visibleRule": "destinationPlatformOption != default && destinationPlatformOption != macOS && destinationTypeOption == devices" + }, + { + "name": "args", + "type": "string", + "label": "Arguments", + "required": false, + "helpMarkDown": "(Optional) Enter additional command line arguments with which to build. This is useful for specifying `-target` or `-project` arguments instead of specifying a workspace/project and scheme.", + "groupName": "advanced" + }, + { + "name": "cwd", + "aliases": [ + "workingDirectory" + ], + "type": "filePath", + "label": "Working directory", + "defaultValue": "", + "required": false, + "helpMarkDown": "(Optional) Enter the working directory in which to run the build. If no value is entered, the root of the repository will be used.", + "groupName": "advanced" + }, + { + "name": "useXcpretty", + "type": "boolean", + "label": "Use xcpretty", + "required": false, + "defaultValue": true, + "helpMarkDown": "Specify whether to use xcpretty to format xcodebuild output. Enabling this requires xcpretty to be installed on the agent machine. If xcpretty is not installed, raw xcodebuild output is shown. xcpretty is preinstalled on Azure Pipelines hosted build agents. See [xcpretty](https://github.com/supermarin/xcpretty) on GitHub.", + "groupName": "advanced" + }, + { + "name": "xcprettyArgs", + "type": "string", + "label": "Xcpretty arguments", + "required": false, + "helpMarkDown": "Additional arguments to pass to xcpretty.", + "groupName": "advanced", + "visibleRule": "useXcpretty == true" + }, + { + "name": "publishJUnitResults", + "type": "boolean", + "label": "Publish test results to Azure Pipelines", + "required": false, + "defaultValue": false, + "groupName": "advanced", + "helpMarkDown": "Specify whether to publish JUnit test results to Azure Pipelines. This requires xcpretty to be enabled to generate JUnit test results." + }, + { + "name": "testRunTitle", + "type": "string", + "label": "Test run title", + "required": false, + "groupName": "advanced", + "helpMarkDown": "Title of the test run when publishing JUnit test results to Azure Pipelines.", + "visibleRule": "publishJUnitResults == true" + } + ], + "execution": { + "Node10": { + "target": "xcode.js", + "argumentFormat": "" + }, + "Node16": { + "target": "xcode.js", + "argumentFormat": "" + }, + "Node20": { + "target": "xcode.js", + "argumentFormat": "" + } + }, + "postjobexecution": { + "Node10": { + "target": "postxcode.js", + "argumentFormat": "" + }, + "Node16": { + "target": "postxcode.js", + "argumentFormat": "" + }, + "Node20": { + "target": "postxcode.js", + "argumentFormat": "" + } + }, + "messages": { + "SignIdNotFound": "Failed to find the iOS signing identity. Verify that signing and provisioning information is provided.", + "TempKeychainSetupFailed": "Failed to add the temporary keychain to the keychains search path.", + "ProvProfileDetailsNotFound": "Failed to find details for the provisioning profile: %s", + "ProvProfileUUIDNotFound": "Failed to find the UUID for provisioning profile: %s", + "MultipleWorkspacesFound": "Multiple Xcode workspace matches were found. The first match will be used: %s", + "WorkspaceDoesNotExist": "The Xcode workspace was specified, but it does not exist or is not a directory: %s", + "UseXcprettyForTestPublishing": "Enable `Use xcpretty` to publish test results. For this build, no test results will be published.", + "NoTestResultsFound": "No test result files matching `%s` were found. Publishing JUnit test results will be skipped.", + "XcodeSuccess": "Xcode task execution completed with no errors.", + "TempKeychainDeleteFailed": "Failed to delete the temporary keychain created during the build: `%s`", + "ProvProfileDeleteFailed": "Failed to delete the provisioning profile `%s`.", + "ExportMethodNotIdentified": "Failed to automatically identify the export method to use from the archive file. This might cause errors during the build or produce an invalid package. If export fails, either enable signing (set `Signing Style` to `Project Defaults`), or configure export manually (set `Export options` to `Plist` or `Specify`).", + "ExportOptionsPlistInvalidFilePath": "The `Export options` plist file does not exist at `%s`. Provide the path to a valid plist file.", + "SchemeRequiredForArchive": "The scheme must be specified to generate the package with xcodebuild archive and export.", + "WorkspaceOrProjectRequiredForArchive": "The workspace or project path must be specified to generate the package with xcodebuild archive and export.", + "FailedToGenerateExportOptionsPlist": "Failed to automatically generate an `Export options` plist file to export an IPA. Please specify an `Export options` plist file in `Package options`.", + "LocateXcodeBasedOnVersion": "Locating the developer path for Xcode `%s`", + "FailedToLocateSpecifiedXcode": "Unable to resolve the developer path for Xcode `%s`. Set the `%s` environment variable on the agent machine, or set `Xcode version` to `Default` or `Specify path`.", + "CantDetermineProvisioningStyle": "The provisioning style was not found in a pbxProject file. Automatic signing will be used. If the project uses manual signing, auto-export may fail. As a workaround, `Export options` can be set to `Plist` or `Specify`.", + "MultipleSchemesFound": "The workspace contains multiple schemes. No scheme selected. Use `Scheme` to specify a target scheme.", + "NoSchemeFound": "No shared scheme found in the workspace. Use \"Manage Schemes\" in Xcode to share a scheme.", + "SchemeSelected": "The workspace contains a single shared scheme. '%s' will be used.", + "FailedToFindScheme": "Failed to find a scheme in the workspace. Use `Scheme` to specify a target scheme.", + "OutputDirectoryIgnored": "Output directory for build output (binaries) ignored. Specifying an output directory is incompatible with the '%s' action.", + "NoDestinationPlatformWarning": "UI tests must be run against a simulator or a connected device. In the Xcode task, set `Destination platform` to a value other than `Default`.", + "XcprettyNotInstalled": "xcpretty is not installed on the build server. xcodebuild raw output will be shown. Publishing test results will fail if xcpretty is not installed.", + "XcodeRequiresMac": "Using Xcode requires a macOS agent. Building with Xcode on Linux or Windows is not supported by Apple.", + "UsingDefaultSimulator": "Using default simulator: %s." + }, + "_buildConfigMapping": { + "Default": "5.229.3", + "Node20-225": "5.229.4" + } +} \ No newline at end of file diff --git a/_generated/XcodeV5_Node20/task.loc.json b/_generated/XcodeV5_Node20/task.loc.json new file mode 100644 index 000000000000..c89006ae9cd2 --- /dev/null +++ b/_generated/XcodeV5_Node20/task.loc.json @@ -0,0 +1,426 @@ +{ + "id": "1E78DC1B-9132-4B18-9C75-0E7ECC634B74", + "name": "Xcode", + "friendlyName": "ms-resource:loc.friendlyName", + "description": "ms-resource:loc.description", + "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/build/xcode", + "helpMarkDown": "ms-resource:loc.helpMarkDown", + "category": "Build", + "visibility": [ + "Build" + ], + "author": "Microsoft Corporation", + "version": { + "Major": 5, + "Minor": 229, + "Patch": 4 + }, + "releaseNotes": "ms-resource:loc.releaseNotes", + "demands": [ + "xcode" + ], + "instanceNameFormat": "ms-resource:loc.instanceNameFormat", + "groups": [ + { + "name": "sign", + "displayName": "ms-resource:loc.group.displayName.sign", + "isExpanded": true + }, + { + "name": "package", + "displayName": "ms-resource:loc.group.displayName.package", + "isExpanded": true + }, + { + "name": "devices", + "displayName": "ms-resource:loc.group.displayName.devices", + "isExpanded": true + }, + { + "name": "advanced", + "displayName": "ms-resource:loc.group.displayName.advanced", + "isExpanded": false + } + ], + "inputs": [ + { + "name": "actions", + "type": "string", + "label": "ms-resource:loc.input.label.actions", + "defaultValue": "build", + "required": true, + "helpMarkDown": "ms-resource:loc.input.help.actions" + }, + { + "name": "configuration", + "type": "string", + "label": "ms-resource:loc.input.label.configuration", + "defaultValue": "$(Configuration)", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.configuration" + }, + { + "name": "sdk", + "type": "string", + "label": "ms-resource:loc.input.label.sdk", + "defaultValue": "$(SDK)", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.sdk" + }, + { + "name": "xcWorkspacePath", + "type": "filePath", + "label": "ms-resource:loc.input.label.xcWorkspacePath", + "defaultValue": "**/*.xcodeproj/project.xcworkspace", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.xcWorkspacePath" + }, + { + "name": "scheme", + "type": "string", + "label": "ms-resource:loc.input.label.scheme", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.scheme" + }, + { + "name": "xcodeVersion", + "type": "pickList", + "label": "ms-resource:loc.input.label.xcodeVersion", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.xcodeVersion", + "defaultValue": "default", + ".comment": "//If you update the options here, be sure to update the Xcode.json build template as well.", + "options": { + "8": "Xcode 8", + "9": "Xcode 9", + "10": "Xcode 10", + "11": "Xcode 11", + "12": "Xcode 12", + "13": "Xcode 13", + "default": "Default", + "specifyPath": "Specify path" + } + }, + { + "name": "xcodeDeveloperDir", + "type": "string", + "label": "ms-resource:loc.input.label.xcodeDeveloperDir", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.xcodeDeveloperDir", + "visibleRule": "xcodeVersion == specifyPath" + }, + { + "name": "packageApp", + "type": "boolean", + "label": "ms-resource:loc.input.label.packageApp", + "defaultValue": false, + "required": true, + "helpMarkDown": "ms-resource:loc.input.help.packageApp", + "groupName": "package" + }, + { + "name": "archivePath", + "type": "filePath", + "label": "ms-resource:loc.input.label.archivePath", + "defaultValue": "", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.archivePath", + "groupName": "package", + "visibleRule": "packageApp == true" + }, + { + "name": "exportPath", + "type": "filePath", + "label": "ms-resource:loc.input.label.exportPath", + "defaultValue": "output/$(SDK)/$(Configuration)", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.exportPath", + "groupName": "package", + "visibleRule": "packageApp == true" + }, + { + "name": "exportOptions", + "type": "pickList", + "label": "ms-resource:loc.input.label.exportOptions", + "defaultValue": "auto", + "required": false, + "groupName": "package", + "options": { + "auto": "Automatic", + "plist": "Plist", + "specify": "Specify" + }, + "helpMarkDown": "ms-resource:loc.input.help.exportOptions", + "visibleRule": "packageApp == true" + }, + { + "name": "exportMethod", + "type": "string", + "label": "ms-resource:loc.input.label.exportMethod", + "defaultValue": "development", + "required": true, + "helpMarkDown": "ms-resource:loc.input.help.exportMethod", + "groupName": "package", + "visibleRule": "exportOptions == specify" + }, + { + "name": "exportTeamId", + "type": "string", + "label": "ms-resource:loc.input.label.exportTeamId", + "defaultValue": "", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.exportTeamId", + "groupName": "package", + "visibleRule": "exportOptions == specify" + }, + { + "name": "exportOptionsPlist", + "type": "filePath", + "label": "ms-resource:loc.input.label.exportOptionsPlist", + "defaultValue": "", + "required": true, + "helpMarkDown": "ms-resource:loc.input.help.exportOptionsPlist", + "groupName": "package", + "visibleRule": "exportOptions == plist" + }, + { + "name": "exportArgs", + "type": "string", + "label": "ms-resource:loc.input.label.exportArgs", + "defaultValue": "", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.exportArgs", + "groupName": "package", + "visibleRule": "packageApp == true" + }, + { + "name": "signingOption", + "type": "pickList", + "label": "ms-resource:loc.input.label.signingOption", + "required": false, + "groupName": "sign", + "defaultValue": "nosign", + "helpMarkDown": "ms-resource:loc.input.help.signingOption", + "options": { + "nosign": "Do not code sign", + "default": "Project defaults", + "manual": "Manual signing", + "auto": "Automatic signing" + } + }, + { + "name": "signingIdentity", + "type": "string", + "label": "ms-resource:loc.input.label.signingIdentity", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.signingIdentity", + "groupName": "sign", + "visibleRule": "signingOption = manual" + }, + { + "name": "provisioningProfileUuid", + "type": "string", + "label": "ms-resource:loc.input.label.provisioningProfileUuid", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.provisioningProfileUuid", + "groupName": "sign", + "visibleRule": "signingOption = manual" + }, + { + "name": "provisioningProfileName", + "type": "string", + "label": "ms-resource:loc.input.label.provisioningProfileName", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.provisioningProfileName", + "groupName": "sign", + "visibleRule": "signingOption = manual" + }, + { + "name": "teamId", + "type": "string", + "label": "ms-resource:loc.input.label.teamId", + "defaultValue": "", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.teamId", + "groupName": "sign", + "visibleRule": "signingOption = auto" + }, + { + "name": "destinationPlatformOption", + "type": "picklist", + "label": "ms-resource:loc.input.label.destinationPlatformOption", + "defaultValue": "default", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.destinationPlatformOption", + "groupName": "devices", + "options": { + "default": "Default", + "iOS": "iOS and watchOS", + "tvOS": "tvOS", + "macOS": "macOS", + "custom": "Custom" + } + }, + { + "name": "destinationPlatform", + "type": "string", + "label": "ms-resource:loc.input.label.destinationPlatform", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.destinationPlatform", + "groupName": "devices", + "visibleRule": "destinationPlatformOption == custom" + }, + { + "name": "destinationTypeOption", + "type": "radio", + "label": "ms-resource:loc.input.label.destinationTypeOption", + "defaultValue": "simulators", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.destinationTypeOption", + "groupName": "devices", + "visibleRule": "destinationPlatformOption != default && destinationPlatformOption != macOS", + "options": { + "simulators": "Simulator", + "devices": "Connected Device" + } + }, + { + "name": "destinationSimulators", + "label": "ms-resource:loc.input.label.destinationSimulators", + "type": "string", + "defaultValue": "", + "required": false, + "groupName": "devices", + "helpMarkDown": "ms-resource:loc.input.help.destinationSimulators", + "visibleRule": "destinationPlatformOption != default && destinationPlatformOption != macOS && destinationTypeOption == simulators" + }, + { + "name": "destinationDevices", + "label": "ms-resource:loc.input.label.destinationDevices", + "type": "string", + "defaultValue": "", + "required": false, + "groupName": "devices", + "helpMarkDown": "ms-resource:loc.input.help.destinationDevices", + "visibleRule": "destinationPlatformOption != default && destinationPlatformOption != macOS && destinationTypeOption == devices" + }, + { + "name": "args", + "type": "string", + "label": "ms-resource:loc.input.label.args", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.args", + "groupName": "advanced" + }, + { + "name": "cwd", + "aliases": [ + "workingDirectory" + ], + "type": "filePath", + "label": "ms-resource:loc.input.label.cwd", + "defaultValue": "", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.cwd", + "groupName": "advanced" + }, + { + "name": "useXcpretty", + "type": "boolean", + "label": "ms-resource:loc.input.label.useXcpretty", + "required": false, + "defaultValue": true, + "helpMarkDown": "ms-resource:loc.input.help.useXcpretty", + "groupName": "advanced" + }, + { + "name": "xcprettyArgs", + "type": "string", + "label": "ms-resource:loc.input.label.xcprettyArgs", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.xcprettyArgs", + "groupName": "advanced", + "visibleRule": "useXcpretty == true" + }, + { + "name": "publishJUnitResults", + "type": "boolean", + "label": "ms-resource:loc.input.label.publishJUnitResults", + "required": false, + "defaultValue": false, + "groupName": "advanced", + "helpMarkDown": "ms-resource:loc.input.help.publishJUnitResults" + }, + { + "name": "testRunTitle", + "type": "string", + "label": "ms-resource:loc.input.label.testRunTitle", + "required": false, + "groupName": "advanced", + "helpMarkDown": "ms-resource:loc.input.help.testRunTitle", + "visibleRule": "publishJUnitResults == true" + } + ], + "execution": { + "Node10": { + "target": "xcode.js", + "argumentFormat": "" + }, + "Node16": { + "target": "xcode.js", + "argumentFormat": "" + }, + "Node20": { + "target": "xcode.js", + "argumentFormat": "" + } + }, + "postjobexecution": { + "Node10": { + "target": "postxcode.js", + "argumentFormat": "" + }, + "Node16": { + "target": "postxcode.js", + "argumentFormat": "" + }, + "Node20": { + "target": "postxcode.js", + "argumentFormat": "" + } + }, + "messages": { + "SignIdNotFound": "ms-resource:loc.messages.SignIdNotFound", + "TempKeychainSetupFailed": "ms-resource:loc.messages.TempKeychainSetupFailed", + "ProvProfileDetailsNotFound": "ms-resource:loc.messages.ProvProfileDetailsNotFound", + "ProvProfileUUIDNotFound": "ms-resource:loc.messages.ProvProfileUUIDNotFound", + "MultipleWorkspacesFound": "ms-resource:loc.messages.MultipleWorkspacesFound", + "WorkspaceDoesNotExist": "ms-resource:loc.messages.WorkspaceDoesNotExist", + "UseXcprettyForTestPublishing": "ms-resource:loc.messages.UseXcprettyForTestPublishing", + "NoTestResultsFound": "ms-resource:loc.messages.NoTestResultsFound", + "XcodeSuccess": "ms-resource:loc.messages.XcodeSuccess", + "TempKeychainDeleteFailed": "ms-resource:loc.messages.TempKeychainDeleteFailed", + "ProvProfileDeleteFailed": "ms-resource:loc.messages.ProvProfileDeleteFailed", + "ExportMethodNotIdentified": "ms-resource:loc.messages.ExportMethodNotIdentified", + "ExportOptionsPlistInvalidFilePath": "ms-resource:loc.messages.ExportOptionsPlistInvalidFilePath", + "SchemeRequiredForArchive": "ms-resource:loc.messages.SchemeRequiredForArchive", + "WorkspaceOrProjectRequiredForArchive": "ms-resource:loc.messages.WorkspaceOrProjectRequiredForArchive", + "FailedToGenerateExportOptionsPlist": "ms-resource:loc.messages.FailedToGenerateExportOptionsPlist", + "LocateXcodeBasedOnVersion": "ms-resource:loc.messages.LocateXcodeBasedOnVersion", + "FailedToLocateSpecifiedXcode": "ms-resource:loc.messages.FailedToLocateSpecifiedXcode", + "CantDetermineProvisioningStyle": "ms-resource:loc.messages.CantDetermineProvisioningStyle", + "MultipleSchemesFound": "ms-resource:loc.messages.MultipleSchemesFound", + "NoSchemeFound": "ms-resource:loc.messages.NoSchemeFound", + "SchemeSelected": "ms-resource:loc.messages.SchemeSelected", + "FailedToFindScheme": "ms-resource:loc.messages.FailedToFindScheme", + "OutputDirectoryIgnored": "ms-resource:loc.messages.OutputDirectoryIgnored", + "NoDestinationPlatformWarning": "ms-resource:loc.messages.NoDestinationPlatformWarning", + "XcprettyNotInstalled": "ms-resource:loc.messages.XcprettyNotInstalled", + "XcodeRequiresMac": "ms-resource:loc.messages.XcodeRequiresMac", + "UsingDefaultSimulator": "ms-resource:loc.messages.UsingDefaultSimulator" + }, + "_buildConfigMapping": { + "Default": "5.229.3", + "Node20-225": "5.229.4" + } +} \ No newline at end of file diff --git a/_generated/XcodeV5_Node20/tsconfig.json b/_generated/XcodeV5_Node20/tsconfig.json new file mode 100644 index 000000000000..0438b79f69ac --- /dev/null +++ b/_generated/XcodeV5_Node20/tsconfig.json @@ -0,0 +1,6 @@ +{ + "compilerOptions": { + "target": "ES6", + "module": "commonjs" + } +} \ No newline at end of file diff --git a/_generated/XcodeV5_Node20/xcode.ts b/_generated/XcodeV5_Node20/xcode.ts new file mode 100644 index 000000000000..d3f7555a1122 --- /dev/null +++ b/_generated/XcodeV5_Node20/xcode.ts @@ -0,0 +1,507 @@ +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 utils = require('./xcodeutils'); +import * as telemetry from 'azure-pipelines-tasks-utility-common/telemetry'; + +import { ToolRunner } from 'azure-pipelines-task-lib/toolrunner'; + +async function run() { + const telemetryData: { [key: string]: any; } = {}; + + try { + tl.setResourcePath(path.join(__dirname, 'task.json')); + + //-------------------------------------------------------- + // Tooling + //-------------------------------------------------------- + + let xcodeVersionSelection: string = tl.getInput('xcodeVersion', true); + telemetryData.xcodeVersionSelection = xcodeVersionSelection; + + if (xcodeVersionSelection === 'specifyPath') { + let devDir = tl.getInput('xcodeDeveloperDir', true); + tl.setVariable('DEVELOPER_DIR', devDir); + if (devDir) { + telemetryData.xcodeFileName = utils.getXcodeFileName(devDir); + } + } + else if (xcodeVersionSelection !== 'default') { + // resolve the developer dir for a version like "8" or "9". + let devDir = utils.findDeveloperDir(xcodeVersionSelection); + tl.setVariable('DEVELOPER_DIR', devDir); + } + + let tool: string = tl.which('xcodebuild', true); + tl.debug('Tool selected: ' + tool); + + let workingDir: string = tl.getPathInput('cwd'); + tl.cd(workingDir); + + //-------------------------------------------------------- + // Xcode args + //-------------------------------------------------------- + let ws: string = tl.getPathInput('xcWorkspacePath', false, false); + if (tl.filePathSupplied('xcWorkspacePath')) { + let workspaceMatches = tl.findMatch(workingDir, ws, { allowBrokenSymbolicLinks: false, followSpecifiedSymbolicLink: false, followSymbolicLinks: false }); + tl.debug("Found " + workspaceMatches.length + ' workspaces matching.'); + + if (workspaceMatches.length > 0) { + ws = workspaceMatches[0]; + if (workspaceMatches.length > 1) { + tl.warning(tl.loc('MultipleWorkspacesFound', ws)); + } + } + else { + throw new Error(tl.loc('WorkspaceDoesNotExist', ws)); + } + } + + let isProject = false; + if (ws && ws.trim().toLowerCase().endsWith('.xcodeproj')) { + isProject = true; + } + + let scheme: string = tl.getInput('scheme', false); + + // If we have a workspace argument but no scheme, see if there's + // single shared scheme we can use. + if (!scheme && !isProject && ws && tl.filePathSupplied('xcWorkspacePath')) { + try { + let schemes: string[] = await utils.getWorkspaceSchemes(tool, ws); + + if (schemes.length > 1) { + tl.warning(tl.loc('MultipleSchemesFound')); + } + else if (schemes.length === 0) { + tl.warning(tl.loc('NoSchemeFound')); + } + else { + scheme = schemes[0]; + console.log(tl.loc('SchemeSelected', scheme)); + } + } + catch (err) { + tl.warning(tl.loc('FailedToFindScheme')); + } + } + + let destinations: string[]; + + let platform: string = tl.getInput('destinationPlatformOption', false); + if (platform === 'custom') { + // Read the custom platform from the text input. + platform = tl.getInput('destinationPlatform', false); + } + + if (platform === 'macOS') { + destinations = ['platform=macOS']; + } + else if (platform && platform !== 'default') { + // To be yaml friendly, destinationTypeOption is optional and we default to simulators. + let destinationType: string = tl.getInput('destinationTypeOption', false); + let targetingSimulators: boolean = destinationType !== 'devices'; + + let devices: string[]; + if (targetingSimulators) { + let simulator = tl.getInput('destinationSimulators'); + + if(!simulator){ + simulator = utils.getDefaultSimulator(platform, xcodeVersionSelection); + console.log(tl.loc('UsingDefaultSimulator', simulator)); + } + + // Only one simulator for now. + devices = [simulator]; + } + else { + // Only one device for now. + devices = [tl.getInput('destinationDevices')]; + } + + destinations = utils.buildDestinationArgs(platform, devices, targetingSimulators); + } + + let sdk: string = tl.getInput('sdk', false); + let configuration: string = tl.getInput('configuration', false); + let useXcpretty: boolean = tl.getBoolInput('useXcpretty', false); + let actions: string[] = tl.getDelimitedInput('actions', ' ', true); + let packageApp: boolean = tl.getBoolInput('packageApp', true); + let args: string = tl.getInput('args', false); + + telemetryData.actions = actions; + telemetryData.packageApp = packageApp; + + //-------------------------------------------------------- + // Exec Tools + //-------------------------------------------------------- + + // --- Xcode Version --- + let xcv: ToolRunner = tl.tool(tool); + xcv.arg('-version'); + let xcodeMajorVersion: number = 0; + xcv.on('stdout', (data) => { + const match = data.toString().trim().match(/Xcode (.+)/g); + tl.debug('match = ' + match); + if (match) { + const versionString = match.toString().replace('Xcode', '').trim(); + const majorVersion: number = parseInt(versionString); + tl.debug('majorVersion = ' + majorVersion); + telemetryData.xcodeVersion = versionString; + + if (!isNaN(majorVersion)) { + xcodeMajorVersion = majorVersion; + } + } + }); + + await xcv.exec(); + tl.debug('xcodeMajorVersion = ' + xcodeMajorVersion); + + // --- Xcode build arguments --- + let xcb: ToolRunner = tl.tool(tool); + xcb.argIf(sdk, ['-sdk', sdk]); + xcb.argIf(configuration, ['-configuration', configuration]); + if (ws && tl.filePathSupplied('xcWorkspacePath')) { + xcb.argIf(isProject, '-project'); + xcb.argIf(!isProject, '-workspace'); + xcb.arg(ws); + } + xcb.argIf(scheme, ['-scheme', scheme]); + // Add a -destination argument for each device and simulator. + if (destinations) { + destinations.forEach(destination => { + xcb.arg(['-destination', destination]); + }); + } + xcb.arg(actions); + if (args) { + xcb.line(args); + } + + //-------------------------------------------------------- + // iOS signing and provisioning + //-------------------------------------------------------- + let signingOption: string = tl.getInput('signingOption', true); + let xcode_codeSigningAllowed: string; + let xcode_codeSignStyle: string; + let xcode_otherCodeSignFlags: string; + let xcode_codeSignIdentity: string; + let xcode_provProfile: string; + let xcode_provProfileSpecifier: string; + let xcode_devTeam: string; + + telemetryData.signingOption = signingOption; + + if (signingOption === 'nosign') { + xcode_codeSigningAllowed = 'CODE_SIGNING_ALLOWED=NO'; + } + else if (signingOption === 'manual') { + xcode_codeSignStyle = 'CODE_SIGN_STYLE=Manual'; + + const signIdentity: string = tl.getInput('signingIdentity'); + if (signIdentity) { + xcode_codeSignIdentity = 'CODE_SIGN_IDENTITY=' + signIdentity; + } + + let provProfileUUID: string = tl.getInput('provisioningProfileUuid'); + let provProfileName: string = tl.getInput('provisioningProfileName'); + + if (!provProfileUUID) { + provProfileUUID = ""; + } + + if (!provProfileName) { + provProfileName = ""; + } + + // PROVISIONING_PROFILE_SPECIFIER takes predence over PROVISIONING_PROFILE, + // so it's important to pass it to Xcode even if it's empty. That way Xcode + // will ignore any specifier in the project file and honor the specifier + // or uuid we passed on the commandline. If the user wants to use the specifier + // in the project file, they should choose the "Project Defaults" signing style. + xcode_provProfile = `PROVISIONING_PROFILE=${provProfileUUID}`; + xcode_provProfileSpecifier = `PROVISIONING_PROFILE_SPECIFIER=${provProfileName}`; + } + else if (signingOption === 'auto') { + xcode_codeSignStyle = 'CODE_SIGN_STYLE=Automatic'; + + let teamId: string = tl.getInput('teamId'); + if (teamId) { + xcode_devTeam = 'DEVELOPMENT_TEAM=' + teamId; + } + } + + xcb.argIf(xcode_codeSigningAllowed, xcode_codeSigningAllowed); + xcb.argIf(xcode_codeSignStyle, xcode_codeSignStyle); + xcb.argIf(xcode_codeSignIdentity, xcode_codeSignIdentity); + xcb.argIf(xcode_provProfile, xcode_provProfile); + xcb.argIf(xcode_provProfileSpecifier, xcode_provProfileSpecifier); + xcb.argIf(xcode_devTeam, xcode_devTeam); + + //--- Enable Xcpretty formatting --- + if (useXcpretty && !tl.which('xcpretty')) { + // user wants to enable xcpretty but it is not installed, fallback to xcodebuild raw output + useXcpretty = false; + tl.warning(tl.loc("XcprettyNotInstalled")); + } + + if (useXcpretty) { + let xcPrettyPath: string = tl.which('xcpretty', true); + let xcPrettyTool: ToolRunner = tl.tool(xcPrettyPath); + xcPrettyTool.arg(['-r', 'junit', '--no-color']); + const xcPrettyArgs: string = tl.getInput('xcprettyArgs'); + if (xcPrettyArgs) { + xcPrettyTool.line(xcPrettyArgs); + } + + const logFile: string = utils.getUniqueLogFileName('xcodebuild'); + xcb.pipeExecOutputToTool(xcPrettyTool, logFile); + utils.setTaskState('XCODEBUILD_LOG', logFile); + } + + //--- Xcode Build --- + let buildOnlyDeviceErrorFound: boolean; + xcb.on('errline', (line: string) => { + if (!buildOnlyDeviceErrorFound && line.includes('build only device cannot be used to run this target')) { + buildOnlyDeviceErrorFound = true; + } + }); + + try { + await xcb.exec(); + } catch (err) { + if (buildOnlyDeviceErrorFound) { + // Tell the user they need to change Destination platform to fix this build error. + tl.warning(tl.loc('NoDestinationPlatformWarning')); + } + throw err; + } + + //-------------------------------------------------------- + // Package app to generate .ipa + //-------------------------------------------------------- + + if (packageApp && sdk !== 'iphonesimulator') { + // use xcodebuild to create the app package + if (!scheme) { + throw new Error(tl.loc("SchemeRequiredForArchive")); + } + if (!ws || !tl.filePathSupplied('xcWorkspacePath')) { + throw new Error(tl.loc("WorkspaceOrProjectRequiredForArchive")); + } + + // create archive + let xcodeArchive: ToolRunner = tl.tool(tl.which('xcodebuild', true)); + if (ws && tl.filePathSupplied('xcWorkspacePath')) { + xcodeArchive.argIf(isProject, '-project'); + xcodeArchive.argIf(!isProject, '-workspace'); + xcodeArchive.arg(ws); + } + xcodeArchive.argIf(scheme, ['-scheme', scheme]); + xcodeArchive.arg('archive'); //archive action + xcodeArchive.argIf(sdk, ['-sdk', sdk]); + xcodeArchive.argIf(configuration, ['-configuration', configuration]); + let archivePath: string = tl.getInput('archivePath'); + let archiveFolderRoot: string; + if (!archivePath.endsWith('.xcarchive')) { + archiveFolderRoot = archivePath; + archivePath = tl.resolve(archivePath, scheme); + } else { + //user specified a file path for archivePath + archiveFolderRoot = path.dirname(archivePath); + } + xcodeArchive.arg(['-archivePath', archivePath]); + xcodeArchive.argIf(xcode_otherCodeSignFlags, xcode_otherCodeSignFlags); + xcodeArchive.argIf(xcode_codeSigningAllowed, xcode_codeSigningAllowed); + xcodeArchive.argIf(xcode_codeSignStyle, xcode_codeSignStyle); + xcodeArchive.argIf(xcode_codeSignIdentity, xcode_codeSignIdentity); + xcodeArchive.argIf(xcode_provProfile, xcode_provProfile); + xcodeArchive.argIf(xcode_provProfileSpecifier, xcode_provProfileSpecifier); + xcodeArchive.argIf(xcode_devTeam, xcode_devTeam); + if (args) { + xcodeArchive.line(args); + } + + if (useXcpretty) { + let xcPrettyTool: ToolRunner = tl.tool(tl.which('xcpretty', true)); + xcPrettyTool.arg('--no-color'); + const xcPrettyArgs: string = tl.getInput('xcprettyArgs'); + if (xcPrettyArgs) { + xcPrettyTool.line(xcPrettyArgs); + } + + const logFile: string = utils.getUniqueLogFileName('xcodebuild_archive'); + xcodeArchive.pipeExecOutputToTool(xcPrettyTool, logFile); + utils.setTaskState('XCODEBUILD_ARCHIVE_LOG', logFile); + } + await xcodeArchive.exec(); + + let archiveFolders: string[] = tl.findMatch(archiveFolderRoot, '**/*.xcarchive', { allowBrokenSymbolicLinks: false, followSpecifiedSymbolicLink: false, followSymbolicLinks: false }); + if (archiveFolders && archiveFolders.length > 0) { + tl.debug(archiveFolders.length + ' archives found for exporting.'); + + //export options plist + let exportOptions: string = tl.getInput('exportOptions'); + let exportMethod: string; + let exportTeamId: string; + let exportOptionsPlist: string; + let archiveToCheck: string = archiveFolders[0]; + let macOSEmbeddedProfilesFound: boolean; + + telemetryData.exportOptions = exportOptions; + + // iOS provisioning profiles use the .mobileprovision suffix. macOS profiles have the .provisionprofile suffix. + let embeddedProvProfiles: string[] = tl.findMatch(archiveToCheck, '**/embedded.mobileprovision', { allowBrokenSymbolicLinks: false, followSpecifiedSymbolicLink: false, followSymbolicLinks: false }); + + if (embeddedProvProfiles && embeddedProvProfiles.length > 0) { + tl.debug(`${embeddedProvProfiles.length} iOS embedded.mobileprovision file(s) found.`); + } else { + embeddedProvProfiles = tl.findMatch(archiveToCheck, '**/embedded.provisionprofile', { allowBrokenSymbolicLinks: false, followSpecifiedSymbolicLink: false, followSymbolicLinks: false }); + + if (embeddedProvProfiles && embeddedProvProfiles.length > 0) { + tl.debug(`${embeddedProvProfiles.length} macOS embedded.provisionprofile file(s) found.`); + macOSEmbeddedProfilesFound = true; + } + } + + if (exportOptions === 'auto') { + // Automatically try to detect the export-method to use from the provisioning profile + // embedded in the .xcarchive file + if (embeddedProvProfiles && embeddedProvProfiles.length > 0) { + tl.debug('embedded prov profile = ' + embeddedProvProfiles[0]); + + if (macOSEmbeddedProfilesFound) { + exportMethod = await sign.getmacOSProvisioningProfileType(embeddedProvProfiles[0]); + } else { + exportMethod = await sign.getiOSProvisioningProfileType(embeddedProvProfiles[0]); + } + + tl.debug('Using export method = ' + exportMethod); + } + + // If you create a simple macOS app with automatic signing and no entitlements, it won't have an embedded profile. + // And export for that app will work with an empty exportOptionsPlist. + if (!exportMethod && sdk && sdk !== 'macosx') { + tl.warning(tl.loc('ExportMethodNotIdentified')); + } + } else if (exportOptions === 'specify') { + exportMethod = tl.getInput('exportMethod', true); + exportTeamId = tl.getInput('exportTeamId'); + } else if (exportOptions === 'plist') { + exportOptionsPlist = tl.getInput('exportOptionsPlist'); + if (!tl.filePathSupplied('exportOptionsPlist') || !utils.pathExistsAsFile(exportOptionsPlist)) { + throw new Error(tl.loc('ExportOptionsPlistInvalidFilePath', exportOptionsPlist)); + } + } + + if (exportOptions !== 'plist') { + // As long as the user didn't provide a plist, start with an empty one. + // Xcode 7 warns "-exportArchive without -exportOptionsPlist is deprecated" + // Xcode 8+ will error if a plist isn't provided. + let plist: string = tl.which('/usr/libexec/PlistBuddy', true); + + exportOptionsPlist = '_XcodeTaskExportOptions.plist'; + tl.tool(plist).arg(['-c', 'Clear', exportOptionsPlist]).execSync(); + + // Add the teamId if provided. + if (exportTeamId) { + tl.tool(plist).arg(['-c', 'Add teamID string ' + exportTeamId, exportOptionsPlist]).execSync(); + } + + // Add the export method if provided or determined above. + if (exportMethod) { + tl.tool(plist).arg(['-c', 'Add method string ' + exportMethod, exportOptionsPlist]).execSync(); + } + + // For auto export, conditionally add entitlements, signingStyle and provisioning profiles. + if (xcodeMajorVersion >= 9 && exportOptions === 'auto') { + // Propagate any iCloud entitlement. + if (embeddedProvProfiles && embeddedProvProfiles.length > 0) { + const cloudEntitlement = await sign.getCloudEntitlement(embeddedProvProfiles[0], exportMethod); + if (cloudEntitlement) { + tl.debug("Adding cloud entitlement"); + tl.tool(plist).arg(['-c', `Add iCloudContainerEnvironment string ${cloudEntitlement}`, exportOptionsPlist]).execSync(); + } + } + + let signingOptionForExport = signingOption; + + // If we're using the project defaults, scan the pbxProject file for the type of signing being used. + if (signingOptionForExport === 'default') { + signingOptionForExport = await utils.getProvisioningStyle(ws); + + if (!signingOptionForExport) { + tl.warning(tl.loc('CantDetermineProvisioningStyle')); + } + } + + if (signingOptionForExport === 'manual') { + // Xcode 9 manual signing, set code sign style = manual + tl.tool(plist).arg(['-c', 'Add signingStyle string ' + 'manual', exportOptionsPlist]).execSync(); + + // add provisioning profiles to the exportOptions plist + // find bundle Id from Info.plist and prov profile name from the embedded profile in each .app package + tl.tool(plist).arg(['-c', 'Add provisioningProfiles dict', exportOptionsPlist]).execSync(); + + for (let i = 0; i < embeddedProvProfiles.length; i++) { + let embeddedProvProfile: string = embeddedProvProfiles[i]; + let profileName: string = await sign.getProvisioningProfileName(embeddedProvProfile); + tl.debug('embedded provisioning profile = ' + embeddedProvProfile + ', profile name = ' + profileName); + + let embeddedInfoPlist: string = tl.resolve(path.dirname(embeddedProvProfile), 'Info.plist'); + let bundleId: string = await sign.getBundleIdFromPlist(embeddedInfoPlist); + tl.debug('embeddedInfoPlist path = ' + embeddedInfoPlist + ', bundle identifier = ' + bundleId); + + if (!profileName || !bundleId) { + throw new Error(tl.loc('FailedToGenerateExportOptionsPlist')); + } + + tl.tool(plist).arg(['-c', 'Add provisioningProfiles:' + bundleId + ' string ' + profileName, exportOptionsPlist]).execSync(); + } + } + } + } + + //export path + let exportPath: string = tl.getInput('exportPath'); + + for (let i = 0; i < archiveFolders.length; i++) { + let archive: string = archiveFolders.pop(); + + //export the archive + let xcodeExport: ToolRunner = tl.tool(tl.which('xcodebuild', true)); + xcodeExport.arg(['-exportArchive', '-archivePath', archive]); + xcodeExport.arg(['-exportPath', exportPath]); + xcodeExport.argIf(exportOptionsPlist, ['-exportOptionsPlist', exportOptionsPlist]); + let exportArgs: string = tl.getInput('exportArgs'); + xcodeExport.argIf(exportArgs, exportArgs); + + if (useXcpretty) { + let xcPrettyTool: ToolRunner = tl.tool(tl.which('xcpretty', true)); + xcPrettyTool.arg('--no-color'); + const xcPrettyArgs: string = tl.getInput('xcprettyArgs'); + if (xcPrettyArgs) { + xcPrettyTool.line(xcPrettyArgs); + } + + const logFile: string = utils.getUniqueLogFileName('xcodebuild_export'); + xcodeExport.pipeExecOutputToTool(xcPrettyTool, logFile); + utils.setTaskState('XCODEBUILD_EXPORT_LOG', logFile); + } + await xcodeExport.exec(); + } + } + } + tl.setResult(tl.TaskResult.Succeeded, tl.loc('XcodeSuccess')); + } + catch (err) { + tl.setResult(tl.TaskResult.Failed, err); + } + finally { + // Publish telemetry + telemetry.emitTelemetry('TaskHub', 'Xcode', telemetryData); + } +} + +run(); diff --git a/_generated/XcodeV5_Node20/xcodeutils.ts b/_generated/XcodeV5_Node20/xcodeutils.ts new file mode 100644 index 000000000000..721068f632c0 --- /dev/null +++ b/_generated/XcodeV5_Node20/xcodeutils.ts @@ -0,0 +1,276 @@ +import tl = require('azure-pipelines-task-lib/task'); +const readline = require('readline'); +const fs = require('fs'); + +import { ToolRunner } from 'azure-pipelines-task-lib/toolrunner'; +import * as semver from 'semver'; + +// These fallback paths are checked if a XCODE_N_DEVELOPER_DIR environment variable is not found. +// Using the environment variable for resolution is preferable to these hardcoded paths. +const fallbackDeveloperDirs = { + "8": "/Applications/Xcode_8.3.3.app/Contents/Developer", + "9": "/Applications/Xcode_9.1.app/Contents/Developer" +}; + +const DefaultSimulators = { + iPhone7: 'iPhone 7', + iPhone8: 'iPhone 8', + appleTv: 'Apple TV' +} + +export function setTaskState(variableName: string, variableValue: string) { + if (agentSupportsTaskState()) { + tl.setTaskVariable(variableName, variableValue); + } +} + +export function getTaskState(variableName: string) { + if (agentSupportsTaskState()) { + return tl.getTaskVariable(variableName); + } +} + +export function findDeveloperDir(xcodeVersion: string): string { + tl.debug(tl.loc('LocateXcodeBasedOnVersion', xcodeVersion)); + + // xcodeVersion should be in the form of "8" or "9". + // envName for version 9.*.* would be "XCODE_9_DEVELOPER_DIR" + let envName = `XCODE_${xcodeVersion}_DEVELOPER_DIR`; + let discoveredDeveloperDir = tl.getVariable(envName); + if (!discoveredDeveloperDir) { + discoveredDeveloperDir = fallbackDeveloperDirs[xcodeVersion]; + + if (discoveredDeveloperDir && !tl.exist(discoveredDeveloperDir)) { + tl.debug(`Ignoring fallback developer path. ${discoveredDeveloperDir} doesn't exist.`); + discoveredDeveloperDir = undefined; + } + + if (!discoveredDeveloperDir) { + throw new Error(tl.loc('FailedToLocateSpecifiedXcode', xcodeVersion, envName)); + } + } + + return discoveredDeveloperDir; +} + +export function buildDestinationArgs(platform: string, devices: string[], targetingSimulators: boolean): string[] { + let destinations: string[] = []; + + devices.forEach((device: string) => { + device = device.trim(); + + let destination; + if (device) { + if (targetingSimulators) { + destination = `platform=${platform} Simulator`; + } + else { + destination = `platform=${platform}`; + } + + // The device name may be followed by additional key-value pairs. Example: "iPhone X,OS=11.1" + destination += `,name=${device}`; + + tl.debug(`Constructed destination: ${destination}`); + destinations.push(destination); + } + }); + + return destinations; +} + +/** + * Queries the schemes in a workspace. + * @param xcbuild xcodebuild path + * @param workspace workspace path + * + * Testing shows Xcode 9 returns shared schemes only (a good thing). + */ +export async function getWorkspaceSchemes(xcbuild: string, workspace: string) : Promise { + let xcv: ToolRunner = tl.tool(xcbuild); + xcv.arg(['-workspace', workspace]); + xcv.arg('-list'); + + let schemes: string[] = []; + let inSchemesSection = false; + + let output = ''; + xcv.on('stdout', (data) => { + output = output + data.toString(); + }); + await xcv.exec(); + + output.split('\n').forEach((line: string) => { + tl.debug(`Line: ${line}`); + + line = line.trim(); + + if (inSchemesSection) { + if (line !== '') { + tl.debug(`Scheme: ${line}`); + schemes.push(line); + } + else { + inSchemesSection = false; + } + } + else if (line === 'Schemes:') { + inSchemesSection = true; + } + }); + + return schemes; +} + +/** + * Returns the first provisioning/signing style found in workspace's project files: "auto", "manual" or undefined if not found. + */ +export async function getProvisioningStyle(workspace: string) : Promise { + let provisioningStyle: string; + + if (workspace) { + let pbxProjectPath = getPbxProjectPath(workspace); + tl.debug(`pbxProjectPath is ${pbxProjectPath}`); + + if (pbxProjectPath) { + provisioningStyle = await getProvisioningStyleFromPbxProject(pbxProjectPath); + tl.debug(`pbxProjectPath provisioning style: ${provisioningStyle}`); + } + } + + return provisioningStyle; +} + +function getPbxProjectPath(workspace: string) { + if (workspace && workspace.trim().toLowerCase().endsWith('.xcworkspace')) { + let pbxProjectPath: string = workspace.trim().toLowerCase().replace('.xcworkspace', '.pbxproj'); + + if (pathExistsAsFile(pbxProjectPath)) { + return pbxProjectPath; + } + + tl.debug("Corresponding pbxProject file doesn't exist: " + pbxProjectPath + ", checking alternative location"); + + let altPbxProjectPath = workspace.trim().toLowerCase().replace('.xcworkspace', '.xcodeproj/project.pbxproj'); + if (pathExistsAsFile(altPbxProjectPath)) { + return altPbxProjectPath; + } + else { + tl.debug("Corresponding pbxProject file doesn't exist at alternative location: " + altPbxProjectPath); + } + } +} + +function getProvisioningStyleFromPbxProject(pbxProjectPath) : Promise { + return new Promise((resolve, reject) => { + const rl = readline.createInterface({ + input: fs.createReadStream(pbxProjectPath) + }); + let firstProvisioningStyleFound = false; + let linesExamined = 0; + rl.on('line', (line) => { + if (!firstProvisioningStyleFound) { + linesExamined++; + let trimmedLine = line.trim(); + if (trimmedLine === 'ProvisioningStyle = Automatic;') { + tl.debug(`first provisioning style line: ${line}`); + firstProvisioningStyleFound = true; + resolve("auto"); + } + else if (trimmedLine === 'ProvisioningStyle = Manual;') { + tl.debug(`first provisioning style line: ${line}`); + firstProvisioningStyleFound = true; + resolve("manual"); + } + } + }).on('close', () => { + if (!firstProvisioningStyleFound) { + tl.debug(`close event occurred before a provisioning style was found in the pbxProject file. Lines examined: ${linesExamined}`); + resolve(undefined); + } + }); + }); +} + +export function pathExistsAsFile(path: string) { + try { + return tl.stats(path).isFile(); + } + catch (error) { + return false; + } +} + +export function getUniqueLogFileName(logPrefix: string): string { + //find a unique log file name + let filePath: string = tl.resolve(tl.getVariable('Agent.TempDirectory'), logPrefix + '.log'); + let index = 1; + while (tl.exist(filePath)) { + filePath = tl.resolve(tl.getVariable('Agent.TempDirectory'), logPrefix + index.toString() + '.log'); + index++; + } + + return filePath; +} + +export function uploadLogFile(logFile: string) { + if (tl.exist(logFile)) { + console.log(`##vso[task.uploadfile]${logFile}`); + } +} + +// Same signature and behavior as utility-common/telemetry's emitTelemetry, minus the common vars. +export function emitTelemetry(area: string, feature: string, taskSpecificTelemetry: { [key: string]: any; }): void { + try { + let agentVersion = tl.getVariable('Agent.Version'); + if (semver.gte(agentVersion, '2.120.0')) { + console.log("##vso[telemetry.publish area=%s;feature=%s]%s", + area, + feature, + JSON.stringify(taskSpecificTelemetry)); + } else { + tl.debug(`Agent version is ${agentVersion}. Version 2.120.0 or higher is needed for telemetry.`); + } + } catch (err) { + tl.debug(`Unable to log telemetry. Err:( ${err} )`); + } +} + +function agentSupportsTaskState() { + let agentSupportsTaskState = true; + try { + tl.assertAgent('2.115.0'); + } catch (e) { + agentSupportsTaskState = false; + } + return agentSupportsTaskState; +} + +/** + * Getting default simulator according to the platform and xcode + * @param platform selected platform option + * @param xcodeVersion selected xcode version option + */ +export function getDefaultSimulator(platform: string, xcodeVersion: string): string { + let iPhoneSimulator = DefaultSimulators.iPhone7; + const appleTvSimulator = DefaultSimulators.appleTv; + + if (xcodeVersion !== 'default' && xcodeVersion !== 'specifyPath') { + const xcodeVersionNumber = parseInt(xcodeVersion); + if (xcodeVersionNumber && xcodeVersionNumber >= 11) { + iPhoneSimulator = DefaultSimulators.iPhone8; + } + } + + return platform === 'tvOS' ? appleTvSimulator : iPhoneSimulator; +} + +/** + * Return file name of Xcode application (e.g Xcode_12.1.app) + * if the name has .app extention, otherwise return 'unknown Xcode filename' + * @param xcodeDeveloperDir path to Xcode + */ +export function getXcodeFileName(xcodeDeveloperDir: string): string { + const xcodeFileName: string = xcodeDeveloperDir.split('/').find(item => item.includes('.app')); + return xcodeFileName || 'unknown Xcode filename'; +} diff --git a/make-options.json b/make-options.json index f770af99a9d4..bc25ee9a8a0a 100644 --- a/make-options.json +++ b/make-options.json @@ -254,6 +254,20 @@ "GulpV1", "MavenV3", "NodeTaskRunnerInstallerV0", - "PublishBuildArtifactsV1" + "PublishBuildArtifactsV1", + "FtpUploadV2", + "MSBuildV1", + "NodeToolV0", + "PowerShellV2", + "PythonScriptV0", + "ShellScriptV2", + "SshV0", + "UseNodeV1", + "XcodeV5", + "InstallAppleCertificateV2", + "InstallAppleProvisioningProfileV1", + "InstallSSHKeyV0", + "JavaToolInstallerV0", + "JenkinsQueueJobV2" ] } \ No newline at end of file