From b1d05d399b693d0eff0cdc17068d572c90534370 Mon Sep 17 00:00:00 2001 From: Artur Stolear Date: Fri, 22 Nov 2019 20:29:47 +0200 Subject: [PATCH] add azure pipeline prerequisites --- dist/azure/execute/icon.png | Bin 0 -> 4731 bytes dist/azure/execute/task.json | 106 + dist/azure/images/build-task.png | Bin 0 -> 24467 bytes dist/azure/images/builds.png | Bin 0 -> 54308 bytes dist/azure/images/extension-icon.png | Bin 0 -> 4731 bytes dist/azure/index.js | 16558 ------------------------- dist/azure/lib.json | 14 - dist/azure/lib1.json | 36 - dist/azure/overview.md | 6 + dist/azure/setup/icon.png | Bin 0 -> 4731 bytes dist/azure/setup/task.json | 106 + dist/azure/vss-extension.json | 71 + src/github/build-agent.ts | 1 - 13 files changed, 289 insertions(+), 16609 deletions(-) create mode 100644 dist/azure/execute/icon.png create mode 100644 dist/azure/execute/task.json create mode 100644 dist/azure/images/build-task.png create mode 100644 dist/azure/images/builds.png create mode 100644 dist/azure/images/extension-icon.png delete mode 100644 dist/azure/index.js delete mode 100644 dist/azure/lib.json delete mode 100644 dist/azure/lib1.json create mode 100644 dist/azure/overview.md create mode 100644 dist/azure/setup/icon.png create mode 100644 dist/azure/setup/task.json create mode 100644 dist/azure/vss-extension.json diff --git a/dist/azure/execute/icon.png b/dist/azure/execute/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e9efbda62e9d28c22f54da074cd4a077bd1955e4 GIT binary patch literal 4731 zcmX|F2Rzj8A6K0{e#f0r$jX`B(J)i?$jFhAJ$}eO97oy29T5>ib{Schj1bvEl!PBFT)!^hEdiu~%oqV_5 zwCz24o$)cyP^KvF=lXFn068h?Dp642pU@xJQl5-yQJVLBC@APzPM*utJ_O&iHuYHi}K3;R(;9a~JoPSj`OYl3Q>2fgQNaUz?f6=quq+^DtW#{R|Pqp?Ik)9SHou4``9ERCu#7+-FYAC20_9@gZpCV>eI)%Fz= zaDLL3Yv+XsR@|?>b0DUEc7?6WEt{VATz6-&K^<$6e}eZKav1ZUl7*Z@zRU$ai0q1) z#TjAe7cwGU=?_#^MAQWqM;>3N68r3~nzR)nQZ72o7e$##8vEts=>x_xF_lq6%v(c67xJf;4$u`i|~mx)5vUk{=|q|G=R%gP)Q6dU|-{$b}{~? z;|o(T^f+Z)%MGs*ra&gZ18YYI^M{!H4e=zv6}g z%u9sQJUr5x<2fVEY`&TII;2Xt;@$@lp}~3cj{uS>_IyA3ubXAtac@Gkd5KOyD!4~tgPHSh0J$x&Jc! zVO@=6^(iIMUIHY|VhW=g;L>?>NqGy9YA49N)xndF0JTr`Z@S%?YDOdhOn+9sv43}? z$2yBII_tg-sVX?WxM9a91}CdqM$}rILlRcmag2c5_jCVXU&YZ$1;Ir-d23zIugiC@ zml>_TWfgJctWE;Z)c2)Y^=sO(2y$Fx>Rz6ZKmswCzVf)KL{!kS{qWY`r?kkB z_?eKrc*N|*FDbRre#5eE3N!$@Ue3f}H5q2EciH?D0QbS{KO^`bx|T8p@ibw_JZ1FelAtQ zF4kz>iKmdc)o+6-#%$#6gu}jNjaLYOT&*lwzL zwD@%NO<;b^<%!r!@kVD!NBv^;g!yDYbVWv3BrZn)Y~$9$>en8Io(h^{QCn=`&|$A- zo`SbmZdiTUUP~)nhli_0-1X??7!@kwgRko$Ye zXkx?1in?kkau8=SmOMpyeMp`+qu6caJCOEEFyo1teHGg;)we8Ry<)Hks2+dSqud2# zcpQu!C7SzCh{kB_2i+f??J=w$1SHzLC1huR9Hh%HJilPn01#6`THyRYpw1SDRG&hM zvueo}D0{XL*4}c3Z7?zz@&5cbh4l7cL^CUu2^|Tq#%FbjsIBz!yl`hi{$^-q%PBd8 zsqT0j>E}$(mcSHl7+DCv@$T`H5pJn*^SaSX8C7%~yA)*l167m#^1Pbh}YGgEd{aiezO3%8wC`yU=qj6qlFdJH$votzTQEPqI=b2DMAd*FyZwZBH9Ykx0tiR|%_LukT=aLYJ;EQbYUbT=etGV2E2>Axg<4{@V>IzgWr5Vz(?ELVLq-NHmjpC5=lbXS6$4%z

1Rb~E%j?(d zGCZk9SZx}TSn+CVVMOYnNHbhy!dfjCcwM^#QPN3SFcNn?S9R!nY;3SNNnr4xF_tFp zxlg+(daN%bL|8ZYW2PE$lj7Ld5PH)>|5&W~*16YN>cEDhN!0Qt$Tm(nT59Lk@GC{U zv?lD-BsACQ;qM+Mpxo`R+}v7;1gJn+*Z0gQqR0}%R!-W=S>)h%cwK?jZd9qO!Bgr4 zq&)`+Q6Jk`>DV7fq1;xjPNgFLV&Y>~!1`R7c4k+BRjw<$wBu_K3lM<1hYw9Rid(|y^F9U@Eagp}2lK=J`DUdDYqSx|)`cm^|tP^u~kb6ko_y?*o+f;7%% z?QEoAb>e*v*-im`WwTRR(oE#!uJq~Dv(ufiOPycg_+2ffx+&9lyZoqhB`=h77KKMm zssSEf?nqmcial$P>_U(&D0<{-PdiW2#$OYd#p2U)IGh(jI6ugc+N%Vr4RCw`BxA8G z%Z(TB^7G0rZ{oAVBP+{b5kL)hdrS8{jMOa0;uKp`K0CB9(elr2E3r5CcS~Oqz~CbO z`M@urVQwIroP14u`ZIOPNW?#o8?q4-Gu$1qP>Y7!!r15Y-$P`eeW}6`DwI!KfYV@3 zblpQI?r}Pf+0mSU%4yasWmb>ii5VynrQ2-9E}6LHE9RJc{qa|-OI*Ru7Y~9jrbNdy zz4S8!&aO&#Bm;;zuf=caIUG=FP}Q~&9arFoh3rf^M~!&QT)hgI0m07fK9oFpw-w{$ zB^-$-98T6uqy6p{!&-4KpGEcqY$Yyi&?7P~B;j-qOwzF9TXl8 z9VK|cB5y0cT4Q;7c(}3z6Mig73$$ojPWs^3?X(qLWnh1W3G0EKG^CL#GhIq#0EW9f zIHyU=N6;dli$NU?ac}Z7Z2JGdenQElOO#HpT$QY#NJY&L4Oza)a3u|BGaY?2iSR|Y z68a+Y@3_1mJ;E*XKYjDxU(fD^ru{d$GUuQnJ!87NqM>W|gP0QDj zR8Ls*$t*yND-j^z-E%FtJjHm*{z`Ds+8c~iYf@%tESGTH#QqKDlD|GqEI!Y$?TN`u zm7I)n0!>dgmu|?T9Ak;=V2$@Is9=Q{_l5(W)tg-Peu77klmCV&wAA!e%av`y{|C&7 B_)P!+ literal 0 HcmV?d00001 diff --git a/dist/azure/execute/task.json b/dist/azure/execute/task.json new file mode 100644 index 0000000..239a0a2 --- /dev/null +++ b/dist/azure/execute/task.json @@ -0,0 +1,106 @@ +{ + "id": "dd065e3b-6aef-46af-845c-520195836b35", + "name": "UseGitVersion", + "friendlyName": "GitVersion Task$titleSuffix$", + "description": "Easy Semantic Versioning (http://semver.org) for projects using Git", + "author": "GitVersion Contributors", + "helpMarkDown": "See the [documentation](http://gitversion.readthedocs.org/en/latest/) for help", + "category": "Build", + "demands": [], + "version": { + "Major": "5", + "Minor": "0", + "Patch": "2" + }, + "minimumAgentVersion": "2.115.0", + "groups": [ + { + "name": "gitversionDetails", + "displayName": "GitVersion details", + "isExpanded": true + }, + { + "name": "additional", + "displayName": "Additional Options", + "isExpanded": false + } + ], + "instanceNameFormat": "GitVersion", + "inputs": [ + { + "name": "versionSpec", + "type": "string", + "label": "The version spec", + "defaultValue": "", + "required": true, + "helpMarkDown": "Required version in the form of 5.x or exact version like 5.0.0" + }, + { + "name": "includePrerelease", + "type": "boolean", + "label": "Include pre-release versions", + "defaultValue": "false", + "required": false, + "helpMarkDown": "Include pre-release versions when matching a version" + }, + { + "name": "targetPath", + "type": "string", + "label": "Working directory path", + "defaultValue": "", + "required": false, + "helpMarkDown": "Optionally supply the path to the working directory", + "groupName": "gitversionDetails" + }, + { + "name": "useConfigFile", + "type": "boolean", + "label": "Specify Configuration file", + "defaultValue": "false", + "required": false, + "helpMarkDown": "Whether to use a custom configuration file" + }, + { + "name": "configFilePath", + "type": "filePath", + "label": "Configuration file", + "defaultValue": "", + "required": false, + "helpMarkDown": "Optional path to config file (defaults to GitVersion.yml)", + "visibleRule": "useConfigFile = true" + }, + { + "name": "updateAssemblyInfo", + "type": "boolean", + "label": "Update AssemblyInfo files", + "defaultValue": "false", + "required": false, + "helpMarkDown": "Whether to update versions in the AssemblyInfo files" + }, + { + "name": "updateAssemblyInfoFilename", + "type": "string", + "label": "Update Assembly File", + "defaultValue": "", + "required": false, + "helpMarkDown": "Update versions in specified file", + "visibleRule": "updateAssemblyInfo = true" + }, + { + "name": "additionalArguments", + "type": "string", + "label": "Additional GitVersion arguments", + "defaultValue": "", + "required": false, + "helpMarkDown": "Additional arguments to send to GitVersion", + "groupName": "additional" + } + ], + "execution": { + "Node": { + "target": "GitVersion.js", + "argumentFormat": "", + "workingDirectory": "." + } + } +} diff --git a/dist/azure/images/build-task.png b/dist/azure/images/build-task.png new file mode 100644 index 0000000000000000000000000000000000000000..6431fb14235fc7d2f7eddf0ea4e65f2d1fc7df24 GIT binary patch literal 24467 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 IAM(Hc56pDOdjJ3c literal 0 HcmV?d00001 diff --git a/dist/azure/images/builds.png b/dist/azure/images/builds.png new file mode 100644 index 0000000000000000000000000000000000000000..0e0372850aa8a109e50dff7dfeba76e2f5284108 GIT binary patch literal 54308 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 literal 0 HcmV?d00001 diff --git a/dist/azure/images/extension-icon.png b/dist/azure/images/extension-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e9efbda62e9d28c22f54da074cd4a077bd1955e4 GIT binary patch literal 4731 zcmX|F2Rzj8A6K0{e#f0r$jX`B(J)i?$jFhAJ$}eO97oy29T5>ib{Schj1bvEl!PBFT)!^hEdiu~%oqV_5 zwCz24o$)cyP^KvF=lXFn068h?Dp642pU@xJQl5-yQJVLBC@APzPM*utJ_O&iHuYHi}K3;R(;9a~JoPSj`OYl3Q>2fgQNaUz?f6=quq+^DtW#{R|Pqp?Ik)9SHou4``9ERCu#7+-FYAC20_9@gZpCV>eI)%Fz= zaDLL3Yv+XsR@|?>b0DUEc7?6WEt{VATz6-&K^<$6e}eZKav1ZUl7*Z@zRU$ai0q1) z#TjAe7cwGU=?_#^MAQWqM;>3N68r3~nzR)nQZ72o7e$##8vEts=>x_xF_lq6%v(c67xJf;4$u`i|~mx)5vUk{=|q|G=R%gP)Q6dU|-{$b}{~? z;|o(T^f+Z)%MGs*ra&gZ18YYI^M{!H4e=zv6}g z%u9sQJUr5x<2fVEY`&TII;2Xt;@$@lp}~3cj{uS>_IyA3ubXAtac@Gkd5KOyD!4~tgPHSh0J$x&Jc! zVO@=6^(iIMUIHY|VhW=g;L>?>NqGy9YA49N)xndF0JTr`Z@S%?YDOdhOn+9sv43}? z$2yBII_tg-sVX?WxM9a91}CdqM$}rILlRcmag2c5_jCVXU&YZ$1;Ir-d23zIugiC@ zml>_TWfgJctWE;Z)c2)Y^=sO(2y$Fx>Rz6ZKmswCzVf)KL{!kS{qWY`r?kkB z_?eKrc*N|*FDbRre#5eE3N!$@Ue3f}H5q2EciH?D0QbS{KO^`bx|T8p@ibw_JZ1FelAtQ zF4kz>iKmdc)o+6-#%$#6gu}jNjaLYOT&*lwzL zwD@%NO<;b^<%!r!@kVD!NBv^;g!yDYbVWv3BrZn)Y~$9$>en8Io(h^{QCn=`&|$A- zo`SbmZdiTUUP~)nhli_0-1X??7!@kwgRko$Ye zXkx?1in?kkau8=SmOMpyeMp`+qu6caJCOEEFyo1teHGg;)we8Ry<)Hks2+dSqud2# zcpQu!C7SzCh{kB_2i+f??J=w$1SHzLC1huR9Hh%HJilPn01#6`THyRYpw1SDRG&hM zvueo}D0{XL*4}c3Z7?zz@&5cbh4l7cL^CUu2^|Tq#%FbjsIBz!yl`hi{$^-q%PBd8 zsqT0j>E}$(mcSHl7+DCv@$T`H5pJn*^SaSX8C7%~yA)*l167m#^1Pbh}YGgEd{aiezO3%8wC`yU=qj6qlFdJH$votzTQEPqI=b2DMAd*FyZwZBH9Ykx0tiR|%_LukT=aLYJ;EQbYUbT=etGV2E2>Axg<4{@V>IzgWr5Vz(?ELVLq-NHmjpC5=lbXS6$4%z

1Rb~E%j?(d zGCZk9SZx}TSn+CVVMOYnNHbhy!dfjCcwM^#QPN3SFcNn?S9R!nY;3SNNnr4xF_tFp zxlg+(daN%bL|8ZYW2PE$lj7Ld5PH)>|5&W~*16YN>cEDhN!0Qt$Tm(nT59Lk@GC{U zv?lD-BsACQ;qM+Mpxo`R+}v7;1gJn+*Z0gQqR0}%R!-W=S>)h%cwK?jZd9qO!Bgr4 zq&)`+Q6Jk`>DV7fq1;xjPNgFLV&Y>~!1`R7c4k+BRjw<$wBu_K3lM<1hYw9Rid(|y^F9U@Eagp}2lK=J`DUdDYqSx|)`cm^|tP^u~kb6ko_y?*o+f;7%% z?QEoAb>e*v*-im`WwTRR(oE#!uJq~Dv(ufiOPycg_+2ffx+&9lyZoqhB`=h77KKMm zssSEf?nqmcial$P>_U(&D0<{-PdiW2#$OYd#p2U)IGh(jI6ugc+N%Vr4RCw`BxA8G z%Z(TB^7G0rZ{oAVBP+{b5kL)hdrS8{jMOa0;uKp`K0CB9(elr2E3r5CcS~Oqz~CbO z`M@urVQwIroP14u`ZIOPNW?#o8?q4-Gu$1qP>Y7!!r15Y-$P`eeW}6`DwI!KfYV@3 zblpQI?r}Pf+0mSU%4yasWmb>ii5VynrQ2-9E}6LHE9RJc{qa|-OI*Ru7Y~9jrbNdy zz4S8!&aO&#Bm;;zuf=caIUG=FP}Q~&9arFoh3rf^M~!&QT)hgI0m07fK9oFpw-w{$ zB^-$-98T6uqy6p{!&-4KpGEcqY$Yyi&?7P~B;j-qOwzF9TXl8 z9VK|cB5y0cT4Q;7c(}3z6Mig73$$ojPWs^3?X(qLWnh1W3G0EKG^CL#GhIq#0EW9f zIHyU=N6;dli$NU?ac}Z7Z2JGdenQElOO#HpT$QY#NJY&L4Oza)a3u|BGaY?2iSR|Y z68a+Y@3_1mJ;E*XKYjDxU(fD^ru{d$GUuQnJ!87NqM>W|gP0QDj zR8Ls*$t*yND-j^z-E%FtJjHm*{z`Ds+8c~iYf@%tESGTH#QqKDlD|GqEI!Y$?TN`u zm7I)n0!>dgmu|?T9Ak;=V2$@Is9=Q{_l5(W)tg-Peu77klmCV&wAA!e%av`y{|C&7 B_)P!+ literal 0 HcmV?d00001 diff --git a/dist/azure/index.js b/dist/azure/index.js deleted file mode 100644 index d4b31b2..0000000 --- a/dist/azure/index.js +++ /dev/null @@ -1,16558 +0,0 @@ -module.exports = -/******/ (function(modules, runtime) { // webpackBootstrap -/******/ "use strict"; -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ __webpack_require__.ab = __dirname + "/"; -/******/ -/******/ // the startup function -/******/ function startup() { -/******/ // Load entry module and return exports -/******/ return __webpack_require__(776); -/******/ }; -/******/ -/******/ // run startup -/******/ return startup(); -/******/ }) -/************************************************************************/ -/******/ ({ - -/***/ 2: -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -var ERROR_MSGS = __webpack_require__(516); -var Lookup = (function () { - function Lookup() { - this._map = new Map(); - } - Lookup.prototype.getMap = function () { - return this._map; - }; - Lookup.prototype.add = function (serviceIdentifier, value) { - if (serviceIdentifier === null || serviceIdentifier === undefined) { - throw new Error(ERROR_MSGS.NULL_ARGUMENT); - } - if (value === null || value === undefined) { - throw new Error(ERROR_MSGS.NULL_ARGUMENT); - } - var entry = this._map.get(serviceIdentifier); - if (entry !== undefined) { - entry.push(value); - this._map.set(serviceIdentifier, entry); - } - else { - this._map.set(serviceIdentifier, [value]); - } - }; - Lookup.prototype.get = function (serviceIdentifier) { - if (serviceIdentifier === null || serviceIdentifier === undefined) { - throw new Error(ERROR_MSGS.NULL_ARGUMENT); - } - var entry = this._map.get(serviceIdentifier); - if (entry !== undefined) { - return entry; - } - else { - throw new Error(ERROR_MSGS.KEY_NOT_FOUND); - } - }; - Lookup.prototype.remove = function (serviceIdentifier) { - if (serviceIdentifier === null || serviceIdentifier === undefined) { - throw new Error(ERROR_MSGS.NULL_ARGUMENT); - } - if (!this._map.delete(serviceIdentifier)) { - throw new Error(ERROR_MSGS.KEY_NOT_FOUND); - } - }; - Lookup.prototype.removeByCondition = function (condition) { - var _this = this; - this._map.forEach(function (entries, key) { - var updatedEntries = entries.filter(function (entry) { return !condition(entry); }); - if (updatedEntries.length > 0) { - _this._map.set(key, updatedEntries); - } - else { - _this._map.delete(key); - } - }); - }; - Lookup.prototype.hasKey = function (serviceIdentifier) { - if (serviceIdentifier === null || serviceIdentifier === undefined) { - throw new Error(ERROR_MSGS.NULL_ARGUMENT); - } - return this._map.has(serviceIdentifier); - }; - Lookup.prototype.clone = function () { - var copy = new Lookup(); - this._map.forEach(function (value, key) { - value.forEach(function (b) { return copy.add(key, b.clone()); }); - }); - return copy; - }; - Lookup.prototype.traverse = function (func) { - this._map.forEach(function (value, key) { - func(key, value); - }); - }; - return Lookup; -}()); -exports.Lookup = Lookup; - - -/***/ }), - -/***/ 9: -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -var error_msgs_1 = __webpack_require__(516); -var literal_types_1 = __webpack_require__(186); -var METADATA_KEY = __webpack_require__(677); -function _injectProperties(instance, childRequests, resolveRequest) { - var propertyInjectionsRequests = childRequests.filter(function (childRequest) { - return (childRequest.target !== null && - childRequest.target.type === literal_types_1.TargetTypeEnum.ClassProperty); - }); - var propertyInjections = propertyInjectionsRequests.map(resolveRequest); - propertyInjectionsRequests.forEach(function (r, index) { - var propertyName = ""; - propertyName = r.target.name.value(); - var injection = propertyInjections[index]; - instance[propertyName] = injection; - }); - return instance; -} -function _createInstance(Func, injections) { - return new (Func.bind.apply(Func, [void 0].concat(injections)))(); -} -function _postConstruct(constr, result) { - if (Reflect.hasMetadata(METADATA_KEY.POST_CONSTRUCT, constr)) { - var data = Reflect.getMetadata(METADATA_KEY.POST_CONSTRUCT, constr); - try { - result[data.value](); - } - catch (e) { - throw new Error(error_msgs_1.POST_CONSTRUCT_ERROR(constr.name, e.message)); - } - } -} -function resolveInstance(constr, childRequests, resolveRequest) { - var result = null; - if (childRequests.length > 0) { - var constructorInjectionsRequests = childRequests.filter(function (childRequest) { - return (childRequest.target !== null && childRequest.target.type === literal_types_1.TargetTypeEnum.ConstructorArgument); - }); - var constructorInjections = constructorInjectionsRequests.map(resolveRequest); - result = _createInstance(constr, constructorInjections); - result = _injectProperties(result, childRequests, resolveRequest); - } - else { - result = new constr(); - } - _postConstruct(constr, result); - return result; -} -exports.resolveInstance = resolveInstance; - - -/***/ }), - -/***/ 15: -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -var __generator = (this && this.__generator) || function (thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - if (f = 1, y && (t = y[op[0] & 2 ? "return" : op[0] ? "throw" : "next"]) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [0, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -}; -Object.defineProperty(exports, "__esModule", { value: true }); -var binding_1 = __webpack_require__(119); -var ERROR_MSGS = __webpack_require__(516); -var literal_types_1 = __webpack_require__(186); -var METADATA_KEY = __webpack_require__(677); -var metadata_reader_1 = __webpack_require__(202); -var planner_1 = __webpack_require__(787); -var resolver_1 = __webpack_require__(502); -var binding_to_syntax_1 = __webpack_require__(538); -var id_1 = __webpack_require__(786); -var serialization_1 = __webpack_require__(571); -var container_snapshot_1 = __webpack_require__(649); -var lookup_1 = __webpack_require__(2); -var Container = (function () { - function Container(containerOptions) { - var options = containerOptions || {}; - if (typeof options !== "object") { - throw new Error("" + ERROR_MSGS.CONTAINER_OPTIONS_MUST_BE_AN_OBJECT); - } - if (options.defaultScope === undefined) { - options.defaultScope = literal_types_1.BindingScopeEnum.Transient; - } - else if (options.defaultScope !== literal_types_1.BindingScopeEnum.Singleton && - options.defaultScope !== literal_types_1.BindingScopeEnum.Transient && - options.defaultScope !== literal_types_1.BindingScopeEnum.Request) { - throw new Error("" + ERROR_MSGS.CONTAINER_OPTIONS_INVALID_DEFAULT_SCOPE); - } - if (options.autoBindInjectable === undefined) { - options.autoBindInjectable = false; - } - else if (typeof options.autoBindInjectable !== "boolean") { - throw new Error("" + ERROR_MSGS.CONTAINER_OPTIONS_INVALID_AUTO_BIND_INJECTABLE); - } - if (options.skipBaseClassChecks === undefined) { - options.skipBaseClassChecks = false; - } - else if (typeof options.skipBaseClassChecks !== "boolean") { - throw new Error("" + ERROR_MSGS.CONTAINER_OPTIONS_INVALID_SKIP_BASE_CHECK); - } - this.options = { - autoBindInjectable: options.autoBindInjectable, - defaultScope: options.defaultScope, - skipBaseClassChecks: options.skipBaseClassChecks - }; - this.id = id_1.id(); - this._bindingDictionary = new lookup_1.Lookup(); - this._snapshots = []; - this._middleware = null; - this.parent = null; - this._metadataReader = new metadata_reader_1.MetadataReader(); - } - Container.merge = function (container1, container2) { - var container = new Container(); - var bindingDictionary = planner_1.getBindingDictionary(container); - var bindingDictionary1 = planner_1.getBindingDictionary(container1); - var bindingDictionary2 = planner_1.getBindingDictionary(container2); - function copyDictionary(origin, destination) { - origin.traverse(function (key, value) { - value.forEach(function (binding) { - destination.add(binding.serviceIdentifier, binding.clone()); - }); - }); - } - copyDictionary(bindingDictionary1, bindingDictionary); - copyDictionary(bindingDictionary2, bindingDictionary); - return container; - }; - Container.prototype.load = function () { - var modules = []; - for (var _i = 0; _i < arguments.length; _i++) { - modules[_i] = arguments[_i]; - } - var getHelpers = this._getContainerModuleHelpersFactory(); - for (var _a = 0, modules_1 = modules; _a < modules_1.length; _a++) { - var currentModule = modules_1[_a]; - var containerModuleHelpers = getHelpers(currentModule.id); - currentModule.registry(containerModuleHelpers.bindFunction, containerModuleHelpers.unbindFunction, containerModuleHelpers.isboundFunction, containerModuleHelpers.rebindFunction); - } - }; - Container.prototype.loadAsync = function () { - var modules = []; - for (var _i = 0; _i < arguments.length; _i++) { - modules[_i] = arguments[_i]; - } - return __awaiter(this, void 0, void 0, function () { - var getHelpers, _a, modules_2, currentModule, containerModuleHelpers; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - getHelpers = this._getContainerModuleHelpersFactory(); - _a = 0, modules_2 = modules; - _b.label = 1; - case 1: - if (!(_a < modules_2.length)) return [3, 4]; - currentModule = modules_2[_a]; - containerModuleHelpers = getHelpers(currentModule.id); - return [4, currentModule.registry(containerModuleHelpers.bindFunction, containerModuleHelpers.unbindFunction, containerModuleHelpers.isboundFunction, containerModuleHelpers.rebindFunction)]; - case 2: - _b.sent(); - _b.label = 3; - case 3: - _a++; - return [3, 1]; - case 4: return [2]; - } - }); - }); - }; - Container.prototype.unload = function () { - var _this = this; - var modules = []; - for (var _i = 0; _i < arguments.length; _i++) { - modules[_i] = arguments[_i]; - } - var conditionFactory = function (expected) { return function (item) { - return item.moduleId === expected; - }; }; - modules.forEach(function (module) { - var condition = conditionFactory(module.id); - _this._bindingDictionary.removeByCondition(condition); - }); - }; - Container.prototype.bind = function (serviceIdentifier) { - var scope = this.options.defaultScope || literal_types_1.BindingScopeEnum.Transient; - var binding = new binding_1.Binding(serviceIdentifier, scope); - this._bindingDictionary.add(serviceIdentifier, binding); - return new binding_to_syntax_1.BindingToSyntax(binding); - }; - Container.prototype.rebind = function (serviceIdentifier) { - this.unbind(serviceIdentifier); - return this.bind(serviceIdentifier); - }; - Container.prototype.unbind = function (serviceIdentifier) { - try { - this._bindingDictionary.remove(serviceIdentifier); - } - catch (e) { - throw new Error(ERROR_MSGS.CANNOT_UNBIND + " " + serialization_1.getServiceIdentifierAsString(serviceIdentifier)); - } - }; - Container.prototype.unbindAll = function () { - this._bindingDictionary = new lookup_1.Lookup(); - }; - Container.prototype.isBound = function (serviceIdentifier) { - var bound = this._bindingDictionary.hasKey(serviceIdentifier); - if (!bound && this.parent) { - bound = this.parent.isBound(serviceIdentifier); - } - return bound; - }; - Container.prototype.isBoundNamed = function (serviceIdentifier, named) { - return this.isBoundTagged(serviceIdentifier, METADATA_KEY.NAMED_TAG, named); - }; - Container.prototype.isBoundTagged = function (serviceIdentifier, key, value) { - var bound = false; - if (this._bindingDictionary.hasKey(serviceIdentifier)) { - var bindings = this._bindingDictionary.get(serviceIdentifier); - var request_1 = planner_1.createMockRequest(this, serviceIdentifier, key, value); - bound = bindings.some(function (b) { return b.constraint(request_1); }); - } - if (!bound && this.parent) { - bound = this.parent.isBoundTagged(serviceIdentifier, key, value); - } - return bound; - }; - Container.prototype.snapshot = function () { - this._snapshots.push(container_snapshot_1.ContainerSnapshot.of(this._bindingDictionary.clone(), this._middleware)); - }; - Container.prototype.restore = function () { - var snapshot = this._snapshots.pop(); - if (snapshot === undefined) { - throw new Error(ERROR_MSGS.NO_MORE_SNAPSHOTS_AVAILABLE); - } - this._bindingDictionary = snapshot.bindings; - this._middleware = snapshot.middleware; - }; - Container.prototype.createChild = function (containerOptions) { - var child = new Container(containerOptions || this.options); - child.parent = this; - return child; - }; - Container.prototype.applyMiddleware = function () { - var middlewares = []; - for (var _i = 0; _i < arguments.length; _i++) { - middlewares[_i] = arguments[_i]; - } - var initial = (this._middleware) ? this._middleware : this._planAndResolve(); - this._middleware = middlewares.reduce(function (prev, curr) { return curr(prev); }, initial); - }; - Container.prototype.applyCustomMetadataReader = function (metadataReader) { - this._metadataReader = metadataReader; - }; - Container.prototype.get = function (serviceIdentifier) { - return this._get(false, false, literal_types_1.TargetTypeEnum.Variable, serviceIdentifier); - }; - Container.prototype.getTagged = function (serviceIdentifier, key, value) { - return this._get(false, false, literal_types_1.TargetTypeEnum.Variable, serviceIdentifier, key, value); - }; - Container.prototype.getNamed = function (serviceIdentifier, named) { - return this.getTagged(serviceIdentifier, METADATA_KEY.NAMED_TAG, named); - }; - Container.prototype.getAll = function (serviceIdentifier) { - return this._get(true, true, literal_types_1.TargetTypeEnum.Variable, serviceIdentifier); - }; - Container.prototype.getAllTagged = function (serviceIdentifier, key, value) { - return this._get(false, true, literal_types_1.TargetTypeEnum.Variable, serviceIdentifier, key, value); - }; - Container.prototype.getAllNamed = function (serviceIdentifier, named) { - return this.getAllTagged(serviceIdentifier, METADATA_KEY.NAMED_TAG, named); - }; - Container.prototype.resolve = function (constructorFunction) { - var tempContainer = this.createChild(); - tempContainer.bind(constructorFunction).toSelf(); - return tempContainer.get(constructorFunction); - }; - Container.prototype._getContainerModuleHelpersFactory = function () { - var _this = this; - var setModuleId = function (bindingToSyntax, moduleId) { - bindingToSyntax._binding.moduleId = moduleId; - }; - var getBindFunction = function (moduleId) { - return function (serviceIdentifier) { - var _bind = _this.bind.bind(_this); - var bindingToSyntax = _bind(serviceIdentifier); - setModuleId(bindingToSyntax, moduleId); - return bindingToSyntax; - }; - }; - var getUnbindFunction = function (moduleId) { - return function (serviceIdentifier) { - var _unbind = _this.unbind.bind(_this); - _unbind(serviceIdentifier); - }; - }; - var getIsboundFunction = function (moduleId) { - return function (serviceIdentifier) { - var _isBound = _this.isBound.bind(_this); - return _isBound(serviceIdentifier); - }; - }; - var getRebindFunction = function (moduleId) { - return function (serviceIdentifier) { - var _rebind = _this.rebind.bind(_this); - var bindingToSyntax = _rebind(serviceIdentifier); - setModuleId(bindingToSyntax, moduleId); - return bindingToSyntax; - }; - }; - return function (mId) { return ({ - bindFunction: getBindFunction(mId), - isboundFunction: getIsboundFunction(mId), - rebindFunction: getRebindFunction(mId), - unbindFunction: getUnbindFunction(mId) - }); }; - }; - Container.prototype._get = function (avoidConstraints, isMultiInject, targetType, serviceIdentifier, key, value) { - var result = null; - var defaultArgs = { - avoidConstraints: avoidConstraints, - contextInterceptor: function (context) { return context; }, - isMultiInject: isMultiInject, - key: key, - serviceIdentifier: serviceIdentifier, - targetType: targetType, - value: value - }; - if (this._middleware) { - result = this._middleware(defaultArgs); - if (result === undefined || result === null) { - throw new Error(ERROR_MSGS.INVALID_MIDDLEWARE_RETURN); - } - } - else { - result = this._planAndResolve()(defaultArgs); - } - return result; - }; - Container.prototype._planAndResolve = function () { - var _this = this; - return function (args) { - var context = planner_1.plan(_this._metadataReader, _this, args.isMultiInject, args.targetType, args.serviceIdentifier, args.key, args.value, args.avoidConstraints); - context = args.contextInterceptor(context); - var result = resolver_1.resolve(context); - return result; - }; - }; - return Container; -}()); -exports.Container = Container; - - -/***/ }), - -/***/ 16: -/***/ (function(module) { - -module.exports = require("tls"); - -/***/ }), - -/***/ 20: -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -var binding_when_syntax_1 = __webpack_require__(653); -var BindingOnSyntax = (function () { - function BindingOnSyntax(binding) { - this._binding = binding; - } - BindingOnSyntax.prototype.onActivation = function (handler) { - this._binding.onActivation = handler; - return new binding_when_syntax_1.BindingWhenSyntax(this._binding); - }; - return BindingOnSyntax; -}()); -exports.BindingOnSyntax = BindingOnSyntax; - - -/***/ }), - -/***/ 36: -/***/ (function(module, __unusedexports, __webpack_require__) { - -var fs = __webpack_require__(747); -var common = __webpack_require__(164); -var _ls = __webpack_require__(951); - -//@ -//@ ### find(path [,path ...]) -//@ ### find(path_array) -//@ Examples: -//@ -//@ ```javascript -//@ find('src', 'lib'); -//@ find(['src', 'lib']); // same as above -//@ find('.').filter(function(file) { return file.match(/\.js$/); }); -//@ ``` -//@ -//@ Returns array of all files (however deep) in the given paths. -//@ -//@ The main difference from `ls('-R', path)` is that the resulting file names -//@ include the base directories, e.g. `lib/resources/file1` instead of just `file1`. -function _find(options, paths) { - if (!paths) - common.error('no path specified'); - else if (typeof paths === 'object') - paths = paths; // assume array - else if (typeof paths === 'string') - paths = [].slice.call(arguments, 1); - - var list = []; - - function pushFile(file) { - if (common.platform === 'win') - file = file.replace(/\\/g, '/'); - list.push(file); - } - - // why not simply do ls('-R', paths)? because the output wouldn't give the base dirs - // to get the base dir in the output, we need instead ls('-R', 'dir/*') for every directory - - paths.forEach(function(file) { - pushFile(file); - - if (fs.statSync(file).isDirectory()) { - _ls('-RA', file+'/*').forEach(function(subfile) { - pushFile(subfile); - }); - } - }); - - return list; -} -module.exports = _find; - - -/***/ }), - -/***/ 87: -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -var id_1 = __webpack_require__(786); -var Request = (function () { - function Request(serviceIdentifier, parentContext, parentRequest, bindings, target) { - this.id = id_1.id(); - this.serviceIdentifier = serviceIdentifier; - this.parentContext = parentContext; - this.parentRequest = parentRequest; - this.target = target; - this.childRequests = []; - this.bindings = (Array.isArray(bindings) ? bindings : [bindings]); - this.requestScope = parentRequest === null - ? new Map() - : null; - } - Request.prototype.addChildRequest = function (serviceIdentifier, bindings, target) { - var child = new Request(serviceIdentifier, this.parentContext, this, bindings, target); - this.childRequests.push(child); - return child; - }; - return Request; -}()); -exports.Request = Request; - - -/***/ }), - -/***/ 94: -/***/ (function(module, __unusedexports, __webpack_require__) { - -var common = __webpack_require__(164); -var fs = __webpack_require__(747); - -// Recursively removes 'dir' -// Adapted from https://github.com/ryanmcgrath/wrench-js -// -// Copyright (c) 2010 Ryan McGrath -// Copyright (c) 2012 Artur Adib -// -// Licensed under the MIT License -// http://www.opensource.org/licenses/mit-license.php -function rmdirSyncRecursive(dir, force) { - var files; - - files = fs.readdirSync(dir); - - // Loop through and delete everything in the sub-tree after checking it - for(var i = 0; i < files.length; i++) { - var file = dir + "/" + files[i], - currFile = fs.lstatSync(file); - - if(currFile.isDirectory()) { // Recursive function back to the beginning - rmdirSyncRecursive(file, force); - } - - else if(currFile.isSymbolicLink()) { // Unlink symlinks - if (force || isWriteable(file)) { - try { - common.unlinkSync(file); - } catch (e) { - common.error('could not remove file (code '+e.code+'): ' + file, true); - } - } - } - - else // Assume it's a file - perhaps a try/catch belongs here? - if (force || isWriteable(file)) { - try { - common.unlinkSync(file); - } catch (e) { - common.error('could not remove file (code '+e.code+'): ' + file, true); - } - } - } - - // Now that we know everything in the sub-tree has been deleted, we can delete the main directory. - // Huzzah for the shopkeep. - - var result; - try { - result = fs.rmdirSync(dir); - } catch(e) { - common.error('could not remove directory (code '+e.code+'): ' + dir, true); - } - - return result; -} // rmdirSyncRecursive - -// Hack to determine if file has write permissions for current user -// Avoids having to check user, group, etc, but it's probably slow -function isWriteable(file) { - var writePermission = true; - try { - var __fd = fs.openSync(file, 'a'); - fs.closeSync(__fd); - } catch(e) { - writePermission = false; - } - - return writePermission; -} - -//@ -//@ ### rm([options ,] file [, file ...]) -//@ ### rm([options ,] file_array) -//@ Available options: -//@ -//@ + `-f`: force -//@ + `-r, -R`: recursive -//@ -//@ Examples: -//@ -//@ ```javascript -//@ rm('-rf', '/tmp/*'); -//@ rm('some_file.txt', 'another_file.txt'); -//@ rm(['some_file.txt', 'another_file.txt']); // same as above -//@ ``` -//@ -//@ Removes files. The wildcard `*` is accepted. -function _rm(options, files) { - options = common.parseOptions(options, { - 'f': 'force', - 'r': 'recursive', - 'R': 'recursive' - }); - if (!files) - common.error('no paths given'); - - if (typeof files === 'string') - files = [].slice.call(arguments, 1); - // if it's array leave it as it is - - files = common.expand(files); - - files.forEach(function(file) { - if (!fs.existsSync(file)) { - // Path does not exist, no force flag given - if (!options.force) - common.error('no such file or directory: '+file, true); - - return; // skip file - } - - // If here, path exists - - var stats = fs.lstatSync(file); - if (stats.isFile() || stats.isSymbolicLink()) { - - // Do not check for file writing permissions - if (options.force) { - common.unlinkSync(file); - return; - } - - if (isWriteable(file)) - common.unlinkSync(file); - else - common.error('permission denied: '+file, true); - - return; - } // simple file - - // Path is an existing directory, but no -r flag given - if (stats.isDirectory() && !options.recursive) { - common.error('path is a directory', true); - return; // skip path - } - - // Recursively remove existing directory - if (stats.isDirectory() && options.recursive) { - rmdirSyncRecursive(file, options.force); - } - }); // forEach(file) -} // rm -module.exports = _rm; - - -/***/ }), - -/***/ 95: -/***/ (function(module, __unusedexports, __webpack_require__) { - -// Unique ID creation requires a high quality random # generator. In node.js -// this is pretty straight-forward - we use the crypto API. - -var crypto = __webpack_require__(417); - -module.exports = function nodeRNG() { - return crypto.randomBytes(16); -}; - - -/***/ }), - -/***/ 105: -/***/ (function(module, exports) { - -exports = module.exports = SemVer - -var debug -/* istanbul ignore next */ -if (typeof process === 'object' && - process.env && - process.env.NODE_DEBUG && - /\bsemver\b/i.test(process.env.NODE_DEBUG)) { - debug = function () { - var args = Array.prototype.slice.call(arguments, 0) - args.unshift('SEMVER') - console.log.apply(console, args) - } -} else { - debug = function () {} -} - -// Note: this is the semver.org version of the spec that it implements -// Not necessarily the package version of this code. -exports.SEMVER_SPEC_VERSION = '2.0.0' - -var MAX_LENGTH = 256 -var MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || - /* istanbul ignore next */ 9007199254740991 - -// Max safe segment length for coercion. -var MAX_SAFE_COMPONENT_LENGTH = 16 - -// The actual regexps go on exports.re -var re = exports.re = [] -var src = exports.src = [] -var R = 0 - -// The following Regular Expressions can be used for tokenizing, -// validating, and parsing SemVer version strings. - -// ## Numeric Identifier -// A single `0`, or a non-zero digit followed by zero or more digits. - -var NUMERICIDENTIFIER = R++ -src[NUMERICIDENTIFIER] = '0|[1-9]\\d*' -var NUMERICIDENTIFIERLOOSE = R++ -src[NUMERICIDENTIFIERLOOSE] = '[0-9]+' - -// ## Non-numeric Identifier -// Zero or more digits, followed by a letter or hyphen, and then zero or -// more letters, digits, or hyphens. - -var NONNUMERICIDENTIFIER = R++ -src[NONNUMERICIDENTIFIER] = '\\d*[a-zA-Z-][a-zA-Z0-9-]*' - -// ## Main Version -// Three dot-separated numeric identifiers. - -var MAINVERSION = R++ -src[MAINVERSION] = '(' + src[NUMERICIDENTIFIER] + ')\\.' + - '(' + src[NUMERICIDENTIFIER] + ')\\.' + - '(' + src[NUMERICIDENTIFIER] + ')' - -var MAINVERSIONLOOSE = R++ -src[MAINVERSIONLOOSE] = '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' + - '(' + src[NUMERICIDENTIFIERLOOSE] + ')\\.' + - '(' + src[NUMERICIDENTIFIERLOOSE] + ')' - -// ## Pre-release Version Identifier -// A numeric identifier, or a non-numeric identifier. - -var PRERELEASEIDENTIFIER = R++ -src[PRERELEASEIDENTIFIER] = '(?:' + src[NUMERICIDENTIFIER] + - '|' + src[NONNUMERICIDENTIFIER] + ')' - -var PRERELEASEIDENTIFIERLOOSE = R++ -src[PRERELEASEIDENTIFIERLOOSE] = '(?:' + src[NUMERICIDENTIFIERLOOSE] + - '|' + src[NONNUMERICIDENTIFIER] + ')' - -// ## Pre-release Version -// Hyphen, followed by one or more dot-separated pre-release version -// identifiers. - -var PRERELEASE = R++ -src[PRERELEASE] = '(?:-(' + src[PRERELEASEIDENTIFIER] + - '(?:\\.' + src[PRERELEASEIDENTIFIER] + ')*))' - -var PRERELEASELOOSE = R++ -src[PRERELEASELOOSE] = '(?:-?(' + src[PRERELEASEIDENTIFIERLOOSE] + - '(?:\\.' + src[PRERELEASEIDENTIFIERLOOSE] + ')*))' - -// ## Build Metadata Identifier -// Any combination of digits, letters, or hyphens. - -var BUILDIDENTIFIER = R++ -src[BUILDIDENTIFIER] = '[0-9A-Za-z-]+' - -// ## Build Metadata -// Plus sign, followed by one or more period-separated build metadata -// identifiers. - -var BUILD = R++ -src[BUILD] = '(?:\\+(' + src[BUILDIDENTIFIER] + - '(?:\\.' + src[BUILDIDENTIFIER] + ')*))' - -// ## Full Version String -// A main version, followed optionally by a pre-release version and -// build metadata. - -// Note that the only major, minor, patch, and pre-release sections of -// the version string are capturing groups. The build metadata is not a -// capturing group, because it should not ever be used in version -// comparison. - -var FULL = R++ -var FULLPLAIN = 'v?' + src[MAINVERSION] + - src[PRERELEASE] + '?' + - src[BUILD] + '?' - -src[FULL] = '^' + FULLPLAIN + '$' - -// like full, but allows v1.2.3 and =1.2.3, which people do sometimes. -// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty -// common in the npm registry. -var LOOSEPLAIN = '[v=\\s]*' + src[MAINVERSIONLOOSE] + - src[PRERELEASELOOSE] + '?' + - src[BUILD] + '?' - -var LOOSE = R++ -src[LOOSE] = '^' + LOOSEPLAIN + '$' - -var GTLT = R++ -src[GTLT] = '((?:<|>)?=?)' - -// Something like "2.*" or "1.2.x". -// Note that "x.x" is a valid xRange identifer, meaning "any version" -// Only the first item is strictly required. -var XRANGEIDENTIFIERLOOSE = R++ -src[XRANGEIDENTIFIERLOOSE] = src[NUMERICIDENTIFIERLOOSE] + '|x|X|\\*' -var XRANGEIDENTIFIER = R++ -src[XRANGEIDENTIFIER] = src[NUMERICIDENTIFIER] + '|x|X|\\*' - -var XRANGEPLAIN = R++ -src[XRANGEPLAIN] = '[v=\\s]*(' + src[XRANGEIDENTIFIER] + ')' + - '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' + - '(?:\\.(' + src[XRANGEIDENTIFIER] + ')' + - '(?:' + src[PRERELEASE] + ')?' + - src[BUILD] + '?' + - ')?)?' - -var XRANGEPLAINLOOSE = R++ -src[XRANGEPLAINLOOSE] = '[v=\\s]*(' + src[XRANGEIDENTIFIERLOOSE] + ')' + - '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' + - '(?:\\.(' + src[XRANGEIDENTIFIERLOOSE] + ')' + - '(?:' + src[PRERELEASELOOSE] + ')?' + - src[BUILD] + '?' + - ')?)?' - -var XRANGE = R++ -src[XRANGE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAIN] + '$' -var XRANGELOOSE = R++ -src[XRANGELOOSE] = '^' + src[GTLT] + '\\s*' + src[XRANGEPLAINLOOSE] + '$' - -// Coercion. -// Extract anything that could conceivably be a part of a valid semver -var COERCE = R++ -src[COERCE] = '(?:^|[^\\d])' + - '(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '})' + - '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' + - '(?:\\.(\\d{1,' + MAX_SAFE_COMPONENT_LENGTH + '}))?' + - '(?:$|[^\\d])' - -// Tilde ranges. -// Meaning is "reasonably at or greater than" -var LONETILDE = R++ -src[LONETILDE] = '(?:~>?)' - -var TILDETRIM = R++ -src[TILDETRIM] = '(\\s*)' + src[LONETILDE] + '\\s+' -re[TILDETRIM] = new RegExp(src[TILDETRIM], 'g') -var tildeTrimReplace = '$1~' - -var TILDE = R++ -src[TILDE] = '^' + src[LONETILDE] + src[XRANGEPLAIN] + '$' -var TILDELOOSE = R++ -src[TILDELOOSE] = '^' + src[LONETILDE] + src[XRANGEPLAINLOOSE] + '$' - -// Caret ranges. -// Meaning is "at least and backwards compatible with" -var LONECARET = R++ -src[LONECARET] = '(?:\\^)' - -var CARETTRIM = R++ -src[CARETTRIM] = '(\\s*)' + src[LONECARET] + '\\s+' -re[CARETTRIM] = new RegExp(src[CARETTRIM], 'g') -var caretTrimReplace = '$1^' - -var CARET = R++ -src[CARET] = '^' + src[LONECARET] + src[XRANGEPLAIN] + '$' -var CARETLOOSE = R++ -src[CARETLOOSE] = '^' + src[LONECARET] + src[XRANGEPLAINLOOSE] + '$' - -// A simple gt/lt/eq thing, or just "" to indicate "any version" -var COMPARATORLOOSE = R++ -src[COMPARATORLOOSE] = '^' + src[GTLT] + '\\s*(' + LOOSEPLAIN + ')$|^$' -var COMPARATOR = R++ -src[COMPARATOR] = '^' + src[GTLT] + '\\s*(' + FULLPLAIN + ')$|^$' - -// An expression to strip any whitespace between the gtlt and the thing -// it modifies, so that `> 1.2.3` ==> `>1.2.3` -var COMPARATORTRIM = R++ -src[COMPARATORTRIM] = '(\\s*)' + src[GTLT] + - '\\s*(' + LOOSEPLAIN + '|' + src[XRANGEPLAIN] + ')' - -// this one has to use the /g flag -re[COMPARATORTRIM] = new RegExp(src[COMPARATORTRIM], 'g') -var comparatorTrimReplace = '$1$2$3' - -// Something like `1.2.3 - 1.2.4` -// Note that these all use the loose form, because they'll be -// checked against either the strict or loose comparator form -// later. -var HYPHENRANGE = R++ -src[HYPHENRANGE] = '^\\s*(' + src[XRANGEPLAIN] + ')' + - '\\s+-\\s+' + - '(' + src[XRANGEPLAIN] + ')' + - '\\s*$' - -var HYPHENRANGELOOSE = R++ -src[HYPHENRANGELOOSE] = '^\\s*(' + src[XRANGEPLAINLOOSE] + ')' + - '\\s+-\\s+' + - '(' + src[XRANGEPLAINLOOSE] + ')' + - '\\s*$' - -// Star ranges basically just allow anything at all. -var STAR = R++ -src[STAR] = '(<|>)?=?\\s*\\*' - -// Compile to actual regexp objects. -// All are flag-free, unless they were created above with a flag. -for (var i = 0; i < R; i++) { - debug(i, src[i]) - if (!re[i]) { - re[i] = new RegExp(src[i]) - } -} - -exports.parse = parse -function parse (version, options) { - if (!options || typeof options !== 'object') { - options = { - loose: !!options, - includePrerelease: false - } - } - - if (version instanceof SemVer) { - return version - } - - if (typeof version !== 'string') { - return null - } - - if (version.length > MAX_LENGTH) { - return null - } - - var r = options.loose ? re[LOOSE] : re[FULL] - if (!r.test(version)) { - return null - } - - try { - return new SemVer(version, options) - } catch (er) { - return null - } -} - -exports.valid = valid -function valid (version, options) { - var v = parse(version, options) - return v ? v.version : null -} - -exports.clean = clean -function clean (version, options) { - var s = parse(version.trim().replace(/^[=v]+/, ''), options) - return s ? s.version : null -} - -exports.SemVer = SemVer - -function SemVer (version, options) { - if (!options || typeof options !== 'object') { - options = { - loose: !!options, - includePrerelease: false - } - } - if (version instanceof SemVer) { - if (version.loose === options.loose) { - return version - } else { - version = version.version - } - } else if (typeof version !== 'string') { - throw new TypeError('Invalid Version: ' + version) - } - - if (version.length > MAX_LENGTH) { - throw new TypeError('version is longer than ' + MAX_LENGTH + ' characters') - } - - if (!(this instanceof SemVer)) { - return new SemVer(version, options) - } - - debug('SemVer', version, options) - this.options = options - this.loose = !!options.loose - - var m = version.trim().match(options.loose ? re[LOOSE] : re[FULL]) - - if (!m) { - throw new TypeError('Invalid Version: ' + version) - } - - this.raw = version - - // these are actually numbers - this.major = +m[1] - this.minor = +m[2] - this.patch = +m[3] - - if (this.major > MAX_SAFE_INTEGER || this.major < 0) { - throw new TypeError('Invalid major version') - } - - if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) { - throw new TypeError('Invalid minor version') - } - - if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) { - throw new TypeError('Invalid patch version') - } - - // numberify any prerelease numeric ids - if (!m[4]) { - this.prerelease = [] - } else { - this.prerelease = m[4].split('.').map(function (id) { - if (/^[0-9]+$/.test(id)) { - var num = +id - if (num >= 0 && num < MAX_SAFE_INTEGER) { - return num - } - } - return id - }) - } - - this.build = m[5] ? m[5].split('.') : [] - this.format() -} - -SemVer.prototype.format = function () { - this.version = this.major + '.' + this.minor + '.' + this.patch - if (this.prerelease.length) { - this.version += '-' + this.prerelease.join('.') - } - return this.version -} - -SemVer.prototype.toString = function () { - return this.version -} - -SemVer.prototype.compare = function (other) { - debug('SemVer.compare', this.version, this.options, other) - if (!(other instanceof SemVer)) { - other = new SemVer(other, this.options) - } - - return this.compareMain(other) || this.comparePre(other) -} - -SemVer.prototype.compareMain = function (other) { - if (!(other instanceof SemVer)) { - other = new SemVer(other, this.options) - } - - return compareIdentifiers(this.major, other.major) || - compareIdentifiers(this.minor, other.minor) || - compareIdentifiers(this.patch, other.patch) -} - -SemVer.prototype.comparePre = function (other) { - if (!(other instanceof SemVer)) { - other = new SemVer(other, this.options) - } - - // NOT having a prerelease is > having one - if (this.prerelease.length && !other.prerelease.length) { - return -1 - } else if (!this.prerelease.length && other.prerelease.length) { - return 1 - } else if (!this.prerelease.length && !other.prerelease.length) { - return 0 - } - - var i = 0 - do { - var a = this.prerelease[i] - var b = other.prerelease[i] - debug('prerelease compare', i, a, b) - if (a === undefined && b === undefined) { - return 0 - } else if (b === undefined) { - return 1 - } else if (a === undefined) { - return -1 - } else if (a === b) { - continue - } else { - return compareIdentifiers(a, b) - } - } while (++i) -} - -// preminor will bump the version up to the next minor release, and immediately -// down to pre-release. premajor and prepatch work the same way. -SemVer.prototype.inc = function (release, identifier) { - switch (release) { - case 'premajor': - this.prerelease.length = 0 - this.patch = 0 - this.minor = 0 - this.major++ - this.inc('pre', identifier) - break - case 'preminor': - this.prerelease.length = 0 - this.patch = 0 - this.minor++ - this.inc('pre', identifier) - break - case 'prepatch': - // If this is already a prerelease, it will bump to the next version - // drop any prereleases that might already exist, since they are not - // relevant at this point. - this.prerelease.length = 0 - this.inc('patch', identifier) - this.inc('pre', identifier) - break - // If the input is a non-prerelease version, this acts the same as - // prepatch. - case 'prerelease': - if (this.prerelease.length === 0) { - this.inc('patch', identifier) - } - this.inc('pre', identifier) - break - - case 'major': - // If this is a pre-major version, bump up to the same major version. - // Otherwise increment major. - // 1.0.0-5 bumps to 1.0.0 - // 1.1.0 bumps to 2.0.0 - if (this.minor !== 0 || - this.patch !== 0 || - this.prerelease.length === 0) { - this.major++ - } - this.minor = 0 - this.patch = 0 - this.prerelease = [] - break - case 'minor': - // If this is a pre-minor version, bump up to the same minor version. - // Otherwise increment minor. - // 1.2.0-5 bumps to 1.2.0 - // 1.2.1 bumps to 1.3.0 - if (this.patch !== 0 || this.prerelease.length === 0) { - this.minor++ - } - this.patch = 0 - this.prerelease = [] - break - case 'patch': - // If this is not a pre-release version, it will increment the patch. - // If it is a pre-release it will bump up to the same patch version. - // 1.2.0-5 patches to 1.2.0 - // 1.2.0 patches to 1.2.1 - if (this.prerelease.length === 0) { - this.patch++ - } - this.prerelease = [] - break - // This probably shouldn't be used publicly. - // 1.0.0 "pre" would become 1.0.0-0 which is the wrong direction. - case 'pre': - if (this.prerelease.length === 0) { - this.prerelease = [0] - } else { - var i = this.prerelease.length - while (--i >= 0) { - if (typeof this.prerelease[i] === 'number') { - this.prerelease[i]++ - i = -2 - } - } - if (i === -1) { - // didn't increment anything - this.prerelease.push(0) - } - } - if (identifier) { - // 1.2.0-beta.1 bumps to 1.2.0-beta.2, - // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0 - if (this.prerelease[0] === identifier) { - if (isNaN(this.prerelease[1])) { - this.prerelease = [identifier, 0] - } - } else { - this.prerelease = [identifier, 0] - } - } - break - - default: - throw new Error('invalid increment argument: ' + release) - } - this.format() - this.raw = this.version - return this -} - -exports.inc = inc -function inc (version, release, loose, identifier) { - if (typeof (loose) === 'string') { - identifier = loose - loose = undefined - } - - try { - return new SemVer(version, loose).inc(release, identifier).version - } catch (er) { - return null - } -} - -exports.diff = diff -function diff (version1, version2) { - if (eq(version1, version2)) { - return null - } else { - var v1 = parse(version1) - var v2 = parse(version2) - var prefix = '' - if (v1.prerelease.length || v2.prerelease.length) { - prefix = 'pre' - var defaultResult = 'prerelease' - } - for (var key in v1) { - if (key === 'major' || key === 'minor' || key === 'patch') { - if (v1[key] !== v2[key]) { - return prefix + key - } - } - } - return defaultResult // may be undefined - } -} - -exports.compareIdentifiers = compareIdentifiers - -var numeric = /^[0-9]+$/ -function compareIdentifiers (a, b) { - var anum = numeric.test(a) - var bnum = numeric.test(b) - - if (anum && bnum) { - a = +a - b = +b - } - - return a === b ? 0 - : (anum && !bnum) ? -1 - : (bnum && !anum) ? 1 - : a < b ? -1 - : 1 -} - -exports.rcompareIdentifiers = rcompareIdentifiers -function rcompareIdentifiers (a, b) { - return compareIdentifiers(b, a) -} - -exports.major = major -function major (a, loose) { - return new SemVer(a, loose).major -} - -exports.minor = minor -function minor (a, loose) { - return new SemVer(a, loose).minor -} - -exports.patch = patch -function patch (a, loose) { - return new SemVer(a, loose).patch -} - -exports.compare = compare -function compare (a, b, loose) { - return new SemVer(a, loose).compare(new SemVer(b, loose)) -} - -exports.compareLoose = compareLoose -function compareLoose (a, b) { - return compare(a, b, true) -} - -exports.rcompare = rcompare -function rcompare (a, b, loose) { - return compare(b, a, loose) -} - -exports.sort = sort -function sort (list, loose) { - return list.sort(function (a, b) { - return exports.compare(a, b, loose) - }) -} - -exports.rsort = rsort -function rsort (list, loose) { - return list.sort(function (a, b) { - return exports.rcompare(a, b, loose) - }) -} - -exports.gt = gt -function gt (a, b, loose) { - return compare(a, b, loose) > 0 -} - -exports.lt = lt -function lt (a, b, loose) { - return compare(a, b, loose) < 0 -} - -exports.eq = eq -function eq (a, b, loose) { - return compare(a, b, loose) === 0 -} - -exports.neq = neq -function neq (a, b, loose) { - return compare(a, b, loose) !== 0 -} - -exports.gte = gte -function gte (a, b, loose) { - return compare(a, b, loose) >= 0 -} - -exports.lte = lte -function lte (a, b, loose) { - return compare(a, b, loose) <= 0 -} - -exports.cmp = cmp -function cmp (a, op, b, loose) { - switch (op) { - case '===': - if (typeof a === 'object') - a = a.version - if (typeof b === 'object') - b = b.version - return a === b - - case '!==': - if (typeof a === 'object') - a = a.version - if (typeof b === 'object') - b = b.version - return a !== b - - case '': - case '=': - case '==': - return eq(a, b, loose) - - case '!=': - return neq(a, b, loose) - - case '>': - return gt(a, b, loose) - - case '>=': - return gte(a, b, loose) - - case '<': - return lt(a, b, loose) - - case '<=': - return lte(a, b, loose) - - default: - throw new TypeError('Invalid operator: ' + op) - } -} - -exports.Comparator = Comparator -function Comparator (comp, options) { - if (!options || typeof options !== 'object') { - options = { - loose: !!options, - includePrerelease: false - } - } - - if (comp instanceof Comparator) { - if (comp.loose === !!options.loose) { - return comp - } else { - comp = comp.value - } - } - - if (!(this instanceof Comparator)) { - return new Comparator(comp, options) - } - - debug('comparator', comp, options) - this.options = options - this.loose = !!options.loose - this.parse(comp) - - if (this.semver === ANY) { - this.value = '' - } else { - this.value = this.operator + this.semver.version - } - - debug('comp', this) -} - -var ANY = {} -Comparator.prototype.parse = function (comp) { - var r = this.options.loose ? re[COMPARATORLOOSE] : re[COMPARATOR] - var m = comp.match(r) - - if (!m) { - throw new TypeError('Invalid comparator: ' + comp) - } - - this.operator = m[1] - if (this.operator === '=') { - this.operator = '' - } - - // if it literally is just '>' or '' then allow anything. - if (!m[2]) { - this.semver = ANY - } else { - this.semver = new SemVer(m[2], this.options.loose) - } -} - -Comparator.prototype.toString = function () { - return this.value -} - -Comparator.prototype.test = function (version) { - debug('Comparator.test', version, this.options.loose) - - if (this.semver === ANY) { - return true - } - - if (typeof version === 'string') { - version = new SemVer(version, this.options) - } - - return cmp(version, this.operator, this.semver, this.options) -} - -Comparator.prototype.intersects = function (comp, options) { - if (!(comp instanceof Comparator)) { - throw new TypeError('a Comparator is required') - } - - if (!options || typeof options !== 'object') { - options = { - loose: !!options, - includePrerelease: false - } - } - - var rangeTmp - - if (this.operator === '') { - rangeTmp = new Range(comp.value, options) - return satisfies(this.value, rangeTmp, options) - } else if (comp.operator === '') { - rangeTmp = new Range(this.value, options) - return satisfies(comp.semver, rangeTmp, options) - } - - var sameDirectionIncreasing = - (this.operator === '>=' || this.operator === '>') && - (comp.operator === '>=' || comp.operator === '>') - var sameDirectionDecreasing = - (this.operator === '<=' || this.operator === '<') && - (comp.operator === '<=' || comp.operator === '<') - var sameSemVer = this.semver.version === comp.semver.version - var differentDirectionsInclusive = - (this.operator === '>=' || this.operator === '<=') && - (comp.operator === '>=' || comp.operator === '<=') - var oppositeDirectionsLessThan = - cmp(this.semver, '<', comp.semver, options) && - ((this.operator === '>=' || this.operator === '>') && - (comp.operator === '<=' || comp.operator === '<')) - var oppositeDirectionsGreaterThan = - cmp(this.semver, '>', comp.semver, options) && - ((this.operator === '<=' || this.operator === '<') && - (comp.operator === '>=' || comp.operator === '>')) - - return sameDirectionIncreasing || sameDirectionDecreasing || - (sameSemVer && differentDirectionsInclusive) || - oppositeDirectionsLessThan || oppositeDirectionsGreaterThan -} - -exports.Range = Range -function Range (range, options) { - if (!options || typeof options !== 'object') { - options = { - loose: !!options, - includePrerelease: false - } - } - - if (range instanceof Range) { - if (range.loose === !!options.loose && - range.includePrerelease === !!options.includePrerelease) { - return range - } else { - return new Range(range.raw, options) - } - } - - if (range instanceof Comparator) { - return new Range(range.value, options) - } - - if (!(this instanceof Range)) { - return new Range(range, options) - } - - this.options = options - this.loose = !!options.loose - this.includePrerelease = !!options.includePrerelease - - // First, split based on boolean or || - this.raw = range - this.set = range.split(/\s*\|\|\s*/).map(function (range) { - return this.parseRange(range.trim()) - }, this).filter(function (c) { - // throw out any that are not relevant for whatever reason - return c.length - }) - - if (!this.set.length) { - throw new TypeError('Invalid SemVer Range: ' + range) - } - - this.format() -} - -Range.prototype.format = function () { - this.range = this.set.map(function (comps) { - return comps.join(' ').trim() - }).join('||').trim() - return this.range -} - -Range.prototype.toString = function () { - return this.range -} - -Range.prototype.parseRange = function (range) { - var loose = this.options.loose - range = range.trim() - // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4` - var hr = loose ? re[HYPHENRANGELOOSE] : re[HYPHENRANGE] - range = range.replace(hr, hyphenReplace) - debug('hyphen replace', range) - // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5` - range = range.replace(re[COMPARATORTRIM], comparatorTrimReplace) - debug('comparator trim', range, re[COMPARATORTRIM]) - - // `~ 1.2.3` => `~1.2.3` - range = range.replace(re[TILDETRIM], tildeTrimReplace) - - // `^ 1.2.3` => `^1.2.3` - range = range.replace(re[CARETTRIM], caretTrimReplace) - - // normalize spaces - range = range.split(/\s+/).join(' ') - - // At this point, the range is completely trimmed and - // ready to be split into comparators. - - var compRe = loose ? re[COMPARATORLOOSE] : re[COMPARATOR] - var set = range.split(' ').map(function (comp) { - return parseComparator(comp, this.options) - }, this).join(' ').split(/\s+/) - if (this.options.loose) { - // in loose mode, throw out any that are not valid comparators - set = set.filter(function (comp) { - return !!comp.match(compRe) - }) - } - set = set.map(function (comp) { - return new Comparator(comp, this.options) - }, this) - - return set -} - -Range.prototype.intersects = function (range, options) { - if (!(range instanceof Range)) { - throw new TypeError('a Range is required') - } - - return this.set.some(function (thisComparators) { - return thisComparators.every(function (thisComparator) { - return range.set.some(function (rangeComparators) { - return rangeComparators.every(function (rangeComparator) { - return thisComparator.intersects(rangeComparator, options) - }) - }) - }) - }) -} - -// Mostly just for testing and legacy API reasons -exports.toComparators = toComparators -function toComparators (range, options) { - return new Range(range, options).set.map(function (comp) { - return comp.map(function (c) { - return c.value - }).join(' ').trim().split(' ') - }) -} - -// comprised of xranges, tildes, stars, and gtlt's at this point. -// already replaced the hyphen ranges -// turn into a set of JUST comparators. -function parseComparator (comp, options) { - debug('comp', comp, options) - comp = replaceCarets(comp, options) - debug('caret', comp) - comp = replaceTildes(comp, options) - debug('tildes', comp) - comp = replaceXRanges(comp, options) - debug('xrange', comp) - comp = replaceStars(comp, options) - debug('stars', comp) - return comp -} - -function isX (id) { - return !id || id.toLowerCase() === 'x' || id === '*' -} - -// ~, ~> --> * (any, kinda silly) -// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0 -// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0 -// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0 -// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0 -// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0 -function replaceTildes (comp, options) { - return comp.trim().split(/\s+/).map(function (comp) { - return replaceTilde(comp, options) - }).join(' ') -} - -function replaceTilde (comp, options) { - var r = options.loose ? re[TILDELOOSE] : re[TILDE] - return comp.replace(r, function (_, M, m, p, pr) { - debug('tilde', comp, _, M, m, p, pr) - var ret - - if (isX(M)) { - ret = '' - } else if (isX(m)) { - ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0' - } else if (isX(p)) { - // ~1.2 == >=1.2.0 <1.3.0 - ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0' - } else if (pr) { - debug('replaceTilde pr', pr) - ret = '>=' + M + '.' + m + '.' + p + '-' + pr + - ' <' + M + '.' + (+m + 1) + '.0' - } else { - // ~1.2.3 == >=1.2.3 <1.3.0 - ret = '>=' + M + '.' + m + '.' + p + - ' <' + M + '.' + (+m + 1) + '.0' - } - - debug('tilde return', ret) - return ret - }) -} - -// ^ --> * (any, kinda silly) -// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0 -// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0 -// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0 -// ^1.2.3 --> >=1.2.3 <2.0.0 -// ^1.2.0 --> >=1.2.0 <2.0.0 -function replaceCarets (comp, options) { - return comp.trim().split(/\s+/).map(function (comp) { - return replaceCaret(comp, options) - }).join(' ') -} - -function replaceCaret (comp, options) { - debug('caret', comp, options) - var r = options.loose ? re[CARETLOOSE] : re[CARET] - return comp.replace(r, function (_, M, m, p, pr) { - debug('caret', comp, _, M, m, p, pr) - var ret - - if (isX(M)) { - ret = '' - } else if (isX(m)) { - ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0' - } else if (isX(p)) { - if (M === '0') { - ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0' - } else { - ret = '>=' + M + '.' + m + '.0 <' + (+M + 1) + '.0.0' - } - } else if (pr) { - debug('replaceCaret pr', pr) - if (M === '0') { - if (m === '0') { - ret = '>=' + M + '.' + m + '.' + p + '-' + pr + - ' <' + M + '.' + m + '.' + (+p + 1) - } else { - ret = '>=' + M + '.' + m + '.' + p + '-' + pr + - ' <' + M + '.' + (+m + 1) + '.0' - } - } else { - ret = '>=' + M + '.' + m + '.' + p + '-' + pr + - ' <' + (+M + 1) + '.0.0' - } - } else { - debug('no pr') - if (M === '0') { - if (m === '0') { - ret = '>=' + M + '.' + m + '.' + p + - ' <' + M + '.' + m + '.' + (+p + 1) - } else { - ret = '>=' + M + '.' + m + '.' + p + - ' <' + M + '.' + (+m + 1) + '.0' - } - } else { - ret = '>=' + M + '.' + m + '.' + p + - ' <' + (+M + 1) + '.0.0' - } - } - - debug('caret return', ret) - return ret - }) -} - -function replaceXRanges (comp, options) { - debug('replaceXRanges', comp, options) - return comp.split(/\s+/).map(function (comp) { - return replaceXRange(comp, options) - }).join(' ') -} - -function replaceXRange (comp, options) { - comp = comp.trim() - var r = options.loose ? re[XRANGELOOSE] : re[XRANGE] - return comp.replace(r, function (ret, gtlt, M, m, p, pr) { - debug('xRange', comp, ret, gtlt, M, m, p, pr) - var xM = isX(M) - var xm = xM || isX(m) - var xp = xm || isX(p) - var anyX = xp - - if (gtlt === '=' && anyX) { - gtlt = '' - } - - if (xM) { - if (gtlt === '>' || gtlt === '<') { - // nothing is allowed - ret = '<0.0.0' - } else { - // nothing is forbidden - ret = '*' - } - } else if (gtlt && anyX) { - // we know patch is an x, because we have any x at all. - // replace X with 0 - if (xm) { - m = 0 - } - p = 0 - - if (gtlt === '>') { - // >1 => >=2.0.0 - // >1.2 => >=1.3.0 - // >1.2.3 => >= 1.2.4 - gtlt = '>=' - if (xm) { - M = +M + 1 - m = 0 - p = 0 - } else { - m = +m + 1 - p = 0 - } - } else if (gtlt === '<=') { - // <=0.7.x is actually <0.8.0, since any 0.7.x should - // pass. Similarly, <=7.x is actually <8.0.0, etc. - gtlt = '<' - if (xm) { - M = +M + 1 - } else { - m = +m + 1 - } - } - - ret = gtlt + M + '.' + m + '.' + p - } else if (xm) { - ret = '>=' + M + '.0.0 <' + (+M + 1) + '.0.0' - } else if (xp) { - ret = '>=' + M + '.' + m + '.0 <' + M + '.' + (+m + 1) + '.0' - } - - debug('xRange return', ret) - - return ret - }) -} - -// Because * is AND-ed with everything else in the comparator, -// and '' means "any version", just remove the *s entirely. -function replaceStars (comp, options) { - debug('replaceStars', comp, options) - // Looseness is ignored here. star is always as loose as it gets! - return comp.trim().replace(re[STAR], '') -} - -// This function is passed to string.replace(re[HYPHENRANGE]) -// M, m, patch, prerelease, build -// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5 -// 1.2.3 - 3.4 => >=1.2.0 <3.5.0 Any 3.4.x will do -// 1.2 - 3.4 => >=1.2.0 <3.5.0 -function hyphenReplace ($0, - from, fM, fm, fp, fpr, fb, - to, tM, tm, tp, tpr, tb) { - if (isX(fM)) { - from = '' - } else if (isX(fm)) { - from = '>=' + fM + '.0.0' - } else if (isX(fp)) { - from = '>=' + fM + '.' + fm + '.0' - } else { - from = '>=' + from - } - - if (isX(tM)) { - to = '' - } else if (isX(tm)) { - to = '<' + (+tM + 1) + '.0.0' - } else if (isX(tp)) { - to = '<' + tM + '.' + (+tm + 1) + '.0' - } else if (tpr) { - to = '<=' + tM + '.' + tm + '.' + tp + '-' + tpr - } else { - to = '<=' + to - } - - return (from + ' ' + to).trim() -} - -// if ANY of the sets match ALL of its comparators, then pass -Range.prototype.test = function (version) { - if (!version) { - return false - } - - if (typeof version === 'string') { - version = new SemVer(version, this.options) - } - - for (var i = 0; i < this.set.length; i++) { - if (testSet(this.set[i], version, this.options)) { - return true - } - } - return false -} - -function testSet (set, version, options) { - for (var i = 0; i < set.length; i++) { - if (!set[i].test(version)) { - return false - } - } - - if (version.prerelease.length && !options.includePrerelease) { - // Find the set of versions that are allowed to have prereleases - // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0 - // That should allow `1.2.3-pr.2` to pass. - // However, `1.2.4-alpha.notready` should NOT be allowed, - // even though it's within the range set by the comparators. - for (i = 0; i < set.length; i++) { - debug(set[i].semver) - if (set[i].semver === ANY) { - continue - } - - if (set[i].semver.prerelease.length > 0) { - var allowed = set[i].semver - if (allowed.major === version.major && - allowed.minor === version.minor && - allowed.patch === version.patch) { - return true - } - } - } - - // Version has a -pre, but it's not one of the ones we like. - return false - } - - return true -} - -exports.satisfies = satisfies -function satisfies (version, range, options) { - try { - range = new Range(range, options) - } catch (er) { - return false - } - return range.test(version) -} - -exports.maxSatisfying = maxSatisfying -function maxSatisfying (versions, range, options) { - var max = null - var maxSV = null - try { - var rangeObj = new Range(range, options) - } catch (er) { - return null - } - versions.forEach(function (v) { - if (rangeObj.test(v)) { - // satisfies(v, range, options) - if (!max || maxSV.compare(v) === -1) { - // compare(max, v, true) - max = v - maxSV = new SemVer(max, options) - } - } - }) - return max -} - -exports.minSatisfying = minSatisfying -function minSatisfying (versions, range, options) { - var min = null - var minSV = null - try { - var rangeObj = new Range(range, options) - } catch (er) { - return null - } - versions.forEach(function (v) { - if (rangeObj.test(v)) { - // satisfies(v, range, options) - if (!min || minSV.compare(v) === 1) { - // compare(min, v, true) - min = v - minSV = new SemVer(min, options) - } - } - }) - return min -} - -exports.minVersion = minVersion -function minVersion (range, loose) { - range = new Range(range, loose) - - var minver = new SemVer('0.0.0') - if (range.test(minver)) { - return minver - } - - minver = new SemVer('0.0.0-0') - if (range.test(minver)) { - return minver - } - - minver = null - for (var i = 0; i < range.set.length; ++i) { - var comparators = range.set[i] - - comparators.forEach(function (comparator) { - // Clone to avoid manipulating the comparator's semver object. - var compver = new SemVer(comparator.semver.version) - switch (comparator.operator) { - case '>': - if (compver.prerelease.length === 0) { - compver.patch++ - } else { - compver.prerelease.push(0) - } - compver.raw = compver.format() - /* fallthrough */ - case '': - case '>=': - if (!minver || gt(minver, compver)) { - minver = compver - } - break - case '<': - case '<=': - /* Ignore maximum versions */ - break - /* istanbul ignore next */ - default: - throw new Error('Unexpected operation: ' + comparator.operator) - } - }) - } - - if (minver && range.test(minver)) { - return minver - } - - return null -} - -exports.validRange = validRange -function validRange (range, options) { - try { - // Return '*' instead of '' so that truthiness works. - // This will throw if it's invalid anyway - return new Range(range, options).range || '*' - } catch (er) { - return null - } -} - -// Determine if version is less than all the versions possible in the range -exports.ltr = ltr -function ltr (version, range, options) { - return outside(version, range, '<', options) -} - -// Determine if version is greater than all the versions possible in the range. -exports.gtr = gtr -function gtr (version, range, options) { - return outside(version, range, '>', options) -} - -exports.outside = outside -function outside (version, range, hilo, options) { - version = new SemVer(version, options) - range = new Range(range, options) - - var gtfn, ltefn, ltfn, comp, ecomp - switch (hilo) { - case '>': - gtfn = gt - ltefn = lte - ltfn = lt - comp = '>' - ecomp = '>=' - break - case '<': - gtfn = lt - ltefn = gte - ltfn = gt - comp = '<' - ecomp = '<=' - break - default: - throw new TypeError('Must provide a hilo val of "<" or ">"') - } - - // If it satisifes the range it is not outside - if (satisfies(version, range, options)) { - return false - } - - // From now on, variable terms are as if we're in "gtr" mode. - // but note that everything is flipped for the "ltr" function. - - for (var i = 0; i < range.set.length; ++i) { - var comparators = range.set[i] - - var high = null - var low = null - - comparators.forEach(function (comparator) { - if (comparator.semver === ANY) { - comparator = new Comparator('>=0.0.0') - } - high = high || comparator - low = low || comparator - if (gtfn(comparator.semver, high.semver, options)) { - high = comparator - } else if (ltfn(comparator.semver, low.semver, options)) { - low = comparator - } - }) - - // If the edge version comparator has a operator then our version - // isn't outside it - if (high.operator === comp || high.operator === ecomp) { - return false - } - - // If the lowest version comparator has an operator and our version - // is less than it then it isn't higher than the range - if ((!low.operator || low.operator === comp) && - ltefn(version, low.semver)) { - return false - } else if (low.operator === ecomp && ltfn(version, low.semver)) { - return false - } - } - return true -} - -exports.prerelease = prerelease -function prerelease (version, options) { - var parsed = parse(version, options) - return (parsed && parsed.prerelease.length) ? parsed.prerelease : null -} - -exports.intersects = intersects -function intersects (r1, r2, options) { - r1 = new Range(r1, options) - r2 = new Range(r2, options) - return r1.intersects(r2) -} - -exports.coerce = coerce -function coerce (version) { - if (version instanceof SemVer) { - return version - } - - if (typeof version !== 'string') { - return null - } - - var match = version.match(re[COERCE]) - - if (match == null) { - return null - } - - return parse(match[1] + - '.' + (match[2] || '0') + - '.' + (match[3] || '0')) -} - - -/***/ }), - -/***/ 119: -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -var literal_types_1 = __webpack_require__(186); -var id_1 = __webpack_require__(786); -var Binding = (function () { - function Binding(serviceIdentifier, scope) { - this.id = id_1.id(); - this.activated = false; - this.serviceIdentifier = serviceIdentifier; - this.scope = scope; - this.type = literal_types_1.BindingTypeEnum.Invalid; - this.constraint = function (request) { return true; }; - this.implementationType = null; - this.cache = null; - this.factory = null; - this.provider = null; - this.onActivation = null; - this.dynamicValue = null; - } - Binding.prototype.clone = function () { - var clone = new Binding(this.serviceIdentifier, this.scope); - clone.activated = false; - clone.implementationType = this.implementationType; - clone.dynamicValue = this.dynamicValue; - clone.scope = this.scope; - clone.type = this.type; - clone.factory = this.factory; - clone.provider = this.provider; - clone.constraint = this.constraint; - clone.onActivation = this.onActivation; - clone.cache = this.cache; - return clone; - }; - return Binding; -}()); -exports.Binding = Binding; - - -/***/ }), - -/***/ 124: -/***/ (function(module, __unusedexports, __webpack_require__) { - -module.exports = minimatch -minimatch.Minimatch = Minimatch - -var path = { sep: '/' } -try { - path = __webpack_require__(622) -} catch (er) {} - -var GLOBSTAR = minimatch.GLOBSTAR = Minimatch.GLOBSTAR = {} -var expand = __webpack_require__(792) - -var plTypes = { - '!': { open: '(?:(?!(?:', close: '))[^/]*?)'}, - '?': { open: '(?:', close: ')?' }, - '+': { open: '(?:', close: ')+' }, - '*': { open: '(?:', close: ')*' }, - '@': { open: '(?:', close: ')' } -} - -// any single thing other than / -// don't need to escape / when using new RegExp() -var qmark = '[^/]' - -// * => any number of characters -var star = qmark + '*?' - -// ** when dots are allowed. Anything goes, except .. and . -// not (^ or / followed by one or two dots followed by $ or /), -// followed by anything, any number of times. -var twoStarDot = '(?:(?!(?:\\\/|^)(?:\\.{1,2})($|\\\/)).)*?' - -// not a ^ or / followed by a dot, -// followed by anything, any number of times. -var twoStarNoDot = '(?:(?!(?:\\\/|^)\\.).)*?' - -// characters that need to be escaped in RegExp. -var reSpecials = charSet('().*{}+?[]^$\\!') - -// "abc" -> { a:true, b:true, c:true } -function charSet (s) { - return s.split('').reduce(function (set, c) { - set[c] = true - return set - }, {}) -} - -// normalizes slashes. -var slashSplit = /\/+/ - -minimatch.filter = filter -function filter (pattern, options) { - options = options || {} - return function (p, i, list) { - return minimatch(p, pattern, options) - } -} - -function ext (a, b) { - a = a || {} - b = b || {} - var t = {} - Object.keys(b).forEach(function (k) { - t[k] = b[k] - }) - Object.keys(a).forEach(function (k) { - t[k] = a[k] - }) - return t -} - -minimatch.defaults = function (def) { - if (!def || !Object.keys(def).length) return minimatch - - var orig = minimatch - - var m = function minimatch (p, pattern, options) { - return orig.minimatch(p, pattern, ext(def, options)) - } - - m.Minimatch = function Minimatch (pattern, options) { - return new orig.Minimatch(pattern, ext(def, options)) - } - - return m -} - -Minimatch.defaults = function (def) { - if (!def || !Object.keys(def).length) return Minimatch - return minimatch.defaults(def).Minimatch -} - -function minimatch (p, pattern, options) { - if (typeof pattern !== 'string') { - throw new TypeError('glob pattern string required') - } - - if (!options) options = {} - - // shortcut: comments match nothing. - if (!options.nocomment && pattern.charAt(0) === '#') { - return false - } - - // "" only matches "" - if (pattern.trim() === '') return p === '' - - return new Minimatch(pattern, options).match(p) -} - -function Minimatch (pattern, options) { - if (!(this instanceof Minimatch)) { - return new Minimatch(pattern, options) - } - - if (typeof pattern !== 'string') { - throw new TypeError('glob pattern string required') - } - - if (!options) options = {} - pattern = pattern.trim() - - // windows support: need to use /, not \ - if (path.sep !== '/') { - pattern = pattern.split(path.sep).join('/') - } - - this.options = options - this.set = [] - this.pattern = pattern - this.regexp = null - this.negate = false - this.comment = false - this.empty = false - - // make the set of regexps etc. - this.make() -} - -Minimatch.prototype.debug = function () {} - -Minimatch.prototype.make = make -function make () { - // don't do it more than once. - if (this._made) return - - var pattern = this.pattern - var options = this.options - - // empty patterns and comments match nothing. - if (!options.nocomment && pattern.charAt(0) === '#') { - this.comment = true - return - } - if (!pattern) { - this.empty = true - return - } - - // step 1: figure out negation, etc. - this.parseNegate() - - // step 2: expand braces - var set = this.globSet = this.braceExpand() - - if (options.debug) this.debug = console.error - - this.debug(this.pattern, set) - - // step 3: now we have a set, so turn each one into a series of path-portion - // matching patterns. - // These will be regexps, except in the case of "**", which is - // set to the GLOBSTAR object for globstar behavior, - // and will not contain any / characters - set = this.globParts = set.map(function (s) { - return s.split(slashSplit) - }) - - this.debug(this.pattern, set) - - // glob --> regexps - set = set.map(function (s, si, set) { - return s.map(this.parse, this) - }, this) - - this.debug(this.pattern, set) - - // filter out everything that didn't compile properly. - set = set.filter(function (s) { - return s.indexOf(false) === -1 - }) - - this.debug(this.pattern, set) - - this.set = set -} - -Minimatch.prototype.parseNegate = parseNegate -function parseNegate () { - var pattern = this.pattern - var negate = false - var options = this.options - var negateOffset = 0 - - if (options.nonegate) return - - for (var i = 0, l = pattern.length - ; i < l && pattern.charAt(i) === '!' - ; i++) { - negate = !negate - negateOffset++ - } - - if (negateOffset) this.pattern = pattern.substr(negateOffset) - this.negate = negate -} - -// Brace expansion: -// a{b,c}d -> abd acd -// a{b,}c -> abc ac -// a{0..3}d -> a0d a1d a2d a3d -// a{b,c{d,e}f}g -> abg acdfg acefg -// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg -// -// Invalid sets are not expanded. -// a{2..}b -> a{2..}b -// a{b}c -> a{b}c -minimatch.braceExpand = function (pattern, options) { - return braceExpand(pattern, options) -} - -Minimatch.prototype.braceExpand = braceExpand - -function braceExpand (pattern, options) { - if (!options) { - if (this instanceof Minimatch) { - options = this.options - } else { - options = {} - } - } - - pattern = typeof pattern === 'undefined' - ? this.pattern : pattern - - if (typeof pattern === 'undefined') { - throw new TypeError('undefined pattern') - } - - if (options.nobrace || - !pattern.match(/\{.*\}/)) { - // shortcut. no need to expand. - return [pattern] - } - - return expand(pattern) -} - -// parse a component of the expanded set. -// At this point, no pattern may contain "/" in it -// so we're going to return a 2d array, where each entry is the full -// pattern, split on '/', and then turned into a regular expression. -// A regexp is made at the end which joins each array with an -// escaped /, and another full one which joins each regexp with |. -// -// Following the lead of Bash 4.1, note that "**" only has special meaning -// when it is the *only* thing in a path portion. Otherwise, any series -// of * is equivalent to a single *. Globstar behavior is enabled by -// default, and can be disabled by setting options.noglobstar. -Minimatch.prototype.parse = parse -var SUBPARSE = {} -function parse (pattern, isSub) { - if (pattern.length > 1024 * 64) { - throw new TypeError('pattern is too long') - } - - var options = this.options - - // shortcuts - if (!options.noglobstar && pattern === '**') return GLOBSTAR - if (pattern === '') return '' - - var re = '' - var hasMagic = !!options.nocase - var escaping = false - // ? => one single character - var patternListStack = [] - var negativeLists = [] - var stateChar - var inClass = false - var reClassStart = -1 - var classStart = -1 - // . and .. never match anything that doesn't start with ., - // even when options.dot is set. - var patternStart = pattern.charAt(0) === '.' ? '' // anything - // not (start or / followed by . or .. followed by / or end) - : options.dot ? '(?!(?:^|\\\/)\\.{1,2}(?:$|\\\/))' - : '(?!\\.)' - var self = this - - function clearStateChar () { - if (stateChar) { - // we had some state-tracking character - // that wasn't consumed by this pass. - switch (stateChar) { - case '*': - re += star - hasMagic = true - break - case '?': - re += qmark - hasMagic = true - break - default: - re += '\\' + stateChar - break - } - self.debug('clearStateChar %j %j', stateChar, re) - stateChar = false - } - } - - for (var i = 0, len = pattern.length, c - ; (i < len) && (c = pattern.charAt(i)) - ; i++) { - this.debug('%s\t%s %s %j', pattern, i, re, c) - - // skip over any that are escaped. - if (escaping && reSpecials[c]) { - re += '\\' + c - escaping = false - continue - } - - switch (c) { - case '/': - // completely not allowed, even escaped. - // Should already be path-split by now. - return false - - case '\\': - clearStateChar() - escaping = true - continue - - // the various stateChar values - // for the "extglob" stuff. - case '?': - case '*': - case '+': - case '@': - case '!': - this.debug('%s\t%s %s %j <-- stateChar', pattern, i, re, c) - - // all of those are literals inside a class, except that - // the glob [!a] means [^a] in regexp - if (inClass) { - this.debug(' in class') - if (c === '!' && i === classStart + 1) c = '^' - re += c - continue - } - - // if we already have a stateChar, then it means - // that there was something like ** or +? in there. - // Handle the stateChar, then proceed with this one. - self.debug('call clearStateChar %j', stateChar) - clearStateChar() - stateChar = c - // if extglob is disabled, then +(asdf|foo) isn't a thing. - // just clear the statechar *now*, rather than even diving into - // the patternList stuff. - if (options.noext) clearStateChar() - continue - - case '(': - if (inClass) { - re += '(' - continue - } - - if (!stateChar) { - re += '\\(' - continue - } - - patternListStack.push({ - type: stateChar, - start: i - 1, - reStart: re.length, - open: plTypes[stateChar].open, - close: plTypes[stateChar].close - }) - // negation is (?:(?!js)[^/]*) - re += stateChar === '!' ? '(?:(?!(?:' : '(?:' - this.debug('plType %j %j', stateChar, re) - stateChar = false - continue - - case ')': - if (inClass || !patternListStack.length) { - re += '\\)' - continue - } - - clearStateChar() - hasMagic = true - var pl = patternListStack.pop() - // negation is (?:(?!js)[^/]*) - // The others are (?:) - re += pl.close - if (pl.type === '!') { - negativeLists.push(pl) - } - pl.reEnd = re.length - continue - - case '|': - if (inClass || !patternListStack.length || escaping) { - re += '\\|' - escaping = false - continue - } - - clearStateChar() - re += '|' - continue - - // these are mostly the same in regexp and glob - case '[': - // swallow any state-tracking char before the [ - clearStateChar() - - if (inClass) { - re += '\\' + c - continue - } - - inClass = true - classStart = i - reClassStart = re.length - re += c - continue - - case ']': - // a right bracket shall lose its special - // meaning and represent itself in - // a bracket expression if it occurs - // first in the list. -- POSIX.2 2.8.3.2 - if (i === classStart + 1 || !inClass) { - re += '\\' + c - escaping = false - continue - } - - // handle the case where we left a class open. - // "[z-a]" is valid, equivalent to "\[z-a\]" - if (inClass) { - // split where the last [ was, make sure we don't have - // an invalid re. if so, re-walk the contents of the - // would-be class to re-translate any characters that - // were passed through as-is - // TODO: It would probably be faster to determine this - // without a try/catch and a new RegExp, but it's tricky - // to do safely. For now, this is safe and works. - var cs = pattern.substring(classStart + 1, i) - try { - RegExp('[' + cs + ']') - } catch (er) { - // not a valid class! - var sp = this.parse(cs, SUBPARSE) - re = re.substr(0, reClassStart) + '\\[' + sp[0] + '\\]' - hasMagic = hasMagic || sp[1] - inClass = false - continue - } - } - - // finish up the class. - hasMagic = true - inClass = false - re += c - continue - - default: - // swallow any state char that wasn't consumed - clearStateChar() - - if (escaping) { - // no need - escaping = false - } else if (reSpecials[c] - && !(c === '^' && inClass)) { - re += '\\' - } - - re += c - - } // switch - } // for - - // handle the case where we left a class open. - // "[abc" is valid, equivalent to "\[abc" - if (inClass) { - // split where the last [ was, and escape it - // this is a huge pita. We now have to re-walk - // the contents of the would-be class to re-translate - // any characters that were passed through as-is - cs = pattern.substr(classStart + 1) - sp = this.parse(cs, SUBPARSE) - re = re.substr(0, reClassStart) + '\\[' + sp[0] - hasMagic = hasMagic || sp[1] - } - - // handle the case where we had a +( thing at the *end* - // of the pattern. - // each pattern list stack adds 3 chars, and we need to go through - // and escape any | chars that were passed through as-is for the regexp. - // Go through and escape them, taking care not to double-escape any - // | chars that were already escaped. - for (pl = patternListStack.pop(); pl; pl = patternListStack.pop()) { - var tail = re.slice(pl.reStart + pl.open.length) - this.debug('setting tail', re, pl) - // maybe some even number of \, then maybe 1 \, followed by a | - tail = tail.replace(/((?:\\{2}){0,64})(\\?)\|/g, function (_, $1, $2) { - if (!$2) { - // the | isn't already escaped, so escape it. - $2 = '\\' - } - - // need to escape all those slashes *again*, without escaping the - // one that we need for escaping the | character. As it works out, - // escaping an even number of slashes can be done by simply repeating - // it exactly after itself. That's why this trick works. - // - // I am sorry that you have to see this. - return $1 + $1 + $2 + '|' - }) - - this.debug('tail=%j\n %s', tail, tail, pl, re) - var t = pl.type === '*' ? star - : pl.type === '?' ? qmark - : '\\' + pl.type - - hasMagic = true - re = re.slice(0, pl.reStart) + t + '\\(' + tail - } - - // handle trailing things that only matter at the very end. - clearStateChar() - if (escaping) { - // trailing \\ - re += '\\\\' - } - - // only need to apply the nodot start if the re starts with - // something that could conceivably capture a dot - var addPatternStart = false - switch (re.charAt(0)) { - case '.': - case '[': - case '(': addPatternStart = true - } - - // Hack to work around lack of negative lookbehind in JS - // A pattern like: *.!(x).!(y|z) needs to ensure that a name - // like 'a.xyz.yz' doesn't match. So, the first negative - // lookahead, has to look ALL the way ahead, to the end of - // the pattern. - for (var n = negativeLists.length - 1; n > -1; n--) { - var nl = negativeLists[n] - - var nlBefore = re.slice(0, nl.reStart) - var nlFirst = re.slice(nl.reStart, nl.reEnd - 8) - var nlLast = re.slice(nl.reEnd - 8, nl.reEnd) - var nlAfter = re.slice(nl.reEnd) - - nlLast += nlAfter - - // Handle nested stuff like *(*.js|!(*.json)), where open parens - // mean that we should *not* include the ) in the bit that is considered - // "after" the negated section. - var openParensBefore = nlBefore.split('(').length - 1 - var cleanAfter = nlAfter - for (i = 0; i < openParensBefore; i++) { - cleanAfter = cleanAfter.replace(/\)[+*?]?/, '') - } - nlAfter = cleanAfter - - var dollar = '' - if (nlAfter === '' && isSub !== SUBPARSE) { - dollar = '$' - } - var newRe = nlBefore + nlFirst + nlAfter + dollar + nlLast - re = newRe - } - - // if the re is not "" at this point, then we need to make sure - // it doesn't match against an empty path part. - // Otherwise a/* will match a/, which it should not. - if (re !== '' && hasMagic) { - re = '(?=.)' + re - } - - if (addPatternStart) { - re = patternStart + re - } - - // parsing just a piece of a larger pattern. - if (isSub === SUBPARSE) { - return [re, hasMagic] - } - - // skip the regexp for non-magical patterns - // unescape anything in it, though, so that it'll be - // an exact match against a file etc. - if (!hasMagic) { - return globUnescape(pattern) - } - - var flags = options.nocase ? 'i' : '' - try { - var regExp = new RegExp('^' + re + '$', flags) - } catch (er) { - // If it was an invalid regular expression, then it can't match - // anything. This trick looks for a character after the end of - // the string, which is of course impossible, except in multi-line - // mode, but it's not a /m regex. - return new RegExp('$.') - } - - regExp._glob = pattern - regExp._src = re - - return regExp -} - -minimatch.makeRe = function (pattern, options) { - return new Minimatch(pattern, options || {}).makeRe() -} - -Minimatch.prototype.makeRe = makeRe -function makeRe () { - if (this.regexp || this.regexp === false) return this.regexp - - // at this point, this.set is a 2d array of partial - // pattern strings, or "**". - // - // It's better to use .match(). This function shouldn't - // be used, really, but it's pretty convenient sometimes, - // when you just want to work with a regex. - var set = this.set - - if (!set.length) { - this.regexp = false - return this.regexp - } - var options = this.options - - var twoStar = options.noglobstar ? star - : options.dot ? twoStarDot - : twoStarNoDot - var flags = options.nocase ? 'i' : '' - - var re = set.map(function (pattern) { - return pattern.map(function (p) { - return (p === GLOBSTAR) ? twoStar - : (typeof p === 'string') ? regExpEscape(p) - : p._src - }).join('\\\/') - }).join('|') - - // must match entire pattern - // ending in a * or ** will make it less strict. - re = '^(?:' + re + ')$' - - // can match anything, as long as it's not this. - if (this.negate) re = '^(?!' + re + ').*$' - - try { - this.regexp = new RegExp(re, flags) - } catch (ex) { - this.regexp = false - } - return this.regexp -} - -minimatch.match = function (list, pattern, options) { - options = options || {} - var mm = new Minimatch(pattern, options) - list = list.filter(function (f) { - return mm.match(f) - }) - if (mm.options.nonull && !list.length) { - list.push(pattern) - } - return list -} - -Minimatch.prototype.match = match -function match (f, partial) { - this.debug('match', f, this.pattern) - // short-circuit in the case of busted things. - // comments, etc. - if (this.comment) return false - if (this.empty) return f === '' - - if (f === '/' && partial) return true - - var options = this.options - - // windows: need to use /, not \ - if (path.sep !== '/') { - f = f.split(path.sep).join('/') - } - - // treat the test path as a set of pathparts. - f = f.split(slashSplit) - this.debug(this.pattern, 'split', f) - - // just ONE of the pattern sets in this.set needs to match - // in order for it to be valid. If negating, then just one - // match means that we have failed. - // Either way, return on the first hit. - - var set = this.set - this.debug(this.pattern, 'set', set) - - // Find the basename of the path by looking for the last non-empty segment - var filename - var i - for (i = f.length - 1; i >= 0; i--) { - filename = f[i] - if (filename) break - } - - for (i = 0; i < set.length; i++) { - var pattern = set[i] - var file = f - if (options.matchBase && pattern.length === 1) { - file = [filename] - } - var hit = this.matchOne(file, pattern, partial) - if (hit) { - if (options.flipNegate) return true - return !this.negate - } - } - - // didn't get any hits. this is success if it's a negative - // pattern, failure otherwise. - if (options.flipNegate) return false - return this.negate -} - -// set partial to true to test if, for example, -// "/a/b" matches the start of "/*/b/*/d" -// Partial means, if you run out of file before you run -// out of pattern, then that's fine, as long as all -// the parts match. -Minimatch.prototype.matchOne = function (file, pattern, partial) { - var options = this.options - - this.debug('matchOne', - { 'this': this, file: file, pattern: pattern }) - - this.debug('matchOne', file.length, pattern.length) - - for (var fi = 0, - pi = 0, - fl = file.length, - pl = pattern.length - ; (fi < fl) && (pi < pl) - ; fi++, pi++) { - this.debug('matchOne loop') - var p = pattern[pi] - var f = file[fi] - - this.debug(pattern, p, f) - - // should be impossible. - // some invalid regexp stuff in the set. - if (p === false) return false - - if (p === GLOBSTAR) { - this.debug('GLOBSTAR', [pattern, p, f]) - - // "**" - // a/**/b/**/c would match the following: - // a/b/x/y/z/c - // a/x/y/z/b/c - // a/b/x/b/x/c - // a/b/c - // To do this, take the rest of the pattern after - // the **, and see if it would match the file remainder. - // If so, return success. - // If not, the ** "swallows" a segment, and try again. - // This is recursively awful. - // - // a/**/b/**/c matching a/b/x/y/z/c - // - a matches a - // - doublestar - // - matchOne(b/x/y/z/c, b/**/c) - // - b matches b - // - doublestar - // - matchOne(x/y/z/c, c) -> no - // - matchOne(y/z/c, c) -> no - // - matchOne(z/c, c) -> no - // - matchOne(c, c) yes, hit - var fr = fi - var pr = pi + 1 - if (pr === pl) { - this.debug('** at the end') - // a ** at the end will just swallow the rest. - // We have found a match. - // however, it will not swallow /.x, unless - // options.dot is set. - // . and .. are *never* matched by **, for explosively - // exponential reasons. - for (; fi < fl; fi++) { - if (file[fi] === '.' || file[fi] === '..' || - (!options.dot && file[fi].charAt(0) === '.')) return false - } - return true - } - - // ok, let's see if we can swallow whatever we can. - while (fr < fl) { - var swallowee = file[fr] - - this.debug('\nglobstar while', file, fr, pattern, pr, swallowee) - - // XXX remove this slice. Just pass the start index. - if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) { - this.debug('globstar found match!', fr, fl, swallowee) - // found a match. - return true - } else { - // can't swallow "." or ".." ever. - // can only swallow ".foo" when explicitly asked. - if (swallowee === '.' || swallowee === '..' || - (!options.dot && swallowee.charAt(0) === '.')) { - this.debug('dot detected!', file, fr, pattern, pr) - break - } - - // ** swallows a segment, and continue. - this.debug('globstar swallow a segment, and continue') - fr++ - } - } - - // no match was found. - // However, in partial mode, we can't say this is necessarily over. - // If there's more *pattern* left, then - if (partial) { - // ran out of file - this.debug('\n>>> no match, partial?', file, fr, pattern, pr) - if (fr === fl) return true - } - return false - } - - // something other than ** - // non-magic patterns just have to match exactly - // patterns with magic have been turned into regexps. - var hit - if (typeof p === 'string') { - if (options.nocase) { - hit = f.toLowerCase() === p.toLowerCase() - } else { - hit = f === p - } - this.debug('string match', p, f, hit) - } else { - hit = f.match(p) - this.debug('pattern match', p, f, hit) - } - - if (!hit) return false - } - - // Note: ending in / means that we'll get a final "" - // at the end of the pattern. This can only match a - // corresponding "" at the end of the file. - // If the file ends in /, then it can only match a - // a pattern that ends in /, unless the pattern just - // doesn't have any more for it. But, a/b/ should *not* - // match "a/b/*", even though "" matches against the - // [^/]*? pattern, except in partial mode, where it might - // simply not be reached yet. - // However, a/b/ should still satisfy a/* - - // now either we fell off the end of the pattern, or we're done. - if (fi === fl && pi === pl) { - // ran out of pattern and filename at the same time. - // an exact hit! - return true - } else if (fi === fl) { - // ran out of file, but still had pattern left. - // this is ok if we're doing the match as part of - // a glob fs traversal. - return partial - } else if (pi === pl) { - // ran out of pattern, still have file left. - // this is only acceptable if we're on the very last - // empty segment of a file with a trailing slash. - // a/* should match a/b/ - var emptyFileEnd = (fi === fl - 1) && (file[fi] === '') - return emptyFileEnd - } - - // should be unreachable. - throw new Error('wtf?') -} - -// replace stuff like \* with * -function globUnescape (s) { - return s.replace(/\\(.)/g, '$1') -} - -function regExpEscape (s) { - return s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&') -} - - -/***/ }), - -/***/ 129: -/***/ (function(module) { - -module.exports = require("child_process"); - -/***/ }), - -/***/ 131: -/***/ (function(module, __unusedexports, __webpack_require__) { - -var common = __webpack_require__(164); -var fs = __webpack_require__(747); -var path = __webpack_require__(622); - -//@ -//@ ### 'string'.toEnd(file) -//@ -//@ Examples: -//@ -//@ ```javascript -//@ cat('input.txt').toEnd('output.txt'); -//@ ``` -//@ -//@ Analogous to the redirect-and-append operator `>>` in Unix, but works with JavaScript strings (such as -//@ those returned by `cat`, `grep`, etc). -function _toEnd(options, file) { - if (!file) - common.error('wrong arguments'); - - if (!fs.existsSync( path.dirname(file) )) - common.error('no such file or directory: ' + path.dirname(file)); - - try { - fs.appendFileSync(file, this.toString(), 'utf8'); - } catch(e) { - common.error('could not append to file (code '+e.code+'): '+file, true); - } -} -module.exports = _toEnd; - - -/***/ }), - -/***/ 148: -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -var metadata_1 = __webpack_require__(173); -var decorator_utils_1 = __webpack_require__(289); -function tagged(metadataKey, metadataValue) { - return function (target, targetKey, index) { - var metadata = new metadata_1.Metadata(metadataKey, metadataValue); - if (typeof index === "number") { - decorator_utils_1.tagParameter(target, targetKey, index, metadata); - } - else { - decorator_utils_1.tagProperty(target, targetKey, metadata); - } - }; -} -exports.tagged = tagged; - - -/***/ }), - -/***/ 156: -/***/ (function(module) { - -module.exports = function (xs, fn) { - var res = []; - for (var i = 0; i < xs.length; i++) { - var x = fn(xs[i], i); - if (isArray(x)) res.push.apply(res, x); - else res.push(x); - } - return res; -}; - -var isArray = Array.isArray || function (xs) { - return Object.prototype.toString.call(xs) === '[object Array]'; -}; - - -/***/ }), - -/***/ 164: -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -var os = __webpack_require__(365); -var fs = __webpack_require__(747); -var _ls = __webpack_require__(951); - -// Module globals -var config = { - silent: false, - fatal: false -}; -exports.config = config; - -var state = { - error: null, - currentCmd: 'shell.js', - tempDir: null -}; -exports.state = state; - -var platform = os.type().match(/^Win/) ? 'win' : 'unix'; -exports.platform = platform; - -function log() { - if (!config.silent) - console.log.apply(this, arguments); -} -exports.log = log; - -// Shows error message. Throws unless _continue or config.fatal are true -function error(msg, _continue) { - if (state.error === null) - state.error = ''; - state.error += state.currentCmd + ': ' + msg + '\n'; - - if (msg.length > 0) - log(state.error); - - if (config.fatal) - process.exit(1); - - if (!_continue) - throw ''; -} -exports.error = error; - -// In the future, when Proxies are default, we can add methods like `.to()` to primitive strings. -// For now, this is a dummy function to bookmark places we need such strings -function ShellString(str) { - return str; -} -exports.ShellString = ShellString; - -// Returns {'alice': true, 'bob': false} when passed a dictionary, e.g.: -// parseOptions('-a', {'a':'alice', 'b':'bob'}); -function parseOptions(str, map) { - if (!map) - error('parseOptions() internal error: no map given'); - - // All options are false by default - var options = {}; - for (var letter in map) - options[map[letter]] = false; - - if (!str) - return options; // defaults - - if (typeof str !== 'string') - error('parseOptions() internal error: wrong str'); - - // e.g. match[1] = 'Rf' for str = '-Rf' - var match = str.match(/^\-(.+)/); - if (!match) - return options; - - // e.g. chars = ['R', 'f'] - var chars = match[1].split(''); - - chars.forEach(function(c) { - if (c in map) - options[map[c]] = true; - else - error('option not recognized: '+c); - }); - - return options; -} -exports.parseOptions = parseOptions; - -// Expands wildcards with matching (ie. existing) file names. -// For example: -// expand(['file*.js']) = ['file1.js', 'file2.js', ...] -// (if the files 'file1.js', 'file2.js', etc, exist in the current dir) -function expand(list) { - var expanded = []; - list.forEach(function(listEl) { - // Wildcard present on directory names ? - if(listEl.search(/\*[^\/]*\//) > -1 || listEl.search(/\*\*[^\/]*\//) > -1) { - var match = listEl.match(/^([^*]+\/|)(.*)/); - var root = match[1]; - var rest = match[2]; - var restRegex = rest.replace(/\*\*/g, ".*").replace(/\*/g, "[^\\/]*"); - restRegex = new RegExp(restRegex); - - _ls('-R', root).filter(function (e) { - return restRegex.test(e); - }).forEach(function(file) { - expanded.push(file); - }); - } - // Wildcard present on file names ? - else if (listEl.search(/\*/) > -1) { - _ls('', listEl).forEach(function(file) { - expanded.push(file); - }); - } else { - expanded.push(listEl); - } - }); - return expanded; -} -exports.expand = expand; - -// Normalizes _unlinkSync() across platforms to match Unix behavior, i.e. -// file can be unlinked even if it's read-only, see https://github.com/joyent/node/issues/3006 -function unlinkSync(file) { - try { - fs.unlinkSync(file); - } catch(e) { - // Try to override file permission - if (e.code === 'EPERM') { - fs.chmodSync(file, '0666'); - fs.unlinkSync(file); - } else { - throw e; - } - } -} -exports.unlinkSync = unlinkSync; - -// e.g. 'shelljs_a5f185d0443ca...' -function randomFileName() { - function randomHash(count) { - if (count === 1) - return parseInt(16*Math.random(), 10).toString(16); - else { - var hash = ''; - for (var i=0; i 0 && options.charAt(0) === '-') { - // Special case where the specified file permissions started with - to subtract perms, which - // get picked up by the option parser as command flags. - // If we are down by one argument and options starts with -, shift everything over. - filePattern = mode; - mode = options; - options = ''; - } - else { - common.error('You must specify a file.'); - } - } - - options = common.parseOptions(options, { - 'R': 'recursive', - 'c': 'changes', - 'v': 'verbose' - }); - - if (typeof filePattern === 'string') { - filePattern = [ filePattern ]; - } - - var files; - - if (options.recursive) { - files = []; - common.expand(filePattern).forEach(function addFile(expandedFile) { - var stat = fs.lstatSync(expandedFile); - - if (!stat.isSymbolicLink()) { - files.push(expandedFile); - - if (stat.isDirectory()) { // intentionally does not follow symlinks. - fs.readdirSync(expandedFile).forEach(function (child) { - addFile(expandedFile + '/' + child); - }); - } - } - }); - } - else { - files = common.expand(filePattern); - } - - files.forEach(function innerChmod(file) { - file = path.resolve(file); - if (!fs.existsSync(file)) { - common.error('File not found: ' + file); - } - - // When recursing, don't follow symlinks. - if (options.recursive && fs.lstatSync(file).isSymbolicLink()) { - return; - } - - var perms = fs.statSync(file).mode; - var type = perms & PERMS.TYPE_MASK; - - var newPerms = perms; - - if (isNaN(parseInt(mode, 8))) { - // parse options - mode.split(',').forEach(function (symbolicMode) { - /*jshint regexdash:true */ - var pattern = /([ugoa]*)([=\+-])([rwxXst]*)/i; - var matches = pattern.exec(symbolicMode); - - if (matches) { - var applyTo = matches[1]; - var operator = matches[2]; - var change = matches[3]; - - var changeOwner = applyTo.indexOf('u') != -1 || applyTo === 'a' || applyTo === ''; - var changeGroup = applyTo.indexOf('g') != -1 || applyTo === 'a' || applyTo === ''; - var changeOther = applyTo.indexOf('o') != -1 || applyTo === 'a' || applyTo === ''; - - var changeRead = change.indexOf('r') != -1; - var changeWrite = change.indexOf('w') != -1; - var changeExec = change.indexOf('x') != -1; - var changeSticky = change.indexOf('t') != -1; - var changeSetuid = change.indexOf('s') != -1; - - var mask = 0; - if (changeOwner) { - mask |= (changeRead ? PERMS.OWNER_READ : 0) + (changeWrite ? PERMS.OWNER_WRITE : 0) + (changeExec ? PERMS.OWNER_EXEC : 0) + (changeSetuid ? PERMS.SETUID : 0); - } - if (changeGroup) { - mask |= (changeRead ? PERMS.GROUP_READ : 0) + (changeWrite ? PERMS.GROUP_WRITE : 0) + (changeExec ? PERMS.GROUP_EXEC : 0) + (changeSetuid ? PERMS.SETGID : 0); - } - if (changeOther) { - mask |= (changeRead ? PERMS.OTHER_READ : 0) + (changeWrite ? PERMS.OTHER_WRITE : 0) + (changeExec ? PERMS.OTHER_EXEC : 0); - } - - // Sticky bit is special - it's not tied to user, group or other. - if (changeSticky) { - mask |= PERMS.STICKY; - } - - switch (operator) { - case '+': - newPerms |= mask; - break; - - case '-': - newPerms &= ~mask; - break; - - case '=': - newPerms = type + mask; - - // According to POSIX, when using = to explicitly set the permissions, setuid and setgid can never be cleared. - if (fs.statSync(file).isDirectory()) { - newPerms |= (PERMS.SETUID + PERMS.SETGID) & perms; - } - break; - } - - if (options.verbose) { - log(file + ' -> ' + newPerms.toString(8)); - } - - if (perms != newPerms) { - if (!options.verbose && options.changes) { - log(file + ' -> ' + newPerms.toString(8)); - } - fs.chmodSync(file, newPerms); - } - } - else { - common.error('Invalid symbolic mode change: ' + symbolicMode); - } - }); - } - else { - // they gave us a full number - newPerms = type + parseInt(mode, 8); - - // POSIX rules are that setuid and setgid can only be added using numeric form, but not cleared. - if (fs.statSync(file).isDirectory()) { - newPerms |= (PERMS.SETUID + PERMS.SETGID) & perms; - } - - fs.chmodSync(file, newPerms); - } - }); -} -module.exports = _chmod; - - -/***/ }), - -/***/ 173: -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -var METADATA_KEY = __webpack_require__(677); -var Metadata = (function () { - function Metadata(key, value) { - this.key = key; - this.value = value; - } - Metadata.prototype.toString = function () { - if (this.key === METADATA_KEY.NAMED_TAG) { - return "named: " + this.value.toString() + " "; - } - else { - return "tagged: { key:" + this.key.toString() + ", value: " + this.value + " }"; - } - }; - return Metadata; -}()); -exports.Metadata = Metadata; - - -/***/ }), - -/***/ 175: -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -}; -var __metadata = (this && this.__metadata) || function (k, v) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); -}; -var __param = (this && this.__param) || function (paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -}; -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const fs = __webpack_require__(747); -const os = __webpack_require__(365); -const path = __webpack_require__(622); -const semver = __webpack_require__(105); -const http = __webpack_require__(549); -const inversify_1 = __webpack_require__(386); -const types_1 = __webpack_require__(834); -let DotnetTool = class DotnetTool { - constructor(buildAgent, versionManager) { - this.buildAgent = buildAgent; - this.versionManager = versionManager; - this.httpClient = new http.HttpClient("dotnet"); - } - run(args) { - return this.buildAgent.exec("dotnet", args); - } - toolInstall(toolName, versionSpec, checkLatest, includePre) { - return __awaiter(this, void 0, void 0, function* () { - console.log(""); - console.log("--------------------------"); - console.log(`Installing ${toolName} version ` + versionSpec); - console.log("--------------------------"); - if (this.versionManager.isExplicitVersion(versionSpec)) { - checkLatest = false; // check latest doesn't make sense when explicit version - } - let toolPath; - if (!checkLatest) { - // - // Let's try and resolve the version spec locally first - // - toolPath = this.buildAgent.find(toolName, versionSpec); - } - if (!toolPath) { - let version; - if (this.versionManager.isExplicitVersion(versionSpec)) { - // - // Explicit version was specified. No need to query for list of versions. - // - version = versionSpec; - } - else { - // - // Let's query and resolve the latest version for the versionSpec. - // If the version is an explicit version (1.1.1 or v1.1.1) then no need to query. - // If your tool doesn't offer a mechanism to query, - // then it can only support exact version inputs. - // - version = yield this.queryLatestMatch(toolName, versionSpec, includePre); - if (!version) { - throw new Error(`Unable to find ${toolName} version '${versionSpec}'.`); - } - // - // Check the cache for the resolved version. - // - toolPath = this.buildAgent.find(toolName, version); - } - if (!toolPath) { - // - // Download, extract, cache - // - toolPath = yield this.acquireTool(toolName, version); - } - } - // - // Prepend the tools path. This prepends the PATH for the current process and - // instructs the agent to prepend for each task that follows. - // - this.buildAgent.debug(`toolPath: ${toolPath}`); - if (os.platform() !== "win32") { - const dotnetRoot = path.dirname(fs.readlinkSync(yield this.buildAgent.which("dotnet"))); - this.buildAgent.exportVariable("DOTNET_ROOT", dotnetRoot); - } - this.buildAgent.addPath(toolPath); - return toolPath; - }); - } - queryLatestMatch(toolName, versionSpec, includePrerelease) { - return __awaiter(this, void 0, void 0, function* () { - this.buildAgent.debug(`querying tool versions for ${toolName}${versionSpec ? `@${versionSpec}` : ""} ${includePrerelease ? "including pre-releases" : ""}`); - const downloadPath = `https://api-v2v3search-0.nuget.org/query?q=${encodeURIComponent(toolName.toLowerCase())}&prerelease=${includePrerelease ? "true" : "false"}&semVerLevel=2.0.0`; - const res = yield this.httpClient.get(downloadPath); - if (!res || res.message.statusCode !== 200) { - return null; - } - const body = yield res.readBody(); - const data = JSON.parse(body).data; - const versions = data[0].versions.map((x) => x.version); - if (!versions || !versions.length) { - return null; - } - this.buildAgent.debug(`got versions: ${versions.join(", ")}`); - return this.versionManager.evaluateVersions(versions, versionSpec); - }); - } - acquireTool(toolName, version) { - return __awaiter(this, void 0, void 0, function* () { - const tempDirectory = yield this.buildAgent.createTempDir(); - let args = ["tool", "install", toolName, "--tool-path", tempDirectory]; - if (version) { - version = this.versionManager.cleanVersion(version); - args = args.concat(["--version", version]); - } - const result = yield this.run(args); - const status = result.code === 0 ? "success" : "failure"; - const message = result.code === 0 ? result.stdout : result.stderr; - this.buildAgent.debug(`tool install result: ${status} ${message}`); - if (result.code) { - throw new Error("Error installing tool"); - } - return yield this.buildAgent.cacheDir(tempDirectory, toolName, version); - }); - } -}; -DotnetTool = __decorate([ - inversify_1.injectable(), - __param(0, inversify_1.inject(types_1.TYPES.IBuildAgent)), - __param(1, inversify_1.inject(types_1.TYPES.IVersionManager)), - __metadata("design:paramtypes", [Object, Object]) -], DotnetTool); -exports.DotnetTool = DotnetTool; -let GitVersionTool = class GitVersionTool { - constructor(dotnetTool) { - this.dotnetTool = dotnetTool; - } - install(versionSpec, includePrerelease) { - return __awaiter(this, void 0, void 0, function* () { - const toolPath = yield this.dotnetTool.toolInstall("GitVersion.Tool", versionSpec, false, includePrerelease); - }); - } - run(...params) { - return; - } -}; -GitVersionTool = __decorate([ - inversify_1.injectable(), - __param(0, inversify_1.inject(types_1.TYPES.IDotnetTool)), - __metadata("design:paramtypes", [Object]) -], GitVersionTool); -exports.GitVersionTool = GitVersionTool; -const cmp = __webpack_require__(651); -let VersionManager = class VersionManager { - constructor(buildAgent) { - this.buildAgent = buildAgent; - } - isExplicitVersion(versionSpec) { - const c = semver.clean(versionSpec); - this.buildAgent.debug("isExplicit: " + c); - const valid = semver.valid(c) != null; - this.buildAgent.debug("explicit? " + valid); - return valid; - } - evaluateVersions(versions, versionSpec) { - let version; - this.buildAgent.debug("evaluating " + versions.length + " versions"); - versions = versions.sort(cmp); - for (let i = versions.length - 1; i >= 0; i--) { - const potential = versions[i]; - const satisfied = semver.satisfies(potential, versionSpec); - if (satisfied) { - version = potential; - break; - } - } - if (version) { - this.buildAgent.debug("matched: " + version); - } - else { - this.buildAgent.debug("match not found"); - } - return version; - } - cleanVersion(version) { - this.buildAgent.debug("cleaning: " + version); - return semver.clean(version); - } -}; -VersionManager = __decorate([ - inversify_1.injectable(), - __param(0, inversify_1.inject(types_1.TYPES.IBuildAgent)), - __metadata("design:paramtypes", [Object]) -], VersionManager); -exports.VersionManager = VersionManager; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZmlsZTovLy9EOi9Qcm9qZWN0cy9PU1MvR2l0VG9vbHMvdXNlLWdpdHZlcnNpb24yL3NyYy9jb21tb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFDQSx5QkFBeUI7QUFDekIseUJBQXlCO0FBQ3pCLDZCQUE2QjtBQUM3QixpQ0FBaUM7QUFDakMscURBQXFEO0FBRXJELHlDQUErQztBQUcvQyxtQ0FBZ0M7QUFHaEMsSUFBTSxVQUFVLEdBQWhCLE1BQU0sVUFBVTtJQU1aLFlBQytCLFVBQXVCLEVBQ25CLGNBQStCO1FBRTlELElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFTSxHQUFHLENBQUMsSUFBYztRQUNyQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNoRCxDQUFDO0lBRVksV0FBVyxDQUFDLFFBQWdCLEVBQUUsV0FBbUIsRUFBRSxXQUFvQixFQUFFLFVBQW1COztZQUVyRyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsNEJBQTRCLENBQUMsQ0FBQztZQUMxQyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsUUFBUSxXQUFXLEdBQUcsV0FBVyxDQUFDLENBQUM7WUFDN0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1lBRTFDLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsRUFBRTtnQkFDcEQsV0FBVyxHQUFHLEtBQUssQ0FBQyxDQUFDLHdEQUF3RDth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 - -/***/ }), - -/***/ 179: -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -var binding_on_syntax_1 = __webpack_require__(20); -var binding_when_syntax_1 = __webpack_require__(653); -var BindingWhenOnSyntax = (function () { - function BindingWhenOnSyntax(binding) { - this._binding = binding; - this._bindingWhenSyntax = new binding_when_syntax_1.BindingWhenSyntax(this._binding); - this._bindingOnSyntax = new binding_on_syntax_1.BindingOnSyntax(this._binding); - } - BindingWhenOnSyntax.prototype.when = function (constraint) { - return this._bindingWhenSyntax.when(constraint); - }; - BindingWhenOnSyntax.prototype.whenTargetNamed = function (name) { - return this._bindingWhenSyntax.whenTargetNamed(name); - }; - BindingWhenOnSyntax.prototype.whenTargetIsDefault = function () { - return this._bindingWhenSyntax.whenTargetIsDefault(); - }; - BindingWhenOnSyntax.prototype.whenTargetTagged = function (tag, value) { - return this._bindingWhenSyntax.whenTargetTagged(tag, value); - }; - BindingWhenOnSyntax.prototype.whenInjectedInto = function (parent) { - return this._bindingWhenSyntax.whenInjectedInto(parent); - }; - BindingWhenOnSyntax.prototype.whenParentNamed = function (name) { - return this._bindingWhenSyntax.whenParentNamed(name); - }; - BindingWhenOnSyntax.prototype.whenParentTagged = function (tag, value) { - return this._bindingWhenSyntax.whenParentTagged(tag, value); - }; - BindingWhenOnSyntax.prototype.whenAnyAncestorIs = function (ancestor) { - return this._bindingWhenSyntax.whenAnyAncestorIs(ancestor); - }; - BindingWhenOnSyntax.prototype.whenNoAncestorIs = function (ancestor) { - return this._bindingWhenSyntax.whenNoAncestorIs(ancestor); - }; - BindingWhenOnSyntax.prototype.whenAnyAncestorNamed = function (name) { - return this._bindingWhenSyntax.whenAnyAncestorNamed(name); - }; - BindingWhenOnSyntax.prototype.whenAnyAncestorTagged = function (tag, value) { - return this._bindingWhenSyntax.whenAnyAncestorTagged(tag, value); - }; - BindingWhenOnSyntax.prototype.whenNoAncestorNamed = function (name) { - return this._bindingWhenSyntax.whenNoAncestorNamed(name); - }; - BindingWhenOnSyntax.prototype.whenNoAncestorTagged = function (tag, value) { - return this._bindingWhenSyntax.whenNoAncestorTagged(tag, value); - }; - BindingWhenOnSyntax.prototype.whenAnyAncestorMatches = function (constraint) { - return this._bindingWhenSyntax.whenAnyAncestorMatches(constraint); - }; - BindingWhenOnSyntax.prototype.whenNoAncestorMatches = function (constraint) { - return this._bindingWhenSyntax.whenNoAncestorMatches(constraint); - }; - BindingWhenOnSyntax.prototype.onActivation = function (handler) { - return this._bindingOnSyntax.onActivation(handler); - }; - return BindingWhenOnSyntax; -}()); -exports.BindingWhenOnSyntax = BindingWhenOnSyntax; - - -/***/ }), - -/***/ 186: -/***/ (function(__unusedmodule, exports) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -var BindingScopeEnum = { - Request: "Request", - Singleton: "Singleton", - Transient: "Transient" -}; -exports.BindingScopeEnum = BindingScopeEnum; -var BindingTypeEnum = { - ConstantValue: "ConstantValue", - Constructor: "Constructor", - DynamicValue: "DynamicValue", - Factory: "Factory", - Function: "Function", - Instance: "Instance", - Invalid: "Invalid", - Provider: "Provider" -}; -exports.BindingTypeEnum = BindingTypeEnum; -var TargetTypeEnum = { - ClassProperty: "ClassProperty", - ConstructorArgument: "ConstructorArgument", - Variable: "Variable" -}; -exports.TargetTypeEnum = TargetTypeEnum; - - -/***/ }), - -/***/ 188: -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -var METADATA_KEY = __webpack_require__(677); -var metadata_1 = __webpack_require__(173); -var decorator_utils_1 = __webpack_require__(289); -function targetName(name) { - return function (target, targetKey, index) { - var metadata = new metadata_1.Metadata(METADATA_KEY.NAME_TAG, name); - decorator_utils_1.tagParameter(target, targetKey, index, metadata); - }; -} -exports.targetName = targetName; - - -/***/ }), - -/***/ 202: -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -var METADATA_KEY = __webpack_require__(677); -var MetadataReader = (function () { - function MetadataReader() { - } - MetadataReader.prototype.getConstructorMetadata = function (constructorFunc) { - var compilerGeneratedMetadata = Reflect.getMetadata(METADATA_KEY.PARAM_TYPES, constructorFunc); - var userGeneratedMetadata = Reflect.getMetadata(METADATA_KEY.TAGGED, constructorFunc); - return { - compilerGeneratedMetadata: compilerGeneratedMetadata, - userGeneratedMetadata: userGeneratedMetadata || {} - }; - }; - MetadataReader.prototype.getPropertiesMetadata = function (constructorFunc) { - var userGeneratedMetadata = Reflect.getMetadata(METADATA_KEY.TAGGED_PROP, constructorFunc) || []; - return userGeneratedMetadata; - }; - return MetadataReader; -}()); -exports.MetadataReader = MetadataReader; - - -/***/ }), - -/***/ 209: -/***/ (function(module, __unusedexports, __webpack_require__) { - -var common = __webpack_require__(164); -var os = __webpack_require__(365); -var fs = __webpack_require__(747); - -// Returns false if 'dir' is not a writeable directory, 'dir' otherwise -function writeableDir(dir) { - if (!dir || !fs.existsSync(dir)) - return false; - - if (!fs.statSync(dir).isDirectory()) - return false; - - var testFile = dir+'/'+common.randomFileName(); - try { - fs.writeFileSync(testFile, ' '); - common.unlinkSync(testFile); - return dir; - } catch (e) { - return false; - } -} - - -//@ -//@ ### tempdir() -//@ -//@ Examples: -//@ -//@ ```javascript -//@ var tmp = tempdir(); // "/tmp" for most *nix platforms -//@ ``` -//@ -//@ Searches and returns string containing a writeable, platform-dependent temporary directory. -//@ Follows Python's [tempfile algorithm](http://docs.python.org/library/tempfile.html#tempfile.tempdir). -function _tempDir() { - var state = common.state; - if (state.tempDir) - return state.tempDir; // from cache - - state.tempDir = writeableDir(os.tempDir && os.tempDir()) || // node 0.8+ - writeableDir(process.env['TMPDIR']) || - writeableDir(process.env['TEMP']) || - writeableDir(process.env['TMP']) || - writeableDir(process.env['Wimp$ScrapDir']) || // RiscOS - writeableDir('C:\\TEMP') || // Windows - writeableDir('C:\\TMP') || // Windows - writeableDir('\\TEMP') || // Windows - writeableDir('\\TMP') || // Windows - writeableDir('/tmp') || - writeableDir('/var/tmp') || - writeableDir('/usr/tmp') || - writeableDir('.'); // last resort - - return state.tempDir; -} -module.exports = _tempDir; - - -/***/ }), - -/***/ 211: -/***/ (function(module) { - -module.exports = require("https"); - -/***/ }), - -/***/ 212: -/***/ (function(module, __unusedexports, __webpack_require__) { - -module.exports = __webpack_require__(851); - - -/***/ }), - -/***/ 225: -/***/ (function(module, __unusedexports, __webpack_require__) { - -var common = __webpack_require__(164); -var fs = __webpack_require__(747); - -//@ -//@ ### cat(file [, file ...]) -//@ ### cat(file_array) -//@ -//@ Examples: -//@ -//@ ```javascript -//@ var str = cat('file*.txt'); -//@ var str = cat('file1', 'file2'); -//@ var str = cat(['file1', 'file2']); // same as above -//@ ``` -//@ -//@ Returns a string containing the given file, or a concatenated string -//@ containing the files if more than one file is given (a new line character is -//@ introduced between each file). Wildcard `*` accepted. -function _cat(options, files) { - var cat = ''; - - if (!files) - common.error('no paths given'); - - if (typeof files === 'string') - files = [].slice.call(arguments, 1); - // if it's array leave it as it is - - files = common.expand(files); - - files.forEach(function(file) { - if (!fs.existsSync(file)) - common.error('no such file or directory: ' + file); - - cat += fs.readFileSync(file, 'utf8') + '\n'; - }); - - if (cat[cat.length-1] === '\n') - cat = cat.substring(0, cat.length-1); - - return common.ShellString(cat); -} -module.exports = _cat; - - -/***/ }), - -/***/ 226: -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -var binding_in_syntax_1 = __webpack_require__(902); -var binding_on_syntax_1 = __webpack_require__(20); -var binding_when_syntax_1 = __webpack_require__(653); -var BindingInWhenOnSyntax = (function () { - function BindingInWhenOnSyntax(binding) { - this._binding = binding; - this._bindingWhenSyntax = new binding_when_syntax_1.BindingWhenSyntax(this._binding); - this._bindingOnSyntax = new binding_on_syntax_1.BindingOnSyntax(this._binding); - this._bindingInSyntax = new binding_in_syntax_1.BindingInSyntax(binding); - } - BindingInWhenOnSyntax.prototype.inRequestScope = function () { - return this._bindingInSyntax.inRequestScope(); - }; - BindingInWhenOnSyntax.prototype.inSingletonScope = function () { - return this._bindingInSyntax.inSingletonScope(); - }; - BindingInWhenOnSyntax.prototype.inTransientScope = function () { - return this._bindingInSyntax.inTransientScope(); - }; - BindingInWhenOnSyntax.prototype.when = function (constraint) { - return this._bindingWhenSyntax.when(constraint); - }; - BindingInWhenOnSyntax.prototype.whenTargetNamed = function (name) { - return this._bindingWhenSyntax.whenTargetNamed(name); - }; - BindingInWhenOnSyntax.prototype.whenTargetIsDefault = function () { - return this._bindingWhenSyntax.whenTargetIsDefault(); - }; - BindingInWhenOnSyntax.prototype.whenTargetTagged = function (tag, value) { - return this._bindingWhenSyntax.whenTargetTagged(tag, value); - }; - BindingInWhenOnSyntax.prototype.whenInjectedInto = function (parent) { - return this._bindingWhenSyntax.whenInjectedInto(parent); - }; - BindingInWhenOnSyntax.prototype.whenParentNamed = function (name) { - return this._bindingWhenSyntax.whenParentNamed(name); - }; - BindingInWhenOnSyntax.prototype.whenParentTagged = function (tag, value) { - return this._bindingWhenSyntax.whenParentTagged(tag, value); - }; - BindingInWhenOnSyntax.prototype.whenAnyAncestorIs = function (ancestor) { - return this._bindingWhenSyntax.whenAnyAncestorIs(ancestor); - }; - BindingInWhenOnSyntax.prototype.whenNoAncestorIs = function (ancestor) { - return this._bindingWhenSyntax.whenNoAncestorIs(ancestor); - }; - BindingInWhenOnSyntax.prototype.whenAnyAncestorNamed = function (name) { - return this._bindingWhenSyntax.whenAnyAncestorNamed(name); - }; - BindingInWhenOnSyntax.prototype.whenAnyAncestorTagged = function (tag, value) { - return this._bindingWhenSyntax.whenAnyAncestorTagged(tag, value); - }; - BindingInWhenOnSyntax.prototype.whenNoAncestorNamed = function (name) { - return this._bindingWhenSyntax.whenNoAncestorNamed(name); - }; - BindingInWhenOnSyntax.prototype.whenNoAncestorTagged = function (tag, value) { - return this._bindingWhenSyntax.whenNoAncestorTagged(tag, value); - }; - BindingInWhenOnSyntax.prototype.whenAnyAncestorMatches = function (constraint) { - return this._bindingWhenSyntax.whenAnyAncestorMatches(constraint); - }; - BindingInWhenOnSyntax.prototype.whenNoAncestorMatches = function (constraint) { - return this._bindingWhenSyntax.whenNoAncestorMatches(constraint); - }; - BindingInWhenOnSyntax.prototype.onActivation = function (handler) { - return this._bindingOnSyntax.onActivation(handler); - }; - return BindingInWhenOnSyntax; -}()); -exports.BindingInWhenOnSyntax = BindingInWhenOnSyntax; - - -/***/ }), - -/***/ 244: -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -// -// ShellJS -// Unix shell commands on top of Node's API -// -// Copyright (c) 2012 Artur Adib -// http://github.com/arturadib/shelljs -// - -var common = __webpack_require__(164); - - -//@ -//@ All commands run synchronously, unless otherwise stated. -//@ - -//@include ./src/cd -var _cd = __webpack_require__(369); -exports.cd = common.wrap('cd', _cd); - -//@include ./src/pwd -var _pwd = __webpack_require__(693); -exports.pwd = common.wrap('pwd', _pwd); - -//@include ./src/ls -var _ls = __webpack_require__(951); -exports.ls = common.wrap('ls', _ls); - -//@include ./src/find -var _find = __webpack_require__(36); -exports.find = common.wrap('find', _find); - -//@include ./src/cp -var _cp = __webpack_require__(263); -exports.cp = common.wrap('cp', _cp); - -//@include ./src/rm -var _rm = __webpack_require__(94); -exports.rm = common.wrap('rm', _rm); - -//@include ./src/mv -var _mv = __webpack_require__(700); -exports.mv = common.wrap('mv', _mv); - -//@include ./src/mkdir -var _mkdir = __webpack_require__(981); -exports.mkdir = common.wrap('mkdir', _mkdir); - -//@include ./src/test -var _test = __webpack_require__(862); -exports.test = common.wrap('test', _test); - -//@include ./src/cat -var _cat = __webpack_require__(225); -exports.cat = common.wrap('cat', _cat); - -//@include ./src/to -var _to = __webpack_require__(295); -String.prototype.to = common.wrap('to', _to); - -//@include ./src/toEnd -var _toEnd = __webpack_require__(131); -String.prototype.toEnd = common.wrap('toEnd', _toEnd); - -//@include ./src/sed -var _sed = __webpack_require__(826); -exports.sed = common.wrap('sed', _sed); - -//@include ./src/grep -var _grep = __webpack_require__(367); -exports.grep = common.wrap('grep', _grep); - -//@include ./src/which -var _which = __webpack_require__(750); -exports.which = common.wrap('which', _which); - -//@include ./src/echo -var _echo = __webpack_require__(490); -exports.echo = _echo; // don't common.wrap() as it could parse '-options' - -//@include ./src/dirs -var _dirs = __webpack_require__(853).dirs; -exports.dirs = common.wrap("dirs", _dirs); -var _pushd = __webpack_require__(853).pushd; -exports.pushd = common.wrap('pushd', _pushd); -var _popd = __webpack_require__(853).popd; -exports.popd = common.wrap("popd", _popd); - -//@include ./src/ln -var _ln = __webpack_require__(756); -exports.ln = common.wrap('ln', _ln); - -//@ -//@ ### exit(code) -//@ Exits the current process with the given exit code. -exports.exit = process.exit; - -//@ -//@ ### env['VAR_NAME'] -//@ Object containing environment variables (both getter and setter). Shortcut to process.env. -exports.env = process.env; - -//@include ./src/exec -var _exec = __webpack_require__(696); -exports.exec = common.wrap('exec', _exec, {notUnix:true}); - -//@include ./src/chmod -var _chmod = __webpack_require__(171); -exports.chmod = common.wrap('chmod', _chmod); - - - -//@ -//@ ## Non-Unix commands -//@ - -//@include ./src/tempdir -var _tempDir = __webpack_require__(209); -exports.tempdir = common.wrap('tempdir', _tempDir); - - -//@include ./src/error -var _error = __webpack_require__(353); -exports.error = _error; - - - -//@ -//@ ## Configuration -//@ - -exports.config = common.config; - -//@ -//@ ### config.silent -//@ Example: -//@ -//@ ```javascript -//@ var silentState = config.silent; // save old silent state -//@ config.silent = true; -//@ /* ... */ -//@ config.silent = silentState; // restore old silent state -//@ ``` -//@ -//@ Suppresses all command output if `true`, except for `echo()` calls. -//@ Default is `false`. - -//@ -//@ ### config.fatal -//@ Example: -//@ -//@ ```javascript -//@ config.fatal = true; -//@ cp('this_file_does_not_exist', '/dev/null'); // dies here -//@ /* more commands... */ -//@ ``` -//@ -//@ If `true` the script will die on errors. Default is `false`. - - -/***/ }), - -/***/ 263: -/***/ (function(module, __unusedexports, __webpack_require__) { - -var fs = __webpack_require__(747); -var path = __webpack_require__(622); -var common = __webpack_require__(164); -var os = __webpack_require__(365); - -// Buffered file copy, synchronous -// (Using readFileSync() + writeFileSync() could easily cause a memory overflow -// with large files) -function copyFileSync(srcFile, destFile) { - if (!fs.existsSync(srcFile)) - common.error('copyFileSync: no such file or directory: ' + srcFile); - - var BUF_LENGTH = 64*1024, - buf = new Buffer(BUF_LENGTH), - bytesRead = BUF_LENGTH, - pos = 0, - fdr = null, - fdw = null; - - try { - fdr = fs.openSync(srcFile, 'r'); - } catch(e) { - common.error('copyFileSync: could not read src file ('+srcFile+')'); - } - - try { - fdw = fs.openSync(destFile, 'w'); - } catch(e) { - common.error('copyFileSync: could not write to dest file (code='+e.code+'):'+destFile); - } - - while (bytesRead === BUF_LENGTH) { - bytesRead = fs.readSync(fdr, buf, 0, BUF_LENGTH, pos); - fs.writeSync(fdw, buf, 0, bytesRead); - pos += bytesRead; - } - - fs.closeSync(fdr); - fs.closeSync(fdw); - - fs.chmodSync(destFile, fs.statSync(srcFile).mode); -} - -// Recursively copies 'sourceDir' into 'destDir' -// Adapted from https://github.com/ryanmcgrath/wrench-js -// -// Copyright (c) 2010 Ryan McGrath -// Copyright (c) 2012 Artur Adib -// -// Licensed under the MIT License -// http://www.opensource.org/licenses/mit-license.php -function cpdirSyncRecursive(sourceDir, destDir, opts) { - if (!opts) opts = {}; - - /* Create the directory where all our junk is moving to; read the mode of the source directory and mirror it */ - var checkDir = fs.statSync(sourceDir); - try { - fs.mkdirSync(destDir, checkDir.mode); - } catch (e) { - //if the directory already exists, that's okay - if (e.code !== 'EEXIST') throw e; - } - - var files = fs.readdirSync(sourceDir); - - for (var i = 0; i < files.length; i++) { - var srcFile = sourceDir + "/" + files[i]; - var destFile = destDir + "/" + files[i]; - var srcFileStat = fs.lstatSync(srcFile); - - if (srcFileStat.isDirectory()) { - /* recursion this thing right on back. */ - cpdirSyncRecursive(srcFile, destFile, opts); - } else if (srcFileStat.isSymbolicLink()) { - var symlinkFull = fs.readlinkSync(srcFile); - fs.symlinkSync(symlinkFull, destFile, os.platform() === "win32" ? "junction" : null); - } else { - /* At this point, we've hit a file actually worth copying... so copy it on over. */ - if (fs.existsSync(destFile) && !opts.force) { - common.log('skipping existing file: ' + files[i]); - } else { - copyFileSync(srcFile, destFile); - } - } - - } // for files -} // cpdirSyncRecursive - - -//@ -//@ ### cp([options ,] source [,source ...], dest) -//@ ### cp([options ,] source_array, dest) -//@ Available options: -//@ -//@ + `-f`: force -//@ + `-r, -R`: recursive -//@ -//@ Examples: -//@ -//@ ```javascript -//@ cp('file1', 'dir1'); -//@ cp('-Rf', '/tmp/*', '/usr/local/*', '/home/tmp'); -//@ cp('-Rf', ['/tmp/*', '/usr/local/*'], '/home/tmp'); // same as above -//@ ``` -//@ -//@ Copies files. The wildcard `*` is accepted. -function _cp(options, sources, dest) { - options = common.parseOptions(options, { - 'f': 'force', - 'R': 'recursive', - 'r': 'recursive' - }); - - // Get sources, dest - if (arguments.length < 3) { - common.error('missing and/or '); - } else if (arguments.length > 3) { - sources = [].slice.call(arguments, 1, arguments.length - 1); - dest = arguments[arguments.length - 1]; - } else if (typeof sources === 'string') { - sources = [sources]; - } else if ('length' in sources) { - sources = sources; // no-op for array - } else { - common.error('invalid arguments'); - } - - var exists = fs.existsSync(dest), - stats = exists && fs.statSync(dest); - - // Dest is not existing dir, but multiple sources given - if ((!exists || !stats.isDirectory()) && sources.length > 1) - common.error('dest is not a directory (too many sources)'); - - // Dest is an existing file, but no -f given - if (exists && stats.isFile() && !options.force) - common.error('dest file already exists: ' + dest); - - if (options.recursive) { - // Recursive allows the shortcut syntax "sourcedir/" for "sourcedir/*" - // (see Github issue #15) - sources.forEach(function(src, i) { - if (src[src.length - 1] === '/') - sources[i] += '*'; - }); - - // Create dest - try { - fs.mkdirSync(dest, parseInt('0777', 8)); - } catch (e) { - // like Unix's cp, keep going even if we can't create dest dir - } - } - - sources = common.expand(sources); - - sources.forEach(function(src) { - if (!fs.existsSync(src)) { - common.error('no such file or directory: '+src, true); - return; // skip file - } - - // If here, src exists - if (fs.statSync(src).isDirectory()) { - if (!options.recursive) { - // Non-Recursive - common.log(src + ' is a directory (not copied)'); - } else { - // Recursive - // 'cp /a/source dest' should create 'source' in 'dest' - var newDest = path.join(dest, path.basename(src)), - checkDir = fs.statSync(src); - try { - fs.mkdirSync(newDest, checkDir.mode); - } catch (e) { - //if the directory already exists, that's okay - if (e.code !== 'EEXIST') throw e; - } - - cpdirSyncRecursive(src, newDest, {force: options.force}); - } - return; // done with dir - } - - // If here, src is a file - - // When copying to '/path/dir': - // thisDest = '/path/dir/file1' - var thisDest = dest; - if (fs.existsSync(dest) && fs.statSync(dest).isDirectory()) - thisDest = path.normalize(dest + '/' + path.basename(src)); - - if (fs.existsSync(thisDest) && !options.force) { - common.error('dest file already exists: ' + thisDest, true); - return; // skip file - } - - copyFileSync(src, thisDest); - }); // forEach(src) -} -module.exports = _cp; - - -/***/ }), - -/***/ 289: -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -var ERROR_MSGS = __webpack_require__(516); -var METADATA_KEY = __webpack_require__(677); -function tagParameter(annotationTarget, propertyName, parameterIndex, metadata) { - var metadataKey = METADATA_KEY.TAGGED; - _tagParameterOrProperty(metadataKey, annotationTarget, propertyName, metadata, parameterIndex); -} -exports.tagParameter = tagParameter; -function tagProperty(annotationTarget, propertyName, metadata) { - var metadataKey = METADATA_KEY.TAGGED_PROP; - _tagParameterOrProperty(metadataKey, annotationTarget.constructor, propertyName, metadata); -} -exports.tagProperty = tagProperty; -function _tagParameterOrProperty(metadataKey, annotationTarget, propertyName, metadata, parameterIndex) { - var paramsOrPropertiesMetadata = {}; - var isParameterDecorator = (typeof parameterIndex === "number"); - var key = (parameterIndex !== undefined && isParameterDecorator) ? parameterIndex.toString() : propertyName; - if (isParameterDecorator && propertyName !== undefined) { - throw new Error(ERROR_MSGS.INVALID_DECORATOR_OPERATION); - } - if (Reflect.hasOwnMetadata(metadataKey, annotationTarget)) { - paramsOrPropertiesMetadata = Reflect.getMetadata(metadataKey, annotationTarget); - } - var paramOrPropertyMetadata = paramsOrPropertiesMetadata[key]; - if (!Array.isArray(paramOrPropertyMetadata)) { - paramOrPropertyMetadata = []; - } - else { - for (var _i = 0, paramOrPropertyMetadata_1 = paramOrPropertyMetadata; _i < paramOrPropertyMetadata_1.length; _i++) { - var m = paramOrPropertyMetadata_1[_i]; - if (m.key === metadata.key) { - throw new Error(ERROR_MSGS.DUPLICATED_METADATA + " " + m.key.toString()); - } - } - } - paramOrPropertyMetadata.push(metadata); - paramsOrPropertiesMetadata[key] = paramOrPropertyMetadata; - Reflect.defineMetadata(metadataKey, paramsOrPropertiesMetadata, annotationTarget); -} -function _decorate(decorators, target) { - Reflect.decorate(decorators, target); -} -function _param(paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); }; -} -function decorate(decorator, target, parameterIndex) { - if (typeof parameterIndex === "number") { - _decorate([_param(parameterIndex, decorator)], target); - } - else if (typeof parameterIndex === "string") { - Reflect.decorate([decorator], target, parameterIndex); - } - else { - _decorate([decorator], target); - } -} -exports.decorate = decorate; - - -/***/ }), - -/***/ 295: -/***/ (function(module, __unusedexports, __webpack_require__) { - -var common = __webpack_require__(164); -var fs = __webpack_require__(747); -var path = __webpack_require__(622); - -//@ -//@ ### 'string'.to(file) -//@ -//@ Examples: -//@ -//@ ```javascript -//@ cat('input.txt').to('output.txt'); -//@ ``` -//@ -//@ Analogous to the redirection operator `>` in Unix, but works with JavaScript strings (such as -//@ those returned by `cat`, `grep`, etc). _Like Unix redirections, `to()` will overwrite any existing file!_ -function _to(options, file) { - if (!file) - common.error('wrong arguments'); - - if (!fs.existsSync( path.dirname(file) )) - common.error('no such file or directory: ' + path.dirname(file)); - - try { - fs.writeFileSync(file, this.toString(), 'utf8'); - } catch(e) { - common.error('could not write to file (code '+e.code+'): '+file, true); - } -} -module.exports = _to; - - -/***/ }), - -/***/ 330: -/***/ (function(module) { - -module.exports = {"_args":[["azure-pipelines-tool-lib@0.12.0","D:\\Projects\\OSS\\GitTools\\use-gitversion2"]],"_from":"azure-pipelines-tool-lib@0.12.0","_id":"azure-pipelines-tool-lib@0.12.0","_inBundle":false,"_integrity":"sha512-JAlFvMTtEXISrnJY/kgq0LecLi089RqXRf/gMsXYbflmzszklkc+LUJpR0A7NDmJ+9/MWpKY/ZX+Q/zirYa7gw==","_location":"/azure-pipelines-tool-lib","_phantomChildren":{"tunnel":"0.0.4","underscore":"1.8.3"},"_requested":{"type":"version","registry":true,"raw":"azure-pipelines-tool-lib@0.12.0","name":"azure-pipelines-tool-lib","escapedName":"azure-pipelines-tool-lib","rawSpec":"0.12.0","saveSpec":null,"fetchSpec":"0.12.0"},"_requiredBy":["/"],"_resolved":"https://registry.npmjs.org/azure-pipelines-tool-lib/-/azure-pipelines-tool-lib-0.12.0.tgz","_spec":"0.12.0","_where":"D:\\Projects\\OSS\\GitTools\\use-gitversion2","author":{"name":"Microsoft"},"bugs":{"url":"https://github.com/microsoft/azure-pipelines-tool-lib/issues"},"dependencies":{"@types/semver":"^5.3.0","@types/uuid":"^3.0.1","azure-pipelines-task-lib":"^2.8.0","semver":"^5.3.0","semver-compare":"^1.0.0","typed-rest-client":"1.0.9","uuid":"^3.0.1"},"description":"Azure Pipelines Tool Installer Lib for CI/CD Tasks","devDependencies":{"@types/mocha":"^2.2.41","@types/node":"^8.0.19","@types/shelljs":"^0.7.4","@types/xml2js":"^0.4.0","mocha":"^3.2.0","nock":"9.6.1","shelljs":"^0.7.6","typescript":"^2.2.1","xml2js":"^0.4.17"},"homepage":"https://github.com/microsoft/azure-pipelines-tool-lib#readme","keywords":["VSTS"],"license":"MIT","main":"tool.js","name":"azure-pipelines-tool-lib","repository":{"type":"git","url":"git+https://github.com/microsoft/azure-pipelines-tool-lib.git"},"scripts":{"build":"node make.js build","sample":"node make.js sample","test":"node make.js test","units":"node make.js units"},"version":"0.12.0"}; - -/***/ }), - -/***/ 351: -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const httpm = __webpack_require__(871); -const path = __webpack_require__(622); -const os = __webpack_require__(365); -const process = __webpack_require__(765); -const fs = __webpack_require__(747); -const semver = __webpack_require__(105); -const tl = __webpack_require__(735); -const cmp = __webpack_require__(651); -const uuidV4 = __webpack_require__(542); -let pkg = __webpack_require__(330); -let userAgent = 'vsts-task-installer/' + pkg.version; -let requestOptions = { - // ignoreSslError: true, - proxy: tl.getHttpProxyConfiguration(), - cert: tl.getHttpCertConfiguration() -}; -let http = new httpm.HttpClient(userAgent, null, requestOptions); -tl.setResourcePath(__webpack_require__.ab + "lib.json"); -function debug(message) { - tl.debug(message); -} -exports.debug = debug; -function prependPath(toolPath) { - tl.assertAgent('2.115.0'); - if (!toolPath) { - throw new Error('Parameter toolPath must not be null or empty'); - } - else if (!tl.exist(toolPath) || !tl.stats(toolPath).isDirectory()) { - throw new Error('Directory does not exist: ' + toolPath); - } - // todo: add a test for path - console.log(tl.loc('TOOL_LIB_PrependPath', toolPath)); - let newPath = toolPath + path.delimiter + process.env['PATH']; - tl.debug('new Path: ' + newPath); - process.env['PATH'] = newPath; - // instruct the agent to set this path on future tasks - console.log('##vso[task.prependpath]' + toolPath); -} -exports.prependPath = prependPath; -function delay(ms) { - return new Promise(resolve => setTimeout(resolve, ms)); -} -//----------------------------- -// Version Functions -//----------------------------- -/** - * Checks if a version spec is an explicit version (e.g. 1.0.1 or v1.0.1) - * As opposed to a version spec like 1.x - * - * @param versionSpec - */ -function isExplicitVersion(versionSpec) { - let c = semver.clean(versionSpec); - tl.debug('isExplicit: ' + c); - let valid = semver.valid(c) != null; - tl.debug('explicit? ' + valid); - return valid; -} -exports.isExplicitVersion = isExplicitVersion; -/** - * Returns cleaned (removed leading/trailing whitespace, remove '=v' prefix) - * and parsed version, or null if version is invalid. - */ -function cleanVersion(version) { - tl.debug('cleaning: ' + version); - return semver.clean(version); -} -exports.cleanVersion = cleanVersion; -/** - * evaluates a list of versions and returns the latest version matching the version spec - * - * @param versions an array of versions to evaluate - * @param versionSpec a version spec (e.g. 1.x) - */ -function evaluateVersions(versions, versionSpec) { - let version; - tl.debug('evaluating ' + versions.length + ' versions'); - versions = versions.sort(cmp); - for (let i = versions.length - 1; i >= 0; i--) { - let potential = versions[i]; - let satisfied = semver.satisfies(potential, versionSpec); - if (satisfied) { - version = potential; - break; - } - } - if (version) { - tl.debug('matched: ' + version); - } - else { - tl.debug('match not found'); - } - return version; -} -exports.evaluateVersions = evaluateVersions; -//----------------------------- -// Local Tool Cache Functions -//----------------------------- -/** - * finds the path to a tool in the local installed tool cache - * - * @param toolName name of the tool - * @param versionSpec version of the tool - * @param arch optional arch. defaults to arch of computer - */ -function findLocalTool(toolName, versionSpec, arch) { - if (!toolName) { - throw new Error('toolName parameter is required'); - } - if (!versionSpec) { - throw new Error('versionSpec parameter is required'); - } - arch = arch || os.arch(); - // attempt to resolve an explicit version - if (!isExplicitVersion(versionSpec)) { - let localVersions = findLocalToolVersions(toolName, arch); - let match = evaluateVersions(localVersions, versionSpec); - versionSpec = match; - } - // check for the explicit version in the cache - let toolPath; - if (versionSpec) { - versionSpec = semver.clean(versionSpec); - let cacheRoot = _getCacheRoot(); - let cachePath = path.join(cacheRoot, toolName, versionSpec, arch); - tl.debug('checking cache: ' + cachePath); - if (tl.exist(cachePath) && tl.exist(`${cachePath}.complete`)) { - console.log(tl.loc('TOOL_LIB_FoundInCache', toolName, versionSpec, arch)); - toolPath = cachePath; - } - else { - tl.debug('not found'); - } - } - return toolPath; -} -exports.findLocalTool = findLocalTool; -/** - * Retrieves the versions of a tool that is intalled in the local tool cache - * - * @param toolName name of the tool - * @param arch optional arch. defaults to arch of computer - */ -function findLocalToolVersions(toolName, arch) { - let versions = []; - arch = arch || os.arch(); - let toolPath = path.join(_getCacheRoot(), toolName); - if (tl.exist(toolPath)) { - let children = tl.ls('', [toolPath]); - children.forEach((child) => { - if (isExplicitVersion(child)) { - let fullPath = path.join(toolPath, child, arch); - if (tl.exist(fullPath) && tl.exist(`${fullPath}.complete`)) { - versions.push(child); - } - } - }); - } - return versions; -} -exports.findLocalToolVersions = findLocalToolVersions; -//--------------------- -// Download Functions -//--------------------- -// -// TODO: keep extension intact -// -/** - * Download a tool from an url and stream it into a file - * - * @param url url of tool to download - * @param fileName optional fileName. Should typically not use (will be a guid for reliability). Can pass fileName with an absolute path. - */ -function downloadTool(url, fileName) { - return __awaiter(this, void 0, void 0, function* () { - return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () { - try { - tl.debug(fileName); - fileName = fileName || uuidV4(); - // check if it's an absolute path already - var destPath; - if (path.isAbsolute(fileName)) { - destPath = fileName; - } - else { - destPath = path.join(_getAgentTemp(), fileName); - } - // make sure that the folder exists - tl.mkdirP(path.dirname(destPath)); - console.log(tl.loc('TOOL_LIB_Downloading', url)); - tl.debug('destination ' + destPath); - if (fs.existsSync(destPath)) { - throw new Error("Destination file path already exists"); - } - tl.debug('downloading'); - const statusCodesToRetry = [httpm.HttpCodes.BadGateway, httpm.HttpCodes.ServiceUnavailable, httpm.HttpCodes.GatewayTimeout]; - let retryCount = 1; - const maxRetries = 3; - let response = yield http.get(url); - while (retryCount < maxRetries && statusCodesToRetry.indexOf(response.message.statusCode) > -1) { - tl.debug(`Download attempt "${retryCount}" of "${maxRetries}" failed with status code "${response.message.statusCode}".`); - retryCount += 1; - yield delay(1000); - tl.debug(`Downloading attempt "${retryCount}" of "${maxRetries}"`); - response = yield http.get(url); - } - if (response.message.statusCode != 200) { - let err = new Error('Unexpected HTTP response: ' + response.message.statusCode); - err['httpStatusCode'] = response.message.statusCode; - tl.debug(`Failed to download "${fileName}" from "${url}". Code(${response.message.statusCode}) Message(${response.message.statusMessage})`); - throw err; - } - tl.debug('creating stream'); - let file = fs.createWriteStream(destPath); - file.on('open', (fd) => __awaiter(this, void 0, void 0, function* () { - try { - let stream = response.message.pipe(file); - stream.on('close', () => { - tl.debug('download complete'); - resolve(destPath); - }); - } - catch (err) { - reject(err); - } - })); - file.on('error', (err) => { - file.end(); - reject(err); - }); - } - catch (error) { - reject(error); - } - })); - }); -} -exports.downloadTool = downloadTool; -//--------------------- -// Install Functions -//--------------------- -function _createToolPath(tool, version, arch) { - // todo: add test for clean - let folderPath = path.join(_getCacheRoot(), tool, semver.clean(version), arch); - tl.debug('destination ' + folderPath); - let markerPath = `${folderPath}.complete`; - tl.rmRF(folderPath); - tl.rmRF(markerPath); - tl.mkdirP(folderPath); - return folderPath; -} -function _completeToolPath(tool, version, arch) { - let folderPath = path.join(_getCacheRoot(), tool, semver.clean(version), arch); - let markerPath = `${folderPath}.complete`; - tl.writeFile(markerPath, ''); - tl.debug('finished caching tool'); -} -/** - * Caches a directory and installs it into the tool cacheDir - * - * @param sourceDir the directory to cache into tools - * @param tool tool name - * @param version version of the tool. semver format - * @param arch architecture of the tool. Optional. Defaults to machine architecture - */ -function cacheDir(sourceDir, tool, version, arch) { - return __awaiter(this, void 0, void 0, function* () { - version = semver.clean(version); - arch = arch || os.arch(); - console.log(tl.loc('TOOL_LIB_CachingTool', tool, version, arch)); - tl.debug('source dir: ' + sourceDir); - if (!tl.stats(sourceDir).isDirectory()) { - throw new Error('sourceDir is not a directory'); - } - // create the tool dir - let destPath = _createToolPath(tool, version, arch); - // copy each child item. do not move. move can fail on Windows - // due to anti-virus software having an open handle on a file. - for (let itemName of fs.readdirSync(sourceDir)) { - let s = path.join(sourceDir, itemName); - tl.cp(s, destPath + '/', '-r'); - } - // write .complete - _completeToolPath(tool, version, arch); - return destPath; - }); -} -exports.cacheDir = cacheDir; -/** - * Caches a downloaded file (GUID) and installs it - * into the tool cache with a given targetName - * - * @param sourceFile the file to cache into tools. Typically a result of downloadTool which is a guid. - * @param targetFile the name of the file name in the tools directory - * @param tool tool name - * @param version version of the tool. semver format - * @param arch architecture of the tool. Optional. Defaults to machine architecture - */ -function cacheFile(sourceFile, targetFile, tool, version, arch) { - return __awaiter(this, void 0, void 0, function* () { - version = semver.clean(version); - arch = arch || os.arch(); - console.log(tl.loc('TOOL_LIB_CachingTool', tool, version, arch)); - tl.debug('source file:' + sourceFile); - if (!tl.stats(sourceFile).isFile()) { - throw new Error('sourceFile is not a file'); - } - // create the tool dir - let destFolder = _createToolPath(tool, version, arch); - // copy instead of move. move can fail on Windows due to - // anti-virus software having an open handle on a file. - let destPath = path.join(destFolder, targetFile); - tl.debug('destination file' + destPath); - tl.cp(sourceFile, destPath); - // write .complete - _completeToolPath(tool, version, arch); - return destFolder; - }); -} -exports.cacheFile = cacheFile; -//--------------------- -// Extract Functions -//--------------------- -/** - * Extract a .7z file - * - * @param file path to the .7z file - * @param dest destination directory. Optional. - * @param _7zPath path to 7zr.exe. Optional, for long path support. Most .7z archives do not have this - * problem. If your .7z archive contains very long paths, you can pass the path to 7zr.exe which will - * gracefully handle long paths. By default 7zdec.exe is used because it is a very small program and is - * bundled with the tool lib. However it does not support long paths. 7zr.exe is the reduced command line - * interface, it is smaller than the full command line interface, and it does support long paths. At the - * time of this writing, it is freely available from the LZMA SDK that is available on the 7zip website. - * Be sure to check the current license agreement. If 7zr.exe is bundled with your task, then the path - * to 7zr.exe can be pass to this function. - * @returns path to the destination directory - */ -function extract7z(file, dest, _7zPath) { - return __awaiter(this, void 0, void 0, function* () { - if (process.platform != 'win32') { - throw new Error('extract7z() not supported on current OS'); - } - if (!file) { - throw new Error("parameter 'file' is required"); - } - console.log(tl.loc('TOOL_LIB_ExtractingArchive')); - dest = _createExtractFolder(dest); - let originalCwd = process.cwd(); - try { - process.chdir(dest); - if (_7zPath) { - // extract - let _7z = tl.tool(_7zPath) - .arg('x') // eXtract files with full paths - .arg('-bb1') // -bb[0-3] : set output log level - .arg('-bd') // disable progress indicator - .arg('-sccUTF-8') // set charset for for console input/output - .arg(file); - yield _7z.exec(); - } - else { - // extract - let escapedScript = path.join(__dirname, 'Invoke-7zdec.ps1').replace(/'/g, "''").replace(/"|\n|\r/g, ''); // double-up single quotes, remove double quotes and newlines - let escapedFile = file.replace(/'/g, "''").replace(/"|\n|\r/g, ''); - let escapedTarget = dest.replace(/'/g, "''").replace(/"|\n|\r/g, ''); - let command = `& '${escapedScript}' -Source '${escapedFile}' -Target '${escapedTarget}'`; - let powershellPath = tl.which('powershell', true); - let powershell = tl.tool(powershellPath) - .line('-NoLogo -Sta -NoProfile -NonInteractive -ExecutionPolicy Unrestricted -Command') - .arg(command); - powershell.on('stdout', (buffer) => { - process.stdout.write(buffer); - }); - powershell.on('stderr', (buffer) => { - process.stderr.write(buffer); - }); - yield powershell.exec({ silent: true }); - } - } - finally { - process.chdir(originalCwd); - } - return dest; - }); -} -exports.extract7z = extract7z; -/** - * installs a tool from a tar by extracting the tar and installing it into the tool cache - * - * @param file file path of the tar - * @param tool name of tool in the tool cache - * @param version version of the tool - * @param arch arch of the tool. optional. defaults to the arch of the machine - * @param options IExtractOptions - * @param destination destination directory. optional. - */ -function extractTar(file, destination) { - return __awaiter(this, void 0, void 0, function* () { - // mkdir -p node/4.7.0/x64 - // tar xzC ./node/4.7.0/x64 -f node-v4.7.0-darwin-x64.tar.gz --strip-components 1 - console.log(tl.loc('TOOL_LIB_ExtractingArchive')); - let dest = _createExtractFolder(destination); - let tr = tl.tool('tar'); - tr.arg(['xzC', dest, '-f', file]); - yield tr.exec(); - return dest; - }); -} -exports.extractTar = extractTar; -function extractZip(file, destination) { - return __awaiter(this, void 0, void 0, function* () { - if (!file) { - throw new Error("parameter 'file' is required"); - } - console.log(tl.loc('TOOL_LIB_ExtractingArchive')); - let dest = _createExtractFolder(destination); - if (process.platform == 'win32') { - // build the powershell command - let escapedFile = file.replace(/'/g, "''").replace(/"|\n|\r/g, ''); // double-up single quotes, remove double quotes and newlines - let escapedDest = dest.replace(/'/g, "''").replace(/"|\n|\r/g, ''); - let command = `$ErrorActionPreference = 'Stop' ; try { Add-Type -AssemblyName System.IO.Compression.FileSystem } catch { } ; [System.IO.Compression.ZipFile]::ExtractToDirectory('${escapedFile}', '${escapedDest}')`; - // change the console output code page to UTF-8. - // TODO: FIX WHICH: let chcpPath = tl.which('chcp.com', true); - let chcpPath = path.join(process.env.windir, "system32", "chcp.com"); - yield tl.exec(chcpPath, '65001'); - // run powershell - let powershell = tl.tool('powershell') - .line('-NoLogo -Sta -NoProfile -NonInteractive -ExecutionPolicy Unrestricted -Command') - .arg(command); - yield powershell.exec(); - } - else { - let unzip = tl.tool('unzip') - .arg(file); - yield unzip.exec({ cwd: dest }); - } - return dest; - }); -} -exports.extractZip = extractZip; -function _createExtractFolder(dest) { - if (!dest) { - // create a temp dir - dest = path.join(_getAgentTemp(), uuidV4()); - } - tl.mkdirP(dest); - return dest; -} -//--------------------- -// Query Functions -//--------------------- -// default input will be >= LTS version. drop label different than value. -// v4 (LTS) would have a value of 4.x -// option to always download? (not cache), TTL? -/** - * Scrape a web page for versions by regex - * - * @param url url to scrape - * @param regex regex to use for version matches - */ -function scrape(url, regex) { - return __awaiter(this, void 0, void 0, function* () { - let output = yield (yield http.get(url)).readBody(); - let matches = output.match(regex); - let seen = {}; - let versions = []; - for (let i = 0; i < matches.length; i++) { - let ver = semver.clean(matches[i]); - if (!seen.hasOwnProperty(ver)) { - seen[ver] = true; - versions.push(ver); - } - } - return versions; - }); -} -exports.scrape = scrape; -function _getCacheRoot() { - tl.assertAgent('2.115.0'); - let cacheRoot = tl.getVariable('Agent.ToolsDirectory'); - if (!cacheRoot) { - throw new Error('Agent.ToolsDirectory is not set'); - } - return cacheRoot; -} -function _getAgentTemp() { - tl.assertAgent('2.115.0'); - let tempDirectory = tl.getVariable('Agent.TempDirectory'); - if (!tempDirectory) { - throw new Error('Agent.TempDirectory is not set'); - } - return tempDirectory; -} - - -/***/ }), - -/***/ 353: -/***/ (function(module, __unusedexports, __webpack_require__) { - -var common = __webpack_require__(164); - -//@ -//@ ### error() -//@ Tests if error occurred in the last command. Returns `null` if no error occurred, -//@ otherwise returns string explaining the error -function error() { - return common.state.error; -}; -module.exports = error; - - -/***/ }), - -/***/ 355: -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -var ERROR_MSGS = __webpack_require__(516); -function isStackOverflowExeption(error) { - return (error instanceof RangeError || - error.message === ERROR_MSGS.STACK_OVERFLOW); -} -exports.isStackOverflowExeption = isStackOverflowExeption; - - -/***/ }), - -/***/ 357: -/***/ (function(module) { - -module.exports = require("assert"); - -/***/ }), - -/***/ 358: -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -var fs = __webpack_require__(747); -var path = __webpack_require__(622); -var os = __webpack_require__(365); -var minimatch = __webpack_require__(124); -var util = __webpack_require__(669); -var tcm = __webpack_require__(443); -var vm = __webpack_require__(643); -var semver = __webpack_require__(105); -var crypto = __webpack_require__(417); -/** - * Hash table of known variable info. The formatted env var name is the lookup key. - * - * The purpose of this hash table is to keep track of known variables. The hash table - * needs to be maintained for multiple reasons: - * 1) to distinguish between env vars and job vars - * 2) to distinguish between secret vars and public - * 3) to know the real variable name and not just the formatted env var name. - */ -exports._knownVariableMap = {}; -//----------------------------------------------------- -// Validation Checks -//----------------------------------------------------- -// async await needs generators in node 4.x+ -if (semver.lt(process.versions.node, '4.2.0')) { - this.warning('Tasks require a new agent. Upgrade your agent or node to 4.2.0 or later'); -} -//----------------------------------------------------- -// String convenience -//----------------------------------------------------- -function _startsWith(str, start) { - return str.slice(0, start.length) == start; -} -exports._startsWith = _startsWith; -function _endsWith(str, end) { - return str.slice(-end.length) == end; -} -exports._endsWith = _endsWith; -//----------------------------------------------------- -// General Helpers -//----------------------------------------------------- -var _outStream = process.stdout; -var _errStream = process.stderr; -function _writeLine(str) { - _outStream.write(str + os.EOL); -} -exports._writeLine = _writeLine; -function _setStdStream(stdStream) { - _outStream = stdStream; -} -exports._setStdStream = _setStdStream; -function _setErrStream(errStream) { - _errStream = errStream; -} -exports._setErrStream = _setErrStream; -//----------------------------------------------------- -// Loc Helpers -//----------------------------------------------------- -var _locStringCache = {}; -var _resourceFiles = {}; -var _libResourceFileLoaded = false; -var _resourceCulture = 'en-US'; -function _loadResJson(resjsonFile) { - var resJson; - if (_exist(resjsonFile)) { - var resjsonContent = fs.readFileSync(resjsonFile, 'utf8').toString(); - // remove BOM - if (resjsonContent.indexOf('\uFEFF') == 0) { - resjsonContent = resjsonContent.slice(1); - } - try { - resJson = JSON.parse(resjsonContent); - } - catch (err) { - _debug('unable to parse resjson with err: ' + err.message); - } - } - else { - _debug('.resjson file not found: ' + resjsonFile); - } - return resJson; -} -function _loadLocStrings(resourceFile, culture) { - var locStrings = {}; - if (_exist(resourceFile)) { - var resourceJson = require(resourceFile); - if (resourceJson && resourceJson.hasOwnProperty('messages')) { - var locResourceJson; - // load up resource resjson for different culture - var localizedResourceFile = path.join(path.dirname(resourceFile), 'Strings', 'resources.resjson'); - var upperCulture = culture.toUpperCase(); - var cultures = []; - try { - cultures = fs.readdirSync(localizedResourceFile); - } - catch (ex) { } - for (var i = 0; i < cultures.length; i++) { - if (cultures[i].toUpperCase() == upperCulture) { - localizedResourceFile = path.join(localizedResourceFile, cultures[i], 'resources.resjson'); - if (_exist(localizedResourceFile)) { - locResourceJson = _loadResJson(localizedResourceFile); - } - break; - } - } - for (var key in resourceJson.messages) { - if (locResourceJson && locResourceJson.hasOwnProperty('loc.messages.' + key)) { - locStrings[key] = locResourceJson['loc.messages.' + key]; - } - else { - locStrings[key] = resourceJson.messages[key]; - } - } - } - } - else { - _warning('LIB_ResourceFile does not exist'); - } - return locStrings; -} -/** - * Sets the location of the resources json. This is typically the task.json file. - * Call once at the beginning of the script before any calls to loc. - * - * @param path Full path to the json. - * @returns void - */ -function _setResourcePath(path) { - if (process.env['TASKLIB_INPROC_UNITS']) { - _resourceFiles = {}; - _libResourceFileLoaded = false; - _locStringCache = {}; - _resourceCulture = 'en-US'; - } - if (!_resourceFiles[path]) { - _checkPath(path, 'resource file path'); - _resourceFiles[path] = path; - _debug('adding resource file: ' + path); - _resourceCulture = _getVariable('system.culture') || _resourceCulture; - var locStrs = _loadLocStrings(path, _resourceCulture); - for (var key in locStrs) { - //cache loc string - _locStringCache[key] = locStrs[key]; - } - } - else { - _warning(_loc('LIB_ResourceFileAlreadySet', path)); - } -} -exports._setResourcePath = _setResourcePath; -/** - * Gets the localized string from the json resource file. Optionally formats with additional params. - * - * @param key key of the resources string in the resource file - * @param param additional params for formatting the string - * @returns string - */ -function _loc(key) { - var param = []; - for (var _i = 1; _i < arguments.length; _i++) { - param[_i - 1] = arguments[_i]; - } - if (!_libResourceFileLoaded) { - // merge loc strings from azure-pipelines-task-lib. - var libResourceFile = __webpack_require__.ab + "lib1.json"; - var libLocStrs = _loadLocStrings(__webpack_require__.ab + "lib1.json", _resourceCulture); - for (var libKey in libLocStrs) { - //cache azure-pipelines-task-lib loc string - _locStringCache[libKey] = libLocStrs[libKey]; - } - _libResourceFileLoaded = true; - } - var locString; - ; - if (_locStringCache.hasOwnProperty(key)) { - locString = _locStringCache[key]; - } - else { - if (Object.keys(_resourceFiles).length <= 0) { - _warning(_loc('LIB_ResourceFileNotSet', key)); - } - else { - _warning(_loc('LIB_LocStringNotFound', key)); - } - locString = key; - } - if (param.length > 0) { - return util.format.apply(this, [locString].concat(param)); - } - else { - return locString; - } -} -exports._loc = _loc; -//----------------------------------------------------- -// Input Helpers -//----------------------------------------------------- -/** - * Gets a variable value that is defined on the build/release definition or set at runtime. - * - * @param name name of the variable to get - * @returns string - */ -function _getVariable(name) { - var varval; - // get the metadata - var info; - var key = _getVariableKey(name); - if (exports._knownVariableMap.hasOwnProperty(key)) { - info = exports._knownVariableMap[key]; - } - if (info && info.secret) { - // get the secret value - varval = exports._vault.retrieveSecret('SECRET_' + key); - } - else { - // get the public value - varval = process.env[key]; - // fallback for pre 2.104.1 agent - if (!varval && name.toUpperCase() == 'AGENT.JOBSTATUS') { - varval = process.env['agent.jobstatus']; - } - } - _debug(name + '=' + varval); - return varval; -} -exports._getVariable = _getVariable; -function _getVariableKey(name) { - if (!name) { - throw new Error(_loc('LIB_ParameterIsRequired', 'name')); - } - return name.replace(/\./g, '_').replace(/ /g, '_').toUpperCase(); -} -exports._getVariableKey = _getVariableKey; -//----------------------------------------------------- -// Cmd Helpers -//----------------------------------------------------- -function _command(command, properties, message) { - var taskCmd = new tcm.TaskCommand(command, properties, message); - _writeLine(taskCmd.toString()); -} -exports._command = _command; -function _warning(message) { - _command('task.issue', { 'type': 'warning' }, message); -} -exports._warning = _warning; -function _error(message) { - _command('task.issue', { 'type': 'error' }, message); -} -exports._error = _error; -function _debug(message) { - _command('task.debug', null, message); -} -exports._debug = _debug; -// //----------------------------------------------------- -// // Disk Functions -// //----------------------------------------------------- -/** - * Returns whether a path exists. - * - * @param path path to check - * @returns boolean - */ -function _exist(path) { - var exist = false; - try { - exist = !!(path && fs.statSync(path) != null); - } - catch (err) { - if (err && err.code === 'ENOENT') { - exist = false; - } - else { - throw err; - } - } - return exist; -} -exports._exist = _exist; -/** - * Checks whether a path exists. - * If the path does not exist, it will throw. - * - * @param p path to check - * @param name name only used in error message to identify the path - * @returns void - */ -function _checkPath(p, name) { - _debug('check path : ' + p); - if (!_exist(p)) { - throw new Error(_loc('LIB_PathNotFound', name, p)); - } -} -exports._checkPath = _checkPath; -/** - * Returns path of a tool had the tool actually been invoked. Resolves via paths. - * If you check and the tool does not exist, it will throw. - * - * @param tool name of the tool - * @param check whether to check if tool exists - * @returns string - */ -function _which(tool, check) { - if (!tool) { - throw new Error('parameter \'tool\' is required'); - } - // recursive when check=true - if (check) { - var result = _which(tool, false); - if (result) { - return result; - } - else { - if (process.platform == 'win32') { - throw new Error(_loc('LIB_WhichNotFound_Win', tool)); - } - else { - throw new Error(_loc('LIB_WhichNotFound_Linux', tool)); - } - } - } - _debug("which '" + tool + "'"); - try { - // build the list of extensions to try - var extensions = []; - if (process.platform == 'win32' && process.env['PATHEXT']) { - for (var _i = 0, _a = process.env['PATHEXT'].split(path.delimiter); _i < _a.length; _i++) { - var extension = _a[_i]; - if (extension) { - extensions.push(extension); - } - } - } - // if it's rooted, return it if exists. otherwise return empty. - if (_isRooted(tool)) { - var filePath = _tryGetExecutablePath(tool, extensions); - if (filePath) { - _debug("found: '" + filePath + "'"); - return filePath; - } - _debug('not found'); - return ''; - } - // if any path separators, return empty - if (tool.indexOf('/') >= 0 || (process.platform == 'win32' && tool.indexOf('\\') >= 0)) { - _debug('not found'); - return ''; - } - // build the list of directories - // - // Note, technically "where" checks the current directory on Windows. From a task lib perspective, - // it feels like we should not do this. Checking the current directory seems like more of a use - // case of a shell, and the which() function exposed by the task lib should strive for consistency - // across platforms. - var directories = []; - if (process.env['PATH']) { - for (var _b = 0, _c = process.env['PATH'].split(path.delimiter); _b < _c.length; _b++) { - var p = _c[_b]; - if (p) { - directories.push(p); - } - } - } - // return the first match - for (var _d = 0, directories_1 = directories; _d < directories_1.length; _d++) { - var directory = directories_1[_d]; - var filePath = _tryGetExecutablePath(directory + path.sep + tool, extensions); - if (filePath) { - _debug("found: '" + filePath + "'"); - return filePath; - } - } - _debug('not found'); - return ''; - } - catch (err) { - throw new Error(_loc('LIB_OperationFailed', 'which', err.message)); - } -} -exports._which = _which; -/** - * Best effort attempt to determine whether a file exists and is executable. - * @param filePath file path to check - * @param extensions additional file extensions to try - * @return if file exists and is executable, returns the file path. otherwise empty string. - */ -function _tryGetExecutablePath(filePath, extensions) { - try { - // test file exists - var stats = fs.statSync(filePath); - if (stats.isFile()) { - if (process.platform == 'win32') { - // on Windows, test for valid extension - var isExecutable = false; - var fileName = path.basename(filePath); - var dotIndex = fileName.lastIndexOf('.'); - if (dotIndex >= 0) { - var upperExt_1 = fileName.substr(dotIndex).toUpperCase(); - if (extensions.some(function (validExt) { return validExt.toUpperCase() == upperExt_1; })) { - return filePath; - } - } - } - else { - if (isUnixExecutable(stats)) { - return filePath; - } - } - } - } - catch (err) { - if (err.code != 'ENOENT') { - _debug("Unexpected error attempting to determine if executable file exists '" + filePath + "': " + err); - } - } - // try each extension - var originalFilePath = filePath; - for (var _i = 0, extensions_1 = extensions; _i < extensions_1.length; _i++) { - var extension = extensions_1[_i]; - var found = false; - var filePath_1 = originalFilePath + extension; - try { - var stats = fs.statSync(filePath_1); - if (stats.isFile()) { - if (process.platform == 'win32') { - // preserve the case of the actual file (since an extension was appended) - try { - var directory = path.dirname(filePath_1); - var upperName = path.basename(filePath_1).toUpperCase(); - for (var _a = 0, _b = fs.readdirSync(directory); _a < _b.length; _a++) { - var actualName = _b[_a]; - if (upperName == actualName.toUpperCase()) { - filePath_1 = path.join(directory, actualName); - break; - } - } - } - catch (err) { - _debug("Unexpected error attempting to determine the actual case of the file '" + filePath_1 + "': " + err); - } - return filePath_1; - } - else { - if (isUnixExecutable(stats)) { - return filePath_1; - } - } - } - } - catch (err) { - if (err.code != 'ENOENT') { - _debug("Unexpected error attempting to determine if executable file exists '" + filePath_1 + "': " + err); - } - } - } - return ''; -} -// on Mac/Linux, test the execute bit -// R W X R W X R W X -// 256 128 64 32 16 8 4 2 1 -function isUnixExecutable(stats) { - return (stats.mode & 1) > 0 || ((stats.mode & 8) > 0 && stats.gid === process.getgid()) || ((stats.mode & 64) > 0 && stats.uid === process.getuid()); -} -function _legacyFindFiles_convertPatternToRegExp(pattern) { - pattern = (process.platform == 'win32' ? pattern.replace(/\\/g, '/') : pattern) // normalize separator on Windows - .replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&') // regex escape - from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript - .replace(/\\\/\\\*\\\*\\\//g, '((\/.+/)|(\/))') // replace directory globstar, e.g. /hello/**/world - .replace(/\\\*\\\*/g, '.*') // replace remaining globstars with a wildcard that can span directory separators, e.g. /hello/**dll - .replace(/\\\*/g, '[^\/]*') // replace asterisks with a wildcard that cannot span directory separators, e.g. /hello/*.dll - .replace(/\\\?/g, '[^\/]'); // replace single character wildcards, e.g. /hello/log?.dll - pattern = "^" + pattern + "$"; - var flags = process.platform == 'win32' ? 'i' : ''; - return new RegExp(pattern, flags); -} -exports._legacyFindFiles_convertPatternToRegExp = _legacyFindFiles_convertPatternToRegExp; -function _cloneMatchOptions(matchOptions) { - return { - debug: matchOptions.debug, - nobrace: matchOptions.nobrace, - noglobstar: matchOptions.noglobstar, - dot: matchOptions.dot, - noext: matchOptions.noext, - nocase: matchOptions.nocase, - nonull: matchOptions.nonull, - matchBase: matchOptions.matchBase, - nocomment: matchOptions.nocomment, - nonegate: matchOptions.nonegate, - flipNegate: matchOptions.flipNegate - }; -} -exports._cloneMatchOptions = _cloneMatchOptions; -function _getFindInfoFromPattern(defaultRoot, pattern, matchOptions) { - // parameter validation - if (!defaultRoot) { - throw new Error('getFindRootFromPattern() parameter defaultRoot cannot be empty'); - } - if (!pattern) { - throw new Error('getFindRootFromPattern() parameter pattern cannot be empty'); - } - if (!matchOptions.nobrace) { - throw new Error('getFindRootFromPattern() expected matchOptions.nobrace to be true'); - } - // for the sake of determining the findPath, pretend nocase=false - matchOptions = _cloneMatchOptions(matchOptions); - matchOptions.nocase = false; - // check if basename only and matchBase=true - if (matchOptions.matchBase && - !_isRooted(pattern) && - (process.platform == 'win32' ? pattern.replace(/\\/g, '/') : pattern).indexOf('/') < 0) { - return { - adjustedPattern: pattern, - findPath: defaultRoot, - statOnly: false, - }; - } - // the technique applied by this function is to use the information on the Minimatch object determine - // the findPath. Minimatch breaks the pattern into path segments, and exposes information about which - // segments are literal vs patterns. - // - // note, the technique currently imposes a limitation for drive-relative paths with a glob in the - // first segment, e.g. C:hello*/world. it's feasible to overcome this limitation, but is left unsolved - // for now. - var minimatchObj = new minimatch.Minimatch(pattern, matchOptions); - // the "set" property is an array of arrays of parsed path segment info. the outer array should only - // contain one item, otherwise something went wrong. brace expansion can result in multiple arrays, - // but that should be turned off by the time this function is reached. - if (minimatchObj.set.length != 1) { - throw new Error('getFindRootFromPattern() expected Minimatch(...).set.length to be 1. Actual: ' + minimatchObj.set.length); - } - var literalSegments = []; - for (var _i = 0, _a = minimatchObj.set[0]; _i < _a.length; _i++) { - var parsedSegment = _a[_i]; - if (typeof parsedSegment == 'string') { - // the item is a string when the original input for the path segment does not contain any - // unescaped glob characters. - // - // note, the string here is already unescaped (i.e. glob escaping removed), so it is ready - // to pass to find() as-is. for example, an input string 'hello\\*world' => 'hello*world'. - literalSegments.push(parsedSegment); - continue; - } - break; - } - // join the literal segments back together. Minimatch converts '\' to '/' on Windows, then squashes - // consequetive slashes, and finally splits on slash. this means that UNC format is lost, but can - // be detected from the original pattern. - var joinedSegments = literalSegments.join('/'); - if (joinedSegments && process.platform == 'win32' && _startsWith(pattern.replace(/\\/g, '/'), '//')) { - joinedSegments = '/' + joinedSegments; // restore UNC format - } - // determine the find path - var findPath; - if (_isRooted(pattern)) { // the pattern was rooted - findPath = joinedSegments; - } - else if (joinedSegments) { // the pattern was not rooted, and literal segments were found - findPath = _ensureRooted(defaultRoot, joinedSegments); - } - else { // the pattern was not rooted, and no literal segments were found - findPath = defaultRoot; - } - // clean up the path - if (findPath) { - findPath = _getDirectoryName(_ensureRooted(findPath, '_')); // hack to remove unnecessary trailing slash - findPath = _normalizeSeparators(findPath); // normalize slashes - } - return { - adjustedPattern: _ensurePatternRooted(defaultRoot, pattern), - findPath: findPath, - statOnly: literalSegments.length == minimatchObj.set[0].length, - }; -} -exports._getFindInfoFromPattern = _getFindInfoFromPattern; -function _ensurePatternRooted(root, p) { - if (!root) { - throw new Error('ensurePatternRooted() parameter "root" cannot be empty'); - } - if (!p) { - throw new Error('ensurePatternRooted() parameter "p" cannot be empty'); - } - if (_isRooted(p)) { - return p; - } - // normalize root - root = _normalizeSeparators(root); - // escape special glob characters - root = (process.platform == 'win32' ? root : root.replace(/\\/g, '\\\\')) // escape '\' on OSX/Linux - .replace(/(\[)(?=[^\/]+\])/g, '[[]') // escape '[' when ']' follows within the path segment - .replace(/\?/g, '[?]') // escape '?' - .replace(/\*/g, '[*]') // escape '*' - .replace(/\+\(/g, '[+](') // escape '+(' - .replace(/@\(/g, '[@](') // escape '@(' - .replace(/!\(/g, '[!]('); // escape '!(' - return _ensureRooted(root, p); -} -exports._ensurePatternRooted = _ensurePatternRooted; -//------------------------------------------------------------------- -// Populate the vault with sensitive data. Inputs and Endpoints -//------------------------------------------------------------------- -function _loadData() { - // in agent, prefer TempDirectory then workFolder. - // In interactive dev mode, it won't be - var keyPath = _getVariable("agent.TempDirectory") || _getVariable("agent.workFolder") || process.cwd(); - exports._vault = new vm.Vault(keyPath); - exports._knownVariableMap = {}; - _debug('loading inputs and endpoints'); - var loaded = 0; - for (var envvar in process.env) { - if (_startsWith(envvar, 'INPUT_') || - _startsWith(envvar, 'ENDPOINT_AUTH_') || - _startsWith(envvar, 'SECUREFILE_TICKET_') || - _startsWith(envvar, 'SECRET_') || - _startsWith(envvar, 'VSTS_TASKVARIABLE_')) { - // Record the secret variable metadata. This is required by getVariable to know whether - // to retrieve the value from the vault. In a 2.104.1 agent or higher, this metadata will - // be overwritten when the VSTS_SECRET_VARIABLES env var is processed below. - if (_startsWith(envvar, 'SECRET_')) { - var variableName = envvar.substring('SECRET_'.length); - if (variableName) { - // This is technically not the variable name (has underscores instead of dots), - // but it's good enough to make getVariable work in a pre-2.104.1 agent where - // the VSTS_SECRET_VARIABLES env var is not defined. - exports._knownVariableMap[_getVariableKey(variableName)] = { name: variableName, secret: true }; - } - } - // store the secret - if (process.env[envvar]) { - ++loaded; - _debug('loading ' + envvar); - exports._vault.storeSecret(envvar, process.env[envvar]); - delete process.env[envvar]; - } - } - } - _debug('loaded ' + loaded); - // store public variable metadata - var names; - try { - names = JSON.parse(process.env['VSTS_PUBLIC_VARIABLES'] || '[]'); - } - catch (err) { - throw new Error('Failed to parse VSTS_PUBLIC_VARIABLES as JSON. ' + err); // may occur during interactive testing - } - names.forEach(function (name) { - exports._knownVariableMap[_getVariableKey(name)] = { name: name, secret: false }; - }); - delete process.env['VSTS_PUBLIC_VARIABLES']; - // store secret variable metadata - try { - names = JSON.parse(process.env['VSTS_SECRET_VARIABLES'] || '[]'); - } - catch (err) { - throw new Error('Failed to parse VSTS_SECRET_VARIABLES as JSON. ' + err); // may occur during interactive testing - } - names.forEach(function (name) { - exports._knownVariableMap[_getVariableKey(name)] = { name: name, secret: true }; - }); - delete process.env['VSTS_SECRET_VARIABLES']; - // avoid loading twice (overwrites .taskkey) - global['_vsts_task_lib_loaded'] = true; -} -exports._loadData = _loadData; -//-------------------------------------------------------------------------------- -// Internal path helpers. -//-------------------------------------------------------------------------------- -function _ensureRooted(root, p) { - if (!root) { - throw new Error('ensureRooted() parameter "root" cannot be empty'); - } - if (!p) { - throw new Error('ensureRooted() parameter "p" cannot be empty'); - } - if (_isRooted(p)) { - return p; - } - if (process.platform == 'win32' && root.match(/^[A-Z]:$/i)) { // e.g. C: - return root + p; - } - // ensure root ends with a separator - if (_endsWith(root, '/') || (process.platform == 'win32' && _endsWith(root, '\\'))) { - // root already ends with a separator - } - else { - root += path.sep; // append separator - } - return root + p; -} -exports._ensureRooted = _ensureRooted; -/** - * Determines the parent path and trims trailing slashes (when safe). Path separators are normalized - * in the result. This function works similar to the .NET System.IO.Path.GetDirectoryName() method. - * For example, C:\hello\world\ returns C:\hello\world (trailing slash removed). Returns empty when - * no higher directory can be determined. - */ -function _getDirectoryName(p) { - // short-circuit if empty - if (!p) { - return ''; - } - // normalize separators - p = _normalizeSeparators(p); - // on Windows, the goal of this function is to match the behavior of - // [System.IO.Path]::GetDirectoryName(), e.g. - // C:/ => - // C:/hello => C:\ - // C:/hello/ => C:\hello - // C:/hello/world => C:\hello - // C:/hello/world/ => C:\hello\world - // C: => - // C:hello => C: - // C:hello/ => C:hello - // / => - // /hello => \ - // /hello/ => \hello - // //hello => - // //hello/ => - // //hello/world => - // //hello/world/ => \\hello\world - // - // unfortunately, path.dirname() can't simply be used. for example, on Windows - // it yields different results from Path.GetDirectoryName: - // C:/ => C:/ - // C:/hello => C:/ - // C:/hello/ => C:/ - // C:/hello/world => C:/hello - // C:/hello/world/ => C:/hello - // C: => C: - // C:hello => C: - // C:hello/ => C: - // / => / - // /hello => / - // /hello/ => / - // //hello => / - // //hello/ => / - // //hello/world => //hello/world - // //hello/world/ => //hello/world/ - // //hello/world/again => //hello/world/ - // //hello/world/again/ => //hello/world/ - // //hello/world/again/again => //hello/world/again - // //hello/world/again/again/ => //hello/world/again - if (process.platform == 'win32') { - if (/^[A-Z]:\\?[^\\]+$/i.test(p)) { // e.g. C:\hello or C:hello - return p.charAt(2) == '\\' ? p.substring(0, 3) : p.substring(0, 2); - } - else if (/^[A-Z]:\\?$/i.test(p)) { // e.g. C:\ or C: - return ''; - } - var lastSlashIndex = p.lastIndexOf('\\'); - if (lastSlashIndex < 0) { // file name only - return ''; - } - else if (p == '\\') { // relative root - return ''; - } - else if (lastSlashIndex == 0) { // e.g. \\hello - return '\\'; - } - else if (/^\\\\[^\\]+(\\[^\\]*)?$/.test(p)) { // UNC root, e.g. \\hello or \\hello\ or \\hello\world - return ''; - } - return p.substring(0, lastSlashIndex); // e.g. hello\world => hello or hello\world\ => hello\world - // note, this means trailing slashes for non-root directories - // (i.e. not C:\, \, or \\unc\) will simply be removed. - } - // OSX/Linux - if (p.indexOf('/') < 0) { // file name only - return ''; - } - else if (p == '/') { - return ''; - } - else if (_endsWith(p, '/')) { - return p.substring(0, p.length - 1); - } - return path.dirname(p); -} -exports._getDirectoryName = _getDirectoryName; -/** - * On OSX/Linux, true if path starts with '/'. On Windows, true for paths like: - * \, \hello, \\hello\share, C:, and C:\hello (and corresponding alternate separator cases). - */ -function _isRooted(p) { - p = _normalizeSeparators(p); - if (!p) { - throw new Error('isRooted() parameter "p" cannot be empty'); - } - if (process.platform == 'win32') { - return _startsWith(p, '\\') || // e.g. \ or \hello or \\hello - /^[A-Z]:/i.test(p); // e.g. C: or C:\hello - } - return _startsWith(p, '/'); // e.g. /hello -} -exports._isRooted = _isRooted; -function _normalizeSeparators(p) { - p = p || ''; - if (process.platform == 'win32') { - // convert slashes on Windows - p = p.replace(/\//g, '\\'); - // remove redundant slashes - var isUnc = /^\\\\+[^\\]/.test(p); // e.g. \\hello - return (isUnc ? '\\' : '') + p.replace(/\\\\+/g, '\\'); // preserve leading // for UNC - } - // remove redundant slashes - return p.replace(/\/\/+/g, '/'); -} -exports._normalizeSeparators = _normalizeSeparators; -//----------------------------------------------------- -// Expose proxy information to vsts-node-api -//----------------------------------------------------- -function _exposeProxySettings() { - var proxyUrl = _getVariable('Agent.ProxyUrl'); - if (proxyUrl && proxyUrl.length > 0) { - var proxyUsername = _getVariable('Agent.ProxyUsername'); - var proxyPassword = _getVariable('Agent.ProxyPassword'); - var proxyBypassHostsJson = _getVariable('Agent.ProxyBypassList'); - global['_vsts_task_lib_proxy_url'] = proxyUrl; - global['_vsts_task_lib_proxy_username'] = proxyUsername; - global['_vsts_task_lib_proxy_bypass'] = proxyBypassHostsJson; - global['_vsts_task_lib_proxy_password'] = _exposeTaskLibSecret('proxy', proxyPassword || ''); - _debug('expose agent proxy configuration.'); - global['_vsts_task_lib_proxy'] = true; - } -} -exports._exposeProxySettings = _exposeProxySettings; -//----------------------------------------------------- -// Expose certificate information to vsts-node-api -//----------------------------------------------------- -function _exposeCertSettings() { - var ca = _getVariable('Agent.CAInfo'); - if (ca) { - global['_vsts_task_lib_cert_ca'] = ca; - } - var clientCert = _getVariable('Agent.ClientCert'); - if (clientCert) { - var clientCertKey = _getVariable('Agent.ClientCertKey'); - var clientCertArchive = _getVariable('Agent.ClientCertArchive'); - var clientCertPassword = _getVariable('Agent.ClientCertPassword'); - global['_vsts_task_lib_cert_clientcert'] = clientCert; - global['_vsts_task_lib_cert_key'] = clientCertKey; - global['_vsts_task_lib_cert_archive'] = clientCertArchive; - global['_vsts_task_lib_cert_passphrase'] = _exposeTaskLibSecret('cert', clientCertPassword || ''); - } - if (ca || clientCert) { - _debug('expose agent certificate configuration.'); - global['_vsts_task_lib_cert'] = true; - } - var skipCertValidation = _getVariable('Agent.SkipCertValidation') || 'false'; - if (skipCertValidation) { - global['_vsts_task_lib_skip_cert_validation'] = skipCertValidation.toUpperCase() === 'TRUE'; - } -} -exports._exposeCertSettings = _exposeCertSettings; -// We store the encryption key on disk and hold the encrypted content and key file in memory -// return base64encoded:base64encoded -// downstream vsts-node-api will retrieve the secret later -function _exposeTaskLibSecret(keyFile, secret) { - if (secret) { - var encryptKey = crypto.randomBytes(256); - var cipher = crypto.createCipher("aes-256-ctr", encryptKey); - var encryptedContent = cipher.update(secret, "utf8", "hex"); - encryptedContent += cipher.final("hex"); - var storageFile = path.join(_getVariable('Agent.TempDirectory') || _getVariable("agent.workFolder") || process.cwd(), keyFile); - fs.writeFileSync(storageFile, encryptKey.toString('base64'), { encoding: 'utf8' }); - return new Buffer(storageFile).toString('base64') + ':' + new Buffer(encryptedContent).toString('base64'); - } -} - - -/***/ }), - -/***/ 365: -/***/ (function(module) { - -module.exports = require("os"); - -/***/ }), - -/***/ 367: -/***/ (function(module, __unusedexports, __webpack_require__) { - -var common = __webpack_require__(164); -var fs = __webpack_require__(747); - -//@ -//@ ### grep([options ,] regex_filter, file [, file ...]) -//@ ### grep([options ,] regex_filter, file_array) -//@ Available options: -//@ -//@ + `-v`: Inverse the sense of the regex and print the lines not matching the criteria. -//@ -//@ Examples: -//@ -//@ ```javascript -//@ grep('-v', 'GLOBAL_VARIABLE', '*.js'); -//@ grep('GLOBAL_VARIABLE', '*.js'); -//@ ``` -//@ -//@ Reads input string from given files and returns a string containing all lines of the -//@ file that match the given `regex_filter`. Wildcard `*` accepted. -function _grep(options, regex, files) { - options = common.parseOptions(options, { - 'v': 'inverse' - }); - - if (!files) - common.error('no paths given'); - - if (typeof files === 'string') - files = [].slice.call(arguments, 2); - // if it's array leave it as it is - - files = common.expand(files); - - var grep = ''; - files.forEach(function(file) { - if (!fs.existsSync(file)) { - common.error('no such file or directory: ' + file, true); - return; - } - - var contents = fs.readFileSync(file, 'utf8'), - lines = contents.split(/\r*\n/); - lines.forEach(function(line) { - var matched = line.match(regex); - if ((options.inverse && !matched) || (!options.inverse && matched)) - grep += line + '\n'; - }); - }); - - return common.ShellString(grep); -} -module.exports = _grep; - - -/***/ }), - -/***/ 369: -/***/ (function(module, __unusedexports, __webpack_require__) { - -var fs = __webpack_require__(747); -var common = __webpack_require__(164); - -//@ -//@ ### cd('dir') -//@ Changes to directory `dir` for the duration of the script -function _cd(options, dir) { - if (!dir) - common.error('directory not specified'); - - if (!fs.existsSync(dir)) - common.error('no such file or directory: ' + dir); - - if (!fs.statSync(dir).isDirectory()) - common.error('not a directory: ' + dir); - - process.chdir(dir); -} -module.exports = _cd; - - -/***/ }), - -/***/ 380: -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -var error_msgs_1 = __webpack_require__(516); -var METADATA_KEY = __webpack_require__(677); -var metadata_1 = __webpack_require__(173); -var decorator_utils_1 = __webpack_require__(289); -var LazyServiceIdentifer = (function () { - function LazyServiceIdentifer(cb) { - this._cb = cb; - } - LazyServiceIdentifer.prototype.unwrap = function () { - return this._cb(); - }; - return LazyServiceIdentifer; -}()); -exports.LazyServiceIdentifer = LazyServiceIdentifer; -function inject(serviceIdentifier) { - return function (target, targetKey, index) { - if (serviceIdentifier === undefined) { - throw new Error(error_msgs_1.UNDEFINED_INJECT_ANNOTATION(target.name)); - } - var metadata = new metadata_1.Metadata(METADATA_KEY.INJECT_TAG, serviceIdentifier); - if (typeof index === "number") { - decorator_utils_1.tagParameter(target, targetKey, index, metadata); - } - else { - decorator_utils_1.tagProperty(target, targetKey, metadata); - } - }; -} -exports.inject = inject; - - -/***/ }), - -/***/ 386: -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -var keys = __webpack_require__(677); -exports.METADATA_KEY = keys; -var container_1 = __webpack_require__(15); -exports.Container = container_1.Container; -var literal_types_1 = __webpack_require__(186); -exports.BindingScopeEnum = literal_types_1.BindingScopeEnum; -exports.BindingTypeEnum = literal_types_1.BindingTypeEnum; -exports.TargetTypeEnum = literal_types_1.TargetTypeEnum; -var container_module_1 = __webpack_require__(752); -exports.AsyncContainerModule = container_module_1.AsyncContainerModule; -exports.ContainerModule = container_module_1.ContainerModule; -var injectable_1 = __webpack_require__(919); -exports.injectable = injectable_1.injectable; -var tagged_1 = __webpack_require__(148); -exports.tagged = tagged_1.tagged; -var named_1 = __webpack_require__(758); -exports.named = named_1.named; -var inject_1 = __webpack_require__(380); -exports.inject = inject_1.inject; -exports.LazyServiceIdentifer = inject_1.LazyServiceIdentifer; -var optional_1 = __webpack_require__(996); -exports.optional = optional_1.optional; -var unmanaged_1 = __webpack_require__(656); -exports.unmanaged = unmanaged_1.unmanaged; -var multi_inject_1 = __webpack_require__(891); -exports.multiInject = multi_inject_1.multiInject; -var target_name_1 = __webpack_require__(188); -exports.targetName = target_name_1.targetName; -var post_construct_1 = __webpack_require__(442); -exports.postConstruct = post_construct_1.postConstruct; -var metadata_reader_1 = __webpack_require__(202); -exports.MetadataReader = metadata_reader_1.MetadataReader; -var id_1 = __webpack_require__(786); -exports.id = id_1.id; -var decorator_utils_1 = __webpack_require__(289); -exports.decorate = decorator_utils_1.decorate; -var constraint_helpers_1 = __webpack_require__(599); -exports.traverseAncerstors = constraint_helpers_1.traverseAncerstors; -exports.taggedConstraint = constraint_helpers_1.taggedConstraint; -exports.namedConstraint = constraint_helpers_1.namedConstraint; -exports.typeConstraint = constraint_helpers_1.typeConstraint; -var serialization_1 = __webpack_require__(571); -exports.getServiceIdentifierAsString = serialization_1.getServiceIdentifierAsString; -var binding_utils_1 = __webpack_require__(911); -exports.multiBindToService = binding_utils_1.multiBindToService; - - -/***/ }), - -/***/ 417: -/***/ (function(module) { - -module.exports = require("crypto"); - -/***/ }), - -/***/ 442: -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -var ERRORS_MSGS = __webpack_require__(516); -var METADATA_KEY = __webpack_require__(677); -var metadata_1 = __webpack_require__(173); -function postConstruct() { - return function (target, propertyKey, descriptor) { - var metadata = new metadata_1.Metadata(METADATA_KEY.POST_CONSTRUCT, propertyKey); - if (Reflect.hasOwnMetadata(METADATA_KEY.POST_CONSTRUCT, target.constructor)) { - throw new Error(ERRORS_MSGS.MULTIPLE_POST_CONSTRUCT_METHODS); - } - Reflect.defineMetadata(METADATA_KEY.POST_CONSTRUCT, metadata, target.constructor); - }; -} -exports.postConstruct = postConstruct; - - -/***/ }), - -/***/ 443: -/***/ (function(__unusedmodule, exports) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -// -// Command Format: -// ##vso[artifact.command key=value;key=value]user message -// -// Examples: -// ##vso[task.progress value=58] -// ##vso[task.issue type=warning;]This is the user warning message -// -var CMD_PREFIX = '##vso['; -var TaskCommand = /** @class */ (function () { - function TaskCommand(command, properties, message) { - if (!command) { - command = 'missing.command'; - } - this.command = command; - this.properties = properties; - this.message = message; - } - TaskCommand.prototype.toString = function () { - var cmdStr = CMD_PREFIX + this.command; - if (this.properties && Object.keys(this.properties).length > 0) { - cmdStr += ' '; - for (var key in this.properties) { - if (this.properties.hasOwnProperty(key)) { - var val = this.properties[key]; - if (val) { - // safely append the val - avoid blowing up when attempting to - // call .replace() if message is not a string for some reason - cmdStr += key + '=' + escape('' + (val || '')) + ';'; - } - } - } - } - cmdStr += ']'; - // safely append the message - avoid blowing up when attempting to - // call .replace() if message is not a string for some reason - var message = '' + (this.message || ''); - cmdStr += escapedata(message); - return cmdStr; - }; - return TaskCommand; -}()); -exports.TaskCommand = TaskCommand; -function commandFromString(commandLine) { - var preLen = CMD_PREFIX.length; - var lbPos = commandLine.indexOf('['); - var rbPos = commandLine.indexOf(']'); - if (lbPos == -1 || rbPos == -1 || rbPos - lbPos < 3) { - throw new Error('Invalid command brackets'); - } - var cmdInfo = commandLine.substring(lbPos + 1, rbPos); - var spaceIdx = cmdInfo.indexOf(' '); - var command = cmdInfo; - var properties = {}; - if (spaceIdx > 0) { - command = cmdInfo.trim().substring(0, spaceIdx); - var propSection = cmdInfo.trim().substring(spaceIdx + 1); - var propLines = propSection.split(';'); - propLines.forEach(function (propLine) { - propLine = propLine.trim(); - if (propLine.length > 0) { - var eqIndex = propLine.indexOf('='); - if (eqIndex == -1) { - throw new Error('Invalid property: ' + propLine); - } - var key = propLine.substring(0, eqIndex); - var val = propLine.substring(eqIndex + 1); - properties[key] = unescape(val); - } - }); - } - var msg = unescapedata(commandLine.substring(rbPos + 1)); - var cmd = new TaskCommand(command, properties, msg); - return cmd; -} -exports.commandFromString = commandFromString; -function escapedata(s) { - return s.replace(/%/g, '%25') - .replace(/\r/g, '%0D') - .replace(/\n/g, '%0A'); -} -function unescapedata(s) { - return s.replace(/%0D/g, '\r') - .replace(/%0A/g, '\n') - .replace(/%25/g, '%'); -} -function escape(s) { - return s.replace(/%/g, '%25') - .replace(/\r/g, '%0D') - .replace(/\n/g, '%0A') - .replace(/]/g, '%5D') - .replace(/;/g, '%3B'); -} -function unescape(s) { - return s.replace(/%0D/g, '\r') - .replace(/%0A/g, '\n') - .replace(/%5D/g, ']') - .replace(/%3B/g, ';') - .replace(/%25/g, '%'); -} - - -/***/ }), - -/***/ 462: -/***/ (function(__unusedmodule, exports) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -var Plan = (function () { - function Plan(parentContext, rootRequest) { - this.parentContext = parentContext; - this.rootRequest = rootRequest; - } - return Plan; -}()); -exports.Plan = Plan; - - -/***/ }), - -/***/ 478: -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); - } - return function (d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -Object.defineProperty(exports, "__esModule", { value: true }); -var Q = __webpack_require__(637); -var os = __webpack_require__(365); -var events = __webpack_require__(614); -var child = __webpack_require__(129); -var im = __webpack_require__(358); -var fs = __webpack_require__(747); -var ToolRunner = /** @class */ (function (_super) { - __extends(ToolRunner, _super); - function ToolRunner(toolPath) { - var _this = _super.call(this) || this; - if (!toolPath) { - throw new Error('Parameter \'toolPath\' cannot be null or empty.'); - } - _this.toolPath = im._which(toolPath, true); - _this.args = []; - _this._debug('toolRunner toolPath: ' + toolPath); - return _this; - } - ToolRunner.prototype._debug = function (message) { - this.emit('debug', message); - }; - ToolRunner.prototype._argStringToArray = function (argString) { - var args = []; - var inQuotes = false; - var escaped = false; - var lastCharWasSpace = true; - 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 === ' ' && !inQuotes) { - if (!lastCharWasSpace) { - args.push(arg); - arg = ''; - } - lastCharWasSpace = true; - continue; - } - else { - lastCharWasSpace = false; - } - if (c === '"') { - if (!escaped) { - inQuotes = !inQuotes; - } - else { - append(c); - } - continue; - } - if (c === "\\" && escaped) { - append(c); - continue; - } - if (c === "\\" && inQuotes) { - escaped = true; - continue; - } - append(c); - lastCharWasSpace = false; - } - if (!lastCharWasSpace) { - args.push(arg.trim()); - } - return args; - }; - ToolRunner.prototype._getCommandString = function (options, noPrefix) { - var _this = this; - var toolPath = this._getSpawnFileName(); - var args = this._getSpawnArgs(options); - var cmd = noPrefix ? '' : '[command]'; // omit prefix when piped to a second tool - if (process.platform == 'win32') { - // Windows + cmd file - if (this._isCmdFile()) { - cmd += toolPath; - args.forEach(function (a) { - cmd += " " + a; - }); - } - // Windows + verbatim - else if (options.windowsVerbatimArguments) { - cmd += "\"" + toolPath + "\""; - args.forEach(function (a) { - cmd += " " + a; - }); - } - // Windows (regular) - else { - cmd += this._windowsQuoteCmdArg(toolPath); - args.forEach(function (a) { - cmd += " " + _this._windowsQuoteCmdArg(a); - }); - } - } - else { - // OSX/Linux - this can likely be improved with some form of quoting. - // creating processes on Unix is fundamentally different than Windows. - // on Unix, execvp() takes an arg array. - cmd += toolPath; - args.forEach(function (a) { - cmd += " " + a; - }); - } - // append second tool - if (this.pipeOutputToTool) { - cmd += ' | ' + this.pipeOutputToTool._getCommandString(options, /*noPrefix:*/ true); - } - return cmd; - }; - ToolRunner.prototype._processLineBuffer = function (data, strBuffer, onLine) { - try { - var s = strBuffer + data.toString(); - var n = s.indexOf(os.EOL); - while (n > -1) { - var line = s.substring(0, n); - onLine(line); - // the rest of the string ... - s = s.substring(n + os.EOL.length); - n = s.indexOf(os.EOL); - } - strBuffer = s; - } - catch (err) { - // streaming lines to console is best effort. Don't fail a build. - this._debug('error processing line'); - } - }; - ToolRunner.prototype._getSpawnFileName = function () { - if (process.platform == 'win32') { - if (this._isCmdFile()) { - return process.env['COMSPEC'] || 'cmd.exe'; - } - } - return this.toolPath; - }; - ToolRunner.prototype._getSpawnArgs = function (options) { - if (process.platform == 'win32') { - if (this._isCmdFile()) { - var argline = "/D /S /C \"" + this._windowsQuoteCmdArg(this.toolPath); - for (var i = 0; i < this.args.length; i++) { - argline += ' '; - argline += options.windowsVerbatimArguments ? this.args[i] : this._windowsQuoteCmdArg(this.args[i]); - } - argline += '"'; - return [argline]; - } - if (options.windowsVerbatimArguments) { - // note, in Node 6.x options.argv0 can be used instead of overriding args.slice and args.unshift. - // for more details, refer to https://github.com/nodejs/node/blob/v6.x/lib/child_process.js - var args_1 = this.args.slice(0); // copy the array - // override slice to prevent Node from creating a copy of the arg array. - // we need Node to use the "unshift" override below. - args_1.slice = function () { - if (arguments.length != 1 || arguments[0] != 0) { - throw new Error('Unexpected arguments passed to args.slice when windowsVerbatimArguments flag is set.'); - } - return args_1; - }; - // override unshift - // - // when using the windowsVerbatimArguments option, Node does not quote the tool path when building - // the cmdline parameter for the win32 function CreateProcess(). an unquoted space in the tool path - // causes problems for tools when attempting to parse their own command line args. tools typically - // assume their arguments begin after arg 0. - // - // by hijacking unshift, we can quote the tool path when it pushed onto the args array. Node builds - // the cmdline parameter from the args array. - // - // note, we can't simply pass a quoted tool path to Node for multiple reasons: - // 1) Node verifies the file exists (calls win32 function GetFileAttributesW) and the check returns - // false if the path is quoted. - // 2) Node passes the tool path as the application parameter to CreateProcess, which expects the - // path to be unquoted. - // - // also note, in addition to the tool path being embedded within the cmdline parameter, Node also - // passes the tool path to CreateProcess via the application parameter (optional parameter). when - // present, Windows uses the application parameter to determine which file to run, instead of - // interpreting the file from the cmdline parameter. - args_1.unshift = function () { - if (arguments.length != 1) { - throw new Error('Unexpected arguments passed to args.unshift when windowsVerbatimArguments flag is set.'); - } - return Array.prototype.unshift.call(args_1, "\"" + arguments[0] + "\""); // quote the file name - }; - return args_1; - } - } - return this.args; - }; - ToolRunner.prototype._isCmdFile = function () { - var upperToolPath = this.toolPath.toUpperCase(); - return im._endsWith(upperToolPath, '.CMD') || im._endsWith(upperToolPath, '.BAT'); - }; - ToolRunner.prototype._windowsQuoteCmdArg = function (arg) { - // for .exe, apply the normal quoting rules that libuv applies - if (!this._isCmdFile()) { - return this._uv_quote_cmd_arg(arg); - } - // otherwise apply quoting rules specific to the cmd.exe command line parser. - // the libuv rules are generic and are not designed specifically for cmd.exe - // command line parser. - // - // for a detailed description of the cmd.exe command line parser, refer to - // http://stackoverflow.com/questions/4094699/how-does-the-windows-command-interpreter-cmd-exe-parse-scripts/7970912#7970912 - // need quotes for empty arg - if (!arg) { - return '""'; - } - // determine whether the arg needs to be quoted - var cmdSpecialChars = [' ', '\t', '&', '(', ')', '[', ']', '{', '}', '^', '=', ';', '!', '\'', '+', ',', '`', '~', '|', '<', '>', '"']; - var needsQuotes = false; - var _loop_1 = function (char) { - if (cmdSpecialChars.some(function (x) { return x == char; })) { - needsQuotes = true; - return "break"; - } - }; - for (var _i = 0, arg_1 = arg; _i < arg_1.length; _i++) { - var char = arg_1[_i]; - var state_1 = _loop_1(char); - if (state_1 === "break") - break; - } - // short-circuit if quotes not needed - if (!needsQuotes) { - return arg; - } - // the following quoting rules are very similar to the rules that by libuv applies. - // - // 1) wrap the string in quotes - // - // 2) double-up quotes - i.e. " => "" - // - // this is different from the libuv quoting rules. libuv replaces " with \", which unfortunately - // doesn't work well with a cmd.exe command line. - // - // note, replacing " with "" also works well if the arg is passed to a downstream .NET console app. - // for example, the command line: - // foo.exe "myarg:""my val""" - // is parsed by a .NET console app into an arg array: - // [ "myarg:\"my val\"" ] - // which is the same end result when applying libuv quoting rules. although the actual - // command line from libuv quoting rules would look like: - // foo.exe "myarg:\"my val\"" - // - // 3) double-up slashes that preceed a quote, - // e.g. hello \world => "hello \world" - // hello\"world => "hello\\""world" - // hello\\"world => "hello\\\\""world" - // hello world\ => "hello world\\" - // - // technically this is not required for a cmd.exe command line, or the batch argument parser. - // the reasons for including this as a .cmd quoting rule are: - // - // a) this is optimized for the scenario where the argument is passed from the .cmd file to an - // external program. many programs (e.g. .NET console apps) rely on the slash-doubling rule. - // - // b) it's what we've been doing previously (by deferring to node default behavior) and we - // haven't heard any complaints about that aspect. - // - // note, a weakness of the quoting rules chosen here, is that % is not escaped. in fact, % cannot be - // escaped when used on the command line directly - even though within a .cmd file % can be escaped - // by using %%. - // - // the saving grace is, on the command line, %var% is left as-is if var is not defined. this contrasts - // the line parsing rules within a .cmd file, where if var is not defined it is replaced with nothing. - // - // one option that was explored was replacing % with ^% - i.e. %var% => ^%var^%. this hack would - // often work, since it is unlikely that var^ would exist, and the ^ character is removed when the - // variable is used. the problem, however, is that ^ is not removed when %* is used to pass the args - // to an external program. - // - // an unexplored potential solution for the % escaping problem, is to create a wrapper .cmd file. - // % can be escaped within a .cmd file. - var reverse = '"'; - var quote_hit = true; - for (var i = arg.length; i > 0; i--) { // walk the string in reverse - reverse += arg[i - 1]; - if (quote_hit && arg[i - 1] == '\\') { - reverse += '\\'; // double the slash - } - else if (arg[i - 1] == '"') { - quote_hit = true; - reverse += '"'; // double the quote - } - else { - quote_hit = false; - } - } - reverse += '"'; - return reverse.split('').reverse().join(''); - }; - ToolRunner.prototype._uv_quote_cmd_arg = function (arg) { - // Tool runner wraps child_process.spawn() and needs to apply the same quoting as - // Node in certain cases where the undocumented spawn option windowsVerbatimArguments - // is used. - // - // Since this function is a port of quote_cmd_arg from Node 4.x (technically, lib UV, - // see https://github.com/nodejs/node/blob/v4.x/deps/uv/src/win/process.c for details), - // pasting copyright notice from Node within this function: - // - // 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. - if (!arg) { - // Need double quotation for empty argument - return '""'; - } - if (arg.indexOf(' ') < 0 && arg.indexOf('\t') < 0 && arg.indexOf('"') < 0) { - // No quotation needed - return arg; - } - if (arg.indexOf('"') < 0 && arg.indexOf('\\') < 0) { - // No embedded double quotes or backslashes, so I can just wrap - // quote marks around the whole thing. - return "\"" + arg + "\""; - } - // Expected input/output: - // input : hello"world - // output: "hello\"world" - // input : hello""world - // output: "hello\"\"world" - // input : hello\world - // output: hello\world - // input : hello\\world - // output: hello\\world - // input : hello\"world - // output: "hello\\\"world" - // input : hello\\"world - // output: "hello\\\\\"world" - // input : hello world\ - // output: "hello world\\" - note the comment in libuv actually reads "hello world\" - // but it appears the comment is wrong, it should be "hello world\\" - var reverse = '"'; - var quote_hit = true; - for (var i = arg.length; i > 0; i--) { // walk the string in reverse - reverse += arg[i - 1]; - if (quote_hit && arg[i - 1] == '\\') { - reverse += '\\'; - } - else if (arg[i - 1] == '"') { - quote_hit = true; - reverse += '\\'; - } - else { - quote_hit = false; - } - } - reverse += '"'; - return reverse.split('').reverse().join(''); - }; - ToolRunner.prototype._cloneExecOptions = function (options) { - options = options || {}; - var result = { - cwd: options.cwd || process.cwd(), - env: options.env || process.env, - silent: options.silent || false, - failOnStdErr: options.failOnStdErr || false, - ignoreReturnCode: options.ignoreReturnCode || false, - windowsVerbatimArguments: options.windowsVerbatimArguments || false - }; - result.outStream = options.outStream || process.stdout; - result.errStream = options.errStream || process.stderr; - return result; - }; - ToolRunner.prototype._getSpawnOptions = function (options) { - options = options || {}; - var result = {}; - result.cwd = options.cwd; - result.env = options.env; - result['windowsVerbatimArguments'] = options.windowsVerbatimArguments || this._isCmdFile(); - return result; - }; - ToolRunner.prototype._getSpawnSyncOptions = function (options) { - var result = {}; - result.cwd = options.cwd; - result.env = options.env; - result['windowsVerbatimArguments'] = options.windowsVerbatimArguments || this._isCmdFile(); - return result; - }; - ToolRunner.prototype.execWithPiping = function (pipeOutputToTool, options) { - var _this = this; - var defer = Q.defer(); - this._debug('exec tool: ' + this.toolPath); - this._debug('arguments:'); - this.args.forEach(function (arg) { - _this._debug(' ' + arg); - }); - var success = true; - var optionsNonNull = this._cloneExecOptions(options); - if (!optionsNonNull.silent) { - optionsNonNull.outStream.write(this._getCommandString(optionsNonNull) + os.EOL); - } - var cp; - var toolPath = pipeOutputToTool.toolPath; - var toolPathFirst; - var successFirst = true; - var returnCodeFirst; - var fileStream; - var waitingEvents = 0; // number of process or stream events we are waiting on to complete - var returnCode = 0; - var error; - toolPathFirst = this.toolPath; - // Following node documentation example from this link on how to pipe output of one process to another - // https://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options - //start the child process for both tools - waitingEvents++; - var cpFirst = child.spawn(this._getSpawnFileName(), this._getSpawnArgs(optionsNonNull), this._getSpawnOptions(optionsNonNull)); - waitingEvents++; - cp = child.spawn(pipeOutputToTool._getSpawnFileName(), pipeOutputToTool._getSpawnArgs(optionsNonNull), pipeOutputToTool._getSpawnOptions(optionsNonNull)); - fileStream = this.pipeOutputToFile ? fs.createWriteStream(this.pipeOutputToFile) : null; - if (fileStream) { - waitingEvents++; - fileStream.on('finish', function () { - waitingEvents--; //file write is complete - fileStream = null; - if (waitingEvents == 0) { - if (error) { - defer.reject(error); - } - else { - defer.resolve(returnCode); - } - } - }); - fileStream.on('error', function (err) { - waitingEvents--; //there were errors writing to the file, write is done - _this._debug("Failed to pipe output of " + toolPathFirst + " to file " + _this.pipeOutputToFile + ". Error = " + err); - fileStream = null; - if (waitingEvents == 0) { - if (error) { - defer.reject(error); - } - else { - defer.resolve(returnCode); - } - } - }); - } - //pipe stdout of first tool to stdin of second tool - cpFirst.stdout.on('data', function (data) { - try { - if (fileStream) { - fileStream.write(data); - } - cp.stdin.write(data); - } - catch (err) { - _this._debug('Failed to pipe output of ' + toolPathFirst + ' to ' + toolPath); - _this._debug(toolPath + ' might have exited due to errors prematurely. Verify the arguments passed are valid.'); - } - }); - cpFirst.stderr.on('data', function (data) { - if (fileStream) { - fileStream.write(data); - } - successFirst = !optionsNonNull.failOnStdErr; - if (!optionsNonNull.silent) { - var s = optionsNonNull.failOnStdErr ? optionsNonNull.errStream : optionsNonNull.outStream; - s.write(data); - } - }); - cpFirst.on('error', function (err) { - waitingEvents--; //first process is complete with errors - if (fileStream) { - fileStream.end(); - } - cp.stdin.end(); - error = new Error(toolPathFirst + ' failed. ' + err.message); - if (waitingEvents == 0) { - defer.reject(error); - } - }); - cpFirst.on('close', function (code, signal) { - waitingEvents--; //first process is complete - if (code != 0 && !optionsNonNull.ignoreReturnCode) { - successFirst = false; - returnCodeFirst = code; - returnCode = returnCodeFirst; - } - _this._debug('success of first tool:' + successFirst); - if (fileStream) { - fileStream.end(); - } - cp.stdin.end(); - if (waitingEvents == 0) { - if (error) { - defer.reject(error); - } - else { - defer.resolve(returnCode); - } - } - }); - var stdbuffer = ''; - cp.stdout.on('data', function (data) { - _this.emit('stdout', data); - if (!optionsNonNull.silent) { - optionsNonNull.outStream.write(data); - } - _this._processLineBuffer(data, stdbuffer, function (line) { - _this.emit('stdline', line); - }); - }); - var errbuffer = ''; - cp.stderr.on('data', function (data) { - _this.emit('stderr', data); - success = !optionsNonNull.failOnStdErr; - if (!optionsNonNull.silent) { - var s = optionsNonNull.failOnStdErr ? optionsNonNull.errStream : optionsNonNull.outStream; - s.write(data); - } - _this._processLineBuffer(data, errbuffer, function (line) { - _this.emit('errline', line); - }); - }); - cp.on('error', function (err) { - waitingEvents--; //process is done with errors - error = new Error(toolPath + ' failed. ' + err.message); - if (waitingEvents == 0) { - defer.reject(error); - } - }); - cp.on('close', function (code, signal) { - waitingEvents--; //process is complete - _this._debug('rc:' + code); - returnCode = code; - if (stdbuffer.length > 0) { - _this.emit('stdline', stdbuffer); - } - if (errbuffer.length > 0) { - _this.emit('errline', errbuffer); - } - if (code != 0 && !optionsNonNull.ignoreReturnCode) { - success = false; - } - _this._debug('success:' + success); - if (!successFirst) { //in the case output is piped to another tool, check exit code of both tools - error = new Error(toolPathFirst + ' failed with return code: ' + returnCodeFirst); - } - else if (!success) { - error = new Error(toolPath + ' failed with return code: ' + code); - } - if (waitingEvents == 0) { - if (error) { - defer.reject(error); - } - else { - defer.resolve(returnCode); - } - } - }); - return defer.promise; - }; - /** - * Add argument - * Append an argument or an array of arguments - * returns ToolRunner for chaining - * - * @param val string cmdline or array of strings - * @returns ToolRunner - */ - ToolRunner.prototype.arg = function (val) { - if (!val) { - return this; - } - if (val instanceof Array) { - this._debug(this.toolPath + ' arg: ' + JSON.stringify(val)); - this.args = this.args.concat(val); - } - else if (typeof (val) === 'string') { - this._debug(this.toolPath + ' arg: ' + val); - this.args = this.args.concat(val.trim()); - } - return this; - }; - /** - * Parses an argument line into one or more arguments - * e.g. .line('"arg one" two -z') is equivalent to .arg(['arg one', 'two', '-z']) - * returns ToolRunner for chaining - * - * @param val string argument line - * @returns ToolRunner - */ - ToolRunner.prototype.line = function (val) { - if (!val) { - return this; - } - this._debug(this.toolPath + ' arg: ' + val); - this.args = this.args.concat(this._argStringToArray(val)); - return this; - }; - /** - * Add argument(s) if a condition is met - * Wraps arg(). See arg for details - * returns ToolRunner for chaining - * - * @param condition boolean condition - * @param val string cmdline or array of strings - * @returns ToolRunner - */ - ToolRunner.prototype.argIf = function (condition, val) { - if (condition) { - this.arg(val); - } - return this; - }; - /** - * Pipe output of exec() to another tool - * @param tool - * @param file optional filename to additionally stream the output to. - * @returns {ToolRunner} - */ - ToolRunner.prototype.pipeExecOutputToTool = function (tool, file) { - this.pipeOutputToTool = tool; - this.pipeOutputToFile = file; - return this; - }; - /** - * Exec a tool. - * Output will be streamed to the live console. - * Returns promise with return code - * - * @param tool path to tool to exec - * @param options optional exec options. See IExecOptions - * @returns number - */ - ToolRunner.prototype.exec = function (options) { - var _this = this; - if (this.pipeOutputToTool) { - return this.execWithPiping(this.pipeOutputToTool, options); - } - var defer = Q.defer(); - this._debug('exec tool: ' + this.toolPath); - this._debug('arguments:'); - this.args.forEach(function (arg) { - _this._debug(' ' + arg); - }); - var optionsNonNull = this._cloneExecOptions(options); - if (!optionsNonNull.silent) { - optionsNonNull.outStream.write(this._getCommandString(optionsNonNull) + os.EOL); - } - var state = new ExecState(optionsNonNull, this.toolPath); - state.on('debug', function (message) { - _this._debug(message); - }); - var cp = child.spawn(this._getSpawnFileName(), this._getSpawnArgs(optionsNonNull), this._getSpawnOptions(options)); - // it is possible for the child process to end its last line without a new line. - // because stdout is buffered, this causes the last line to not get sent to the parent - // stream. Adding this event forces a flush before the child streams are closed. - cp.stdout.on('finish', function () { - if (!optionsNonNull.silent) { - optionsNonNull.outStream.write(os.EOL); - } - }); - var stdbuffer = ''; - cp.stdout.on('data', function (data) { - _this.emit('stdout', data); - if (!optionsNonNull.silent) { - optionsNonNull.outStream.write(data); - } - _this._processLineBuffer(data, stdbuffer, function (line) { - _this.emit('stdline', line); - }); - }); - var errbuffer = ''; - cp.stderr.on('data', function (data) { - state.processStderr = true; - _this.emit('stderr', data); - if (!optionsNonNull.silent) { - var s = optionsNonNull.failOnStdErr ? optionsNonNull.errStream : optionsNonNull.outStream; - s.write(data); - } - _this._processLineBuffer(data, errbuffer, function (line) { - _this.emit('errline', line); - }); - }); - cp.on('error', function (err) { - state.processError = err.message; - state.processExited = true; - state.processClosed = true; - state.CheckComplete(); - }); - cp.on('exit', function (code, signal) { - state.processExitCode = code; - state.processExited = true; - _this._debug("Exit code " + code + " received from tool '" + _this.toolPath + "'"); - state.CheckComplete(); - }); - cp.on('close', function (code, signal) { - state.processExitCode = code; - state.processExited = true; - state.processClosed = true; - _this._debug("STDIO streams have closed for tool '" + _this.toolPath + "'"); - state.CheckComplete(); - }); - state.on('done', function (error, exitCode) { - if (stdbuffer.length > 0) { - _this.emit('stdline', stdbuffer); - } - if (errbuffer.length > 0) { - _this.emit('errline', errbuffer); - } - cp.removeAllListeners(); - if (error) { - defer.reject(error); - } - else { - defer.resolve(exitCode); - } - }); - return defer.promise; - }; - /** - * Exec a tool synchronously. - * Output will be *not* be streamed to the live console. It will be returned after execution is complete. - * Appropriate for short running tools - * Returns IExecSyncResult with output and return code - * - * @param tool path to tool to exec - * @param options optional exec options. See IExecSyncOptions - * @returns IExecSyncResult - */ - ToolRunner.prototype.execSync = function (options) { - var _this = this; - this._debug('exec tool: ' + this.toolPath); - this._debug('arguments:'); - this.args.forEach(function (arg) { - _this._debug(' ' + arg); - }); - var success = true; - options = this._cloneExecOptions(options); - if (!options.silent) { - options.outStream.write(this._getCommandString(options) + os.EOL); - } - var r = child.spawnSync(this._getSpawnFileName(), this._getSpawnArgs(options), this._getSpawnSyncOptions(options)); - if (!options.silent && r.stdout && r.stdout.length > 0) { - options.outStream.write(r.stdout); - } - if (!options.silent && r.stderr && r.stderr.length > 0) { - options.errStream.write(r.stderr); - } - var res = { code: r.status, error: r.error }; - res.stdout = (r.stdout) ? r.stdout.toString() : ''; - res.stderr = (r.stderr) ? r.stderr.toString() : ''; - return res; - }; - return ToolRunner; -}(events.EventEmitter)); -exports.ToolRunner = ToolRunner; -var ExecState = /** @class */ (function (_super) { - __extends(ExecState, _super); - function ExecState(options, toolPath) { - var _this = _super.call(this) || this; - _this.delay = 10000; // 10 seconds - _this.timeout = null; - if (!toolPath) { - throw new Error('toolPath must not be empty'); - } - _this.options = options; - _this.toolPath = toolPath; - var delay = process.env['TASKLIB_TEST_TOOLRUNNER_EXITDELAY']; - if (delay) { - _this.delay = parseInt(delay); - } - return _this; - } - ExecState.prototype.CheckComplete = function () { - if (this.done) { - return; - } - if (this.processClosed) { - this._setResult(); - } - else if (this.processExited) { - this.timeout = setTimeout(ExecState.HandleTimeout, this.delay, this); - } - }; - ExecState.prototype._debug = function (message) { - this.emit('debug', message); - }; - ExecState.prototype._setResult = function () { - // determine whether there is an error - var error; - if (this.processExited) { - if (this.processError) { - error = new Error(im._loc('LIB_ProcessError', this.toolPath, this.processError)); - } - else if (this.processExitCode != 0 && !this.options.ignoreReturnCode) { - error = new Error(im._loc('LIB_ProcessExitCode', this.toolPath, this.processExitCode)); - } - else if (this.processStderr && this.options.failOnStdErr) { - error = new Error(im._loc('LIB_ProcessStderr', this.toolPath)); - } - } - // clear the timeout - if (this.timeout) { - clearTimeout(this.timeout); - this.timeout = null; - } - this.done = true; - this.emit('done', error, this.processExitCode); - }; - ExecState.HandleTimeout = function (state) { - if (state.done) { - return; - } - if (!state.processClosed && state.processExited) { - console.log(im._loc('LIB_StdioNotClosed', state.delay / 1000, state.toolPath)); - state._debug(im._loc('LIB_StdioNotClosed', state.delay / 1000, state.toolPath)); - } - state._setResult(); - }; - return ExecState; -}(events.EventEmitter)); - - -/***/ }), - -/***/ 490: -/***/ (function(module, __unusedexports, __webpack_require__) { - -var common = __webpack_require__(164); - -//@ -//@ ### echo(string [,string ...]) -//@ -//@ Examples: -//@ -//@ ```javascript -//@ echo('hello world'); -//@ var str = echo('hello world'); -//@ ``` -//@ -//@ Prints string to stdout, and returns string with additional utility methods -//@ like `.to()`. -function _echo() { - var messages = [].slice.call(arguments, 0); - console.log.apply(this, messages); - return common.ShellString(messages.join(' ')); -} -module.exports = _echo; - - -/***/ }), - -/***/ 502: -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -var ERROR_MSGS = __webpack_require__(516); -var literal_types_1 = __webpack_require__(186); -var exceptions_1 = __webpack_require__(355); -var serialization_1 = __webpack_require__(571); -var instantiation_1 = __webpack_require__(9); -var invokeFactory = function (factoryType, serviceIdentifier, fn) { - try { - return fn(); - } - catch (error) { - if (exceptions_1.isStackOverflowExeption(error)) { - throw new Error(ERROR_MSGS.CIRCULAR_DEPENDENCY_IN_FACTORY(factoryType, serviceIdentifier.toString())); - } - else { - throw error; - } - } -}; -var _resolveRequest = function (requestScope) { - return function (request) { - request.parentContext.setCurrentRequest(request); - var bindings = request.bindings; - var childRequests = request.childRequests; - var targetIsAnArray = request.target && request.target.isArray(); - var targetParentIsNotAnArray = !request.parentRequest || - !request.parentRequest.target || - !request.target || - !request.parentRequest.target.matchesArray(request.target.serviceIdentifier); - if (targetIsAnArray && targetParentIsNotAnArray) { - return childRequests.map(function (childRequest) { - var _f = _resolveRequest(requestScope); - return _f(childRequest); - }); - } - else { - var result = null; - if (request.target.isOptional() && bindings.length === 0) { - return undefined; - } - var binding_1 = bindings[0]; - var isSingleton = binding_1.scope === literal_types_1.BindingScopeEnum.Singleton; - var isRequestSingleton = binding_1.scope === literal_types_1.BindingScopeEnum.Request; - if (isSingleton && binding_1.activated) { - return binding_1.cache; - } - if (isRequestSingleton && - requestScope !== null && - requestScope.has(binding_1.id)) { - return requestScope.get(binding_1.id); - } - if (binding_1.type === literal_types_1.BindingTypeEnum.ConstantValue) { - result = binding_1.cache; - } - else if (binding_1.type === literal_types_1.BindingTypeEnum.Function) { - result = binding_1.cache; - } - else if (binding_1.type === literal_types_1.BindingTypeEnum.Constructor) { - result = binding_1.implementationType; - } - else if (binding_1.type === literal_types_1.BindingTypeEnum.DynamicValue && binding_1.dynamicValue !== null) { - result = invokeFactory("toDynamicValue", binding_1.serviceIdentifier, function () { return binding_1.dynamicValue(request.parentContext); }); - } - else if (binding_1.type === literal_types_1.BindingTypeEnum.Factory && binding_1.factory !== null) { - result = invokeFactory("toFactory", binding_1.serviceIdentifier, function () { return binding_1.factory(request.parentContext); }); - } - else if (binding_1.type === literal_types_1.BindingTypeEnum.Provider && binding_1.provider !== null) { - result = invokeFactory("toProvider", binding_1.serviceIdentifier, function () { return binding_1.provider(request.parentContext); }); - } - else if (binding_1.type === literal_types_1.BindingTypeEnum.Instance && binding_1.implementationType !== null) { - result = instantiation_1.resolveInstance(binding_1.implementationType, childRequests, _resolveRequest(requestScope)); - } - else { - var serviceIdentifier = serialization_1.getServiceIdentifierAsString(request.serviceIdentifier); - throw new Error(ERROR_MSGS.INVALID_BINDING_TYPE + " " + serviceIdentifier); - } - if (typeof binding_1.onActivation === "function") { - result = binding_1.onActivation(request.parentContext, result); - } - if (isSingleton) { - binding_1.cache = result; - binding_1.activated = true; - } - if (isRequestSingleton && - requestScope !== null && - !requestScope.has(binding_1.id)) { - requestScope.set(binding_1.id, result); - } - return result; - } - }; -}; -function resolve(context) { - var _f = _resolveRequest(context.plan.rootRequest.requestScope); - return _f(context.plan.rootRequest); -} -exports.resolve = resolve; - - -/***/ }), - -/***/ 516: -/***/ (function(__unusedmodule, exports) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -exports.DUPLICATED_INJECTABLE_DECORATOR = "Cannot apply @injectable decorator multiple times."; -exports.DUPLICATED_METADATA = "Metadata key was used more than once in a parameter:"; -exports.NULL_ARGUMENT = "NULL argument"; -exports.KEY_NOT_FOUND = "Key Not Found"; -exports.AMBIGUOUS_MATCH = "Ambiguous match found for serviceIdentifier:"; -exports.CANNOT_UNBIND = "Could not unbind serviceIdentifier:"; -exports.NOT_REGISTERED = "No matching bindings found for serviceIdentifier:"; -exports.MISSING_INJECTABLE_ANNOTATION = "Missing required @injectable annotation in:"; -exports.MISSING_INJECT_ANNOTATION = "Missing required @inject or @multiInject annotation in:"; -exports.UNDEFINED_INJECT_ANNOTATION = function (name) { - return "@inject called with undefined this could mean that the class " + name + " has " + - "a circular dependency problem. You can use a LazyServiceIdentifer to " + - "overcome this limitation."; -}; -exports.CIRCULAR_DEPENDENCY = "Circular dependency found:"; -exports.NOT_IMPLEMENTED = "Sorry, this feature is not fully implemented yet."; -exports.INVALID_BINDING_TYPE = "Invalid binding type:"; -exports.NO_MORE_SNAPSHOTS_AVAILABLE = "No snapshot available to restore."; -exports.INVALID_MIDDLEWARE_RETURN = "Invalid return type in middleware. Middleware must return!"; -exports.INVALID_FUNCTION_BINDING = "Value provided to function binding must be a function!"; -exports.INVALID_TO_SELF_VALUE = "The toSelf function can only be applied when a constructor is " + - "used as service identifier"; -exports.INVALID_DECORATOR_OPERATION = "The @inject @multiInject @tagged and @named decorators " + - "must be applied to the parameters of a class constructor or a class property."; -exports.ARGUMENTS_LENGTH_MISMATCH = function () { - var values = []; - for (var _i = 0; _i < arguments.length; _i++) { - values[_i] = arguments[_i]; - } - return "The number of constructor arguments in the derived class " + - (values[0] + " must be >= than the number of constructor arguments of its base class."); -}; -exports.CONTAINER_OPTIONS_MUST_BE_AN_OBJECT = "Invalid Container constructor argument. Container options " + - "must be an object."; -exports.CONTAINER_OPTIONS_INVALID_DEFAULT_SCOPE = "Invalid Container option. Default scope must " + - "be a string ('singleton' or 'transient')."; -exports.CONTAINER_OPTIONS_INVALID_AUTO_BIND_INJECTABLE = "Invalid Container option. Auto bind injectable must " + - "be a boolean"; -exports.CONTAINER_OPTIONS_INVALID_SKIP_BASE_CHECK = "Invalid Container option. Skip base check must " + - "be a boolean"; -exports.MULTIPLE_POST_CONSTRUCT_METHODS = "Cannot apply @postConstruct decorator multiple times in the same class"; -exports.POST_CONSTRUCT_ERROR = function () { - var values = []; - for (var _i = 0; _i < arguments.length; _i++) { - values[_i] = arguments[_i]; - } - return "@postConstruct error in class " + values[0] + ": " + values[1]; -}; -exports.CIRCULAR_DEPENDENCY_IN_FACTORY = function () { - var values = []; - for (var _i = 0; _i < arguments.length; _i++) { - values[_i] = arguments[_i]; - } - return "It looks like there is a circular dependency " + - ("in one of the '" + values[0] + "' bindings. Please investigate bindings with") + - ("service identifier '" + values[1] + "'."); -}; -exports.STACK_OVERFLOW = "Maximum call stack size exceeded"; - - -/***/ }), - -/***/ 534: -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -var METADATA_KEY = __webpack_require__(677); -var id_1 = __webpack_require__(786); -var metadata_1 = __webpack_require__(173); -var queryable_string_1 = __webpack_require__(657); -var Target = (function () { - function Target(type, name, serviceIdentifier, namedOrTagged) { - this.id = id_1.id(); - this.type = type; - this.serviceIdentifier = serviceIdentifier; - this.name = new queryable_string_1.QueryableString(name || ""); - this.metadata = new Array(); - var metadataItem = null; - if (typeof namedOrTagged === "string") { - metadataItem = new metadata_1.Metadata(METADATA_KEY.NAMED_TAG, namedOrTagged); - } - else if (namedOrTagged instanceof metadata_1.Metadata) { - metadataItem = namedOrTagged; - } - if (metadataItem !== null) { - this.metadata.push(metadataItem); - } - } - Target.prototype.hasTag = function (key) { - for (var _i = 0, _a = this.metadata; _i < _a.length; _i++) { - var m = _a[_i]; - if (m.key === key) { - return true; - } - } - return false; - }; - Target.prototype.isArray = function () { - return this.hasTag(METADATA_KEY.MULTI_INJECT_TAG); - }; - Target.prototype.matchesArray = function (name) { - return this.matchesTag(METADATA_KEY.MULTI_INJECT_TAG)(name); - }; - Target.prototype.isNamed = function () { - return this.hasTag(METADATA_KEY.NAMED_TAG); - }; - Target.prototype.isTagged = function () { - return this.metadata.some(function (m) { - return (m.key !== METADATA_KEY.INJECT_TAG) && - (m.key !== METADATA_KEY.MULTI_INJECT_TAG) && - (m.key !== METADATA_KEY.NAME_TAG) && - (m.key !== METADATA_KEY.UNMANAGED_TAG) && - (m.key !== METADATA_KEY.NAMED_TAG); - }); - }; - Target.prototype.isOptional = function () { - return this.matchesTag(METADATA_KEY.OPTIONAL_TAG)(true); - }; - Target.prototype.getNamedTag = function () { - if (this.isNamed()) { - return this.metadata.filter(function (m) { return m.key === METADATA_KEY.NAMED_TAG; })[0]; - } - return null; - }; - Target.prototype.getCustomTags = function () { - if (this.isTagged()) { - return this.metadata.filter(function (m) { - return (m.key !== METADATA_KEY.INJECT_TAG) && - (m.key !== METADATA_KEY.MULTI_INJECT_TAG) && - (m.key !== METADATA_KEY.NAME_TAG) && - (m.key !== METADATA_KEY.UNMANAGED_TAG) && - (m.key !== METADATA_KEY.NAMED_TAG); - }); - } - return null; - }; - Target.prototype.matchesNamedTag = function (name) { - return this.matchesTag(METADATA_KEY.NAMED_TAG)(name); - }; - Target.prototype.matchesTag = function (key) { - var _this = this; - return function (value) { - for (var _i = 0, _a = _this.metadata; _i < _a.length; _i++) { - var m = _a[_i]; - if (m.key === key && m.value === value) { - return true; - } - } - return false; - }; - }; - return Target; -}()); -exports.Target = Target; - - -/***/ }), - -/***/ 538: -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -var ERROR_MSGS = __webpack_require__(516); -var literal_types_1 = __webpack_require__(186); -var binding_in_when_on_syntax_1 = __webpack_require__(226); -var binding_when_on_syntax_1 = __webpack_require__(179); -var BindingToSyntax = (function () { - function BindingToSyntax(binding) { - this._binding = binding; - } - BindingToSyntax.prototype.to = function (constructor) { - this._binding.type = literal_types_1.BindingTypeEnum.Instance; - this._binding.implementationType = constructor; - return new binding_in_when_on_syntax_1.BindingInWhenOnSyntax(this._binding); - }; - BindingToSyntax.prototype.toSelf = function () { - if (typeof this._binding.serviceIdentifier !== "function") { - throw new Error("" + ERROR_MSGS.INVALID_TO_SELF_VALUE); - } - var self = this._binding.serviceIdentifier; - return this.to(self); - }; - BindingToSyntax.prototype.toConstantValue = function (value) { - this._binding.type = literal_types_1.BindingTypeEnum.ConstantValue; - this._binding.cache = value; - this._binding.dynamicValue = null; - this._binding.implementationType = null; - return new binding_when_on_syntax_1.BindingWhenOnSyntax(this._binding); - }; - BindingToSyntax.prototype.toDynamicValue = function (func) { - this._binding.type = literal_types_1.BindingTypeEnum.DynamicValue; - this._binding.cache = null; - this._binding.dynamicValue = func; - this._binding.implementationType = null; - return new binding_in_when_on_syntax_1.BindingInWhenOnSyntax(this._binding); - }; - BindingToSyntax.prototype.toConstructor = function (constructor) { - this._binding.type = literal_types_1.BindingTypeEnum.Constructor; - this._binding.implementationType = constructor; - return new binding_when_on_syntax_1.BindingWhenOnSyntax(this._binding); - }; - BindingToSyntax.prototype.toFactory = function (factory) { - this._binding.type = literal_types_1.BindingTypeEnum.Factory; - this._binding.factory = factory; - return new binding_when_on_syntax_1.BindingWhenOnSyntax(this._binding); - }; - BindingToSyntax.prototype.toFunction = function (func) { - if (typeof func !== "function") { - throw new Error(ERROR_MSGS.INVALID_FUNCTION_BINDING); - } - var bindingWhenOnSyntax = this.toConstantValue(func); - this._binding.type = literal_types_1.BindingTypeEnum.Function; - return bindingWhenOnSyntax; - }; - BindingToSyntax.prototype.toAutoFactory = function (serviceIdentifier) { - this._binding.type = literal_types_1.BindingTypeEnum.Factory; - this._binding.factory = function (context) { - var autofactory = function () { return context.container.get(serviceIdentifier); }; - return autofactory; - }; - return new binding_when_on_syntax_1.BindingWhenOnSyntax(this._binding); - }; - BindingToSyntax.prototype.toProvider = function (provider) { - this._binding.type = literal_types_1.BindingTypeEnum.Provider; - this._binding.provider = provider; - return new binding_when_on_syntax_1.BindingWhenOnSyntax(this._binding); - }; - BindingToSyntax.prototype.toService = function (service) { - this.toDynamicValue(function (context) { return context.container.get(service); }); - }; - return BindingToSyntax; -}()); -exports.BindingToSyntax = BindingToSyntax; - - -/***/ }), - -/***/ 542: -/***/ (function(module, __unusedexports, __webpack_require__) { - -var rng = __webpack_require__(95); -var bytesToUuid = __webpack_require__(722); - -function v4(options, buf, offset) { - var i = buf && offset || 0; - - if (typeof(options) == 'string') { - buf = options === 'binary' ? new Array(16) : null; - options = null; - } - options = options || {}; - - var rnds = options.random || (options.rng || rng)(); - - // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - rnds[6] = (rnds[6] & 0x0f) | 0x40; - rnds[8] = (rnds[8] & 0x3f) | 0x80; - - // Copy bytes to buffer, if provided - if (buf) { - for (var ii = 0; ii < 16; ++ii) { - buf[i + ii] = rnds[ii]; - } - } - - return buf || bytesToUuid(rnds); -} - -module.exports = v4; - - -/***/ }), - -/***/ 549: -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -// Copyright (c) Microsoft. All rights reserved. -// Licensed under the MIT license. See LICENSE file in the project root for full license information. -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const url = __webpack_require__(835); -const http = __webpack_require__(605); -const https = __webpack_require__(211); -let fs; -let tunnel; -var HttpCodes; -(function (HttpCodes) { - HttpCodes[HttpCodes["OK"] = 200] = "OK"; - HttpCodes[HttpCodes["MultipleChoices"] = 300] = "MultipleChoices"; - HttpCodes[HttpCodes["MovedPermanently"] = 301] = "MovedPermanently"; - HttpCodes[HttpCodes["ResourceMoved"] = 302] = "ResourceMoved"; - HttpCodes[HttpCodes["SeeOther"] = 303] = "SeeOther"; - HttpCodes[HttpCodes["NotModified"] = 304] = "NotModified"; - HttpCodes[HttpCodes["UseProxy"] = 305] = "UseProxy"; - HttpCodes[HttpCodes["SwitchProxy"] = 306] = "SwitchProxy"; - HttpCodes[HttpCodes["TemporaryRedirect"] = 307] = "TemporaryRedirect"; - HttpCodes[HttpCodes["PermanentRedirect"] = 308] = "PermanentRedirect"; - HttpCodes[HttpCodes["BadRequest"] = 400] = "BadRequest"; - HttpCodes[HttpCodes["Unauthorized"] = 401] = "Unauthorized"; - HttpCodes[HttpCodes["PaymentRequired"] = 402] = "PaymentRequired"; - HttpCodes[HttpCodes["Forbidden"] = 403] = "Forbidden"; - HttpCodes[HttpCodes["NotFound"] = 404] = "NotFound"; - HttpCodes[HttpCodes["MethodNotAllowed"] = 405] = "MethodNotAllowed"; - HttpCodes[HttpCodes["NotAcceptable"] = 406] = "NotAcceptable"; - HttpCodes[HttpCodes["ProxyAuthenticationRequired"] = 407] = "ProxyAuthenticationRequired"; - HttpCodes[HttpCodes["RequestTimeout"] = 408] = "RequestTimeout"; - HttpCodes[HttpCodes["Conflict"] = 409] = "Conflict"; - HttpCodes[HttpCodes["Gone"] = 410] = "Gone"; - HttpCodes[HttpCodes["InternalServerError"] = 500] = "InternalServerError"; - HttpCodes[HttpCodes["NotImplemented"] = 501] = "NotImplemented"; - HttpCodes[HttpCodes["BadGateway"] = 502] = "BadGateway"; - HttpCodes[HttpCodes["ServiceUnavailable"] = 503] = "ServiceUnavailable"; - HttpCodes[HttpCodes["GatewayTimeout"] = 504] = "GatewayTimeout"; -})(HttpCodes = exports.HttpCodes || (exports.HttpCodes = {})); -const HttpRedirectCodes = [HttpCodes.MovedPermanently, HttpCodes.ResourceMoved, HttpCodes.SeeOther, HttpCodes.TemporaryRedirect, HttpCodes.PermanentRedirect]; -const HttpResponseRetryCodes = [HttpCodes.BadGateway, HttpCodes.ServiceUnavailable, HttpCodes.GatewayTimeout]; -const RetryableHttpVerbs = ['OPTIONS', 'GET', 'DELETE', 'HEAD']; -const ExponentialBackoffCeiling = 10; -const ExponentialBackoffTimeSlice = 5; -class HttpClientResponse { - constructor(message) { - this.message = message; - } - readBody() { - return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () { - let output = ''; - this.message.on('data', (chunk) => { - output += chunk; - }); - this.message.on('end', () => { - resolve(output); - }); - })); - } -} -exports.HttpClientResponse = HttpClientResponse; -function isHttps(requestUrl) { - let parsedUrl = url.parse(requestUrl); - return parsedUrl.protocol === 'https:'; -} -exports.isHttps = isHttps; -var EnvironmentVariables; -(function (EnvironmentVariables) { - EnvironmentVariables["HTTP_PROXY"] = "HTTP_PROXY"; - EnvironmentVariables["HTTPS_PROXY"] = "HTTPS_PROXY"; -})(EnvironmentVariables || (EnvironmentVariables = {})); -class HttpClient { - constructor(userAgent, handlers, requestOptions) { - this._ignoreSslError = false; - this._allowRedirects = true; - this._maxRedirects = 50; - this._allowRetries = false; - this._maxRetries = 1; - this._keepAlive = false; - this._disposed = false; - this.userAgent = userAgent; - this.handlers = handlers || []; - this.requestOptions = requestOptions; - if (requestOptions) { - if (requestOptions.ignoreSslError != null) { - this._ignoreSslError = requestOptions.ignoreSslError; - } - this._socketTimeout = requestOptions.socketTimeout; - this._httpProxy = requestOptions.proxy; - if (requestOptions.proxy && requestOptions.proxy.proxyBypassHosts) { - this._httpProxyBypassHosts = []; - requestOptions.proxy.proxyBypassHosts.forEach(bypass => { - this._httpProxyBypassHosts.push(new RegExp(bypass, 'i')); - }); - } - this._certConfig = requestOptions.cert; - if (this._certConfig) { - // If using cert, need fs - fs = __webpack_require__(747); - // cache the cert content into memory, so we don't have to read it from disk every time - if (this._certConfig.caFile && fs.existsSync(this._certConfig.caFile)) { - this._ca = fs.readFileSync(this._certConfig.caFile, 'utf8'); - } - if (this._certConfig.certFile && fs.existsSync(this._certConfig.certFile)) { - this._cert = fs.readFileSync(this._certConfig.certFile, 'utf8'); - } - if (this._certConfig.keyFile && fs.existsSync(this._certConfig.keyFile)) { - this._key = fs.readFileSync(this._certConfig.keyFile, 'utf8'); - } - } - if (requestOptions.allowRedirects != null) { - this._allowRedirects = requestOptions.allowRedirects; - } - if (requestOptions.maxRedirects != null) { - this._maxRedirects = Math.max(requestOptions.maxRedirects, 0); - } - if (requestOptions.keepAlive != null) { - this._keepAlive = requestOptions.keepAlive; - } - if (requestOptions.allowRetries != null) { - this._allowRetries = requestOptions.allowRetries; - } - if (requestOptions.maxRetries != null) { - this._maxRetries = requestOptions.maxRetries; - } - } - } - options(requestUrl, additionalHeaders) { - return this.request('OPTIONS', requestUrl, null, additionalHeaders || {}); - } - get(requestUrl, additionalHeaders) { - return this.request('GET', requestUrl, null, additionalHeaders || {}); - } - del(requestUrl, additionalHeaders) { - return this.request('DELETE', requestUrl, null, additionalHeaders || {}); - } - post(requestUrl, data, additionalHeaders) { - return this.request('POST', requestUrl, data, additionalHeaders || {}); - } - patch(requestUrl, data, additionalHeaders) { - return this.request('PATCH', requestUrl, data, additionalHeaders || {}); - } - put(requestUrl, data, additionalHeaders) { - return this.request('PUT', requestUrl, data, additionalHeaders || {}); - } - head(requestUrl, additionalHeaders) { - return this.request('HEAD', requestUrl, null, additionalHeaders || {}); - } - sendStream(verb, requestUrl, stream, additionalHeaders) { - return this.request(verb, requestUrl, stream, additionalHeaders); - } - /** - * Makes a raw http request. - * All other methods such as get, post, patch, and request ultimately call this. - * Prefer get, del, post and patch - */ - request(verb, requestUrl, data, headers) { - return __awaiter(this, void 0, void 0, function* () { - if (this._disposed) { - throw new Error("Client has already been disposed."); - } - let info = this._prepareRequest(verb, requestUrl, headers); - // Only perform retries on reads since writes may not be idempotent. - let maxTries = (this._allowRetries && RetryableHttpVerbs.indexOf(verb) != -1) ? this._maxRetries + 1 : 1; - let numTries = 0; - let response; - while (numTries < maxTries) { - response = yield this.requestRaw(info, data); - // Check if it's an authentication challenge - if (response && response.message && response.message.statusCode === HttpCodes.Unauthorized) { - let authenticationHandler; - for (let i = 0; i < this.handlers.length; i++) { - if (this.handlers[i].canHandleAuthentication(response)) { - authenticationHandler = this.handlers[i]; - break; - } - } - if (authenticationHandler) { - return authenticationHandler.handleAuthentication(this, info, data); - } - else { - // We have received an unauthorized response but have no handlers to handle it. - // Let the response return to the caller. - return response; - } - } - let redirectsRemaining = this._maxRedirects; - while (HttpRedirectCodes.indexOf(response.message.statusCode) != -1 - && this._allowRedirects - && redirectsRemaining > 0) { - const redirectUrl = response.message.headers["location"]; - if (!redirectUrl) { - // if there's no location to redirect to, we won't - break; - } - // we need to finish reading the response before reassigning response - // which will leak the open socket. - yield response.readBody(); - // let's make the request with the new redirectUrl - info = this._prepareRequest(verb, redirectUrl, headers); - response = yield this.requestRaw(info, data); - redirectsRemaining--; - } - if (HttpResponseRetryCodes.indexOf(response.message.statusCode) == -1) { - // If not a retry code, return immediately instead of retrying - return response; - } - numTries += 1; - if (numTries < maxTries) { - yield response.readBody(); - yield this._performExponentialBackoff(numTries); - } - } - return response; - }); - } - /** - * Needs to be called if keepAlive is set to true in request options. - */ - dispose() { - if (this._agent) { - this._agent.destroy(); - } - this._disposed = true; - } - /** - * Raw request. - * @param info - * @param data - */ - requestRaw(info, data) { - return new Promise((resolve, reject) => { - let callbackForResult = function (err, res) { - if (err) { - reject(err); - } - resolve(res); - }; - this.requestRawWithCallback(info, data, callbackForResult); - }); - } - /** - * Raw request with callback. - * @param info - * @param data - * @param onResult - */ - requestRawWithCallback(info, data, onResult) { - let socket; - let isDataString = typeof (data) === 'string'; - if (typeof (data) === 'string') { - info.options.headers["Content-Length"] = Buffer.byteLength(data, 'utf8'); - } - let callbackCalled = false; - let handleResult = (err, res) => { - if (!callbackCalled) { - callbackCalled = true; - onResult(err, res); - } - }; - let req = info.httpModule.request(info.options, (msg) => { - let res = new HttpClientResponse(msg); - handleResult(null, res); - }); - req.on('socket', (sock) => { - socket = sock; - }); - // If we ever get disconnected, we want the socket to timeout eventually - req.setTimeout(this._socketTimeout || 3 * 60000, () => { - if (socket) { - socket.end(); - } - handleResult(new Error('Request timeout: ' + info.options.path), null); - }); - req.on('error', function (err) { - // err has statusCode property - // res should have headers - handleResult(err, null); - }); - if (data && typeof (data) === 'string') { - req.write(data, 'utf8'); - } - if (data && typeof (data) !== 'string') { - data.on('close', function () { - req.end(); - }); - data.pipe(req); - } - else { - req.end(); - } - } - _prepareRequest(method, requestUrl, headers) { - const info = {}; - info.parsedUrl = url.parse(requestUrl); - const usingSsl = info.parsedUrl.protocol === 'https:'; - info.httpModule = usingSsl ? https : http; - const defaultPort = usingSsl ? 443 : 80; - info.options = {}; - info.options.host = info.parsedUrl.hostname; - info.options.port = info.parsedUrl.port ? parseInt(info.parsedUrl.port) : defaultPort; - info.options.path = (info.parsedUrl.pathname || '') + (info.parsedUrl.search || ''); - info.options.method = method; - info.options.headers = this._mergeHeaders(headers); - info.options.headers["user-agent"] = this.userAgent; - info.options.agent = this._getAgent(requestUrl); - // gives handlers an opportunity to participate - if (this.handlers && !this._isPresigned(requestUrl)) { - this.handlers.forEach((handler) => { - handler.prepareRequest(info.options); - }); - } - return info; - } - _isPresigned(requestUrl) { - if (this.requestOptions && this.requestOptions.presignedUrlPatterns) { - const patterns = this.requestOptions.presignedUrlPatterns; - for (let i = 0; i < patterns.length; i++) { - if (requestUrl.match(patterns[i])) { - return true; - } - } - } - return false; - } - _mergeHeaders(headers) { - const lowercaseKeys = obj => Object.keys(obj).reduce((c, k) => (c[k.toLowerCase()] = obj[k], c), {}); - if (this.requestOptions && this.requestOptions.headers) { - return Object.assign({}, lowercaseKeys(this.requestOptions.headers), lowercaseKeys(headers)); - } - return lowercaseKeys(headers || {}); - } - _getAgent(requestUrl) { - let agent; - let proxy = this._getProxy(requestUrl); - let useProxy = proxy.proxyUrl && proxy.proxyUrl.hostname && !this._isBypassProxy(requestUrl); - if (this._keepAlive && useProxy) { - agent = this._proxyAgent; - } - if (this._keepAlive && !useProxy) { - agent = this._agent; - } - // if agent is already assigned use that agent. - if (!!agent) { - return agent; - } - let parsedUrl = url.parse(requestUrl); - const usingSsl = parsedUrl.protocol === 'https:'; - let maxSockets = 100; - if (!!this.requestOptions) { - maxSockets = this.requestOptions.maxSockets || http.globalAgent.maxSockets; - } - if (useProxy) { - // If using proxy, need tunnel - if (!tunnel) { - tunnel = __webpack_require__(212); - } - const agentOptions = { - maxSockets: maxSockets, - keepAlive: this._keepAlive, - proxy: { - proxyAuth: proxy.proxyAuth, - host: proxy.proxyUrl.hostname, - port: proxy.proxyUrl.port - }, - }; - let tunnelAgent; - const overHttps = proxy.proxyUrl.protocol === 'https:'; - if (usingSsl) { - tunnelAgent = overHttps ? tunnel.httpsOverHttps : tunnel.httpsOverHttp; - } - else { - tunnelAgent = overHttps ? tunnel.httpOverHttps : tunnel.httpOverHttp; - } - agent = tunnelAgent(agentOptions); - this._proxyAgent = agent; - } - // if reusing agent across request and tunneling agent isn't assigned create a new agent - if (this._keepAlive && !agent) { - const options = { keepAlive: this._keepAlive, maxSockets: maxSockets }; - agent = usingSsl ? new https.Agent(options) : new http.Agent(options); - this._agent = agent; - } - // if not using private agent and tunnel agent isn't setup then use global agent - if (!agent) { - agent = usingSsl ? https.globalAgent : http.globalAgent; - } - if (usingSsl && this._ignoreSslError) { - // we don't want to set NODE_TLS_REJECT_UNAUTHORIZED=0 since that will affect request for entire process - // http.RequestOptions doesn't expose a way to modify RequestOptions.agent.options - // we have to cast it to any and change it directly - agent.options = Object.assign(agent.options || {}, { rejectUnauthorized: false }); - } - if (usingSsl && this._certConfig) { - agent.options = Object.assign(agent.options || {}, { ca: this._ca, cert: this._cert, key: this._key, passphrase: this._certConfig.passphrase }); - } - return agent; - } - _getProxy(requestUrl) { - const parsedUrl = url.parse(requestUrl); - let usingSsl = parsedUrl.protocol === 'https:'; - let proxyConfig = this._httpProxy; - // fallback to http_proxy and https_proxy env - let https_proxy = process.env[EnvironmentVariables.HTTPS_PROXY]; - let http_proxy = process.env[EnvironmentVariables.HTTP_PROXY]; - if (!proxyConfig) { - if (https_proxy && usingSsl) { - proxyConfig = { - proxyUrl: https_proxy - }; - } - else if (http_proxy) { - proxyConfig = { - proxyUrl: http_proxy - }; - } - } - let proxyUrl; - let proxyAuth; - if (proxyConfig) { - if (proxyConfig.proxyUrl.length > 0) { - proxyUrl = url.parse(proxyConfig.proxyUrl); - } - if (proxyConfig.proxyUsername || proxyConfig.proxyPassword) { - proxyAuth = proxyConfig.proxyUsername + ":" + proxyConfig.proxyPassword; - } - } - return { proxyUrl: proxyUrl, proxyAuth: proxyAuth }; - } - _isBypassProxy(requestUrl) { - if (!this._httpProxyBypassHosts) { - return false; - } - let bypass = false; - this._httpProxyBypassHosts.forEach(bypassHost => { - if (bypassHost.test(requestUrl)) { - bypass = true; - } - }); - return bypass; - } - _performExponentialBackoff(retryNumber) { - retryNumber = Math.min(ExponentialBackoffCeiling, retryNumber); - const ms = ExponentialBackoffTimeSlice * Math.pow(2, retryNumber); - return new Promise(resolve => setTimeout(() => resolve(), ms)); - } -} -exports.HttpClient = HttpClient; - - -/***/ }), - -/***/ 571: -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -var ERROR_MSGS = __webpack_require__(516); -function getServiceIdentifierAsString(serviceIdentifier) { - if (typeof serviceIdentifier === "function") { - var _serviceIdentifier = serviceIdentifier; - return _serviceIdentifier.name; - } - else if (typeof serviceIdentifier === "symbol") { - return serviceIdentifier.toString(); - } - else { - var _serviceIdentifier = serviceIdentifier; - return _serviceIdentifier; - } -} -exports.getServiceIdentifierAsString = getServiceIdentifierAsString; -function listRegisteredBindingsForServiceIdentifier(container, serviceIdentifier, getBindings) { - var registeredBindingsList = ""; - var registeredBindings = getBindings(container, serviceIdentifier); - if (registeredBindings.length !== 0) { - registeredBindingsList = "\nRegistered bindings:"; - registeredBindings.forEach(function (binding) { - var name = "Object"; - if (binding.implementationType !== null) { - name = getFunctionName(binding.implementationType); - } - registeredBindingsList = registeredBindingsList + "\n " + name; - if (binding.constraint.metaData) { - registeredBindingsList = registeredBindingsList + " - " + binding.constraint.metaData; - } - }); - } - return registeredBindingsList; -} -exports.listRegisteredBindingsForServiceIdentifier = listRegisteredBindingsForServiceIdentifier; -function alreadyDependencyChain(request, serviceIdentifier) { - if (request.parentRequest === null) { - return false; - } - else if (request.parentRequest.serviceIdentifier === serviceIdentifier) { - return true; - } - else { - return alreadyDependencyChain(request.parentRequest, serviceIdentifier); - } -} -function dependencyChainToString(request) { - function _createStringArr(req, result) { - if (result === void 0) { result = []; } - var serviceIdentifier = getServiceIdentifierAsString(req.serviceIdentifier); - result.push(serviceIdentifier); - if (req.parentRequest !== null) { - return _createStringArr(req.parentRequest, result); - } - return result; - } - var stringArr = _createStringArr(request); - return stringArr.reverse().join(" --> "); -} -function circularDependencyToException(request) { - request.childRequests.forEach(function (childRequest) { - if (alreadyDependencyChain(childRequest, childRequest.serviceIdentifier)) { - var services = dependencyChainToString(childRequest); - throw new Error(ERROR_MSGS.CIRCULAR_DEPENDENCY + " " + services); - } - else { - circularDependencyToException(childRequest); - } - }); -} -exports.circularDependencyToException = circularDependencyToException; -function listMetadataForTarget(serviceIdentifierString, target) { - if (target.isTagged() || target.isNamed()) { - var m_1 = ""; - var namedTag = target.getNamedTag(); - var otherTags = target.getCustomTags(); - if (namedTag !== null) { - m_1 += namedTag.toString() + "\n"; - } - if (otherTags !== null) { - otherTags.forEach(function (tag) { - m_1 += tag.toString() + "\n"; - }); - } - return " " + serviceIdentifierString + "\n " + serviceIdentifierString + " - " + m_1; - } - else { - return " " + serviceIdentifierString; - } -} -exports.listMetadataForTarget = listMetadataForTarget; -function getFunctionName(v) { - if (v.name) { - return v.name; - } - else { - var name_1 = v.toString(); - var match = name_1.match(/^function\s*([^\s(]+)/); - return match ? match[1] : "Anonymous function: " + name_1; - } -} -exports.getFunctionName = getFunctionName; - - -/***/ }), - -/***/ 599: -/***/ (function(__unusedmodule, exports, __webpack_require__) { - -"use strict"; - -Object.defineProperty(exports, "__esModule", { value: true }); -var METADATA_KEY = __webpack_require__(677); -var metadata_1 = __webpack_require__(173); -var traverseAncerstors = function (request, constraint) { - var parent = request.parentRequest; - if (parent !== null) { - return constraint(parent) ? true : traverseAncerstors(parent, constraint); - } - else { - return false; - } -}; -exports.traverseAncerstors = traverseAncerstors; -var taggedConstraint = function (key) { return function (value) { - var constraint = function (request) { - return request !== null && request.target !== null && request.target.matchesTag(key)(value); - }; - constraint.metaData = new metadata_1.Metadata(key, value); - return constraint; -}; }; -exports.taggedConstraint = taggedConstraint; -var namedConstraint = taggedConstraint(METADATA_KEY.NAMED_TAG); -exports.namedConstraint = namedConstraint; -var typeConstraint = function (type) { return function (request) { - var binding = null; - if (request !== null) { - binding = request.bindings[0]; - if (typeof type === "string") { - var serviceIdentifier = binding.serviceIdentifier; - return serviceIdentifier === type; - } - else { - var constructor = request.bindings[0].implementationType; - return type === constructor; - } - } - return false; -}; }; -exports.typeConstraint = typeConstraint; - - -/***/ }), - -/***/ 605: -/***/ (function(module) { - -module.exports = require("http"); - -/***/ }), - -/***/ 614: -/***/ (function(module) { - -module.exports = require("events"); - -/***/ }), - -/***/ 622: -/***/ (function(module) { - -module.exports = require("path"); - -/***/ }), - -/***/ 631: -/***/ (function(module) { - -module.exports = require("net"); - -/***/ }), - -/***/ 637: -/***/ (function(module) { - -// vim:ts=4:sts=4:sw=4: -/*! - * - * Copyright 2009-2017 Kris Kowal under the terms of the MIT - * license found at https://github.com/kriskowal/q/blob/v1/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. - * - */ - -(function (definition) { - "use strict"; - - // This file will function properly as a