diff --git a/Tasks/AzureMysqlDeploymentV1/_buildConfigs/Node16/FilesOverriddenForConfigGoHereREADME.txt b/Tasks/AzureMysqlDeploymentV1/_buildConfigs/Node16/FilesOverriddenForConfigGoHereREADME.txt new file mode 100644 index 000000000000..b338e624afcd --- /dev/null +++ b/Tasks/AzureMysqlDeploymentV1/_buildConfigs/Node16/FilesOverriddenForConfigGoHereREADME.txt @@ -0,0 +1 @@ +Place files overridden for this config in this directory \ No newline at end of file diff --git a/Tasks/AzureMysqlDeploymentV1/_buildConfigs/Node16/make.json b/Tasks/AzureMysqlDeploymentV1/_buildConfigs/Node16/make.json new file mode 100644 index 000000000000..06a5f2fef9de --- /dev/null +++ b/Tasks/AzureMysqlDeploymentV1/_buildConfigs/Node16/make.json @@ -0,0 +1,12 @@ +{ + "rm": [ + { + "items": [ + "node_modules/azure-pipelines-tasks-azure-arm-rest/node_modules/azure-pipelines-task-lib", + "node_modules/azure-pipelines-tasks-webdeployment-common/node_modules/azure-pipelines-task-lib", + "node_modules/https-proxy-agent/node_modules/agent-base" + ], + "options": "-Rf" + } + ] +} \ No newline at end of file diff --git a/Tasks/AzureMysqlDeploymentV1/_buildConfigs/Node16/package-lock.json b/Tasks/AzureMysqlDeploymentV1/_buildConfigs/Node16/package-lock.json new file mode 100644 index 000000000000..d5025e74ad86 --- /dev/null +++ b/Tasks/AzureMysqlDeploymentV1/_buildConfigs/Node16/package-lock.json @@ -0,0 +1,1073 @@ +{ + "name": "vsts-tasks-azuremysql", + "version": "1.0.3", + "lockfileVersion": 1, + "requires": true, + "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.18.38", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.38.tgz", + "integrity": "sha512-6sfo1qTulpVbkxECP+AVrHV9OoJqhzCsfTNp5NIG+enM4HyM3HvZCO798WShIXBN0+QtDIcutJCjsVYnQP5rIQ==" + }, + "@types/q": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.0.7.tgz", + "integrity": "sha512-0WS7XU7sXzQ7J1nbnMKKYdjrrFoO3YtZYgUzeV8JFXffPnHfvSJQleR70I8BOAsOm14i4dyaAZ3YzqIl1YhkXQ==" + }, + "@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==" + }, + "@xmldom/xmldom": { + "version": "git+https://github.com/xmldom/xmldom.git#238b1ea8431fae8817812c68d55b4933248af07e", + "from": "git+https://github.com/xmldom/xmldom.git#0.8.6" + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "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" + } + }, + "archiver": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-1.2.0.tgz", + "integrity": "sha512-5GQRAgpHGPwWIiMzL9lthd+t75fLi8BpRBYtflomSYv2i6+EO9trtwWAm2+zGjIuwKmVmBRknAZFFBSqxYxiJw==", + "requires": { + "archiver-utils": "^1.3.0", + "async": "^2.0.0", + "buffer-crc32": "^0.2.1", + "glob": "^7.0.0", + "lodash": "^4.8.0", + "readable-stream": "^2.0.0", + "tar-stream": "^1.5.0", + "zip-stream": "^1.1.0" + } + }, + "archiver-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-1.3.0.tgz", + "integrity": "sha512-h+hTREBXcW5e1L9RihGXdH4PHHdGipG/jE2sMZrqIH6BmZAxeGU5IWjVsKhokdCSWX7km6Kkh406zZNEElHFPQ==", + "requires": { + "glob": "^7.0.0", + "graceful-fs": "^4.1.0", + "lazystream": "^1.0.0", + "lodash": "^4.8.0", + "normalize-path": "^2.0.0", + "readable-stream": "^2.0.0" + } + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + }, + "async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "requires": { + "lodash": "^4.17.14" + } + }, + "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==" + }, + "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.4.0", + "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.4.0.tgz", + "integrity": "sha512-JgtxfjxjRA+KWY0Q5UC1fo48nkbVxFHgKEuasKdJMSNxHydOyNlB5MNw4UTiTXp9b0nnqKeOQOBn5RN3go3aPg==", + "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.4", + "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-azure-arm-rest/-/azure-pipelines-tasks-azure-arm-rest-3.223.4.tgz", + "integrity": "sha512-3RPwQfTk38HYGOCTmG2+UVM2JClaUV76YVqYrR/AhShMMFkg1wQIbpQZ7PLUh0YPbyWqFhmdaZla0JTRL9MWkg==", + "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==" + } + } + }, + "azure-pipelines-tasks-webdeployment-common": { + "version": "4.224.0", + "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-webdeployment-common/-/azure-pipelines-tasks-webdeployment-common-4.224.0.tgz", + "integrity": "sha512-QtVIYyv53apHI7+UM7Tk2Bo326iqnHT1NBNPxd0inA4q3ktC4sx7Wjv6HucuZ9bbd/4BqBezvvlZCtwwxsNlKw==", + "requires": { + "@types/mocha": "^5.2.7", + "@types/node": "^10.17.0", + "@xmldom/xmldom": "git+https://github.com/xmldom/xmldom.git#0.8.6", + "archiver": "1.2.0", + "azure-pipelines-task-lib": "^4.2.0", + "decompress-zip": "^0.3.3", + "ltx": "2.8.0", + "q": "1.4.1", + "winreg": "1.2.2", + "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==" + } + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "binary": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", + "integrity": "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==", + "requires": { + "buffers": "~0.1.1", + "chainsaw": "~0.1.0" + } + }, + "bl": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", + "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", + "requires": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, + "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-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==" + }, + "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==" + }, + "buffers": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", + "integrity": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==" + }, + "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==" + }, + "chainsaw": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==", + "requires": { + "traverse": ">=0.3.0 <0.4" + } + }, + "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" + } + }, + "compress-commons": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-1.1.0.tgz", + "integrity": "sha512-KUqWogolHagukw9esQyDGS65EBNbohRpBbrINRB7HTID4o9IdZ0pahB/xwk3LYri7IHb4qjfEDXrzW4qL1DJTQ==", + "requires": { + "buffer-crc32": "^0.2.1", + "crc32-stream": "^1.0.0", + "normalize-path": "^2.0.0", + "readable-stream": "^2.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==" + }, + "crc32-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-1.0.0.tgz", + "integrity": "sha512-LP/XL3xovNa9MOfZCdA4j0nEMrRibcP63vVbuq4FLb2jsMKc+QS7x/qoZOPDgDRxjDC+a5hk/gaYBM5kqVSGNg==", + "requires": { + "buffer-crc32": "^0.2.1", + "readable-stream": "^2.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" + } + }, + "decompress-zip": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/decompress-zip/-/decompress-zip-0.3.3.tgz", + "integrity": "sha512-/fy1L4s+4jujqj3kNptWjilFw3E6De8U6XUFvqmh4npN3Vsypm3oT2V0bXcmbBWS+5j5tr4okYaFrOmyZkszEg==", + "requires": { + "binary": "^0.3.0", + "graceful-fs": "^4.1.3", + "mkpath": "^0.1.0", + "nopt": "^3.0.1", + "q": "^1.1.2", + "readable-stream": "^1.1.8", + "touch": "0.0.3" + }, + "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==" + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, + "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" + } + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "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" + } + } + } + }, + "graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "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==" + } + } + }, + "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.12.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", + "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", + "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==" + }, + "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" + }, + "dependencies": { + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" + } + } + }, + "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" + } + }, + "lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "requires": { + "readable-stream": "^2.0.5" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "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==" + }, + "ltx": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/ltx/-/ltx-2.8.0.tgz", + "integrity": "sha512-SJJUrmDgXP0gkUzgErfkaeD+pugM8GYxerTALQa1gTUb5W1wrC4k07GZU+QNZd7MpFqJSYWXTQSUy8Ps03hx5Q==", + "requires": { + "inherits": "^2.0.1" + } + }, + "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" + } + }, + "mkpath": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/mkpath/-/mkpath-0.1.0.tgz", + "integrity": "sha512-bauHShmaxVQiEvlrAPWxSPn8spSL8gDVRl11r8vLT4r/KdnknLqtqwQbToZ2Oa8sJkExYY1z6/d+X7pNiqo4yg==" + }, + "mockery": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mockery/-/mockery-2.1.0.tgz", + "integrity": "sha512-9VkOmxKlWXoDO/h1jDZaS4lH33aWfRiJiNT/tKj+8OGzrcFDLo8d0syGdbsc3Bc4GvRXPb+NMMvojotmuGJTvA==" + }, + "moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" + }, + "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.6.12", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz", + "integrity": "sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", + "requires": { + "abbrev": "1" + } + }, + "normalize-path": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.0.1.tgz", + "integrity": "sha512-jxWwhoRh27+8aiYjkOl0pPfGPvYr2Y6iMC71HUtSGz2BwSvxlxjv8o0bNF28ex6zY02Yn2FJLWFOpEkZGWFo3A==" + }, + "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.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" + } + }, + "resolve": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", + "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "requires": { + "is-core-module": "^2.11.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==" + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "semver": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", + "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==" + }, + "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" + } + }, + "tar-stream": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.5.2.tgz", + "integrity": "sha512-X2iZpARyDjlkj6Tz3nlI1lY4a4k+xEatPgQg7O2WiUMTXIrjVp8R86K3AdWfHp+Q3jsaLE2FLlHES+PA5zwAhA==", + "requires": { + "bl": "^1.0.0", + "end-of-stream": "^1.0.0", + "readable-stream": "^2.0.0", + "xtend": "^4.0.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==" + } + } + }, + "touch": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/touch/-/touch-0.0.3.tgz", + "integrity": "sha512-/LQ54KM9rPf3rGXGo2UPQWx3ol242Zg6Whq27H5DEmZhCJo+pm9N5BzRGepO9vTVhYxpXJdcc1+3uaYt9NyeKg==", + "requires": { + "nopt": "~1.0.10" + }, + "dependencies": { + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "requires": { + "abbrev": "1" + } + } + } + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==" + }, + "tslib": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz", + "integrity": "sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==" + }, + "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==" + }, + "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" + } + }, + "winreg": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/winreg/-/winreg-1.2.2.tgz", + "integrity": "sha512-I1mQ2HDZbOXm3XctfGPNzm9p/md7FAxHtACVFeBNrnOE4p4b3a0baqNObx1OqHE8DEx25l5CaCDipxFM5FSYOg==" + }, + "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.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" + } + }, + "xmlbuilder": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", + "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==" + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "zip-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-1.1.0.tgz", + "integrity": "sha512-i7SEKvFC1yGW8GpOXhYuoJb/REf/Y8JQA5ljYLeF7IsOtW/j9cVVSjXd8Ww27pNqt0TXgB4LmulXdAC22de7YQ==", + "requires": { + "archiver-utils": "^1.3.0", + "compress-commons": "^1.1.0", + "lodash": "^4.8.0", + "readable-stream": "^2.0.0" + } + } + } +} diff --git a/Tasks/AzureMysqlDeploymentV1/_buildConfigs/Node16/package.json b/Tasks/AzureMysqlDeploymentV1/_buildConfigs/Node16/package.json new file mode 100644 index 000000000000..5dfc63d185ea --- /dev/null +++ b/Tasks/AzureMysqlDeploymentV1/_buildConfigs/Node16/package.json @@ -0,0 +1,40 @@ +{ + "name": "vsts-tasks-azuremysql", + "version": "1.0.3", + "description": "Azure Pipelines Azure MySQL", + "main": "azuremysqldeploy.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/mocha": "^5.2.7", + "@types/node": "^16.11.39", + "@types/q": "1.0.7", + "agent-base": "^6.0.2", + "azure-pipelines-task-lib": "^4.4.0", + "azure-pipelines-tasks-azure-arm-rest": "^3.223.4", + "azure-pipelines-tasks-webdeployment-common": "^4.222.0", + "compress-commons": "1.1.0", + "crc32-stream": "1.0.0", + "moment": "^2.29.4", + "normalize-path": "2.0.1", + "q": "1.4.1", + "semver": "5.4.1", + "tar-stream": "1.5.2", + "winreg": "1.2.2", + "zip-stream": "1.1.0" + }, + "devDependencies": { + "typescript": "4.0.2" + } +} diff --git a/Tasks/AzureMysqlDeploymentV1/task.json b/Tasks/AzureMysqlDeploymentV1/task.json index 71d9231c855a..54479f84251e 100644 --- a/Tasks/AzureMysqlDeploymentV1/task.json +++ b/Tasks/AzureMysqlDeploymentV1/task.json @@ -1,230 +1,230 @@ { - "id": "BD1BED02-F04E-11E7-8C3F-9A214CF093AE", - "name": "AzureMysqlDeployment", - "friendlyName": "Azure Database for MySQL deployment", - "description": "Run your scripts and make changes to your Azure Database for MySQL", - "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/deploy/azure-mysql-deployment", - "helpMarkDown": "[Learn more about this task](https://aka.ms/mysqlazuredeployreadme)", - "category": "Deploy", - "visibility": [ - "Build", - "Release" - ], - "runsOn": [ - "Agent" - ], - "author": "Microsoft Corporation", - "version": { - "Major": 1, - "Minor": 225, - "Patch": 1 + "id": "BD1BED02-F04E-11E7-8C3F-9A214CF093AE", + "name": "AzureMysqlDeployment", + "friendlyName": "Azure Database for MySQL deployment", + "description": "Run your scripts and make changes to your Azure Database for MySQL", + "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/deploy/azure-mysql-deployment", + "helpMarkDown": "[Learn more about this task](https://aka.ms/mysqlazuredeployreadme)", + "category": "Deploy", + "visibility": [ + "Build", + "Release" + ], + "runsOn": [ + "Agent" + ], + "author": "Microsoft Corporation", + "version": { + "Major": 1, + "Minor": 226, + "Patch": 1 + }, + "demands": [], + "minimumAgentVersion": "1.100.0", + "groups": [ + { + "name": "target", + "displayName": "DB Details", + "isExpanded": true }, - "demands": [], - "minimumAgentVersion": "1.100.0", - "groups": [ - { - "name": "target", - "displayName": "DB Details", - "isExpanded": true - }, - { - "name": "taskDetails", - "displayName": "Deployment Package", - "isExpanded": true - }, - { - "name": "firewall", - "displayName": "Firewall", - "isExpanded": false - } - ], - "inputs": [ - { - "name": "ConnectedServiceName", - "aliases": [ - "azureSubscription" - ], - "type": "connectedService:AzureRM", - "label": "Azure Subscription", - "defaultValue": "", - "required": true, - "helpMarkDown": "This is needed to connect to your Azure account.
To configure new service connection, select the Azure subscription from the list and click 'Authorize'.
If your subscription is not listed or if you want to use an existing Service Principal, you can setup an Azure service connection using 'Add' or 'Manage' button." - }, - { - "name": "ServerName", - "type": "pickList", - "label": "Host Name", - "required": true, - "defaultValue": "", - "groupName": "target", - "helpMarkDown": "Server name of 'Azure Database for MySQL'.Example: fabrikam.mysql.database.azure.com. When you connect using MySQL Workbench, this is the same value that is used for 'Hostname' in 'Parameters'", - "properties": { - "EditableOptions": "True" - } - }, - { - "name": "DatabaseName", - "type": "string", - "label": "Database Name", - "required": false, - "groupName": "target", - "defaultValue": "", - "helpMarkDown": "The name of database, if you already have one, on which the below script is needed to be run, else the script itself can be used to create the database." - }, - { - "name": "SqlUsername", - "type": "string", - "label": "Server Admin Login", - "required": true, - "groupName": "target", - "defaultValue": "", - "helpMarkDown": "Azure Database for MySQL server supports native MySQL authentication. You can connect and authenticate to a server with the server's admin login. Example: bbo1@fabrikam. When you connect using MySQL Workbench, this is the same value that is used for 'Username' in 'Parameters'." - }, - { - "name": "SqlPassword", - "type": "string", - "label": "Password", - "required": true, - "groupName": "target", - "defaultValue": "", - "helpMarkDown": "Administrator password for Azure Database for MySQL. In case you don’t recall the password you can change the password from [Azure portal](https://docs.microsoft.com/en-us/azure/mysql/howto-create-manage-server-portal).
It can be variable defined in the pipeline. Example : $(password).
Also, you may mark the variable type as 'secret' to secure it." - }, - { - "name": "TaskNameSelector", - "type": "pickList", - "label": "Type", - "required": false, - "helpMarkDown": "Select one of the options between Script File & Inline Script.", - "groupName": "taskDetails", - "defaultValue": "SqlTaskFile", - "options": { - "SqlTaskFile": "MySQL Script File", - "InlineSqlTask": "Inline MySQL Script" - } - }, - { - "name": "SqlFile", - "type": "filePath", - "label": "MySQL Script", - "required": true, - "groupName": "taskDetails", - "defaultValue": "", - "helpMarkDown": "Full path of the script file on the automation agent or on a UNC path accessible to the automation agent like, \\\\\\\\BudgetIT\\DeployBuilds\\script.sql. Also, predefined system variables like, $(agent.releaseDirectory) can also be used here. A file containing SQL statements can be used here.​", - "visibleRule": "TaskNameSelector = SqlTaskFile" - }, - { - "name": "SqlInline", - "type": "multiLine", - "label": "Inline MySQL Script", - "required": true, - "groupName": "taskDetails", - "defaultValue": "", - "helpMarkDown": "Enter the MySQL script to execute on the Database selected above.", - "visibleRule": "TaskNameSelector = InlineSqlTask", - "properties": { - "resizable": "true", - "rows": "10" - } - }, - { - "name": "SqlAdditionalArguments", - "type": "string", - "label": "Additional MySQL Arguments", - "required": false, - "groupName": "taskDetails", - "defaultValue": "", - "helpMarkDown": "Additional options supported by MySQL simple SQL shell. These options will be applied when executing the given file on the Azure Database for MySQL.​
Example: You can change to default tab separated output format to HTML or even XML format. Or if you have problems due to insufficient memory for large result sets, use the --quick option.​" - }, - { - "name": "IpDetectionMethod", - "type": "pickList", - "label": "Specify Firewall Rules Using", - "required": true, - "groupName": "firewall", - "defaultValue": "AutoDetect", - "options": { - "AutoDetect": "AutoDetect", - "IPAddressRange": "IPAddressRange" - }, - "helpMarkDown": "For successful execution of the task, we need to enable administrators to access the Azure Database for MySQL Server from the IP Address of the automation agent.
By selecting auto-detect you can automatically add firewall exception for range of possible IP Address of automation agent ​or else you can specify the range explicitly." - }, - { - "name": "StartIpAddress", - "type": "string", - "label": "Start IP Address", - "required": true, - "groupName": "firewall", - "defaultValue": "", - "visibleRule": "IpDetectionMethod = IPAddressRange", - "helpMarkDown": "The starting IP Address of the automation agent machine pool like 196.21.30.50 ." - }, - { - "name": "EndIpAddress", - "type": "string", - "label": "End IP Address", - "required": true, - "groupName": "firewall", - "defaultValue": "", - "visibleRule": "IpDetectionMethod = IPAddressRange", - "helpMarkDown": "The ending IP Address of the automation agent machine pool like 196.21.30.65 ." - }, - { - "name": "DeleteFirewallRule", - "type": "boolean", - "label": "Delete Rule After Task Ends", - "required": false, - "groupName": "firewall", - "defaultValue": "true", - "helpMarkDown": "If selected, the added exception for IP addresses of the automation agent will be removed for corresponding Azure Database for MySQL." - } - ], - "dataSourceBindings": [ - { - "target": "ServerName", - "endpointId": "$(ConnectedServiceName)", - "dataSourceName": "AzureMysqlServers", - "resultTemplate": "{ \"Value\" : \"{{{properties.fullyQualifiedDomainName}}}\", \"DisplayValue\" : \"{{{properties.fullyQualifiedDomainName}}}\" }" - } - ], - "instanceNameFormat": "Execute Azure MySQL : $(TaskNameSelector)", - "execution": { - "Node10": { - "target": "azuremysqldeploy.js" - } + { + "name": "taskDetails", + "displayName": "Deployment Package", + "isExpanded": true }, - "messages": { - "ARGD_ConstructorFailed": "The task failed while initializing. Error: %s .", - "FirewallRuleNameCannotBeEmpty": "The firewall rule name cannot be null.", - "FirewallAddressRangeCannotBeEmpty": "The firewall address cannot be null.", - "StartIpAddressCannotBeEmpty": "The start IP address of the firewall rule cannot be null.", - "EndIpAddressCannotBeEmpty": "The end IP address of the firewall rule cannot be null.", - "MysqlServerNameCannotBeEmpty": "The MySQL server name cannot be null.", - "MysqlFullyQualifiedServerNameCannotBeEmpty": "The MySQL server fully qualified name cannot be null.", - "ResourceGroupCannotBeEmpty": "The resource group name cannot be null.", - "NotAbleToAddFirewallRule": "An error occurred while adding the firewall rule to the MySQL server. Error: %s .", - "NotAbleToDeleteFirewallRule": "An error occurred while deleting the firewall rule from the MySQL server. Error: %s .", - "AgentIpAddressIsMissingInAddedFirewallRule": "The agent IP address is missing in the manually added firewall rule.", - "NotAbleToGetAllServers": "Failed to retrieve all MySQL servers of a subscription. Error: %s .", - "EmptyOrNullServerList": "The MySQL server list is empty. The MySQL server host name is invalid.", - "UnableToFindResourceGroupDueToNullId": "Unable to find the resource group due to a null ID.", - "UnableToFindResourceGroupDueToInvalidId": "Unable to find the resource group due to an invalid ID.", - "NotAbleToGetInstalledLocationOfMysqlFromPath": "The MySQL client is missing on the agent machine.", - "UnableToFindMysqlFromRegistryOnMachineError": "Unable to find MySQL using the registry on the machine.", - "UnableToFindMysqlFromRegistry": "Unable to find MySQL using the registry. Error: %s .", - "UnableToFindTheLocationOfMysqlFromRegistryOnMachineError": "Unable to find the location of MySQL using the registry on the machine. Error: %s .", - "AzureMysqlTaskParameterCannotBeEmpty": "The Azure MySQL task parameter cannot be null.", - "ToolPathCannotBeNull": "Tool path cannot be null.", - "SqlExecutionException": "A SQL execution exception occurred. Please check the SQL script. Error: %s .", - "AzureEndpointCannotBeNull": "Invalid subscription name. The Azure service connection cannot be null.", - "CallbackCannotBeNull": "The callback cannot be null.", - "UnableToCreateDatabaseException": "Unable to create database.", - "WindowMysqlClientMissingError": "MySQL client is missing on the Windows agent machine. Please install it by running the MySQL client installer 'https://aka.ms/window-mysqlcli-installer' script file on the agent machine.", - "LinuxMysqlClientMissingError": "MySQL client is missing on the Linux agent machine. Please install it by running 'sudo apt-get install mysql-client'.", - "CouldNotFetchAccessTokenforAzureStatusCode": "Could not retrieve an access token for Azure. Status code: %s. Status message: %s", - "CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "Could not retrieve an access token for the managed service principal. Please configure Managed Service Identity (MSI) for the virtual machine. See 'https://aka.ms/azure-msi-docs'.Assign role to created MSI Identity. See 'https://aka.ms/assign-role-msi'. Status code: %s. Status message: %s", - "CouldNotFetchAccessTokenforMSIStatusCode": "Could not retrieve an access token for the managed service principal. Status code: %s. Status message: %s", - "NotAbleToCreateFirewallRule": "Getting error during adding firewall rule to Azure mysql server. Error: %s", - "ExpiredServicePrincipal": "Could not fetch access token for Azure. Verify if the Service Principal used is valid and not expired.", - "Nopackagefoundwithspecifiedpattern": "No package found with specified pattern" + { + "name": "firewall", + "displayName": "Firewall", + "isExpanded": false } + ], + "inputs": [ + { + "name": "ConnectedServiceName", + "aliases": [ + "azureSubscription" + ], + "type": "connectedService:AzureRM", + "label": "Azure Subscription", + "defaultValue": "", + "required": true, + "helpMarkDown": "This is needed to connect to your Azure account.
To configure new service connection, select the Azure subscription from the list and click 'Authorize'.
If your subscription is not listed or if you want to use an existing Service Principal, you can setup an Azure service connection using 'Add' or 'Manage' button." + }, + { + "name": "ServerName", + "type": "pickList", + "label": "Host Name", + "required": true, + "defaultValue": "", + "groupName": "target", + "helpMarkDown": "Server name of 'Azure Database for MySQL'.Example: fabrikam.mysql.database.azure.com. When you connect using MySQL Workbench, this is the same value that is used for 'Hostname' in 'Parameters'", + "properties": { + "EditableOptions": "True" + } + }, + { + "name": "DatabaseName", + "type": "string", + "label": "Database Name", + "required": false, + "groupName": "target", + "defaultValue": "", + "helpMarkDown": "The name of database, if you already have one, on which the below script is needed to be run, else the script itself can be used to create the database." + }, + { + "name": "SqlUsername", + "type": "string", + "label": "Server Admin Login", + "required": true, + "groupName": "target", + "defaultValue": "", + "helpMarkDown": "Azure Database for MySQL server supports native MySQL authentication. You can connect and authenticate to a server with the server's admin login. Example: bbo1@fabrikam. When you connect using MySQL Workbench, this is the same value that is used for 'Username' in 'Parameters'." + }, + { + "name": "SqlPassword", + "type": "string", + "label": "Password", + "required": true, + "groupName": "target", + "defaultValue": "", + "helpMarkDown": "Administrator password for Azure Database for MySQL. In case you don’t recall the password you can change the password from [Azure portal](https://docs.microsoft.com/en-us/azure/mysql/howto-create-manage-server-portal).
It can be variable defined in the pipeline. Example : $(password).
Also, you may mark the variable type as 'secret' to secure it." + }, + { + "name": "TaskNameSelector", + "type": "pickList", + "label": "Type", + "required": false, + "helpMarkDown": "Select one of the options between Script File & Inline Script.", + "groupName": "taskDetails", + "defaultValue": "SqlTaskFile", + "options": { + "SqlTaskFile": "MySQL Script File", + "InlineSqlTask": "Inline MySQL Script" + } + }, + { + "name": "SqlFile", + "type": "filePath", + "label": "MySQL Script", + "required": true, + "groupName": "taskDetails", + "defaultValue": "", + "helpMarkDown": "Full path of the script file on the automation agent or on a UNC path accessible to the automation agent like, \\\\\\\\BudgetIT\\DeployBuilds\\script.sql. Also, predefined system variables like, $(agent.releaseDirectory) can also be used here. A file containing SQL statements can be used here.​", + "visibleRule": "TaskNameSelector = SqlTaskFile" + }, + { + "name": "SqlInline", + "type": "multiLine", + "label": "Inline MySQL Script", + "required": true, + "groupName": "taskDetails", + "defaultValue": "", + "helpMarkDown": "Enter the MySQL script to execute on the Database selected above.", + "visibleRule": "TaskNameSelector = InlineSqlTask", + "properties": { + "resizable": "true", + "rows": "10" + } + }, + { + "name": "SqlAdditionalArguments", + "type": "string", + "label": "Additional MySQL Arguments", + "required": false, + "groupName": "taskDetails", + "defaultValue": "", + "helpMarkDown": "Additional options supported by MySQL simple SQL shell. These options will be applied when executing the given file on the Azure Database for MySQL.​
Example: You can change to default tab separated output format to HTML or even XML format. Or if you have problems due to insufficient memory for large result sets, use the --quick option.​" + }, + { + "name": "IpDetectionMethod", + "type": "pickList", + "label": "Specify Firewall Rules Using", + "required": true, + "groupName": "firewall", + "defaultValue": "AutoDetect", + "options": { + "AutoDetect": "AutoDetect", + "IPAddressRange": "IPAddressRange" + }, + "helpMarkDown": "For successful execution of the task, we need to enable administrators to access the Azure Database for MySQL Server from the IP Address of the automation agent.
By selecting auto-detect you can automatically add firewall exception for range of possible IP Address of automation agent ​or else you can specify the range explicitly." + }, + { + "name": "StartIpAddress", + "type": "string", + "label": "Start IP Address", + "required": true, + "groupName": "firewall", + "defaultValue": "", + "visibleRule": "IpDetectionMethod = IPAddressRange", + "helpMarkDown": "The starting IP Address of the automation agent machine pool like 196.21.30.50 ." + }, + { + "name": "EndIpAddress", + "type": "string", + "label": "End IP Address", + "required": true, + "groupName": "firewall", + "defaultValue": "", + "visibleRule": "IpDetectionMethod = IPAddressRange", + "helpMarkDown": "The ending IP Address of the automation agent machine pool like 196.21.30.65 ." + }, + { + "name": "DeleteFirewallRule", + "type": "boolean", + "label": "Delete Rule After Task Ends", + "required": false, + "groupName": "firewall", + "defaultValue": "true", + "helpMarkDown": "If selected, the added exception for IP addresses of the automation agent will be removed for corresponding Azure Database for MySQL." + } + ], + "dataSourceBindings": [ + { + "target": "ServerName", + "endpointId": "$(ConnectedServiceName)", + "dataSourceName": "AzureMysqlServers", + "resultTemplate": "{ \"Value\" : \"{{{properties.fullyQualifiedDomainName}}}\", \"DisplayValue\" : \"{{{properties.fullyQualifiedDomainName}}}\" }" + } + ], + "instanceNameFormat": "Execute Azure MySQL : $(TaskNameSelector)", + "execution": { + "Node10": { + "target": "azuremysqldeploy.js" + } + }, + "messages": { + "ARGD_ConstructorFailed": "The task failed while initializing. Error: %s .", + "FirewallRuleNameCannotBeEmpty": "The firewall rule name cannot be null.", + "FirewallAddressRangeCannotBeEmpty": "The firewall address cannot be null.", + "StartIpAddressCannotBeEmpty": "The start IP address of the firewall rule cannot be null.", + "EndIpAddressCannotBeEmpty": "The end IP address of the firewall rule cannot be null.", + "MysqlServerNameCannotBeEmpty": "The MySQL server name cannot be null.", + "MysqlFullyQualifiedServerNameCannotBeEmpty": "The MySQL server fully qualified name cannot be null.", + "ResourceGroupCannotBeEmpty": "The resource group name cannot be null.", + "NotAbleToAddFirewallRule": "An error occurred while adding the firewall rule to the MySQL server. Error: %s .", + "NotAbleToDeleteFirewallRule": "An error occurred while deleting the firewall rule from the MySQL server. Error: %s .", + "AgentIpAddressIsMissingInAddedFirewallRule": "The agent IP address is missing in the manually added firewall rule.", + "NotAbleToGetAllServers": "Failed to retrieve all MySQL servers of a subscription. Error: %s .", + "EmptyOrNullServerList": "The MySQL server list is empty. The MySQL server host name is invalid.", + "UnableToFindResourceGroupDueToNullId": "Unable to find the resource group due to a null ID.", + "UnableToFindResourceGroupDueToInvalidId": "Unable to find the resource group due to an invalid ID.", + "NotAbleToGetInstalledLocationOfMysqlFromPath": "The MySQL client is missing on the agent machine.", + "UnableToFindMysqlFromRegistryOnMachineError": "Unable to find MySQL using the registry on the machine.", + "UnableToFindMysqlFromRegistry": "Unable to find MySQL using the registry. Error: %s .", + "UnableToFindTheLocationOfMysqlFromRegistryOnMachineError": "Unable to find the location of MySQL using the registry on the machine. Error: %s .", + "AzureMysqlTaskParameterCannotBeEmpty": "The Azure MySQL task parameter cannot be null.", + "ToolPathCannotBeNull": "Tool path cannot be null.", + "SqlExecutionException": "A SQL execution exception occurred. Please check the SQL script. Error: %s .", + "AzureEndpointCannotBeNull": "Invalid subscription name. The Azure service connection cannot be null.", + "CallbackCannotBeNull": "The callback cannot be null.", + "UnableToCreateDatabaseException": "Unable to create database.", + "WindowMysqlClientMissingError": "MySQL client is missing on the Windows agent machine. Please install it by running the MySQL client installer 'https://aka.ms/window-mysqlcli-installer' script file on the agent machine.", + "LinuxMysqlClientMissingError": "MySQL client is missing on the Linux agent machine. Please install it by running 'sudo apt-get install mysql-client'.", + "CouldNotFetchAccessTokenforAzureStatusCode": "Could not retrieve an access token for Azure. Status code: %s. Status message: %s", + "CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "Could not retrieve an access token for the managed service principal. Please configure Managed Service Identity (MSI) for the virtual machine. See 'https://aka.ms/azure-msi-docs'.Assign role to created MSI Identity. See 'https://aka.ms/assign-role-msi'. Status code: %s. Status message: %s", + "CouldNotFetchAccessTokenforMSIStatusCode": "Could not retrieve an access token for the managed service principal. Status code: %s. Status message: %s", + "NotAbleToCreateFirewallRule": "Getting error during adding firewall rule to Azure mysql server. Error: %s", + "ExpiredServicePrincipal": "Could not fetch access token for Azure. Verify if the Service Principal used is valid and not expired.", + "Nopackagefoundwithspecifiedpattern": "No package found with specified pattern" + } } \ No newline at end of file diff --git a/Tasks/AzureMysqlDeploymentV1/task.loc.json b/Tasks/AzureMysqlDeploymentV1/task.loc.json index 2936fa9448eb..e7b1e97a3316 100644 --- a/Tasks/AzureMysqlDeploymentV1/task.loc.json +++ b/Tasks/AzureMysqlDeploymentV1/task.loc.json @@ -16,7 +16,7 @@ "author": "Microsoft Corporation", "version": { "Major": 1, - "Minor": 225, + "Minor": 226, "Patch": 1 }, "demands": [], diff --git a/_generated/AzureMysqlDeploymentV1.versionmap.txt b/_generated/AzureMysqlDeploymentV1.versionmap.txt new file mode 100644 index 000000000000..5b23f81e932d --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1.versionmap.txt @@ -0,0 +1,2 @@ +Default|1.226.1 +Node16-225|1.226.0 diff --git a/_generated/AzureMysqlDeploymentV1/README.md b/_generated/AzureMysqlDeploymentV1/README.md new file mode 100644 index 000000000000..6a82a726e0b4 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1/README.md @@ -0,0 +1,99 @@ +# Azure Database for MySQL Deployment + + +### Overview: + +The task is used to deploy for deploying to Azure Database for MySQL – Azure’s MySQL DB as a service. There are two ways to deploy, either using a script file or writing the script in our inline editor. + + +### Contact Information + +Please report a problem at [Developer Community Forum](https://developercommunity.visualstudio.com/spaces/21/index.html) if you are facing problems in making this task work. You can also share feedback about the task like, what more functionality should be added to the task, what other tasks you would like to have, at the same place. + + +### Pre-requisites for the task +The following pre-requisites need to be setup for the task to work properly. + + +##### Azure Subscription + +To deploy to Azure Database for MySQL, an Azure subscription has to be linked to Team Foundation Server or to Azure DevOps using the Service connections tab in the settings section. Add the Azure subscription to use in the Build or Release Management definition by opening the Account Administration screen (gear icon on the top-right of the screen) and then click on the Services Tab. +Use 'Azure Resource Manager'([ARM](https://azure.microsoft.com/en-in/documentation/articles/resource-group-overview/)) endpoint type; for more details follow the steps listed in the link [here](https://go.microsoft.com/fwlink/?LinkID=623000&clcid=0x409). + + + +##### Azure Database for MySQL resource +This tasks expects that the Azure resource for [Azure Database for MySQL](https://docs.microsoft.com/en-us/azure/mysql/overview) is already available in the [Azure portal](https://ms.portal.azure.com/?r=1#create/Microsoft.SQLDatabase.0.5.7-preview). The task can create a new database along with other MySQL commands but doesn't create the server. + +##### MySQL Client in agent box +This task expects MySQL client must be in agent box +- **Window Agent:** Use this [script file](https://aka.ms/window-mysqlcli-installer) to install MySQL client. +- **Linux Agent:** Run command 'apt-get install mysql-client' to install MySQL client. + +### Parameters of the task: +The parameters of the task are described in details, including examples, to show how to input the parameters. The parameters listed with a \* are required parameters for the task: + + +- **Display name\*:** Provide a name to identify the task among others in your pipeline. + + +- **Azure subscription\*:** Select the Azure Subscription to connect to the portal where the Azure resource is present. + + +**DB Details** + + +- **Host name\*:** Server name of “Azure DB for Mysql”.Example: fabrikam.mysql.database.azure.com. When you connect using MySQL Workbench, this is the same value that is used for "Hostname" in "Parameters". + +- **Database name:** The name of database, if you already have one, on which the below script is needed to be run, else the script itself can be used to create the database. + +- **Server admin login\*:** Azure Database for MySQL server supports native MySQL authentication. You can connect and authenticate to a server with the server's admin login. Example: bbo1@fabrikam. +When you connect using MySQL Workbench, this is the same value that is used for "Username" in "Parameters". + + +- **Password\*:** Administrator password for Azure DB for MySQL. In case you don’t recall the password you can change the password from [Azure portal](https://docs.microsoft.com/en-us/azure/mysql/howto-create-manage-server-portal). + + + +**Deployment Package** + + +- **Type\*:** Select one of the options between Script File & Inline Script. + + +**Script file:** Use this option if you have a text file that has the necessary SQL statements to be executed on server. + + +- **Script path\*:** Full path of the script file on the automation agent or on a UNC path accessible to the automation agent like, \\BudgetIT\DeployBuilds\script.sql. Also, predefined [system variables](https://msdn.microsoft.com/Library/vs/alm/Build/scripts/variables) like, $(agent.releaseDirectory) can also be used here. + + +- **Additional MySQL options:** Additional options supported by MySQL simple SQL shell. These options will be applied when executing the given file on the Azure DB for MySQL. +Example: You can change to default tab separated output format to HTML or even XML format. Or if you have problems due to insufficient memory for large result sets, use the --quick option. + + +**Inline script:** Use this option for running the Inline Script against the server. + + +- **Inline script\*:** Enter the actuall Script to be run. + + +- **Additional MySQL options:** Additional options supported by MySQL simple SQL shell. These options will be applied when executing the given file on the Azure DB for MySQL. +Example: You can change to default tab separated output format to HTML or even XML format. Or if you have problems due to insufficient memory for large result sets, use the --quick option. + + + +**Firewall** + + +- **Specify firewall rules using\*** : For successful execution of the task, we need to enable administrators to access the Azure Database for MySQL Server from the IP Address of the automation agent. +By selecting auto-detect you can automatically add firewall exception for range of possible IP Address of automation agent +or else you can specify the range explicitly. + + +- **Start IP address\*:** The starting IP Address of the automation agent machine pool like 196.21.30.50. + + +- **End IP address\*:** The ending IP Address of the automation agent machine pool like 196.21.30.65. + + +- **Delete rule after task ends\*:** If selected, the added exception for IP addresses of the automation agent will be removed for corresponding Azure Database for MySQL. diff --git a/_generated/AzureMysqlDeploymentV1/Strings/resources.resjson/de-DE/resources.resjson b/_generated/AzureMysqlDeploymentV1/Strings/resources.resjson/de-DE/resources.resjson new file mode 100644 index 000000000000..c5f6ec3cb606 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1/Strings/resources.resjson/de-DE/resources.resjson @@ -0,0 +1,68 @@ +{ + "loc.friendlyName": "Azure Database for MySQL-Bereitstellung", + "loc.helpMarkDown": "[Weitere Informationen zu dieser Aufgabe](https://aka.ms/mysqlazuredeployreadme)", + "loc.description": "Hiermit werden Skripts ausgeführt und Änderungen an Ihrer Azure Database for MySQL-Instanz vorgenommen.", + "loc.instanceNameFormat": "Azure MySQL ausführen: $(TaskNameSelector)", + "loc.group.displayName.target": "DB-Details", + "loc.group.displayName.taskDetails": "Bereitstellungspaket", + "loc.group.displayName.firewall": "Firewall", + "loc.input.label.ConnectedServiceName": "Azure-Abonnement", + "loc.input.help.ConnectedServiceName": "Dies ist erforderlich, um eine Verbindung mit Ihrem Azure-Konto herzustellen.
Wählen Sie zum Konfigurieren einer neuen Dienstverbindung das Azure-Abonnement aus der Liste aus, und klicken Sie auf \"Autorisieren\".
Wenn Ihr Abonnement nicht aufgeführt ist oder Sie einen vorhandenen Dienstprinzipal verwenden möchten, können Sie über die Schaltfläche \"Hinzufügen\" oder \"Verwalten\" eine Azure-Dienstverbindung einrichten.", + "loc.input.label.ServerName": "Hostname", + "loc.input.help.ServerName": "Der Servername von Azure Database for MySQL. Beispiel: fabrikam.mysql.database.azure.com. Beim Herstellen einer Verbindung mit MySQL Workbench ist dies der gleiche Wert, der unter \"Parameter\" für \"Hostname\" verwendet wird.", + "loc.input.label.DatabaseName": "Datenbankname", + "loc.input.help.DatabaseName": "Der Name der Datenbank (falls bereits vorhanden), für die das unten aufgeführte Skript ausgeführt werden soll. Andernfalls kann das Skript selbst zum Erstellen der Datenbank verwendet werden.", + "loc.input.label.SqlUsername": "Serveradministratoranmeldung", + "loc.input.help.SqlUsername": "Azure-Datenbank für MySQL-Server unterstützt native MySQL-Authentifizierung. Sie können mit der Administratoranmeldung des Servers eine Verbindung mit einem Server herstellen und sich authentifizieren. Beispiel: bbo1@fabrikam. Beim Herstellen einer Verbindung mit MySQL Workbench ist dies der gleiche Wert, der für \"Username\" in \"Parameters\" verwendet wird.", + "loc.input.label.SqlPassword": "Kennwort", + "loc.input.help.SqlPassword": "Das Administratorkennwort für Azure Database for MySQL. Wenn Sie das Kennwort vergessen haben, können Sie das Kennwort im [Azure-Portal](https://docs.microsoft.com/de-de/azure/mysql/howto-create-manage-server-portal) ändern.
Es kann als Variable in der Definition definiert werden. Beispiel: $(password).
Darüber hinaus können Sie den Variablentyp als \"secret\" markieren, um die Variable abzusichern.", + "loc.input.label.TaskNameSelector": "Typ", + "loc.input.help.TaskNameSelector": "Treffen Sie eine Auswahl zwischen \"Skriptdatei\" und \"Inlineskript\".", + "loc.input.label.SqlFile": "MySQL-Skript", + "loc.input.help.SqlFile": "Der vollständige Pfad der Skriptdatei für den Automations-Agent oder ein UNC-Pfad, auf den der Automations-Agent zugreifen kann, z. B. \\\\\\\\\\\\\\\\BudgetIT\\\\DeployBuilds\\\\script.sql. Hier können auch vordefinierte Systemvariablen wie $(agent.releaseDirectory) verwendet werden. Eine Datei mit SQL-Anweisungen kann hier ebenfalls verwendet werden.", + "loc.input.label.SqlInline": "MySQL-Inlineskript", + "loc.input.help.SqlInline": "Geben Sie das MySQL-Skript ein, das für die oben ausgewählte Datenbank ausgeführt werden soll.", + "loc.input.label.SqlAdditionalArguments": "Zusätzliche MySQL-Argumente", + "loc.input.help.SqlAdditionalArguments": "Zusätzliche Optionen werden von der einfachen SQL-Shell von MySQL unterstützt. Diese Optionen werden angewendet, wenn die angegebene Datei in der Azure Database for MySQL-Instanz ausgeführt wird.
Beispiel: Sie können zum separaten Ausgabeformat der Standardregisterkarte, zu HTML oder sogar zum XML-Format wechseln. Wenn aufgrund von unzureichendem Arbeitsspeicher für große Resultsets Probleme auftreten, können Sie auch die Option \"--quick\" verwenden.", + "loc.input.label.IpDetectionMethod": "Firewallregeln angeben mit", + "loc.input.help.IpDetectionMethod": "Damit die Aufgabe erfolgreich ausgeführt wird, müssen Administratoren über die IP-Adresse des Automation-Agents auf den Azure Database for MySQL-Server zugreifen können.
Durch Auswahl der automatischen Erkennung können Sie automatisch eine Firewallausnahme für einen Bereich möglicher IP-Adressen des Automation-Agents hinzufügen. Ansonsten können Sie den Bereich auch explizit angeben.", + "loc.input.label.StartIpAddress": "Start-IP-Adresse", + "loc.input.help.StartIpAddress": "Die IP-Startadresse des Computerpools des Automations-Agents, z. B. 196.21.30.50.", + "loc.input.label.EndIpAddress": "End-IP-Adresse", + "loc.input.help.EndIpAddress": "Die IP-Endadresse des Computerpools des Automations-Agents, z. B. 196.21.30.65.", + "loc.input.label.DeleteFirewallRule": "Regel nach Beendigung des Tasks löschen", + "loc.input.help.DeleteFirewallRule": "Ist die Option aktiviert, wird die hinzugefügte Ausnahme für IP-Adressen des Automation-Agents für die entsprechende Azure Database for MySQL-Instanz entfernt.", + "loc.messages.ARGD_ConstructorFailed": "Fehler beim Initialisieren der Aufgabe. Fehler: %s.", + "loc.messages.FirewallRuleNameCannotBeEmpty": "Der Name der Firewallregel darf nicht NULL sein.", + "loc.messages.FirewallAddressRangeCannotBeEmpty": "Die Firewalladresse darf nicht NULL sein.", + "loc.messages.StartIpAddressCannotBeEmpty": "Die IP-Startadresse der Firewallregel darf nicht NULL sein.", + "loc.messages.EndIpAddressCannotBeEmpty": "Die IP-Endadresse der Firewallregel darf nicht NULL sein.", + "loc.messages.MysqlServerNameCannotBeEmpty": "Der MySQL-Servername darf nicht NULL sein.", + "loc.messages.MysqlFullyQualifiedServerNameCannotBeEmpty": "Der vollständig qualifizierte MySQL-Servername darf nicht NULL sein.", + "loc.messages.ResourceGroupCannotBeEmpty": "Der Ressourcengruppenname darf nicht NULL sein.", + "loc.messages.NotAbleToAddFirewallRule": "Fehler beim Hinzufügen der Firewallregel zum MySQL-Server. Fehler: %s .", + "loc.messages.NotAbleToDeleteFirewallRule": "Fehler beim Löschen der Firewallregel vom MySQL-Server. Fehler: %s.", + "loc.messages.AgentIpAddressIsMissingInAddedFirewallRule": "Die Agent-IP-Adresse ist in der manuell hinzugefügten Firewallregel nicht vorhanden.", + "loc.messages.NotAbleToGetAllServers": "Fehler beim Abrufen aller MySQL-Server eines Abonnements. Fehler: %s.", + "loc.messages.EmptyOrNullServerList": "Die MySQL-Serverliste ist leer. Der MySQL-Serverhostname ist ungültig.", + "loc.messages.UnableToFindResourceGroupDueToNullId": "Die Ressourcengruppe wurde aufgrund einer NULL-ID nicht gefunden.", + "loc.messages.UnableToFindResourceGroupDueToInvalidId": "Die Ressourcengruppe wurde aufgrund einer ungültigen ID nicht gefunden.", + "loc.messages.NotAbleToGetInstalledLocationOfMysqlFromPath": "Der MySQL-Client ist auf dem Agent-Computer nicht vorhanden.", + "loc.messages.UnableToFindMysqlFromRegistryOnMachineError": "MySQL wurde anhand der Registrierung nicht auf dem Computer gefunden.", + "loc.messages.UnableToFindMysqlFromRegistry": "MySQL wurde anhand der Registrierung nicht gefunden. Fehler: %s.", + "loc.messages.UnableToFindTheLocationOfMysqlFromRegistryOnMachineError": "Der MySQL-Standort wurde anhand der Registrierung nicht auf dem Computer gefunden. Fehler: %s.", + "loc.messages.AzureMysqlTaskParameterCannotBeEmpty": "Der Azure MySQL-Aufgabenparameter darf nicht NULL sein.", + "loc.messages.ToolPathCannotBeNull": "Der Toolpfad darf nicht NULL sein.", + "loc.messages.SqlExecutionException": "Ausnahme bei der SQL-Ausführung. Überprüfen Sie das SQL-Skript. Fehler: %s.", + "loc.messages.AzureEndpointCannotBeNull": "Ungültiger Abonnementname. Die Azure-Dienstverbindung darf nicht NULL sein.", + "loc.messages.CallbackCannotBeNull": "Der Rückruf darf nicht NULL sein.", + "loc.messages.UnableToCreateDatabaseException": "Die Datenbank kann nicht erstellt werden.", + "loc.messages.WindowMysqlClientMissingError": "Der MySQL-Client ist auf dem Windows-Agent-Computer nicht vorhanden. Installieren Sie ihn durch Ausführen der Skriptdatei \"https://aka.ms/window-mysqlcli-installer\" des MySQL-Clientinstallers auf dem Agent-Computer.", + "loc.messages.LinuxMysqlClientMissingError": "Der MySQL-Client fehlt auf dem Linux-Agent-Computer. Installieren Sie ihn durch Ausführen von \"sudo apt-get install mysql-client\".", + "loc.messages.CouldNotFetchAccessTokenforAzureStatusCode": "Ein Zugriffstoken für Azure konnte nicht abgerufen werden. Statuscode: %s. Statusmeldung: %s", + "loc.messages.CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "Für den verwalteten Dienstprinzipal konnte kein Zugriffstoken abgerufen werden. Konfigurieren Sie die verwaltete Dienstidentität (MSI) für die VM, siehe https://aka.ms/azure-msi-docs. Weisen Sie der erstellten MSI-Identität eine Rolle zu, siehe https://aka.ms/assign-role-msi. Statuscode: %s. Statusmeldung: %s", + "loc.messages.CouldNotFetchAccessTokenforMSIStatusCode": "Ein Zugriffstoken für den verwalteten Dienstprinzipal konnte nicht abgerufen werden. Statuscode: %s. Statusmeldung: %s", + "loc.messages.NotAbleToCreateFirewallRule": "Fehler beim Hinzufügen der Firewallregel zum Azure MySQL-Server. Fehler: %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.Nopackagefoundwithspecifiedpattern": "Keine Paketdatei mit dem angegebenen Muster gefunden." +} \ No newline at end of file diff --git a/_generated/AzureMysqlDeploymentV1/Strings/resources.resjson/en-US/resources.resjson b/_generated/AzureMysqlDeploymentV1/Strings/resources.resjson/en-US/resources.resjson new file mode 100644 index 000000000000..5e16763f5d21 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1/Strings/resources.resjson/en-US/resources.resjson @@ -0,0 +1,68 @@ +{ + "loc.friendlyName": "Azure Database for MySQL deployment", + "loc.helpMarkDown": "[Learn more about this task](https://aka.ms/mysqlazuredeployreadme)", + "loc.description": "Run your scripts and make changes to your Azure Database for MySQL", + "loc.instanceNameFormat": "Execute Azure MySQL : $(TaskNameSelector)", + "loc.group.displayName.target": "DB Details", + "loc.group.displayName.taskDetails": "Deployment Package", + "loc.group.displayName.firewall": "Firewall", + "loc.input.label.ConnectedServiceName": "Azure Subscription", + "loc.input.help.ConnectedServiceName": "This is needed to connect to your Azure account.
To configure new service connection, select the Azure subscription from the list and click 'Authorize'.
If your subscription is not listed or if you want to use an existing Service Principal, you can setup an Azure service connection using 'Add' or 'Manage' button.", + "loc.input.label.ServerName": "Host Name", + "loc.input.help.ServerName": "Server name of 'Azure Database for MySQL'.Example: fabrikam.mysql.database.azure.com. When you connect using MySQL Workbench, this is the same value that is used for 'Hostname' in 'Parameters'", + "loc.input.label.DatabaseName": "Database Name", + "loc.input.help.DatabaseName": "The name of database, if you already have one, on which the below script is needed to be run, else the script itself can be used to create the database.", + "loc.input.label.SqlUsername": "Server Admin Login", + "loc.input.help.SqlUsername": "Azure Database for MySQL server supports native MySQL authentication. You can connect and authenticate to a server with the server's admin login. Example: bbo1@fabrikam. When you connect using MySQL Workbench, this is the same value that is used for 'Username' in 'Parameters'.", + "loc.input.label.SqlPassword": "Password", + "loc.input.help.SqlPassword": "Administrator password for Azure Database for MySQL. In case you don’t recall the password you can change the password from [Azure portal](https://docs.microsoft.com/en-us/azure/mysql/howto-create-manage-server-portal).
It can be variable defined in the pipeline. Example : $(password).
Also, you may mark the variable type as 'secret' to secure it.", + "loc.input.label.TaskNameSelector": "Type", + "loc.input.help.TaskNameSelector": "Select one of the options between Script File & Inline Script.", + "loc.input.label.SqlFile": "MySQL Script", + "loc.input.help.SqlFile": "Full path of the script file on the automation agent or on a UNC path accessible to the automation agent like, \\\\\\\\BudgetIT\\DeployBuilds\\script.sql. Also, predefined system variables like, $(agent.releaseDirectory) can also be used here. A file containing SQL statements can be used here.​", + "loc.input.label.SqlInline": "Inline MySQL Script", + "loc.input.help.SqlInline": "Enter the MySQL script to execute on the Database selected above.", + "loc.input.label.SqlAdditionalArguments": "Additional MySQL Arguments", + "loc.input.help.SqlAdditionalArguments": "Additional options supported by MySQL simple SQL shell. These options will be applied when executing the given file on the Azure Database for MySQL.​
Example: You can change to default tab separated output format to HTML or even XML format. Or if you have problems due to insufficient memory for large result sets, use the --quick option.​", + "loc.input.label.IpDetectionMethod": "Specify Firewall Rules Using", + "loc.input.help.IpDetectionMethod": "For successful execution of the task, we need to enable administrators to access the Azure Database for MySQL Server from the IP Address of the automation agent.
By selecting auto-detect you can automatically add firewall exception for range of possible IP Address of automation agent ​or else you can specify the range explicitly.", + "loc.input.label.StartIpAddress": "Start IP Address", + "loc.input.help.StartIpAddress": "The starting IP Address of the automation agent machine pool like 196.21.30.50 .", + "loc.input.label.EndIpAddress": "End IP Address", + "loc.input.help.EndIpAddress": "The ending IP Address of the automation agent machine pool like 196.21.30.65 .", + "loc.input.label.DeleteFirewallRule": "Delete Rule After Task Ends", + "loc.input.help.DeleteFirewallRule": "If selected, the added exception for IP addresses of the automation agent will be removed for corresponding Azure Database for MySQL.", + "loc.messages.ARGD_ConstructorFailed": "The task failed while initializing. Error: %s .", + "loc.messages.FirewallRuleNameCannotBeEmpty": "The firewall rule name cannot be null.", + "loc.messages.FirewallAddressRangeCannotBeEmpty": "The firewall address cannot be null.", + "loc.messages.StartIpAddressCannotBeEmpty": "The start IP address of the firewall rule cannot be null.", + "loc.messages.EndIpAddressCannotBeEmpty": "The end IP address of the firewall rule cannot be null.", + "loc.messages.MysqlServerNameCannotBeEmpty": "The MySQL server name cannot be null.", + "loc.messages.MysqlFullyQualifiedServerNameCannotBeEmpty": "The MySQL server fully qualified name cannot be null.", + "loc.messages.ResourceGroupCannotBeEmpty": "The resource group name cannot be null.", + "loc.messages.NotAbleToAddFirewallRule": "An error occurred while adding the firewall rule to the MySQL server. Error: %s .", + "loc.messages.NotAbleToDeleteFirewallRule": "An error occurred while deleting the firewall rule from the MySQL server. Error: %s .", + "loc.messages.AgentIpAddressIsMissingInAddedFirewallRule": "The agent IP address is missing in the manually added firewall rule.", + "loc.messages.NotAbleToGetAllServers": "Failed to retrieve all MySQL servers of a subscription. Error: %s .", + "loc.messages.EmptyOrNullServerList": "The MySQL server list is empty. The MySQL server host name is invalid.", + "loc.messages.UnableToFindResourceGroupDueToNullId": "Unable to find the resource group due to a null ID.", + "loc.messages.UnableToFindResourceGroupDueToInvalidId": "Unable to find the resource group due to an invalid ID.", + "loc.messages.NotAbleToGetInstalledLocationOfMysqlFromPath": "The MySQL client is missing on the agent machine.", + "loc.messages.UnableToFindMysqlFromRegistryOnMachineError": "Unable to find MySQL using the registry on the machine.", + "loc.messages.UnableToFindMysqlFromRegistry": "Unable to find MySQL using the registry. Error: %s .", + "loc.messages.UnableToFindTheLocationOfMysqlFromRegistryOnMachineError": "Unable to find the location of MySQL using the registry on the machine. Error: %s .", + "loc.messages.AzureMysqlTaskParameterCannotBeEmpty": "The Azure MySQL task parameter cannot be null.", + "loc.messages.ToolPathCannotBeNull": "Tool path cannot be null.", + "loc.messages.SqlExecutionException": "A SQL execution exception occurred. Please check the SQL script. Error: %s .", + "loc.messages.AzureEndpointCannotBeNull": "Invalid subscription name. The Azure service connection cannot be null.", + "loc.messages.CallbackCannotBeNull": "The callback cannot be null.", + "loc.messages.UnableToCreateDatabaseException": "Unable to create database.", + "loc.messages.WindowMysqlClientMissingError": "MySQL client is missing on the Windows agent machine. Please install it by running the MySQL client installer 'https://aka.ms/window-mysqlcli-installer' script file on the agent machine.", + "loc.messages.LinuxMysqlClientMissingError": "MySQL client is missing on the Linux agent machine. Please install it by running 'sudo apt-get install mysql-client'.", + "loc.messages.CouldNotFetchAccessTokenforAzureStatusCode": "Could not retrieve an access token for Azure. Status code: %s. Status message: %s", + "loc.messages.CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "Could not retrieve an access token for the managed service principal. Please configure Managed Service Identity (MSI) for the virtual machine. See 'https://aka.ms/azure-msi-docs'.Assign role to created MSI Identity. See 'https://aka.ms/assign-role-msi'. Status code: %s. Status message: %s", + "loc.messages.CouldNotFetchAccessTokenforMSIStatusCode": "Could not retrieve an access token for the managed service principal. Status code: %s. Status message: %s", + "loc.messages.NotAbleToCreateFirewallRule": "Getting error during adding firewall rule to Azure mysql server. Error: %s", + "loc.messages.ExpiredServicePrincipal": "Could not fetch access token for Azure. Verify if the Service Principal used is valid and not expired.", + "loc.messages.Nopackagefoundwithspecifiedpattern": "No package found with specified pattern" +} \ No newline at end of file diff --git a/_generated/AzureMysqlDeploymentV1/Strings/resources.resjson/es-ES/resources.resjson b/_generated/AzureMysqlDeploymentV1/Strings/resources.resjson/es-ES/resources.resjson new file mode 100644 index 000000000000..6bca285586f1 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1/Strings/resources.resjson/es-ES/resources.resjson @@ -0,0 +1,68 @@ +{ + "loc.friendlyName": "Implementación de Azure Database for MySQL", + "loc.helpMarkDown": "[Obtener más información acerca de esta tarea](https://aka.ms/mysqlazuredeployreadme)", + "loc.description": "Ejecute los scripts y realice cambios en Azure Database for MySQL.", + "loc.instanceNameFormat": "Ejecutar Azure MySQL : $(TaskNameSelector)", + "loc.group.displayName.target": "Detalles de BD", + "loc.group.displayName.taskDetails": "Paquete de implementación", + "loc.group.displayName.firewall": "Firewall", + "loc.input.label.ConnectedServiceName": "Suscripción a Azure", + "loc.input.help.ConnectedServiceName": "Esto se necesita para conectar con su cuenta de Azure.
Para configurar una nueva conexión de servicio, seleccione la suscripción de Azure en la lista y haga clic en \"Autorizar\".
Si la suscripción no aparece en la lista o quiere usar una entidad de servicio existente, puede configurar la conexión del servicio de Azure con el botón \"Agregar\" o \"Administrar\".", + "loc.input.label.ServerName": "Nombre de host", + "loc.input.help.ServerName": "Nombre del servidor de \"Azure Database for MySQL\". Ejemplo: fabrikam.mysql.database.azure.com. Cuando se conecta mediante MySQL Workbench, este es el mismo valor que se usa para \"Nombre de host\" en \"Parámetros\"", + "loc.input.label.DatabaseName": "Nombre de la base de datos", + "loc.input.help.DatabaseName": "El nombre de la base de datos, si ya dispone de una, en la que es necesario ejecutar el script siguiente; de lo contrario, el propio script se puede usar para crear la base de datos.", + "loc.input.label.SqlUsername": "Inicio de sesión del administrador del servidor", + "loc.input.help.SqlUsername": "El servidor de Azure Database for MySQL admite la autenticación de MySQL nativa. Puede conectarse y autenticarse en un servidor con el inicio de sesión de administrador del servidor. Ejemplo: bbo1@fabrikam. Cuando se conecta mediante MySQL Workbench, este es el mismo valor que se usa para \"Nombre de usuario\" en \"Parámetros\".", + "loc.input.label.SqlPassword": "Contraseña", + "loc.input.help.SqlPassword": "Contraseña del administrador para Azure Database for MySQL. En caso de que no recuerde la contraseña, puede cambiarla en [Azure Portal](https://docs.microsoft.com/en-us/azure/mysql/howto-create-manage-server-portal).
Puede definirse por variable en la canalización. Ejemplo: $(password).
Asimismo, puede marcar el tipo de variable como \"secret\" para protegerlo.", + "loc.input.label.TaskNameSelector": "Tipo", + "loc.input.help.TaskNameSelector": "Seleccione una de las opciones entre Archivo de script y Script alineado.", + "loc.input.label.SqlFile": "Script de MySQL", + "loc.input.help.SqlFile": "Ruta de acceso completa del archivo de script en el agente de automatización o en una ruta de acceso UNC accesible para el agente de automatización, como \\\\\\\\BudgetIT\\DeployBuilds\\script.sql. Además, las variables de sistema predefinidas, como $(agent.releaseDirectory), también se pueden usar aquí. Se puede usar además un archivo que contenga instrucciones SQL.", + "loc.input.label.SqlInline": "Script de MySQL en línea", + "loc.input.help.SqlInline": "Especifique el script de MySQL que debe ejecutarse en la base de datos seleccionada.", + "loc.input.label.SqlAdditionalArguments": "Argumentos adicionales de MySQL", + "loc.input.help.SqlAdditionalArguments": "Más opciones admitidas por un shell de SQL sencillo de MySQL. Estas opciones se aplicarán al ejecutar el archivo especificado en Azure Database para MySQL.
Ejemplo: Puede cambiar al formato de salida predeterminado separado por tabulaciones en formato HTML o incluso XML. O si tiene problemas provocados por una cantidad de memoria insuficiente para grandes conjuntos de resultados, use la opción --quick.", + "loc.input.label.IpDetectionMethod": "Especificar las reglas de firewall con", + "loc.input.help.IpDetectionMethod": "Para la ejecución correcta de la tarea, es necesario que los administradores tengan acceso al servidor de Azure Database for MySQL desde la dirección IP del agente de automatización.
Al seleccionar la detección automática es posible agregar automáticamente una excepción de firewall para el intervalo de posibles direcciones IP del agente de automatización, si bien puede especificar el intervalo explícitamente.", + "loc.input.label.StartIpAddress": "Dirección IP inicial", + "loc.input.help.StartIpAddress": "Dirección IP inicial del grupo de máquinas del agente de automatización, como 196.21.30.50.", + "loc.input.label.EndIpAddress": "Dirección IP final", + "loc.input.help.EndIpAddress": "Dirección IP final del grupo de máquinas del agente de automatización, como 196.21.30.65.", + "loc.input.label.DeleteFirewallRule": "Eliminar la regla al finalizar la tarea", + "loc.input.help.DeleteFirewallRule": "Si se selecciona, la excepción agregada para las direcciones IP del agente de automatización se quitará de la instancia correspondiente de Azure Database for MySQL.", + "loc.messages.ARGD_ConstructorFailed": "Error al inicializar la tarea: %s.", + "loc.messages.FirewallRuleNameCannotBeEmpty": "El nombre de la regla de firewall no puede ser un valor null.", + "loc.messages.FirewallAddressRangeCannotBeEmpty": "La dirección del firewall no puede ser un valor null.", + "loc.messages.StartIpAddressCannotBeEmpty": "La dirección IP de inicio de la regla de firewall no puede ser un valor null.", + "loc.messages.EndIpAddressCannotBeEmpty": "La dirección IP final de la regla de firewall no puede ser un valor null.", + "loc.messages.MysqlServerNameCannotBeEmpty": "El nombre del servidor MySQL no puede ser un valor null.", + "loc.messages.MysqlFullyQualifiedServerNameCannotBeEmpty": "El nombre completo del servidor MySQL no puede ser un valor null.", + "loc.messages.ResourceGroupCannotBeEmpty": "El nombre del grupo de recursos no puede ser un valor null.", + "loc.messages.NotAbleToAddFirewallRule": "Error al agregar la regla de firewall para el servidor MySQL. Error: %s.", + "loc.messages.NotAbleToDeleteFirewallRule": "Error al eliminar la regla de firewall del servidor MySQL. Error: %s.", + "loc.messages.AgentIpAddressIsMissingInAddedFirewallRule": "Falta la dirección IP del agente en la regla de firewall agregada manualmente.", + "loc.messages.NotAbleToGetAllServers": "No se pudieron recuperar todos los servidores de MySQL de una suscripción. Error: %s.", + "loc.messages.EmptyOrNullServerList": "La lista de servidores MySQL está vacía. El nombre de host del servidor MySQL no es válido.", + "loc.messages.UnableToFindResourceGroupDueToNullId": "No se puede encontrar el grupo de recursos porque el id. es un valor nulo.", + "loc.messages.UnableToFindResourceGroupDueToInvalidId": "No se puede encontrar el grupo de recursos porque el id. no es válido.", + "loc.messages.NotAbleToGetInstalledLocationOfMysqlFromPath": "Falta el cliente de MySQL en la máquina del agente.", + "loc.messages.UnableToFindMysqlFromRegistryOnMachineError": "No se puede encontrar MySQL usando el registro en la máquina.", + "loc.messages.UnableToFindMysqlFromRegistry": "No se puede encontrar MySQL usando el registro. Error: %s.", + "loc.messages.UnableToFindTheLocationOfMysqlFromRegistryOnMachineError": "No se puede encontrar la ubicación de MySQL usando el registro en la máquina. Error: %s.", + "loc.messages.AzureMysqlTaskParameterCannotBeEmpty": "El parámetro de la tarea de Azure MySQL no puede ser null.", + "loc.messages.ToolPathCannotBeNull": "La ruta de acceso de herramientas no puede ser null.", + "loc.messages.SqlExecutionException": "Se produjo una excepción de ejecución de SQL. Compruebe el script SQL. Error: %s.", + "loc.messages.AzureEndpointCannotBeNull": "Nombre de la suscripción no válido. La conexión del servicio de Azure no puede ser null.", + "loc.messages.CallbackCannotBeNull": "La devolución de llamada no puede ser null.", + "loc.messages.UnableToCreateDatabaseException": "No se puede crear la base de datos.", + "loc.messages.WindowMysqlClientMissingError": "Falta el cliente de MySQL en el equipo del agente de Windows. Instálelo ejecutando el archivo de script \"https://aka.ms/window-mysqlcli-installer\" del instalador del cliente MySQL en la máquina del agente.", + "loc.messages.LinuxMysqlClientMissingError": "Falta el cliente de MySQL en el equipo del agente de Linux. Instálelo ejecutando \"sudo apt-get install mysql-client\".", + "loc.messages.CouldNotFetchAccessTokenforAzureStatusCode": "No se pudo recuperar un token de acceso para Azure. Código de estado: %s. Mensaje de estado: %s", + "loc.messages.CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "No se pudo recuperar un token de acceso para la entidad de servicio administrado. Configure Managed Service Identity (MSI) para la máquina virtual. Consulte \"https://aka.ms/azure-msi-docs\". Asigne un rol a la identidad MSI que se ha creado. Consulte \"https://aka.ms/assign-role-msi\". Código de estado: %s. Mensaje de estado: %s", + "loc.messages.CouldNotFetchAccessTokenforMSIStatusCode": "No se pudo recuperar un token de acceso para la entidad de servicio administrado. Código de estado: %s. Mensaje de estado: %s", + "loc.messages.NotAbleToCreateFirewallRule": "Error al agregar la regla de firewall al servidor MySQL de Azure: %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.Nopackagefoundwithspecifiedpattern": "No se encontró ningún paquete con el patrón especificado" +} \ No newline at end of file diff --git a/_generated/AzureMysqlDeploymentV1/Strings/resources.resjson/fr-FR/resources.resjson b/_generated/AzureMysqlDeploymentV1/Strings/resources.resjson/fr-FR/resources.resjson new file mode 100644 index 000000000000..1a971a770826 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1/Strings/resources.resjson/fr-FR/resources.resjson @@ -0,0 +1,68 @@ +{ + "loc.friendlyName": "Déploiement d'Azure Database pour MySQL", + "loc.helpMarkDown": "[En savoir plus sur cette tâche](https://aka.ms/mysqlazuredeployreadme)", + "loc.description": "Exécuter des scripts et apporter des changements au service Azure Database pour MySQL", + "loc.instanceNameFormat": "Exécuter Azure MySQL : $(TaskNameSelector)", + "loc.group.displayName.target": "Détails de DB", + "loc.group.displayName.taskDetails": "Package de déploiement", + "loc.group.displayName.firewall": "Pare-feu", + "loc.input.label.ConnectedServiceName": "Abonnement Azure", + "loc.input.help.ConnectedServiceName": "Ceci est nécessaire pour vous connecter à votre compte Azure.
Pour configurer la nouvelle connexion de service, sélectionnez l'abonnement Azure dans la liste, puis cliquez sur Autoriser.
Si votre abonnement n'est pas listé, ou si vous souhaitez utiliser un principal du service existant, vous pouvez configurer une connexion de service Azure à l'aide du bouton Ajouter ou Gérer.", + "loc.input.label.ServerName": "Nom d'hôte", + "loc.input.help.ServerName": "Nom de serveur 'Azure Database pour MySQL'. Exemple : fabrikam.mysql.database.azure.com. Quand vous vous connectez à l'aide de MySQL Workbench, cette valeur est la même que celle utilisée pour Nom d'hôte dans Paramètres", + "loc.input.label.DatabaseName": "Nom de la base de données", + "loc.input.help.DatabaseName": "Nom de la base de données, si vous en avez déjà une, sur laquelle le script ci-dessous doit être exécuté. Sinon, vous pouvez utiliser le script lui-même pour créer la base de données.", + "loc.input.label.SqlUsername": "Connexion administrateur au serveur", + "loc.input.help.SqlUsername": "Le serveur Azure Database pour MySQL prend en charge l'authentification MySQL native. Vous pouvez vous connecter et vous authentifier auprès d'un serveur à l'aide de la connexion d'administrateur du serveur. Exemple : bbo1@fabrikam. Quand vous vous connectez à l'aide de MySQL Workbench, cette valeur est la même que celle utilisée pour Nom d'utilisateur dans Paramètres.", + "loc.input.label.SqlPassword": "Mot de passe", + "loc.input.help.SqlPassword": "Mot de passe administrateur d'Azure Database pour MySQL. Si vous oubliez le mot de passe, vous pouvez le changer sur le [Portail Azure](https://docs.microsoft.com/fr-fr/azure/mysql/howto-create-manage-server-portal).
Vous pouvez le définir à l'aide d'une variable dans le pipeline. Exemple : $(password).
Vous pouvez également marquer la variable comme étant de type 'secret' pour la sécuriser.", + "loc.input.label.TaskNameSelector": "Type", + "loc.input.help.TaskNameSelector": "Sélectionnez l'une des options situées entre Fichier de script et Script inline.", + "loc.input.label.SqlFile": "Script MySQL", + "loc.input.help.SqlFile": "Chemin complet du fichier de script sur l'agent Automation ou dans un chemin UNC auquel cet agent a accès, par exemple \\\\\\\\BudgetIT\\DeployBuilds\\script.sql. Vous pouvez également utiliser des variables système prédéfinies telles que $(agent.releaseDirectory). Vous pouvez utiliser ici un fichier contenant des instructions SQL.​", + "loc.input.label.SqlInline": "Script MySQL inline", + "loc.input.help.SqlInline": "Entrez le script MySQL à exécuter dans la base de données sélectionnée ci-dessus.", + "loc.input.label.SqlAdditionalArguments": "Arguments MySQL supplémentaires", + "loc.input.help.SqlAdditionalArguments": "Options supplémentaires prises en charge par l'interpréteur de commandes SQL simple MySQL. Ces options sont appliquées durant l'exécution du fichier donné sur Azure Database pour MySQL.​
Exemple : Vous pouvez passer au format de sortie par défaut avec séparation des valeurs par des tabulations, au format HTML, ou même au format XML. Si vous rencontrez des problèmes liés à une insuffisance de mémoire pour les jeux de résultats volumineux, utilisez l'option --quick.​", + "loc.input.label.IpDetectionMethod": "Spécifier les règles de pare-feu à l'aide de", + "loc.input.help.IpDetectionMethod": "Pour que la tâche soit exécutée correctement, nous devons permettre aux administrateurs d'accéder à Azure Database pour MySQL Server à partir de l'adresse IP de l'agent Automation.
En sélectionnant la détection automatique, vous pouvez ajouter automatiquement une exception de pare-feu pour une plage d'adresses IP possibles de l'agent Automation. Sinon, vous pouvez spécifier la plage de manière explicite.", + "loc.input.label.StartIpAddress": "Adresse IP de début", + "loc.input.help.StartIpAddress": "Adresse IP de début du pool de machines de l'agent Automation (par exemple, 196.21.30.50).", + "loc.input.label.EndIpAddress": "Adresse IP de fin", + "loc.input.help.EndIpAddress": "Adresse IP de fin du pool de machines de l'agent Automation (par exemple, 196.21.30.65).", + "loc.input.label.DeleteFirewallRule": "Supprimer la règle une fois la tâche terminée", + "loc.input.help.DeleteFirewallRule": "Si cette option est sélectionnée, l'exception ajoutée pour les adresses IP de l'agent Automation est supprimée du service Azure Database pour MySQL correspondant.", + "loc.messages.ARGD_ConstructorFailed": "Échec de la tâche durant l'initialisation. Erreur : %s.", + "loc.messages.FirewallRuleNameCannotBeEmpty": "Le nom de la règle de pare-feu ne doit pas avoir une valeur null.", + "loc.messages.FirewallAddressRangeCannotBeEmpty": "L'adresse du pare-feu ne doit pas avoir une valeur null.", + "loc.messages.StartIpAddressCannotBeEmpty": "L'adresse IP de début de la règle de pare-feu ne doit pas avoir une valeur null.", + "loc.messages.EndIpAddressCannotBeEmpty": "L'adresse IP de fin de la règle de pare-feu ne doit pas avoir une valeur null.", + "loc.messages.MysqlServerNameCannotBeEmpty": "Le nom du serveur MySQL ne doit pas avoir une valeur null.", + "loc.messages.MysqlFullyQualifiedServerNameCannotBeEmpty": "Le nom complet du serveur MySQL ne doit pas avoir une valeur null.", + "loc.messages.ResourceGroupCannotBeEmpty": "Le nom du groupe de ressources ne doit pas avoir une valeur null.", + "loc.messages.NotAbleToAddFirewallRule": "Une erreur s'est produite durant l'ajout de la règle de pare-feu au serveur MySQL. Erreur : %s.", + "loc.messages.NotAbleToDeleteFirewallRule": "Une erreur s'est produite durant la suppression de la règle de pare-feu du serveur MySQL. Erreur : %s.", + "loc.messages.AgentIpAddressIsMissingInAddedFirewallRule": "L'adresse IP de l'agent est manquante dans la règle de pare-feu ajoutée manuellement.", + "loc.messages.NotAbleToGetAllServers": "Échec de la récupération de tous les serveurs MySQL d'un abonnement. Erreur : %s.", + "loc.messages.EmptyOrNullServerList": "La liste de serveurs MySQL est vide. Le nom d'hôte du serveur MySQL est non valide.", + "loc.messages.UnableToFindResourceGroupDueToNullId": "Le groupe de ressources est introuvable en raison d'un ID ayant une valeur null.", + "loc.messages.UnableToFindResourceGroupDueToInvalidId": "Le groupe de ressources est introuvable en raison d'un ID non valide.", + "loc.messages.NotAbleToGetInstalledLocationOfMysqlFromPath": "Le client MySQL est manquant sur la machine d'agent.", + "loc.messages.UnableToFindMysqlFromRegistryOnMachineError": "MySQL est introuvable à l'aide du Registre sur la machine.", + "loc.messages.UnableToFindMysqlFromRegistry": "MySQL est introuvable à l'aide du Registre. Erreur : %s.", + "loc.messages.UnableToFindTheLocationOfMysqlFromRegistryOnMachineError": "L'emplacement de MySQL est introuvable à l'aide du Registre sur la machine. Erreur : %s.", + "loc.messages.AzureMysqlTaskParameterCannotBeEmpty": "Le paramètre de tâche Azure MySQL ne doit pas avoir une valeur null.", + "loc.messages.ToolPathCannotBeNull": "Le chemin de l'outil ne doit pas avoir une valeur null.", + "loc.messages.SqlExecutionException": "Une exception d'exécution SQL s'est produite. Vérifiez le script SQL. Erreur : %s.", + "loc.messages.AzureEndpointCannotBeNull": "Nom d'abonnement non valide. La connexion de service Azure ne doit pas avoir une valeur null.", + "loc.messages.CallbackCannotBeNull": "Le rappel ne doit pas avoir une valeur null.", + "loc.messages.UnableToCreateDatabaseException": "Impossible de créer la base de données.", + "loc.messages.WindowMysqlClientMissingError": "Le client MySQL est manquant sur la machine de l'agent Windows. Installez-le en exécutant le fichier de script 'https://aka.ms/window-mysqlcli-installer' du programme d'installation du client MySQL sur la machine d'agent.", + "loc.messages.LinuxMysqlClientMissingError": "Le client MySQL est manquant sur la machine de l'agent Linux. Installez-le en exécutant 'sudo apt-get install mysql-client'.", + "loc.messages.CouldNotFetchAccessTokenforAzureStatusCode": "Impossible de récupérer un jeton d'accès pour Azure. Code d'état : %s. Message d'état : %s", + "loc.messages.CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "Impossible de récupérer un jeton d'accès pour le principal de service managé. Configurez MSI (Managed Service Identity) pour la machine virtuelle. Consultez 'https://aka.ms/azure-msi-docs'. Attribuez un rôle à l'identité MSI créée. Consultez 'https://aka.ms/assign-role-msi'. Code d'état : %s. Message d'état : %s", + "loc.messages.CouldNotFetchAccessTokenforMSIStatusCode": "Impossible de récupérer un jeton d'accès pour le principal de service managé. Code d'état : %s. Message d'état : %s", + "loc.messages.NotAbleToCreateFirewallRule": "Obtention d'une erreur durant l'ajout d'une règle de pare-feu au serveur Azure MySQL. Erreur : %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.Nopackagefoundwithspecifiedpattern": "Package introuvable avec le modèle spécifié" +} \ No newline at end of file diff --git a/_generated/AzureMysqlDeploymentV1/Strings/resources.resjson/it-IT/resources.resjson b/_generated/AzureMysqlDeploymentV1/Strings/resources.resjson/it-IT/resources.resjson new file mode 100644 index 000000000000..05efb736c278 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1/Strings/resources.resjson/it-IT/resources.resjson @@ -0,0 +1,68 @@ +{ + "loc.friendlyName": "Distribuzione di Database di Azure per MySQL", + "loc.helpMarkDown": "[Altre informazioni su questa attività](https://aka.ms/mysqlazuredeployreadme)", + "loc.description": "Consente di eseguire gli script e di apportare modifiche all'istanza di Database di Azure per MySQL", + "loc.instanceNameFormat": "Esegui attività MySQL di Azure: $(TaskNameSelector)", + "loc.group.displayName.target": "Dettagli del database", + "loc.group.displayName.taskDetails": "Pacchetto di distribuzione", + "loc.group.displayName.firewall": "Firewall", + "loc.input.label.ConnectedServiceName": "Sottoscrizione di Azure", + "loc.input.help.ConnectedServiceName": "Questa opzione è necessaria per connettersi all'account Azure.
Per configurare la nuova connessione al servizio, selezionare la sottoscrizione di Azure nell'elenco e fare clic su 'Autorizza'.
Se la sottoscrizione non è inclusa nell'elenco o si vuole usare un'entità servizio esistente, è possibile configurare una connessione al servizio di Azure usando il pulsante 'Aggiungi' o 'Gestisci'.", + "loc.input.label.ServerName": "Nome host", + "loc.input.help.ServerName": "Nome del server di 'Database di Azure per MySQL', ad esempio fabrikam.mysql.database.azure.com. Quando ci si connette tramite MySQL Workbench, questo è lo stesso valore usato per 'Nome host' in 'Parametri'.", + "loc.input.label.DatabaseName": "Nome database", + "loc.input.help.DatabaseName": "Nome del database, se già disponibile, su cui è necessario eseguire lo script seguente. In caso contrario, è possibile usare lo script stesso per creare il database.", + "loc.input.label.SqlUsername": "Account di accesso amministratore server", + "loc.input.help.SqlUsername": "Il server di Database di Azure per MySQL supporta l'autenticazione MySQL nativa. È possibile connettersi ed eseguire l'autenticazione a un server con l'account di accesso amministratore del server, ad esempio bbo1@fabrikam. Quando ci si connette tramite MySQL Workbench, questo è lo stesso valore usato per 'Nome host' in 'Parametri'.", + "loc.input.label.SqlPassword": "Password", + "loc.input.help.SqlPassword": "Password dell'amministratore di Database di Azure per MySQL. Se non si ricorda la password, è possibile modificarla dal [portale di Azure](https://docs.microsoft.com/it-it/azure/mysql/howto-create-manage-server-portal).
Può essere la variabile definita nella pipeline, ad esempio $(password).
È anche possibile contrassegnare il tipo di variabile come 'secret' per proteggerlo.", + "loc.input.label.TaskNameSelector": "Tipo", + "loc.input.help.TaskNameSelector": "Selezionare una delle opzioni tra File di script e Script inline.", + "loc.input.label.SqlFile": "Script MySQL", + "loc.input.help.SqlFile": "Percorso completo del file di script nell'agente di automazione o in un percorso UNC accessibile all'agente di automazione, come \\\\\\\\BudgetIT\\DeployBuilds\\script.sql. È anche possibile usare variabili di sistema predefinite, come $(agent.releaseDirectory), nonché un file contenente istruzioni SQL.", + "loc.input.label.SqlInline": "Script MySQL inline", + "loc.input.help.SqlInline": "Immettere lo script MySQL da eseguire sul database selezionato in precedenza.", + "loc.input.label.SqlAdditionalArguments": "Argomenti aggiuntivi di MySQL", + "loc.input.help.SqlAdditionalArguments": "Opzioni aggiuntive supportate dalla shell semplice di SQL, MySQL. Queste opzioni verranno applicate durante l'esecuzione del file specificato in Database di Azure per MySQL.
Esempio: è possibile modificare in HTML o persino in formato XML il formato di output predefinito delimitato da tabulazioni. Se si riscontrano problemi causati da memoria insufficiente per set di risultati di grandi dimensioni, usare l'opzione --quick.", + "loc.input.label.IpDetectionMethod": "Specifica regole del firewall tramite", + "loc.input.help.IpDetectionMethod": "Per la corretta esecuzione dell'attività, è necessario consentire agli amministratori di accedere a Database di Azure per MySQL dall'indirizzo IP dell'agente di automazione.
Se si seleziona il rilevamento automatico, è possibile aggiungere automaticamente l'eccezione del firewall per l'intervallo di indirizzi IP possibili dell'agente di automazione; in alternativa, è possibile specificare l'intervallo in modo esplicito.", + "loc.input.label.StartIpAddress": "Indirizzo IP iniziale", + "loc.input.help.StartIpAddress": "Indirizzo IP iniziale del pool di computer dell'agente di automazione, ad esempio 196.21.30.50.", + "loc.input.label.EndIpAddress": "Indirizzo IP finale", + "loc.input.help.EndIpAddress": "Indirizzo IP finale del pool di computer dell'agente di automazione, ad esempio 196.21.30.65.", + "loc.input.label.DeleteFirewallRule": "Elimina regola al termine dell'attività", + "loc.input.help.DeleteFirewallRule": "Se l'opzione è selezionata, l'eccezione aggiunta per gli indirizzi IP dell'agente di automazione verrà rimossa per l'istanza corrispondente di Database di Azure per MySQL.", + "loc.messages.ARGD_ConstructorFailed": "L'attività non è riuscita durante l'inizializzazione. Errore: %s.", + "loc.messages.FirewallRuleNameCannotBeEmpty": "Il nome della regola del firewall non può essere Null.", + "loc.messages.FirewallAddressRangeCannotBeEmpty": "L'indirizzo del firewall non può essere Null.", + "loc.messages.StartIpAddressCannotBeEmpty": "L'indirizzo IP iniziale della regola del firewall non può essere Null.", + "loc.messages.EndIpAddressCannotBeEmpty": "L'indirizzo IP finale della regola del firewall non può essere Null.", + "loc.messages.MysqlServerNameCannotBeEmpty": "Il nome del server MySQL non può essere Null.", + "loc.messages.MysqlFullyQualifiedServerNameCannotBeEmpty": "Il nome completo del server MySQL non può essere Null.", + "loc.messages.ResourceGroupCannotBeEmpty": "Il nome del gruppo di risorse non può essere Null.", + "loc.messages.NotAbleToAddFirewallRule": "Si è verificato un errore durante l'aggiunta della regola del firewall al server MySQL. Errore: %s.", + "loc.messages.NotAbleToDeleteFirewallRule": "Si è verificato un errore durante l'eliminazione della regola del firewall dal server MySQL. Errore: %s.", + "loc.messages.AgentIpAddressIsMissingInAddedFirewallRule": "L'indirizzo IP dell'agente non è presente nella regola del firewall aggiunta manualmente.", + "loc.messages.NotAbleToGetAllServers": "Non è stato possibile recuperare tutti i server MySQL di una sottoscrizione. Errore: %s.", + "loc.messages.EmptyOrNullServerList": "L'elenco dei server MySQL è vuoto. Il nome host del server MySQL non è valido.", + "loc.messages.UnableToFindResourceGroupDueToNullId": "Non è possibile trovare il gruppo di risorse a causa di un ID Null.", + "loc.messages.UnableToFindResourceGroupDueToInvalidId": "Non è possibile trovare il gruppo di risorse a causa di un ID non valido.", + "loc.messages.NotAbleToGetInstalledLocationOfMysqlFromPath": "Il client MySQL non è presente nel computer agente.", + "loc.messages.UnableToFindMysqlFromRegistryOnMachineError": "Non è possibile trovare MySQL usando il Registro di sistema nel computer.", + "loc.messages.UnableToFindMysqlFromRegistry": "Non è possibile trovare MySQL usando il Registro di sistema. Errore: %s.", + "loc.messages.UnableToFindTheLocationOfMysqlFromRegistryOnMachineError": "Non è possibile trovare il percorso di MySQL usando il Registro di sistema nel computer. Errore: %s.", + "loc.messages.AzureMysqlTaskParameterCannotBeEmpty": "Il parametro dell'attività MySQL di Azure non può essere Null.", + "loc.messages.ToolPathCannotBeNull": "Il percorso dello strumento non può essere Null.", + "loc.messages.SqlExecutionException": "Si è verificata un'eccezione di esecuzione SQL. Controllare lo script SQL. Errore: %s.", + "loc.messages.AzureEndpointCannotBeNull": "Il nome della sottoscrizione non è valido. La connessione al servizio di Azure non può essere Null.", + "loc.messages.CallbackCannotBeNull": "Il callback non può essere Null.", + "loc.messages.UnableToCreateDatabaseException": "Non è possibile creare il database.", + "loc.messages.WindowMysqlClientMissingError": "Il client MySQL non è presente nel computer agente Windows. Per installarlo, eseguire il file di script 'https://aka.ms/window-mysqlcli-installer' del programma di installazione del client MySQL nel computer agente.", + "loc.messages.LinuxMysqlClientMissingError": "Il client MySQL non è presente nel computer agente Linux. Per installarlo, eseguire 'sudo apt-get install mysql-client'.", + "loc.messages.CouldNotFetchAccessTokenforAzureStatusCode": "Non è stato possibile recuperare un token di accesso per Azure. Codice di stato: %s. Messaggio di stato: %s", + "loc.messages.CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "Non è stato possibile recuperare un token di accesso per l'entità servizio gestita. Configurare l'identità del servizio gestita per la macchina virtuale. Vedere 'https://aka.ms/azure-msi-docs'. Assegnare il ruolo all'identità del servizio gestita creata. Vedere 'https://aka.ms/assign-role-msi'. Codice di stato: %s. Messaggio di stato: %s", + "loc.messages.CouldNotFetchAccessTokenforMSIStatusCode": "Non è stato possibile recuperare un token di accesso per l'entità servizio gestita. Codice di stato: %s. Messaggio di stato: %s", + "loc.messages.NotAbleToCreateFirewallRule": "Si è verificato un errore durante l'aggiunta della regola del firewall al server MySQL di Azure. Errore: %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.Nopackagefoundwithspecifiedpattern": "Non è stato trovato alcun pacchetto con il criterio specificato" +} \ No newline at end of file diff --git a/_generated/AzureMysqlDeploymentV1/Strings/resources.resjson/ja-JP/resources.resjson b/_generated/AzureMysqlDeploymentV1/Strings/resources.resjson/ja-JP/resources.resjson new file mode 100644 index 000000000000..339b0bce1549 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1/Strings/resources.resjson/ja-JP/resources.resjson @@ -0,0 +1,68 @@ +{ + "loc.friendlyName": "Azure Database for MySQL のデプロイ", + "loc.helpMarkDown": "[このタスクの詳細を表示](https://aka.ms/mysqlazuredeployreadme)", + "loc.description": "スクリプトを実行し、Azure Database for MySQL に変更を加えます", + "loc.instanceNameFormat": "Azure MySQL を実行します : $(TaskNameSelector)", + "loc.group.displayName.target": "DB の詳細", + "loc.group.displayName.taskDetails": "配置パッケージ", + "loc.group.displayName.firewall": "ファイアウォール", + "loc.input.label.ConnectedServiceName": "Azure サブスクリプション", + "loc.input.help.ConnectedServiceName": "これは、お使いの Azure アカウントに接続するために必要です。
新しいサービス接続を構成するには、一覧から Azure サブスクリプションを選択して、[承認] をクリックします。
サブスクリプションが一覧にない場合、または既存のサービス プリンシパルを使用する場合は、[追加] ボタンまたは [管理] ボタンを使用して Azure サービス接続をセットアップすることができます。", + "loc.input.label.ServerName": "ホスト名", + "loc.input.help.ServerName": "'Azure Database for MySQL' のサーバー名です。例: fabrikam.mysql.database.azure.com。MySQL Workbench を使用して接続する場合、これは 'パラメーター' 内の 'ホスト名' に使用する値と同じです", + "loc.input.label.DatabaseName": "データベース名 ", + "loc.input.help.DatabaseName": "以下のスクリプトを実行する必要のあるデータベースが既にある場合は、その名前。それ以外の場合は、スクリプト自体を使用してデータベースを作成できます。", + "loc.input.label.SqlUsername": "サーバー管理者ログイン", + "loc.input.help.SqlUsername": "MySQL サーバー用の Azure データベースは、MySQL のネイティブ認証をサポートします。サーバーの管理者ログインを使ってサーバーに接続し、認証できます。例: bbo1@fabrikam。MySQL Workbench を使用して接続する場合、これは 'パラメーター' 内の 'ユーザー名' で使用されるものと同じ値になります。", + "loc.input.label.SqlPassword": "パスワード", + "loc.input.help.SqlPassword": "Azure Database for MySQL の管理者パスワードです。パスワードを忘れた場合は、[Azure portal](https://docs.microsoft.com/ja-jp/azure/mysql/howto-create-manage-server-portal) でパスワードを変更できます。
これは、パイプラインで定義した変数にすることができます。例: $(password)。
また、変数の型を 'シークレット' とマークしてセキュリティで保護することもできます。", + "loc.input.label.TaskNameSelector": "種類", + "loc.input.help.TaskNameSelector": "スクリプト ファイルまたはインライン スクリプトのいずれかのオプションを選択します。", + "loc.input.label.SqlFile": "MySQL スクリプト", + "loc.input.help.SqlFile": "自動化エージェント上のスクリプト ファイルの完全なパス、または \\\\\\\\BudgetIT\\DeployBuilds\\script.sql などの自動化エージェントにアクセス可能な UNC パス。また、$(agent.releaseDirectory) などの定義済みのシステム変数をここで使用するとこもできます。SQL ステートメントを含むファイルは、ここで使用できます。", + "loc.input.label.SqlInline": "インライン MySQL スクリプト", + "loc.input.help.SqlInline": "上で選択したデータベースに対して実行する MySQL スクリプトを入力します。", + "loc.input.label.SqlAdditionalArguments": "追加の MySQL 引数", + "loc.input.help.SqlAdditionalArguments": "MySQL の簡単な SQL シェルでサポートされている追加オプション。これらのオプションは、指定されたファイルを MySQL 用の Azure データベースに対して実行するときに適用されます。
例: 既定のタブ区切り出力形式を HTML 形式に、あるいは XML 形式にさえ変更できます。メモリが不十分なために大きな結果セットで問題が生じる場合、--quick オプションを使用できます。", + "loc.input.label.IpDetectionMethod": "次を使用して、ファイアウォール ルールを指定します", + "loc.input.help.IpDetectionMethod": "タスクを正常に実行するには、自動化エージェントの IP アドレスから Azure Database for MySQL サーバーにアクセスすることを管理者に許可する必要があります。
自動検出を選択すれば、自動化エージェントの IP アドレスになり得る範囲をファイアウォールの例外に自動的に追加できます。あるいは、明示的に範囲を指定することもできます。", + "loc.input.label.StartIpAddress": "開始 IP アドレス", + "loc.input.help.StartIpAddress": "自動化エージェントのコンピューター プールの開始 IP アドレス (196.21.30.50 など)。", + "loc.input.label.EndIpAddress": "終了 IP アドレス", + "loc.input.help.EndIpAddress": "自動化エージェントのコンピューター プールの最終 IP アドレス (196.21.30.65 など)。", + "loc.input.label.DeleteFirewallRule": "タスク終了後、ルールを削除します", + "loc.input.help.DeleteFirewallRule": "選択されている場合、追加された自動化エージェントの IP アドレスの例外は、対応する Azure Database for MySQL に対して除外されます。", + "loc.messages.ARGD_ConstructorFailed": "初期化中にタスクが失敗しました。エラー: %s", + "loc.messages.FirewallRuleNameCannotBeEmpty": "ファイアウォール規則名を null 値にすることはできません。", + "loc.messages.FirewallAddressRangeCannotBeEmpty": "ファイアウォール アドレスを null 値にすることはできません。", + "loc.messages.StartIpAddressCannotBeEmpty": "ファイアウォール規則の開始 IP アドレスを null 値にすることはできません。", + "loc.messages.EndIpAddressCannotBeEmpty": "ファイアウォール規則の終了 IP アドレスを null 値にすることはできません。", + "loc.messages.MysqlServerNameCannotBeEmpty": "MySQL サーバー名を null にすることはできません。", + "loc.messages.MysqlFullyQualifiedServerNameCannotBeEmpty": "MySQL サーバーの完全修飾名を null 値にすることはできません。", + "loc.messages.ResourceGroupCannotBeEmpty": "リソース グループ名を null 値にすることはできません。", + "loc.messages.NotAbleToAddFirewallRule": "MySQL サーバーにファイアウォール ルールを追加している間にエラーが発生しました。エラー: %s。", + "loc.messages.NotAbleToDeleteFirewallRule": "MySQL サーバーからファイアウォール ルールを削除している間にエラーが発生しました。エラー: %s。", + "loc.messages.AgentIpAddressIsMissingInAddedFirewallRule": "エージェントの IP アドレスが、手動で追加されたファイアウォール規則にありません。", + "loc.messages.NotAbleToGetAllServers": "サブスクリプションのすべての MySQL サーバーを取得することに失敗しました。エラー: %s。", + "loc.messages.EmptyOrNullServerList": "MySQL サーバーのリストが空です。MySQL サーバーのホスト名が無効です。", + "loc.messages.UnableToFindResourceGroupDueToNullId": "ID が null のため、リソース グループが見つかりません。", + "loc.messages.UnableToFindResourceGroupDueToInvalidId": "ID が無効なため、リソース グループが見つかりません。", + "loc.messages.NotAbleToGetInstalledLocationOfMysqlFromPath": "MySQL クライアントがエージェント マシンにありません。", + "loc.messages.UnableToFindMysqlFromRegistryOnMachineError": "マシン上のレジストリを使用して MySQL を見つけることができません。", + "loc.messages.UnableToFindMysqlFromRegistry": "レジストリを使用して MySQL を見つけることができません。エラー: %s。", + "loc.messages.UnableToFindTheLocationOfMysqlFromRegistryOnMachineError": "マシン上のレジストリを使用して MySQL の場所を見つけることができません。エラー: %s。", + "loc.messages.AzureMysqlTaskParameterCannotBeEmpty": "Azure MySQL タスク パラメーターを null 値にすることはできません。", + "loc.messages.ToolPathCannotBeNull": "ツール パスを null にすることはできません。", + "loc.messages.SqlExecutionException": "SQL 実行の例外が発生しました。SQL スクリプトをご確認ください。エラー: %s。", + "loc.messages.AzureEndpointCannotBeNull": "無効なサブスクリプション名。Azure サービス接続を null 値にすることはできません。", + "loc.messages.CallbackCannotBeNull": "コールバックを null にすることはできません。", + "loc.messages.UnableToCreateDatabaseException": "データベースを作成できません。", + "loc.messages.WindowMysqlClientMissingError": "MySQL クライアントが Windows エージェント マシンにありません。エージェント マシンで MySQL クライアント インストーラー 'https://aka.ms/window-mysqlcli-installer' スクリプト ファイルを実行して、そのクライアントをインストールしてください。", + "loc.messages.LinuxMysqlClientMissingError": "MySQL クライアントが Linux エージェント マシンにありません。'sudo apt-get install mysql-client' を実行して、そのクライアントをインストールしてください。", + "loc.messages.CouldNotFetchAccessTokenforAzureStatusCode": "Azure 用のアクセス トークンを取得できませんでした。状態コード: %s。状態メッセージ: %s", + "loc.messages.CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "マネージド サービス プリンシパルのためのアクセス トークンを取得できませんでした。仮想マシンに対してマネージド サービス ID (MSI) を構成してください。'https://aka.ms/azure-msi-docs' をご覧ください。作成された MSI ID にロールを割り当ててください。'https://aka.ms/assign-role-msi' をご覧ください。状態コード: %s。状態メッセージ: %s", + "loc.messages.CouldNotFetchAccessTokenforMSIStatusCode": "マネージド サービス プリンシパルのアクセス トークンを取得できませんでした。状態コード: %s。状態メッセージ: %s", + "loc.messages.NotAbleToCreateFirewallRule": "ファイアウォール規則を Azure MySql サーバーに追加する際にエラーが発生しました。エラー: %s", + "loc.messages.ExpiredServicePrincipal": "Azure のアクセス トークンをフェッチできませんでした。使用されているサービス プリンシパルが有効であり、有効期限が切れていないことを確認してください。", + "loc.messages.Nopackagefoundwithspecifiedpattern": "指定したパターンのパッケージが見つかりませんでした" +} \ No newline at end of file diff --git a/_generated/AzureMysqlDeploymentV1/Strings/resources.resjson/ko-KR/resources.resjson b/_generated/AzureMysqlDeploymentV1/Strings/resources.resjson/ko-KR/resources.resjson new file mode 100644 index 000000000000..02b07bceab72 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1/Strings/resources.resjson/ko-KR/resources.resjson @@ -0,0 +1,68 @@ +{ + "loc.friendlyName": "Azure Database for MySQL 배포", + "loc.helpMarkDown": "[이 작업에 대한 자세한 정보](https://aka.ms/mysqlazuredeployreadme)", + "loc.description": "스크립트를 실행하고 Azure Database for MySQL을 변경합니다.", + "loc.instanceNameFormat": "Azure MySQL 실행: $(TaskNameSelector)", + "loc.group.displayName.target": "DB 정보", + "loc.group.displayName.taskDetails": "배포 패키지", + "loc.group.displayName.firewall": "방화벽", + "loc.input.label.ConnectedServiceName": "Azure 구독", + "loc.input.help.ConnectedServiceName": "Azure 계정에 연결하는 데 필요합니다.
새 서비스 연결을 구성하려면 목록에서 Azure 구독을 선택하고 '권한 부여'를 클릭합니다.
구독이 목록에 없거나 기존 서비스 주체를 사용하려는 경우 '추가' 또는 '관리' 단추를 사용하여 Azure 서비스 연결을 설정할 수 있습니다.", + "loc.input.label.ServerName": "호스트 이름", + "loc.input.help.ServerName": "'Azure Database for MySQL'의 서버 이름입니다. 예: fabrikam.mysql.database.azure.com. MySQL Workbench를 사용하여 연결하는 경우 '매개 변수'의 'Hostname'에 사용되는 값과 같습니다.", + "loc.input.label.DatabaseName": "데이터베이스 이름", + "loc.input.help.DatabaseName": "아래 스크립트를 실행해야 하는 데이터베이스 이름입니다(이미 있는 경우). 데이터베이스가 없는 경우 스크립트 자체를 사용하여 데이터베이스를 만들 수 있습니다.", + "loc.input.label.SqlUsername": "서버 관리자 로그인", + "loc.input.help.SqlUsername": "Azure Database for MySQL 서버는 네이티브 MySQL 인증을 지원합니다. 서버 관리자 로그인으로 서버에 연결하고 인증할 수 있습니다. 예: bbo1@fabrikam. MySQL Workbench를 사용하여 연결하는 경우 '매개 변수'의 'Username'에 사용되는 값과 같습니다.", + "loc.input.label.SqlPassword": "암호", + "loc.input.help.SqlPassword": "Azure Database for MySQL의 관리자 암호입니다. 암호가 기억나지 않는 경우 [Azure Portal](https://docs.microsoft.com/en-us/azure/mysql/howto-create-manage-server-portal)에서 암호를 변경할 수 있습니다.
파이프라인에서 정의된 변수일 수 있습니다. 예: $(password).
변수 형식을 '비밀'로 표시하여 보호할 수도 있습니다.", + "loc.input.label.TaskNameSelector": "유형", + "loc.input.help.TaskNameSelector": "스크립트 파일과 인라인 스크립트 옵션 중 하나를 선택합니다.", + "loc.input.label.SqlFile": "MySQL 스크립트", + "loc.input.help.SqlFile": "자동화 에이전트 또는 자동화 에이전트가 액세스할 수 있는 UNC 경로에 있는 스크립트 파일의 전체 경로입니다(예: \\\\\\\\BudgetIT\\DeployBuilds\\script.sql). $(agent.releaseDirectory) 등의 미리 정의된 시스템 변수를 여기서 사용할 수도 있습니다. SQL 문이 포함된 파일을 여기서 사용할 수 있습니다.", + "loc.input.label.SqlInline": "인라인 MySQL 스크립트", + "loc.input.help.SqlInline": "위에서 선택한 데이터베이스에 대해 실행할 MySQL 스크립트를 입력합니다.", + "loc.input.label.SqlAdditionalArguments": "MySQL 추가 인수", + "loc.input.help.SqlAdditionalArguments": "MySQL 단순 SQL 셸에서 지원하는 추가 옵션입니다. 이러한 옵션은 Azure Database for MySQL에서 지정된 파일을 실행할 때 적용됩니다.
예: 탭으로 구분된 기본 출력 형식을 HTML 또는 XML 형식으로 변경할 수 있습니다. 또는 대량의 결과 집합에 사용할 메모리가 부족하여 문제가 발생하는 경우 --quick 옵션을 사용합니다.", + "loc.input.label.IpDetectionMethod": "방화벽 규칙 지정 방법", + "loc.input.help.IpDetectionMethod": "작업을 성공적으로 실행하려면 관리자가 자동화 에이전트의 IP 주소에서 Azure Database for MySQL 서버에 액세스할 수 있도록 설정해야 합니다.
자동 검색을 선택하면 자동화 에이전트의 가능한 IP 주소 범위에 적용할 방화벽 예외를 자동으로 추가할 수 있으며, 선택하지 않을 경우 범위를 명시적으로 지정할 수 있습니다.", + "loc.input.label.StartIpAddress": "시작 IP 주소", + "loc.input.help.StartIpAddress": "자동화 에이전트 머신 풀의 시작 IP 주소입니다(예: 196.21.30.50).", + "loc.input.label.EndIpAddress": "끝 IP 주소", + "loc.input.help.EndIpAddress": "자동화 에이전트 머신 풀의 마지막 IP 주소입니다(예: 196.21.30.65).", + "loc.input.label.DeleteFirewallRule": "작업 종료 후 규칙 삭제", + "loc.input.help.DeleteFirewallRule": "선택하면, 해당 Azure Database for MySQL에 대해 추가된 자동화 에이전트의 IP 주소 예외가 제거됩니다.", + "loc.messages.ARGD_ConstructorFailed": "초기화 중 작업에 실패했습니다. 오류: %s.", + "loc.messages.FirewallRuleNameCannotBeEmpty": "방화벽 규칙 이름은 null일 수 없습니다.", + "loc.messages.FirewallAddressRangeCannotBeEmpty": "방화벽 주소는 null일 수 없습니다.", + "loc.messages.StartIpAddressCannotBeEmpty": "방화벽 규칙의 시작 IP 주소는 null일 수 없습니다.", + "loc.messages.EndIpAddressCannotBeEmpty": "방화벽 규칙의 마지막 IP 주소는 null일 수 없습니다.", + "loc.messages.MysqlServerNameCannotBeEmpty": "MySQL 서버 이름은 null일 수 없습니다.", + "loc.messages.MysqlFullyQualifiedServerNameCannotBeEmpty": "MySQL 서버의 정규화된 이름은 null일 수 없습니다.", + "loc.messages.ResourceGroupCannotBeEmpty": "리소스 그룹 이름은 null일 수 없습니다.", + "loc.messages.NotAbleToAddFirewallRule": "MySQL 서버에 방화벽 규칙을 추가하는 중 오류가 발생했습니다. 오류: %s.", + "loc.messages.NotAbleToDeleteFirewallRule": "MySQL 서버에서 방화벽 규칙을 삭제하는 중 오류가 발생했습니다. 오류: %s.", + "loc.messages.AgentIpAddressIsMissingInAddedFirewallRule": "수동으로 추가된 방화벽 규칙에 에이전트 IP 주소가 없습니다.", + "loc.messages.NotAbleToGetAllServers": "구독의 일부 MySQL 서버를 검색하지 못했습니다. 오류: %s.", + "loc.messages.EmptyOrNullServerList": "MySQL 서버 목록이 비어 있습니다. MySQL 서버 호스트 이름이 잘못되었습니다.", + "loc.messages.UnableToFindResourceGroupDueToNullId": "null ID로 인해 리소스 그룹을 찾을 수 없습니다.", + "loc.messages.UnableToFindResourceGroupDueToInvalidId": "잘못된 ID로 인해 리소스 그룹을 찾을 수 없습니다.", + "loc.messages.NotAbleToGetInstalledLocationOfMysqlFromPath": "MySQL 클라이언트가 에이전트 머신에 없습니다.", + "loc.messages.UnableToFindMysqlFromRegistryOnMachineError": "머신의 레지스트리를 사용하여 MySQL을 찾을 수 없습니다.", + "loc.messages.UnableToFindMysqlFromRegistry": "레지스트리를 사용하여 MySQL을 찾을 수 없습니다. 오류: %s.", + "loc.messages.UnableToFindTheLocationOfMysqlFromRegistryOnMachineError": "머신의 레지스트리를 사용하여 MySQL의 위치를 찾을 수 없습니다. 오류: %s.", + "loc.messages.AzureMysqlTaskParameterCannotBeEmpty": "Azure MySQL 작업 매개 변수는 null일 수 없습니다.", + "loc.messages.ToolPathCannotBeNull": "도구 경로는 null일 수 없습니다.", + "loc.messages.SqlExecutionException": "SQL 실행 예외가 발생했습니다. SQL 스크립트를 확인하세요. 오류: %s.", + "loc.messages.AzureEndpointCannotBeNull": "잘못된 구독 이름입니다. Azure 서비스 연결은 null일 수 없습니다.", + "loc.messages.CallbackCannotBeNull": "콜백은 null일 수 없습니다.", + "loc.messages.UnableToCreateDatabaseException": "데이터베이스를 만들 수 없습니다.", + "loc.messages.WindowMysqlClientMissingError": "MySQL 클라이언트가 Windows 에이전트 머신에 없습니다. 에이전트 머신에서 MySQL 클라이언트 설치 관리자 'https://aka.ms/window-mysqlcli-installer' 스크립트 파일을 실행하여 설치하세요.", + "loc.messages.LinuxMysqlClientMissingError": "MySQL 클라이언트가 Linux 에이전트 머신에 없습니다. 'sudo apt-get install mysql-client'를 실행하여 설치하세요.", + "loc.messages.CouldNotFetchAccessTokenforAzureStatusCode": "Azure의 액세스 토큰을 검색할 수 없습니다. 상태 코드: %s. 상태 메시지: %s", + "loc.messages.CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "관리 서비스 주체의 액세스 토큰을 검색할 수 없습니다. 가상 머신의 MSI(관리 서비스 ID)를 구성하세요. 'https://aka.ms/azure-msi-docs'를 참조하세요. 만든 MSI ID에 역할을 할당하세요. 'https://aka.ms/assign-role-msi'를 참조하세요. 상태 코드: %s. 상태 메시지: %s", + "loc.messages.CouldNotFetchAccessTokenforMSIStatusCode": "관리 서비스 주체의 액세스 토큰을 검색할 수 없습니다. 상태 코드: %s. 상태 메시지: %s", + "loc.messages.NotAbleToCreateFirewallRule": "Azure MySQL 서버에 방화벽 규칙을 추가하는 중 오류가 발생했습니다. 오류: %s", + "loc.messages.ExpiredServicePrincipal": "Azure의 액세스 토큰을 페치할 수 없습니다. 사용한 서비스 주체가 유효하고 만료되지 않았는지 확인하세요.", + "loc.messages.Nopackagefoundwithspecifiedpattern": "지정된 패턴의 패키지를 찾을 수 없습니다" +} \ No newline at end of file diff --git a/_generated/AzureMysqlDeploymentV1/Strings/resources.resjson/ru-RU/resources.resjson b/_generated/AzureMysqlDeploymentV1/Strings/resources.resjson/ru-RU/resources.resjson new file mode 100644 index 000000000000..36853fd8d2a8 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1/Strings/resources.resjson/ru-RU/resources.resjson @@ -0,0 +1,68 @@ +{ + "loc.friendlyName": "Развертывание базы данных Azure для MySQL", + "loc.helpMarkDown": "[См. дополнительные сведения об этой задаче](https://aka.ms/mysqlazuredeployreadme)", + "loc.description": "Выполняйте скрипты и вносите изменения в базу данных Azure для MySQL", + "loc.instanceNameFormat": "Выполнить Azure MySQL: $(TaskNameSelector)", + "loc.group.displayName.target": "Сведения о базе данных", + "loc.group.displayName.taskDetails": "Пакет развертывания", + "loc.group.displayName.firewall": "Брандмауэр", + "loc.input.label.ConnectedServiceName": "Подписка Azure", + "loc.input.help.ConnectedServiceName": "Это необходимо для подключения к учетной записи Azure.
Чтобы настроить новое подключение к службе, выберите подписку Azure в списке и щелкните \"Авторизовать\".
Если ваша подписка не указана в списке или вы хотите использовать существующий субъект-службу, можно настроить подключение к службе Azure с помощью кнопки \"Добавить\" или \"Управление\".", + "loc.input.label.ServerName": "Имя узла", + "loc.input.help.ServerName": "Имя сервера \"База данных Azure для MySQL\". Пример: fabrikam.mysql.database.azure.com. При подключении с помощью MySQL Workbench это то же значение, которое используется как \"Имя узла\" в разделе \"Параметры\"", + "loc.input.label.DatabaseName": "Имя базы данных", + "loc.input.help.DatabaseName": "Имя базы данных (при наличии), в которой требуется выполнить указанный ниже скрипт. В противном случае сам скрипт можно использовать для создания базы данных.", + "loc.input.label.SqlUsername": "Имя для входа администратора сервера", + "loc.input.help.SqlUsername": "База данных Azure для сервера MySQL поддерживает собственную проверку подлинности MySQL. Вы можете подключиться и выполнить проверку подлинности на сервере, используя имя для входа администратора этого сервера. Пример: bbo1@fabrikam. При подключении с помощью MySQL Workbench это то же значение, которое используется как \"Имя пользователя\" в разделе \"Параметры\".", + "loc.input.label.SqlPassword": "Пароль", + "loc.input.help.SqlPassword": "Пароль администратора для Базы данных Azure для MySQL. Если вы забыли пароль, его можно сменить на [портале Azure](https://docs.microsoft.com/ru-ru/azure/mysql/howto-create-manage-server-portal).
Это может быть переменная, определенная в конвейере. Пример: $(password).
Кроме того, тип переменной можно пометить как secret, чтобы защитить ее.", + "loc.input.label.TaskNameSelector": "Тип", + "loc.input.help.TaskNameSelector": "Выберите один из вариантов: \"Файл скрипта\" или \"Встроенный скрипт\".", + "loc.input.label.SqlFile": "Скрипт MySQL", + "loc.input.help.SqlFile": "Полный путь к файлу скрипта на компьютере агента автоматизации или UNC-путь, доступный для агента автоматизации, например \\\\\\\\BudgetIT\\DeployBuilds\\script.sql. Кроме того, здесь можно использовать предопределенные системные переменные, например $(agent.releaseDirectory). Здесь можно использовать файл, содержащий инструкции SQL.​", + "loc.input.label.SqlInline": "Встроенный скрипт MySQL", + "loc.input.help.SqlInline": "Введите скрипт MySQL для выполнения в базе данных, выбранной выше.", + "loc.input.label.SqlAdditionalArguments": "Дополнительные аргументы MySQL", + "loc.input.help.SqlAdditionalArguments": "Дополнительные параметры, поддерживаемые простой оболочкой SQL для MySQL. Эти параметры будут применяться при выполнении данного файла в Базе данных Azure для MySQL.​
Пример: вы можете изменить формат вывода на формат по умолчанию с разделением знаками табуляции, на формат HTML или даже XML. Если в случае с большими результирующими наборами возникают проблемы из-за нехватки памяти, используйте параметр --quick.​", + "loc.input.label.IpDetectionMethod": "Указать правила брандмауэра с помощью", + "loc.input.help.IpDetectionMethod": "Для успешного выполнения задачи нам необходимо разрешить администраторам доступ к Базе данных Azure для сервера MySQL с IP-адреса агента автоматизации.
Выбрав автоматическое обнаружение, можно автоматически добавить исключение брандмауэра для диапазона возможных IP-адресов агента автоматизации. Диапазон можно также задать явным образом.", + "loc.input.label.StartIpAddress": "Начальный IP-адрес", + "loc.input.help.StartIpAddress": "Начальный IP-адрес пула компьютеров агента автоматизации, например 196.21.30.50.", + "loc.input.label.EndIpAddress": "Конечный IP-адрес", + "loc.input.help.EndIpAddress": "Последний IP-адрес пула компьютеров агента автоматизации, например 196.21.30.65.", + "loc.input.label.DeleteFirewallRule": "Удалить правило после завершения задачи", + "loc.input.help.DeleteFirewallRule": "При выборе этого параметра исключение, добавленное для IP-адресов агента автоматизации, будет удалено для соответствующей Базы данных Azure для MySQL.", + "loc.messages.ARGD_ConstructorFailed": "Сбой при инициализации задачи. Ошибка: %s.", + "loc.messages.FirewallRuleNameCannotBeEmpty": "Имя правила брандмауэра не может иметь значение NULL.", + "loc.messages.FirewallAddressRangeCannotBeEmpty": "Адрес брандмауэра не может иметь значение NULL.", + "loc.messages.StartIpAddressCannotBeEmpty": "Начальный IP-адрес правила брандмауэра не может иметь значение NULL.", + "loc.messages.EndIpAddressCannotBeEmpty": "Конечный IP-адрес правила брандмауэра не может иметь значение NULL.", + "loc.messages.MysqlServerNameCannotBeEmpty": "Имя сервера MySQL не может иметь значение NULL.", + "loc.messages.MysqlFullyQualifiedServerNameCannotBeEmpty": "Полное имя сервера MySQL не может иметь значение NULL.", + "loc.messages.ResourceGroupCannotBeEmpty": "Имя группы ресурсов не может иметь значение NULL.", + "loc.messages.NotAbleToAddFirewallRule": "Произошла ошибка при добавлении правила брандмауэра на сервер MySQL. Ошибка: %s.", + "loc.messages.NotAbleToDeleteFirewallRule": "Произошла ошибка при удалении правила брандмауэра с сервера MySQL. Ошибка: %s.", + "loc.messages.AgentIpAddressIsMissingInAddedFirewallRule": "IP-адрес агента отсутствует во вручную добавленном правиле брандмауэра.", + "loc.messages.NotAbleToGetAllServers": "Не удалось получить все серверы MySQL из подписки. Ошибка: %s.", + "loc.messages.EmptyOrNullServerList": "Список серверов MySQL пуст. Недопустимое имя узла сервера MySQL.", + "loc.messages.UnableToFindResourceGroupDueToNullId": "Не удалось найти группу ресурсов из-за идентификатора со значением NULL.", + "loc.messages.UnableToFindResourceGroupDueToInvalidId": "Не удалось найти группу ресурсов из-за недопустимого идентификатора.", + "loc.messages.NotAbleToGetInstalledLocationOfMysqlFromPath": "Клиент MySQL отсутствует на компьютере агента.", + "loc.messages.UnableToFindMysqlFromRegistryOnMachineError": "Не удается найти MySQL с помощью реестра на компьютере.", + "loc.messages.UnableToFindMysqlFromRegistry": "Не удается найти MySQL с помощью реестра. Ошибка: %s.", + "loc.messages.UnableToFindTheLocationOfMysqlFromRegistryOnMachineError": "Не удается найти расположение MySQL с помощью реестра на компьютере. Ошибка: %s.", + "loc.messages.AzureMysqlTaskParameterCannotBeEmpty": "Параметр задачи Azure MySQL не может иметь значение NULL.", + "loc.messages.ToolPathCannotBeNull": "Путь к средству не может иметь значение NULL.", + "loc.messages.SqlExecutionException": "При выполнении SQL произошло исключение. Проверьте скрипт SQL. Ошибка: %s.", + "loc.messages.AzureEndpointCannotBeNull": "Недопустимое имя подписки. Подключение к службе Azure не может иметь значение NULL.", + "loc.messages.CallbackCannotBeNull": "Обратный вызов не может иметь значение NULL.", + "loc.messages.UnableToCreateDatabaseException": "Не удается создать базу данных.", + "loc.messages.WindowMysqlClientMissingError": "Клиент MySQL отсутствует на компьютере агента Windows. Установите его, запустив файл скрипта https://aka.ms/window-mysqlcli-installer установщика клиента MySQL на компьютере агента.", + "loc.messages.LinuxMysqlClientMissingError": "Клиент MySQL отсутствует на компьютере агента Linux. Установите его, выполнив команду sudo apt-get install mysql-client.", + "loc.messages.CouldNotFetchAccessTokenforAzureStatusCode": "Не удалось получить маркер доступа для Azure. Код состояния: %s. Сообщение о состоянии: %s", + "loc.messages.CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "Не удалось получить маркер доступа для управляемого субъекта-службы. Настройте Управляемое удостоверение службы (MSI) для виртуальной машины. См. страницу https://aka.ms/azure-msi-docs. Назначьте роль созданному удостоверению MSI. См. страницу https://aka.ms/assign-role-msi. Код состояния: %s. Сообщение о состоянии: %s", + "loc.messages.CouldNotFetchAccessTokenforMSIStatusCode": "Не удалось получить маркер доступа для управляемого субъекта-службы. Код состояния: %s. Сообщение о состоянии: %s", + "loc.messages.NotAbleToCreateFirewallRule": "Сбой при добавлении правила брандмауэра на сервере MySQL Azure. Ошибка: %s", + "loc.messages.ExpiredServicePrincipal": "Не удалось получить маркер доступа для Azure. Убедитесь, что используемый субъект-служба является допустимым, а срок его действия не истек.", + "loc.messages.Nopackagefoundwithspecifiedpattern": "Пакет с указанным шаблоном не найден" +} \ No newline at end of file diff --git a/_generated/AzureMysqlDeploymentV1/Strings/resources.resjson/zh-CN/resources.resjson b/_generated/AzureMysqlDeploymentV1/Strings/resources.resjson/zh-CN/resources.resjson new file mode 100644 index 000000000000..ad5b44086f4d --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1/Strings/resources.resjson/zh-CN/resources.resjson @@ -0,0 +1,68 @@ +{ + "loc.friendlyName": "Azure Database for MySQL 部署", + "loc.helpMarkDown": "[详细了解此任务](https://aka.ms/mysqlazuredeployreadme)", + "loc.description": "运行脚本并对 Azure Database for MySQL 进行更改", + "loc.instanceNameFormat": "执行 Azure SQL: $(TaskNameSelector)", + "loc.group.displayName.target": "DB 详细信息", + "loc.group.displayName.taskDetails": "部署程序包", + "loc.group.displayName.firewall": "防火墙", + "loc.input.label.ConnectedServiceName": "Azure 订阅", + "loc.input.help.ConnectedServiceName": "这是连接到 Azure 帐户所必需的。
要配置新的服务连接,请从列表中选择 Azure 订阅,然后单击“授权”。
如果自己的订阅未列出,或若要使用现有服务主体,可使用“添加”或“管理”按钮设置 Azure 服务连接。", + "loc.input.label.ServerName": "主机名", + "loc.input.help.ServerName": "\"Azure Database for MySQL\" 的服务器名称。例如: fabrikam.mysql.database.azure.com。使用 MySQL 工作台进行连接时,该值与“参数”中的“用户名”所用的值相同", + "loc.input.label.DatabaseName": "数据库名", + "loc.input.help.DatabaseName": "数据库的名称。如果已有数据库,则需要在该数据库上运行以下脚本。否则,可使用脚本本身创建数据库。", + "loc.input.label.SqlUsername": "服务器管理员登录名", + "loc.input.help.SqlUsername": "Azure Database for MySQL 服务器支持本机 MySQL 身份验证。可以使用服务器的管理员登录名连接服务器并向服务器进行身份验证。例如: bbo1@fabrikam。使用 Mysql 工作台连接时,该值与“参数”中的“用户名”使用的值相同。", + "loc.input.label.SqlPassword": "密码", + "loc.input.help.SqlPassword": "Azure Database for MySQL 的管理员密码。如果忘记密码,可以通过[Azure 门户](https://docs.microsoft.com/en-us/azure/mysql/howto-create-manage-server-portal)更改密码。
密码可为管道中定义的变量。示例: $(password)。
此外,还可以将该变量类型标记为“机密”以保护变量。", + "loc.input.label.TaskNameSelector": "类型", + "loc.input.help.TaskNameSelector": "选择“脚本文件”与“内联脚本”中的一个选项。", + "loc.input.label.SqlFile": "MySQL 脚本", + "loc.input.help.SqlFile": "自动化代理上的或可访问自动化代理的 UNC 路径上的脚本文件的完整路径,如 \\\\\\\\\\\\\\\\BudgetIT\\\\DeployBuilds\\\\script.sql。此外,还可在此处使用预定义的系统变量 ,如 $(agent.releaseDirectory)。可在此处使用包含 SQL 语句的文件。", + "loc.input.label.SqlInline": "内联 MySQL 脚本", + "loc.input.help.SqlInline": "输入要在上方所选的数据库上执行的 MySQL 脚本。", + "loc.input.label.SqlAdditionalArguments": "其他 MySQL 参数", + "loc.input.help.SqlAdditionalArguments": "MySQL 简单 SQL shell 支持的其他选项。在 Azure Database for MySQL 上执行给定文件时,将应用这些选项。
示例: 可以将默认选项卡分隔的输出格式更改为 HTML 甚至 XML 格式。或者,如果由于大型结果集的内存不足而出现问题,请使用 --快速选项。", + "loc.input.label.IpDetectionMethod": "使用以下方法指定防火墙规则", + "loc.input.help.IpDetectionMethod": "为了成功执行任务,管理员需能够从自动化代理的 IP 地址访问 Azure Database for MySQL 服务器。
通过选择自动检测,可以自动为可能的自动化代理 IP 地址范围添加防火墙例外,或者可以显式指定范围。", + "loc.input.label.StartIpAddress": "起始 IP 地址", + "loc.input.help.StartIpAddress": "自动化代理计算机池的起始 IP 地址,如 196.21.30.50。", + "loc.input.label.EndIpAddress": "结束 IP 地址", + "loc.input.help.EndIpAddress": "自动化代理计算机池的结束 IP 地址,如 196.21.30.65。", + "loc.input.label.DeleteFirewallRule": "在任务结束后删除规则", + "loc.input.help.DeleteFirewallRule": "如果选中,将为相应的 Azure Database for MySQL 删除添加的自动化代理 IP 地址例外。", + "loc.messages.ARGD_ConstructorFailed": "初始化时任务失败。错误: %s。", + "loc.messages.FirewallRuleNameCannotBeEmpty": "防火墙规则名称不能为 null。", + "loc.messages.FirewallAddressRangeCannotBeEmpty": "防火墙地址不能为 null。", + "loc.messages.StartIpAddressCannotBeEmpty": "防火墙规则的起始 IP 地址不能为 null。", + "loc.messages.EndIpAddressCannotBeEmpty": "防火墙规则的结束 IP 地址不能为 null。", + "loc.messages.MysqlServerNameCannotBeEmpty": "MySQL 服务器名称不能为 null。", + "loc.messages.MysqlFullyQualifiedServerNameCannotBeEmpty": "MySQL 服务器的完全限定名称不能为 null。", + "loc.messages.ResourceGroupCannotBeEmpty": "资源组名称不能为 null。", + "loc.messages.NotAbleToAddFirewallRule": "将防火墙规则添加到 MySQL 服务器时出错。错误: %s。", + "loc.messages.NotAbleToDeleteFirewallRule": "从 MySQL 服务器中删除防火墙规则时出错。错误: %s。", + "loc.messages.AgentIpAddressIsMissingInAddedFirewallRule": "手动添加的防火墙规则中缺少代理 IP 地址。", + "loc.messages.NotAbleToGetAllServers": "无法检索订阅的所有 MySQL 服务器。错误: %s。", + "loc.messages.EmptyOrNullServerList": "MySQL 服务器列表为空。MySQL 服务器主机名无效。", + "loc.messages.UnableToFindResourceGroupDueToNullId": "由于 ID 为 null,无法找到资源组。", + "loc.messages.UnableToFindResourceGroupDueToInvalidId": "由于 ID 无效,无法找到资源组。", + "loc.messages.NotAbleToGetInstalledLocationOfMysqlFromPath": "代理计算机上缺少 MySQL 客户端。", + "loc.messages.UnableToFindMysqlFromRegistryOnMachineError": "无法使用计算机上的注册表找到 MySQL。", + "loc.messages.UnableToFindMysqlFromRegistry": "无法使用注册表找到 MySQL。错误: %s。", + "loc.messages.UnableToFindTheLocationOfMysqlFromRegistryOnMachineError": "无法使用计算机上的注册表找到 MySQL 的位置。错误: %s。", + "loc.messages.AzureMysqlTaskParameterCannotBeEmpty": "Azure MySQL 任务参数不能为 null。", + "loc.messages.ToolPathCannotBeNull": "工具路径不能为 null。", + "loc.messages.SqlExecutionException": "发生 SQL 执行异常。请检查 SQL 脚本。错误: %s。", + "loc.messages.AzureEndpointCannotBeNull": "无效的订阅名称。Azure 服务连接不能为 null。", + "loc.messages.CallbackCannotBeNull": "回调不能为空。", + "loc.messages.UnableToCreateDatabaseException": "无法创建数据库。", + "loc.messages.WindowMysqlClientMissingError": "Windows 代理计算机上缺少 MySQL 客户端。请通过运行代理计算机上的 MySQL 客户端安装程序 \"https://aka.ms/window-mysqlcli-installer\" 脚本文件来安装它。", + "loc.messages.LinuxMysqlClientMissingError": "Linux 代理计算机上缺少 MySQL 客户端。请通过运行 \"sudo apt-get install mysql-client\" 来安装它。", + "loc.messages.CouldNotFetchAccessTokenforAzureStatusCode": "无法检索 Azure 的访问令牌。状态代码: %s。状态消息: %s", + "loc.messages.CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "无法检索托管服务主体的访问令牌。请为虚拟机配置托管服务标识(MSI)。请参阅 \"https://aka.ms/azure-msi-docs\"。向创建的 MSI 标识分配角色。请参阅 \"https://aka.ms/assign-role-msi\"。状态代码: %s。状态消息: %s", + "loc.messages.CouldNotFetchAccessTokenforMSIStatusCode": "无法检索托管服务主体的访问令牌。状态代码: %s。状态消息: %s", + "loc.messages.NotAbleToCreateFirewallRule": "将防火墙规则添加到 Azure MySQL 服务器时出现错误。错误: %s", + "loc.messages.ExpiredServicePrincipal": "无法提取 Azure 的访问令牌。请确保使用的服务主体有效且未过期。", + "loc.messages.Nopackagefoundwithspecifiedpattern": "使用指定模式未找到任何包" +} \ No newline at end of file diff --git a/_generated/AzureMysqlDeploymentV1/Strings/resources.resjson/zh-TW/resources.resjson b/_generated/AzureMysqlDeploymentV1/Strings/resources.resjson/zh-TW/resources.resjson new file mode 100644 index 000000000000..06ffd6c52bd1 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1/Strings/resources.resjson/zh-TW/resources.resjson @@ -0,0 +1,68 @@ +{ + "loc.friendlyName": "適用於 MySQL 的 Azure 資料庫部署", + "loc.helpMarkDown": "[深入了解此工作](https://aka.ms/mysqlazuredeployreadme)", + "loc.description": "執行您的指令碼,並對適用於 MySQL 的 Azure 資料庫進行變更", + "loc.instanceNameFormat": "執行 Azure MySQL: $(TaskNameSelector)", + "loc.group.displayName.target": "DB 詳細資料", + "loc.group.displayName.taskDetails": "部署套件", + "loc.group.displayName.firewall": "防火牆", + "loc.input.label.ConnectedServiceName": "Azure 訂用帳戶", + "loc.input.help.ConnectedServiceName": "這是連線您 Azure 帳戶的必要項目。
若要設定新的服務連線,請從清單中選取 Azure 訂用帳戶,然後按一下 [授權]。
若未列出您的訂用帳戶,或您要使用現有服務主體,可使用 [新增] 或 [管理] 按鈕來設定 Azure 服務連線。", + "loc.input.label.ServerName": "主機名稱", + "loc.input.help.ServerName": "「適用於 MySQL 的 Azure 資料庫」的伺服器名稱。範例: fabrikam.mysql.database.azure.com。當您使用 MySQL Workbench 進行連線時,其會與為 'Parameters' 中 'Hostname' 使用的值相同", + "loc.input.label.DatabaseName": "資料庫名稱", + "loc.input.help.DatabaseName": "下列指令碼必須執行對象的資料庫名稱 (如已有資料庫); 若無,則指令碼本身可用以建立資料庫。", + "loc.input.label.SqlUsername": "伺服器管理員登入", + "loc.input.help.SqlUsername": "適用於 MySQL 的 Azure 資料庫伺服器支援原生 MySQL 驗證。您可使用伺服器的系統管理員登入對伺服器進行連線與驗證。例如: bbo1@fabrikam。當您使用 MySQL Workbench 連線時,這與在 'Parameters' 中為 'Username' 使用的值相同。", + "loc.input.label.SqlPassword": "密碼", + "loc.input.help.SqlPassword": "適用於 MySQL 的 Azure 資料庫系統管理員密碼。若您忘記密碼,可從 [Azure 入口網站](https://docs.microsoft.com/zh-tw/azure/mysql/howto-create-manage-server-portal) 變更。
其可在管線中以變數定義。例如: $(password)。
您也可將變數類型標示為 'secret' 予以保護。", + "loc.input.label.TaskNameSelector": "類型", + "loc.input.help.TaskNameSelector": "在 [指令檔] 和 [內嵌指令碼] 兩個選項中擇一選取。", + "loc.input.label.SqlFile": "MySQL 指令碼", + "loc.input.help.SqlFile": "自動化代理程式或自動化代理程式可存取之 UNC 路徑上的指令檔完整路徑,例如 \\\\\\\\BudgetIT\\DeployBuilds\\script.sql。此外,$(agent.releaseDirectory) 等預先定義的系統變數,以及包含 SQL 陳述式的檔案也可在此使用。", + "loc.input.label.SqlInline": "內嵌 MySQL 指令碼", + "loc.input.help.SqlInline": "輸入要對以上所選資料庫執行的 MySQL 指令碼。", + "loc.input.label.SqlAdditionalArguments": "其他 MySQL 引數", + "loc.input.help.SqlAdditionalArguments": "MySQL 簡易 SQL 殼層支援的其他選項。在適用於 MySQL 的 Azure 資料庫上執行指定檔案時,將會套用這些選項。
範例: 您可以將預設定位字元分隔輸出格式變更為 HTML 或甚至 XML 格式。如果您因結果集太大但記憶體不足而發生問題,請使用 --quick 選項。", + "loc.input.label.IpDetectionMethod": "使用下列項目指定防火牆規則:", + "loc.input.help.IpDetectionMethod": "為了成功執行工作,我們必須允許系統管理員從自動化代理程式的 IP 位址存取適用於 MySQL 的 Azure 資料庫。
選取自動偵測,即可自動為可能的自動化代理程式 IP 位址範圍新增防火牆例外,或者您可以明確指定範圍。", + "loc.input.label.StartIpAddress": "起始 IP 位址", + "loc.input.help.StartIpAddress": "自動化代理程式電腦集區的開始 IP 位址,例如 196.21.30.50。", + "loc.input.label.EndIpAddress": "結束 IP 位址", + "loc.input.help.EndIpAddress": "自動化代理程式電腦集區的結束 IP 位址,例如 196.21.30.65。", + "loc.input.label.DeleteFirewallRule": "工作結束後刪除規則", + "loc.input.help.DeleteFirewallRule": "若選取,新增的自動化代理程式 IP 位址例外就會依據對應適用於 MySQL 的 Azure 資料庫而移除。", + "loc.messages.ARGD_ConstructorFailed": "初始化時工作失敗。錯誤: %s。", + "loc.messages.FirewallRuleNameCannotBeEmpty": "防火牆規則名稱不得為 null。", + "loc.messages.FirewallAddressRangeCannotBeEmpty": "防火牆位址不得為 null。", + "loc.messages.StartIpAddressCannotBeEmpty": "防火牆規則的開始 IP 位址不得為 null。", + "loc.messages.EndIpAddressCannotBeEmpty": "防火牆規則的結束 IP 位址不得為 null。", + "loc.messages.MysqlServerNameCannotBeEmpty": "MySQL 伺服器名稱不可為 null。", + "loc.messages.MysqlFullyQualifiedServerNameCannotBeEmpty": "MySQL 伺服器完整名稱不得為 null。", + "loc.messages.ResourceGroupCannotBeEmpty": "資源群組名稱不得為 null。", + "loc.messages.NotAbleToAddFirewallRule": "將防火牆規則新增至 MySQL 伺服器時發生錯誤。錯誤: %s。", + "loc.messages.NotAbleToDeleteFirewallRule": "從 MySQL 伺服器刪除防火牆規則時發生錯誤。錯誤: %s。", + "loc.messages.AgentIpAddressIsMissingInAddedFirewallRule": "手動新增的防火牆規則中缺少代理程式 IP 位址。", + "loc.messages.NotAbleToGetAllServers": "無法擷取訂用帳戶的所有 MySQL 伺服器。錯誤: %s 。", + "loc.messages.EmptyOrNullServerList": "MySQL 伺服器清單是空的。MySQL 伺服器主機名稱無效。", + "loc.messages.UnableToFindResourceGroupDueToNullId": "因為識別碼為 null 所以找不到資源群組。", + "loc.messages.UnableToFindResourceGroupDueToInvalidId": "因為識別碼無效所以找不到資源群組。", + "loc.messages.NotAbleToGetInstalledLocationOfMysqlFromPath": "代理程式機器上缺少 MySQL 用戶端。", + "loc.messages.UnableToFindMysqlFromRegistryOnMachineError": "使用機器上的登錄找不到 MySQL。", + "loc.messages.UnableToFindMysqlFromRegistry": "使用登錄找不到 MySQL。錯誤: %s。", + "loc.messages.UnableToFindTheLocationOfMysqlFromRegistryOnMachineError": "使用機器上的登錄找不到 MySQL 的位置。錯誤: %s。", + "loc.messages.AzureMysqlTaskParameterCannotBeEmpty": "Azure MySQL 工作參數不得為 null。", + "loc.messages.ToolPathCannotBeNull": "工具路徑不可為 null。", + "loc.messages.SqlExecutionException": "發生 SQL 執行例外狀況。請檢查 SQL 指令碼。錯誤: %s。", + "loc.messages.AzureEndpointCannotBeNull": "訂用帳戶名稱無效。Azure 服務連線不可為 null。", + "loc.messages.CallbackCannotBeNull": "回呼不得為 null。", + "loc.messages.UnableToCreateDatabaseException": "無法建立資料庫。", + "loc.messages.WindowMysqlClientMissingError": "Windows 代理程式機器上缺少 MySQL 用戶端。請在代理程式機器上執行 MySQL 用戶端安裝程式 'https://aka.ms/window-mysqlcli-installer' 指令檔來加以安裝。", + "loc.messages.LinuxMysqlClientMissingError": "Linux 代理程式機器上缺少 MySQL 用戶端。請執行 'sudo apt-get install mysql-client' 加以安裝。", + "loc.messages.CouldNotFetchAccessTokenforAzureStatusCode": "無法擷取 Azure 的存取權杖。狀態碼: %s。狀態訊息: %s", + "loc.messages.CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "無法擷取受控服務主體的存取權杖。請設定虛擬機器的受控服務識別 (MSI)。請參閱 'https://aka.ms/azure-msi-docs'。將角色指派至建立的 MSI 身分識別。請參閱 'https://aka.ms/assign-role-msi'。狀態碼: %s。狀態訊息: %s", + "loc.messages.CouldNotFetchAccessTokenforMSIStatusCode": "無法擷取受控服務主體的存取權杖。狀態碼: %s。狀態訊息: %s", + "loc.messages.NotAbleToCreateFirewallRule": "將防火牆規則新增至 Azure mysql 伺服器時得到錯誤。錯誤: %s", + "loc.messages.ExpiredServicePrincipal": "無法擷取 Azure 的存取權杖。請驗證使用的服務主體是否有效且未過期。", + "loc.messages.Nopackagefoundwithspecifiedpattern": "找不到具指定模式的套件" +} \ No newline at end of file diff --git a/_generated/AzureMysqlDeploymentV1/Tests/FirewallOperationTests.ts b/_generated/AzureMysqlDeploymentV1/Tests/FirewallOperationTests.ts new file mode 100644 index 000000000000..aa8b8fb3a24b --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1/Tests/FirewallOperationTests.ts @@ -0,0 +1,47 @@ +import tl = require('azure-pipelines-task-lib'); +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import * as path from 'path'; +import { MysqlClient } from '../sql/MysqlClient'; +import { FirewallConfiguration } from '../models/FirewallConfiguration'; + +export class FirewallOperationTests { + + public static startFirewallOperationL0Tests(){ + let tp = path.join(__dirname, 'FirewallOperationsL0Tests.js'); + let tr : tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); + process.env["RELEASE_RELEASEID"] = "MOCK_RELEASE_ID"; + process.env["BUILD_BUILDID"] ="MOCK_BUILD_ID"; + tr.setInput('IpDetectionMethod', 'IPAddressRange') + tr.setInput('IpDetectionMethod', 'IPAddressRange'); + tr.setInput('ServerName', 'MOCK_SERVER_NAME'); + tr.setInput('StartIpAddress', '0.0.0.0'); + tr.setInput("EndIpAddress", "2 55.255.255.255"); + tr.setInput("IpDetectionMethod", "IPAddressRange"); + tr.setInput("ConnectedServiceName", "DEMO_CONNECTED_SERVICE_NAME"); + tr.setInput("SqlUsername", "DEMO_SQL_USERNAME"); + tr.setInput("SqlPassword","DEMO_SQL_PASSWORD"); + tr.setInput("TaskNameSelector", "SqlFile"); + Date.now = function (): number { + return 12345; + } + tr.registerMock("../sql/MysqlClient", { + MysqlClient: function(A,B){ + return { + getFirewallConfiguration : function() { + let firewallConfiguration: FirewallConfiguration = new FirewallConfiguration(true); + return firewallConfiguration; + }, + executeSqlCommand : function(){ + return 0; + } + } + } + }); + + tr.run(); + } + + +} + +FirewallOperationTests.startFirewallOperationL0Tests(); diff --git a/_generated/AzureMysqlDeploymentV1/Tests/FirewallOperationsL0Tests.ts b/_generated/AzureMysqlDeploymentV1/Tests/FirewallOperationsL0Tests.ts new file mode 100644 index 000000000000..9df1e7fce4f4 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1/Tests/FirewallOperationsL0Tests.ts @@ -0,0 +1,50 @@ +import { getMockEndpoint, nock, getMockFirewallRules } from './mock_utils'; +import * as querystring from 'querystring'; +import tl = require('azure-pipelines-task-lib'); +import { FirewallOperations } from '../operations/FirewallOperations'; +import { FirewallRule, FirewallAddressRange } from '../models/Firewall'; +import { AzureMysqlTaskParameter } from '../models/AzureMysqlTaskParameter'; +import { MysqlClient } from '../sql/MysqlClient'; +import { ISqlClient } from '../sql/ISqlClient'; +import { MysqlServer } from '../models/MysqlServer'; +var endpoint = getMockEndpoint(); +getMockFirewallRules(); + +export class FirewallOperationsL0Tests { + + public static firewallOperations: FirewallOperations = new FirewallOperations(endpoint.applicationTokenCredentials, endpoint.subscriptionID); + public static firewallRule: FirewallRule = new FirewallRule("MOCK_FIREWALL_RULE_NAME", new FirewallAddressRange("0.0.0.0", "255.255.255.255")); + + public static async testFirewallOperations() { + await FirewallOperationsL0Tests.addFirewallRuleTest(); + await FirewallOperationsL0Tests.deleteFirewallRuleTest(); + } + + public static async addFirewallRuleTest(){ + try{ + const azureMysqlTaskParameter: AzureMysqlTaskParameter = new AzureMysqlTaskParameter(); + const sqlClient: ISqlClient = new MysqlClient(azureMysqlTaskParameter, "MOCK_SERVER_NAME.test-vm1.onebox.xdb.mscds.com", "MOCK_MYSQL_CLIENT_PATH"); + const mysqlServer: MysqlServer = new MysqlServer("MOCK_SERVER_NAME", "MOCK_SERVER_NAME.test-vm1.onebox.xdb.mscds.com", "MOCK_RESOURCE_GROUP_NAME"); + const response = await FirewallOperationsL0Tests.firewallOperations.invokeFirewallOperations(azureMysqlTaskParameter, sqlClient, mysqlServer); + if(response){ + tl.setResult(tl.TaskResult.Succeeded, 'FirewallOperationsL0Tests.addFirewallRuleTest should have succeeded.'); + }else{ + tl.setResult(tl.TaskResult.Failed, 'FirewallOperationsL0Tests.addFirewallRuleTest should have succeeded but failed.'); + } + }catch(error){ + tl.setResult(tl.TaskResult.Failed, 'FirewallOperationsL0Tests.addFirewallRuleTest should have succeeded but failed.'); + } + } + + public static async deleteFirewallRuleTest(){ + try{ + await FirewallOperationsL0Tests.firewallOperations.deleteFirewallRule("MOCK_SERVER_NAME", "MOCK_RESOURCE_GROUP_NAME"); + tl.setResult(tl.TaskResult.Succeeded, 'FirewallOperationsL0Tests.deleteFirewallRuleTest should have succeeded.'); + }catch(error){ + tl.setResult(tl.TaskResult.Failed, 'FirewallOperationsL0Tests.deleteFirewallRuleTest should have succeeded but failed.'); + } + } + +} + +FirewallOperationsL0Tests.testFirewallOperations(); diff --git a/_generated/AzureMysqlDeploymentV1/Tests/L0.ts b/_generated/AzureMysqlDeploymentV1/Tests/L0.ts new file mode 100644 index 000000000000..f3412c122340 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1/Tests/L0.ts @@ -0,0 +1,70 @@ +import * as assert from 'assert'; +import * as ttm from 'azure-pipelines-task-lib/mock-test'; +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import tl = require('azure-pipelines-task-lib'); +import * as path from 'path'; +import { MysqlClient } from '../sql/MysqlClient'; +import { FirewallConfiguration } from '../models/FirewallConfiguration'; + +describe('AzureMySqlDeployment Suite', function() { + + this.timeout(60000); + + it('AzureMySqlDeployment MysqlServerOperationsL0Tests', (done: MochaDone) => { + let tp = path.join(__dirname, 'MysqlServerOperationsL0Tests.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + try { + tr.run(); + assert(tr.stdOutContained('MysqlServerOperationsTests.MysqlServerFromServerName should has passed.') , 'Should have printed: MysqlServerOperationsTests.MysqlServerFromServerName should has passed.'); + assert(tr.stdOutContained('MysqlServerOperationsTests.MysqlServerFromServerName should have failed due to without id in mysql server.') , 'Should have printed: MysqlServerOperationsTests.MysqlServerFromServerName should have failed due to without id in mysql server.'); + assert(tr.stdOutContained('MysqlServerOperationsTests.MysqlServerFromServerName should have failed due to invalid id in mysql server.') , 'Should have printed: MysqlServerOperationsTests.MysqlServerFromServerName should have failed due to invalid id in mysql server.'); + assert(tr.stdOutContained('MysqlServerOperationsTests.MysqlServerFromServerName should have failed due to invalid mysql server name.') , 'Should have printed: MysqlServerOperationsTests.MysqlServerFromServerName should have failed due to invalid mysql server name.'); + done(); + } + catch(error) { + done(error); + } + }); + + it('AzureMySqlDeployment FirewallOperationTests', (done: MochaDone) => { + let tp = path.join(__dirname, 'FirewallOperationTests.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + try { + tr.run(); + assert(tr.stdOutContained('FirewallOperationsL0Tests.addFirewallRuleTest should have succeeded.'), 'Should have printed: FirewallOperationsL0Tests.addFirewallRuleTest should have succeeded.'); + assert(tr.stdOutContained('FirewallOperationsL0Tests.deleteFirewallRuleTest should have succeeded.'), 'Should have printed: FirewallOperationsL0Tests.deleteFirewallRuleTest should have succeeded.'); + done(); + } + catch(error) { + done(error); + } + }); + + it('AzureMySqlDeployment ToolPathOperationTests', (done: MochaDone) => { + let tp = path.join(__dirname, 'ToolPathOperationTests.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + try { + tr.run(); + assert(tr.stdOutContained('ToolPathOperationsL0Tests.getInstalledPathOfMysqlForLinux should has passed.'), 'Should have printed: ToolPathOperationsL0Tests.getInstalledPathOfMysqlForLinux should has passed.'); + done(); + } + catch(error) { + done(error); + } + }); + + it('AzureMySqlDeployment MysqlClient', (done: MochaDone) => { + let tp = path.join(__dirname, 'MysqlClientTests.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + try { + tr.run(); + assert(tr.stdOutContained('MysqlClientL0Tests.getFirewallConfiguration should has passed.'), 'Should have printed: MysqlClientL0Tests.getFirewallConfiguration should has passed.'); + assert(tr.stdOutContained('MysqlClientL0Tests.executeSqlCommand should has passed'), 'Should have printed: MysqlClientL0Tests.executeSqlCommand should has passed.'); + done(); + } + catch(error) { + done(error); + } + }); + +}); diff --git a/_generated/AzureMysqlDeploymentV1/Tests/MysqlClientL0Tests.ts b/_generated/AzureMysqlDeploymentV1/Tests/MysqlClientL0Tests.ts new file mode 100644 index 000000000000..5765f428cbd7 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1/Tests/MysqlClientL0Tests.ts @@ -0,0 +1,45 @@ +import tl = require('azure-pipelines-task-lib'); +import { ISqlClient } from '../sql/ISqlClient'; +import { MysqlClient } from '../sql/MysqlClient'; +import { FirewallConfiguration } from '../models/FirewallConfiguration'; +import { AzureMysqlTaskParameter } from '../models/AzureMysqlTaskParameter'; + +export class MysqlClientL0Tests { + + public static azureMysqlTaskParameter: AzureMysqlTaskParameter = new AzureMysqlTaskParameter(); + public static sqlClient: ISqlClient = new MysqlClient(MysqlClientL0Tests.azureMysqlTaskParameter, "DEMO_MYSQL_SERVER", "/usr/local/bin/mysql"); + + public static async startL0Tests() { + await MysqlClientL0Tests.getFirewallConfiguration(); + await MysqlClientL0Tests.executeSqlCommand(); + } + + public static async getFirewallConfiguration(){ + try{ + const firewallConfiguration: FirewallConfiguration = await MysqlClientL0Tests.sqlClient.getFirewallConfiguration(); + if(!firewallConfiguration.isIpAdressAlreadyAdded() && firewallConfiguration.getIpAddress() == '250.250.250.250'){ + tl.setResult(tl.TaskResult.Succeeded, 'MysqlClientL0Tests.getFirewallConfiguration should has passed.'); + }else{ + tl.setResult(tl.TaskResult.Failed, 'MysqlClientL0Tests.getFirewallConfiguration should has passed but failed.'); + } + }catch(error){ + tl.setResult(tl.TaskResult.Failed, 'MysqlClientL0Tests.getFirewallConfiguration should has passed but failed due to error.'); + } + } + + public static async executeSqlCommand(){ + try{ + const response: number = await MysqlClientL0Tests.sqlClient.executeSqlCommand(); + if(response == 0){ + tl.setResult(tl.TaskResult.Succeeded, 'MysqlClientL0Tests.executeSqlCommand should has passed.'); + }else{ + tl.setResult(tl.TaskResult.Failed, 'MysqlClientL0Tests.executeSqlCommand should has passed but failed.'); + } + }catch(error){ + tl.setResult(tl.TaskResult.Failed, 'MysqlClientL0Tests.executeSqlCommand should has passed but failed due to error.'); + } + } + +} + +MysqlClientL0Tests.startL0Tests(); diff --git a/_generated/AzureMysqlDeploymentV1/Tests/MysqlClientTests.ts b/_generated/AzureMysqlDeploymentV1/Tests/MysqlClientTests.ts new file mode 100644 index 000000000000..0f6a7a479ad1 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1/Tests/MysqlClientTests.ts @@ -0,0 +1,47 @@ +import tl = require('azure-pipelines-task-lib'); +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import ma = require('azure-pipelines-task-lib/mock-answer'); +import * as path from 'path'; + +export class MysqlClientTests { + + public static startMysqlClientL0Tests(){ + let tp = path.join(__dirname, 'MysqlClientL0Tests.js'); + let tr : tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); + tr.setInput('IpDetectionMethod', 'IPAddressRange') + tr.setInput('IpDetectionMethod', 'IPAddressRange'); + tr.setInput('ServerName', 'MOCK_SERVER_NAME'); + tr.setInput('StartIpAddress', '0.0.0.0'); + tr.setInput("EndIpAddress", "2 55.255.255.255"); + tr.setInput("IpDetectionMethod", "IPAddressRange"); + tr.setInput("ConnectedServiceName", "DEMO_CONNECTED_SERVICE_NAME"); + tr.setInput("SqlUsername", "DEMO_SQL_USERNAME"); + tr.setInput("SqlPassword","DEMO_SQL_PASSWORD"); + tr.setInput("TaskNameSelector", "SqlFile"); + // provide answers for task mock + let a: ma.TaskLibAnswers = { + "which": { + "/usr/local/bin/mysql" : "/usr/local/bin/mysql" + }, + "checkPath": { + "/usr/local/bin/mysql": true + }, + "exec": { + "/usr/local/bin/mysql -hDEMO_MYSQL_SERVER -uDEMO_SQL_USERNAME -pDEMO_SQL_PASSWORD" : { + "code": 1, + "stderr": "ERROR 9000 (HY000): Client with IP address '250.250.250.250' is not allowed to connect to this MySQL server." + }, + '/usr/local/bin/mysql -hDEMO_MYSQL_SERVER -uDEMO_SQL_USERNAME -pDEMO_SQL_PASSWORD -e" source null"' : { + "code": 0, + "stderr": "=executed successfully." + } + + } + }; + tr.setAnswers(a); + tr.run(); + } + +} + +MysqlClientTests.startMysqlClientL0Tests(); diff --git a/_generated/AzureMysqlDeploymentV1/Tests/MysqlServerOperationsL0Tests.ts b/_generated/AzureMysqlDeploymentV1/Tests/MysqlServerOperationsL0Tests.ts new file mode 100644 index 000000000000..865e798cca62 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1/Tests/MysqlServerOperationsL0Tests.ts @@ -0,0 +1,67 @@ +import { getMockEndpoint, nock, getMockMysqlServers } from './mock_utils'; +import * as querystring from 'querystring'; +import tl = require('azure-pipelines-task-lib'); +import { MysqlServerOperations } from '../operations/MysqlServerOperations'; +import { MysqlServer } from '../models/MysqlServer'; +var endpoint = getMockEndpoint(); +getMockMysqlServers(); + +export class MysqlServerOperationsL0Tests { + + public static mysqlServerOperations: MysqlServerOperations = new MysqlServerOperations(endpoint.applicationTokenCredentials, endpoint.subscriptionID); + + public static async getMysqlServerFromServerName() { + await MysqlServerOperationsL0Tests.testForCorrectId(); + await MysqlServerOperationsL0Tests.testWithoutId(); + await MysqlServerOperationsL0Tests.testForInvalidId(); + await MysqlServerOperationsL0Tests.testForNotFound(); + } + + public static async testForCorrectId(){ + try{ + const mysqlServer: MysqlServer = await MysqlServerOperationsL0Tests.getServerDeatils("testserver.test-vm1.onebox.xdb.mscds.com"); + tl.setResult(tl.TaskResult.Succeeded, 'MysqlServerOperationsTests.MysqlServerFromServerName should has passed.'); + }catch(error){ + tl.setResult(tl.TaskResult.Failed, 'MysqlServerOperationsTests.MysqlServerFromServerName should have passed but failed.'); + } + } + + public static async testWithoutId(){ + try{ + const mysqlServer: MysqlServer = await MysqlServerOperationsL0Tests.getServerDeatils("serverWithoutId.test-vm1.onebox.xdb.mscds.com"); + tl.setResult(tl.TaskResult.Succeeded, 'MysqlServerOperationsTests.MysqlServerFromServerName should have failed due to without id in mysql server but passed .'); + }catch(error){ + tl.setResult(tl.TaskResult.Failed, 'MysqlServerOperationsTests.MysqlServerFromServerName should have failed due to without id in mysql server.'); + } + } + + public static async testForInvalidId(){ + try{ + const mysqlServer: MysqlServer = await MysqlServerOperationsL0Tests.getServerDeatils("serverWithInvalidId.test-vm1.onebox.xdb.mscds.com"); + tl.setResult(tl.TaskResult.Succeeded, 'MysqlServerOperationsTests.MysqlServerFromServerName should have failed due to invalid id in mysql server but passed.'); + }catch(error){ + tl.setResult(tl.TaskResult.Failed, 'MysqlServerOperationsTests.MysqlServerFromServerName should have failed due to invalid id in mysql server.'); + } + } + + public static async testForNotFound(){ + try{ + const mysqlServer: MysqlServer = await MysqlServerOperationsL0Tests.getServerDeatils("serverNotFound.test-vm1.onebox.xdb.mscds.com"); + if(mysqlServer){ + tl.setResult(tl.TaskResult.Succeeded, 'MysqlServerOperationsTests.MysqlServerFromServerName should have failed due to invalid mysql server name but passed.'); + }else{ + tl.setResult(tl.TaskResult.Failed, 'MysqlServerOperationsTests.MysqlServerFromServerName should have failed due to invalid mysql server name.'); + } + }catch(error){ + tl.setResult(tl.TaskResult.Failed, 'MysqlServerOperationsTests.MysqlServerFromServerName should have failed due to invalid mysql server name.'); + } + } + + public static async getServerDeatils(serverName: string){ + const mysqlServer: MysqlServer = await MysqlServerOperationsL0Tests.mysqlServerOperations.getMysqlServerFromServerName(serverName); + return mysqlServer; + } + +} + +MysqlServerOperationsL0Tests.getMysqlServerFromServerName(); diff --git a/_generated/AzureMysqlDeploymentV1/Tests/ToolPathOperationTests.ts b/_generated/AzureMysqlDeploymentV1/Tests/ToolPathOperationTests.ts new file mode 100644 index 000000000000..b5f2c73b6318 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1/Tests/ToolPathOperationTests.ts @@ -0,0 +1,27 @@ +import tl = require('azure-pipelines-task-lib'); +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import ma = require('azure-pipelines-task-lib/mock-answer'); +import * as path from 'path'; +import { ToolPathOperations } from '../operations/ToolPathOperations'; + +export class ToolPathOperationTests { + + public static startToolPathOperationL0Tests(){ + let tp = path.join(__dirname, 'ToolPathOperationsL0Tests.js'); + let tr : tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); + // provide answers for task mock + let a: ma.TaskLibAnswers = { + "which": { + "mysql": "/bin/mysql" + }, + "checkPath": { + "/bin/mysql": true + } + }; + tr.setAnswers(a); + tr.run(); + } + +} + +ToolPathOperationTests.startToolPathOperationL0Tests(); diff --git a/_generated/AzureMysqlDeploymentV1/Tests/ToolPathOperationsL0Tests.ts b/_generated/AzureMysqlDeploymentV1/Tests/ToolPathOperationsL0Tests.ts new file mode 100644 index 000000000000..b0258470b0f5 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1/Tests/ToolPathOperationsL0Tests.ts @@ -0,0 +1,28 @@ +import tl = require('azure-pipelines-task-lib'); +import { ToolPathOperations } from '../operations/ToolPathOperations'; + +export class ToolPathOperationsL0Tests { + + public static toolPathOperations: ToolPathOperations = new ToolPathOperations(); + + public static async startToolPathOperationsL0Tests() { + await ToolPathOperationsL0Tests.getInstalledPathOfMysqlForLinux(); + } + + public static async getInstalledPathOfMysqlForLinux(){ + try{ + const mysqlPath: string = await ToolPathOperationsL0Tests.toolPathOperations.getInstalledPathOfMysqlForLinux(); + console.log(" mysql path"+ mysqlPath); + if(mysqlPath && mysqlPath == '/bin/mysql'){ + tl.setResult(tl.TaskResult.Succeeded, 'ToolPathOperationsL0Tests.getInstalledPathOfMysqlForLinux should has passed.'); + }else{ + tl.setResult(tl.TaskResult.Failed, 'ToolPathOperationsL0Tests.getInstalledPathOfMysqlForLinux should has passed but failed.'); + } + }catch(error){ + tl.setResult(tl.TaskResult.Failed, 'ToolPathOperationsL0Tests.getInstalledPathOfMysqlForLinux should has passed but failed due to error.'); + } + } + +} + +ToolPathOperationsL0Tests.startToolPathOperationsL0Tests(); \ No newline at end of file diff --git a/_generated/AzureMysqlDeploymentV1/Tests/mock_utils.ts b/_generated/AzureMysqlDeploymentV1/Tests/mock_utils.ts new file mode 100644 index 000000000000..1c9a1506a66a --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1/Tests/mock_utils.ts @@ -0,0 +1,98 @@ +import { AzureEndpoint } from 'azure-pipelines-tasks-azure-arm-rest/azureModels'; +import * as querystring from "querystring"; +import { ApplicationTokenCredentials } from 'azure-pipelines-tasks-azure-arm-rest/azure-arm-common'; +export var nock = require('nock'); +import { FirewallRule, FirewallAddressRange } from '../models/Firewall'; + +export function getMockEndpoint() { + process.env["AZURE_HTTP_USER_AGENT"] = "TEST_AGENT"; + var endpoint: AzureEndpoint = { + activeDirectoryAuthority: "https://login.windows.net/", + environment: "AzureCloud", + servicePrincipalClientID: "MOCK_SPN_ID", + servicePrincipalKey: "MOCK_SPN_KEY", + subscriptionID: "MOCK_SUBSCRIPTION_ID", + subscriptionName: "MOCK_SUBSCRIPTION_NAME", + tenantID: "MOCK_TENANT_ID", + url: "https://management.azure.com/", + environmentAuthorityUrl: "https://login.windows.net/", + activeDirectoryResourceID: "https://management.azure.com/", + applicationTokenCredentials: new ApplicationTokenCredentials("MOCK_SERVICE_CONNECTION", "MOCK_SPN_ID", "MOCK_TENANT_ID", "MOCK_SPN_KEY", "https://management.azure.com/", + "https://login.windows.net/", "https://management.azure.com/", false) + } + + nock("https://login.windows.net", { + reqheaders: { + "content-type": "application/x-www-form-urlencoded; charset=utf-8" + } + }) + .post("/MOCK_TENANT_ID/oauth2/token/", querystring.stringify({ + resource: "https://management.azure.com/", + client_id: "MOCK_SPN_ID", + grant_type: "client_credentials", + client_secret: "MOCK_SPN_KEY" + })) + .reply(200, { + access_token: "DUMMY_ACCESS_TOKEN" + }).persist(); + + return endpoint; +} + +export function getMockMysqlServers() { + nock('https://management.azure.com', { + reqheaders: { + "authorization": "Bearer DUMMY_ACCESS_TOKEN", + "content-type": "application/json; charset=utf-8" + } + }).get("/subscriptions/MOCK_SUBSCRIPTION_ID/providers/Microsoft.DBforMySQL/servers?api-version=2017-12-01") + .reply(200, { + value: [{ + "id": "/subscriptions/ffffffff-ffff-ffff-ffff-ffffffffffff/resourceGroups/TestGroup/providers/Microsoft.DBforMySQL/servers/testserver", + "name": "testserver", + "properties": { + "fullyQualifiedDomainName": "testserver.test-vm1.onebox.xdb.mscds.com" + } + }, + { + "name": "serverWithoutId", + "properties": { + "fullyQualifiedDomainName": "serverWithoutId.test-vm1.onebox.xdb.mscds.com" + } + }, + { + "id": "/subscriptions/ffffffff-ffff-ffff-ffff-ffffffffffff/NotResourceGroup/TestGroup/providers/Microsoft.DBforMySQL/servers/serverWithInvalidId", + "name": "serverWithInvalidId", + "properties": { + "fullyQualifiedDomainName": "serverWithInvalidId.test-vm1.onebox.xdb.mscds.com" + } + }]}).persist(); +} + + +export function getMockFirewallRules(){ + nock('https://management.azure.com', { + reqheaders: { + "authorization": "Bearer DUMMY_ACCESS_TOKEN", + "content-type": "application/json; charset=utf-8" + } + }).put("/subscriptions/MOCK_SUBSCRIPTION_ID/resourceGroups/MOCK_RESOURCE_GROUP_NAME/providers/Microsoft.DBforMySQL/servers/MOCK_SERVER_NAME/firewallRules/IPAddressRange_MOCK_RELEASE_ID12345?api-version=2017-12-01").reply(201, { + "id": "/subscriptions/MOCK_SUBSCRIPTION_ID/resourceGroups/MOCK_RESOURCE_GROUP_NAME/providers/Microsoft.DBforMySQL/servers/MOCK_SERVER_NAME/firewallRules/IPAddressRange_MOCKID", + "name": "rule1", + "type": "Microsoft.DBforMySQL/servers/firewallRules", + "properties": { + "startIpAddress": "0.0.0.0", + "endIpAddress": "255.255.255.255" + } + }).persist(); + + nock('https://management.azure.com', { + reqheaders: { + "authorization": "Bearer DUMMY_ACCESS_TOKEN", + "content-type": "application/json; charset=utf-8" + } + }) + .delete("/subscriptions/MOCK_SUBSCRIPTION_ID/resourceGroups/MOCK_RESOURCE_GROUP_NAME/providers/Microsoft.DBforMySQL/servers/MOCK_SERVER_NAME/firewallRules/IPAddressRange_MOCK_RELEASE_ID12345?api-version=2017-12-01") + .reply(200).persist(); + +} diff --git a/_generated/AzureMysqlDeploymentV1/Tests/package-lock.json b/_generated/AzureMysqlDeploymentV1/Tests/package-lock.json new file mode 100644 index 000000000000..82632fe48912 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1/Tests/package-lock.json @@ -0,0 +1,164 @@ +{ + "name": "vsts-tasks-azuremysql", + "version": "1.0.1", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha1-5gtrDo8wG9l+U3UhW9pAbIURjAs=" + }, + "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" + } + }, + "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" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "requires": { + "ms": "2.0.0" + } + }, + "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=" + }, + "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" + } + }, + "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==" + }, + "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=" + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "nock": { + "version": "9.0.11", + "resolved": "https://registry.npmjs.org/nock/-/nock-9.0.11.tgz", + "integrity": "sha1-EPIC5MwnYQLWDibjGfl9aNoJvpw=", + "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" + } + }, + "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==" + }, + "propagate": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/propagate/-/propagate-0.4.0.tgz", + "integrity": "sha1-8/zKCm/gZzanulcpZgaWF8EwtIE=" + }, + "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" + } + }, + "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" + } + }, + "type-detect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-1.0.0.tgz", + "integrity": "sha1-diIXzAbbJY7EiQihKY6LlRIejqI=" + } + } +} diff --git a/_generated/AzureMysqlDeploymentV1/Tests/package.json b/_generated/AzureMysqlDeploymentV1/Tests/package.json new file mode 100644 index 000000000000..5e53988150f6 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1/Tests/package.json @@ -0,0 +1,22 @@ +{ + "name": "vsts-tasks-azuremysql", + "version": "1.0.1", + "description": "Azure Pipelines Azure MySQL", + "main": "azuremysqldeploy.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": { + "nock": "9.0.11" + } +} diff --git a/_generated/AzureMysqlDeploymentV1/ThirdPartyNotices.txt b/_generated/AzureMysqlDeploymentV1/ThirdPartyNotices.txt new file mode 100644 index 000000000000..b44d302c751b --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1/ThirdPartyNotices.txt @@ -0,0 +1,2334 @@ +THIRD-PARTY SOFTWARE NOTICES AND INFORMATION +Do Not Translate or Localize + +Azure Database for MySQL Deployment incorporates third party material from the projects listed below. The original copyright notice and the license under which Microsoft received such third party material are set forth below. Microsoft reserves all other rights not expressly granted, whether by implication, estoppel or otherwise. + + +1. Mockery (https://github.com/mfncooper/mockery) +2. Node.js (https://nodejs.org/) +3. Q (https://github.com/kriskowal/q) +4. VSTS-task-lib (https://github.com/Microsoft/vsts-task-lib) +5. winreg (https://github.com/fresc81/node-winreg) +6. @types/node (https://www.github.com/DefinitelyTyped/DefinitelyTyped.git) +7. @types/q (https://www.github.com/DefinitelyTyped/DefinitelyTyped.git) +8. @types/mocha (https://github.com/DefinitelyTyped/DefinitelyTyped.git) +9. abbrev (https://github.com/isaacs/abbrev-js) +10. Archiver (https://github.com/archiverjs/node-archiver) +11. archiver-utils (https://github.com/archiverjs/archiver-utils) +12. async (https://github.com/caolan/async) +13. buffer-crc32 (https://github.com/brianloveswords/buffer-crc32) +14. Glob (https://github.com/isaacs/node-glob) +15. lodash (https://lodash.com/) + Includes:File(s) copyright John Resig (http://ejohn.org/blog/javascript-micro-templating/) + Includes:File(s) copyright Laura Doktorova (https://github.com/olado/doT) +16. readable-stream (https://github.com/isaacs/readable-stream) +17. tar-stream (https://github.com/mafintosh/tar-stream) +18. zip-stream (https://github.com/archiverjs/node-zip-stream) +19. graceful-fs (https://github.com/isaacs/node-graceful-fs) +20. lazystream (https://github.com/jpommerening/node-lazystream) +21. normalize-path (https://github.com/jonschlinkert/normalize-path) +22 JsonWebToken (https://www.npmjs.com/package/jsonwebtoken) +23 typed-rest-client (https://www.npmjs.com/package/typed-rest-client) +22. balanced-match (https://github.com/juliangruber/balanced-match) +23. binary (https://github.com/substack/node-binary) +24. buffers (DefinitelyTyped) (https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/buffers) +25. chainsaw (https://github.com/substack/node-chainsaw) +26. bl (Buffer List) (https://github.com/rvagg/bl) +27. safe-buffer (https://github.com/feross/safe-buffer) +28. brace-expansion (https://github.com/juliangruber/brace-expansion) +29. concat-map (https://github.com/substack/node-concat-map) +30. traverse (https://github.com/substack/js-traverse) +31. compress-commons (https://github.com/archiverjs/node-compress-commons) +32. Crc32-stream (https://github.com/archiverjs/node-crc32-stream) +33. Xmlbuilder (https://github.com/oozcitak/xmlbuilder-js) +34. core-util-is (https://www.npmjs.com/package/core-util-is) +35. decompress-zip (https://github.com/bower/decompress-zip) +36. graceful-fs (https://github.com/isaacs/node-graceful-fs) +37. mkpath (https://github.com/jrajav/mkpath) +38. nopt (https://github.com/npm/nopt) +39. Q (https://github.com/kriskowal/q) +40. touch (https://github.com/isaacs/node-touch) +41. isarray (https://github.com/juliangruber/isarray/) +42. inherits (https://github.com/isaacs/inherits) +43. string_decoder (https://github.com/rvagg/string_decoder) +44. end-of-stream (https://github.com/mafintosh/end-of-stream) +45. once (https://github.com/isaacs/once) +46. fs.realpath (https://github.com/isaacs/fs.realpath) +47. inflight (https://github.com/npm/inflight) +48. minimatch (https://github.com/isaacs/minimatch) +49. path-is-absolute (https://github.com/sindresorhus/path-is-absolute) +50. graceful-fs (https://github.com/isaacs/node-graceful-fs) +51. wrappy (https://github.com/npm/wrappy) +52. Ltx (https://github.com/node-xmpp/ltx) +53. process-nextick-args (https://github.com/calvinmetcalf/process-nextick-args) +54. util-deprecate (https://github.com/TooTallNate/util-deprecate) +55. sax js (https://github.com/isaacs/sax-js) +56. semver (https://github.com/npm/node-semver/) +57. ShellJS (https://github.com/shelljs/shelljs) +58. xtend (https://www.npmjs.com/package/xtend) +59. VSTS-task-lib (https://github.com/Microsoft/vsts-task-lib) +60. Xml2JS (https://github.com/Leonidas-from-XIV/node-xml2js) +61. node-uuid (https://www.npmjs.com/package/node-uuid) +62. moment (https://www.npmjs.com/package/moment) +63. buffer-equal-constant-time (https://github.com/salesforce/buffer-equal-constant-time) +64. buffer-shims (https://github.com/calvinmetcalf/buffer-shims) +65. Ctt (https://ctt.codeplex.com) +67. hoek (https://github.com/hapijs/hoek) +68. isemail (https://github.com/hapijs/isemail) +69. joi (https://github.com/hapijs/joi) +70. lodash.once (https://github.com/lodash/lodash) +71. ms (https://github.com/zeit/ms) +72. node-ecdsa-sig-formatter (https://github.com/Brightspace/node-ecdsa-sig-formatter) +73. node-jwa (https://github.com/brianloveswords/node-jwa) +74. node-jws (https://github.com/brianloveswords/node-jws) +75. node-tar (https://github.com/npm/node-tar/) +76. OpenSSL (http://www.openssl.org) +77. topo (https://github.com/hapijs/topo) +78. tunnel (https://github.com/koichik/node-tunnel) +79. underscore.js (http://underscorejs.org/; https://github.com/jashkenas/underscore) + + +%% 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 + +%% Node.js NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Node.js is licensed for use as follows: + +""" +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. +""" + +This license applies to parts of Node.js originating from the +https://github.com/joyent/node repository: + +""" +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. +""" + +The Node.js license applies to all parts of Node.js that are not externally +maintained libraries. +========================================= +END OF Node.js 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. + +The file q.js is prefaced by the following additional third-party subcomponent information: + +/*! + * + * Copyright 2009-2012 Kris Kowal under the terms of the MIT + * license found at http://github.com/kriskowal/q/raw/master/LICENSE + * + * With parts by Tyler Close + * Copyright 2007-2009 Tyler Close under the terms of the MIT X license found + * at http://www.opensource.org/licenses/mit-license.html + * Forked at ref_send.js version: 2009-05-11 + * + * With parts by Mark Miller + * Copyright (C) 2011 Google Inc. + * + * 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 Q 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 + +%% winreg NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +This project is released under BSD 2-Clause License. + +Copyright (c) 2016, Paul Bottin 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. + +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 winreg NOTICES, INFORMATION, AND LICENSE + +%% @types/mocha 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 @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 + +%% abbrev 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. +========================================= + +%% Archiver NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) 2012-2014 Chris Talkington, 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 Archiver NOTICES, INFORMATION, AND LICENSE + +%% archiver-utils NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) 2015 Chris Talkington. + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF archiver-utils NOTICES, INFORMATION, AND LICENSE + +%% async NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= + +Copyright (c) 2010-2016 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 + +%% buffer-crc32 NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License + +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 buffer-crc32 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 + +%% 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. + +========================================= +// Based on John Resig's `tmpl` implementation (http://ejohn.org/blog/javascript-micro-templating/) + +Copyright 2008 John Resig + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +========================================= +// Based on Laura Doktorova's doT.js (https://github.com/olado/doT). + +Copyright (c) 2011 Laura Doktorova + +Software includes portions from jQote2 Copyright (c) 2010 aefxx, +http://aefxx.com/ licensed 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 lodash NOTICES, INFORMATION, AND LICENSE + +%% safe-buffer 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 + +%% tar-stream 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 tar-stream NOTICES, INFORMATION, AND LICENSE + +%% zip-stream NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) 2014 Chris Talkington, 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 zip-stream NOTICES, INFORMATION, AND LICENSE + +%% graceful-fs 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 graceful-fs NOTICES, INFORMATION, AND LICENSE + +%% lazystream NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) 2013 J. Pommerening, 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 lazystream NOTICES, INFORMATION, AND LICENSE + +%% normalize-path 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 normalize-path NOTICES, INFORMATION, AND LICENSE + +%% balanced-match NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +(MIT) + +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 balanced-match NOTICES, INFORMATION, AND LICENSE + +%% binary NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) 2012 James Halliday + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Software), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF binary NOTICES, INFORMATION, AND LICENSE + +%% buffers (DefinitelyTyped) NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +This project is licensed under the MIT license. + +Copyrights are respective of each contributor listed at the beginning of each definition file. + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +========================================= +END OF buffers (DefinitelyTyped) NOTICES, INFORMATION, AND LICENSE + +%% chainsaw NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright 2010 James Halliday (mail@substack.net) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the Software), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +========================================= +END OF chainsaw NOTICES, INFORMATION, AND LICENSE + +%% bl (Buffer List) NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License (MIT) +Copyright (c) 2014 bl contributors + +bl contributors listed at https://github.com/rvagg/bl#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 bl (Buffer List) 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 + +%% brace-expansion NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +(MIT) + +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 +========================================= +Copyright (c) James Halliday/substack + +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 + +%% traverse NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright 2010 James Halliday (mail@substack.net) + +This project is free software released under the MIT/X11 license: +http://www.opensource.org/licenses/mit-license.php + +Copyright 2010 James Halliday (mail@substack.net) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the Software), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +========================================= +END OF traverse NOTICES, INFORMATION, AND LICENSE + +%% compress-commons NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) 2014 Chris Talkington, 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 compress-commons NOTICES, INFORMATION, AND LICENSE + +%% Crc32-stream NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) 2014 Chris Talkington, 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 Crc32-stream NOTICES, INFORMATION, AND LICENSE + +%% Xmlbuilder NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) 2013 Ozgur Ozcitak + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +========================================= +END OF Xmlbuilder 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 + +%% decompress-zip NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) Bower Team + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the Software), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +========================================= +END OF decompress-zip NOTICES, INFORMATION, AND LICENSE + +%% graceful-fs 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 graceful-fs NOTICES, INFORMATION, AND LICENSE + +%% mkpath NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (C) 2012 Jonathan Rajavuori + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Software), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF mkpath NOTICES, INFORMATION, AND LICENSE + +%% nopt 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 nopt 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. + +The file q.js is prefaced by the following additional third-party subcomponent information: + +/*! + * + * Copyright 2009-2012 Kris Kowal under the terms of the MIT + * license found at http://github.com/kriskowal/q/raw/master/LICENSE + * + * With parts by Tyler Close + * Copyright 2007-2009 Tyler Close under the terms of the MIT X license found + * at http://www.opensource.org/licenses/mit-license.html + * Forked at ref_send.js version: 2009-05-11 + * + * With parts by Mark Miller + * Copyright (C) 2011 Google Inc. + * + * 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 Q NOTICES, INFORMATION, AND LICENSE + +%% touch 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 touch NOTICES, INFORMATION, AND LICENSE + +%% isarray NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +(MIT) + +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 isarray 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 + +%% 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 + +%% end-of-stream 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 end-of-stream 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 + +%% 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, as follows: + + 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 + +%% 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 + +%% 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 + +%% path-is-absolute NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +path-is-absolute + +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. + +node.js: + +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 path-is-absolute NOTICES, INFORMATION, AND LICENSE + +%% graceful-fs 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 graceful-fs 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 + +%% Ltx NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) 2010 Stephan Maka + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +========================================= +END OF Ltx 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 + +%% 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 + +%% sax js 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. + +==== + +`String.fromCodePoint` by Mathias Bynens used according to terms of MIT +License, as follows: + + Copyright Mathias Bynens + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF sax js 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 + +%% xtend NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) 2012-2014 Raynos. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the Software), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +========================================= +END OF xtend 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 + +%% 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 + +%% 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 + +%% 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 + +%% 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 + +%% 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 + +%% 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 + +%% buffer-shims NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +# Copyright (c) 2016 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 buffer-shims NOTICES, INFORMATION, AND LICENSE + +%% Ctt NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Microsoft Public License (Ms-PL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. Definitions + +The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law. + +A "contribution" is the original software, or any additions or changes to the software. + +A "contributor" is any person that distributes its contribution under this license. + +"Licensed patents" are a contributor's patent claims that read directly on its contribution. + +2. Grant of Rights + +(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + +(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. Conditions and Limitations + +(A) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. + +(B) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + +(C) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + +(D) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + +(E) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. +========================================= +END OF Ctt 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. +========================================= +Includes code from Deep-eql + +Copyright (c) 2013 Jake Luer jake@alogicalparadox.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 hoek NOTICES, INFORMATION, AND LICENSE + +%% isemail NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) 2008-2011, Dominic Sayers +Copyright (c) 2013-2014, GlobeSherpa +Copyright (c) 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 + +%% 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 + +%% 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 + +%% ms NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +(The MIT License) + +Copyright (c) 2014 Guillermo Rauch +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-ecdsa-sig-formatter NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= + 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 node-ecdsa-sig-formatter NOTICES, INFORMATION, AND LICENSE + +%% node-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 node-jwa NOTICES, INFORMATION, AND LICENSE + +%% node-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 node-jws NOTICES, INFORMATION, AND LICENSE + +%% node-tar 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 node-tar NOTICES, INFORMATION, AND LICENSE + +%% OpenSSL NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= + LICENSE ISSUES + ============== + + The OpenSSL toolkit stays under a dual license, i.e. both the conditions of + the OpenSSL License and the original SSLeay license apply to the toolkit. + See below for the actual license texts. Actually both licenses are BSD-style + Open Source licenses. In case of any license issues related to OpenSSL + please contact openssl-core@openssl.org. + + OpenSSL License + --------------- + +/* ==================================================================== + * Copyright (c) 1998-2011 The OpenSSL Project. 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. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/) + * + * 4. The names OpenSSL Toolkit and OpenSSL Project must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called OpenSSL + * nor may OpenSSL appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/) + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED 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 OpenSSL PROJECT OR + * ITS 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. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ + + Original SSLeay License + ----------------------- + +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * 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 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. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com) + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * This product includes software written by Tim Hudson (tjh@cryptsoft.com) + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] +========================================= +END OF OpenSSL 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 + +%% 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 + +%% underscore.js NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) 2009-2017 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.js NOTICES, INFORMATION, AND LICENSE + diff --git a/_generated/AzureMysqlDeploymentV1/Window-MysqlCli-Installer.ps1 b/_generated/AzureMysqlDeploymentV1/Window-MysqlCli-Installer.ps1 new file mode 100644 index 000000000000..2589e7394a5c --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1/Window-MysqlCli-Installer.ps1 @@ -0,0 +1,243 @@ +################################################################################ +## File: Install-MysqlCli.ps1 +## Team: ReleaseManagement +## Desc: Install MySQL CLI +################################################################################ + +param ( + [string]$WorkingFolder, + [string]$VcredistName, + [string]$MysqlClientName + ) + +# Install exe through url +function Install-EXE +{ + Param + ( + [String]$FilePath, + [String]$Url, + [String]$Name, + [String[]]$ArgumentList + ) + + $exitCode = -1 + + try + { + if(!$FilePath){ + Write-Host "Downloading $Name..." + $FilePath = "${env:Temp}\$Name" + + Invoke-WebRequest -Uri $Url -OutFile $FilePath + } + + Write-Host "Starting Install $Name..." + $process = Start-Process -FilePath $FilePath -ArgumentList $ArgumentList -Wait -PassThru + $exitCode = $process.ExitCode + + if ($exitCode -eq 0 -or $exitCode -eq 3010) + { + Write-Host -Object 'Installation successful' + return $exitCode + } + else + { + Write-Host -Object "Non zero exit code returned by the installation process : $exitCode." + return $exitCode + } + } + catch + { + Write-Host -Object "Failed to install the Executable $Name" + Write-Host -Object $_.Exception.Message + return -1 + } +} + +function ExtractFiles +{ + <# + .DESCRIPTION + Extracts the zip file to the location provided. + It uses the latest command 'Expand-Archive' if available otherwise it fallsback to shell for extraction + .PARAMETER ZipPath + Path of the zip file to extract. + + .PARAMETER DestinationPath + Directory where the zip file needs to be extracted + #> + [CmdletBinding()] + Param + ( + [string]$ZipPath, + [string]$DestinationPath + ) + + try + { + if (-not (Test-Path $ZipPath)) + { + Write-Host "$ZipPath does not exist." + return + } + + if (-not (Test-Path $DestinationPath)) + { + New-Item -Type Directory $DestinationPath + } + + $zipFullPath = [System.IO.Path]::GetFullPath($ZipPath) + Write-Host "Extracting $zipFullPath to path: $DestinationPath" + if (Get-Command Expand-Archive -ErrorAction SilentlyContinue) + { + Expand-Archive $zipFullPath $DestinationPath -Force + } + else + { + $shellApplication = New-Object -ComObject Shell.Application + if ($shellApplication -eq $null) + { + Write-Host 'Unable to create Shell.' + exit + } + + $zipPackage = $shellApplication.NameSpace($zipFullPath) + if ($zipPackage -eq $null) + { + Write-Host 'Unable to create shell zipPackage.' + exit + } + + $destinationFolder = $shellApplication.NameSpace($DestinationPath) + + # CopyHere Flags + # 4 - Do not display a progress dialog box. + # 16 - Respond with "Yes to All" for any dialog box that is displayed. + + $destinationFolder.CopyHere($zipPackage.Items(),20) + } + } + catch + { + Write-Host $_.Exception.Message + exit + } +} + +# Set new machine path +function Set-MachinePath{ + [CmdletBinding()] + param( + [string]$NewPath + ) + Set-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment' -Name Path -Value $NewPath + return $NewPath +} + +# Get machine path from registry +function Get-MachinePath{ + [CmdletBinding()] + param( + + ) + $currentPath = (Get-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment' -Name PATH).Path + return $currentPath +} + +# Append path of exe in existing path +function Add-MachinePathItem +{ + [CmdletBinding()] + param( + [string]$PathItem + ) + + $currentPath = Get-MachinePath + $newPath = $PathItem + ';' + $currentPath + return Set-MachinePath -NewPath $newPath +} + +$command = Get-Command -Name 'mysql' -ErrorAction SilentlyContinue +if($command) +{ + return 0; +} + +$InstallerURI = 'http://download.microsoft.com/download/0/5/6/056dcda9-d667-4e27-8001-8a0c6971d6b1/vcredist_x64.exe' +$InstallerName = 'vcredist_x64.exe' +$ArgumentList = ('/install', '/quiet', '/norestart' ) +if($WorkingFolder -and $VcredistName ) +{ + # install vcredist from working folder + cd $WorkingFolder + $exitCode = Install-EXE -FilePath $VcredistName -Name $InstallerName -ArgumentList $ArgumentList +} +else +{ + $exitCode = Install-EXE -Url $InstallerURI -Name $InstallerName -ArgumentList $ArgumentList + +} + + +## Downloading mysql jar +$uri = 'https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.21-winx64.zip' +$mysqlPath = 'C:\mysql-5.7.21-winx64\bin' + +if ($exitCode -eq 0 -or $exitCode -eq 3010) +{ + if($workingFolder -and $MysqlClientName ) + { + cd $workingFolder + # Expand the zip + $pwdPath = $pwd.Path + if ( $pwdPath -notmatch '.+?\\$') + { + $pwdPath += '\' + } + + $sourcePath = $pwdPath + "mysql-5.7.21-winx64" + Copy-Item -Recurse -Path $sourcePath -destination C:\ + } + else + { + $retry = $false + $retryCount = 1; + do{ + try + { + # Get the latest mysql command line tools . + Invoke-WebRequest -UseBasicParsing -Uri $uri -OutFile mysql.zip + } + catch + { + $retryCount += 1 + $retry = $true + + } + } + while($retry -and $retryCount -lt 3) + + + # Expand the zip + $pwdPath = $pwd.Path + if ( $pwdPath -notmatch '.+?\\$') + { + $pwdPath += '\' + } + $sourcePath = $pwdPath + "mysql.zip" + ExtractFiles $sourcePath "C:\" + + # Deleting zip folder + Remove-Item -Recurse -Force mysql.zip + } + + # Adding mysql in system environment path + Add-MachinePathItem $mysqlPath + + return 0; +} +else +{ + return $exitCode; +} diff --git a/_generated/AzureMysqlDeploymentV1/azuremysqldeploy.ts b/_generated/AzureMysqlDeploymentV1/azuremysqldeploy.ts new file mode 100644 index 000000000000..059258393cdc --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1/azuremysqldeploy.ts @@ -0,0 +1,73 @@ +import task = require('azure-pipelines-task-lib/task'); +import Q = require('q'); +import path = require('path'); +import { FirewallRule, FirewallAddressRange } from './models/Firewall'; +import { MysqlServer } from './models/MysqlServer'; +import { AzureMysqlTaskParameter } from './models/AzureMysqlTaskParameter'; +import { FirewallOperations } from './operations/FirewallOperations'; +import { MysqlServerOperations } from './operations/MysqlServerOperations'; +import { ToolPathOperations } from './operations/ToolPathOperations'; +import { ISqlClient } from './sql/ISqlClient'; +import { MysqlClient } from './sql/MysqlClient'; +import { AzureRMEndpoint } from 'azure-pipelines-tasks-azure-arm-rest/azure-arm-endpoint'; +import { AzureEndpoint } from 'azure-pipelines-tasks-azure-arm-rest/azureModels'; +import { ApplicationTokenCredentials } from 'azure-pipelines-tasks-azure-arm-rest/azure-arm-common'; + +async function run() { + let azureMysqlTaskParameter: AzureMysqlTaskParameter; + let firewallAdded: boolean; + let firewallOperations: FirewallOperations; + let mysqlServer: MysqlServer; + try { + task.debug('Task execution started'); + task.setResourcePath(path.join( __dirname, 'task.json')); + task.setResourcePath(path.join( __dirname, 'node_modules/azure-pipelines-tasks-webdeployment-common/module.json')); + + // Get all task input parameters + azureMysqlTaskParameter = new AzureMysqlTaskParameter(); + task.debug('parsed task inputs'); + const endpoint: AzureEndpoint = await new AzureRMEndpoint(azureMysqlTaskParameter.getConnectedServiceName()).getEndpoint(); + + var endpointTelemetry = '{"endpointId":"' + azureMysqlTaskParameter.getConnectedServiceName() + '"}'; + console.log("##vso[telemetry.publish area=TaskEndpointId;feature=AzureMysqlDeployment]" + endpointTelemetry); + if(!endpoint) { + throw new Error(task.loc("AzureEndpointCannotBeNull")); + } + + const mysqlServerOperations: MysqlServerOperations = new MysqlServerOperations(endpoint.applicationTokenCredentials, endpoint.subscriptionID); + // Get mysql server data entered by user + mysqlServer = await mysqlServerOperations.getMysqlServerFromServerName(azureMysqlTaskParameter.getServerName()); + task.debug('Mysql server details from server name: ' + JSON.stringify(mysqlServer)); + const mysqlClientPath: string = await new ToolPathOperations().getInstalledPathOfMysql(); + if(mysqlClientPath) { + // Mysql client + const sqlClient: ISqlClient = new MysqlClient(azureMysqlTaskParameter, mysqlServer.getFullyQualifiedName(), mysqlClientPath); + firewallOperations = new FirewallOperations(endpoint.applicationTokenCredentials, endpoint.subscriptionID); + //Invoke firewall operation to validate user has permission for server or not. If not whitelist the IP + firewallAdded = await firewallOperations.invokeFirewallOperations(azureMysqlTaskParameter, sqlClient, mysqlServer); + //Execute sql script entered by user + await sqlClient.executeSqlCommand(); + } + else { + throw new Error(task.loc("NotAbleToGetInstalledLocationOfMysqlFromPath")); + } + } + catch(exception) { + task.debug('Getting exception: '+exception); + task.setResult(task.TaskResult.Failed, exception); + } + finally{ + // Delete firewall rule in case of automatic added rule or either user wants to delete it + if(firewallAdded && azureMysqlTaskParameter && azureMysqlTaskParameter.getDeleteFirewallRule()) { + task.debug('Deleting firewall rule.'); + if(firewallOperations && mysqlServer) { + await firewallOperations.deleteFirewallRule(mysqlServer.getName(), mysqlServer.getResourceGroupName()); + } + task.debug('Sucessfully deleted firewall rule.'); + } + } + + task.debug('Task completed.'); +} + +run(); diff --git a/_generated/AzureMysqlDeploymentV1/icon.png b/_generated/AzureMysqlDeploymentV1/icon.png new file mode 100644 index 000000000000..dce6892be2a5 Binary files /dev/null and b/_generated/AzureMysqlDeploymentV1/icon.png differ diff --git a/_generated/AzureMysqlDeploymentV1/icon.svg b/_generated/AzureMysqlDeploymentV1/icon.svg new file mode 100644 index 000000000000..a2df3e55b8c7 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1/icon.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/_generated/AzureMysqlDeploymentV1/make.json b/_generated/AzureMysqlDeploymentV1/make.json new file mode 100644 index 000000000000..bd92fcd91053 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1/make.json @@ -0,0 +1,11 @@ +{ + "rm": [ + { + "items": [ + "node_modules/azure-pipelines-tasks-azure-arm-rest/node_modules/azure-pipelines-task-lib", + "node_modules/azure-pipelines-tasks-webdeployment-common/node_modules/azure-pipelines-task-lib" + ], + "options": "-Rf" + } + ] +} \ No newline at end of file diff --git a/_generated/AzureMysqlDeploymentV1/models/AzureMysqlTaskParameter.ts b/_generated/AzureMysqlDeploymentV1/models/AzureMysqlTaskParameter.ts new file mode 100644 index 000000000000..bcc4813c027e --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1/models/AzureMysqlTaskParameter.ts @@ -0,0 +1,91 @@ +import tl = require("azure-pipelines-task-lib/task"); + +export class AzureMysqlTaskParameter { + + private connectedServiceName: string; + private serverName: string; + private databaseName: string; + private sqlUserName: string; + private sqlPassword: string; + private taskNameSelector: string; + private sqlFile: string; + private sqlInline: string; + private sqlAdditionalArguments: string; + private ipDetectionMethod: string; + private startIpAddress: string; + private endIpAddress: string; + private deleteFirewallRule: boolean; + + constructor() { + try { + this.connectedServiceName = tl.getInput('ConnectedServiceName', true); + this.serverName = tl.getInput('ServerName', true); + this.databaseName = tl.getInput('DatabaseName', false); + this.sqlUserName = tl.getInput('SqlUsername', true); + this.sqlPassword = tl.getInput('SqlPassword', true); + this.taskNameSelector = tl.getInput('TaskNameSelector', true); + this.sqlFile = tl.getInput('SqlFile', false); + this.sqlInline = tl.getInput('SqlInline', false); + this.sqlAdditionalArguments = tl.getInput('SqlAdditionalArguments', false); + this.ipDetectionMethod = tl.getInput('IpDetectionMethod', false); + this.startIpAddress = tl.getInput('StartIpAddress', false); + this.endIpAddress = tl.getInput('EndIpAddress', false); + this.deleteFirewallRule = tl.getBoolInput('DeleteFirewallRule', false); + } + catch (error) { + throw new Error(tl.loc("ARGD_ConstructorFailed", error.message)); + } + } + + public getConnectedServiceName(): string { + return this.connectedServiceName; + } + + public getServerName(): string { + return this.serverName; + } + + public getDatabaseName(): string { + return this.databaseName; + } + + public getSqlPassword(): string { + return this.sqlPassword; + } + + public getSqlUserName(): string { + return this.sqlUserName; + } + + public getTaskNameSelector(): string { + return this.taskNameSelector; + } + + public getSqlFile(): string { + return this.sqlFile; + } + + public getSqlInline(): string { + return this.sqlInline; + } + + public getSqlAdditionalArguments(): string { + return this.sqlAdditionalArguments; + } + + public getIpDetectionMethod(): string { + return this.ipDetectionMethod; + } + + public getStartIpAddress(): string { + return this.startIpAddress; + } + + public getEndIpAddress(): string { + return this.endIpAddress; + } + + public getDeleteFirewallRule(): boolean { + return this.deleteFirewallRule; + } +} diff --git a/_generated/AzureMysqlDeploymentV1/models/Firewall.ts b/_generated/AzureMysqlDeploymentV1/models/Firewall.ts new file mode 100644 index 000000000000..08d269d90436 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1/models/Firewall.ts @@ -0,0 +1,52 @@ +import tl = require("azure-pipelines-task-lib/task"); + +export class FirewallRule { + private properties: FirewallAddressRange; + private name: string; + + constructor(name: string, firewallAddressRange: FirewallAddressRange){ + if ( !name || typeof name.valueOf() !== 'string') { + throw new Error(tl.loc("FirewallRuleNameCannotBeEmpty")); + } + if (!firewallAddressRange) { + throw new Error(tl.loc("FirewallAddressRangeCannotBeEmpty")); + } + + this.name = name; + this.properties = firewallAddressRange; + } + + public getProperties(): FirewallAddressRange{ + return this.properties; + } + + public getName(): string{ + return this.name; + } +} + +export class FirewallAddressRange { + private startIpAddress: string; + private endIpAddress: string; + + constructor(startIpAddress: string, endIpAddress: string){ + if ( !startIpAddress ||typeof startIpAddress.valueOf() !== 'string') { + throw new Error(tl.loc("StartIpAddressCannotBeEmpty")); + } + + if (!endIpAddress || typeof endIpAddress.valueOf() !== 'string') { + throw new Error(tl.loc("EndIpAddressCannotBeEmpty")); + } + + this.startIpAddress = startIpAddress; + this.endIpAddress = endIpAddress; + } + + public getEndIpAddress(): string{ + return this.endIpAddress; + } + + public getStartIpAddress(): string{ + return this.startIpAddress; + } +} diff --git a/_generated/AzureMysqlDeploymentV1/models/FirewallConfiguration.ts b/_generated/AzureMysqlDeploymentV1/models/FirewallConfiguration.ts new file mode 100644 index 000000000000..c74c608613b9 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1/models/FirewallConfiguration.ts @@ -0,0 +1,18 @@ +export class FirewallConfiguration { + + private ipAdressAlreadyAdded: boolean; + private ipAddress: string; + + constructor(ipAdressAlreadyAdded: boolean, iPAddress?: string) { + this.ipAdressAlreadyAdded = ipAdressAlreadyAdded; + this.ipAddress = iPAddress; + } + + public isIpAdressAlreadyAdded(): boolean{ + return this.ipAdressAlreadyAdded; + } + + public getIpAddress(): string{ + return this.ipAddress; + } +} diff --git a/_generated/AzureMysqlDeploymentV1/models/MysqlServer.ts b/_generated/AzureMysqlDeploymentV1/models/MysqlServer.ts new file mode 100644 index 000000000000..a5c86a8ad8a8 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1/models/MysqlServer.ts @@ -0,0 +1,43 @@ +import tl = require("azure-pipelines-task-lib/task"); + +export class MysqlServer { + private name: string; + private fullyQualifiedName: string; + private resourceGroupName: string; + + constructor(name: string, fullyQualifiedName: string, resourceGroupName: string){ + if (!this.isNameValid(name)) { + throw new Error(tl.loc("MysqlServerNameCannotBeEmpty")); + } + if (!this.isNameValid(fullyQualifiedName)) { + throw new Error(tl.loc("MysqlFullyQualifiedServerNameCannotBeEmpty")); + } + if(!this.isNameValid(resourceGroupName)){ + throw new Error(tl.loc("ResourceGroupCannotBeEmpty")); + } + + this.name = name; + this.fullyQualifiedName = fullyQualifiedName; + this.resourceGroupName = resourceGroupName; + } + + public getResourceGroupName(): string{ + return this.resourceGroupName; + } + + public getName(): string{ + return this.name; + } + + public getFullyQualifiedName(): string{ + return this.fullyQualifiedName; + } + + private isNameValid(name: string): boolean{ + if (name === null || name === undefined || typeof name.valueOf() !== 'string') { + return false; + }else{ + return true; + } + } +} diff --git a/_generated/AzureMysqlDeploymentV1/operations/FirewallOperations.ts b/_generated/AzureMysqlDeploymentV1/operations/FirewallOperations.ts new file mode 100644 index 000000000000..3e9bf3e7a81b --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1/operations/FirewallOperations.ts @@ -0,0 +1,125 @@ +import task = require('azure-pipelines-task-lib/task'); +import { ApplicationTokenCredentials} from 'azure-pipelines-tasks-azure-arm-rest/azure-arm-common'; +import { AzureMysqlManagementClient } from 'azure-pipelines-tasks-azure-arm-rest/azure-arm-mysql'; +import { FirewallRule, FirewallAddressRange } from '../models/Firewall'; +import { MysqlServer } from '../models/MysqlServer'; +import { AzureMysqlTaskParameter } from '../models/AzureMysqlTaskParameter'; +import { FirewallConfiguration } from '../models/FirewallConfiguration'; +import { ISqlClient } from '../sql/ISqlClient'; +import Q = require('q'); + +export class FirewallOperations { + + private _azureMysqManagementClient: AzureMysqlManagementClient; + private _firewallName: string; + + constructor(azureCredentials: ApplicationTokenCredentials, subscriptionId: string) { + this._azureMysqManagementClient = new AzureMysqlManagementClient(azureCredentials, subscriptionId); + } + + /** + * Add firewall rule for particular mysql server + * @param serverName mysql server name + * @param firewallRule firewallRule i.e name and Ip Adress range + * @param resourceGroupName mysql server resource group name + * + * @returns operation is success or failure + */ + public async addFirewallRule(serverName: string, firewallRule: FirewallRule, resourceGroupName: string): Promise { + let defer = Q.defer(); + this._azureMysqManagementClient.firewallRules.createOrUpdate(resourceGroupName, serverName, firewallRule.getName(), firewallRule, (error, result, request, response) => { + if(error){ + task.debug("Getting error during adding firewall rule: "+ error); + defer.reject(new Error(task.loc("NotAbleToAddFirewallRule", error))); + }else{ + defer.resolve(); + } + }); + return defer.promise; + } + + /** + * Delete firewall rule for mysql server + * @param serverName mysql server name + * @param resourceGroupName mysql server resource group name + * + * @returns operation is success or failure + */ + public async deleteFirewallRule(serverName: string, resourceGroupName: string): Promise { + let defer = Q.defer(); + this._azureMysqManagementClient.firewallRules.delete(resourceGroupName, serverName, this._firewallName, (error, result, request, response) => { + if(error){ + task.debug("Getting error during deleting firewall rule: "+ error); + defer.reject(new Error(task.loc("NotAbleToDeleteFirewallRule", error))); + }else{ + defer.resolve(); + } + }); + return defer.promise; + } + + /** + * To check agent box has permission to connect with mysqlServer or not. If not then add firewall rule to whitelist this IP. + * @param azureMysqlTaskParameter task input parameters + * @param sqlClient mysql client + * @param resourceGroupName mysql server resource group name + * + * @returns firewall rule added or not + */ + public async invokeFirewallOperations(azureMysqlTaskParameter: AzureMysqlTaskParameter, sqlClient: ISqlClient, mysqlServer: MysqlServer) : Promise { + var defer = Q.defer(); + if(azureMysqlTaskParameter.getIpDetectionMethod() ==='IPAddressRange'){ + this._preparefirewallRule(mysqlServer.getName(), azureMysqlTaskParameter.getStartIpAddress(), azureMysqlTaskParameter.getEndIpAddress(), mysqlServer.getResourceGroupName(), "IPAddressRange_" + this._getFirewallRuleName()).then(() =>{ + let firewallConfiguration: FirewallConfiguration = sqlClient.getFirewallConfiguration(); + console.log(" firewall conf " +JSON.stringify(firewallConfiguration)); + + if(!firewallConfiguration.isIpAdressAlreadyAdded()){ + task.debug("Agent Ip address not in added firewall rule: "+ firewallConfiguration.getIpAddress()); + defer.reject(new Error(task.loc("AgentIpAddressIsMissingInAddedFirewallRule"))); + }else{ + defer.resolve(true); + } + },(error) =>{ + task.debug("Error during adding firewall rule for IPAddressRange: "+ error); + defer.reject(error); + }); + }else { + const firewallConfiguration: FirewallConfiguration = sqlClient.getFirewallConfiguration(); + if(!firewallConfiguration.isIpAdressAlreadyAdded()){ + this._preparefirewallRule(mysqlServer.getName(), firewallConfiguration.getIpAddress(), firewallConfiguration.getIpAddress(), mysqlServer.getResourceGroupName(), "AutoDetect_" + this._getFirewallRuleName()).then(() =>{ + defer.resolve(true); + },(error) =>{ + task.debug("Error during adding firewall rule for IPAddressRange: "+ error); + defer.reject(error); + }); + }else{ + defer.resolve(false); + } + } + return defer.promise; + } + + /** + * Prepare firewall rule for mysql server + */ + private async _preparefirewallRule(serverName: string, startIpAddress: string, endIpAddress: string, resourceGroupName: string, ruleName: string): Promise { + var defer = Q.defer(); + this._firewallName = ruleName; + const firewallAddressRange: FirewallAddressRange = new FirewallAddressRange(startIpAddress, endIpAddress); + const firewallRule: FirewallRule = new FirewallRule(this._firewallName, firewallAddressRange); + this.addFirewallRule(serverName, firewallRule, resourceGroupName).then(() =>{ + task.debug('Firewall configuration name added : ' + this._firewallName); + defer.resolve(); + },(error) => { + defer.reject(error) + }); + return defer.promise; + } + + private _getFirewallRuleName(): string { + let buildId = task.getVariable('build.buildId'); + let releaseId = task.getVariable('release.releaseId'); + let firewallRuleName: string = (releaseId ? releaseId : buildId) + Date.now().toString(); + return firewallRuleName; + } +} diff --git a/_generated/AzureMysqlDeploymentV1/operations/MysqlServerOperations.ts b/_generated/AzureMysqlDeploymentV1/operations/MysqlServerOperations.ts new file mode 100644 index 000000000000..8e517942eae2 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1/operations/MysqlServerOperations.ts @@ -0,0 +1,77 @@ +import task = require('azure-pipelines-task-lib/task'); +import { AzureMysqlManagementClient } from 'azure-pipelines-tasks-azure-arm-rest/azure-arm-mysql'; +import { AzureMysqlTaskParameter } from '../models/AzureMysqlTaskParameter'; +import { ApplicationTokenCredentials} from 'azure-pipelines-tasks-azure-arm-rest/azure-arm-common'; +import { MysqlServer } from '../models/MysqlServer'; +import Q = require('q'); + +export class MysqlServerOperations{ + + private _azureMysqManagementClient: AzureMysqlManagementClient; + + constructor(azureCredentials: ApplicationTokenCredentials, subscriptionId: string) { + this._azureMysqManagementClient = new AzureMysqlManagementClient(azureCredentials, subscriptionId); + } + + /** + * Get mysql server data from server name including resource group + * @param serverName mysql server name to get details + * + * @returns mysql server details + */ + public async getMysqlServerFromServerName(serverName: string): Promise { + let defer = Q.defer(); + this._azureMysqManagementClient.mysqlServers.list((error, result, request, response) => { + if(error){ + task.debug("Error during fetching mysql severs list: "+ error); + defer.reject(new Error(task.loc("NotAbleToGetAllServers", error))); + }else{ + try{ + const mysqlServer = this._getMysqlServerFromResponse(result, serverName); + defer.resolve(mysqlServer); + } + catch(error){ + defer.reject(error); + } + } + }); + return defer.promise; + } + + /** + * Filter mysqlServer data from list of mysql server in particular subscription + * @param result List of mysql server in a subscription + * @param serverName server name + * + * @returns MysqlServer data + */ + private _getMysqlServerFromResponse(result: any, serverName: string) : MysqlServer{ + let mysqlServer: MysqlServer; + if(result && result.length > 0){ + result.forEach((resultObject) => { + if(resultObject && resultObject.properties && resultObject.properties.fullyQualifiedDomainName === serverName){ + mysqlServer = new MysqlServer(resultObject.name, resultObject.properties.fullyQualifiedDomainName, this._getResourceGroupNameFromUrl(resultObject.id)); + } + }); + }else{ + task.debug("Mysql server list is empty or null."); + throw new Error(task.loc("EmptyOrNullServerList")); + } + return mysqlServer; + } + + /** + * Get resource group name from mysql server url i.e Id + */ + private _getResourceGroupNameFromUrl(id: string): string{ + if(!id){ + throw new Error(task.loc("UnableToFindResourceGroupDueToNullId")); + } + const pathArray =id.split("/"); + if(pathArray[3] != 'resourceGroups'){ + throw new Error(task.loc("UnableToFindResourceGroupDueToInvalidId")); + } + return pathArray[4]; + } + +} diff --git a/_generated/AzureMysqlDeploymentV1/operations/MysqlUtiliy.ts b/_generated/AzureMysqlDeploymentV1/operations/MysqlUtiliy.ts new file mode 100644 index 000000000000..cc9ce6bb7f1f --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1/operations/MysqlUtiliy.ts @@ -0,0 +1,202 @@ + +import task = require('azure-pipelines-task-lib/task'); +export class Utility { + + /** + * Is name valid or not + */ + public static isNameValid(name: string): boolean { + if (name === null || name === undefined || typeof name.valueOf() !== 'string') { + return false; + }else{ + return true; + } + } + + /** + * Get all the additional argumeent passed + * @param argString argument string + */ + public static getAdditionalArgumentForTelemtry(argString: string) : string[]{ + var args = []; + var options = Utility.getMysqlOptions(); + options.forEach((option) => { + var matched = argString.match(option); + if(matched && matched.length > 0 ){ + args.push(option); + } + }); + task.debug("additional argument passed: "+ JSON.stringify(args)); + return args; + } + + public static getMysqlOptions() : string [] + { + return [ + "--auto-rehash", + "--auto-vertical-output", + "--batch", + "-B", + "--binary-as-hex", + "-b", + "--help", + "--binary-mode", + "--bind-address", + "--character-sets-dir", + "--column-names", + "--column-type-info", + "--comments", + "-c", + "--compress", + "-C", + "--connect-expired-password", + "--database=db_name", + "-D", + "--debug[=debug_options]", + "-#", + "--debug-check", + "--debug-info", + "-T", + "--default-auth", + "--default-character-set", + "--defaults-extra-file", + "--defaults-file", + "--defaults-group-suffix", + "--delimiter", + "--disable-named-commands", + "--enable-cleartext-plugin", + "--execute=statement", + "-e", + "--force", + "-f", + "--histignore", + "--host=host_name", + "-h", + "--html", + "-H", + "--ignore-spaces", + "-i", + "--init-command", + "--line-numbers", + "--local-infile", + "--login-path", + "--named-commands", + "-G", + "--no-auto-rehash", + "-A", + "--no-beep", + "-b", + "--no-defaults", + "--one-database", + "-o", + "--pager", + "--password", + "-p", + "--pipe", + "-W", + "--plugin-dir", + "--port", + "-P", + "--print-defaults", + "--prompt", + "--protocol", + "--quick", + "-q", + "--raw", + "-r", + "--reconnect", + "--safe-updates", + "--i-am-a-dummy", + "-U", + "--secure-auth", + "--server-public-key-path", + "--shared-memory-base-name", + "--show-warnings", + "--sigint-ignore", + "--silent", + "-s", + "--skip-column-names", + "-N", + "--skip-line-numbers", + "-L", + "--socket=path", + "-S", + "--ssl", + "--syslog", + "-j", + "--table", + "-t", + "--tee", + "--tls-version", + "--unbuffered", + "-n", + "--user", + "-u", + "--verbose", + "-v", + "--version", + "-V", + "--vertical", + "-E", + "--wait", + "-w", + "--xml", + "-X", + "--connect_timeout", + "--max_allowed_packet", + "--max_join_size", + "--net_buffer_length", + "--select_limit" + ]; + } + + public static argStringToArray(argString): string[] { + var args = []; + var inQuotes = false; + var escaped = false; + var arg = ''; + var append = function (c) { + // we only escape double quotes. + if (escaped && c !== '"') { + arg += '\\'; + } + arg += c; + escaped = false; + }; + for (var i = 0; i < argString.length; i++) { + var c = argString.charAt(i); + if (c === '"') { + if (!escaped) { + inQuotes = !inQuotes; + } + else { + append(c); + } + continue; + } + if (c === "\\" && inQuotes) { + if(escaped) { + append(c); + } + else { + escaped = true; + } + + continue; + } + if (c === ' ' && !inQuotes) { + if (arg.length > 0) { + args.push(arg); + arg = ''; + } + continue; + } + append(c); + } + if (arg.length > 0) { + args.push(arg.trim()); + } + return args; + } + +} \ No newline at end of file diff --git a/_generated/AzureMysqlDeploymentV1/operations/ToolPathOperations.ts b/_generated/AzureMysqlDeploymentV1/operations/ToolPathOperations.ts new file mode 100644 index 000000000000..a5cbcb2f88ec --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1/operations/ToolPathOperations.ts @@ -0,0 +1,170 @@ +import task = require('azure-pipelines-task-lib/task'); +var winreg = require('winreg'); +import Q = require('q'); + +export class ToolPathOperations { + + /** + * Get installed path of mysql either it is linux or windows + */ + public async getInstalledPathOfMysql(): Promise { + let defer = Q.defer(); + // To check either it is linux or windows platform + if(task.osType().match(/^Win/)){ + this.getInstalledPathOfMysqlForWindow().then((path) => { + defer.resolve(path); + },(error) =>{ + task.debug("Error during window mysql path finding: "+ error); + defer.reject(task.loc("WindowMysqlClientMissingError")); + }); + } + else{ + // linux check + this.getInstalledPathOfMysqlForLinux().then((path) => { + defer.resolve(path); + },(error) =>{ + task.debug("Error during linux mysql path finding: "+ error); + defer.reject(task.loc("LinuxMysqlClientMissingError")); + }); + } + + return defer.promise; + } + + + /** + * Get installed path of mysql for Linux + */ + public async getInstalledPathOfMysqlForLinux(): Promise { + let defer = Q.defer(); + try{ + const path = task.which("mysql", true); + defer.resolve(path); + }catch(error){ + defer.reject(error); + } + + return defer.promise; + } + + /** + * Get installed path of mysql for windows + */ + public async getInstalledPathOfMysqlForWindow(): Promise { + let defer = Q.defer(); + // If user has installed 32 bit mysql client in 64 bit machine + this.getInstalledLocationFromPath("\\Software\\Wow6432Node\\MySQL AB").then((path) => { + task.debug('Window Wow6432 mysql executable path: '+path); + defer.resolve(path + "bin\\mysql.exe"); + },(error) =>{ + task.debug("Error during finding of Window Wow6432 mysql executable path: "+ error); + this.getInstalledLocationFromPath("\\Software\\MySQL AB").then((path) => { + task.debug('Window mysql executable path: '+path); + defer.resolve(path + "bin\\mysql.exe"); + },(error) =>{ + task.debug("Error during finding of Window mysql executable path: "+ error); + try{ + const path = task.which("mysql", true); + if(path){ + task.debug('Window mysql executable path from enviroment variable: '+path); + defer.resolve(path); + }else{ + defer.reject(task.loc("NotAbleToGetInstalledLocationOfMysqlFromPath")); + } + } + catch(exception){ + task.debug("Error during finding of Window mysql executable path from environment path: "+ exception); + defer.reject(task.loc("NotAbleToGetInstalledLocationOfMysqlFromPath")); + } + }); + }); + return defer.promise; + } + + + /** + * Get installed location from path + * @param path path of window registry + * + * @returns installed path + */ + public async getInstalledLocationFromPath(path: string): Promise { + let defer = Q.defer(); + task.debug('Getting executable path of mysql client for registry path: '+ path); + this._getToolRegKeyFromPath(path).then((regKey) => { + this._getToolInstalledPathFromRegKey(regKey).then((installedPath) => { + defer.resolve(installedPath); + },(error) =>{ + defer.reject(error); + }) + },(error) =>{ + defer.reject(error); + }); + + return defer.promise; + } + + /** + * Get resgistry key from path + * @param path path of window registry + * + * @returns registry key + */ + private _getToolRegKeyFromPath(path: string): Q.Promise { + var defer = Q.defer(); + var regKey = new winreg({ + hive: winreg.HKLM, + key: path + }); + + regKey.keys(function(err, subRegKeys) { + if(err) { + task.debug('Error during fetching registry key from path: '+ err); + defer.reject(new Error(task.loc("UnableToFindMysqlFromRegistryOnMachineError", err))); + } + let resgistryKeyResult: string; + if(subRegKeys){ + for(var index in subRegKeys) { + let subRegKey: string = subRegKeys[index].key; + if(subRegKey.match("MySQL Server")){ + task.debug('Window mysql registry key: '+ subRegKey); + resgistryKeyResult = subRegKey; + } + } + } + if(resgistryKeyResult){ + defer.resolve(resgistryKeyResult); + }else{ + defer.reject(new Error(task.loc("UnableToFindMysqlFromRegistry"))); + } + }); + + return defer.promise; + } + + /** + * Get installed path from registry key + * @param registryKey window registry key + * + * @returns installed path + */ + private _getToolInstalledPathFromRegKey(registryKey: string): Q.Promise { + var defer = Q.defer(); + var regKey = new winreg({ + hive: winreg.HKLM, + key: registryKey + }); + + regKey.get("Location", function(err,item) { + if(err) { + task.debug('Error during fetching installed path from registry key: '+ err); + defer.reject(new Error(task.loc("UnableToFindTheLocationOfMysqlFromRegistryOnMachineError", err))); + }else{ + task.debug('Window mysql installed path from registry key: '+ item.value); + defer.resolve(item.value); + } + }); + + return defer.promise; + } +} diff --git a/_generated/AzureMysqlDeploymentV1/package-lock.json b/_generated/AzureMysqlDeploymentV1/package-lock.json new file mode 100644 index 000000000000..2170a15c096c --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1/package-lock.json @@ -0,0 +1,1060 @@ +{ + "name": "vsts-tasks-azuremysql", + "version": "1.0.3", + "lockfileVersion": 1, + "requires": true, + "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.0", + "resolved": "https://registry.npmjs.org/@types/concat-stream/-/concat-stream-1.6.0.tgz", + "integrity": "sha1-OU2+C7X+5Gs42JZzXoto7yOQ0A0=", + "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": "10.17.50", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.50.tgz", + "integrity": "sha512-vwX+/ija9xKc/z9VqMCdbf4WYcMTGsI0I/L/6shIF3qXURxZOhPQlPRHtjTpiNhAwn0paMJzlOQqw6mAGEQnTA==" + }, + "@types/q": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.0.7.tgz", + "integrity": "sha512-0WS7XU7sXzQ7J1nbnMKKYdjrrFoO3YtZYgUzeV8JFXffPnHfvSJQleR70I8BOAsOm14i4dyaAZ3YzqIl1YhkXQ==" + }, + "@types/qs": { + "version": "6.9.6", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.6.tgz", + "integrity": "sha512-0/HnwIfW4ki2D8L8c9GVcG5I72s9jP5GSLVF0VIXDW00kmIpA6O33G7a8n59Tmh7Nz0WUC3rSb7PTY/sdW2JzA==" + }, + "@xmldom/xmldom": { + "version": "git+https://github.com/xmldom/xmldom.git#238b1ea8431fae8817812c68d55b4933248af07e", + "from": "git+https://github.com/xmldom/xmldom.git#0.8.6" + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "agent-base": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", + "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==" + }, + "archiver": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-1.2.0.tgz", + "integrity": "sha512-5GQRAgpHGPwWIiMzL9lthd+t75fLi8BpRBYtflomSYv2i6+EO9trtwWAm2+zGjIuwKmVmBRknAZFFBSqxYxiJw==", + "requires": { + "archiver-utils": "^1.3.0", + "async": "^2.0.0", + "buffer-crc32": "^0.2.1", + "glob": "^7.0.0", + "lodash": "^4.8.0", + "readable-stream": "^2.0.0", + "tar-stream": "^1.5.0", + "zip-stream": "^1.1.0" + } + }, + "archiver-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-1.3.0.tgz", + "integrity": "sha1-5QtMCccL89aA4y/xt5lOn52JUXQ=", + "requires": { + "glob": "^7.0.0", + "graceful-fs": "^4.1.0", + "lazystream": "^1.0.0", + "lodash": "^4.8.0", + "normalize-path": "^2.0.0", + "readable-stream": "^2.0.0" + } + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + }, + "async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "requires": { + "lodash": "^4.17.14" + } + }, + "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==" + }, + "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": "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" + } + }, + "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.4", + "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-azure-arm-rest/-/azure-pipelines-tasks-azure-arm-rest-3.223.4.tgz", + "integrity": "sha512-3RPwQfTk38HYGOCTmG2+UVM2JClaUV76YVqYrR/AhShMMFkg1wQIbpQZ7PLUh0YPbyWqFhmdaZla0JTRL9MWkg==", + "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/q": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", + "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==" + }, + "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-webdeployment-common": { + "version": "4.222.0", + "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-webdeployment-common/-/azure-pipelines-tasks-webdeployment-common-4.222.0.tgz", + "integrity": "sha512-skdgj1qHnVF/aAbcfa09oGHLJTbgX6ocb8rdoZvRnMjggUlAnJV8socuZLPrWrq77jDnCigErSRwSLTphsReGA==", + "requires": { + "@types/mocha": "^5.2.7", + "@types/node": "^10.17.0", + "@xmldom/xmldom": "git+https://github.com/xmldom/xmldom.git#0.8.6", + "archiver": "1.2.0", + "azure-pipelines-task-lib": "^4.2.0", + "decompress-zip": "^0.3.3", + "ltx": "2.8.0", + "q": "1.4.1", + "winreg": "1.2.2", + "xml2js": "0.4.13" + }, + "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" + }, + "dependencies": { + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==" + } + } + }, + "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": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", + "integrity": "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==", + "requires": { + "buffers": "~0.1.1", + "chainsaw": "~0.1.0" + } + }, + "bl": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", + "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", + "requires": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, + "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" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=" + }, + "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.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + }, + "buffers": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", + "integrity": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==" + }, + "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==" + }, + "chainsaw": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==", + "requires": { + "traverse": ">=0.3.0 <0.4" + } + }, + "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" + } + }, + "compress-commons": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-1.1.0.tgz", + "integrity": "sha1-n0RguxKIVkx0c5FuApiqPDINyts=", + "requires": { + "buffer-crc32": "^0.2.1", + "crc32-stream": "^1.0.0", + "normalize-path": "^2.0.0", + "readable-stream": "^2.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.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "crc32-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-1.0.0.tgz", + "integrity": "sha1-6hVeXh1zjtN3hDj/6S/+KhQa6z8=", + "requires": { + "buffer-crc32": "^0.2.1", + "readable-stream": "^2.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==" + } + } + }, + "decompress-zip": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/decompress-zip/-/decompress-zip-0.3.3.tgz", + "integrity": "sha512-/fy1L4s+4jujqj3kNptWjilFw3E6De8U6XUFvqmh4npN3Vsypm3oT2V0bXcmbBWS+5j5tr4okYaFrOmyZkszEg==", + "requires": { + "binary": "^0.3.0", + "graceful-fs": "^4.1.3", + "mkpath": "^0.1.0", + "nopt": "^3.0.1", + "q": "^1.1.2", + "readable-stream": "^1.1.8", + "touch": "0.0.3" + }, + "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==" + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, + "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" + } + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "requires": { + "once": "^1.4.0" + } + }, + "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": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "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.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "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" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" + }, + "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" + } + }, + "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" + } + }, + "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.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" + }, + "is-core-module": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "requires": { + "has": "^1.0.3" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "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" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } + } + }, + "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" + } + }, + "lazystream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "requires": { + "readable-stream": "^2.0.5" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "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==" + }, + "ltx": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/ltx/-/ltx-2.8.0.tgz", + "integrity": "sha512-SJJUrmDgXP0gkUzgErfkaeD+pugM8GYxerTALQa1gTUb5W1wrC4k07GZU+QNZd7MpFqJSYWXTQSUy8Ps03hx5Q==", + "requires": { + "inherits": "^2.0.1" + } + }, + "mime-db": { + "version": "1.46.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.46.0.tgz", + "integrity": "sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ==" + }, + "mime-types": { + "version": "2.1.29", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.29.tgz", + "integrity": "sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ==", + "requires": { + "mime-db": "1.46.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" + } + }, + "mkpath": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/mkpath/-/mkpath-0.1.0.tgz", + "integrity": "sha512-bauHShmaxVQiEvlrAPWxSPn8spSL8gDVRl11r8vLT4r/KdnknLqtqwQbToZ2Oa8sJkExYY1z6/d+X7pNiqo4yg==" + }, + "mockery": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mockery/-/mockery-2.1.0.tgz", + "integrity": "sha512-9VkOmxKlWXoDO/h1jDZaS4lH33aWfRiJiNT/tKj+8OGzrcFDLo8d0syGdbsc3Bc4GvRXPb+NMMvojotmuGJTvA==" + }, + "moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" + }, + "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" + } + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", + "requires": { + "abbrev": "1" + } + }, + "normalize-path": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.0.1.tgz", + "integrity": "sha1-R4hqwWYnYNQmG32XnSQXCdPOP3o=" + }, + "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" + } + }, + "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": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "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.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" + }, + "promise": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", + "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==", + "requires": { + "asap": "~2.0.6" + } + }, + "q": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.4.1.tgz", + "integrity": "sha1-VXBbzZPF82c1MMLCy8DCs63cKG4=" + }, + "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.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "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==" + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "semver": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", + "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==" + }, + "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" + } + }, + "tar-stream": { + "version": "1.5.2", + "resolved": "http://registry.npmjs.org/tar-stream/-/tar-stream-1.5.2.tgz", + "integrity": "sha1-+8bG6DwaGdTLSMfZYXH8JI7/x78=", + "requires": { + "bl": "^1.0.0", + "end-of-stream": "^1.0.0", + "readable-stream": "^2.0.0", + "xtend": "^4.0.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==" + } + } + }, + "touch": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/touch/-/touch-0.0.3.tgz", + "integrity": "sha512-/LQ54KM9rPf3rGXGo2UPQWx3ol242Zg6Whq27H5DEmZhCJo+pm9N5BzRGepO9vTVhYxpXJdcc1+3uaYt9NyeKg==", + "requires": { + "nopt": "~1.0.10" + }, + "dependencies": { + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "requires": { + "abbrev": "1" + } + } + } + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==" + }, + "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==" + }, + "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": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" + }, + "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" + } + }, + "winreg": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/winreg/-/winreg-1.2.2.tgz", + "integrity": "sha1-hQmvo7ccW70RCm18YkfsZ3NsWY8=" + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "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" + } + }, + "xmlbuilder": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", + "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==" + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" + }, + "zip-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-1.1.0.tgz", + "integrity": "sha1-KtR5//wWjgWoiOjDSP9oE7PxNzM=", + "requires": { + "archiver-utils": "^1.3.0", + "compress-commons": "^1.1.0", + "lodash": "^4.8.0", + "readable-stream": "^2.0.0" + } + } + } +} diff --git a/_generated/AzureMysqlDeploymentV1/package.json b/_generated/AzureMysqlDeploymentV1/package.json new file mode 100644 index 000000000000..6daed961f9da --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1/package.json @@ -0,0 +1,39 @@ +{ + "name": "vsts-tasks-azuremysql", + "version": "1.0.3", + "description": "Azure Pipelines Azure MySQL", + "main": "azuremysqldeploy.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/mocha": "^5.2.7", + "@types/node": "^10.17.0", + "@types/q": "1.0.7", + "azure-pipelines-task-lib": "^3.4.0", + "azure-pipelines-tasks-azure-arm-rest": "3.223.4", + "azure-pipelines-tasks-webdeployment-common": "^4.222.0", + "compress-commons": "1.1.0", + "crc32-stream": "1.0.0", + "moment": "^2.29.4", + "normalize-path": "2.0.1", + "q": "1.4.1", + "semver": "5.4.1", + "tar-stream": "1.5.2", + "winreg": "1.2.2", + "zip-stream": "1.1.0" + }, + "devDependencies": { + "typescript": "4.0.2" + } +} diff --git a/_generated/AzureMysqlDeploymentV1/sql/ISqlClient.ts b/_generated/AzureMysqlDeploymentV1/sql/ISqlClient.ts new file mode 100644 index 000000000000..abe44e648668 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1/sql/ISqlClient.ts @@ -0,0 +1,19 @@ +import { FirewallConfiguration } from '../models/FirewallConfiguration'; + +export interface ISqlClient { + + /** + * Get firewall configuration either Ip address is already added or not + * + * @returns FirewallConfiguration contains isIpAddress already whitelisted and If it is not Ip address of agent + */ + getFirewallConfiguration(): FirewallConfiguration; + + /** + * Execute sql command in asynchronously + * + * @returns response code promise + */ + executeSqlCommand(): Promise; + +} diff --git a/_generated/AzureMysqlDeploymentV1/sql/MysqlClient.ts b/_generated/AzureMysqlDeploymentV1/sql/MysqlClient.ts new file mode 100644 index 000000000000..5d631b9dcbd7 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1/sql/MysqlClient.ts @@ -0,0 +1,133 @@ +import { ISqlClient } from './ISqlClient'; +import { FirewallConfiguration } from '../models/FirewallConfiguration'; +import { AzureMysqlTaskParameter } from '../models/AzureMysqlTaskParameter'; +import { Utility } from '../operations/MysqlUtiliy'; +import * as telemetry from '../telemetry'; +import task = require("azure-pipelines-task-lib/task"); +var packageUtility = require('azure-pipelines-tasks-webdeployment-common/packageUtility.js'); +import Q = require('q'); + +export class MysqlClient implements ISqlClient { + private _azureMysqlTaskParameter: AzureMysqlTaskParameter; + private _hostName: string; + private _toolPath: string; + + constructor(azureMysqlTaskParameter: AzureMysqlTaskParameter, serverName: string, toolPath: string) { + if (!azureMysqlTaskParameter) { + throw new Error(task.loc("AzureMysqlTaskParameterCannotBeEmpty")); + } + if (!serverName ||typeof serverName.valueOf() !== 'string') { + throw new Error(task.loc("MysqlServerNameCannotBeEmpty")); + } + if (!toolPath ||typeof toolPath.valueOf() !== 'string') { + throw new Error(task.loc("ToolPathCannotBeNull")); + } + + this._azureMysqlTaskParameter = azureMysqlTaskParameter; + this._hostName = serverName; + this._toolPath = toolPath; + } + + /** + * Get Firewall configuration related to agent box + */ + public getFirewallConfiguration(): FirewallConfiguration { + let firewallConfiguration: FirewallConfiguration = new FirewallConfiguration(true); + // Regex to extract Ip Address from string + const regexToGetIpAddress = /\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/; + const result = task.execSync(this._toolPath, Utility.argStringToArray(this._getArgumentString() +" "+ this._getAdditionalArgument())); + task.debug('Mysql server connection check result: '+JSON.stringify(result)); + // If agent is not whitelisted it will throw error with ip address + if(result && result.stderr){ + var ipAddresses = result.stderr.match(regexToGetIpAddress); + if(ipAddresses && ipAddresses.length > 0){ + firewallConfiguration = new FirewallConfiguration(false, ipAddresses[0]); + } + } + return firewallConfiguration; + } + + /** + * Get the connection argument for mysql + */ + private _getArgumentString(): string{ + let argumentString = "-h" + this._hostName + " -u" + this._azureMysqlTaskParameter.getSqlUserName() + " -p" + this._azureMysqlTaskParameter.getSqlPassword(); + return argumentString; + } + + /** + * Execute Mysql script + */ + public async executeSqlCommand() : Promise { + let defer = Q.defer(); + let argument: string = this._getArgumentString() +" "+ this._getAdditionalArgument(); + let additionalArgumentTelemtry = {additionalArguments: Utility.getAdditionalArgumentForTelemtry(this._getAdditionalArgument())}; + telemetry.emitTelemetry('TaskHub', 'AzureMysqlDeployment', additionalArgumentTelemtry); + if(this._azureMysqlTaskParameter.getDatabaseName()){ + // Creating databse if it doesn't exist + this._executeSqlScript(argument + this._createDatabaseScriptIfItDoesnotExist()).then((resultCode)=>{ + argument += this._azureMysqlTaskParameter.getDatabaseName() ? " -D" + this._azureMysqlTaskParameter.getDatabaseName() : ""; + // Running sql script passes by user + this._executeSqlScript(argument + this._getFileSourceArgument()).then((resultCode)=>{ + defer.resolve(resultCode); + },(error) => { + defer.reject(error); + }); + }).catch((error) => { + defer.reject(error); + }); + }else{ + argument += this._azureMysqlTaskParameter.getDatabaseName() ? " -D" + this._azureMysqlTaskParameter.getDatabaseName() : ""; + this._executeSqlScript(argument + this._getFileSourceArgument()).then((resultCode)=>{ + defer.resolve(resultCode); + },(error) => { + defer.reject(error); + }); + } + + return defer.promise; + } + + private _createDatabaseScriptIfItDoesnotExist() : string { + return " -e" + '"' + "CREATE DATABASE IF NOT EXISTS `" + this._azureMysqlTaskParameter.getDatabaseName() + "` ; " + '"' ; + } + + private async _executeSqlScript(argument: string): Promise { + let defer = Q.defer(); + task.debug('Started execution of mysql script'); + task.exec(this._toolPath, Utility.argStringToArray(argument)).then((resultCode)=>{ + task.debug('Script execution on mysql server result: '+ resultCode); + if(resultCode === 0){ + defer.resolve(resultCode); + }else{ + defer.reject(new Error(task.loc("SqlExecutionException", resultCode))); + } + },(error) => { + defer.reject(error); + }); + + return defer.promise; + } + + /** + * Additional connection argument passed by user + */ + private _getAdditionalArgument() : string{ + return this._azureMysqlTaskParameter.getSqlAdditionalArguments() ? this._azureMysqlTaskParameter.getSqlAdditionalArguments() : " "; + } + + /** + * Get connection argument to run script from file or inline + */ + private _getFileSourceArgument() : string { + let fileSourceArgument ; + if( this._azureMysqlTaskParameter.getTaskNameSelector() === 'InlineSqlTask' ) { + fileSourceArgument = " -e" + '"' + this._azureMysqlTaskParameter.getSqlInline() + '"'; + } + else { + fileSourceArgument = ` -e "source ${packageUtility.PackageUtility.getPackagePath(this._azureMysqlTaskParameter.getSqlFile()).replace(/\\/g, '/')};"`; + } + + return fileSourceArgument; + } +} diff --git a/_generated/AzureMysqlDeploymentV1/task.json b/_generated/AzureMysqlDeploymentV1/task.json new file mode 100644 index 000000000000..d468f44df8c6 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1/task.json @@ -0,0 +1,234 @@ +{ + "id": "BD1BED02-F04E-11E7-8C3F-9A214CF093AE", + "name": "AzureMysqlDeployment", + "friendlyName": "Azure Database for MySQL deployment", + "description": "Run your scripts and make changes to your Azure Database for MySQL", + "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/deploy/azure-mysql-deployment", + "helpMarkDown": "[Learn more about this task](https://aka.ms/mysqlazuredeployreadme)", + "category": "Deploy", + "visibility": [ + "Build", + "Release" + ], + "runsOn": [ + "Agent" + ], + "author": "Microsoft Corporation", + "version": { + "Major": 1, + "Minor": 226, + "Patch": 1 + }, + "demands": [], + "minimumAgentVersion": "1.100.0", + "groups": [ + { + "name": "target", + "displayName": "DB Details", + "isExpanded": true + }, + { + "name": "taskDetails", + "displayName": "Deployment Package", + "isExpanded": true + }, + { + "name": "firewall", + "displayName": "Firewall", + "isExpanded": false + } + ], + "inputs": [ + { + "name": "ConnectedServiceName", + "aliases": [ + "azureSubscription" + ], + "type": "connectedService:AzureRM", + "label": "Azure Subscription", + "defaultValue": "", + "required": true, + "helpMarkDown": "This is needed to connect to your Azure account.
To configure new service connection, select the Azure subscription from the list and click 'Authorize'.
If your subscription is not listed or if you want to use an existing Service Principal, you can setup an Azure service connection using 'Add' or 'Manage' button." + }, + { + "name": "ServerName", + "type": "pickList", + "label": "Host Name", + "required": true, + "defaultValue": "", + "groupName": "target", + "helpMarkDown": "Server name of 'Azure Database for MySQL'.Example: fabrikam.mysql.database.azure.com. When you connect using MySQL Workbench, this is the same value that is used for 'Hostname' in 'Parameters'", + "properties": { + "EditableOptions": "True" + } + }, + { + "name": "DatabaseName", + "type": "string", + "label": "Database Name", + "required": false, + "groupName": "target", + "defaultValue": "", + "helpMarkDown": "The name of database, if you already have one, on which the below script is needed to be run, else the script itself can be used to create the database." + }, + { + "name": "SqlUsername", + "type": "string", + "label": "Server Admin Login", + "required": true, + "groupName": "target", + "defaultValue": "", + "helpMarkDown": "Azure Database for MySQL server supports native MySQL authentication. You can connect and authenticate to a server with the server's admin login. Example: bbo1@fabrikam. When you connect using MySQL Workbench, this is the same value that is used for 'Username' in 'Parameters'." + }, + { + "name": "SqlPassword", + "type": "string", + "label": "Password", + "required": true, + "groupName": "target", + "defaultValue": "", + "helpMarkDown": "Administrator password for Azure Database for MySQL. In case you don’t recall the password you can change the password from [Azure portal](https://docs.microsoft.com/en-us/azure/mysql/howto-create-manage-server-portal).
It can be variable defined in the pipeline. Example : $(password).
Also, you may mark the variable type as 'secret' to secure it." + }, + { + "name": "TaskNameSelector", + "type": "pickList", + "label": "Type", + "required": false, + "helpMarkDown": "Select one of the options between Script File & Inline Script.", + "groupName": "taskDetails", + "defaultValue": "SqlTaskFile", + "options": { + "SqlTaskFile": "MySQL Script File", + "InlineSqlTask": "Inline MySQL Script" + } + }, + { + "name": "SqlFile", + "type": "filePath", + "label": "MySQL Script", + "required": true, + "groupName": "taskDetails", + "defaultValue": "", + "helpMarkDown": "Full path of the script file on the automation agent or on a UNC path accessible to the automation agent like, \\\\\\\\BudgetIT\\DeployBuilds\\script.sql. Also, predefined system variables like, $(agent.releaseDirectory) can also be used here. A file containing SQL statements can be used here.​", + "visibleRule": "TaskNameSelector = SqlTaskFile" + }, + { + "name": "SqlInline", + "type": "multiLine", + "label": "Inline MySQL Script", + "required": true, + "groupName": "taskDetails", + "defaultValue": "", + "helpMarkDown": "Enter the MySQL script to execute on the Database selected above.", + "visibleRule": "TaskNameSelector = InlineSqlTask", + "properties": { + "resizable": "true", + "rows": "10" + } + }, + { + "name": "SqlAdditionalArguments", + "type": "string", + "label": "Additional MySQL Arguments", + "required": false, + "groupName": "taskDetails", + "defaultValue": "", + "helpMarkDown": "Additional options supported by MySQL simple SQL shell. These options will be applied when executing the given file on the Azure Database for MySQL.​
Example: You can change to default tab separated output format to HTML or even XML format. Or if you have problems due to insufficient memory for large result sets, use the --quick option.​" + }, + { + "name": "IpDetectionMethod", + "type": "pickList", + "label": "Specify Firewall Rules Using", + "required": true, + "groupName": "firewall", + "defaultValue": "AutoDetect", + "options": { + "AutoDetect": "AutoDetect", + "IPAddressRange": "IPAddressRange" + }, + "helpMarkDown": "For successful execution of the task, we need to enable administrators to access the Azure Database for MySQL Server from the IP Address of the automation agent.
By selecting auto-detect you can automatically add firewall exception for range of possible IP Address of automation agent ​or else you can specify the range explicitly." + }, + { + "name": "StartIpAddress", + "type": "string", + "label": "Start IP Address", + "required": true, + "groupName": "firewall", + "defaultValue": "", + "visibleRule": "IpDetectionMethod = IPAddressRange", + "helpMarkDown": "The starting IP Address of the automation agent machine pool like 196.21.30.50 ." + }, + { + "name": "EndIpAddress", + "type": "string", + "label": "End IP Address", + "required": true, + "groupName": "firewall", + "defaultValue": "", + "visibleRule": "IpDetectionMethod = IPAddressRange", + "helpMarkDown": "The ending IP Address of the automation agent machine pool like 196.21.30.65 ." + }, + { + "name": "DeleteFirewallRule", + "type": "boolean", + "label": "Delete Rule After Task Ends", + "required": false, + "groupName": "firewall", + "defaultValue": "true", + "helpMarkDown": "If selected, the added exception for IP addresses of the automation agent will be removed for corresponding Azure Database for MySQL." + } + ], + "dataSourceBindings": [ + { + "target": "ServerName", + "endpointId": "$(ConnectedServiceName)", + "dataSourceName": "AzureMysqlServers", + "resultTemplate": "{ \"Value\" : \"{{{properties.fullyQualifiedDomainName}}}\", \"DisplayValue\" : \"{{{properties.fullyQualifiedDomainName}}}\" }" + } + ], + "instanceNameFormat": "Execute Azure MySQL : $(TaskNameSelector)", + "execution": { + "Node10": { + "target": "azuremysqldeploy.js" + } + }, + "messages": { + "ARGD_ConstructorFailed": "The task failed while initializing. Error: %s .", + "FirewallRuleNameCannotBeEmpty": "The firewall rule name cannot be null.", + "FirewallAddressRangeCannotBeEmpty": "The firewall address cannot be null.", + "StartIpAddressCannotBeEmpty": "The start IP address of the firewall rule cannot be null.", + "EndIpAddressCannotBeEmpty": "The end IP address of the firewall rule cannot be null.", + "MysqlServerNameCannotBeEmpty": "The MySQL server name cannot be null.", + "MysqlFullyQualifiedServerNameCannotBeEmpty": "The MySQL server fully qualified name cannot be null.", + "ResourceGroupCannotBeEmpty": "The resource group name cannot be null.", + "NotAbleToAddFirewallRule": "An error occurred while adding the firewall rule to the MySQL server. Error: %s .", + "NotAbleToDeleteFirewallRule": "An error occurred while deleting the firewall rule from the MySQL server. Error: %s .", + "AgentIpAddressIsMissingInAddedFirewallRule": "The agent IP address is missing in the manually added firewall rule.", + "NotAbleToGetAllServers": "Failed to retrieve all MySQL servers of a subscription. Error: %s .", + "EmptyOrNullServerList": "The MySQL server list is empty. The MySQL server host name is invalid.", + "UnableToFindResourceGroupDueToNullId": "Unable to find the resource group due to a null ID.", + "UnableToFindResourceGroupDueToInvalidId": "Unable to find the resource group due to an invalid ID.", + "NotAbleToGetInstalledLocationOfMysqlFromPath": "The MySQL client is missing on the agent machine.", + "UnableToFindMysqlFromRegistryOnMachineError": "Unable to find MySQL using the registry on the machine.", + "UnableToFindMysqlFromRegistry": "Unable to find MySQL using the registry. Error: %s .", + "UnableToFindTheLocationOfMysqlFromRegistryOnMachineError": "Unable to find the location of MySQL using the registry on the machine. Error: %s .", + "AzureMysqlTaskParameterCannotBeEmpty": "The Azure MySQL task parameter cannot be null.", + "ToolPathCannotBeNull": "Tool path cannot be null.", + "SqlExecutionException": "A SQL execution exception occurred. Please check the SQL script. Error: %s .", + "AzureEndpointCannotBeNull": "Invalid subscription name. The Azure service connection cannot be null.", + "CallbackCannotBeNull": "The callback cannot be null.", + "UnableToCreateDatabaseException": "Unable to create database.", + "WindowMysqlClientMissingError": "MySQL client is missing on the Windows agent machine. Please install it by running the MySQL client installer 'https://aka.ms/window-mysqlcli-installer' script file on the agent machine.", + "LinuxMysqlClientMissingError": "MySQL client is missing on the Linux agent machine. Please install it by running 'sudo apt-get install mysql-client'.", + "CouldNotFetchAccessTokenforAzureStatusCode": "Could not retrieve an access token for Azure. Status code: %s. Status message: %s", + "CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "Could not retrieve an access token for the managed service principal. Please configure Managed Service Identity (MSI) for the virtual machine. See 'https://aka.ms/azure-msi-docs'.Assign role to created MSI Identity. See 'https://aka.ms/assign-role-msi'. Status code: %s. Status message: %s", + "CouldNotFetchAccessTokenforMSIStatusCode": "Could not retrieve an access token for the managed service principal. Status code: %s. Status message: %s", + "NotAbleToCreateFirewallRule": "Getting error during adding firewall rule to Azure mysql server. Error: %s", + "ExpiredServicePrincipal": "Could not fetch access token for Azure. Verify if the Service Principal used is valid and not expired.", + "Nopackagefoundwithspecifiedpattern": "No package found with specified pattern" + }, + "_buildConfigMapping": { + "Default": "1.226.1", + "Node16-225": "1.226.0" + } +} \ No newline at end of file diff --git a/_generated/AzureMysqlDeploymentV1/task.loc.json b/_generated/AzureMysqlDeploymentV1/task.loc.json new file mode 100644 index 000000000000..b83e9df0b708 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1/task.loc.json @@ -0,0 +1,234 @@ +{ + "id": "BD1BED02-F04E-11E7-8C3F-9A214CF093AE", + "name": "AzureMysqlDeployment", + "friendlyName": "ms-resource:loc.friendlyName", + "description": "ms-resource:loc.description", + "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/deploy/azure-mysql-deployment", + "helpMarkDown": "ms-resource:loc.helpMarkDown", + "category": "Deploy", + "visibility": [ + "Build", + "Release" + ], + "runsOn": [ + "Agent" + ], + "author": "Microsoft Corporation", + "version": { + "Major": 1, + "Minor": 226, + "Patch": 1 + }, + "demands": [], + "minimumAgentVersion": "1.100.0", + "groups": [ + { + "name": "target", + "displayName": "ms-resource:loc.group.displayName.target", + "isExpanded": true + }, + { + "name": "taskDetails", + "displayName": "ms-resource:loc.group.displayName.taskDetails", + "isExpanded": true + }, + { + "name": "firewall", + "displayName": "ms-resource:loc.group.displayName.firewall", + "isExpanded": false + } + ], + "inputs": [ + { + "name": "ConnectedServiceName", + "aliases": [ + "azureSubscription" + ], + "type": "connectedService:AzureRM", + "label": "ms-resource:loc.input.label.ConnectedServiceName", + "defaultValue": "", + "required": true, + "helpMarkDown": "ms-resource:loc.input.help.ConnectedServiceName" + }, + { + "name": "ServerName", + "type": "pickList", + "label": "ms-resource:loc.input.label.ServerName", + "required": true, + "defaultValue": "", + "groupName": "target", + "helpMarkDown": "ms-resource:loc.input.help.ServerName", + "properties": { + "EditableOptions": "True" + } + }, + { + "name": "DatabaseName", + "type": "string", + "label": "ms-resource:loc.input.label.DatabaseName", + "required": false, + "groupName": "target", + "defaultValue": "", + "helpMarkDown": "ms-resource:loc.input.help.DatabaseName" + }, + { + "name": "SqlUsername", + "type": "string", + "label": "ms-resource:loc.input.label.SqlUsername", + "required": true, + "groupName": "target", + "defaultValue": "", + "helpMarkDown": "ms-resource:loc.input.help.SqlUsername" + }, + { + "name": "SqlPassword", + "type": "string", + "label": "ms-resource:loc.input.label.SqlPassword", + "required": true, + "groupName": "target", + "defaultValue": "", + "helpMarkDown": "ms-resource:loc.input.help.SqlPassword" + }, + { + "name": "TaskNameSelector", + "type": "pickList", + "label": "ms-resource:loc.input.label.TaskNameSelector", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.TaskNameSelector", + "groupName": "taskDetails", + "defaultValue": "SqlTaskFile", + "options": { + "SqlTaskFile": "MySQL Script File", + "InlineSqlTask": "Inline MySQL Script" + } + }, + { + "name": "SqlFile", + "type": "filePath", + "label": "ms-resource:loc.input.label.SqlFile", + "required": true, + "groupName": "taskDetails", + "defaultValue": "", + "helpMarkDown": "ms-resource:loc.input.help.SqlFile", + "visibleRule": "TaskNameSelector = SqlTaskFile" + }, + { + "name": "SqlInline", + "type": "multiLine", + "label": "ms-resource:loc.input.label.SqlInline", + "required": true, + "groupName": "taskDetails", + "defaultValue": "", + "helpMarkDown": "ms-resource:loc.input.help.SqlInline", + "visibleRule": "TaskNameSelector = InlineSqlTask", + "properties": { + "resizable": "true", + "rows": "10" + } + }, + { + "name": "SqlAdditionalArguments", + "type": "string", + "label": "ms-resource:loc.input.label.SqlAdditionalArguments", + "required": false, + "groupName": "taskDetails", + "defaultValue": "", + "helpMarkDown": "ms-resource:loc.input.help.SqlAdditionalArguments" + }, + { + "name": "IpDetectionMethod", + "type": "pickList", + "label": "ms-resource:loc.input.label.IpDetectionMethod", + "required": true, + "groupName": "firewall", + "defaultValue": "AutoDetect", + "options": { + "AutoDetect": "AutoDetect", + "IPAddressRange": "IPAddressRange" + }, + "helpMarkDown": "ms-resource:loc.input.help.IpDetectionMethod" + }, + { + "name": "StartIpAddress", + "type": "string", + "label": "ms-resource:loc.input.label.StartIpAddress", + "required": true, + "groupName": "firewall", + "defaultValue": "", + "visibleRule": "IpDetectionMethod = IPAddressRange", + "helpMarkDown": "ms-resource:loc.input.help.StartIpAddress" + }, + { + "name": "EndIpAddress", + "type": "string", + "label": "ms-resource:loc.input.label.EndIpAddress", + "required": true, + "groupName": "firewall", + "defaultValue": "", + "visibleRule": "IpDetectionMethod = IPAddressRange", + "helpMarkDown": "ms-resource:loc.input.help.EndIpAddress" + }, + { + "name": "DeleteFirewallRule", + "type": "boolean", + "label": "ms-resource:loc.input.label.DeleteFirewallRule", + "required": false, + "groupName": "firewall", + "defaultValue": "true", + "helpMarkDown": "ms-resource:loc.input.help.DeleteFirewallRule" + } + ], + "dataSourceBindings": [ + { + "target": "ServerName", + "endpointId": "$(ConnectedServiceName)", + "dataSourceName": "AzureMysqlServers", + "resultTemplate": "{ \"Value\" : \"{{{properties.fullyQualifiedDomainName}}}\", \"DisplayValue\" : \"{{{properties.fullyQualifiedDomainName}}}\" }" + } + ], + "instanceNameFormat": "ms-resource:loc.instanceNameFormat", + "execution": { + "Node10": { + "target": "azuremysqldeploy.js" + } + }, + "messages": { + "ARGD_ConstructorFailed": "ms-resource:loc.messages.ARGD_ConstructorFailed", + "FirewallRuleNameCannotBeEmpty": "ms-resource:loc.messages.FirewallRuleNameCannotBeEmpty", + "FirewallAddressRangeCannotBeEmpty": "ms-resource:loc.messages.FirewallAddressRangeCannotBeEmpty", + "StartIpAddressCannotBeEmpty": "ms-resource:loc.messages.StartIpAddressCannotBeEmpty", + "EndIpAddressCannotBeEmpty": "ms-resource:loc.messages.EndIpAddressCannotBeEmpty", + "MysqlServerNameCannotBeEmpty": "ms-resource:loc.messages.MysqlServerNameCannotBeEmpty", + "MysqlFullyQualifiedServerNameCannotBeEmpty": "ms-resource:loc.messages.MysqlFullyQualifiedServerNameCannotBeEmpty", + "ResourceGroupCannotBeEmpty": "ms-resource:loc.messages.ResourceGroupCannotBeEmpty", + "NotAbleToAddFirewallRule": "ms-resource:loc.messages.NotAbleToAddFirewallRule", + "NotAbleToDeleteFirewallRule": "ms-resource:loc.messages.NotAbleToDeleteFirewallRule", + "AgentIpAddressIsMissingInAddedFirewallRule": "ms-resource:loc.messages.AgentIpAddressIsMissingInAddedFirewallRule", + "NotAbleToGetAllServers": "ms-resource:loc.messages.NotAbleToGetAllServers", + "EmptyOrNullServerList": "ms-resource:loc.messages.EmptyOrNullServerList", + "UnableToFindResourceGroupDueToNullId": "ms-resource:loc.messages.UnableToFindResourceGroupDueToNullId", + "UnableToFindResourceGroupDueToInvalidId": "ms-resource:loc.messages.UnableToFindResourceGroupDueToInvalidId", + "NotAbleToGetInstalledLocationOfMysqlFromPath": "ms-resource:loc.messages.NotAbleToGetInstalledLocationOfMysqlFromPath", + "UnableToFindMysqlFromRegistryOnMachineError": "ms-resource:loc.messages.UnableToFindMysqlFromRegistryOnMachineError", + "UnableToFindMysqlFromRegistry": "ms-resource:loc.messages.UnableToFindMysqlFromRegistry", + "UnableToFindTheLocationOfMysqlFromRegistryOnMachineError": "ms-resource:loc.messages.UnableToFindTheLocationOfMysqlFromRegistryOnMachineError", + "AzureMysqlTaskParameterCannotBeEmpty": "ms-resource:loc.messages.AzureMysqlTaskParameterCannotBeEmpty", + "ToolPathCannotBeNull": "ms-resource:loc.messages.ToolPathCannotBeNull", + "SqlExecutionException": "ms-resource:loc.messages.SqlExecutionException", + "AzureEndpointCannotBeNull": "ms-resource:loc.messages.AzureEndpointCannotBeNull", + "CallbackCannotBeNull": "ms-resource:loc.messages.CallbackCannotBeNull", + "UnableToCreateDatabaseException": "ms-resource:loc.messages.UnableToCreateDatabaseException", + "WindowMysqlClientMissingError": "ms-resource:loc.messages.WindowMysqlClientMissingError", + "LinuxMysqlClientMissingError": "ms-resource:loc.messages.LinuxMysqlClientMissingError", + "CouldNotFetchAccessTokenforAzureStatusCode": "ms-resource:loc.messages.CouldNotFetchAccessTokenforAzureStatusCode", + "CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "ms-resource:loc.messages.CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode", + "CouldNotFetchAccessTokenforMSIStatusCode": "ms-resource:loc.messages.CouldNotFetchAccessTokenforMSIStatusCode", + "NotAbleToCreateFirewallRule": "ms-resource:loc.messages.NotAbleToCreateFirewallRule", + "ExpiredServicePrincipal": "ms-resource:loc.messages.ExpiredServicePrincipal", + "Nopackagefoundwithspecifiedpattern": "ms-resource:loc.messages.Nopackagefoundwithspecifiedpattern" + }, + "_buildConfigMapping": { + "Default": "1.226.1", + "Node16-225": "1.226.0" + } +} \ No newline at end of file diff --git a/_generated/AzureMysqlDeploymentV1/telemetry.ts b/_generated/AzureMysqlDeploymentV1/telemetry.ts new file mode 100644 index 000000000000..aad070964f94 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1/telemetry.ts @@ -0,0 +1,70 @@ +/** + * WARNING: This module should only be used with the express permission of the repo owners. + */ +import * as tl from 'azure-pipelines-task-lib/task'; +import * as semver from 'semver'; + +/** + * Utility function to log telemetry. + * @param feature The task/feature name for this telemetry + * @param telem A JSON object containing a dictionary of variables that will be appended to + * common system vars and loggged. + */ +export function emitTelemetry(area: string, feature: string, taskSpecificTelemetry: any) { + try { + let agentVersion = tl.getVariable('Agent.Version'); + if (semver.gte(agentVersion, '2.120.0')) { + // Common Telemetry VARs that will be concatenated with the supplied telem object. + let commonTelem = { + 'SYSTEM_TASKINSTANCEID': tl.getVariable('SYSTEM_TASKINSTANCEID'), + 'SYSTEM_JOBID': tl.getVariable('SYSTEM_JOBID'), + 'SYSTEM_PLANID': tl.getVariable('SYSTEM_PLANID'), + 'SYSTEM_COLLECTIONID': tl.getVariable('SYSTEM_COLLECTIONID'), + 'AGENT_ID': tl.getVariable('AGENT_ID'), + 'AGENT_MACHINENAME': tl.getVariable('AGENT_MACHINENAME'), + 'AGENT_NAME': tl.getVariable('AGENT_NAME'), + 'AGENT_JOBSTATUS': tl.getVariable('AGENT_JOBSTATUS'), + 'AGENT_OS': tl.getVariable('AGENT_OS'), + 'AGENT_VERSION': tl.getVariable('AGENT_VERSION'), + 'BUILD_BUILDID': tl.getVariable('BUILD_BUILDID'), + 'BUILD_BUILDNUMBER': tl.getVariable('BUILD_BUILDNUMBER'), + 'BUILD_BUILDURI': tl.getVariable('BUILD_BUILDURI'), + 'BUILD_CONTAINERID': tl.getVariable('BUILD_CONTAINERID'), + 'BUILD_DEFINITIONNAME': tl.getVariable('BUILD_DEFINITIONNAME'), + 'BUILD_DEFINITIONVERSION': tl.getVariable('BUILD_DEFINITIONVERSION'), + 'BUILD_REASON': tl.getVariable('BUILD_REASON'), + 'BUILD_REPOSITORY_CLEAN': tl.getVariable('BUILD_REPOSITORY_CLEAN'), + 'BUILD_REPOSITORY_GIT_SUBMODULECHECKOUT': tl.getVariable('BUILD_REPOSITORY_GIT_SUBMODULECHECKOUT'), + 'BUILD_REPOSITORY_NAME': tl.getVariable('BUILD_REPOSITORY_NAME'), + 'BUILD_REPOSITORY_PROVIDER': tl.getVariable('BUILD_REPOSITORY_PROVIDER'), + 'BUILD_SOURCEVERSION': tl.getVariable('BUILD_SOURCEVERSION') + }; + let copy = Object.assign(commonTelem, taskSpecificTelemetry); + console.log("##vso[telemetry.publish area=%s;feature=%s]%s", + area, + feature, + JSON.stringify(copy)); + } else { + tl.debug(`Agent version of ( ${agentVersion} ) does not meet minimum requirements for telemetry`); + } + } catch (err) { + tl.debug(`Unable to log telemetry. Err:( ${err} )`); + } +} + +/** + * A utility function to log the first 1024 characters from SDTERR + * @param feature The task/feature name for this telemetry + * @param exitCode The exit code from your program + */ +export function logResult(area: string, feature:string, exitCode: number) { + try { + let execResultsStr = JSON.stringify({ + 'exitCode': exitCode + }); + let nugetExecResults = JSON.parse(execResultsStr); + emitTelemetry(area, feature, nugetExecResults); + } catch (err) { + tl.debug(`Unable to log telemetry. Err:( ${err} )`); + } +} \ No newline at end of file diff --git a/_generated/AzureMysqlDeploymentV1/tsconfig.json b/_generated/AzureMysqlDeploymentV1/tsconfig.json new file mode 100644 index 000000000000..875bb90cd697 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1/tsconfig.json @@ -0,0 +1,6 @@ +{ + "compilerOptions": { + "target": "ES6", + "module": "commonjs" + } +} diff --git a/_generated/AzureMysqlDeploymentV1_Node16/README.md b/_generated/AzureMysqlDeploymentV1_Node16/README.md new file mode 100644 index 000000000000..6a82a726e0b4 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1_Node16/README.md @@ -0,0 +1,99 @@ +# Azure Database for MySQL Deployment + + +### Overview: + +The task is used to deploy for deploying to Azure Database for MySQL – Azure’s MySQL DB as a service. There are two ways to deploy, either using a script file or writing the script in our inline editor. + + +### Contact Information + +Please report a problem at [Developer Community Forum](https://developercommunity.visualstudio.com/spaces/21/index.html) if you are facing problems in making this task work. You can also share feedback about the task like, what more functionality should be added to the task, what other tasks you would like to have, at the same place. + + +### Pre-requisites for the task +The following pre-requisites need to be setup for the task to work properly. + + +##### Azure Subscription + +To deploy to Azure Database for MySQL, an Azure subscription has to be linked to Team Foundation Server or to Azure DevOps using the Service connections tab in the settings section. Add the Azure subscription to use in the Build or Release Management definition by opening the Account Administration screen (gear icon on the top-right of the screen) and then click on the Services Tab. +Use 'Azure Resource Manager'([ARM](https://azure.microsoft.com/en-in/documentation/articles/resource-group-overview/)) endpoint type; for more details follow the steps listed in the link [here](https://go.microsoft.com/fwlink/?LinkID=623000&clcid=0x409). + + + +##### Azure Database for MySQL resource +This tasks expects that the Azure resource for [Azure Database for MySQL](https://docs.microsoft.com/en-us/azure/mysql/overview) is already available in the [Azure portal](https://ms.portal.azure.com/?r=1#create/Microsoft.SQLDatabase.0.5.7-preview). The task can create a new database along with other MySQL commands but doesn't create the server. + +##### MySQL Client in agent box +This task expects MySQL client must be in agent box +- **Window Agent:** Use this [script file](https://aka.ms/window-mysqlcli-installer) to install MySQL client. +- **Linux Agent:** Run command 'apt-get install mysql-client' to install MySQL client. + +### Parameters of the task: +The parameters of the task are described in details, including examples, to show how to input the parameters. The parameters listed with a \* are required parameters for the task: + + +- **Display name\*:** Provide a name to identify the task among others in your pipeline. + + +- **Azure subscription\*:** Select the Azure Subscription to connect to the portal where the Azure resource is present. + + +**DB Details** + + +- **Host name\*:** Server name of “Azure DB for Mysql”.Example: fabrikam.mysql.database.azure.com. When you connect using MySQL Workbench, this is the same value that is used for "Hostname" in "Parameters". + +- **Database name:** The name of database, if you already have one, on which the below script is needed to be run, else the script itself can be used to create the database. + +- **Server admin login\*:** Azure Database for MySQL server supports native MySQL authentication. You can connect and authenticate to a server with the server's admin login. Example: bbo1@fabrikam. +When you connect using MySQL Workbench, this is the same value that is used for "Username" in "Parameters". + + +- **Password\*:** Administrator password for Azure DB for MySQL. In case you don’t recall the password you can change the password from [Azure portal](https://docs.microsoft.com/en-us/azure/mysql/howto-create-manage-server-portal). + + + +**Deployment Package** + + +- **Type\*:** Select one of the options between Script File & Inline Script. + + +**Script file:** Use this option if you have a text file that has the necessary SQL statements to be executed on server. + + +- **Script path\*:** Full path of the script file on the automation agent or on a UNC path accessible to the automation agent like, \\BudgetIT\DeployBuilds\script.sql. Also, predefined [system variables](https://msdn.microsoft.com/Library/vs/alm/Build/scripts/variables) like, $(agent.releaseDirectory) can also be used here. + + +- **Additional MySQL options:** Additional options supported by MySQL simple SQL shell. These options will be applied when executing the given file on the Azure DB for MySQL. +Example: You can change to default tab separated output format to HTML or even XML format. Or if you have problems due to insufficient memory for large result sets, use the --quick option. + + +**Inline script:** Use this option for running the Inline Script against the server. + + +- **Inline script\*:** Enter the actuall Script to be run. + + +- **Additional MySQL options:** Additional options supported by MySQL simple SQL shell. These options will be applied when executing the given file on the Azure DB for MySQL. +Example: You can change to default tab separated output format to HTML or even XML format. Or if you have problems due to insufficient memory for large result sets, use the --quick option. + + + +**Firewall** + + +- **Specify firewall rules using\*** : For successful execution of the task, we need to enable administrators to access the Azure Database for MySQL Server from the IP Address of the automation agent. +By selecting auto-detect you can automatically add firewall exception for range of possible IP Address of automation agent +or else you can specify the range explicitly. + + +- **Start IP address\*:** The starting IP Address of the automation agent machine pool like 196.21.30.50. + + +- **End IP address\*:** The ending IP Address of the automation agent machine pool like 196.21.30.65. + + +- **Delete rule after task ends\*:** If selected, the added exception for IP addresses of the automation agent will be removed for corresponding Azure Database for MySQL. diff --git a/_generated/AzureMysqlDeploymentV1_Node16/Strings/resources.resjson/de-DE/resources.resjson b/_generated/AzureMysqlDeploymentV1_Node16/Strings/resources.resjson/de-DE/resources.resjson new file mode 100644 index 000000000000..c5f6ec3cb606 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1_Node16/Strings/resources.resjson/de-DE/resources.resjson @@ -0,0 +1,68 @@ +{ + "loc.friendlyName": "Azure Database for MySQL-Bereitstellung", + "loc.helpMarkDown": "[Weitere Informationen zu dieser Aufgabe](https://aka.ms/mysqlazuredeployreadme)", + "loc.description": "Hiermit werden Skripts ausgeführt und Änderungen an Ihrer Azure Database for MySQL-Instanz vorgenommen.", + "loc.instanceNameFormat": "Azure MySQL ausführen: $(TaskNameSelector)", + "loc.group.displayName.target": "DB-Details", + "loc.group.displayName.taskDetails": "Bereitstellungspaket", + "loc.group.displayName.firewall": "Firewall", + "loc.input.label.ConnectedServiceName": "Azure-Abonnement", + "loc.input.help.ConnectedServiceName": "Dies ist erforderlich, um eine Verbindung mit Ihrem Azure-Konto herzustellen.
Wählen Sie zum Konfigurieren einer neuen Dienstverbindung das Azure-Abonnement aus der Liste aus, und klicken Sie auf \"Autorisieren\".
Wenn Ihr Abonnement nicht aufgeführt ist oder Sie einen vorhandenen Dienstprinzipal verwenden möchten, können Sie über die Schaltfläche \"Hinzufügen\" oder \"Verwalten\" eine Azure-Dienstverbindung einrichten.", + "loc.input.label.ServerName": "Hostname", + "loc.input.help.ServerName": "Der Servername von Azure Database for MySQL. Beispiel: fabrikam.mysql.database.azure.com. Beim Herstellen einer Verbindung mit MySQL Workbench ist dies der gleiche Wert, der unter \"Parameter\" für \"Hostname\" verwendet wird.", + "loc.input.label.DatabaseName": "Datenbankname", + "loc.input.help.DatabaseName": "Der Name der Datenbank (falls bereits vorhanden), für die das unten aufgeführte Skript ausgeführt werden soll. Andernfalls kann das Skript selbst zum Erstellen der Datenbank verwendet werden.", + "loc.input.label.SqlUsername": "Serveradministratoranmeldung", + "loc.input.help.SqlUsername": "Azure-Datenbank für MySQL-Server unterstützt native MySQL-Authentifizierung. Sie können mit der Administratoranmeldung des Servers eine Verbindung mit einem Server herstellen und sich authentifizieren. Beispiel: bbo1@fabrikam. Beim Herstellen einer Verbindung mit MySQL Workbench ist dies der gleiche Wert, der für \"Username\" in \"Parameters\" verwendet wird.", + "loc.input.label.SqlPassword": "Kennwort", + "loc.input.help.SqlPassword": "Das Administratorkennwort für Azure Database for MySQL. Wenn Sie das Kennwort vergessen haben, können Sie das Kennwort im [Azure-Portal](https://docs.microsoft.com/de-de/azure/mysql/howto-create-manage-server-portal) ändern.
Es kann als Variable in der Definition definiert werden. Beispiel: $(password).
Darüber hinaus können Sie den Variablentyp als \"secret\" markieren, um die Variable abzusichern.", + "loc.input.label.TaskNameSelector": "Typ", + "loc.input.help.TaskNameSelector": "Treffen Sie eine Auswahl zwischen \"Skriptdatei\" und \"Inlineskript\".", + "loc.input.label.SqlFile": "MySQL-Skript", + "loc.input.help.SqlFile": "Der vollständige Pfad der Skriptdatei für den Automations-Agent oder ein UNC-Pfad, auf den der Automations-Agent zugreifen kann, z. B. \\\\\\\\\\\\\\\\BudgetIT\\\\DeployBuilds\\\\script.sql. Hier können auch vordefinierte Systemvariablen wie $(agent.releaseDirectory) verwendet werden. Eine Datei mit SQL-Anweisungen kann hier ebenfalls verwendet werden.", + "loc.input.label.SqlInline": "MySQL-Inlineskript", + "loc.input.help.SqlInline": "Geben Sie das MySQL-Skript ein, das für die oben ausgewählte Datenbank ausgeführt werden soll.", + "loc.input.label.SqlAdditionalArguments": "Zusätzliche MySQL-Argumente", + "loc.input.help.SqlAdditionalArguments": "Zusätzliche Optionen werden von der einfachen SQL-Shell von MySQL unterstützt. Diese Optionen werden angewendet, wenn die angegebene Datei in der Azure Database for MySQL-Instanz ausgeführt wird.
Beispiel: Sie können zum separaten Ausgabeformat der Standardregisterkarte, zu HTML oder sogar zum XML-Format wechseln. Wenn aufgrund von unzureichendem Arbeitsspeicher für große Resultsets Probleme auftreten, können Sie auch die Option \"--quick\" verwenden.", + "loc.input.label.IpDetectionMethod": "Firewallregeln angeben mit", + "loc.input.help.IpDetectionMethod": "Damit die Aufgabe erfolgreich ausgeführt wird, müssen Administratoren über die IP-Adresse des Automation-Agents auf den Azure Database for MySQL-Server zugreifen können.
Durch Auswahl der automatischen Erkennung können Sie automatisch eine Firewallausnahme für einen Bereich möglicher IP-Adressen des Automation-Agents hinzufügen. Ansonsten können Sie den Bereich auch explizit angeben.", + "loc.input.label.StartIpAddress": "Start-IP-Adresse", + "loc.input.help.StartIpAddress": "Die IP-Startadresse des Computerpools des Automations-Agents, z. B. 196.21.30.50.", + "loc.input.label.EndIpAddress": "End-IP-Adresse", + "loc.input.help.EndIpAddress": "Die IP-Endadresse des Computerpools des Automations-Agents, z. B. 196.21.30.65.", + "loc.input.label.DeleteFirewallRule": "Regel nach Beendigung des Tasks löschen", + "loc.input.help.DeleteFirewallRule": "Ist die Option aktiviert, wird die hinzugefügte Ausnahme für IP-Adressen des Automation-Agents für die entsprechende Azure Database for MySQL-Instanz entfernt.", + "loc.messages.ARGD_ConstructorFailed": "Fehler beim Initialisieren der Aufgabe. Fehler: %s.", + "loc.messages.FirewallRuleNameCannotBeEmpty": "Der Name der Firewallregel darf nicht NULL sein.", + "loc.messages.FirewallAddressRangeCannotBeEmpty": "Die Firewalladresse darf nicht NULL sein.", + "loc.messages.StartIpAddressCannotBeEmpty": "Die IP-Startadresse der Firewallregel darf nicht NULL sein.", + "loc.messages.EndIpAddressCannotBeEmpty": "Die IP-Endadresse der Firewallregel darf nicht NULL sein.", + "loc.messages.MysqlServerNameCannotBeEmpty": "Der MySQL-Servername darf nicht NULL sein.", + "loc.messages.MysqlFullyQualifiedServerNameCannotBeEmpty": "Der vollständig qualifizierte MySQL-Servername darf nicht NULL sein.", + "loc.messages.ResourceGroupCannotBeEmpty": "Der Ressourcengruppenname darf nicht NULL sein.", + "loc.messages.NotAbleToAddFirewallRule": "Fehler beim Hinzufügen der Firewallregel zum MySQL-Server. Fehler: %s .", + "loc.messages.NotAbleToDeleteFirewallRule": "Fehler beim Löschen der Firewallregel vom MySQL-Server. Fehler: %s.", + "loc.messages.AgentIpAddressIsMissingInAddedFirewallRule": "Die Agent-IP-Adresse ist in der manuell hinzugefügten Firewallregel nicht vorhanden.", + "loc.messages.NotAbleToGetAllServers": "Fehler beim Abrufen aller MySQL-Server eines Abonnements. Fehler: %s.", + "loc.messages.EmptyOrNullServerList": "Die MySQL-Serverliste ist leer. Der MySQL-Serverhostname ist ungültig.", + "loc.messages.UnableToFindResourceGroupDueToNullId": "Die Ressourcengruppe wurde aufgrund einer NULL-ID nicht gefunden.", + "loc.messages.UnableToFindResourceGroupDueToInvalidId": "Die Ressourcengruppe wurde aufgrund einer ungültigen ID nicht gefunden.", + "loc.messages.NotAbleToGetInstalledLocationOfMysqlFromPath": "Der MySQL-Client ist auf dem Agent-Computer nicht vorhanden.", + "loc.messages.UnableToFindMysqlFromRegistryOnMachineError": "MySQL wurde anhand der Registrierung nicht auf dem Computer gefunden.", + "loc.messages.UnableToFindMysqlFromRegistry": "MySQL wurde anhand der Registrierung nicht gefunden. Fehler: %s.", + "loc.messages.UnableToFindTheLocationOfMysqlFromRegistryOnMachineError": "Der MySQL-Standort wurde anhand der Registrierung nicht auf dem Computer gefunden. Fehler: %s.", + "loc.messages.AzureMysqlTaskParameterCannotBeEmpty": "Der Azure MySQL-Aufgabenparameter darf nicht NULL sein.", + "loc.messages.ToolPathCannotBeNull": "Der Toolpfad darf nicht NULL sein.", + "loc.messages.SqlExecutionException": "Ausnahme bei der SQL-Ausführung. Überprüfen Sie das SQL-Skript. Fehler: %s.", + "loc.messages.AzureEndpointCannotBeNull": "Ungültiger Abonnementname. Die Azure-Dienstverbindung darf nicht NULL sein.", + "loc.messages.CallbackCannotBeNull": "Der Rückruf darf nicht NULL sein.", + "loc.messages.UnableToCreateDatabaseException": "Die Datenbank kann nicht erstellt werden.", + "loc.messages.WindowMysqlClientMissingError": "Der MySQL-Client ist auf dem Windows-Agent-Computer nicht vorhanden. Installieren Sie ihn durch Ausführen der Skriptdatei \"https://aka.ms/window-mysqlcli-installer\" des MySQL-Clientinstallers auf dem Agent-Computer.", + "loc.messages.LinuxMysqlClientMissingError": "Der MySQL-Client fehlt auf dem Linux-Agent-Computer. Installieren Sie ihn durch Ausführen von \"sudo apt-get install mysql-client\".", + "loc.messages.CouldNotFetchAccessTokenforAzureStatusCode": "Ein Zugriffstoken für Azure konnte nicht abgerufen werden. Statuscode: %s. Statusmeldung: %s", + "loc.messages.CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "Für den verwalteten Dienstprinzipal konnte kein Zugriffstoken abgerufen werden. Konfigurieren Sie die verwaltete Dienstidentität (MSI) für die VM, siehe https://aka.ms/azure-msi-docs. Weisen Sie der erstellten MSI-Identität eine Rolle zu, siehe https://aka.ms/assign-role-msi. Statuscode: %s. Statusmeldung: %s", + "loc.messages.CouldNotFetchAccessTokenforMSIStatusCode": "Ein Zugriffstoken für den verwalteten Dienstprinzipal konnte nicht abgerufen werden. Statuscode: %s. Statusmeldung: %s", + "loc.messages.NotAbleToCreateFirewallRule": "Fehler beim Hinzufügen der Firewallregel zum Azure MySQL-Server. Fehler: %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.Nopackagefoundwithspecifiedpattern": "Keine Paketdatei mit dem angegebenen Muster gefunden." +} \ No newline at end of file diff --git a/_generated/AzureMysqlDeploymentV1_Node16/Strings/resources.resjson/en-US/resources.resjson b/_generated/AzureMysqlDeploymentV1_Node16/Strings/resources.resjson/en-US/resources.resjson new file mode 100644 index 000000000000..5e16763f5d21 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1_Node16/Strings/resources.resjson/en-US/resources.resjson @@ -0,0 +1,68 @@ +{ + "loc.friendlyName": "Azure Database for MySQL deployment", + "loc.helpMarkDown": "[Learn more about this task](https://aka.ms/mysqlazuredeployreadme)", + "loc.description": "Run your scripts and make changes to your Azure Database for MySQL", + "loc.instanceNameFormat": "Execute Azure MySQL : $(TaskNameSelector)", + "loc.group.displayName.target": "DB Details", + "loc.group.displayName.taskDetails": "Deployment Package", + "loc.group.displayName.firewall": "Firewall", + "loc.input.label.ConnectedServiceName": "Azure Subscription", + "loc.input.help.ConnectedServiceName": "This is needed to connect to your Azure account.
To configure new service connection, select the Azure subscription from the list and click 'Authorize'.
If your subscription is not listed or if you want to use an existing Service Principal, you can setup an Azure service connection using 'Add' or 'Manage' button.", + "loc.input.label.ServerName": "Host Name", + "loc.input.help.ServerName": "Server name of 'Azure Database for MySQL'.Example: fabrikam.mysql.database.azure.com. When you connect using MySQL Workbench, this is the same value that is used for 'Hostname' in 'Parameters'", + "loc.input.label.DatabaseName": "Database Name", + "loc.input.help.DatabaseName": "The name of database, if you already have one, on which the below script is needed to be run, else the script itself can be used to create the database.", + "loc.input.label.SqlUsername": "Server Admin Login", + "loc.input.help.SqlUsername": "Azure Database for MySQL server supports native MySQL authentication. You can connect and authenticate to a server with the server's admin login. Example: bbo1@fabrikam. When you connect using MySQL Workbench, this is the same value that is used for 'Username' in 'Parameters'.", + "loc.input.label.SqlPassword": "Password", + "loc.input.help.SqlPassword": "Administrator password for Azure Database for MySQL. In case you don’t recall the password you can change the password from [Azure portal](https://docs.microsoft.com/en-us/azure/mysql/howto-create-manage-server-portal).
It can be variable defined in the pipeline. Example : $(password).
Also, you may mark the variable type as 'secret' to secure it.", + "loc.input.label.TaskNameSelector": "Type", + "loc.input.help.TaskNameSelector": "Select one of the options between Script File & Inline Script.", + "loc.input.label.SqlFile": "MySQL Script", + "loc.input.help.SqlFile": "Full path of the script file on the automation agent or on a UNC path accessible to the automation agent like, \\\\\\\\BudgetIT\\DeployBuilds\\script.sql. Also, predefined system variables like, $(agent.releaseDirectory) can also be used here. A file containing SQL statements can be used here.​", + "loc.input.label.SqlInline": "Inline MySQL Script", + "loc.input.help.SqlInline": "Enter the MySQL script to execute on the Database selected above.", + "loc.input.label.SqlAdditionalArguments": "Additional MySQL Arguments", + "loc.input.help.SqlAdditionalArguments": "Additional options supported by MySQL simple SQL shell. These options will be applied when executing the given file on the Azure Database for MySQL.​
Example: You can change to default tab separated output format to HTML or even XML format. Or if you have problems due to insufficient memory for large result sets, use the --quick option.​", + "loc.input.label.IpDetectionMethod": "Specify Firewall Rules Using", + "loc.input.help.IpDetectionMethod": "For successful execution of the task, we need to enable administrators to access the Azure Database for MySQL Server from the IP Address of the automation agent.
By selecting auto-detect you can automatically add firewall exception for range of possible IP Address of automation agent ​or else you can specify the range explicitly.", + "loc.input.label.StartIpAddress": "Start IP Address", + "loc.input.help.StartIpAddress": "The starting IP Address of the automation agent machine pool like 196.21.30.50 .", + "loc.input.label.EndIpAddress": "End IP Address", + "loc.input.help.EndIpAddress": "The ending IP Address of the automation agent machine pool like 196.21.30.65 .", + "loc.input.label.DeleteFirewallRule": "Delete Rule After Task Ends", + "loc.input.help.DeleteFirewallRule": "If selected, the added exception for IP addresses of the automation agent will be removed for corresponding Azure Database for MySQL.", + "loc.messages.ARGD_ConstructorFailed": "The task failed while initializing. Error: %s .", + "loc.messages.FirewallRuleNameCannotBeEmpty": "The firewall rule name cannot be null.", + "loc.messages.FirewallAddressRangeCannotBeEmpty": "The firewall address cannot be null.", + "loc.messages.StartIpAddressCannotBeEmpty": "The start IP address of the firewall rule cannot be null.", + "loc.messages.EndIpAddressCannotBeEmpty": "The end IP address of the firewall rule cannot be null.", + "loc.messages.MysqlServerNameCannotBeEmpty": "The MySQL server name cannot be null.", + "loc.messages.MysqlFullyQualifiedServerNameCannotBeEmpty": "The MySQL server fully qualified name cannot be null.", + "loc.messages.ResourceGroupCannotBeEmpty": "The resource group name cannot be null.", + "loc.messages.NotAbleToAddFirewallRule": "An error occurred while adding the firewall rule to the MySQL server. Error: %s .", + "loc.messages.NotAbleToDeleteFirewallRule": "An error occurred while deleting the firewall rule from the MySQL server. Error: %s .", + "loc.messages.AgentIpAddressIsMissingInAddedFirewallRule": "The agent IP address is missing in the manually added firewall rule.", + "loc.messages.NotAbleToGetAllServers": "Failed to retrieve all MySQL servers of a subscription. Error: %s .", + "loc.messages.EmptyOrNullServerList": "The MySQL server list is empty. The MySQL server host name is invalid.", + "loc.messages.UnableToFindResourceGroupDueToNullId": "Unable to find the resource group due to a null ID.", + "loc.messages.UnableToFindResourceGroupDueToInvalidId": "Unable to find the resource group due to an invalid ID.", + "loc.messages.NotAbleToGetInstalledLocationOfMysqlFromPath": "The MySQL client is missing on the agent machine.", + "loc.messages.UnableToFindMysqlFromRegistryOnMachineError": "Unable to find MySQL using the registry on the machine.", + "loc.messages.UnableToFindMysqlFromRegistry": "Unable to find MySQL using the registry. Error: %s .", + "loc.messages.UnableToFindTheLocationOfMysqlFromRegistryOnMachineError": "Unable to find the location of MySQL using the registry on the machine. Error: %s .", + "loc.messages.AzureMysqlTaskParameterCannotBeEmpty": "The Azure MySQL task parameter cannot be null.", + "loc.messages.ToolPathCannotBeNull": "Tool path cannot be null.", + "loc.messages.SqlExecutionException": "A SQL execution exception occurred. Please check the SQL script. Error: %s .", + "loc.messages.AzureEndpointCannotBeNull": "Invalid subscription name. The Azure service connection cannot be null.", + "loc.messages.CallbackCannotBeNull": "The callback cannot be null.", + "loc.messages.UnableToCreateDatabaseException": "Unable to create database.", + "loc.messages.WindowMysqlClientMissingError": "MySQL client is missing on the Windows agent machine. Please install it by running the MySQL client installer 'https://aka.ms/window-mysqlcli-installer' script file on the agent machine.", + "loc.messages.LinuxMysqlClientMissingError": "MySQL client is missing on the Linux agent machine. Please install it by running 'sudo apt-get install mysql-client'.", + "loc.messages.CouldNotFetchAccessTokenforAzureStatusCode": "Could not retrieve an access token for Azure. Status code: %s. Status message: %s", + "loc.messages.CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "Could not retrieve an access token for the managed service principal. Please configure Managed Service Identity (MSI) for the virtual machine. See 'https://aka.ms/azure-msi-docs'.Assign role to created MSI Identity. See 'https://aka.ms/assign-role-msi'. Status code: %s. Status message: %s", + "loc.messages.CouldNotFetchAccessTokenforMSIStatusCode": "Could not retrieve an access token for the managed service principal. Status code: %s. Status message: %s", + "loc.messages.NotAbleToCreateFirewallRule": "Getting error during adding firewall rule to Azure mysql server. Error: %s", + "loc.messages.ExpiredServicePrincipal": "Could not fetch access token for Azure. Verify if the Service Principal used is valid and not expired.", + "loc.messages.Nopackagefoundwithspecifiedpattern": "No package found with specified pattern" +} \ No newline at end of file diff --git a/_generated/AzureMysqlDeploymentV1_Node16/Strings/resources.resjson/es-ES/resources.resjson b/_generated/AzureMysqlDeploymentV1_Node16/Strings/resources.resjson/es-ES/resources.resjson new file mode 100644 index 000000000000..6bca285586f1 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1_Node16/Strings/resources.resjson/es-ES/resources.resjson @@ -0,0 +1,68 @@ +{ + "loc.friendlyName": "Implementación de Azure Database for MySQL", + "loc.helpMarkDown": "[Obtener más información acerca de esta tarea](https://aka.ms/mysqlazuredeployreadme)", + "loc.description": "Ejecute los scripts y realice cambios en Azure Database for MySQL.", + "loc.instanceNameFormat": "Ejecutar Azure MySQL : $(TaskNameSelector)", + "loc.group.displayName.target": "Detalles de BD", + "loc.group.displayName.taskDetails": "Paquete de implementación", + "loc.group.displayName.firewall": "Firewall", + "loc.input.label.ConnectedServiceName": "Suscripción a Azure", + "loc.input.help.ConnectedServiceName": "Esto se necesita para conectar con su cuenta de Azure.
Para configurar una nueva conexión de servicio, seleccione la suscripción de Azure en la lista y haga clic en \"Autorizar\".
Si la suscripción no aparece en la lista o quiere usar una entidad de servicio existente, puede configurar la conexión del servicio de Azure con el botón \"Agregar\" o \"Administrar\".", + "loc.input.label.ServerName": "Nombre de host", + "loc.input.help.ServerName": "Nombre del servidor de \"Azure Database for MySQL\". Ejemplo: fabrikam.mysql.database.azure.com. Cuando se conecta mediante MySQL Workbench, este es el mismo valor que se usa para \"Nombre de host\" en \"Parámetros\"", + "loc.input.label.DatabaseName": "Nombre de la base de datos", + "loc.input.help.DatabaseName": "El nombre de la base de datos, si ya dispone de una, en la que es necesario ejecutar el script siguiente; de lo contrario, el propio script se puede usar para crear la base de datos.", + "loc.input.label.SqlUsername": "Inicio de sesión del administrador del servidor", + "loc.input.help.SqlUsername": "El servidor de Azure Database for MySQL admite la autenticación de MySQL nativa. Puede conectarse y autenticarse en un servidor con el inicio de sesión de administrador del servidor. Ejemplo: bbo1@fabrikam. Cuando se conecta mediante MySQL Workbench, este es el mismo valor que se usa para \"Nombre de usuario\" en \"Parámetros\".", + "loc.input.label.SqlPassword": "Contraseña", + "loc.input.help.SqlPassword": "Contraseña del administrador para Azure Database for MySQL. En caso de que no recuerde la contraseña, puede cambiarla en [Azure Portal](https://docs.microsoft.com/en-us/azure/mysql/howto-create-manage-server-portal).
Puede definirse por variable en la canalización. Ejemplo: $(password).
Asimismo, puede marcar el tipo de variable como \"secret\" para protegerlo.", + "loc.input.label.TaskNameSelector": "Tipo", + "loc.input.help.TaskNameSelector": "Seleccione una de las opciones entre Archivo de script y Script alineado.", + "loc.input.label.SqlFile": "Script de MySQL", + "loc.input.help.SqlFile": "Ruta de acceso completa del archivo de script en el agente de automatización o en una ruta de acceso UNC accesible para el agente de automatización, como \\\\\\\\BudgetIT\\DeployBuilds\\script.sql. Además, las variables de sistema predefinidas, como $(agent.releaseDirectory), también se pueden usar aquí. Se puede usar además un archivo que contenga instrucciones SQL.", + "loc.input.label.SqlInline": "Script de MySQL en línea", + "loc.input.help.SqlInline": "Especifique el script de MySQL que debe ejecutarse en la base de datos seleccionada.", + "loc.input.label.SqlAdditionalArguments": "Argumentos adicionales de MySQL", + "loc.input.help.SqlAdditionalArguments": "Más opciones admitidas por un shell de SQL sencillo de MySQL. Estas opciones se aplicarán al ejecutar el archivo especificado en Azure Database para MySQL.
Ejemplo: Puede cambiar al formato de salida predeterminado separado por tabulaciones en formato HTML o incluso XML. O si tiene problemas provocados por una cantidad de memoria insuficiente para grandes conjuntos de resultados, use la opción --quick.", + "loc.input.label.IpDetectionMethod": "Especificar las reglas de firewall con", + "loc.input.help.IpDetectionMethod": "Para la ejecución correcta de la tarea, es necesario que los administradores tengan acceso al servidor de Azure Database for MySQL desde la dirección IP del agente de automatización.
Al seleccionar la detección automática es posible agregar automáticamente una excepción de firewall para el intervalo de posibles direcciones IP del agente de automatización, si bien puede especificar el intervalo explícitamente.", + "loc.input.label.StartIpAddress": "Dirección IP inicial", + "loc.input.help.StartIpAddress": "Dirección IP inicial del grupo de máquinas del agente de automatización, como 196.21.30.50.", + "loc.input.label.EndIpAddress": "Dirección IP final", + "loc.input.help.EndIpAddress": "Dirección IP final del grupo de máquinas del agente de automatización, como 196.21.30.65.", + "loc.input.label.DeleteFirewallRule": "Eliminar la regla al finalizar la tarea", + "loc.input.help.DeleteFirewallRule": "Si se selecciona, la excepción agregada para las direcciones IP del agente de automatización se quitará de la instancia correspondiente de Azure Database for MySQL.", + "loc.messages.ARGD_ConstructorFailed": "Error al inicializar la tarea: %s.", + "loc.messages.FirewallRuleNameCannotBeEmpty": "El nombre de la regla de firewall no puede ser un valor null.", + "loc.messages.FirewallAddressRangeCannotBeEmpty": "La dirección del firewall no puede ser un valor null.", + "loc.messages.StartIpAddressCannotBeEmpty": "La dirección IP de inicio de la regla de firewall no puede ser un valor null.", + "loc.messages.EndIpAddressCannotBeEmpty": "La dirección IP final de la regla de firewall no puede ser un valor null.", + "loc.messages.MysqlServerNameCannotBeEmpty": "El nombre del servidor MySQL no puede ser un valor null.", + "loc.messages.MysqlFullyQualifiedServerNameCannotBeEmpty": "El nombre completo del servidor MySQL no puede ser un valor null.", + "loc.messages.ResourceGroupCannotBeEmpty": "El nombre del grupo de recursos no puede ser un valor null.", + "loc.messages.NotAbleToAddFirewallRule": "Error al agregar la regla de firewall para el servidor MySQL. Error: %s.", + "loc.messages.NotAbleToDeleteFirewallRule": "Error al eliminar la regla de firewall del servidor MySQL. Error: %s.", + "loc.messages.AgentIpAddressIsMissingInAddedFirewallRule": "Falta la dirección IP del agente en la regla de firewall agregada manualmente.", + "loc.messages.NotAbleToGetAllServers": "No se pudieron recuperar todos los servidores de MySQL de una suscripción. Error: %s.", + "loc.messages.EmptyOrNullServerList": "La lista de servidores MySQL está vacía. El nombre de host del servidor MySQL no es válido.", + "loc.messages.UnableToFindResourceGroupDueToNullId": "No se puede encontrar el grupo de recursos porque el id. es un valor nulo.", + "loc.messages.UnableToFindResourceGroupDueToInvalidId": "No se puede encontrar el grupo de recursos porque el id. no es válido.", + "loc.messages.NotAbleToGetInstalledLocationOfMysqlFromPath": "Falta el cliente de MySQL en la máquina del agente.", + "loc.messages.UnableToFindMysqlFromRegistryOnMachineError": "No se puede encontrar MySQL usando el registro en la máquina.", + "loc.messages.UnableToFindMysqlFromRegistry": "No se puede encontrar MySQL usando el registro. Error: %s.", + "loc.messages.UnableToFindTheLocationOfMysqlFromRegistryOnMachineError": "No se puede encontrar la ubicación de MySQL usando el registro en la máquina. Error: %s.", + "loc.messages.AzureMysqlTaskParameterCannotBeEmpty": "El parámetro de la tarea de Azure MySQL no puede ser null.", + "loc.messages.ToolPathCannotBeNull": "La ruta de acceso de herramientas no puede ser null.", + "loc.messages.SqlExecutionException": "Se produjo una excepción de ejecución de SQL. Compruebe el script SQL. Error: %s.", + "loc.messages.AzureEndpointCannotBeNull": "Nombre de la suscripción no válido. La conexión del servicio de Azure no puede ser null.", + "loc.messages.CallbackCannotBeNull": "La devolución de llamada no puede ser null.", + "loc.messages.UnableToCreateDatabaseException": "No se puede crear la base de datos.", + "loc.messages.WindowMysqlClientMissingError": "Falta el cliente de MySQL en el equipo del agente de Windows. Instálelo ejecutando el archivo de script \"https://aka.ms/window-mysqlcli-installer\" del instalador del cliente MySQL en la máquina del agente.", + "loc.messages.LinuxMysqlClientMissingError": "Falta el cliente de MySQL en el equipo del agente de Linux. Instálelo ejecutando \"sudo apt-get install mysql-client\".", + "loc.messages.CouldNotFetchAccessTokenforAzureStatusCode": "No se pudo recuperar un token de acceso para Azure. Código de estado: %s. Mensaje de estado: %s", + "loc.messages.CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "No se pudo recuperar un token de acceso para la entidad de servicio administrado. Configure Managed Service Identity (MSI) para la máquina virtual. Consulte \"https://aka.ms/azure-msi-docs\". Asigne un rol a la identidad MSI que se ha creado. Consulte \"https://aka.ms/assign-role-msi\". Código de estado: %s. Mensaje de estado: %s", + "loc.messages.CouldNotFetchAccessTokenforMSIStatusCode": "No se pudo recuperar un token de acceso para la entidad de servicio administrado. Código de estado: %s. Mensaje de estado: %s", + "loc.messages.NotAbleToCreateFirewallRule": "Error al agregar la regla de firewall al servidor MySQL de Azure: %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.Nopackagefoundwithspecifiedpattern": "No se encontró ningún paquete con el patrón especificado" +} \ No newline at end of file diff --git a/_generated/AzureMysqlDeploymentV1_Node16/Strings/resources.resjson/fr-FR/resources.resjson b/_generated/AzureMysqlDeploymentV1_Node16/Strings/resources.resjson/fr-FR/resources.resjson new file mode 100644 index 000000000000..1a971a770826 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1_Node16/Strings/resources.resjson/fr-FR/resources.resjson @@ -0,0 +1,68 @@ +{ + "loc.friendlyName": "Déploiement d'Azure Database pour MySQL", + "loc.helpMarkDown": "[En savoir plus sur cette tâche](https://aka.ms/mysqlazuredeployreadme)", + "loc.description": "Exécuter des scripts et apporter des changements au service Azure Database pour MySQL", + "loc.instanceNameFormat": "Exécuter Azure MySQL : $(TaskNameSelector)", + "loc.group.displayName.target": "Détails de DB", + "loc.group.displayName.taskDetails": "Package de déploiement", + "loc.group.displayName.firewall": "Pare-feu", + "loc.input.label.ConnectedServiceName": "Abonnement Azure", + "loc.input.help.ConnectedServiceName": "Ceci est nécessaire pour vous connecter à votre compte Azure.
Pour configurer la nouvelle connexion de service, sélectionnez l'abonnement Azure dans la liste, puis cliquez sur Autoriser.
Si votre abonnement n'est pas listé, ou si vous souhaitez utiliser un principal du service existant, vous pouvez configurer une connexion de service Azure à l'aide du bouton Ajouter ou Gérer.", + "loc.input.label.ServerName": "Nom d'hôte", + "loc.input.help.ServerName": "Nom de serveur 'Azure Database pour MySQL'. Exemple : fabrikam.mysql.database.azure.com. Quand vous vous connectez à l'aide de MySQL Workbench, cette valeur est la même que celle utilisée pour Nom d'hôte dans Paramètres", + "loc.input.label.DatabaseName": "Nom de la base de données", + "loc.input.help.DatabaseName": "Nom de la base de données, si vous en avez déjà une, sur laquelle le script ci-dessous doit être exécuté. Sinon, vous pouvez utiliser le script lui-même pour créer la base de données.", + "loc.input.label.SqlUsername": "Connexion administrateur au serveur", + "loc.input.help.SqlUsername": "Le serveur Azure Database pour MySQL prend en charge l'authentification MySQL native. Vous pouvez vous connecter et vous authentifier auprès d'un serveur à l'aide de la connexion d'administrateur du serveur. Exemple : bbo1@fabrikam. Quand vous vous connectez à l'aide de MySQL Workbench, cette valeur est la même que celle utilisée pour Nom d'utilisateur dans Paramètres.", + "loc.input.label.SqlPassword": "Mot de passe", + "loc.input.help.SqlPassword": "Mot de passe administrateur d'Azure Database pour MySQL. Si vous oubliez le mot de passe, vous pouvez le changer sur le [Portail Azure](https://docs.microsoft.com/fr-fr/azure/mysql/howto-create-manage-server-portal).
Vous pouvez le définir à l'aide d'une variable dans le pipeline. Exemple : $(password).
Vous pouvez également marquer la variable comme étant de type 'secret' pour la sécuriser.", + "loc.input.label.TaskNameSelector": "Type", + "loc.input.help.TaskNameSelector": "Sélectionnez l'une des options situées entre Fichier de script et Script inline.", + "loc.input.label.SqlFile": "Script MySQL", + "loc.input.help.SqlFile": "Chemin complet du fichier de script sur l'agent Automation ou dans un chemin UNC auquel cet agent a accès, par exemple \\\\\\\\BudgetIT\\DeployBuilds\\script.sql. Vous pouvez également utiliser des variables système prédéfinies telles que $(agent.releaseDirectory). Vous pouvez utiliser ici un fichier contenant des instructions SQL.​", + "loc.input.label.SqlInline": "Script MySQL inline", + "loc.input.help.SqlInline": "Entrez le script MySQL à exécuter dans la base de données sélectionnée ci-dessus.", + "loc.input.label.SqlAdditionalArguments": "Arguments MySQL supplémentaires", + "loc.input.help.SqlAdditionalArguments": "Options supplémentaires prises en charge par l'interpréteur de commandes SQL simple MySQL. Ces options sont appliquées durant l'exécution du fichier donné sur Azure Database pour MySQL.​
Exemple : Vous pouvez passer au format de sortie par défaut avec séparation des valeurs par des tabulations, au format HTML, ou même au format XML. Si vous rencontrez des problèmes liés à une insuffisance de mémoire pour les jeux de résultats volumineux, utilisez l'option --quick.​", + "loc.input.label.IpDetectionMethod": "Spécifier les règles de pare-feu à l'aide de", + "loc.input.help.IpDetectionMethod": "Pour que la tâche soit exécutée correctement, nous devons permettre aux administrateurs d'accéder à Azure Database pour MySQL Server à partir de l'adresse IP de l'agent Automation.
En sélectionnant la détection automatique, vous pouvez ajouter automatiquement une exception de pare-feu pour une plage d'adresses IP possibles de l'agent Automation. Sinon, vous pouvez spécifier la plage de manière explicite.", + "loc.input.label.StartIpAddress": "Adresse IP de début", + "loc.input.help.StartIpAddress": "Adresse IP de début du pool de machines de l'agent Automation (par exemple, 196.21.30.50).", + "loc.input.label.EndIpAddress": "Adresse IP de fin", + "loc.input.help.EndIpAddress": "Adresse IP de fin du pool de machines de l'agent Automation (par exemple, 196.21.30.65).", + "loc.input.label.DeleteFirewallRule": "Supprimer la règle une fois la tâche terminée", + "loc.input.help.DeleteFirewallRule": "Si cette option est sélectionnée, l'exception ajoutée pour les adresses IP de l'agent Automation est supprimée du service Azure Database pour MySQL correspondant.", + "loc.messages.ARGD_ConstructorFailed": "Échec de la tâche durant l'initialisation. Erreur : %s.", + "loc.messages.FirewallRuleNameCannotBeEmpty": "Le nom de la règle de pare-feu ne doit pas avoir une valeur null.", + "loc.messages.FirewallAddressRangeCannotBeEmpty": "L'adresse du pare-feu ne doit pas avoir une valeur null.", + "loc.messages.StartIpAddressCannotBeEmpty": "L'adresse IP de début de la règle de pare-feu ne doit pas avoir une valeur null.", + "loc.messages.EndIpAddressCannotBeEmpty": "L'adresse IP de fin de la règle de pare-feu ne doit pas avoir une valeur null.", + "loc.messages.MysqlServerNameCannotBeEmpty": "Le nom du serveur MySQL ne doit pas avoir une valeur null.", + "loc.messages.MysqlFullyQualifiedServerNameCannotBeEmpty": "Le nom complet du serveur MySQL ne doit pas avoir une valeur null.", + "loc.messages.ResourceGroupCannotBeEmpty": "Le nom du groupe de ressources ne doit pas avoir une valeur null.", + "loc.messages.NotAbleToAddFirewallRule": "Une erreur s'est produite durant l'ajout de la règle de pare-feu au serveur MySQL. Erreur : %s.", + "loc.messages.NotAbleToDeleteFirewallRule": "Une erreur s'est produite durant la suppression de la règle de pare-feu du serveur MySQL. Erreur : %s.", + "loc.messages.AgentIpAddressIsMissingInAddedFirewallRule": "L'adresse IP de l'agent est manquante dans la règle de pare-feu ajoutée manuellement.", + "loc.messages.NotAbleToGetAllServers": "Échec de la récupération de tous les serveurs MySQL d'un abonnement. Erreur : %s.", + "loc.messages.EmptyOrNullServerList": "La liste de serveurs MySQL est vide. Le nom d'hôte du serveur MySQL est non valide.", + "loc.messages.UnableToFindResourceGroupDueToNullId": "Le groupe de ressources est introuvable en raison d'un ID ayant une valeur null.", + "loc.messages.UnableToFindResourceGroupDueToInvalidId": "Le groupe de ressources est introuvable en raison d'un ID non valide.", + "loc.messages.NotAbleToGetInstalledLocationOfMysqlFromPath": "Le client MySQL est manquant sur la machine d'agent.", + "loc.messages.UnableToFindMysqlFromRegistryOnMachineError": "MySQL est introuvable à l'aide du Registre sur la machine.", + "loc.messages.UnableToFindMysqlFromRegistry": "MySQL est introuvable à l'aide du Registre. Erreur : %s.", + "loc.messages.UnableToFindTheLocationOfMysqlFromRegistryOnMachineError": "L'emplacement de MySQL est introuvable à l'aide du Registre sur la machine. Erreur : %s.", + "loc.messages.AzureMysqlTaskParameterCannotBeEmpty": "Le paramètre de tâche Azure MySQL ne doit pas avoir une valeur null.", + "loc.messages.ToolPathCannotBeNull": "Le chemin de l'outil ne doit pas avoir une valeur null.", + "loc.messages.SqlExecutionException": "Une exception d'exécution SQL s'est produite. Vérifiez le script SQL. Erreur : %s.", + "loc.messages.AzureEndpointCannotBeNull": "Nom d'abonnement non valide. La connexion de service Azure ne doit pas avoir une valeur null.", + "loc.messages.CallbackCannotBeNull": "Le rappel ne doit pas avoir une valeur null.", + "loc.messages.UnableToCreateDatabaseException": "Impossible de créer la base de données.", + "loc.messages.WindowMysqlClientMissingError": "Le client MySQL est manquant sur la machine de l'agent Windows. Installez-le en exécutant le fichier de script 'https://aka.ms/window-mysqlcli-installer' du programme d'installation du client MySQL sur la machine d'agent.", + "loc.messages.LinuxMysqlClientMissingError": "Le client MySQL est manquant sur la machine de l'agent Linux. Installez-le en exécutant 'sudo apt-get install mysql-client'.", + "loc.messages.CouldNotFetchAccessTokenforAzureStatusCode": "Impossible de récupérer un jeton d'accès pour Azure. Code d'état : %s. Message d'état : %s", + "loc.messages.CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "Impossible de récupérer un jeton d'accès pour le principal de service managé. Configurez MSI (Managed Service Identity) pour la machine virtuelle. Consultez 'https://aka.ms/azure-msi-docs'. Attribuez un rôle à l'identité MSI créée. Consultez 'https://aka.ms/assign-role-msi'. Code d'état : %s. Message d'état : %s", + "loc.messages.CouldNotFetchAccessTokenforMSIStatusCode": "Impossible de récupérer un jeton d'accès pour le principal de service managé. Code d'état : %s. Message d'état : %s", + "loc.messages.NotAbleToCreateFirewallRule": "Obtention d'une erreur durant l'ajout d'une règle de pare-feu au serveur Azure MySQL. Erreur : %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.Nopackagefoundwithspecifiedpattern": "Package introuvable avec le modèle spécifié" +} \ No newline at end of file diff --git a/_generated/AzureMysqlDeploymentV1_Node16/Strings/resources.resjson/it-IT/resources.resjson b/_generated/AzureMysqlDeploymentV1_Node16/Strings/resources.resjson/it-IT/resources.resjson new file mode 100644 index 000000000000..05efb736c278 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1_Node16/Strings/resources.resjson/it-IT/resources.resjson @@ -0,0 +1,68 @@ +{ + "loc.friendlyName": "Distribuzione di Database di Azure per MySQL", + "loc.helpMarkDown": "[Altre informazioni su questa attività](https://aka.ms/mysqlazuredeployreadme)", + "loc.description": "Consente di eseguire gli script e di apportare modifiche all'istanza di Database di Azure per MySQL", + "loc.instanceNameFormat": "Esegui attività MySQL di Azure: $(TaskNameSelector)", + "loc.group.displayName.target": "Dettagli del database", + "loc.group.displayName.taskDetails": "Pacchetto di distribuzione", + "loc.group.displayName.firewall": "Firewall", + "loc.input.label.ConnectedServiceName": "Sottoscrizione di Azure", + "loc.input.help.ConnectedServiceName": "Questa opzione è necessaria per connettersi all'account Azure.
Per configurare la nuova connessione al servizio, selezionare la sottoscrizione di Azure nell'elenco e fare clic su 'Autorizza'.
Se la sottoscrizione non è inclusa nell'elenco o si vuole usare un'entità servizio esistente, è possibile configurare una connessione al servizio di Azure usando il pulsante 'Aggiungi' o 'Gestisci'.", + "loc.input.label.ServerName": "Nome host", + "loc.input.help.ServerName": "Nome del server di 'Database di Azure per MySQL', ad esempio fabrikam.mysql.database.azure.com. Quando ci si connette tramite MySQL Workbench, questo è lo stesso valore usato per 'Nome host' in 'Parametri'.", + "loc.input.label.DatabaseName": "Nome database", + "loc.input.help.DatabaseName": "Nome del database, se già disponibile, su cui è necessario eseguire lo script seguente. In caso contrario, è possibile usare lo script stesso per creare il database.", + "loc.input.label.SqlUsername": "Account di accesso amministratore server", + "loc.input.help.SqlUsername": "Il server di Database di Azure per MySQL supporta l'autenticazione MySQL nativa. È possibile connettersi ed eseguire l'autenticazione a un server con l'account di accesso amministratore del server, ad esempio bbo1@fabrikam. Quando ci si connette tramite MySQL Workbench, questo è lo stesso valore usato per 'Nome host' in 'Parametri'.", + "loc.input.label.SqlPassword": "Password", + "loc.input.help.SqlPassword": "Password dell'amministratore di Database di Azure per MySQL. Se non si ricorda la password, è possibile modificarla dal [portale di Azure](https://docs.microsoft.com/it-it/azure/mysql/howto-create-manage-server-portal).
Può essere la variabile definita nella pipeline, ad esempio $(password).
È anche possibile contrassegnare il tipo di variabile come 'secret' per proteggerlo.", + "loc.input.label.TaskNameSelector": "Tipo", + "loc.input.help.TaskNameSelector": "Selezionare una delle opzioni tra File di script e Script inline.", + "loc.input.label.SqlFile": "Script MySQL", + "loc.input.help.SqlFile": "Percorso completo del file di script nell'agente di automazione o in un percorso UNC accessibile all'agente di automazione, come \\\\\\\\BudgetIT\\DeployBuilds\\script.sql. È anche possibile usare variabili di sistema predefinite, come $(agent.releaseDirectory), nonché un file contenente istruzioni SQL.", + "loc.input.label.SqlInline": "Script MySQL inline", + "loc.input.help.SqlInline": "Immettere lo script MySQL da eseguire sul database selezionato in precedenza.", + "loc.input.label.SqlAdditionalArguments": "Argomenti aggiuntivi di MySQL", + "loc.input.help.SqlAdditionalArguments": "Opzioni aggiuntive supportate dalla shell semplice di SQL, MySQL. Queste opzioni verranno applicate durante l'esecuzione del file specificato in Database di Azure per MySQL.
Esempio: è possibile modificare in HTML o persino in formato XML il formato di output predefinito delimitato da tabulazioni. Se si riscontrano problemi causati da memoria insufficiente per set di risultati di grandi dimensioni, usare l'opzione --quick.", + "loc.input.label.IpDetectionMethod": "Specifica regole del firewall tramite", + "loc.input.help.IpDetectionMethod": "Per la corretta esecuzione dell'attività, è necessario consentire agli amministratori di accedere a Database di Azure per MySQL dall'indirizzo IP dell'agente di automazione.
Se si seleziona il rilevamento automatico, è possibile aggiungere automaticamente l'eccezione del firewall per l'intervallo di indirizzi IP possibili dell'agente di automazione; in alternativa, è possibile specificare l'intervallo in modo esplicito.", + "loc.input.label.StartIpAddress": "Indirizzo IP iniziale", + "loc.input.help.StartIpAddress": "Indirizzo IP iniziale del pool di computer dell'agente di automazione, ad esempio 196.21.30.50.", + "loc.input.label.EndIpAddress": "Indirizzo IP finale", + "loc.input.help.EndIpAddress": "Indirizzo IP finale del pool di computer dell'agente di automazione, ad esempio 196.21.30.65.", + "loc.input.label.DeleteFirewallRule": "Elimina regola al termine dell'attività", + "loc.input.help.DeleteFirewallRule": "Se l'opzione è selezionata, l'eccezione aggiunta per gli indirizzi IP dell'agente di automazione verrà rimossa per l'istanza corrispondente di Database di Azure per MySQL.", + "loc.messages.ARGD_ConstructorFailed": "L'attività non è riuscita durante l'inizializzazione. Errore: %s.", + "loc.messages.FirewallRuleNameCannotBeEmpty": "Il nome della regola del firewall non può essere Null.", + "loc.messages.FirewallAddressRangeCannotBeEmpty": "L'indirizzo del firewall non può essere Null.", + "loc.messages.StartIpAddressCannotBeEmpty": "L'indirizzo IP iniziale della regola del firewall non può essere Null.", + "loc.messages.EndIpAddressCannotBeEmpty": "L'indirizzo IP finale della regola del firewall non può essere Null.", + "loc.messages.MysqlServerNameCannotBeEmpty": "Il nome del server MySQL non può essere Null.", + "loc.messages.MysqlFullyQualifiedServerNameCannotBeEmpty": "Il nome completo del server MySQL non può essere Null.", + "loc.messages.ResourceGroupCannotBeEmpty": "Il nome del gruppo di risorse non può essere Null.", + "loc.messages.NotAbleToAddFirewallRule": "Si è verificato un errore durante l'aggiunta della regola del firewall al server MySQL. Errore: %s.", + "loc.messages.NotAbleToDeleteFirewallRule": "Si è verificato un errore durante l'eliminazione della regola del firewall dal server MySQL. Errore: %s.", + "loc.messages.AgentIpAddressIsMissingInAddedFirewallRule": "L'indirizzo IP dell'agente non è presente nella regola del firewall aggiunta manualmente.", + "loc.messages.NotAbleToGetAllServers": "Non è stato possibile recuperare tutti i server MySQL di una sottoscrizione. Errore: %s.", + "loc.messages.EmptyOrNullServerList": "L'elenco dei server MySQL è vuoto. Il nome host del server MySQL non è valido.", + "loc.messages.UnableToFindResourceGroupDueToNullId": "Non è possibile trovare il gruppo di risorse a causa di un ID Null.", + "loc.messages.UnableToFindResourceGroupDueToInvalidId": "Non è possibile trovare il gruppo di risorse a causa di un ID non valido.", + "loc.messages.NotAbleToGetInstalledLocationOfMysqlFromPath": "Il client MySQL non è presente nel computer agente.", + "loc.messages.UnableToFindMysqlFromRegistryOnMachineError": "Non è possibile trovare MySQL usando il Registro di sistema nel computer.", + "loc.messages.UnableToFindMysqlFromRegistry": "Non è possibile trovare MySQL usando il Registro di sistema. Errore: %s.", + "loc.messages.UnableToFindTheLocationOfMysqlFromRegistryOnMachineError": "Non è possibile trovare il percorso di MySQL usando il Registro di sistema nel computer. Errore: %s.", + "loc.messages.AzureMysqlTaskParameterCannotBeEmpty": "Il parametro dell'attività MySQL di Azure non può essere Null.", + "loc.messages.ToolPathCannotBeNull": "Il percorso dello strumento non può essere Null.", + "loc.messages.SqlExecutionException": "Si è verificata un'eccezione di esecuzione SQL. Controllare lo script SQL. Errore: %s.", + "loc.messages.AzureEndpointCannotBeNull": "Il nome della sottoscrizione non è valido. La connessione al servizio di Azure non può essere Null.", + "loc.messages.CallbackCannotBeNull": "Il callback non può essere Null.", + "loc.messages.UnableToCreateDatabaseException": "Non è possibile creare il database.", + "loc.messages.WindowMysqlClientMissingError": "Il client MySQL non è presente nel computer agente Windows. Per installarlo, eseguire il file di script 'https://aka.ms/window-mysqlcli-installer' del programma di installazione del client MySQL nel computer agente.", + "loc.messages.LinuxMysqlClientMissingError": "Il client MySQL non è presente nel computer agente Linux. Per installarlo, eseguire 'sudo apt-get install mysql-client'.", + "loc.messages.CouldNotFetchAccessTokenforAzureStatusCode": "Non è stato possibile recuperare un token di accesso per Azure. Codice di stato: %s. Messaggio di stato: %s", + "loc.messages.CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "Non è stato possibile recuperare un token di accesso per l'entità servizio gestita. Configurare l'identità del servizio gestita per la macchina virtuale. Vedere 'https://aka.ms/azure-msi-docs'. Assegnare il ruolo all'identità del servizio gestita creata. Vedere 'https://aka.ms/assign-role-msi'. Codice di stato: %s. Messaggio di stato: %s", + "loc.messages.CouldNotFetchAccessTokenforMSIStatusCode": "Non è stato possibile recuperare un token di accesso per l'entità servizio gestita. Codice di stato: %s. Messaggio di stato: %s", + "loc.messages.NotAbleToCreateFirewallRule": "Si è verificato un errore durante l'aggiunta della regola del firewall al server MySQL di Azure. Errore: %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.Nopackagefoundwithspecifiedpattern": "Non è stato trovato alcun pacchetto con il criterio specificato" +} \ No newline at end of file diff --git a/_generated/AzureMysqlDeploymentV1_Node16/Strings/resources.resjson/ja-JP/resources.resjson b/_generated/AzureMysqlDeploymentV1_Node16/Strings/resources.resjson/ja-JP/resources.resjson new file mode 100644 index 000000000000..339b0bce1549 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1_Node16/Strings/resources.resjson/ja-JP/resources.resjson @@ -0,0 +1,68 @@ +{ + "loc.friendlyName": "Azure Database for MySQL のデプロイ", + "loc.helpMarkDown": "[このタスクの詳細を表示](https://aka.ms/mysqlazuredeployreadme)", + "loc.description": "スクリプトを実行し、Azure Database for MySQL に変更を加えます", + "loc.instanceNameFormat": "Azure MySQL を実行します : $(TaskNameSelector)", + "loc.group.displayName.target": "DB の詳細", + "loc.group.displayName.taskDetails": "配置パッケージ", + "loc.group.displayName.firewall": "ファイアウォール", + "loc.input.label.ConnectedServiceName": "Azure サブスクリプション", + "loc.input.help.ConnectedServiceName": "これは、お使いの Azure アカウントに接続するために必要です。
新しいサービス接続を構成するには、一覧から Azure サブスクリプションを選択して、[承認] をクリックします。
サブスクリプションが一覧にない場合、または既存のサービス プリンシパルを使用する場合は、[追加] ボタンまたは [管理] ボタンを使用して Azure サービス接続をセットアップすることができます。", + "loc.input.label.ServerName": "ホスト名", + "loc.input.help.ServerName": "'Azure Database for MySQL' のサーバー名です。例: fabrikam.mysql.database.azure.com。MySQL Workbench を使用して接続する場合、これは 'パラメーター' 内の 'ホスト名' に使用する値と同じです", + "loc.input.label.DatabaseName": "データベース名 ", + "loc.input.help.DatabaseName": "以下のスクリプトを実行する必要のあるデータベースが既にある場合は、その名前。それ以外の場合は、スクリプト自体を使用してデータベースを作成できます。", + "loc.input.label.SqlUsername": "サーバー管理者ログイン", + "loc.input.help.SqlUsername": "MySQL サーバー用の Azure データベースは、MySQL のネイティブ認証をサポートします。サーバーの管理者ログインを使ってサーバーに接続し、認証できます。例: bbo1@fabrikam。MySQL Workbench を使用して接続する場合、これは 'パラメーター' 内の 'ユーザー名' で使用されるものと同じ値になります。", + "loc.input.label.SqlPassword": "パスワード", + "loc.input.help.SqlPassword": "Azure Database for MySQL の管理者パスワードです。パスワードを忘れた場合は、[Azure portal](https://docs.microsoft.com/ja-jp/azure/mysql/howto-create-manage-server-portal) でパスワードを変更できます。
これは、パイプラインで定義した変数にすることができます。例: $(password)。
また、変数の型を 'シークレット' とマークしてセキュリティで保護することもできます。", + "loc.input.label.TaskNameSelector": "種類", + "loc.input.help.TaskNameSelector": "スクリプト ファイルまたはインライン スクリプトのいずれかのオプションを選択します。", + "loc.input.label.SqlFile": "MySQL スクリプト", + "loc.input.help.SqlFile": "自動化エージェント上のスクリプト ファイルの完全なパス、または \\\\\\\\BudgetIT\\DeployBuilds\\script.sql などの自動化エージェントにアクセス可能な UNC パス。また、$(agent.releaseDirectory) などの定義済みのシステム変数をここで使用するとこもできます。SQL ステートメントを含むファイルは、ここで使用できます。", + "loc.input.label.SqlInline": "インライン MySQL スクリプト", + "loc.input.help.SqlInline": "上で選択したデータベースに対して実行する MySQL スクリプトを入力します。", + "loc.input.label.SqlAdditionalArguments": "追加の MySQL 引数", + "loc.input.help.SqlAdditionalArguments": "MySQL の簡単な SQL シェルでサポートされている追加オプション。これらのオプションは、指定されたファイルを MySQL 用の Azure データベースに対して実行するときに適用されます。
例: 既定のタブ区切り出力形式を HTML 形式に、あるいは XML 形式にさえ変更できます。メモリが不十分なために大きな結果セットで問題が生じる場合、--quick オプションを使用できます。", + "loc.input.label.IpDetectionMethod": "次を使用して、ファイアウォール ルールを指定します", + "loc.input.help.IpDetectionMethod": "タスクを正常に実行するには、自動化エージェントの IP アドレスから Azure Database for MySQL サーバーにアクセスすることを管理者に許可する必要があります。
自動検出を選択すれば、自動化エージェントの IP アドレスになり得る範囲をファイアウォールの例外に自動的に追加できます。あるいは、明示的に範囲を指定することもできます。", + "loc.input.label.StartIpAddress": "開始 IP アドレス", + "loc.input.help.StartIpAddress": "自動化エージェントのコンピューター プールの開始 IP アドレス (196.21.30.50 など)。", + "loc.input.label.EndIpAddress": "終了 IP アドレス", + "loc.input.help.EndIpAddress": "自動化エージェントのコンピューター プールの最終 IP アドレス (196.21.30.65 など)。", + "loc.input.label.DeleteFirewallRule": "タスク終了後、ルールを削除します", + "loc.input.help.DeleteFirewallRule": "選択されている場合、追加された自動化エージェントの IP アドレスの例外は、対応する Azure Database for MySQL に対して除外されます。", + "loc.messages.ARGD_ConstructorFailed": "初期化中にタスクが失敗しました。エラー: %s", + "loc.messages.FirewallRuleNameCannotBeEmpty": "ファイアウォール規則名を null 値にすることはできません。", + "loc.messages.FirewallAddressRangeCannotBeEmpty": "ファイアウォール アドレスを null 値にすることはできません。", + "loc.messages.StartIpAddressCannotBeEmpty": "ファイアウォール規則の開始 IP アドレスを null 値にすることはできません。", + "loc.messages.EndIpAddressCannotBeEmpty": "ファイアウォール規則の終了 IP アドレスを null 値にすることはできません。", + "loc.messages.MysqlServerNameCannotBeEmpty": "MySQL サーバー名を null にすることはできません。", + "loc.messages.MysqlFullyQualifiedServerNameCannotBeEmpty": "MySQL サーバーの完全修飾名を null 値にすることはできません。", + "loc.messages.ResourceGroupCannotBeEmpty": "リソース グループ名を null 値にすることはできません。", + "loc.messages.NotAbleToAddFirewallRule": "MySQL サーバーにファイアウォール ルールを追加している間にエラーが発生しました。エラー: %s。", + "loc.messages.NotAbleToDeleteFirewallRule": "MySQL サーバーからファイアウォール ルールを削除している間にエラーが発生しました。エラー: %s。", + "loc.messages.AgentIpAddressIsMissingInAddedFirewallRule": "エージェントの IP アドレスが、手動で追加されたファイアウォール規則にありません。", + "loc.messages.NotAbleToGetAllServers": "サブスクリプションのすべての MySQL サーバーを取得することに失敗しました。エラー: %s。", + "loc.messages.EmptyOrNullServerList": "MySQL サーバーのリストが空です。MySQL サーバーのホスト名が無効です。", + "loc.messages.UnableToFindResourceGroupDueToNullId": "ID が null のため、リソース グループが見つかりません。", + "loc.messages.UnableToFindResourceGroupDueToInvalidId": "ID が無効なため、リソース グループが見つかりません。", + "loc.messages.NotAbleToGetInstalledLocationOfMysqlFromPath": "MySQL クライアントがエージェント マシンにありません。", + "loc.messages.UnableToFindMysqlFromRegistryOnMachineError": "マシン上のレジストリを使用して MySQL を見つけることができません。", + "loc.messages.UnableToFindMysqlFromRegistry": "レジストリを使用して MySQL を見つけることができません。エラー: %s。", + "loc.messages.UnableToFindTheLocationOfMysqlFromRegistryOnMachineError": "マシン上のレジストリを使用して MySQL の場所を見つけることができません。エラー: %s。", + "loc.messages.AzureMysqlTaskParameterCannotBeEmpty": "Azure MySQL タスク パラメーターを null 値にすることはできません。", + "loc.messages.ToolPathCannotBeNull": "ツール パスを null にすることはできません。", + "loc.messages.SqlExecutionException": "SQL 実行の例外が発生しました。SQL スクリプトをご確認ください。エラー: %s。", + "loc.messages.AzureEndpointCannotBeNull": "無効なサブスクリプション名。Azure サービス接続を null 値にすることはできません。", + "loc.messages.CallbackCannotBeNull": "コールバックを null にすることはできません。", + "loc.messages.UnableToCreateDatabaseException": "データベースを作成できません。", + "loc.messages.WindowMysqlClientMissingError": "MySQL クライアントが Windows エージェント マシンにありません。エージェント マシンで MySQL クライアント インストーラー 'https://aka.ms/window-mysqlcli-installer' スクリプト ファイルを実行して、そのクライアントをインストールしてください。", + "loc.messages.LinuxMysqlClientMissingError": "MySQL クライアントが Linux エージェント マシンにありません。'sudo apt-get install mysql-client' を実行して、そのクライアントをインストールしてください。", + "loc.messages.CouldNotFetchAccessTokenforAzureStatusCode": "Azure 用のアクセス トークンを取得できませんでした。状態コード: %s。状態メッセージ: %s", + "loc.messages.CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "マネージド サービス プリンシパルのためのアクセス トークンを取得できませんでした。仮想マシンに対してマネージド サービス ID (MSI) を構成してください。'https://aka.ms/azure-msi-docs' をご覧ください。作成された MSI ID にロールを割り当ててください。'https://aka.ms/assign-role-msi' をご覧ください。状態コード: %s。状態メッセージ: %s", + "loc.messages.CouldNotFetchAccessTokenforMSIStatusCode": "マネージド サービス プリンシパルのアクセス トークンを取得できませんでした。状態コード: %s。状態メッセージ: %s", + "loc.messages.NotAbleToCreateFirewallRule": "ファイアウォール規則を Azure MySql サーバーに追加する際にエラーが発生しました。エラー: %s", + "loc.messages.ExpiredServicePrincipal": "Azure のアクセス トークンをフェッチできませんでした。使用されているサービス プリンシパルが有効であり、有効期限が切れていないことを確認してください。", + "loc.messages.Nopackagefoundwithspecifiedpattern": "指定したパターンのパッケージが見つかりませんでした" +} \ No newline at end of file diff --git a/_generated/AzureMysqlDeploymentV1_Node16/Strings/resources.resjson/ko-KR/resources.resjson b/_generated/AzureMysqlDeploymentV1_Node16/Strings/resources.resjson/ko-KR/resources.resjson new file mode 100644 index 000000000000..02b07bceab72 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1_Node16/Strings/resources.resjson/ko-KR/resources.resjson @@ -0,0 +1,68 @@ +{ + "loc.friendlyName": "Azure Database for MySQL 배포", + "loc.helpMarkDown": "[이 작업에 대한 자세한 정보](https://aka.ms/mysqlazuredeployreadme)", + "loc.description": "스크립트를 실행하고 Azure Database for MySQL을 변경합니다.", + "loc.instanceNameFormat": "Azure MySQL 실행: $(TaskNameSelector)", + "loc.group.displayName.target": "DB 정보", + "loc.group.displayName.taskDetails": "배포 패키지", + "loc.group.displayName.firewall": "방화벽", + "loc.input.label.ConnectedServiceName": "Azure 구독", + "loc.input.help.ConnectedServiceName": "Azure 계정에 연결하는 데 필요합니다.
새 서비스 연결을 구성하려면 목록에서 Azure 구독을 선택하고 '권한 부여'를 클릭합니다.
구독이 목록에 없거나 기존 서비스 주체를 사용하려는 경우 '추가' 또는 '관리' 단추를 사용하여 Azure 서비스 연결을 설정할 수 있습니다.", + "loc.input.label.ServerName": "호스트 이름", + "loc.input.help.ServerName": "'Azure Database for MySQL'의 서버 이름입니다. 예: fabrikam.mysql.database.azure.com. MySQL Workbench를 사용하여 연결하는 경우 '매개 변수'의 'Hostname'에 사용되는 값과 같습니다.", + "loc.input.label.DatabaseName": "데이터베이스 이름", + "loc.input.help.DatabaseName": "아래 스크립트를 실행해야 하는 데이터베이스 이름입니다(이미 있는 경우). 데이터베이스가 없는 경우 스크립트 자체를 사용하여 데이터베이스를 만들 수 있습니다.", + "loc.input.label.SqlUsername": "서버 관리자 로그인", + "loc.input.help.SqlUsername": "Azure Database for MySQL 서버는 네이티브 MySQL 인증을 지원합니다. 서버 관리자 로그인으로 서버에 연결하고 인증할 수 있습니다. 예: bbo1@fabrikam. MySQL Workbench를 사용하여 연결하는 경우 '매개 변수'의 'Username'에 사용되는 값과 같습니다.", + "loc.input.label.SqlPassword": "암호", + "loc.input.help.SqlPassword": "Azure Database for MySQL의 관리자 암호입니다. 암호가 기억나지 않는 경우 [Azure Portal](https://docs.microsoft.com/en-us/azure/mysql/howto-create-manage-server-portal)에서 암호를 변경할 수 있습니다.
파이프라인에서 정의된 변수일 수 있습니다. 예: $(password).
변수 형식을 '비밀'로 표시하여 보호할 수도 있습니다.", + "loc.input.label.TaskNameSelector": "유형", + "loc.input.help.TaskNameSelector": "스크립트 파일과 인라인 스크립트 옵션 중 하나를 선택합니다.", + "loc.input.label.SqlFile": "MySQL 스크립트", + "loc.input.help.SqlFile": "자동화 에이전트 또는 자동화 에이전트가 액세스할 수 있는 UNC 경로에 있는 스크립트 파일의 전체 경로입니다(예: \\\\\\\\BudgetIT\\DeployBuilds\\script.sql). $(agent.releaseDirectory) 등의 미리 정의된 시스템 변수를 여기서 사용할 수도 있습니다. SQL 문이 포함된 파일을 여기서 사용할 수 있습니다.", + "loc.input.label.SqlInline": "인라인 MySQL 스크립트", + "loc.input.help.SqlInline": "위에서 선택한 데이터베이스에 대해 실행할 MySQL 스크립트를 입력합니다.", + "loc.input.label.SqlAdditionalArguments": "MySQL 추가 인수", + "loc.input.help.SqlAdditionalArguments": "MySQL 단순 SQL 셸에서 지원하는 추가 옵션입니다. 이러한 옵션은 Azure Database for MySQL에서 지정된 파일을 실행할 때 적용됩니다.
예: 탭으로 구분된 기본 출력 형식을 HTML 또는 XML 형식으로 변경할 수 있습니다. 또는 대량의 결과 집합에 사용할 메모리가 부족하여 문제가 발생하는 경우 --quick 옵션을 사용합니다.", + "loc.input.label.IpDetectionMethod": "방화벽 규칙 지정 방법", + "loc.input.help.IpDetectionMethod": "작업을 성공적으로 실행하려면 관리자가 자동화 에이전트의 IP 주소에서 Azure Database for MySQL 서버에 액세스할 수 있도록 설정해야 합니다.
자동 검색을 선택하면 자동화 에이전트의 가능한 IP 주소 범위에 적용할 방화벽 예외를 자동으로 추가할 수 있으며, 선택하지 않을 경우 범위를 명시적으로 지정할 수 있습니다.", + "loc.input.label.StartIpAddress": "시작 IP 주소", + "loc.input.help.StartIpAddress": "자동화 에이전트 머신 풀의 시작 IP 주소입니다(예: 196.21.30.50).", + "loc.input.label.EndIpAddress": "끝 IP 주소", + "loc.input.help.EndIpAddress": "자동화 에이전트 머신 풀의 마지막 IP 주소입니다(예: 196.21.30.65).", + "loc.input.label.DeleteFirewallRule": "작업 종료 후 규칙 삭제", + "loc.input.help.DeleteFirewallRule": "선택하면, 해당 Azure Database for MySQL에 대해 추가된 자동화 에이전트의 IP 주소 예외가 제거됩니다.", + "loc.messages.ARGD_ConstructorFailed": "초기화 중 작업에 실패했습니다. 오류: %s.", + "loc.messages.FirewallRuleNameCannotBeEmpty": "방화벽 규칙 이름은 null일 수 없습니다.", + "loc.messages.FirewallAddressRangeCannotBeEmpty": "방화벽 주소는 null일 수 없습니다.", + "loc.messages.StartIpAddressCannotBeEmpty": "방화벽 규칙의 시작 IP 주소는 null일 수 없습니다.", + "loc.messages.EndIpAddressCannotBeEmpty": "방화벽 규칙의 마지막 IP 주소는 null일 수 없습니다.", + "loc.messages.MysqlServerNameCannotBeEmpty": "MySQL 서버 이름은 null일 수 없습니다.", + "loc.messages.MysqlFullyQualifiedServerNameCannotBeEmpty": "MySQL 서버의 정규화된 이름은 null일 수 없습니다.", + "loc.messages.ResourceGroupCannotBeEmpty": "리소스 그룹 이름은 null일 수 없습니다.", + "loc.messages.NotAbleToAddFirewallRule": "MySQL 서버에 방화벽 규칙을 추가하는 중 오류가 발생했습니다. 오류: %s.", + "loc.messages.NotAbleToDeleteFirewallRule": "MySQL 서버에서 방화벽 규칙을 삭제하는 중 오류가 발생했습니다. 오류: %s.", + "loc.messages.AgentIpAddressIsMissingInAddedFirewallRule": "수동으로 추가된 방화벽 규칙에 에이전트 IP 주소가 없습니다.", + "loc.messages.NotAbleToGetAllServers": "구독의 일부 MySQL 서버를 검색하지 못했습니다. 오류: %s.", + "loc.messages.EmptyOrNullServerList": "MySQL 서버 목록이 비어 있습니다. MySQL 서버 호스트 이름이 잘못되었습니다.", + "loc.messages.UnableToFindResourceGroupDueToNullId": "null ID로 인해 리소스 그룹을 찾을 수 없습니다.", + "loc.messages.UnableToFindResourceGroupDueToInvalidId": "잘못된 ID로 인해 리소스 그룹을 찾을 수 없습니다.", + "loc.messages.NotAbleToGetInstalledLocationOfMysqlFromPath": "MySQL 클라이언트가 에이전트 머신에 없습니다.", + "loc.messages.UnableToFindMysqlFromRegistryOnMachineError": "머신의 레지스트리를 사용하여 MySQL을 찾을 수 없습니다.", + "loc.messages.UnableToFindMysqlFromRegistry": "레지스트리를 사용하여 MySQL을 찾을 수 없습니다. 오류: %s.", + "loc.messages.UnableToFindTheLocationOfMysqlFromRegistryOnMachineError": "머신의 레지스트리를 사용하여 MySQL의 위치를 찾을 수 없습니다. 오류: %s.", + "loc.messages.AzureMysqlTaskParameterCannotBeEmpty": "Azure MySQL 작업 매개 변수는 null일 수 없습니다.", + "loc.messages.ToolPathCannotBeNull": "도구 경로는 null일 수 없습니다.", + "loc.messages.SqlExecutionException": "SQL 실행 예외가 발생했습니다. SQL 스크립트를 확인하세요. 오류: %s.", + "loc.messages.AzureEndpointCannotBeNull": "잘못된 구독 이름입니다. Azure 서비스 연결은 null일 수 없습니다.", + "loc.messages.CallbackCannotBeNull": "콜백은 null일 수 없습니다.", + "loc.messages.UnableToCreateDatabaseException": "데이터베이스를 만들 수 없습니다.", + "loc.messages.WindowMysqlClientMissingError": "MySQL 클라이언트가 Windows 에이전트 머신에 없습니다. 에이전트 머신에서 MySQL 클라이언트 설치 관리자 'https://aka.ms/window-mysqlcli-installer' 스크립트 파일을 실행하여 설치하세요.", + "loc.messages.LinuxMysqlClientMissingError": "MySQL 클라이언트가 Linux 에이전트 머신에 없습니다. 'sudo apt-get install mysql-client'를 실행하여 설치하세요.", + "loc.messages.CouldNotFetchAccessTokenforAzureStatusCode": "Azure의 액세스 토큰을 검색할 수 없습니다. 상태 코드: %s. 상태 메시지: %s", + "loc.messages.CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "관리 서비스 주체의 액세스 토큰을 검색할 수 없습니다. 가상 머신의 MSI(관리 서비스 ID)를 구성하세요. 'https://aka.ms/azure-msi-docs'를 참조하세요. 만든 MSI ID에 역할을 할당하세요. 'https://aka.ms/assign-role-msi'를 참조하세요. 상태 코드: %s. 상태 메시지: %s", + "loc.messages.CouldNotFetchAccessTokenforMSIStatusCode": "관리 서비스 주체의 액세스 토큰을 검색할 수 없습니다. 상태 코드: %s. 상태 메시지: %s", + "loc.messages.NotAbleToCreateFirewallRule": "Azure MySQL 서버에 방화벽 규칙을 추가하는 중 오류가 발생했습니다. 오류: %s", + "loc.messages.ExpiredServicePrincipal": "Azure의 액세스 토큰을 페치할 수 없습니다. 사용한 서비스 주체가 유효하고 만료되지 않았는지 확인하세요.", + "loc.messages.Nopackagefoundwithspecifiedpattern": "지정된 패턴의 패키지를 찾을 수 없습니다" +} \ No newline at end of file diff --git a/_generated/AzureMysqlDeploymentV1_Node16/Strings/resources.resjson/ru-RU/resources.resjson b/_generated/AzureMysqlDeploymentV1_Node16/Strings/resources.resjson/ru-RU/resources.resjson new file mode 100644 index 000000000000..36853fd8d2a8 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1_Node16/Strings/resources.resjson/ru-RU/resources.resjson @@ -0,0 +1,68 @@ +{ + "loc.friendlyName": "Развертывание базы данных Azure для MySQL", + "loc.helpMarkDown": "[См. дополнительные сведения об этой задаче](https://aka.ms/mysqlazuredeployreadme)", + "loc.description": "Выполняйте скрипты и вносите изменения в базу данных Azure для MySQL", + "loc.instanceNameFormat": "Выполнить Azure MySQL: $(TaskNameSelector)", + "loc.group.displayName.target": "Сведения о базе данных", + "loc.group.displayName.taskDetails": "Пакет развертывания", + "loc.group.displayName.firewall": "Брандмауэр", + "loc.input.label.ConnectedServiceName": "Подписка Azure", + "loc.input.help.ConnectedServiceName": "Это необходимо для подключения к учетной записи Azure.
Чтобы настроить новое подключение к службе, выберите подписку Azure в списке и щелкните \"Авторизовать\".
Если ваша подписка не указана в списке или вы хотите использовать существующий субъект-службу, можно настроить подключение к службе Azure с помощью кнопки \"Добавить\" или \"Управление\".", + "loc.input.label.ServerName": "Имя узла", + "loc.input.help.ServerName": "Имя сервера \"База данных Azure для MySQL\". Пример: fabrikam.mysql.database.azure.com. При подключении с помощью MySQL Workbench это то же значение, которое используется как \"Имя узла\" в разделе \"Параметры\"", + "loc.input.label.DatabaseName": "Имя базы данных", + "loc.input.help.DatabaseName": "Имя базы данных (при наличии), в которой требуется выполнить указанный ниже скрипт. В противном случае сам скрипт можно использовать для создания базы данных.", + "loc.input.label.SqlUsername": "Имя для входа администратора сервера", + "loc.input.help.SqlUsername": "База данных Azure для сервера MySQL поддерживает собственную проверку подлинности MySQL. Вы можете подключиться и выполнить проверку подлинности на сервере, используя имя для входа администратора этого сервера. Пример: bbo1@fabrikam. При подключении с помощью MySQL Workbench это то же значение, которое используется как \"Имя пользователя\" в разделе \"Параметры\".", + "loc.input.label.SqlPassword": "Пароль", + "loc.input.help.SqlPassword": "Пароль администратора для Базы данных Azure для MySQL. Если вы забыли пароль, его можно сменить на [портале Azure](https://docs.microsoft.com/ru-ru/azure/mysql/howto-create-manage-server-portal).
Это может быть переменная, определенная в конвейере. Пример: $(password).
Кроме того, тип переменной можно пометить как secret, чтобы защитить ее.", + "loc.input.label.TaskNameSelector": "Тип", + "loc.input.help.TaskNameSelector": "Выберите один из вариантов: \"Файл скрипта\" или \"Встроенный скрипт\".", + "loc.input.label.SqlFile": "Скрипт MySQL", + "loc.input.help.SqlFile": "Полный путь к файлу скрипта на компьютере агента автоматизации или UNC-путь, доступный для агента автоматизации, например \\\\\\\\BudgetIT\\DeployBuilds\\script.sql. Кроме того, здесь можно использовать предопределенные системные переменные, например $(agent.releaseDirectory). Здесь можно использовать файл, содержащий инструкции SQL.​", + "loc.input.label.SqlInline": "Встроенный скрипт MySQL", + "loc.input.help.SqlInline": "Введите скрипт MySQL для выполнения в базе данных, выбранной выше.", + "loc.input.label.SqlAdditionalArguments": "Дополнительные аргументы MySQL", + "loc.input.help.SqlAdditionalArguments": "Дополнительные параметры, поддерживаемые простой оболочкой SQL для MySQL. Эти параметры будут применяться при выполнении данного файла в Базе данных Azure для MySQL.​
Пример: вы можете изменить формат вывода на формат по умолчанию с разделением знаками табуляции, на формат HTML или даже XML. Если в случае с большими результирующими наборами возникают проблемы из-за нехватки памяти, используйте параметр --quick.​", + "loc.input.label.IpDetectionMethod": "Указать правила брандмауэра с помощью", + "loc.input.help.IpDetectionMethod": "Для успешного выполнения задачи нам необходимо разрешить администраторам доступ к Базе данных Azure для сервера MySQL с IP-адреса агента автоматизации.
Выбрав автоматическое обнаружение, можно автоматически добавить исключение брандмауэра для диапазона возможных IP-адресов агента автоматизации. Диапазон можно также задать явным образом.", + "loc.input.label.StartIpAddress": "Начальный IP-адрес", + "loc.input.help.StartIpAddress": "Начальный IP-адрес пула компьютеров агента автоматизации, например 196.21.30.50.", + "loc.input.label.EndIpAddress": "Конечный IP-адрес", + "loc.input.help.EndIpAddress": "Последний IP-адрес пула компьютеров агента автоматизации, например 196.21.30.65.", + "loc.input.label.DeleteFirewallRule": "Удалить правило после завершения задачи", + "loc.input.help.DeleteFirewallRule": "При выборе этого параметра исключение, добавленное для IP-адресов агента автоматизации, будет удалено для соответствующей Базы данных Azure для MySQL.", + "loc.messages.ARGD_ConstructorFailed": "Сбой при инициализации задачи. Ошибка: %s.", + "loc.messages.FirewallRuleNameCannotBeEmpty": "Имя правила брандмауэра не может иметь значение NULL.", + "loc.messages.FirewallAddressRangeCannotBeEmpty": "Адрес брандмауэра не может иметь значение NULL.", + "loc.messages.StartIpAddressCannotBeEmpty": "Начальный IP-адрес правила брандмауэра не может иметь значение NULL.", + "loc.messages.EndIpAddressCannotBeEmpty": "Конечный IP-адрес правила брандмауэра не может иметь значение NULL.", + "loc.messages.MysqlServerNameCannotBeEmpty": "Имя сервера MySQL не может иметь значение NULL.", + "loc.messages.MysqlFullyQualifiedServerNameCannotBeEmpty": "Полное имя сервера MySQL не может иметь значение NULL.", + "loc.messages.ResourceGroupCannotBeEmpty": "Имя группы ресурсов не может иметь значение NULL.", + "loc.messages.NotAbleToAddFirewallRule": "Произошла ошибка при добавлении правила брандмауэра на сервер MySQL. Ошибка: %s.", + "loc.messages.NotAbleToDeleteFirewallRule": "Произошла ошибка при удалении правила брандмауэра с сервера MySQL. Ошибка: %s.", + "loc.messages.AgentIpAddressIsMissingInAddedFirewallRule": "IP-адрес агента отсутствует во вручную добавленном правиле брандмауэра.", + "loc.messages.NotAbleToGetAllServers": "Не удалось получить все серверы MySQL из подписки. Ошибка: %s.", + "loc.messages.EmptyOrNullServerList": "Список серверов MySQL пуст. Недопустимое имя узла сервера MySQL.", + "loc.messages.UnableToFindResourceGroupDueToNullId": "Не удалось найти группу ресурсов из-за идентификатора со значением NULL.", + "loc.messages.UnableToFindResourceGroupDueToInvalidId": "Не удалось найти группу ресурсов из-за недопустимого идентификатора.", + "loc.messages.NotAbleToGetInstalledLocationOfMysqlFromPath": "Клиент MySQL отсутствует на компьютере агента.", + "loc.messages.UnableToFindMysqlFromRegistryOnMachineError": "Не удается найти MySQL с помощью реестра на компьютере.", + "loc.messages.UnableToFindMysqlFromRegistry": "Не удается найти MySQL с помощью реестра. Ошибка: %s.", + "loc.messages.UnableToFindTheLocationOfMysqlFromRegistryOnMachineError": "Не удается найти расположение MySQL с помощью реестра на компьютере. Ошибка: %s.", + "loc.messages.AzureMysqlTaskParameterCannotBeEmpty": "Параметр задачи Azure MySQL не может иметь значение NULL.", + "loc.messages.ToolPathCannotBeNull": "Путь к средству не может иметь значение NULL.", + "loc.messages.SqlExecutionException": "При выполнении SQL произошло исключение. Проверьте скрипт SQL. Ошибка: %s.", + "loc.messages.AzureEndpointCannotBeNull": "Недопустимое имя подписки. Подключение к службе Azure не может иметь значение NULL.", + "loc.messages.CallbackCannotBeNull": "Обратный вызов не может иметь значение NULL.", + "loc.messages.UnableToCreateDatabaseException": "Не удается создать базу данных.", + "loc.messages.WindowMysqlClientMissingError": "Клиент MySQL отсутствует на компьютере агента Windows. Установите его, запустив файл скрипта https://aka.ms/window-mysqlcli-installer установщика клиента MySQL на компьютере агента.", + "loc.messages.LinuxMysqlClientMissingError": "Клиент MySQL отсутствует на компьютере агента Linux. Установите его, выполнив команду sudo apt-get install mysql-client.", + "loc.messages.CouldNotFetchAccessTokenforAzureStatusCode": "Не удалось получить маркер доступа для Azure. Код состояния: %s. Сообщение о состоянии: %s", + "loc.messages.CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "Не удалось получить маркер доступа для управляемого субъекта-службы. Настройте Управляемое удостоверение службы (MSI) для виртуальной машины. См. страницу https://aka.ms/azure-msi-docs. Назначьте роль созданному удостоверению MSI. См. страницу https://aka.ms/assign-role-msi. Код состояния: %s. Сообщение о состоянии: %s", + "loc.messages.CouldNotFetchAccessTokenforMSIStatusCode": "Не удалось получить маркер доступа для управляемого субъекта-службы. Код состояния: %s. Сообщение о состоянии: %s", + "loc.messages.NotAbleToCreateFirewallRule": "Сбой при добавлении правила брандмауэра на сервере MySQL Azure. Ошибка: %s", + "loc.messages.ExpiredServicePrincipal": "Не удалось получить маркер доступа для Azure. Убедитесь, что используемый субъект-служба является допустимым, а срок его действия не истек.", + "loc.messages.Nopackagefoundwithspecifiedpattern": "Пакет с указанным шаблоном не найден" +} \ No newline at end of file diff --git a/_generated/AzureMysqlDeploymentV1_Node16/Strings/resources.resjson/zh-CN/resources.resjson b/_generated/AzureMysqlDeploymentV1_Node16/Strings/resources.resjson/zh-CN/resources.resjson new file mode 100644 index 000000000000..ad5b44086f4d --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1_Node16/Strings/resources.resjson/zh-CN/resources.resjson @@ -0,0 +1,68 @@ +{ + "loc.friendlyName": "Azure Database for MySQL 部署", + "loc.helpMarkDown": "[详细了解此任务](https://aka.ms/mysqlazuredeployreadme)", + "loc.description": "运行脚本并对 Azure Database for MySQL 进行更改", + "loc.instanceNameFormat": "执行 Azure SQL: $(TaskNameSelector)", + "loc.group.displayName.target": "DB 详细信息", + "loc.group.displayName.taskDetails": "部署程序包", + "loc.group.displayName.firewall": "防火墙", + "loc.input.label.ConnectedServiceName": "Azure 订阅", + "loc.input.help.ConnectedServiceName": "这是连接到 Azure 帐户所必需的。
要配置新的服务连接,请从列表中选择 Azure 订阅,然后单击“授权”。
如果自己的订阅未列出,或若要使用现有服务主体,可使用“添加”或“管理”按钮设置 Azure 服务连接。", + "loc.input.label.ServerName": "主机名", + "loc.input.help.ServerName": "\"Azure Database for MySQL\" 的服务器名称。例如: fabrikam.mysql.database.azure.com。使用 MySQL 工作台进行连接时,该值与“参数”中的“用户名”所用的值相同", + "loc.input.label.DatabaseName": "数据库名", + "loc.input.help.DatabaseName": "数据库的名称。如果已有数据库,则需要在该数据库上运行以下脚本。否则,可使用脚本本身创建数据库。", + "loc.input.label.SqlUsername": "服务器管理员登录名", + "loc.input.help.SqlUsername": "Azure Database for MySQL 服务器支持本机 MySQL 身份验证。可以使用服务器的管理员登录名连接服务器并向服务器进行身份验证。例如: bbo1@fabrikam。使用 Mysql 工作台连接时,该值与“参数”中的“用户名”使用的值相同。", + "loc.input.label.SqlPassword": "密码", + "loc.input.help.SqlPassword": "Azure Database for MySQL 的管理员密码。如果忘记密码,可以通过[Azure 门户](https://docs.microsoft.com/en-us/azure/mysql/howto-create-manage-server-portal)更改密码。
密码可为管道中定义的变量。示例: $(password)。
此外,还可以将该变量类型标记为“机密”以保护变量。", + "loc.input.label.TaskNameSelector": "类型", + "loc.input.help.TaskNameSelector": "选择“脚本文件”与“内联脚本”中的一个选项。", + "loc.input.label.SqlFile": "MySQL 脚本", + "loc.input.help.SqlFile": "自动化代理上的或可访问自动化代理的 UNC 路径上的脚本文件的完整路径,如 \\\\\\\\\\\\\\\\BudgetIT\\\\DeployBuilds\\\\script.sql。此外,还可在此处使用预定义的系统变量 ,如 $(agent.releaseDirectory)。可在此处使用包含 SQL 语句的文件。", + "loc.input.label.SqlInline": "内联 MySQL 脚本", + "loc.input.help.SqlInline": "输入要在上方所选的数据库上执行的 MySQL 脚本。", + "loc.input.label.SqlAdditionalArguments": "其他 MySQL 参数", + "loc.input.help.SqlAdditionalArguments": "MySQL 简单 SQL shell 支持的其他选项。在 Azure Database for MySQL 上执行给定文件时,将应用这些选项。
示例: 可以将默认选项卡分隔的输出格式更改为 HTML 甚至 XML 格式。或者,如果由于大型结果集的内存不足而出现问题,请使用 --快速选项。", + "loc.input.label.IpDetectionMethod": "使用以下方法指定防火墙规则", + "loc.input.help.IpDetectionMethod": "为了成功执行任务,管理员需能够从自动化代理的 IP 地址访问 Azure Database for MySQL 服务器。
通过选择自动检测,可以自动为可能的自动化代理 IP 地址范围添加防火墙例外,或者可以显式指定范围。", + "loc.input.label.StartIpAddress": "起始 IP 地址", + "loc.input.help.StartIpAddress": "自动化代理计算机池的起始 IP 地址,如 196.21.30.50。", + "loc.input.label.EndIpAddress": "结束 IP 地址", + "loc.input.help.EndIpAddress": "自动化代理计算机池的结束 IP 地址,如 196.21.30.65。", + "loc.input.label.DeleteFirewallRule": "在任务结束后删除规则", + "loc.input.help.DeleteFirewallRule": "如果选中,将为相应的 Azure Database for MySQL 删除添加的自动化代理 IP 地址例外。", + "loc.messages.ARGD_ConstructorFailed": "初始化时任务失败。错误: %s。", + "loc.messages.FirewallRuleNameCannotBeEmpty": "防火墙规则名称不能为 null。", + "loc.messages.FirewallAddressRangeCannotBeEmpty": "防火墙地址不能为 null。", + "loc.messages.StartIpAddressCannotBeEmpty": "防火墙规则的起始 IP 地址不能为 null。", + "loc.messages.EndIpAddressCannotBeEmpty": "防火墙规则的结束 IP 地址不能为 null。", + "loc.messages.MysqlServerNameCannotBeEmpty": "MySQL 服务器名称不能为 null。", + "loc.messages.MysqlFullyQualifiedServerNameCannotBeEmpty": "MySQL 服务器的完全限定名称不能为 null。", + "loc.messages.ResourceGroupCannotBeEmpty": "资源组名称不能为 null。", + "loc.messages.NotAbleToAddFirewallRule": "将防火墙规则添加到 MySQL 服务器时出错。错误: %s。", + "loc.messages.NotAbleToDeleteFirewallRule": "从 MySQL 服务器中删除防火墙规则时出错。错误: %s。", + "loc.messages.AgentIpAddressIsMissingInAddedFirewallRule": "手动添加的防火墙规则中缺少代理 IP 地址。", + "loc.messages.NotAbleToGetAllServers": "无法检索订阅的所有 MySQL 服务器。错误: %s。", + "loc.messages.EmptyOrNullServerList": "MySQL 服务器列表为空。MySQL 服务器主机名无效。", + "loc.messages.UnableToFindResourceGroupDueToNullId": "由于 ID 为 null,无法找到资源组。", + "loc.messages.UnableToFindResourceGroupDueToInvalidId": "由于 ID 无效,无法找到资源组。", + "loc.messages.NotAbleToGetInstalledLocationOfMysqlFromPath": "代理计算机上缺少 MySQL 客户端。", + "loc.messages.UnableToFindMysqlFromRegistryOnMachineError": "无法使用计算机上的注册表找到 MySQL。", + "loc.messages.UnableToFindMysqlFromRegistry": "无法使用注册表找到 MySQL。错误: %s。", + "loc.messages.UnableToFindTheLocationOfMysqlFromRegistryOnMachineError": "无法使用计算机上的注册表找到 MySQL 的位置。错误: %s。", + "loc.messages.AzureMysqlTaskParameterCannotBeEmpty": "Azure MySQL 任务参数不能为 null。", + "loc.messages.ToolPathCannotBeNull": "工具路径不能为 null。", + "loc.messages.SqlExecutionException": "发生 SQL 执行异常。请检查 SQL 脚本。错误: %s。", + "loc.messages.AzureEndpointCannotBeNull": "无效的订阅名称。Azure 服务连接不能为 null。", + "loc.messages.CallbackCannotBeNull": "回调不能为空。", + "loc.messages.UnableToCreateDatabaseException": "无法创建数据库。", + "loc.messages.WindowMysqlClientMissingError": "Windows 代理计算机上缺少 MySQL 客户端。请通过运行代理计算机上的 MySQL 客户端安装程序 \"https://aka.ms/window-mysqlcli-installer\" 脚本文件来安装它。", + "loc.messages.LinuxMysqlClientMissingError": "Linux 代理计算机上缺少 MySQL 客户端。请通过运行 \"sudo apt-get install mysql-client\" 来安装它。", + "loc.messages.CouldNotFetchAccessTokenforAzureStatusCode": "无法检索 Azure 的访问令牌。状态代码: %s。状态消息: %s", + "loc.messages.CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "无法检索托管服务主体的访问令牌。请为虚拟机配置托管服务标识(MSI)。请参阅 \"https://aka.ms/azure-msi-docs\"。向创建的 MSI 标识分配角色。请参阅 \"https://aka.ms/assign-role-msi\"。状态代码: %s。状态消息: %s", + "loc.messages.CouldNotFetchAccessTokenforMSIStatusCode": "无法检索托管服务主体的访问令牌。状态代码: %s。状态消息: %s", + "loc.messages.NotAbleToCreateFirewallRule": "将防火墙规则添加到 Azure MySQL 服务器时出现错误。错误: %s", + "loc.messages.ExpiredServicePrincipal": "无法提取 Azure 的访问令牌。请确保使用的服务主体有效且未过期。", + "loc.messages.Nopackagefoundwithspecifiedpattern": "使用指定模式未找到任何包" +} \ No newline at end of file diff --git a/_generated/AzureMysqlDeploymentV1_Node16/Strings/resources.resjson/zh-TW/resources.resjson b/_generated/AzureMysqlDeploymentV1_Node16/Strings/resources.resjson/zh-TW/resources.resjson new file mode 100644 index 000000000000..06ffd6c52bd1 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1_Node16/Strings/resources.resjson/zh-TW/resources.resjson @@ -0,0 +1,68 @@ +{ + "loc.friendlyName": "適用於 MySQL 的 Azure 資料庫部署", + "loc.helpMarkDown": "[深入了解此工作](https://aka.ms/mysqlazuredeployreadme)", + "loc.description": "執行您的指令碼,並對適用於 MySQL 的 Azure 資料庫進行變更", + "loc.instanceNameFormat": "執行 Azure MySQL: $(TaskNameSelector)", + "loc.group.displayName.target": "DB 詳細資料", + "loc.group.displayName.taskDetails": "部署套件", + "loc.group.displayName.firewall": "防火牆", + "loc.input.label.ConnectedServiceName": "Azure 訂用帳戶", + "loc.input.help.ConnectedServiceName": "這是連線您 Azure 帳戶的必要項目。
若要設定新的服務連線,請從清單中選取 Azure 訂用帳戶,然後按一下 [授權]。
若未列出您的訂用帳戶,或您要使用現有服務主體,可使用 [新增] 或 [管理] 按鈕來設定 Azure 服務連線。", + "loc.input.label.ServerName": "主機名稱", + "loc.input.help.ServerName": "「適用於 MySQL 的 Azure 資料庫」的伺服器名稱。範例: fabrikam.mysql.database.azure.com。當您使用 MySQL Workbench 進行連線時,其會與為 'Parameters' 中 'Hostname' 使用的值相同", + "loc.input.label.DatabaseName": "資料庫名稱", + "loc.input.help.DatabaseName": "下列指令碼必須執行對象的資料庫名稱 (如已有資料庫); 若無,則指令碼本身可用以建立資料庫。", + "loc.input.label.SqlUsername": "伺服器管理員登入", + "loc.input.help.SqlUsername": "適用於 MySQL 的 Azure 資料庫伺服器支援原生 MySQL 驗證。您可使用伺服器的系統管理員登入對伺服器進行連線與驗證。例如: bbo1@fabrikam。當您使用 MySQL Workbench 連線時,這與在 'Parameters' 中為 'Username' 使用的值相同。", + "loc.input.label.SqlPassword": "密碼", + "loc.input.help.SqlPassword": "適用於 MySQL 的 Azure 資料庫系統管理員密碼。若您忘記密碼,可從 [Azure 入口網站](https://docs.microsoft.com/zh-tw/azure/mysql/howto-create-manage-server-portal) 變更。
其可在管線中以變數定義。例如: $(password)。
您也可將變數類型標示為 'secret' 予以保護。", + "loc.input.label.TaskNameSelector": "類型", + "loc.input.help.TaskNameSelector": "在 [指令檔] 和 [內嵌指令碼] 兩個選項中擇一選取。", + "loc.input.label.SqlFile": "MySQL 指令碼", + "loc.input.help.SqlFile": "自動化代理程式或自動化代理程式可存取之 UNC 路徑上的指令檔完整路徑,例如 \\\\\\\\BudgetIT\\DeployBuilds\\script.sql。此外,$(agent.releaseDirectory) 等預先定義的系統變數,以及包含 SQL 陳述式的檔案也可在此使用。", + "loc.input.label.SqlInline": "內嵌 MySQL 指令碼", + "loc.input.help.SqlInline": "輸入要對以上所選資料庫執行的 MySQL 指令碼。", + "loc.input.label.SqlAdditionalArguments": "其他 MySQL 引數", + "loc.input.help.SqlAdditionalArguments": "MySQL 簡易 SQL 殼層支援的其他選項。在適用於 MySQL 的 Azure 資料庫上執行指定檔案時,將會套用這些選項。
範例: 您可以將預設定位字元分隔輸出格式變更為 HTML 或甚至 XML 格式。如果您因結果集太大但記憶體不足而發生問題,請使用 --quick 選項。", + "loc.input.label.IpDetectionMethod": "使用下列項目指定防火牆規則:", + "loc.input.help.IpDetectionMethod": "為了成功執行工作,我們必須允許系統管理員從自動化代理程式的 IP 位址存取適用於 MySQL 的 Azure 資料庫。
選取自動偵測,即可自動為可能的自動化代理程式 IP 位址範圍新增防火牆例外,或者您可以明確指定範圍。", + "loc.input.label.StartIpAddress": "起始 IP 位址", + "loc.input.help.StartIpAddress": "自動化代理程式電腦集區的開始 IP 位址,例如 196.21.30.50。", + "loc.input.label.EndIpAddress": "結束 IP 位址", + "loc.input.help.EndIpAddress": "自動化代理程式電腦集區的結束 IP 位址,例如 196.21.30.65。", + "loc.input.label.DeleteFirewallRule": "工作結束後刪除規則", + "loc.input.help.DeleteFirewallRule": "若選取,新增的自動化代理程式 IP 位址例外就會依據對應適用於 MySQL 的 Azure 資料庫而移除。", + "loc.messages.ARGD_ConstructorFailed": "初始化時工作失敗。錯誤: %s。", + "loc.messages.FirewallRuleNameCannotBeEmpty": "防火牆規則名稱不得為 null。", + "loc.messages.FirewallAddressRangeCannotBeEmpty": "防火牆位址不得為 null。", + "loc.messages.StartIpAddressCannotBeEmpty": "防火牆規則的開始 IP 位址不得為 null。", + "loc.messages.EndIpAddressCannotBeEmpty": "防火牆規則的結束 IP 位址不得為 null。", + "loc.messages.MysqlServerNameCannotBeEmpty": "MySQL 伺服器名稱不可為 null。", + "loc.messages.MysqlFullyQualifiedServerNameCannotBeEmpty": "MySQL 伺服器完整名稱不得為 null。", + "loc.messages.ResourceGroupCannotBeEmpty": "資源群組名稱不得為 null。", + "loc.messages.NotAbleToAddFirewallRule": "將防火牆規則新增至 MySQL 伺服器時發生錯誤。錯誤: %s。", + "loc.messages.NotAbleToDeleteFirewallRule": "從 MySQL 伺服器刪除防火牆規則時發生錯誤。錯誤: %s。", + "loc.messages.AgentIpAddressIsMissingInAddedFirewallRule": "手動新增的防火牆規則中缺少代理程式 IP 位址。", + "loc.messages.NotAbleToGetAllServers": "無法擷取訂用帳戶的所有 MySQL 伺服器。錯誤: %s 。", + "loc.messages.EmptyOrNullServerList": "MySQL 伺服器清單是空的。MySQL 伺服器主機名稱無效。", + "loc.messages.UnableToFindResourceGroupDueToNullId": "因為識別碼為 null 所以找不到資源群組。", + "loc.messages.UnableToFindResourceGroupDueToInvalidId": "因為識別碼無效所以找不到資源群組。", + "loc.messages.NotAbleToGetInstalledLocationOfMysqlFromPath": "代理程式機器上缺少 MySQL 用戶端。", + "loc.messages.UnableToFindMysqlFromRegistryOnMachineError": "使用機器上的登錄找不到 MySQL。", + "loc.messages.UnableToFindMysqlFromRegistry": "使用登錄找不到 MySQL。錯誤: %s。", + "loc.messages.UnableToFindTheLocationOfMysqlFromRegistryOnMachineError": "使用機器上的登錄找不到 MySQL 的位置。錯誤: %s。", + "loc.messages.AzureMysqlTaskParameterCannotBeEmpty": "Azure MySQL 工作參數不得為 null。", + "loc.messages.ToolPathCannotBeNull": "工具路徑不可為 null。", + "loc.messages.SqlExecutionException": "發生 SQL 執行例外狀況。請檢查 SQL 指令碼。錯誤: %s。", + "loc.messages.AzureEndpointCannotBeNull": "訂用帳戶名稱無效。Azure 服務連線不可為 null。", + "loc.messages.CallbackCannotBeNull": "回呼不得為 null。", + "loc.messages.UnableToCreateDatabaseException": "無法建立資料庫。", + "loc.messages.WindowMysqlClientMissingError": "Windows 代理程式機器上缺少 MySQL 用戶端。請在代理程式機器上執行 MySQL 用戶端安裝程式 'https://aka.ms/window-mysqlcli-installer' 指令檔來加以安裝。", + "loc.messages.LinuxMysqlClientMissingError": "Linux 代理程式機器上缺少 MySQL 用戶端。請執行 'sudo apt-get install mysql-client' 加以安裝。", + "loc.messages.CouldNotFetchAccessTokenforAzureStatusCode": "無法擷取 Azure 的存取權杖。狀態碼: %s。狀態訊息: %s", + "loc.messages.CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "無法擷取受控服務主體的存取權杖。請設定虛擬機器的受控服務識別 (MSI)。請參閱 'https://aka.ms/azure-msi-docs'。將角色指派至建立的 MSI 身分識別。請參閱 'https://aka.ms/assign-role-msi'。狀態碼: %s。狀態訊息: %s", + "loc.messages.CouldNotFetchAccessTokenforMSIStatusCode": "無法擷取受控服務主體的存取權杖。狀態碼: %s。狀態訊息: %s", + "loc.messages.NotAbleToCreateFirewallRule": "將防火牆規則新增至 Azure mysql 伺服器時得到錯誤。錯誤: %s", + "loc.messages.ExpiredServicePrincipal": "無法擷取 Azure 的存取權杖。請驗證使用的服務主體是否有效且未過期。", + "loc.messages.Nopackagefoundwithspecifiedpattern": "找不到具指定模式的套件" +} \ No newline at end of file diff --git a/_generated/AzureMysqlDeploymentV1_Node16/Tests/FirewallOperationTests.ts b/_generated/AzureMysqlDeploymentV1_Node16/Tests/FirewallOperationTests.ts new file mode 100644 index 000000000000..aa8b8fb3a24b --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1_Node16/Tests/FirewallOperationTests.ts @@ -0,0 +1,47 @@ +import tl = require('azure-pipelines-task-lib'); +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import * as path from 'path'; +import { MysqlClient } from '../sql/MysqlClient'; +import { FirewallConfiguration } from '../models/FirewallConfiguration'; + +export class FirewallOperationTests { + + public static startFirewallOperationL0Tests(){ + let tp = path.join(__dirname, 'FirewallOperationsL0Tests.js'); + let tr : tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); + process.env["RELEASE_RELEASEID"] = "MOCK_RELEASE_ID"; + process.env["BUILD_BUILDID"] ="MOCK_BUILD_ID"; + tr.setInput('IpDetectionMethod', 'IPAddressRange') + tr.setInput('IpDetectionMethod', 'IPAddressRange'); + tr.setInput('ServerName', 'MOCK_SERVER_NAME'); + tr.setInput('StartIpAddress', '0.0.0.0'); + tr.setInput("EndIpAddress", "2 55.255.255.255"); + tr.setInput("IpDetectionMethod", "IPAddressRange"); + tr.setInput("ConnectedServiceName", "DEMO_CONNECTED_SERVICE_NAME"); + tr.setInput("SqlUsername", "DEMO_SQL_USERNAME"); + tr.setInput("SqlPassword","DEMO_SQL_PASSWORD"); + tr.setInput("TaskNameSelector", "SqlFile"); + Date.now = function (): number { + return 12345; + } + tr.registerMock("../sql/MysqlClient", { + MysqlClient: function(A,B){ + return { + getFirewallConfiguration : function() { + let firewallConfiguration: FirewallConfiguration = new FirewallConfiguration(true); + return firewallConfiguration; + }, + executeSqlCommand : function(){ + return 0; + } + } + } + }); + + tr.run(); + } + + +} + +FirewallOperationTests.startFirewallOperationL0Tests(); diff --git a/_generated/AzureMysqlDeploymentV1_Node16/Tests/FirewallOperationsL0Tests.ts b/_generated/AzureMysqlDeploymentV1_Node16/Tests/FirewallOperationsL0Tests.ts new file mode 100644 index 000000000000..9df1e7fce4f4 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1_Node16/Tests/FirewallOperationsL0Tests.ts @@ -0,0 +1,50 @@ +import { getMockEndpoint, nock, getMockFirewallRules } from './mock_utils'; +import * as querystring from 'querystring'; +import tl = require('azure-pipelines-task-lib'); +import { FirewallOperations } from '../operations/FirewallOperations'; +import { FirewallRule, FirewallAddressRange } from '../models/Firewall'; +import { AzureMysqlTaskParameter } from '../models/AzureMysqlTaskParameter'; +import { MysqlClient } from '../sql/MysqlClient'; +import { ISqlClient } from '../sql/ISqlClient'; +import { MysqlServer } from '../models/MysqlServer'; +var endpoint = getMockEndpoint(); +getMockFirewallRules(); + +export class FirewallOperationsL0Tests { + + public static firewallOperations: FirewallOperations = new FirewallOperations(endpoint.applicationTokenCredentials, endpoint.subscriptionID); + public static firewallRule: FirewallRule = new FirewallRule("MOCK_FIREWALL_RULE_NAME", new FirewallAddressRange("0.0.0.0", "255.255.255.255")); + + public static async testFirewallOperations() { + await FirewallOperationsL0Tests.addFirewallRuleTest(); + await FirewallOperationsL0Tests.deleteFirewallRuleTest(); + } + + public static async addFirewallRuleTest(){ + try{ + const azureMysqlTaskParameter: AzureMysqlTaskParameter = new AzureMysqlTaskParameter(); + const sqlClient: ISqlClient = new MysqlClient(azureMysqlTaskParameter, "MOCK_SERVER_NAME.test-vm1.onebox.xdb.mscds.com", "MOCK_MYSQL_CLIENT_PATH"); + const mysqlServer: MysqlServer = new MysqlServer("MOCK_SERVER_NAME", "MOCK_SERVER_NAME.test-vm1.onebox.xdb.mscds.com", "MOCK_RESOURCE_GROUP_NAME"); + const response = await FirewallOperationsL0Tests.firewallOperations.invokeFirewallOperations(azureMysqlTaskParameter, sqlClient, mysqlServer); + if(response){ + tl.setResult(tl.TaskResult.Succeeded, 'FirewallOperationsL0Tests.addFirewallRuleTest should have succeeded.'); + }else{ + tl.setResult(tl.TaskResult.Failed, 'FirewallOperationsL0Tests.addFirewallRuleTest should have succeeded but failed.'); + } + }catch(error){ + tl.setResult(tl.TaskResult.Failed, 'FirewallOperationsL0Tests.addFirewallRuleTest should have succeeded but failed.'); + } + } + + public static async deleteFirewallRuleTest(){ + try{ + await FirewallOperationsL0Tests.firewallOperations.deleteFirewallRule("MOCK_SERVER_NAME", "MOCK_RESOURCE_GROUP_NAME"); + tl.setResult(tl.TaskResult.Succeeded, 'FirewallOperationsL0Tests.deleteFirewallRuleTest should have succeeded.'); + }catch(error){ + tl.setResult(tl.TaskResult.Failed, 'FirewallOperationsL0Tests.deleteFirewallRuleTest should have succeeded but failed.'); + } + } + +} + +FirewallOperationsL0Tests.testFirewallOperations(); diff --git a/_generated/AzureMysqlDeploymentV1_Node16/Tests/L0.ts b/_generated/AzureMysqlDeploymentV1_Node16/Tests/L0.ts new file mode 100644 index 000000000000..f3412c122340 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1_Node16/Tests/L0.ts @@ -0,0 +1,70 @@ +import * as assert from 'assert'; +import * as ttm from 'azure-pipelines-task-lib/mock-test'; +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import tl = require('azure-pipelines-task-lib'); +import * as path from 'path'; +import { MysqlClient } from '../sql/MysqlClient'; +import { FirewallConfiguration } from '../models/FirewallConfiguration'; + +describe('AzureMySqlDeployment Suite', function() { + + this.timeout(60000); + + it('AzureMySqlDeployment MysqlServerOperationsL0Tests', (done: MochaDone) => { + let tp = path.join(__dirname, 'MysqlServerOperationsL0Tests.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + try { + tr.run(); + assert(tr.stdOutContained('MysqlServerOperationsTests.MysqlServerFromServerName should has passed.') , 'Should have printed: MysqlServerOperationsTests.MysqlServerFromServerName should has passed.'); + assert(tr.stdOutContained('MysqlServerOperationsTests.MysqlServerFromServerName should have failed due to without id in mysql server.') , 'Should have printed: MysqlServerOperationsTests.MysqlServerFromServerName should have failed due to without id in mysql server.'); + assert(tr.stdOutContained('MysqlServerOperationsTests.MysqlServerFromServerName should have failed due to invalid id in mysql server.') , 'Should have printed: MysqlServerOperationsTests.MysqlServerFromServerName should have failed due to invalid id in mysql server.'); + assert(tr.stdOutContained('MysqlServerOperationsTests.MysqlServerFromServerName should have failed due to invalid mysql server name.') , 'Should have printed: MysqlServerOperationsTests.MysqlServerFromServerName should have failed due to invalid mysql server name.'); + done(); + } + catch(error) { + done(error); + } + }); + + it('AzureMySqlDeployment FirewallOperationTests', (done: MochaDone) => { + let tp = path.join(__dirname, 'FirewallOperationTests.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + try { + tr.run(); + assert(tr.stdOutContained('FirewallOperationsL0Tests.addFirewallRuleTest should have succeeded.'), 'Should have printed: FirewallOperationsL0Tests.addFirewallRuleTest should have succeeded.'); + assert(tr.stdOutContained('FirewallOperationsL0Tests.deleteFirewallRuleTest should have succeeded.'), 'Should have printed: FirewallOperationsL0Tests.deleteFirewallRuleTest should have succeeded.'); + done(); + } + catch(error) { + done(error); + } + }); + + it('AzureMySqlDeployment ToolPathOperationTests', (done: MochaDone) => { + let tp = path.join(__dirname, 'ToolPathOperationTests.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + try { + tr.run(); + assert(tr.stdOutContained('ToolPathOperationsL0Tests.getInstalledPathOfMysqlForLinux should has passed.'), 'Should have printed: ToolPathOperationsL0Tests.getInstalledPathOfMysqlForLinux should has passed.'); + done(); + } + catch(error) { + done(error); + } + }); + + it('AzureMySqlDeployment MysqlClient', (done: MochaDone) => { + let tp = path.join(__dirname, 'MysqlClientTests.js'); + let tr : ttm.MockTestRunner = new ttm.MockTestRunner(tp); + try { + tr.run(); + assert(tr.stdOutContained('MysqlClientL0Tests.getFirewallConfiguration should has passed.'), 'Should have printed: MysqlClientL0Tests.getFirewallConfiguration should has passed.'); + assert(tr.stdOutContained('MysqlClientL0Tests.executeSqlCommand should has passed'), 'Should have printed: MysqlClientL0Tests.executeSqlCommand should has passed.'); + done(); + } + catch(error) { + done(error); + } + }); + +}); diff --git a/_generated/AzureMysqlDeploymentV1_Node16/Tests/MysqlClientL0Tests.ts b/_generated/AzureMysqlDeploymentV1_Node16/Tests/MysqlClientL0Tests.ts new file mode 100644 index 000000000000..5765f428cbd7 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1_Node16/Tests/MysqlClientL0Tests.ts @@ -0,0 +1,45 @@ +import tl = require('azure-pipelines-task-lib'); +import { ISqlClient } from '../sql/ISqlClient'; +import { MysqlClient } from '../sql/MysqlClient'; +import { FirewallConfiguration } from '../models/FirewallConfiguration'; +import { AzureMysqlTaskParameter } from '../models/AzureMysqlTaskParameter'; + +export class MysqlClientL0Tests { + + public static azureMysqlTaskParameter: AzureMysqlTaskParameter = new AzureMysqlTaskParameter(); + public static sqlClient: ISqlClient = new MysqlClient(MysqlClientL0Tests.azureMysqlTaskParameter, "DEMO_MYSQL_SERVER", "/usr/local/bin/mysql"); + + public static async startL0Tests() { + await MysqlClientL0Tests.getFirewallConfiguration(); + await MysqlClientL0Tests.executeSqlCommand(); + } + + public static async getFirewallConfiguration(){ + try{ + const firewallConfiguration: FirewallConfiguration = await MysqlClientL0Tests.sqlClient.getFirewallConfiguration(); + if(!firewallConfiguration.isIpAdressAlreadyAdded() && firewallConfiguration.getIpAddress() == '250.250.250.250'){ + tl.setResult(tl.TaskResult.Succeeded, 'MysqlClientL0Tests.getFirewallConfiguration should has passed.'); + }else{ + tl.setResult(tl.TaskResult.Failed, 'MysqlClientL0Tests.getFirewallConfiguration should has passed but failed.'); + } + }catch(error){ + tl.setResult(tl.TaskResult.Failed, 'MysqlClientL0Tests.getFirewallConfiguration should has passed but failed due to error.'); + } + } + + public static async executeSqlCommand(){ + try{ + const response: number = await MysqlClientL0Tests.sqlClient.executeSqlCommand(); + if(response == 0){ + tl.setResult(tl.TaskResult.Succeeded, 'MysqlClientL0Tests.executeSqlCommand should has passed.'); + }else{ + tl.setResult(tl.TaskResult.Failed, 'MysqlClientL0Tests.executeSqlCommand should has passed but failed.'); + } + }catch(error){ + tl.setResult(tl.TaskResult.Failed, 'MysqlClientL0Tests.executeSqlCommand should has passed but failed due to error.'); + } + } + +} + +MysqlClientL0Tests.startL0Tests(); diff --git a/_generated/AzureMysqlDeploymentV1_Node16/Tests/MysqlClientTests.ts b/_generated/AzureMysqlDeploymentV1_Node16/Tests/MysqlClientTests.ts new file mode 100644 index 000000000000..0f6a7a479ad1 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1_Node16/Tests/MysqlClientTests.ts @@ -0,0 +1,47 @@ +import tl = require('azure-pipelines-task-lib'); +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import ma = require('azure-pipelines-task-lib/mock-answer'); +import * as path from 'path'; + +export class MysqlClientTests { + + public static startMysqlClientL0Tests(){ + let tp = path.join(__dirname, 'MysqlClientL0Tests.js'); + let tr : tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); + tr.setInput('IpDetectionMethod', 'IPAddressRange') + tr.setInput('IpDetectionMethod', 'IPAddressRange'); + tr.setInput('ServerName', 'MOCK_SERVER_NAME'); + tr.setInput('StartIpAddress', '0.0.0.0'); + tr.setInput("EndIpAddress", "2 55.255.255.255"); + tr.setInput("IpDetectionMethod", "IPAddressRange"); + tr.setInput("ConnectedServiceName", "DEMO_CONNECTED_SERVICE_NAME"); + tr.setInput("SqlUsername", "DEMO_SQL_USERNAME"); + tr.setInput("SqlPassword","DEMO_SQL_PASSWORD"); + tr.setInput("TaskNameSelector", "SqlFile"); + // provide answers for task mock + let a: ma.TaskLibAnswers = { + "which": { + "/usr/local/bin/mysql" : "/usr/local/bin/mysql" + }, + "checkPath": { + "/usr/local/bin/mysql": true + }, + "exec": { + "/usr/local/bin/mysql -hDEMO_MYSQL_SERVER -uDEMO_SQL_USERNAME -pDEMO_SQL_PASSWORD" : { + "code": 1, + "stderr": "ERROR 9000 (HY000): Client with IP address '250.250.250.250' is not allowed to connect to this MySQL server." + }, + '/usr/local/bin/mysql -hDEMO_MYSQL_SERVER -uDEMO_SQL_USERNAME -pDEMO_SQL_PASSWORD -e" source null"' : { + "code": 0, + "stderr": "=executed successfully." + } + + } + }; + tr.setAnswers(a); + tr.run(); + } + +} + +MysqlClientTests.startMysqlClientL0Tests(); diff --git a/_generated/AzureMysqlDeploymentV1_Node16/Tests/MysqlServerOperationsL0Tests.ts b/_generated/AzureMysqlDeploymentV1_Node16/Tests/MysqlServerOperationsL0Tests.ts new file mode 100644 index 000000000000..865e798cca62 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1_Node16/Tests/MysqlServerOperationsL0Tests.ts @@ -0,0 +1,67 @@ +import { getMockEndpoint, nock, getMockMysqlServers } from './mock_utils'; +import * as querystring from 'querystring'; +import tl = require('azure-pipelines-task-lib'); +import { MysqlServerOperations } from '../operations/MysqlServerOperations'; +import { MysqlServer } from '../models/MysqlServer'; +var endpoint = getMockEndpoint(); +getMockMysqlServers(); + +export class MysqlServerOperationsL0Tests { + + public static mysqlServerOperations: MysqlServerOperations = new MysqlServerOperations(endpoint.applicationTokenCredentials, endpoint.subscriptionID); + + public static async getMysqlServerFromServerName() { + await MysqlServerOperationsL0Tests.testForCorrectId(); + await MysqlServerOperationsL0Tests.testWithoutId(); + await MysqlServerOperationsL0Tests.testForInvalidId(); + await MysqlServerOperationsL0Tests.testForNotFound(); + } + + public static async testForCorrectId(){ + try{ + const mysqlServer: MysqlServer = await MysqlServerOperationsL0Tests.getServerDeatils("testserver.test-vm1.onebox.xdb.mscds.com"); + tl.setResult(tl.TaskResult.Succeeded, 'MysqlServerOperationsTests.MysqlServerFromServerName should has passed.'); + }catch(error){ + tl.setResult(tl.TaskResult.Failed, 'MysqlServerOperationsTests.MysqlServerFromServerName should have passed but failed.'); + } + } + + public static async testWithoutId(){ + try{ + const mysqlServer: MysqlServer = await MysqlServerOperationsL0Tests.getServerDeatils("serverWithoutId.test-vm1.onebox.xdb.mscds.com"); + tl.setResult(tl.TaskResult.Succeeded, 'MysqlServerOperationsTests.MysqlServerFromServerName should have failed due to without id in mysql server but passed .'); + }catch(error){ + tl.setResult(tl.TaskResult.Failed, 'MysqlServerOperationsTests.MysqlServerFromServerName should have failed due to without id in mysql server.'); + } + } + + public static async testForInvalidId(){ + try{ + const mysqlServer: MysqlServer = await MysqlServerOperationsL0Tests.getServerDeatils("serverWithInvalidId.test-vm1.onebox.xdb.mscds.com"); + tl.setResult(tl.TaskResult.Succeeded, 'MysqlServerOperationsTests.MysqlServerFromServerName should have failed due to invalid id in mysql server but passed.'); + }catch(error){ + tl.setResult(tl.TaskResult.Failed, 'MysqlServerOperationsTests.MysqlServerFromServerName should have failed due to invalid id in mysql server.'); + } + } + + public static async testForNotFound(){ + try{ + const mysqlServer: MysqlServer = await MysqlServerOperationsL0Tests.getServerDeatils("serverNotFound.test-vm1.onebox.xdb.mscds.com"); + if(mysqlServer){ + tl.setResult(tl.TaskResult.Succeeded, 'MysqlServerOperationsTests.MysqlServerFromServerName should have failed due to invalid mysql server name but passed.'); + }else{ + tl.setResult(tl.TaskResult.Failed, 'MysqlServerOperationsTests.MysqlServerFromServerName should have failed due to invalid mysql server name.'); + } + }catch(error){ + tl.setResult(tl.TaskResult.Failed, 'MysqlServerOperationsTests.MysqlServerFromServerName should have failed due to invalid mysql server name.'); + } + } + + public static async getServerDeatils(serverName: string){ + const mysqlServer: MysqlServer = await MysqlServerOperationsL0Tests.mysqlServerOperations.getMysqlServerFromServerName(serverName); + return mysqlServer; + } + +} + +MysqlServerOperationsL0Tests.getMysqlServerFromServerName(); diff --git a/_generated/AzureMysqlDeploymentV1_Node16/Tests/ToolPathOperationTests.ts b/_generated/AzureMysqlDeploymentV1_Node16/Tests/ToolPathOperationTests.ts new file mode 100644 index 000000000000..b5f2c73b6318 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1_Node16/Tests/ToolPathOperationTests.ts @@ -0,0 +1,27 @@ +import tl = require('azure-pipelines-task-lib'); +import tmrm = require('azure-pipelines-task-lib/mock-run'); +import ma = require('azure-pipelines-task-lib/mock-answer'); +import * as path from 'path'; +import { ToolPathOperations } from '../operations/ToolPathOperations'; + +export class ToolPathOperationTests { + + public static startToolPathOperationL0Tests(){ + let tp = path.join(__dirname, 'ToolPathOperationsL0Tests.js'); + let tr : tmrm.TaskMockRunner = new tmrm.TaskMockRunner(tp); + // provide answers for task mock + let a: ma.TaskLibAnswers = { + "which": { + "mysql": "/bin/mysql" + }, + "checkPath": { + "/bin/mysql": true + } + }; + tr.setAnswers(a); + tr.run(); + } + +} + +ToolPathOperationTests.startToolPathOperationL0Tests(); diff --git a/_generated/AzureMysqlDeploymentV1_Node16/Tests/ToolPathOperationsL0Tests.ts b/_generated/AzureMysqlDeploymentV1_Node16/Tests/ToolPathOperationsL0Tests.ts new file mode 100644 index 000000000000..b0258470b0f5 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1_Node16/Tests/ToolPathOperationsL0Tests.ts @@ -0,0 +1,28 @@ +import tl = require('azure-pipelines-task-lib'); +import { ToolPathOperations } from '../operations/ToolPathOperations'; + +export class ToolPathOperationsL0Tests { + + public static toolPathOperations: ToolPathOperations = new ToolPathOperations(); + + public static async startToolPathOperationsL0Tests() { + await ToolPathOperationsL0Tests.getInstalledPathOfMysqlForLinux(); + } + + public static async getInstalledPathOfMysqlForLinux(){ + try{ + const mysqlPath: string = await ToolPathOperationsL0Tests.toolPathOperations.getInstalledPathOfMysqlForLinux(); + console.log(" mysql path"+ mysqlPath); + if(mysqlPath && mysqlPath == '/bin/mysql'){ + tl.setResult(tl.TaskResult.Succeeded, 'ToolPathOperationsL0Tests.getInstalledPathOfMysqlForLinux should has passed.'); + }else{ + tl.setResult(tl.TaskResult.Failed, 'ToolPathOperationsL0Tests.getInstalledPathOfMysqlForLinux should has passed but failed.'); + } + }catch(error){ + tl.setResult(tl.TaskResult.Failed, 'ToolPathOperationsL0Tests.getInstalledPathOfMysqlForLinux should has passed but failed due to error.'); + } + } + +} + +ToolPathOperationsL0Tests.startToolPathOperationsL0Tests(); \ No newline at end of file diff --git a/_generated/AzureMysqlDeploymentV1_Node16/Tests/mock_utils.ts b/_generated/AzureMysqlDeploymentV1_Node16/Tests/mock_utils.ts new file mode 100644 index 000000000000..1c9a1506a66a --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1_Node16/Tests/mock_utils.ts @@ -0,0 +1,98 @@ +import { AzureEndpoint } from 'azure-pipelines-tasks-azure-arm-rest/azureModels'; +import * as querystring from "querystring"; +import { ApplicationTokenCredentials } from 'azure-pipelines-tasks-azure-arm-rest/azure-arm-common'; +export var nock = require('nock'); +import { FirewallRule, FirewallAddressRange } from '../models/Firewall'; + +export function getMockEndpoint() { + process.env["AZURE_HTTP_USER_AGENT"] = "TEST_AGENT"; + var endpoint: AzureEndpoint = { + activeDirectoryAuthority: "https://login.windows.net/", + environment: "AzureCloud", + servicePrincipalClientID: "MOCK_SPN_ID", + servicePrincipalKey: "MOCK_SPN_KEY", + subscriptionID: "MOCK_SUBSCRIPTION_ID", + subscriptionName: "MOCK_SUBSCRIPTION_NAME", + tenantID: "MOCK_TENANT_ID", + url: "https://management.azure.com/", + environmentAuthorityUrl: "https://login.windows.net/", + activeDirectoryResourceID: "https://management.azure.com/", + applicationTokenCredentials: new ApplicationTokenCredentials("MOCK_SERVICE_CONNECTION", "MOCK_SPN_ID", "MOCK_TENANT_ID", "MOCK_SPN_KEY", "https://management.azure.com/", + "https://login.windows.net/", "https://management.azure.com/", false) + } + + nock("https://login.windows.net", { + reqheaders: { + "content-type": "application/x-www-form-urlencoded; charset=utf-8" + } + }) + .post("/MOCK_TENANT_ID/oauth2/token/", querystring.stringify({ + resource: "https://management.azure.com/", + client_id: "MOCK_SPN_ID", + grant_type: "client_credentials", + client_secret: "MOCK_SPN_KEY" + })) + .reply(200, { + access_token: "DUMMY_ACCESS_TOKEN" + }).persist(); + + return endpoint; +} + +export function getMockMysqlServers() { + nock('https://management.azure.com', { + reqheaders: { + "authorization": "Bearer DUMMY_ACCESS_TOKEN", + "content-type": "application/json; charset=utf-8" + } + }).get("/subscriptions/MOCK_SUBSCRIPTION_ID/providers/Microsoft.DBforMySQL/servers?api-version=2017-12-01") + .reply(200, { + value: [{ + "id": "/subscriptions/ffffffff-ffff-ffff-ffff-ffffffffffff/resourceGroups/TestGroup/providers/Microsoft.DBforMySQL/servers/testserver", + "name": "testserver", + "properties": { + "fullyQualifiedDomainName": "testserver.test-vm1.onebox.xdb.mscds.com" + } + }, + { + "name": "serverWithoutId", + "properties": { + "fullyQualifiedDomainName": "serverWithoutId.test-vm1.onebox.xdb.mscds.com" + } + }, + { + "id": "/subscriptions/ffffffff-ffff-ffff-ffff-ffffffffffff/NotResourceGroup/TestGroup/providers/Microsoft.DBforMySQL/servers/serverWithInvalidId", + "name": "serverWithInvalidId", + "properties": { + "fullyQualifiedDomainName": "serverWithInvalidId.test-vm1.onebox.xdb.mscds.com" + } + }]}).persist(); +} + + +export function getMockFirewallRules(){ + nock('https://management.azure.com', { + reqheaders: { + "authorization": "Bearer DUMMY_ACCESS_TOKEN", + "content-type": "application/json; charset=utf-8" + } + }).put("/subscriptions/MOCK_SUBSCRIPTION_ID/resourceGroups/MOCK_RESOURCE_GROUP_NAME/providers/Microsoft.DBforMySQL/servers/MOCK_SERVER_NAME/firewallRules/IPAddressRange_MOCK_RELEASE_ID12345?api-version=2017-12-01").reply(201, { + "id": "/subscriptions/MOCK_SUBSCRIPTION_ID/resourceGroups/MOCK_RESOURCE_GROUP_NAME/providers/Microsoft.DBforMySQL/servers/MOCK_SERVER_NAME/firewallRules/IPAddressRange_MOCKID", + "name": "rule1", + "type": "Microsoft.DBforMySQL/servers/firewallRules", + "properties": { + "startIpAddress": "0.0.0.0", + "endIpAddress": "255.255.255.255" + } + }).persist(); + + nock('https://management.azure.com', { + reqheaders: { + "authorization": "Bearer DUMMY_ACCESS_TOKEN", + "content-type": "application/json; charset=utf-8" + } + }) + .delete("/subscriptions/MOCK_SUBSCRIPTION_ID/resourceGroups/MOCK_RESOURCE_GROUP_NAME/providers/Microsoft.DBforMySQL/servers/MOCK_SERVER_NAME/firewallRules/IPAddressRange_MOCK_RELEASE_ID12345?api-version=2017-12-01") + .reply(200).persist(); + +} diff --git a/_generated/AzureMysqlDeploymentV1_Node16/Tests/package-lock.json b/_generated/AzureMysqlDeploymentV1_Node16/Tests/package-lock.json new file mode 100644 index 000000000000..82632fe48912 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1_Node16/Tests/package-lock.json @@ -0,0 +1,164 @@ +{ + "name": "vsts-tasks-azuremysql", + "version": "1.0.1", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha1-5gtrDo8wG9l+U3UhW9pAbIURjAs=" + }, + "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" + } + }, + "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" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", + "requires": { + "ms": "2.0.0" + } + }, + "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=" + }, + "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" + } + }, + "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==" + }, + "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=" + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "nock": { + "version": "9.0.11", + "resolved": "https://registry.npmjs.org/nock/-/nock-9.0.11.tgz", + "integrity": "sha1-EPIC5MwnYQLWDibjGfl9aNoJvpw=", + "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" + } + }, + "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==" + }, + "propagate": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/propagate/-/propagate-0.4.0.tgz", + "integrity": "sha1-8/zKCm/gZzanulcpZgaWF8EwtIE=" + }, + "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" + } + }, + "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" + } + }, + "type-detect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-1.0.0.tgz", + "integrity": "sha1-diIXzAbbJY7EiQihKY6LlRIejqI=" + } + } +} diff --git a/_generated/AzureMysqlDeploymentV1_Node16/Tests/package.json b/_generated/AzureMysqlDeploymentV1_Node16/Tests/package.json new file mode 100644 index 000000000000..5e53988150f6 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1_Node16/Tests/package.json @@ -0,0 +1,22 @@ +{ + "name": "vsts-tasks-azuremysql", + "version": "1.0.1", + "description": "Azure Pipelines Azure MySQL", + "main": "azuremysqldeploy.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": { + "nock": "9.0.11" + } +} diff --git a/_generated/AzureMysqlDeploymentV1_Node16/ThirdPartyNotices.txt b/_generated/AzureMysqlDeploymentV1_Node16/ThirdPartyNotices.txt new file mode 100644 index 000000000000..b44d302c751b --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1_Node16/ThirdPartyNotices.txt @@ -0,0 +1,2334 @@ +THIRD-PARTY SOFTWARE NOTICES AND INFORMATION +Do Not Translate or Localize + +Azure Database for MySQL Deployment incorporates third party material from the projects listed below. The original copyright notice and the license under which Microsoft received such third party material are set forth below. Microsoft reserves all other rights not expressly granted, whether by implication, estoppel or otherwise. + + +1. Mockery (https://github.com/mfncooper/mockery) +2. Node.js (https://nodejs.org/) +3. Q (https://github.com/kriskowal/q) +4. VSTS-task-lib (https://github.com/Microsoft/vsts-task-lib) +5. winreg (https://github.com/fresc81/node-winreg) +6. @types/node (https://www.github.com/DefinitelyTyped/DefinitelyTyped.git) +7. @types/q (https://www.github.com/DefinitelyTyped/DefinitelyTyped.git) +8. @types/mocha (https://github.com/DefinitelyTyped/DefinitelyTyped.git) +9. abbrev (https://github.com/isaacs/abbrev-js) +10. Archiver (https://github.com/archiverjs/node-archiver) +11. archiver-utils (https://github.com/archiverjs/archiver-utils) +12. async (https://github.com/caolan/async) +13. buffer-crc32 (https://github.com/brianloveswords/buffer-crc32) +14. Glob (https://github.com/isaacs/node-glob) +15. lodash (https://lodash.com/) + Includes:File(s) copyright John Resig (http://ejohn.org/blog/javascript-micro-templating/) + Includes:File(s) copyright Laura Doktorova (https://github.com/olado/doT) +16. readable-stream (https://github.com/isaacs/readable-stream) +17. tar-stream (https://github.com/mafintosh/tar-stream) +18. zip-stream (https://github.com/archiverjs/node-zip-stream) +19. graceful-fs (https://github.com/isaacs/node-graceful-fs) +20. lazystream (https://github.com/jpommerening/node-lazystream) +21. normalize-path (https://github.com/jonschlinkert/normalize-path) +22 JsonWebToken (https://www.npmjs.com/package/jsonwebtoken) +23 typed-rest-client (https://www.npmjs.com/package/typed-rest-client) +22. balanced-match (https://github.com/juliangruber/balanced-match) +23. binary (https://github.com/substack/node-binary) +24. buffers (DefinitelyTyped) (https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/buffers) +25. chainsaw (https://github.com/substack/node-chainsaw) +26. bl (Buffer List) (https://github.com/rvagg/bl) +27. safe-buffer (https://github.com/feross/safe-buffer) +28. brace-expansion (https://github.com/juliangruber/brace-expansion) +29. concat-map (https://github.com/substack/node-concat-map) +30. traverse (https://github.com/substack/js-traverse) +31. compress-commons (https://github.com/archiverjs/node-compress-commons) +32. Crc32-stream (https://github.com/archiverjs/node-crc32-stream) +33. Xmlbuilder (https://github.com/oozcitak/xmlbuilder-js) +34. core-util-is (https://www.npmjs.com/package/core-util-is) +35. decompress-zip (https://github.com/bower/decompress-zip) +36. graceful-fs (https://github.com/isaacs/node-graceful-fs) +37. mkpath (https://github.com/jrajav/mkpath) +38. nopt (https://github.com/npm/nopt) +39. Q (https://github.com/kriskowal/q) +40. touch (https://github.com/isaacs/node-touch) +41. isarray (https://github.com/juliangruber/isarray/) +42. inherits (https://github.com/isaacs/inherits) +43. string_decoder (https://github.com/rvagg/string_decoder) +44. end-of-stream (https://github.com/mafintosh/end-of-stream) +45. once (https://github.com/isaacs/once) +46. fs.realpath (https://github.com/isaacs/fs.realpath) +47. inflight (https://github.com/npm/inflight) +48. minimatch (https://github.com/isaacs/minimatch) +49. path-is-absolute (https://github.com/sindresorhus/path-is-absolute) +50. graceful-fs (https://github.com/isaacs/node-graceful-fs) +51. wrappy (https://github.com/npm/wrappy) +52. Ltx (https://github.com/node-xmpp/ltx) +53. process-nextick-args (https://github.com/calvinmetcalf/process-nextick-args) +54. util-deprecate (https://github.com/TooTallNate/util-deprecate) +55. sax js (https://github.com/isaacs/sax-js) +56. semver (https://github.com/npm/node-semver/) +57. ShellJS (https://github.com/shelljs/shelljs) +58. xtend (https://www.npmjs.com/package/xtend) +59. VSTS-task-lib (https://github.com/Microsoft/vsts-task-lib) +60. Xml2JS (https://github.com/Leonidas-from-XIV/node-xml2js) +61. node-uuid (https://www.npmjs.com/package/node-uuid) +62. moment (https://www.npmjs.com/package/moment) +63. buffer-equal-constant-time (https://github.com/salesforce/buffer-equal-constant-time) +64. buffer-shims (https://github.com/calvinmetcalf/buffer-shims) +65. Ctt (https://ctt.codeplex.com) +67. hoek (https://github.com/hapijs/hoek) +68. isemail (https://github.com/hapijs/isemail) +69. joi (https://github.com/hapijs/joi) +70. lodash.once (https://github.com/lodash/lodash) +71. ms (https://github.com/zeit/ms) +72. node-ecdsa-sig-formatter (https://github.com/Brightspace/node-ecdsa-sig-formatter) +73. node-jwa (https://github.com/brianloveswords/node-jwa) +74. node-jws (https://github.com/brianloveswords/node-jws) +75. node-tar (https://github.com/npm/node-tar/) +76. OpenSSL (http://www.openssl.org) +77. topo (https://github.com/hapijs/topo) +78. tunnel (https://github.com/koichik/node-tunnel) +79. underscore.js (http://underscorejs.org/; https://github.com/jashkenas/underscore) + + +%% 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 + +%% Node.js NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Node.js is licensed for use as follows: + +""" +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. +""" + +This license applies to parts of Node.js originating from the +https://github.com/joyent/node repository: + +""" +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. +""" + +The Node.js license applies to all parts of Node.js that are not externally +maintained libraries. +========================================= +END OF Node.js 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. + +The file q.js is prefaced by the following additional third-party subcomponent information: + +/*! + * + * Copyright 2009-2012 Kris Kowal under the terms of the MIT + * license found at http://github.com/kriskowal/q/raw/master/LICENSE + * + * With parts by Tyler Close + * Copyright 2007-2009 Tyler Close under the terms of the MIT X license found + * at http://www.opensource.org/licenses/mit-license.html + * Forked at ref_send.js version: 2009-05-11 + * + * With parts by Mark Miller + * Copyright (C) 2011 Google Inc. + * + * 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 Q 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 + +%% winreg NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +This project is released under BSD 2-Clause License. + +Copyright (c) 2016, Paul Bottin 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. + +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 winreg NOTICES, INFORMATION, AND LICENSE + +%% @types/mocha 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 @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 + +%% abbrev 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. +========================================= + +%% Archiver NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) 2012-2014 Chris Talkington, 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 Archiver NOTICES, INFORMATION, AND LICENSE + +%% archiver-utils NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) 2015 Chris Talkington. + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF archiver-utils NOTICES, INFORMATION, AND LICENSE + +%% async NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= + +Copyright (c) 2010-2016 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 + +%% buffer-crc32 NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License + +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 buffer-crc32 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 + +%% 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. + +========================================= +// Based on John Resig's `tmpl` implementation (http://ejohn.org/blog/javascript-micro-templating/) + +Copyright 2008 John Resig + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +========================================= +// Based on Laura Doktorova's doT.js (https://github.com/olado/doT). + +Copyright (c) 2011 Laura Doktorova + +Software includes portions from jQote2 Copyright (c) 2010 aefxx, +http://aefxx.com/ licensed 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 lodash NOTICES, INFORMATION, AND LICENSE + +%% safe-buffer 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 + +%% tar-stream 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 tar-stream NOTICES, INFORMATION, AND LICENSE + +%% zip-stream NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) 2014 Chris Talkington, 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 zip-stream NOTICES, INFORMATION, AND LICENSE + +%% graceful-fs 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 graceful-fs NOTICES, INFORMATION, AND LICENSE + +%% lazystream NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) 2013 J. Pommerening, 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 lazystream NOTICES, INFORMATION, AND LICENSE + +%% normalize-path 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 normalize-path NOTICES, INFORMATION, AND LICENSE + +%% balanced-match NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +(MIT) + +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 balanced-match NOTICES, INFORMATION, AND LICENSE + +%% binary NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) 2012 James Halliday + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Software), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF binary NOTICES, INFORMATION, AND LICENSE + +%% buffers (DefinitelyTyped) NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +This project is licensed under the MIT license. + +Copyrights are respective of each contributor listed at the beginning of each definition file. + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +========================================= +END OF buffers (DefinitelyTyped) NOTICES, INFORMATION, AND LICENSE + +%% chainsaw NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright 2010 James Halliday (mail@substack.net) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the Software), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +========================================= +END OF chainsaw NOTICES, INFORMATION, AND LICENSE + +%% bl (Buffer List) NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License (MIT) +Copyright (c) 2014 bl contributors + +bl contributors listed at https://github.com/rvagg/bl#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 bl (Buffer List) 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 + +%% brace-expansion NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +(MIT) + +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 +========================================= +Copyright (c) James Halliday/substack + +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 + +%% traverse NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright 2010 James Halliday (mail@substack.net) + +This project is free software released under the MIT/X11 license: +http://www.opensource.org/licenses/mit-license.php + +Copyright 2010 James Halliday (mail@substack.net) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the Software), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +========================================= +END OF traverse NOTICES, INFORMATION, AND LICENSE + +%% compress-commons NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) 2014 Chris Talkington, 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 compress-commons NOTICES, INFORMATION, AND LICENSE + +%% Crc32-stream NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) 2014 Chris Talkington, 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 Crc32-stream NOTICES, INFORMATION, AND LICENSE + +%% Xmlbuilder NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) 2013 Ozgur Ozcitak + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +========================================= +END OF Xmlbuilder 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 + +%% decompress-zip NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) Bower Team + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the Software), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +========================================= +END OF decompress-zip NOTICES, INFORMATION, AND LICENSE + +%% graceful-fs 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 graceful-fs NOTICES, INFORMATION, AND LICENSE + +%% mkpath NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (C) 2012 Jonathan Rajavuori + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the Software), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF mkpath NOTICES, INFORMATION, AND LICENSE + +%% nopt 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 nopt 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. + +The file q.js is prefaced by the following additional third-party subcomponent information: + +/*! + * + * Copyright 2009-2012 Kris Kowal under the terms of the MIT + * license found at http://github.com/kriskowal/q/raw/master/LICENSE + * + * With parts by Tyler Close + * Copyright 2007-2009 Tyler Close under the terms of the MIT X license found + * at http://www.opensource.org/licenses/mit-license.html + * Forked at ref_send.js version: 2009-05-11 + * + * With parts by Mark Miller + * Copyright (C) 2011 Google Inc. + * + * 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 Q NOTICES, INFORMATION, AND LICENSE + +%% touch 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 touch NOTICES, INFORMATION, AND LICENSE + +%% isarray NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +(MIT) + +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 isarray 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 + +%% 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 + +%% end-of-stream 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 end-of-stream 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 + +%% 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, as follows: + + 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 + +%% 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 + +%% 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 + +%% path-is-absolute NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +path-is-absolute + +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. + +node.js: + +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 path-is-absolute NOTICES, INFORMATION, AND LICENSE + +%% graceful-fs 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 graceful-fs 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 + +%% Ltx NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) 2010 Stephan Maka + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +========================================= +END OF Ltx 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 + +%% 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 + +%% sax js 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. + +==== + +`String.fromCodePoint` by Mathias Bynens used according to terms of MIT +License, as follows: + + Copyright Mathias Bynens + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be + included in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF sax js 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 + +%% xtend NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) 2012-2014 Raynos. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the Software), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +========================================= +END OF xtend 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 + +%% 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 + +%% 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 + +%% 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 + +%% 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 + +%% 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 + +%% 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 + +%% buffer-shims NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +# Copyright (c) 2016 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 buffer-shims NOTICES, INFORMATION, AND LICENSE + +%% Ctt NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Microsoft Public License (Ms-PL) + +This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software. + +1. Definitions + +The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning here as under U.S. copyright law. + +A "contribution" is the original software, or any additions or changes to the software. + +A "contributor" is any person that distributes its contribution under this license. + +"Licensed patents" are a contributor's patent claims that read directly on its contribution. + +2. Grant of Rights + +(A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create. + +(B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution in the software or derivative works of the contribution in the software. + +3. Conditions and Limitations + +(A) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. + +(B) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically. + +(C) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software. + +(D) If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license. + +(E) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement. +========================================= +END OF Ctt 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. +========================================= +Includes code from Deep-eql + +Copyright (c) 2013 Jake Luer jake@alogicalparadox.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 hoek NOTICES, INFORMATION, AND LICENSE + +%% isemail NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) 2008-2011, Dominic Sayers +Copyright (c) 2013-2014, GlobeSherpa +Copyright (c) 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 + +%% 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 + +%% 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 + +%% ms NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +(The MIT License) + +Copyright (c) 2014 Guillermo Rauch +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-ecdsa-sig-formatter NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= + 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 node-ecdsa-sig-formatter NOTICES, INFORMATION, AND LICENSE + +%% node-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 node-jwa NOTICES, INFORMATION, AND LICENSE + +%% node-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 node-jws NOTICES, INFORMATION, AND LICENSE + +%% node-tar 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 node-tar NOTICES, INFORMATION, AND LICENSE + +%% OpenSSL NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= + LICENSE ISSUES + ============== + + The OpenSSL toolkit stays under a dual license, i.e. both the conditions of + the OpenSSL License and the original SSLeay license apply to the toolkit. + See below for the actual license texts. Actually both licenses are BSD-style + Open Source licenses. In case of any license issues related to OpenSSL + please contact openssl-core@openssl.org. + + OpenSSL License + --------------- + +/* ==================================================================== + * Copyright (c) 1998-2011 The OpenSSL Project. 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. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/) + * + * 4. The names OpenSSL Toolkit and OpenSSL Project must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called OpenSSL + * nor may OpenSSL appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/) + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED 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 OpenSSL PROJECT OR + * ITS 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. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ + + Original SSLeay License + ----------------------- + +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) + * All rights reserved. + * + * This package is an SSL implementation written + * by Eric Young (eay@cryptsoft.com). + * The implementation was written so as to conform with Netscapes SSL. + * + * This library is free for commercial and non-commercial use as long as + * the following conditions are aheared to. The following conditions + * apply to all code found in this distribution, be it the RC4, RSA, + * lhash, DES, etc., code; not just the SSL code. The SSL documentation + * included with this distribution is covered by the same copyright terms + * except that the holder is Tim Hudson (tjh@cryptsoft.com). + * + * Copyright remains Eric Young's, and as such any Copyright notices in + * the code are not to be removed. + * If this package is used in a product, Eric Young should be given attribution + * as the author of the parts of the library used. + * This can be in the form of a textual message at program startup or + * in documentation (online or textual) provided with the package. + * + * 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 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. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes cryptographic software written by + * Eric Young (eay@cryptsoft.com) + * The word 'cryptographic' can be left out if the rouines from the library + * being used are not cryptographic related :-). + * 4. If you include any Windows specific code (or a derivative thereof) from + * the apps directory (application code) you must include an acknowledgement: + * This product includes software written by Tim Hudson (tjh@cryptsoft.com) + * + * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``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 licence and distribution terms for any publically available version or + * derivative of this code cannot be changed. i.e. this code cannot simply be + * copied and put under another distribution licence + * [including the GNU Public Licence.] +========================================= +END OF OpenSSL 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 + +%% 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 + +%% underscore.js NOTICES, INFORMATION, AND LICENSE BEGIN HERE +========================================= +Copyright (c) 2009-2017 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.js NOTICES, INFORMATION, AND LICENSE + diff --git a/_generated/AzureMysqlDeploymentV1_Node16/Window-MysqlCli-Installer.ps1 b/_generated/AzureMysqlDeploymentV1_Node16/Window-MysqlCli-Installer.ps1 new file mode 100644 index 000000000000..2589e7394a5c --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1_Node16/Window-MysqlCli-Installer.ps1 @@ -0,0 +1,243 @@ +################################################################################ +## File: Install-MysqlCli.ps1 +## Team: ReleaseManagement +## Desc: Install MySQL CLI +################################################################################ + +param ( + [string]$WorkingFolder, + [string]$VcredistName, + [string]$MysqlClientName + ) + +# Install exe through url +function Install-EXE +{ + Param + ( + [String]$FilePath, + [String]$Url, + [String]$Name, + [String[]]$ArgumentList + ) + + $exitCode = -1 + + try + { + if(!$FilePath){ + Write-Host "Downloading $Name..." + $FilePath = "${env:Temp}\$Name" + + Invoke-WebRequest -Uri $Url -OutFile $FilePath + } + + Write-Host "Starting Install $Name..." + $process = Start-Process -FilePath $FilePath -ArgumentList $ArgumentList -Wait -PassThru + $exitCode = $process.ExitCode + + if ($exitCode -eq 0 -or $exitCode -eq 3010) + { + Write-Host -Object 'Installation successful' + return $exitCode + } + else + { + Write-Host -Object "Non zero exit code returned by the installation process : $exitCode." + return $exitCode + } + } + catch + { + Write-Host -Object "Failed to install the Executable $Name" + Write-Host -Object $_.Exception.Message + return -1 + } +} + +function ExtractFiles +{ + <# + .DESCRIPTION + Extracts the zip file to the location provided. + It uses the latest command 'Expand-Archive' if available otherwise it fallsback to shell for extraction + .PARAMETER ZipPath + Path of the zip file to extract. + + .PARAMETER DestinationPath + Directory where the zip file needs to be extracted + #> + [CmdletBinding()] + Param + ( + [string]$ZipPath, + [string]$DestinationPath + ) + + try + { + if (-not (Test-Path $ZipPath)) + { + Write-Host "$ZipPath does not exist." + return + } + + if (-not (Test-Path $DestinationPath)) + { + New-Item -Type Directory $DestinationPath + } + + $zipFullPath = [System.IO.Path]::GetFullPath($ZipPath) + Write-Host "Extracting $zipFullPath to path: $DestinationPath" + if (Get-Command Expand-Archive -ErrorAction SilentlyContinue) + { + Expand-Archive $zipFullPath $DestinationPath -Force + } + else + { + $shellApplication = New-Object -ComObject Shell.Application + if ($shellApplication -eq $null) + { + Write-Host 'Unable to create Shell.' + exit + } + + $zipPackage = $shellApplication.NameSpace($zipFullPath) + if ($zipPackage -eq $null) + { + Write-Host 'Unable to create shell zipPackage.' + exit + } + + $destinationFolder = $shellApplication.NameSpace($DestinationPath) + + # CopyHere Flags + # 4 - Do not display a progress dialog box. + # 16 - Respond with "Yes to All" for any dialog box that is displayed. + + $destinationFolder.CopyHere($zipPackage.Items(),20) + } + } + catch + { + Write-Host $_.Exception.Message + exit + } +} + +# Set new machine path +function Set-MachinePath{ + [CmdletBinding()] + param( + [string]$NewPath + ) + Set-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment' -Name Path -Value $NewPath + return $NewPath +} + +# Get machine path from registry +function Get-MachinePath{ + [CmdletBinding()] + param( + + ) + $currentPath = (Get-ItemProperty -Path 'Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment' -Name PATH).Path + return $currentPath +} + +# Append path of exe in existing path +function Add-MachinePathItem +{ + [CmdletBinding()] + param( + [string]$PathItem + ) + + $currentPath = Get-MachinePath + $newPath = $PathItem + ';' + $currentPath + return Set-MachinePath -NewPath $newPath +} + +$command = Get-Command -Name 'mysql' -ErrorAction SilentlyContinue +if($command) +{ + return 0; +} + +$InstallerURI = 'http://download.microsoft.com/download/0/5/6/056dcda9-d667-4e27-8001-8a0c6971d6b1/vcredist_x64.exe' +$InstallerName = 'vcredist_x64.exe' +$ArgumentList = ('/install', '/quiet', '/norestart' ) +if($WorkingFolder -and $VcredistName ) +{ + # install vcredist from working folder + cd $WorkingFolder + $exitCode = Install-EXE -FilePath $VcredistName -Name $InstallerName -ArgumentList $ArgumentList +} +else +{ + $exitCode = Install-EXE -Url $InstallerURI -Name $InstallerName -ArgumentList $ArgumentList + +} + + +## Downloading mysql jar +$uri = 'https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.21-winx64.zip' +$mysqlPath = 'C:\mysql-5.7.21-winx64\bin' + +if ($exitCode -eq 0 -or $exitCode -eq 3010) +{ + if($workingFolder -and $MysqlClientName ) + { + cd $workingFolder + # Expand the zip + $pwdPath = $pwd.Path + if ( $pwdPath -notmatch '.+?\\$') + { + $pwdPath += '\' + } + + $sourcePath = $pwdPath + "mysql-5.7.21-winx64" + Copy-Item -Recurse -Path $sourcePath -destination C:\ + } + else + { + $retry = $false + $retryCount = 1; + do{ + try + { + # Get the latest mysql command line tools . + Invoke-WebRequest -UseBasicParsing -Uri $uri -OutFile mysql.zip + } + catch + { + $retryCount += 1 + $retry = $true + + } + } + while($retry -and $retryCount -lt 3) + + + # Expand the zip + $pwdPath = $pwd.Path + if ( $pwdPath -notmatch '.+?\\$') + { + $pwdPath += '\' + } + $sourcePath = $pwdPath + "mysql.zip" + ExtractFiles $sourcePath "C:\" + + # Deleting zip folder + Remove-Item -Recurse -Force mysql.zip + } + + # Adding mysql in system environment path + Add-MachinePathItem $mysqlPath + + return 0; +} +else +{ + return $exitCode; +} diff --git a/_generated/AzureMysqlDeploymentV1_Node16/azuremysqldeploy.ts b/_generated/AzureMysqlDeploymentV1_Node16/azuremysqldeploy.ts new file mode 100644 index 000000000000..059258393cdc --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1_Node16/azuremysqldeploy.ts @@ -0,0 +1,73 @@ +import task = require('azure-pipelines-task-lib/task'); +import Q = require('q'); +import path = require('path'); +import { FirewallRule, FirewallAddressRange } from './models/Firewall'; +import { MysqlServer } from './models/MysqlServer'; +import { AzureMysqlTaskParameter } from './models/AzureMysqlTaskParameter'; +import { FirewallOperations } from './operations/FirewallOperations'; +import { MysqlServerOperations } from './operations/MysqlServerOperations'; +import { ToolPathOperations } from './operations/ToolPathOperations'; +import { ISqlClient } from './sql/ISqlClient'; +import { MysqlClient } from './sql/MysqlClient'; +import { AzureRMEndpoint } from 'azure-pipelines-tasks-azure-arm-rest/azure-arm-endpoint'; +import { AzureEndpoint } from 'azure-pipelines-tasks-azure-arm-rest/azureModels'; +import { ApplicationTokenCredentials } from 'azure-pipelines-tasks-azure-arm-rest/azure-arm-common'; + +async function run() { + let azureMysqlTaskParameter: AzureMysqlTaskParameter; + let firewallAdded: boolean; + let firewallOperations: FirewallOperations; + let mysqlServer: MysqlServer; + try { + task.debug('Task execution started'); + task.setResourcePath(path.join( __dirname, 'task.json')); + task.setResourcePath(path.join( __dirname, 'node_modules/azure-pipelines-tasks-webdeployment-common/module.json')); + + // Get all task input parameters + azureMysqlTaskParameter = new AzureMysqlTaskParameter(); + task.debug('parsed task inputs'); + const endpoint: AzureEndpoint = await new AzureRMEndpoint(azureMysqlTaskParameter.getConnectedServiceName()).getEndpoint(); + + var endpointTelemetry = '{"endpointId":"' + azureMysqlTaskParameter.getConnectedServiceName() + '"}'; + console.log("##vso[telemetry.publish area=TaskEndpointId;feature=AzureMysqlDeployment]" + endpointTelemetry); + if(!endpoint) { + throw new Error(task.loc("AzureEndpointCannotBeNull")); + } + + const mysqlServerOperations: MysqlServerOperations = new MysqlServerOperations(endpoint.applicationTokenCredentials, endpoint.subscriptionID); + // Get mysql server data entered by user + mysqlServer = await mysqlServerOperations.getMysqlServerFromServerName(azureMysqlTaskParameter.getServerName()); + task.debug('Mysql server details from server name: ' + JSON.stringify(mysqlServer)); + const mysqlClientPath: string = await new ToolPathOperations().getInstalledPathOfMysql(); + if(mysqlClientPath) { + // Mysql client + const sqlClient: ISqlClient = new MysqlClient(azureMysqlTaskParameter, mysqlServer.getFullyQualifiedName(), mysqlClientPath); + firewallOperations = new FirewallOperations(endpoint.applicationTokenCredentials, endpoint.subscriptionID); + //Invoke firewall operation to validate user has permission for server or not. If not whitelist the IP + firewallAdded = await firewallOperations.invokeFirewallOperations(azureMysqlTaskParameter, sqlClient, mysqlServer); + //Execute sql script entered by user + await sqlClient.executeSqlCommand(); + } + else { + throw new Error(task.loc("NotAbleToGetInstalledLocationOfMysqlFromPath")); + } + } + catch(exception) { + task.debug('Getting exception: '+exception); + task.setResult(task.TaskResult.Failed, exception); + } + finally{ + // Delete firewall rule in case of automatic added rule or either user wants to delete it + if(firewallAdded && azureMysqlTaskParameter && azureMysqlTaskParameter.getDeleteFirewallRule()) { + task.debug('Deleting firewall rule.'); + if(firewallOperations && mysqlServer) { + await firewallOperations.deleteFirewallRule(mysqlServer.getName(), mysqlServer.getResourceGroupName()); + } + task.debug('Sucessfully deleted firewall rule.'); + } + } + + task.debug('Task completed.'); +} + +run(); diff --git a/_generated/AzureMysqlDeploymentV1_Node16/icon.png b/_generated/AzureMysqlDeploymentV1_Node16/icon.png new file mode 100644 index 000000000000..dce6892be2a5 Binary files /dev/null and b/_generated/AzureMysqlDeploymentV1_Node16/icon.png differ diff --git a/_generated/AzureMysqlDeploymentV1_Node16/icon.svg b/_generated/AzureMysqlDeploymentV1_Node16/icon.svg new file mode 100644 index 000000000000..a2df3e55b8c7 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1_Node16/icon.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/_generated/AzureMysqlDeploymentV1_Node16/make.json b/_generated/AzureMysqlDeploymentV1_Node16/make.json new file mode 100644 index 000000000000..06a5f2fef9de --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1_Node16/make.json @@ -0,0 +1,12 @@ +{ + "rm": [ + { + "items": [ + "node_modules/azure-pipelines-tasks-azure-arm-rest/node_modules/azure-pipelines-task-lib", + "node_modules/azure-pipelines-tasks-webdeployment-common/node_modules/azure-pipelines-task-lib", + "node_modules/https-proxy-agent/node_modules/agent-base" + ], + "options": "-Rf" + } + ] +} \ No newline at end of file diff --git a/_generated/AzureMysqlDeploymentV1_Node16/models/AzureMysqlTaskParameter.ts b/_generated/AzureMysqlDeploymentV1_Node16/models/AzureMysqlTaskParameter.ts new file mode 100644 index 000000000000..bcc4813c027e --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1_Node16/models/AzureMysqlTaskParameter.ts @@ -0,0 +1,91 @@ +import tl = require("azure-pipelines-task-lib/task"); + +export class AzureMysqlTaskParameter { + + private connectedServiceName: string; + private serverName: string; + private databaseName: string; + private sqlUserName: string; + private sqlPassword: string; + private taskNameSelector: string; + private sqlFile: string; + private sqlInline: string; + private sqlAdditionalArguments: string; + private ipDetectionMethod: string; + private startIpAddress: string; + private endIpAddress: string; + private deleteFirewallRule: boolean; + + constructor() { + try { + this.connectedServiceName = tl.getInput('ConnectedServiceName', true); + this.serverName = tl.getInput('ServerName', true); + this.databaseName = tl.getInput('DatabaseName', false); + this.sqlUserName = tl.getInput('SqlUsername', true); + this.sqlPassword = tl.getInput('SqlPassword', true); + this.taskNameSelector = tl.getInput('TaskNameSelector', true); + this.sqlFile = tl.getInput('SqlFile', false); + this.sqlInline = tl.getInput('SqlInline', false); + this.sqlAdditionalArguments = tl.getInput('SqlAdditionalArguments', false); + this.ipDetectionMethod = tl.getInput('IpDetectionMethod', false); + this.startIpAddress = tl.getInput('StartIpAddress', false); + this.endIpAddress = tl.getInput('EndIpAddress', false); + this.deleteFirewallRule = tl.getBoolInput('DeleteFirewallRule', false); + } + catch (error) { + throw new Error(tl.loc("ARGD_ConstructorFailed", error.message)); + } + } + + public getConnectedServiceName(): string { + return this.connectedServiceName; + } + + public getServerName(): string { + return this.serverName; + } + + public getDatabaseName(): string { + return this.databaseName; + } + + public getSqlPassword(): string { + return this.sqlPassword; + } + + public getSqlUserName(): string { + return this.sqlUserName; + } + + public getTaskNameSelector(): string { + return this.taskNameSelector; + } + + public getSqlFile(): string { + return this.sqlFile; + } + + public getSqlInline(): string { + return this.sqlInline; + } + + public getSqlAdditionalArguments(): string { + return this.sqlAdditionalArguments; + } + + public getIpDetectionMethod(): string { + return this.ipDetectionMethod; + } + + public getStartIpAddress(): string { + return this.startIpAddress; + } + + public getEndIpAddress(): string { + return this.endIpAddress; + } + + public getDeleteFirewallRule(): boolean { + return this.deleteFirewallRule; + } +} diff --git a/_generated/AzureMysqlDeploymentV1_Node16/models/Firewall.ts b/_generated/AzureMysqlDeploymentV1_Node16/models/Firewall.ts new file mode 100644 index 000000000000..08d269d90436 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1_Node16/models/Firewall.ts @@ -0,0 +1,52 @@ +import tl = require("azure-pipelines-task-lib/task"); + +export class FirewallRule { + private properties: FirewallAddressRange; + private name: string; + + constructor(name: string, firewallAddressRange: FirewallAddressRange){ + if ( !name || typeof name.valueOf() !== 'string') { + throw new Error(tl.loc("FirewallRuleNameCannotBeEmpty")); + } + if (!firewallAddressRange) { + throw new Error(tl.loc("FirewallAddressRangeCannotBeEmpty")); + } + + this.name = name; + this.properties = firewallAddressRange; + } + + public getProperties(): FirewallAddressRange{ + return this.properties; + } + + public getName(): string{ + return this.name; + } +} + +export class FirewallAddressRange { + private startIpAddress: string; + private endIpAddress: string; + + constructor(startIpAddress: string, endIpAddress: string){ + if ( !startIpAddress ||typeof startIpAddress.valueOf() !== 'string') { + throw new Error(tl.loc("StartIpAddressCannotBeEmpty")); + } + + if (!endIpAddress || typeof endIpAddress.valueOf() !== 'string') { + throw new Error(tl.loc("EndIpAddressCannotBeEmpty")); + } + + this.startIpAddress = startIpAddress; + this.endIpAddress = endIpAddress; + } + + public getEndIpAddress(): string{ + return this.endIpAddress; + } + + public getStartIpAddress(): string{ + return this.startIpAddress; + } +} diff --git a/_generated/AzureMysqlDeploymentV1_Node16/models/FirewallConfiguration.ts b/_generated/AzureMysqlDeploymentV1_Node16/models/FirewallConfiguration.ts new file mode 100644 index 000000000000..c74c608613b9 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1_Node16/models/FirewallConfiguration.ts @@ -0,0 +1,18 @@ +export class FirewallConfiguration { + + private ipAdressAlreadyAdded: boolean; + private ipAddress: string; + + constructor(ipAdressAlreadyAdded: boolean, iPAddress?: string) { + this.ipAdressAlreadyAdded = ipAdressAlreadyAdded; + this.ipAddress = iPAddress; + } + + public isIpAdressAlreadyAdded(): boolean{ + return this.ipAdressAlreadyAdded; + } + + public getIpAddress(): string{ + return this.ipAddress; + } +} diff --git a/_generated/AzureMysqlDeploymentV1_Node16/models/MysqlServer.ts b/_generated/AzureMysqlDeploymentV1_Node16/models/MysqlServer.ts new file mode 100644 index 000000000000..a5c86a8ad8a8 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1_Node16/models/MysqlServer.ts @@ -0,0 +1,43 @@ +import tl = require("azure-pipelines-task-lib/task"); + +export class MysqlServer { + private name: string; + private fullyQualifiedName: string; + private resourceGroupName: string; + + constructor(name: string, fullyQualifiedName: string, resourceGroupName: string){ + if (!this.isNameValid(name)) { + throw new Error(tl.loc("MysqlServerNameCannotBeEmpty")); + } + if (!this.isNameValid(fullyQualifiedName)) { + throw new Error(tl.loc("MysqlFullyQualifiedServerNameCannotBeEmpty")); + } + if(!this.isNameValid(resourceGroupName)){ + throw new Error(tl.loc("ResourceGroupCannotBeEmpty")); + } + + this.name = name; + this.fullyQualifiedName = fullyQualifiedName; + this.resourceGroupName = resourceGroupName; + } + + public getResourceGroupName(): string{ + return this.resourceGroupName; + } + + public getName(): string{ + return this.name; + } + + public getFullyQualifiedName(): string{ + return this.fullyQualifiedName; + } + + private isNameValid(name: string): boolean{ + if (name === null || name === undefined || typeof name.valueOf() !== 'string') { + return false; + }else{ + return true; + } + } +} diff --git a/_generated/AzureMysqlDeploymentV1_Node16/operations/FirewallOperations.ts b/_generated/AzureMysqlDeploymentV1_Node16/operations/FirewallOperations.ts new file mode 100644 index 000000000000..3e9bf3e7a81b --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1_Node16/operations/FirewallOperations.ts @@ -0,0 +1,125 @@ +import task = require('azure-pipelines-task-lib/task'); +import { ApplicationTokenCredentials} from 'azure-pipelines-tasks-azure-arm-rest/azure-arm-common'; +import { AzureMysqlManagementClient } from 'azure-pipelines-tasks-azure-arm-rest/azure-arm-mysql'; +import { FirewallRule, FirewallAddressRange } from '../models/Firewall'; +import { MysqlServer } from '../models/MysqlServer'; +import { AzureMysqlTaskParameter } from '../models/AzureMysqlTaskParameter'; +import { FirewallConfiguration } from '../models/FirewallConfiguration'; +import { ISqlClient } from '../sql/ISqlClient'; +import Q = require('q'); + +export class FirewallOperations { + + private _azureMysqManagementClient: AzureMysqlManagementClient; + private _firewallName: string; + + constructor(azureCredentials: ApplicationTokenCredentials, subscriptionId: string) { + this._azureMysqManagementClient = new AzureMysqlManagementClient(azureCredentials, subscriptionId); + } + + /** + * Add firewall rule for particular mysql server + * @param serverName mysql server name + * @param firewallRule firewallRule i.e name and Ip Adress range + * @param resourceGroupName mysql server resource group name + * + * @returns operation is success or failure + */ + public async addFirewallRule(serverName: string, firewallRule: FirewallRule, resourceGroupName: string): Promise { + let defer = Q.defer(); + this._azureMysqManagementClient.firewallRules.createOrUpdate(resourceGroupName, serverName, firewallRule.getName(), firewallRule, (error, result, request, response) => { + if(error){ + task.debug("Getting error during adding firewall rule: "+ error); + defer.reject(new Error(task.loc("NotAbleToAddFirewallRule", error))); + }else{ + defer.resolve(); + } + }); + return defer.promise; + } + + /** + * Delete firewall rule for mysql server + * @param serverName mysql server name + * @param resourceGroupName mysql server resource group name + * + * @returns operation is success or failure + */ + public async deleteFirewallRule(serverName: string, resourceGroupName: string): Promise { + let defer = Q.defer(); + this._azureMysqManagementClient.firewallRules.delete(resourceGroupName, serverName, this._firewallName, (error, result, request, response) => { + if(error){ + task.debug("Getting error during deleting firewall rule: "+ error); + defer.reject(new Error(task.loc("NotAbleToDeleteFirewallRule", error))); + }else{ + defer.resolve(); + } + }); + return defer.promise; + } + + /** + * To check agent box has permission to connect with mysqlServer or not. If not then add firewall rule to whitelist this IP. + * @param azureMysqlTaskParameter task input parameters + * @param sqlClient mysql client + * @param resourceGroupName mysql server resource group name + * + * @returns firewall rule added or not + */ + public async invokeFirewallOperations(azureMysqlTaskParameter: AzureMysqlTaskParameter, sqlClient: ISqlClient, mysqlServer: MysqlServer) : Promise { + var defer = Q.defer(); + if(azureMysqlTaskParameter.getIpDetectionMethod() ==='IPAddressRange'){ + this._preparefirewallRule(mysqlServer.getName(), azureMysqlTaskParameter.getStartIpAddress(), azureMysqlTaskParameter.getEndIpAddress(), mysqlServer.getResourceGroupName(), "IPAddressRange_" + this._getFirewallRuleName()).then(() =>{ + let firewallConfiguration: FirewallConfiguration = sqlClient.getFirewallConfiguration(); + console.log(" firewall conf " +JSON.stringify(firewallConfiguration)); + + if(!firewallConfiguration.isIpAdressAlreadyAdded()){ + task.debug("Agent Ip address not in added firewall rule: "+ firewallConfiguration.getIpAddress()); + defer.reject(new Error(task.loc("AgentIpAddressIsMissingInAddedFirewallRule"))); + }else{ + defer.resolve(true); + } + },(error) =>{ + task.debug("Error during adding firewall rule for IPAddressRange: "+ error); + defer.reject(error); + }); + }else { + const firewallConfiguration: FirewallConfiguration = sqlClient.getFirewallConfiguration(); + if(!firewallConfiguration.isIpAdressAlreadyAdded()){ + this._preparefirewallRule(mysqlServer.getName(), firewallConfiguration.getIpAddress(), firewallConfiguration.getIpAddress(), mysqlServer.getResourceGroupName(), "AutoDetect_" + this._getFirewallRuleName()).then(() =>{ + defer.resolve(true); + },(error) =>{ + task.debug("Error during adding firewall rule for IPAddressRange: "+ error); + defer.reject(error); + }); + }else{ + defer.resolve(false); + } + } + return defer.promise; + } + + /** + * Prepare firewall rule for mysql server + */ + private async _preparefirewallRule(serverName: string, startIpAddress: string, endIpAddress: string, resourceGroupName: string, ruleName: string): Promise { + var defer = Q.defer(); + this._firewallName = ruleName; + const firewallAddressRange: FirewallAddressRange = new FirewallAddressRange(startIpAddress, endIpAddress); + const firewallRule: FirewallRule = new FirewallRule(this._firewallName, firewallAddressRange); + this.addFirewallRule(serverName, firewallRule, resourceGroupName).then(() =>{ + task.debug('Firewall configuration name added : ' + this._firewallName); + defer.resolve(); + },(error) => { + defer.reject(error) + }); + return defer.promise; + } + + private _getFirewallRuleName(): string { + let buildId = task.getVariable('build.buildId'); + let releaseId = task.getVariable('release.releaseId'); + let firewallRuleName: string = (releaseId ? releaseId : buildId) + Date.now().toString(); + return firewallRuleName; + } +} diff --git a/_generated/AzureMysqlDeploymentV1_Node16/operations/MysqlServerOperations.ts b/_generated/AzureMysqlDeploymentV1_Node16/operations/MysqlServerOperations.ts new file mode 100644 index 000000000000..8e517942eae2 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1_Node16/operations/MysqlServerOperations.ts @@ -0,0 +1,77 @@ +import task = require('azure-pipelines-task-lib/task'); +import { AzureMysqlManagementClient } from 'azure-pipelines-tasks-azure-arm-rest/azure-arm-mysql'; +import { AzureMysqlTaskParameter } from '../models/AzureMysqlTaskParameter'; +import { ApplicationTokenCredentials} from 'azure-pipelines-tasks-azure-arm-rest/azure-arm-common'; +import { MysqlServer } from '../models/MysqlServer'; +import Q = require('q'); + +export class MysqlServerOperations{ + + private _azureMysqManagementClient: AzureMysqlManagementClient; + + constructor(azureCredentials: ApplicationTokenCredentials, subscriptionId: string) { + this._azureMysqManagementClient = new AzureMysqlManagementClient(azureCredentials, subscriptionId); + } + + /** + * Get mysql server data from server name including resource group + * @param serverName mysql server name to get details + * + * @returns mysql server details + */ + public async getMysqlServerFromServerName(serverName: string): Promise { + let defer = Q.defer(); + this._azureMysqManagementClient.mysqlServers.list((error, result, request, response) => { + if(error){ + task.debug("Error during fetching mysql severs list: "+ error); + defer.reject(new Error(task.loc("NotAbleToGetAllServers", error))); + }else{ + try{ + const mysqlServer = this._getMysqlServerFromResponse(result, serverName); + defer.resolve(mysqlServer); + } + catch(error){ + defer.reject(error); + } + } + }); + return defer.promise; + } + + /** + * Filter mysqlServer data from list of mysql server in particular subscription + * @param result List of mysql server in a subscription + * @param serverName server name + * + * @returns MysqlServer data + */ + private _getMysqlServerFromResponse(result: any, serverName: string) : MysqlServer{ + let mysqlServer: MysqlServer; + if(result && result.length > 0){ + result.forEach((resultObject) => { + if(resultObject && resultObject.properties && resultObject.properties.fullyQualifiedDomainName === serverName){ + mysqlServer = new MysqlServer(resultObject.name, resultObject.properties.fullyQualifiedDomainName, this._getResourceGroupNameFromUrl(resultObject.id)); + } + }); + }else{ + task.debug("Mysql server list is empty or null."); + throw new Error(task.loc("EmptyOrNullServerList")); + } + return mysqlServer; + } + + /** + * Get resource group name from mysql server url i.e Id + */ + private _getResourceGroupNameFromUrl(id: string): string{ + if(!id){ + throw new Error(task.loc("UnableToFindResourceGroupDueToNullId")); + } + const pathArray =id.split("/"); + if(pathArray[3] != 'resourceGroups'){ + throw new Error(task.loc("UnableToFindResourceGroupDueToInvalidId")); + } + return pathArray[4]; + } + +} diff --git a/_generated/AzureMysqlDeploymentV1_Node16/operations/MysqlUtiliy.ts b/_generated/AzureMysqlDeploymentV1_Node16/operations/MysqlUtiliy.ts new file mode 100644 index 000000000000..cc9ce6bb7f1f --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1_Node16/operations/MysqlUtiliy.ts @@ -0,0 +1,202 @@ + +import task = require('azure-pipelines-task-lib/task'); +export class Utility { + + /** + * Is name valid or not + */ + public static isNameValid(name: string): boolean { + if (name === null || name === undefined || typeof name.valueOf() !== 'string') { + return false; + }else{ + return true; + } + } + + /** + * Get all the additional argumeent passed + * @param argString argument string + */ + public static getAdditionalArgumentForTelemtry(argString: string) : string[]{ + var args = []; + var options = Utility.getMysqlOptions(); + options.forEach((option) => { + var matched = argString.match(option); + if(matched && matched.length > 0 ){ + args.push(option); + } + }); + task.debug("additional argument passed: "+ JSON.stringify(args)); + return args; + } + + public static getMysqlOptions() : string [] + { + return [ + "--auto-rehash", + "--auto-vertical-output", + "--batch", + "-B", + "--binary-as-hex", + "-b", + "--help", + "--binary-mode", + "--bind-address", + "--character-sets-dir", + "--column-names", + "--column-type-info", + "--comments", + "-c", + "--compress", + "-C", + "--connect-expired-password", + "--database=db_name", + "-D", + "--debug[=debug_options]", + "-#", + "--debug-check", + "--debug-info", + "-T", + "--default-auth", + "--default-character-set", + "--defaults-extra-file", + "--defaults-file", + "--defaults-group-suffix", + "--delimiter", + "--disable-named-commands", + "--enable-cleartext-plugin", + "--execute=statement", + "-e", + "--force", + "-f", + "--histignore", + "--host=host_name", + "-h", + "--html", + "-H", + "--ignore-spaces", + "-i", + "--init-command", + "--line-numbers", + "--local-infile", + "--login-path", + "--named-commands", + "-G", + "--no-auto-rehash", + "-A", + "--no-beep", + "-b", + "--no-defaults", + "--one-database", + "-o", + "--pager", + "--password", + "-p", + "--pipe", + "-W", + "--plugin-dir", + "--port", + "-P", + "--print-defaults", + "--prompt", + "--protocol", + "--quick", + "-q", + "--raw", + "-r", + "--reconnect", + "--safe-updates", + "--i-am-a-dummy", + "-U", + "--secure-auth", + "--server-public-key-path", + "--shared-memory-base-name", + "--show-warnings", + "--sigint-ignore", + "--silent", + "-s", + "--skip-column-names", + "-N", + "--skip-line-numbers", + "-L", + "--socket=path", + "-S", + "--ssl", + "--syslog", + "-j", + "--table", + "-t", + "--tee", + "--tls-version", + "--unbuffered", + "-n", + "--user", + "-u", + "--verbose", + "-v", + "--version", + "-V", + "--vertical", + "-E", + "--wait", + "-w", + "--xml", + "-X", + "--connect_timeout", + "--max_allowed_packet", + "--max_join_size", + "--net_buffer_length", + "--select_limit" + ]; + } + + public static argStringToArray(argString): string[] { + var args = []; + var inQuotes = false; + var escaped = false; + var arg = ''; + var append = function (c) { + // we only escape double quotes. + if (escaped && c !== '"') { + arg += '\\'; + } + arg += c; + escaped = false; + }; + for (var i = 0; i < argString.length; i++) { + var c = argString.charAt(i); + if (c === '"') { + if (!escaped) { + inQuotes = !inQuotes; + } + else { + append(c); + } + continue; + } + if (c === "\\" && inQuotes) { + if(escaped) { + append(c); + } + else { + escaped = true; + } + + continue; + } + if (c === ' ' && !inQuotes) { + if (arg.length > 0) { + args.push(arg); + arg = ''; + } + continue; + } + append(c); + } + if (arg.length > 0) { + args.push(arg.trim()); + } + return args; + } + +} \ No newline at end of file diff --git a/_generated/AzureMysqlDeploymentV1_Node16/operations/ToolPathOperations.ts b/_generated/AzureMysqlDeploymentV1_Node16/operations/ToolPathOperations.ts new file mode 100644 index 000000000000..a5cbcb2f88ec --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1_Node16/operations/ToolPathOperations.ts @@ -0,0 +1,170 @@ +import task = require('azure-pipelines-task-lib/task'); +var winreg = require('winreg'); +import Q = require('q'); + +export class ToolPathOperations { + + /** + * Get installed path of mysql either it is linux or windows + */ + public async getInstalledPathOfMysql(): Promise { + let defer = Q.defer(); + // To check either it is linux or windows platform + if(task.osType().match(/^Win/)){ + this.getInstalledPathOfMysqlForWindow().then((path) => { + defer.resolve(path); + },(error) =>{ + task.debug("Error during window mysql path finding: "+ error); + defer.reject(task.loc("WindowMysqlClientMissingError")); + }); + } + else{ + // linux check + this.getInstalledPathOfMysqlForLinux().then((path) => { + defer.resolve(path); + },(error) =>{ + task.debug("Error during linux mysql path finding: "+ error); + defer.reject(task.loc("LinuxMysqlClientMissingError")); + }); + } + + return defer.promise; + } + + + /** + * Get installed path of mysql for Linux + */ + public async getInstalledPathOfMysqlForLinux(): Promise { + let defer = Q.defer(); + try{ + const path = task.which("mysql", true); + defer.resolve(path); + }catch(error){ + defer.reject(error); + } + + return defer.promise; + } + + /** + * Get installed path of mysql for windows + */ + public async getInstalledPathOfMysqlForWindow(): Promise { + let defer = Q.defer(); + // If user has installed 32 bit mysql client in 64 bit machine + this.getInstalledLocationFromPath("\\Software\\Wow6432Node\\MySQL AB").then((path) => { + task.debug('Window Wow6432 mysql executable path: '+path); + defer.resolve(path + "bin\\mysql.exe"); + },(error) =>{ + task.debug("Error during finding of Window Wow6432 mysql executable path: "+ error); + this.getInstalledLocationFromPath("\\Software\\MySQL AB").then((path) => { + task.debug('Window mysql executable path: '+path); + defer.resolve(path + "bin\\mysql.exe"); + },(error) =>{ + task.debug("Error during finding of Window mysql executable path: "+ error); + try{ + const path = task.which("mysql", true); + if(path){ + task.debug('Window mysql executable path from enviroment variable: '+path); + defer.resolve(path); + }else{ + defer.reject(task.loc("NotAbleToGetInstalledLocationOfMysqlFromPath")); + } + } + catch(exception){ + task.debug("Error during finding of Window mysql executable path from environment path: "+ exception); + defer.reject(task.loc("NotAbleToGetInstalledLocationOfMysqlFromPath")); + } + }); + }); + return defer.promise; + } + + + /** + * Get installed location from path + * @param path path of window registry + * + * @returns installed path + */ + public async getInstalledLocationFromPath(path: string): Promise { + let defer = Q.defer(); + task.debug('Getting executable path of mysql client for registry path: '+ path); + this._getToolRegKeyFromPath(path).then((regKey) => { + this._getToolInstalledPathFromRegKey(regKey).then((installedPath) => { + defer.resolve(installedPath); + },(error) =>{ + defer.reject(error); + }) + },(error) =>{ + defer.reject(error); + }); + + return defer.promise; + } + + /** + * Get resgistry key from path + * @param path path of window registry + * + * @returns registry key + */ + private _getToolRegKeyFromPath(path: string): Q.Promise { + var defer = Q.defer(); + var regKey = new winreg({ + hive: winreg.HKLM, + key: path + }); + + regKey.keys(function(err, subRegKeys) { + if(err) { + task.debug('Error during fetching registry key from path: '+ err); + defer.reject(new Error(task.loc("UnableToFindMysqlFromRegistryOnMachineError", err))); + } + let resgistryKeyResult: string; + if(subRegKeys){ + for(var index in subRegKeys) { + let subRegKey: string = subRegKeys[index].key; + if(subRegKey.match("MySQL Server")){ + task.debug('Window mysql registry key: '+ subRegKey); + resgistryKeyResult = subRegKey; + } + } + } + if(resgistryKeyResult){ + defer.resolve(resgistryKeyResult); + }else{ + defer.reject(new Error(task.loc("UnableToFindMysqlFromRegistry"))); + } + }); + + return defer.promise; + } + + /** + * Get installed path from registry key + * @param registryKey window registry key + * + * @returns installed path + */ + private _getToolInstalledPathFromRegKey(registryKey: string): Q.Promise { + var defer = Q.defer(); + var regKey = new winreg({ + hive: winreg.HKLM, + key: registryKey + }); + + regKey.get("Location", function(err,item) { + if(err) { + task.debug('Error during fetching installed path from registry key: '+ err); + defer.reject(new Error(task.loc("UnableToFindTheLocationOfMysqlFromRegistryOnMachineError", err))); + }else{ + task.debug('Window mysql installed path from registry key: '+ item.value); + defer.resolve(item.value); + } + }); + + return defer.promise; + } +} diff --git a/_generated/AzureMysqlDeploymentV1_Node16/package-lock.json b/_generated/AzureMysqlDeploymentV1_Node16/package-lock.json new file mode 100644 index 000000000000..d5025e74ad86 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1_Node16/package-lock.json @@ -0,0 +1,1073 @@ +{ + "name": "vsts-tasks-azuremysql", + "version": "1.0.3", + "lockfileVersion": 1, + "requires": true, + "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.18.38", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.38.tgz", + "integrity": "sha512-6sfo1qTulpVbkxECP+AVrHV9OoJqhzCsfTNp5NIG+enM4HyM3HvZCO798WShIXBN0+QtDIcutJCjsVYnQP5rIQ==" + }, + "@types/q": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.0.7.tgz", + "integrity": "sha512-0WS7XU7sXzQ7J1nbnMKKYdjrrFoO3YtZYgUzeV8JFXffPnHfvSJQleR70I8BOAsOm14i4dyaAZ3YzqIl1YhkXQ==" + }, + "@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==" + }, + "@xmldom/xmldom": { + "version": "git+https://github.com/xmldom/xmldom.git#238b1ea8431fae8817812c68d55b4933248af07e", + "from": "git+https://github.com/xmldom/xmldom.git#0.8.6" + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "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" + } + }, + "archiver": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-1.2.0.tgz", + "integrity": "sha512-5GQRAgpHGPwWIiMzL9lthd+t75fLi8BpRBYtflomSYv2i6+EO9trtwWAm2+zGjIuwKmVmBRknAZFFBSqxYxiJw==", + "requires": { + "archiver-utils": "^1.3.0", + "async": "^2.0.0", + "buffer-crc32": "^0.2.1", + "glob": "^7.0.0", + "lodash": "^4.8.0", + "readable-stream": "^2.0.0", + "tar-stream": "^1.5.0", + "zip-stream": "^1.1.0" + } + }, + "archiver-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-1.3.0.tgz", + "integrity": "sha512-h+hTREBXcW5e1L9RihGXdH4PHHdGipG/jE2sMZrqIH6BmZAxeGU5IWjVsKhokdCSWX7km6Kkh406zZNEElHFPQ==", + "requires": { + "glob": "^7.0.0", + "graceful-fs": "^4.1.0", + "lazystream": "^1.0.0", + "lodash": "^4.8.0", + "normalize-path": "^2.0.0", + "readable-stream": "^2.0.0" + } + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" + }, + "async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "requires": { + "lodash": "^4.17.14" + } + }, + "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==" + }, + "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.4.0", + "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.4.0.tgz", + "integrity": "sha512-JgtxfjxjRA+KWY0Q5UC1fo48nkbVxFHgKEuasKdJMSNxHydOyNlB5MNw4UTiTXp9b0nnqKeOQOBn5RN3go3aPg==", + "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.4", + "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-azure-arm-rest/-/azure-pipelines-tasks-azure-arm-rest-3.223.4.tgz", + "integrity": "sha512-3RPwQfTk38HYGOCTmG2+UVM2JClaUV76YVqYrR/AhShMMFkg1wQIbpQZ7PLUh0YPbyWqFhmdaZla0JTRL9MWkg==", + "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==" + } + } + }, + "azure-pipelines-tasks-webdeployment-common": { + "version": "4.224.0", + "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-webdeployment-common/-/azure-pipelines-tasks-webdeployment-common-4.224.0.tgz", + "integrity": "sha512-QtVIYyv53apHI7+UM7Tk2Bo326iqnHT1NBNPxd0inA4q3ktC4sx7Wjv6HucuZ9bbd/4BqBezvvlZCtwwxsNlKw==", + "requires": { + "@types/mocha": "^5.2.7", + "@types/node": "^10.17.0", + "@xmldom/xmldom": "git+https://github.com/xmldom/xmldom.git#0.8.6", + "archiver": "1.2.0", + "azure-pipelines-task-lib": "^4.2.0", + "decompress-zip": "^0.3.3", + "ltx": "2.8.0", + "q": "1.4.1", + "winreg": "1.2.2", + "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==" + } + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "binary": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", + "integrity": "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==", + "requires": { + "buffers": "~0.1.1", + "chainsaw": "~0.1.0" + } + }, + "bl": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", + "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", + "requires": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, + "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-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==" + }, + "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==" + }, + "buffers": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", + "integrity": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==" + }, + "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==" + }, + "chainsaw": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==", + "requires": { + "traverse": ">=0.3.0 <0.4" + } + }, + "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" + } + }, + "compress-commons": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-1.1.0.tgz", + "integrity": "sha512-KUqWogolHagukw9esQyDGS65EBNbohRpBbrINRB7HTID4o9IdZ0pahB/xwk3LYri7IHb4qjfEDXrzW4qL1DJTQ==", + "requires": { + "buffer-crc32": "^0.2.1", + "crc32-stream": "^1.0.0", + "normalize-path": "^2.0.0", + "readable-stream": "^2.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==" + }, + "crc32-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-1.0.0.tgz", + "integrity": "sha512-LP/XL3xovNa9MOfZCdA4j0nEMrRibcP63vVbuq4FLb2jsMKc+QS7x/qoZOPDgDRxjDC+a5hk/gaYBM5kqVSGNg==", + "requires": { + "buffer-crc32": "^0.2.1", + "readable-stream": "^2.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" + } + }, + "decompress-zip": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/decompress-zip/-/decompress-zip-0.3.3.tgz", + "integrity": "sha512-/fy1L4s+4jujqj3kNptWjilFw3E6De8U6XUFvqmh4npN3Vsypm3oT2V0bXcmbBWS+5j5tr4okYaFrOmyZkszEg==", + "requires": { + "binary": "^0.3.0", + "graceful-fs": "^4.1.3", + "mkpath": "^0.1.0", + "nopt": "^3.0.1", + "q": "^1.1.2", + "readable-stream": "^1.1.8", + "touch": "0.0.3" + }, + "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==" + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, + "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" + } + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "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" + } + } + } + }, + "graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "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==" + } + } + }, + "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.12.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", + "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", + "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==" + }, + "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" + }, + "dependencies": { + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" + } + } + }, + "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" + } + }, + "lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "requires": { + "readable-stream": "^2.0.5" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "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==" + }, + "ltx": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/ltx/-/ltx-2.8.0.tgz", + "integrity": "sha512-SJJUrmDgXP0gkUzgErfkaeD+pugM8GYxerTALQa1gTUb5W1wrC4k07GZU+QNZd7MpFqJSYWXTQSUy8Ps03hx5Q==", + "requires": { + "inherits": "^2.0.1" + } + }, + "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" + } + }, + "mkpath": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/mkpath/-/mkpath-0.1.0.tgz", + "integrity": "sha512-bauHShmaxVQiEvlrAPWxSPn8spSL8gDVRl11r8vLT4r/KdnknLqtqwQbToZ2Oa8sJkExYY1z6/d+X7pNiqo4yg==" + }, + "mockery": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mockery/-/mockery-2.1.0.tgz", + "integrity": "sha512-9VkOmxKlWXoDO/h1jDZaS4lH33aWfRiJiNT/tKj+8OGzrcFDLo8d0syGdbsc3Bc4GvRXPb+NMMvojotmuGJTvA==" + }, + "moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" + }, + "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.6.12", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz", + "integrity": "sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", + "requires": { + "abbrev": "1" + } + }, + "normalize-path": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.0.1.tgz", + "integrity": "sha512-jxWwhoRh27+8aiYjkOl0pPfGPvYr2Y6iMC71HUtSGz2BwSvxlxjv8o0bNF28ex6zY02Yn2FJLWFOpEkZGWFo3A==" + }, + "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.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" + } + }, + "resolve": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", + "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "requires": { + "is-core-module": "^2.11.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==" + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "semver": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", + "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==" + }, + "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" + } + }, + "tar-stream": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.5.2.tgz", + "integrity": "sha512-X2iZpARyDjlkj6Tz3nlI1lY4a4k+xEatPgQg7O2WiUMTXIrjVp8R86K3AdWfHp+Q3jsaLE2FLlHES+PA5zwAhA==", + "requires": { + "bl": "^1.0.0", + "end-of-stream": "^1.0.0", + "readable-stream": "^2.0.0", + "xtend": "^4.0.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==" + } + } + }, + "touch": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/touch/-/touch-0.0.3.tgz", + "integrity": "sha512-/LQ54KM9rPf3rGXGo2UPQWx3ol242Zg6Whq27H5DEmZhCJo+pm9N5BzRGepO9vTVhYxpXJdcc1+3uaYt9NyeKg==", + "requires": { + "nopt": "~1.0.10" + }, + "dependencies": { + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "requires": { + "abbrev": "1" + } + } + } + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==" + }, + "tslib": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.0.tgz", + "integrity": "sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA==" + }, + "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==" + }, + "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" + } + }, + "winreg": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/winreg/-/winreg-1.2.2.tgz", + "integrity": "sha512-I1mQ2HDZbOXm3XctfGPNzm9p/md7FAxHtACVFeBNrnOE4p4b3a0baqNObx1OqHE8DEx25l5CaCDipxFM5FSYOg==" + }, + "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.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" + } + }, + "xmlbuilder": { + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", + "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==" + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "zip-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-1.1.0.tgz", + "integrity": "sha512-i7SEKvFC1yGW8GpOXhYuoJb/REf/Y8JQA5ljYLeF7IsOtW/j9cVVSjXd8Ww27pNqt0TXgB4LmulXdAC22de7YQ==", + "requires": { + "archiver-utils": "^1.3.0", + "compress-commons": "^1.1.0", + "lodash": "^4.8.0", + "readable-stream": "^2.0.0" + } + } + } +} diff --git a/_generated/AzureMysqlDeploymentV1_Node16/package.json b/_generated/AzureMysqlDeploymentV1_Node16/package.json new file mode 100644 index 000000000000..5dfc63d185ea --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1_Node16/package.json @@ -0,0 +1,40 @@ +{ + "name": "vsts-tasks-azuremysql", + "version": "1.0.3", + "description": "Azure Pipelines Azure MySQL", + "main": "azuremysqldeploy.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/mocha": "^5.2.7", + "@types/node": "^16.11.39", + "@types/q": "1.0.7", + "agent-base": "^6.0.2", + "azure-pipelines-task-lib": "^4.4.0", + "azure-pipelines-tasks-azure-arm-rest": "^3.223.4", + "azure-pipelines-tasks-webdeployment-common": "^4.222.0", + "compress-commons": "1.1.0", + "crc32-stream": "1.0.0", + "moment": "^2.29.4", + "normalize-path": "2.0.1", + "q": "1.4.1", + "semver": "5.4.1", + "tar-stream": "1.5.2", + "winreg": "1.2.2", + "zip-stream": "1.1.0" + }, + "devDependencies": { + "typescript": "4.0.2" + } +} diff --git a/_generated/AzureMysqlDeploymentV1_Node16/sql/ISqlClient.ts b/_generated/AzureMysqlDeploymentV1_Node16/sql/ISqlClient.ts new file mode 100644 index 000000000000..abe44e648668 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1_Node16/sql/ISqlClient.ts @@ -0,0 +1,19 @@ +import { FirewallConfiguration } from '../models/FirewallConfiguration'; + +export interface ISqlClient { + + /** + * Get firewall configuration either Ip address is already added or not + * + * @returns FirewallConfiguration contains isIpAddress already whitelisted and If it is not Ip address of agent + */ + getFirewallConfiguration(): FirewallConfiguration; + + /** + * Execute sql command in asynchronously + * + * @returns response code promise + */ + executeSqlCommand(): Promise; + +} diff --git a/_generated/AzureMysqlDeploymentV1_Node16/sql/MysqlClient.ts b/_generated/AzureMysqlDeploymentV1_Node16/sql/MysqlClient.ts new file mode 100644 index 000000000000..5d631b9dcbd7 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1_Node16/sql/MysqlClient.ts @@ -0,0 +1,133 @@ +import { ISqlClient } from './ISqlClient'; +import { FirewallConfiguration } from '../models/FirewallConfiguration'; +import { AzureMysqlTaskParameter } from '../models/AzureMysqlTaskParameter'; +import { Utility } from '../operations/MysqlUtiliy'; +import * as telemetry from '../telemetry'; +import task = require("azure-pipelines-task-lib/task"); +var packageUtility = require('azure-pipelines-tasks-webdeployment-common/packageUtility.js'); +import Q = require('q'); + +export class MysqlClient implements ISqlClient { + private _azureMysqlTaskParameter: AzureMysqlTaskParameter; + private _hostName: string; + private _toolPath: string; + + constructor(azureMysqlTaskParameter: AzureMysqlTaskParameter, serverName: string, toolPath: string) { + if (!azureMysqlTaskParameter) { + throw new Error(task.loc("AzureMysqlTaskParameterCannotBeEmpty")); + } + if (!serverName ||typeof serverName.valueOf() !== 'string') { + throw new Error(task.loc("MysqlServerNameCannotBeEmpty")); + } + if (!toolPath ||typeof toolPath.valueOf() !== 'string') { + throw new Error(task.loc("ToolPathCannotBeNull")); + } + + this._azureMysqlTaskParameter = azureMysqlTaskParameter; + this._hostName = serverName; + this._toolPath = toolPath; + } + + /** + * Get Firewall configuration related to agent box + */ + public getFirewallConfiguration(): FirewallConfiguration { + let firewallConfiguration: FirewallConfiguration = new FirewallConfiguration(true); + // Regex to extract Ip Address from string + const regexToGetIpAddress = /\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/; + const result = task.execSync(this._toolPath, Utility.argStringToArray(this._getArgumentString() +" "+ this._getAdditionalArgument())); + task.debug('Mysql server connection check result: '+JSON.stringify(result)); + // If agent is not whitelisted it will throw error with ip address + if(result && result.stderr){ + var ipAddresses = result.stderr.match(regexToGetIpAddress); + if(ipAddresses && ipAddresses.length > 0){ + firewallConfiguration = new FirewallConfiguration(false, ipAddresses[0]); + } + } + return firewallConfiguration; + } + + /** + * Get the connection argument for mysql + */ + private _getArgumentString(): string{ + let argumentString = "-h" + this._hostName + " -u" + this._azureMysqlTaskParameter.getSqlUserName() + " -p" + this._azureMysqlTaskParameter.getSqlPassword(); + return argumentString; + } + + /** + * Execute Mysql script + */ + public async executeSqlCommand() : Promise { + let defer = Q.defer(); + let argument: string = this._getArgumentString() +" "+ this._getAdditionalArgument(); + let additionalArgumentTelemtry = {additionalArguments: Utility.getAdditionalArgumentForTelemtry(this._getAdditionalArgument())}; + telemetry.emitTelemetry('TaskHub', 'AzureMysqlDeployment', additionalArgumentTelemtry); + if(this._azureMysqlTaskParameter.getDatabaseName()){ + // Creating databse if it doesn't exist + this._executeSqlScript(argument + this._createDatabaseScriptIfItDoesnotExist()).then((resultCode)=>{ + argument += this._azureMysqlTaskParameter.getDatabaseName() ? " -D" + this._azureMysqlTaskParameter.getDatabaseName() : ""; + // Running sql script passes by user + this._executeSqlScript(argument + this._getFileSourceArgument()).then((resultCode)=>{ + defer.resolve(resultCode); + },(error) => { + defer.reject(error); + }); + }).catch((error) => { + defer.reject(error); + }); + }else{ + argument += this._azureMysqlTaskParameter.getDatabaseName() ? " -D" + this._azureMysqlTaskParameter.getDatabaseName() : ""; + this._executeSqlScript(argument + this._getFileSourceArgument()).then((resultCode)=>{ + defer.resolve(resultCode); + },(error) => { + defer.reject(error); + }); + } + + return defer.promise; + } + + private _createDatabaseScriptIfItDoesnotExist() : string { + return " -e" + '"' + "CREATE DATABASE IF NOT EXISTS `" + this._azureMysqlTaskParameter.getDatabaseName() + "` ; " + '"' ; + } + + private async _executeSqlScript(argument: string): Promise { + let defer = Q.defer(); + task.debug('Started execution of mysql script'); + task.exec(this._toolPath, Utility.argStringToArray(argument)).then((resultCode)=>{ + task.debug('Script execution on mysql server result: '+ resultCode); + if(resultCode === 0){ + defer.resolve(resultCode); + }else{ + defer.reject(new Error(task.loc("SqlExecutionException", resultCode))); + } + },(error) => { + defer.reject(error); + }); + + return defer.promise; + } + + /** + * Additional connection argument passed by user + */ + private _getAdditionalArgument() : string{ + return this._azureMysqlTaskParameter.getSqlAdditionalArguments() ? this._azureMysqlTaskParameter.getSqlAdditionalArguments() : " "; + } + + /** + * Get connection argument to run script from file or inline + */ + private _getFileSourceArgument() : string { + let fileSourceArgument ; + if( this._azureMysqlTaskParameter.getTaskNameSelector() === 'InlineSqlTask' ) { + fileSourceArgument = " -e" + '"' + this._azureMysqlTaskParameter.getSqlInline() + '"'; + } + else { + fileSourceArgument = ` -e "source ${packageUtility.PackageUtility.getPackagePath(this._azureMysqlTaskParameter.getSqlFile()).replace(/\\/g, '/')};"`; + } + + return fileSourceArgument; + } +} diff --git a/_generated/AzureMysqlDeploymentV1_Node16/task.json b/_generated/AzureMysqlDeploymentV1_Node16/task.json new file mode 100644 index 000000000000..4545a6896b6a --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1_Node16/task.json @@ -0,0 +1,238 @@ +{ + "id": "BD1BED02-F04E-11E7-8C3F-9A214CF093AE", + "name": "AzureMysqlDeployment", + "friendlyName": "Azure Database for MySQL deployment", + "description": "Run your scripts and make changes to your Azure Database for MySQL", + "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/deploy/azure-mysql-deployment", + "helpMarkDown": "[Learn more about this task](https://aka.ms/mysqlazuredeployreadme)", + "category": "Deploy", + "visibility": [ + "Build", + "Release" + ], + "runsOn": [ + "Agent" + ], + "author": "Microsoft Corporation", + "version": { + "Major": 1, + "Minor": 226, + "Patch": 0 + }, + "demands": [], + "minimumAgentVersion": "1.100.0", + "groups": [ + { + "name": "target", + "displayName": "DB Details", + "isExpanded": true + }, + { + "name": "taskDetails", + "displayName": "Deployment Package", + "isExpanded": true + }, + { + "name": "firewall", + "displayName": "Firewall", + "isExpanded": false + } + ], + "inputs": [ + { + "name": "ConnectedServiceName", + "aliases": [ + "azureSubscription" + ], + "type": "connectedService:AzureRM", + "label": "Azure Subscription", + "defaultValue": "", + "required": true, + "helpMarkDown": "This is needed to connect to your Azure account.
To configure new service connection, select the Azure subscription from the list and click 'Authorize'.
If your subscription is not listed or if you want to use an existing Service Principal, you can setup an Azure service connection using 'Add' or 'Manage' button." + }, + { + "name": "ServerName", + "type": "pickList", + "label": "Host Name", + "required": true, + "defaultValue": "", + "groupName": "target", + "helpMarkDown": "Server name of 'Azure Database for MySQL'.Example: fabrikam.mysql.database.azure.com. When you connect using MySQL Workbench, this is the same value that is used for 'Hostname' in 'Parameters'", + "properties": { + "EditableOptions": "True" + } + }, + { + "name": "DatabaseName", + "type": "string", + "label": "Database Name", + "required": false, + "groupName": "target", + "defaultValue": "", + "helpMarkDown": "The name of database, if you already have one, on which the below script is needed to be run, else the script itself can be used to create the database." + }, + { + "name": "SqlUsername", + "type": "string", + "label": "Server Admin Login", + "required": true, + "groupName": "target", + "defaultValue": "", + "helpMarkDown": "Azure Database for MySQL server supports native MySQL authentication. You can connect and authenticate to a server with the server's admin login. Example: bbo1@fabrikam. When you connect using MySQL Workbench, this is the same value that is used for 'Username' in 'Parameters'." + }, + { + "name": "SqlPassword", + "type": "string", + "label": "Password", + "required": true, + "groupName": "target", + "defaultValue": "", + "helpMarkDown": "Administrator password for Azure Database for MySQL. In case you don’t recall the password you can change the password from [Azure portal](https://docs.microsoft.com/en-us/azure/mysql/howto-create-manage-server-portal).
It can be variable defined in the pipeline. Example : $(password).
Also, you may mark the variable type as 'secret' to secure it." + }, + { + "name": "TaskNameSelector", + "type": "pickList", + "label": "Type", + "required": false, + "helpMarkDown": "Select one of the options between Script File & Inline Script.", + "groupName": "taskDetails", + "defaultValue": "SqlTaskFile", + "options": { + "SqlTaskFile": "MySQL Script File", + "InlineSqlTask": "Inline MySQL Script" + } + }, + { + "name": "SqlFile", + "type": "filePath", + "label": "MySQL Script", + "required": true, + "groupName": "taskDetails", + "defaultValue": "", + "helpMarkDown": "Full path of the script file on the automation agent or on a UNC path accessible to the automation agent like, \\\\\\\\BudgetIT\\DeployBuilds\\script.sql. Also, predefined system variables like, $(agent.releaseDirectory) can also be used here. A file containing SQL statements can be used here.​", + "visibleRule": "TaskNameSelector = SqlTaskFile" + }, + { + "name": "SqlInline", + "type": "multiLine", + "label": "Inline MySQL Script", + "required": true, + "groupName": "taskDetails", + "defaultValue": "", + "helpMarkDown": "Enter the MySQL script to execute on the Database selected above.", + "visibleRule": "TaskNameSelector = InlineSqlTask", + "properties": { + "resizable": "true", + "rows": "10" + } + }, + { + "name": "SqlAdditionalArguments", + "type": "string", + "label": "Additional MySQL Arguments", + "required": false, + "groupName": "taskDetails", + "defaultValue": "", + "helpMarkDown": "Additional options supported by MySQL simple SQL shell. These options will be applied when executing the given file on the Azure Database for MySQL.​
Example: You can change to default tab separated output format to HTML or even XML format. Or if you have problems due to insufficient memory for large result sets, use the --quick option.​" + }, + { + "name": "IpDetectionMethod", + "type": "pickList", + "label": "Specify Firewall Rules Using", + "required": true, + "groupName": "firewall", + "defaultValue": "AutoDetect", + "options": { + "AutoDetect": "AutoDetect", + "IPAddressRange": "IPAddressRange" + }, + "helpMarkDown": "For successful execution of the task, we need to enable administrators to access the Azure Database for MySQL Server from the IP Address of the automation agent.
By selecting auto-detect you can automatically add firewall exception for range of possible IP Address of automation agent ​or else you can specify the range explicitly." + }, + { + "name": "StartIpAddress", + "type": "string", + "label": "Start IP Address", + "required": true, + "groupName": "firewall", + "defaultValue": "", + "visibleRule": "IpDetectionMethod = IPAddressRange", + "helpMarkDown": "The starting IP Address of the automation agent machine pool like 196.21.30.50 ." + }, + { + "name": "EndIpAddress", + "type": "string", + "label": "End IP Address", + "required": true, + "groupName": "firewall", + "defaultValue": "", + "visibleRule": "IpDetectionMethod = IPAddressRange", + "helpMarkDown": "The ending IP Address of the automation agent machine pool like 196.21.30.65 ." + }, + { + "name": "DeleteFirewallRule", + "type": "boolean", + "label": "Delete Rule After Task Ends", + "required": false, + "groupName": "firewall", + "defaultValue": "true", + "helpMarkDown": "If selected, the added exception for IP addresses of the automation agent will be removed for corresponding Azure Database for MySQL." + } + ], + "dataSourceBindings": [ + { + "target": "ServerName", + "endpointId": "$(ConnectedServiceName)", + "dataSourceName": "AzureMysqlServers", + "resultTemplate": "{ \"Value\" : \"{{{properties.fullyQualifiedDomainName}}}\", \"DisplayValue\" : \"{{{properties.fullyQualifiedDomainName}}}\" }" + } + ], + "instanceNameFormat": "Execute Azure MySQL : $(TaskNameSelector)", + "execution": { + "Node10": { + "target": "azuremysqldeploy.js" + }, + "Node16": { + "target": "azuremysqldeploy.js", + "argumentFormat": "" + } + }, + "messages": { + "ARGD_ConstructorFailed": "The task failed while initializing. Error: %s .", + "FirewallRuleNameCannotBeEmpty": "The firewall rule name cannot be null.", + "FirewallAddressRangeCannotBeEmpty": "The firewall address cannot be null.", + "StartIpAddressCannotBeEmpty": "The start IP address of the firewall rule cannot be null.", + "EndIpAddressCannotBeEmpty": "The end IP address of the firewall rule cannot be null.", + "MysqlServerNameCannotBeEmpty": "The MySQL server name cannot be null.", + "MysqlFullyQualifiedServerNameCannotBeEmpty": "The MySQL server fully qualified name cannot be null.", + "ResourceGroupCannotBeEmpty": "The resource group name cannot be null.", + "NotAbleToAddFirewallRule": "An error occurred while adding the firewall rule to the MySQL server. Error: %s .", + "NotAbleToDeleteFirewallRule": "An error occurred while deleting the firewall rule from the MySQL server. Error: %s .", + "AgentIpAddressIsMissingInAddedFirewallRule": "The agent IP address is missing in the manually added firewall rule.", + "NotAbleToGetAllServers": "Failed to retrieve all MySQL servers of a subscription. Error: %s .", + "EmptyOrNullServerList": "The MySQL server list is empty. The MySQL server host name is invalid.", + "UnableToFindResourceGroupDueToNullId": "Unable to find the resource group due to a null ID.", + "UnableToFindResourceGroupDueToInvalidId": "Unable to find the resource group due to an invalid ID.", + "NotAbleToGetInstalledLocationOfMysqlFromPath": "The MySQL client is missing on the agent machine.", + "UnableToFindMysqlFromRegistryOnMachineError": "Unable to find MySQL using the registry on the machine.", + "UnableToFindMysqlFromRegistry": "Unable to find MySQL using the registry. Error: %s .", + "UnableToFindTheLocationOfMysqlFromRegistryOnMachineError": "Unable to find the location of MySQL using the registry on the machine. Error: %s .", + "AzureMysqlTaskParameterCannotBeEmpty": "The Azure MySQL task parameter cannot be null.", + "ToolPathCannotBeNull": "Tool path cannot be null.", + "SqlExecutionException": "A SQL execution exception occurred. Please check the SQL script. Error: %s .", + "AzureEndpointCannotBeNull": "Invalid subscription name. The Azure service connection cannot be null.", + "CallbackCannotBeNull": "The callback cannot be null.", + "UnableToCreateDatabaseException": "Unable to create database.", + "WindowMysqlClientMissingError": "MySQL client is missing on the Windows agent machine. Please install it by running the MySQL client installer 'https://aka.ms/window-mysqlcli-installer' script file on the agent machine.", + "LinuxMysqlClientMissingError": "MySQL client is missing on the Linux agent machine. Please install it by running 'sudo apt-get install mysql-client'.", + "CouldNotFetchAccessTokenforAzureStatusCode": "Could not retrieve an access token for Azure. Status code: %s. Status message: %s", + "CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "Could not retrieve an access token for the managed service principal. Please configure Managed Service Identity (MSI) for the virtual machine. See 'https://aka.ms/azure-msi-docs'.Assign role to created MSI Identity. See 'https://aka.ms/assign-role-msi'. Status code: %s. Status message: %s", + "CouldNotFetchAccessTokenforMSIStatusCode": "Could not retrieve an access token for the managed service principal. Status code: %s. Status message: %s", + "NotAbleToCreateFirewallRule": "Getting error during adding firewall rule to Azure mysql server. Error: %s", + "ExpiredServicePrincipal": "Could not fetch access token for Azure. Verify if the Service Principal used is valid and not expired.", + "Nopackagefoundwithspecifiedpattern": "No package found with specified pattern" + }, + "_buildConfigMapping": { + "Default": "1.226.1", + "Node16-225": "1.226.0" + } +} \ No newline at end of file diff --git a/_generated/AzureMysqlDeploymentV1_Node16/task.loc.json b/_generated/AzureMysqlDeploymentV1_Node16/task.loc.json new file mode 100644 index 000000000000..a3ba1ab1e39b --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1_Node16/task.loc.json @@ -0,0 +1,238 @@ +{ + "id": "BD1BED02-F04E-11E7-8C3F-9A214CF093AE", + "name": "AzureMysqlDeployment", + "friendlyName": "ms-resource:loc.friendlyName", + "description": "ms-resource:loc.description", + "helpUrl": "https://docs.microsoft.com/azure/devops/pipelines/tasks/deploy/azure-mysql-deployment", + "helpMarkDown": "ms-resource:loc.helpMarkDown", + "category": "Deploy", + "visibility": [ + "Build", + "Release" + ], + "runsOn": [ + "Agent" + ], + "author": "Microsoft Corporation", + "version": { + "Major": 1, + "Minor": 226, + "Patch": 0 + }, + "demands": [], + "minimumAgentVersion": "1.100.0", + "groups": [ + { + "name": "target", + "displayName": "ms-resource:loc.group.displayName.target", + "isExpanded": true + }, + { + "name": "taskDetails", + "displayName": "ms-resource:loc.group.displayName.taskDetails", + "isExpanded": true + }, + { + "name": "firewall", + "displayName": "ms-resource:loc.group.displayName.firewall", + "isExpanded": false + } + ], + "inputs": [ + { + "name": "ConnectedServiceName", + "aliases": [ + "azureSubscription" + ], + "type": "connectedService:AzureRM", + "label": "ms-resource:loc.input.label.ConnectedServiceName", + "defaultValue": "", + "required": true, + "helpMarkDown": "ms-resource:loc.input.help.ConnectedServiceName" + }, + { + "name": "ServerName", + "type": "pickList", + "label": "ms-resource:loc.input.label.ServerName", + "required": true, + "defaultValue": "", + "groupName": "target", + "helpMarkDown": "ms-resource:loc.input.help.ServerName", + "properties": { + "EditableOptions": "True" + } + }, + { + "name": "DatabaseName", + "type": "string", + "label": "ms-resource:loc.input.label.DatabaseName", + "required": false, + "groupName": "target", + "defaultValue": "", + "helpMarkDown": "ms-resource:loc.input.help.DatabaseName" + }, + { + "name": "SqlUsername", + "type": "string", + "label": "ms-resource:loc.input.label.SqlUsername", + "required": true, + "groupName": "target", + "defaultValue": "", + "helpMarkDown": "ms-resource:loc.input.help.SqlUsername" + }, + { + "name": "SqlPassword", + "type": "string", + "label": "ms-resource:loc.input.label.SqlPassword", + "required": true, + "groupName": "target", + "defaultValue": "", + "helpMarkDown": "ms-resource:loc.input.help.SqlPassword" + }, + { + "name": "TaskNameSelector", + "type": "pickList", + "label": "ms-resource:loc.input.label.TaskNameSelector", + "required": false, + "helpMarkDown": "ms-resource:loc.input.help.TaskNameSelector", + "groupName": "taskDetails", + "defaultValue": "SqlTaskFile", + "options": { + "SqlTaskFile": "MySQL Script File", + "InlineSqlTask": "Inline MySQL Script" + } + }, + { + "name": "SqlFile", + "type": "filePath", + "label": "ms-resource:loc.input.label.SqlFile", + "required": true, + "groupName": "taskDetails", + "defaultValue": "", + "helpMarkDown": "ms-resource:loc.input.help.SqlFile", + "visibleRule": "TaskNameSelector = SqlTaskFile" + }, + { + "name": "SqlInline", + "type": "multiLine", + "label": "ms-resource:loc.input.label.SqlInline", + "required": true, + "groupName": "taskDetails", + "defaultValue": "", + "helpMarkDown": "ms-resource:loc.input.help.SqlInline", + "visibleRule": "TaskNameSelector = InlineSqlTask", + "properties": { + "resizable": "true", + "rows": "10" + } + }, + { + "name": "SqlAdditionalArguments", + "type": "string", + "label": "ms-resource:loc.input.label.SqlAdditionalArguments", + "required": false, + "groupName": "taskDetails", + "defaultValue": "", + "helpMarkDown": "ms-resource:loc.input.help.SqlAdditionalArguments" + }, + { + "name": "IpDetectionMethod", + "type": "pickList", + "label": "ms-resource:loc.input.label.IpDetectionMethod", + "required": true, + "groupName": "firewall", + "defaultValue": "AutoDetect", + "options": { + "AutoDetect": "AutoDetect", + "IPAddressRange": "IPAddressRange" + }, + "helpMarkDown": "ms-resource:loc.input.help.IpDetectionMethod" + }, + { + "name": "StartIpAddress", + "type": "string", + "label": "ms-resource:loc.input.label.StartIpAddress", + "required": true, + "groupName": "firewall", + "defaultValue": "", + "visibleRule": "IpDetectionMethod = IPAddressRange", + "helpMarkDown": "ms-resource:loc.input.help.StartIpAddress" + }, + { + "name": "EndIpAddress", + "type": "string", + "label": "ms-resource:loc.input.label.EndIpAddress", + "required": true, + "groupName": "firewall", + "defaultValue": "", + "visibleRule": "IpDetectionMethod = IPAddressRange", + "helpMarkDown": "ms-resource:loc.input.help.EndIpAddress" + }, + { + "name": "DeleteFirewallRule", + "type": "boolean", + "label": "ms-resource:loc.input.label.DeleteFirewallRule", + "required": false, + "groupName": "firewall", + "defaultValue": "true", + "helpMarkDown": "ms-resource:loc.input.help.DeleteFirewallRule" + } + ], + "dataSourceBindings": [ + { + "target": "ServerName", + "endpointId": "$(ConnectedServiceName)", + "dataSourceName": "AzureMysqlServers", + "resultTemplate": "{ \"Value\" : \"{{{properties.fullyQualifiedDomainName}}}\", \"DisplayValue\" : \"{{{properties.fullyQualifiedDomainName}}}\" }" + } + ], + "instanceNameFormat": "ms-resource:loc.instanceNameFormat", + "execution": { + "Node10": { + "target": "azuremysqldeploy.js" + }, + "Node16": { + "target": "azuremysqldeploy.js", + "argumentFormat": "" + } + }, + "messages": { + "ARGD_ConstructorFailed": "ms-resource:loc.messages.ARGD_ConstructorFailed", + "FirewallRuleNameCannotBeEmpty": "ms-resource:loc.messages.FirewallRuleNameCannotBeEmpty", + "FirewallAddressRangeCannotBeEmpty": "ms-resource:loc.messages.FirewallAddressRangeCannotBeEmpty", + "StartIpAddressCannotBeEmpty": "ms-resource:loc.messages.StartIpAddressCannotBeEmpty", + "EndIpAddressCannotBeEmpty": "ms-resource:loc.messages.EndIpAddressCannotBeEmpty", + "MysqlServerNameCannotBeEmpty": "ms-resource:loc.messages.MysqlServerNameCannotBeEmpty", + "MysqlFullyQualifiedServerNameCannotBeEmpty": "ms-resource:loc.messages.MysqlFullyQualifiedServerNameCannotBeEmpty", + "ResourceGroupCannotBeEmpty": "ms-resource:loc.messages.ResourceGroupCannotBeEmpty", + "NotAbleToAddFirewallRule": "ms-resource:loc.messages.NotAbleToAddFirewallRule", + "NotAbleToDeleteFirewallRule": "ms-resource:loc.messages.NotAbleToDeleteFirewallRule", + "AgentIpAddressIsMissingInAddedFirewallRule": "ms-resource:loc.messages.AgentIpAddressIsMissingInAddedFirewallRule", + "NotAbleToGetAllServers": "ms-resource:loc.messages.NotAbleToGetAllServers", + "EmptyOrNullServerList": "ms-resource:loc.messages.EmptyOrNullServerList", + "UnableToFindResourceGroupDueToNullId": "ms-resource:loc.messages.UnableToFindResourceGroupDueToNullId", + "UnableToFindResourceGroupDueToInvalidId": "ms-resource:loc.messages.UnableToFindResourceGroupDueToInvalidId", + "NotAbleToGetInstalledLocationOfMysqlFromPath": "ms-resource:loc.messages.NotAbleToGetInstalledLocationOfMysqlFromPath", + "UnableToFindMysqlFromRegistryOnMachineError": "ms-resource:loc.messages.UnableToFindMysqlFromRegistryOnMachineError", + "UnableToFindMysqlFromRegistry": "ms-resource:loc.messages.UnableToFindMysqlFromRegistry", + "UnableToFindTheLocationOfMysqlFromRegistryOnMachineError": "ms-resource:loc.messages.UnableToFindTheLocationOfMysqlFromRegistryOnMachineError", + "AzureMysqlTaskParameterCannotBeEmpty": "ms-resource:loc.messages.AzureMysqlTaskParameterCannotBeEmpty", + "ToolPathCannotBeNull": "ms-resource:loc.messages.ToolPathCannotBeNull", + "SqlExecutionException": "ms-resource:loc.messages.SqlExecutionException", + "AzureEndpointCannotBeNull": "ms-resource:loc.messages.AzureEndpointCannotBeNull", + "CallbackCannotBeNull": "ms-resource:loc.messages.CallbackCannotBeNull", + "UnableToCreateDatabaseException": "ms-resource:loc.messages.UnableToCreateDatabaseException", + "WindowMysqlClientMissingError": "ms-resource:loc.messages.WindowMysqlClientMissingError", + "LinuxMysqlClientMissingError": "ms-resource:loc.messages.LinuxMysqlClientMissingError", + "CouldNotFetchAccessTokenforAzureStatusCode": "ms-resource:loc.messages.CouldNotFetchAccessTokenforAzureStatusCode", + "CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode": "ms-resource:loc.messages.CouldNotFetchAccessTokenforMSIDueToMSINotConfiguredProperlyStatusCode", + "CouldNotFetchAccessTokenforMSIStatusCode": "ms-resource:loc.messages.CouldNotFetchAccessTokenforMSIStatusCode", + "NotAbleToCreateFirewallRule": "ms-resource:loc.messages.NotAbleToCreateFirewallRule", + "ExpiredServicePrincipal": "ms-resource:loc.messages.ExpiredServicePrincipal", + "Nopackagefoundwithspecifiedpattern": "ms-resource:loc.messages.Nopackagefoundwithspecifiedpattern" + }, + "_buildConfigMapping": { + "Default": "1.226.1", + "Node16-225": "1.226.0" + } +} \ No newline at end of file diff --git a/_generated/AzureMysqlDeploymentV1_Node16/telemetry.ts b/_generated/AzureMysqlDeploymentV1_Node16/telemetry.ts new file mode 100644 index 000000000000..aad070964f94 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1_Node16/telemetry.ts @@ -0,0 +1,70 @@ +/** + * WARNING: This module should only be used with the express permission of the repo owners. + */ +import * as tl from 'azure-pipelines-task-lib/task'; +import * as semver from 'semver'; + +/** + * Utility function to log telemetry. + * @param feature The task/feature name for this telemetry + * @param telem A JSON object containing a dictionary of variables that will be appended to + * common system vars and loggged. + */ +export function emitTelemetry(area: string, feature: string, taskSpecificTelemetry: any) { + try { + let agentVersion = tl.getVariable('Agent.Version'); + if (semver.gte(agentVersion, '2.120.0')) { + // Common Telemetry VARs that will be concatenated with the supplied telem object. + let commonTelem = { + 'SYSTEM_TASKINSTANCEID': tl.getVariable('SYSTEM_TASKINSTANCEID'), + 'SYSTEM_JOBID': tl.getVariable('SYSTEM_JOBID'), + 'SYSTEM_PLANID': tl.getVariable('SYSTEM_PLANID'), + 'SYSTEM_COLLECTIONID': tl.getVariable('SYSTEM_COLLECTIONID'), + 'AGENT_ID': tl.getVariable('AGENT_ID'), + 'AGENT_MACHINENAME': tl.getVariable('AGENT_MACHINENAME'), + 'AGENT_NAME': tl.getVariable('AGENT_NAME'), + 'AGENT_JOBSTATUS': tl.getVariable('AGENT_JOBSTATUS'), + 'AGENT_OS': tl.getVariable('AGENT_OS'), + 'AGENT_VERSION': tl.getVariable('AGENT_VERSION'), + 'BUILD_BUILDID': tl.getVariable('BUILD_BUILDID'), + 'BUILD_BUILDNUMBER': tl.getVariable('BUILD_BUILDNUMBER'), + 'BUILD_BUILDURI': tl.getVariable('BUILD_BUILDURI'), + 'BUILD_CONTAINERID': tl.getVariable('BUILD_CONTAINERID'), + 'BUILD_DEFINITIONNAME': tl.getVariable('BUILD_DEFINITIONNAME'), + 'BUILD_DEFINITIONVERSION': tl.getVariable('BUILD_DEFINITIONVERSION'), + 'BUILD_REASON': tl.getVariable('BUILD_REASON'), + 'BUILD_REPOSITORY_CLEAN': tl.getVariable('BUILD_REPOSITORY_CLEAN'), + 'BUILD_REPOSITORY_GIT_SUBMODULECHECKOUT': tl.getVariable('BUILD_REPOSITORY_GIT_SUBMODULECHECKOUT'), + 'BUILD_REPOSITORY_NAME': tl.getVariable('BUILD_REPOSITORY_NAME'), + 'BUILD_REPOSITORY_PROVIDER': tl.getVariable('BUILD_REPOSITORY_PROVIDER'), + 'BUILD_SOURCEVERSION': tl.getVariable('BUILD_SOURCEVERSION') + }; + let copy = Object.assign(commonTelem, taskSpecificTelemetry); + console.log("##vso[telemetry.publish area=%s;feature=%s]%s", + area, + feature, + JSON.stringify(copy)); + } else { + tl.debug(`Agent version of ( ${agentVersion} ) does not meet minimum requirements for telemetry`); + } + } catch (err) { + tl.debug(`Unable to log telemetry. Err:( ${err} )`); + } +} + +/** + * A utility function to log the first 1024 characters from SDTERR + * @param feature The task/feature name for this telemetry + * @param exitCode The exit code from your program + */ +export function logResult(area: string, feature:string, exitCode: number) { + try { + let execResultsStr = JSON.stringify({ + 'exitCode': exitCode + }); + let nugetExecResults = JSON.parse(execResultsStr); + emitTelemetry(area, feature, nugetExecResults); + } catch (err) { + tl.debug(`Unable to log telemetry. Err:( ${err} )`); + } +} \ No newline at end of file diff --git a/_generated/AzureMysqlDeploymentV1_Node16/tsconfig.json b/_generated/AzureMysqlDeploymentV1_Node16/tsconfig.json new file mode 100644 index 000000000000..875bb90cd697 --- /dev/null +++ b/_generated/AzureMysqlDeploymentV1_Node16/tsconfig.json @@ -0,0 +1,6 @@ +{ + "compilerOptions": { + "target": "ES6", + "module": "commonjs" + } +} diff --git a/make-options.json b/make-options.json index 7fdd78f06ec2..e3ffb2fe951e 100644 --- a/make-options.json +++ b/make-options.json @@ -237,6 +237,11 @@ "DownloadFileshareArtifactsV1", "AzureVmssDeploymentV0", "CargoAuthenticateV0", + "AzureMysqlDeploymentV1", + "AzureFunctionAppContainerV1", + "KubectlInstallerV0", + "AzureFileCopyV2", + "AzureFileCopyV3", "HelmDeployV0", "AzureFunctionAppV1", "AzureFunctionAppV2",