UNPKG

truffle

Version:

Truffle - Simple development framework for Ethereum

1,571 lines (1,268 loc) 161 kB
#!/usr/bin/env node exports.id = 4968; exports.ids = [4968]; exports.modules = { /***/ 23204: /***/ ((module) => { "use strict"; const preserveCamelCase = string => { let isLastCharLower = false; let isLastCharUpper = false; let isLastLastCharUpper = false; for (let i = 0; i < string.length; i++) { const character = string[i]; if (isLastCharLower && /[a-zA-Z]/.test(character) && character.toUpperCase() === character) { string = string.slice(0, i) + '-' + string.slice(i); isLastCharLower = false; isLastLastCharUpper = isLastCharUpper; isLastCharUpper = true; i++; } else if (isLastCharUpper && isLastLastCharUpper && /[a-zA-Z]/.test(character) && character.toLowerCase() === character) { string = string.slice(0, i - 1) + '-' + string.slice(i - 1); isLastLastCharUpper = isLastCharUpper; isLastCharUpper = false; isLastCharLower = true; } else { isLastCharLower = character.toLowerCase() === character && character.toUpperCase() !== character; isLastLastCharUpper = isLastCharUpper; isLastCharUpper = character.toUpperCase() === character && character.toLowerCase() !== character; } } return string; }; const camelCase = (input, options) => { if (!(typeof input === 'string' || Array.isArray(input))) { throw new TypeError('Expected the input to be `string | string[]`'); } options = Object.assign({ pascalCase: false }, options); const postProcess = x => options.pascalCase ? x.charAt(0).toUpperCase() + x.slice(1) : x; if (Array.isArray(input)) { input = input.map(x => x.trim()) .filter(x => x.length) .join('-'); } else { input = input.trim(); } if (input.length === 0) { return ''; } if (input.length === 1) { return options.pascalCase ? input.toUpperCase() : input.toLowerCase(); } const hasUpperCase = input !== input.toLowerCase(); if (hasUpperCase) { input = preserveCamelCase(input); } input = input .replace(/^[_.\- ]+/, '') .toLowerCase() .replace(/[_.\- ]+(\w|$)/g, (_, p1) => p1.toUpperCase()) .replace(/\d+(\w|$)/g, m => m.toUpperCase()); return postProcess(input); }; module.exports = camelCase; // TODO: Remove this for the next major release module.exports["default"] = camelCase; /***/ }), /***/ 2466: /***/ ((module) => { "use strict"; module.exports = function (str, sep) { if (typeof str !== 'string') { throw new TypeError('Expected a string'); } sep = typeof sep === 'undefined' ? '_' : sep; return str .replace(/([a-z\d])([A-Z])/g, '$1' + sep + '$2') .replace(/([A-Z]+)([A-Z][a-z\d]+)/g, '$1' + sep + '$2') .toLowerCase(); }; /***/ }), /***/ 98791: /***/ ((module) => { "use strict"; // Call this function in a another function to find out the file from // which that function was called from. (Inspects the v8 stack trace) // // Inspired by http://stackoverflow.com/questions/13227489 module.exports = function getCallerFile(position) { if (position === void 0) { position = 2; } if (position >= Error.stackTraceLimit) { throw new TypeError('getCallerFile(position) requires position be less then Error.stackTraceLimit but position was: `' + position + '` and Error.stackTraceLimit was: `' + Error.stackTraceLimit + '`'); } var oldPrepareStackTrace = Error.prepareStackTrace; Error.prepareStackTrace = function (_, stack) { return stack; }; var stack = new Error().stack; Error.prepareStackTrace = oldPrepareStackTrace; if (stack !== null && typeof stack === 'object') { // stack[0] holds this file // stack[1] holds where this function was called // stack[2] holds the file we're interested in return stack[position] ? stack[position].getFileName() : undefined; } }; //# sourceMappingURL=index.js.map /***/ }), /***/ 27365: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; var fs = __webpack_require__(57147), join = (__webpack_require__(71017).join), resolve = (__webpack_require__(71017).resolve), dirname = (__webpack_require__(71017).dirname), defaultOptions = { extensions: ['js', 'json', 'coffee'], recurse: true, rename: function (name) { return name; }, visit: function (obj) { return obj; } }; function checkFileInclusion(path, filename, options) { return ( // verify file has valid extension (new RegExp('\\.(' + options.extensions.join('|') + ')$', 'i').test(filename)) && // if options.include is a RegExp, evaluate it and make sure the path passes !(options.include && options.include instanceof RegExp && !options.include.test(path)) && // if options.include is a function, evaluate it and make sure the path passes !(options.include && typeof options.include === 'function' && !options.include(path, filename)) && // if options.exclude is a RegExp, evaluate it and make sure the path doesn't pass !(options.exclude && options.exclude instanceof RegExp && options.exclude.test(path)) && // if options.exclude is a function, evaluate it and make sure the path doesn't pass !(options.exclude && typeof options.exclude === 'function' && options.exclude(path, filename)) ); } function requireDirectory(m, path, options) { var retval = {}; // path is optional if (path && !options && typeof path !== 'string') { options = path; path = null; } // default options options = options || {}; for (var prop in defaultOptions) { if (typeof options[prop] === 'undefined') { options[prop] = defaultOptions[prop]; } } // if no path was passed in, assume the equivelant of __dirname from caller // otherwise, resolve path relative to the equivalent of __dirname path = !path ? dirname(m.filename) : resolve(dirname(m.filename), path); // get the path of each file in specified directory, append to current tree node, recurse fs.readdirSync(path).forEach(function (filename) { var joined = join(path, filename), files, key, obj; if (fs.statSync(joined).isDirectory() && options.recurse) { // this node is a directory; recurse files = requireDirectory(m, joined, options); // exclude empty directories if (Object.keys(files).length) { retval[options.rename(filename, joined, filename)] = files; } } else { if (joined !== m.filename && checkFileInclusion(joined, filename, options)) { // hash node key shouldn't include file extension key = filename.substring(0, filename.lastIndexOf('.')); obj = m.require(joined); retval[options.rename(key, joined, filename)] = options.visit(obj, joined, filename) || obj; } } }); return retval; } module.exports = requireDirectory; module.exports.defaults = defaultOptions; /***/ }), /***/ 92437: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { module.exports = function (_require) { _require = _require || __webpack_require__(27073) var main = _require.main if (main && isIISNode(main)) return handleIISNode(main) else return main ? main.filename : process.cwd() } function isIISNode (main) { return /\\iisnode\\/.test(main.filename) } function handleIISNode (main) { if (!main.children.length) { return main.filename } else { return main.children[0].filename } } /***/ }), /***/ 11681: /***/ ((module) => { module.exports = function (blocking) { [process.stdout, process.stderr].forEach(function (stream) { if (stream._handle && stream.isTTY && typeof stream._handle.setBlocking === 'function') { stream._handle.setBlocking(blocking) } }) } /***/ }), /***/ 94008: /***/ ((module) => { "use strict"; module.exports = options => { options = Object.assign({ onlyFirst: false }, options); const pattern = [ '[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:[a-zA-Z\\d]*(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)', '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))' ].join('|'); return new RegExp(pattern, options.onlyFirst ? undefined : 'g'); }; /***/ }), /***/ 12213: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var stringWidth = __webpack_require__(59210) var stripAnsi = __webpack_require__(71442) var wrap = __webpack_require__(50257) var align = { right: alignRight, center: alignCenter } var top = 0 var right = 1 var bottom = 2 var left = 3 function UI (opts) { this.width = opts.width this.wrap = opts.wrap this.rows = [] } UI.prototype.span = function () { var cols = this.div.apply(this, arguments) cols.span = true } UI.prototype.resetOutput = function () { this.rows = [] } UI.prototype.div = function () { if (arguments.length === 0) this.div('') if (this.wrap && this._shouldApplyLayoutDSL.apply(this, arguments)) { return this._applyLayoutDSL(arguments[0]) } var cols = [] for (var i = 0, arg; (arg = arguments[i]) !== undefined; i++) { if (typeof arg === 'string') cols.push(this._colFromString(arg)) else cols.push(arg) } this.rows.push(cols) return cols } UI.prototype._shouldApplyLayoutDSL = function () { return arguments.length === 1 && typeof arguments[0] === 'string' && /[\t\n]/.test(arguments[0]) } UI.prototype._applyLayoutDSL = function (str) { var _this = this var rows = str.split('\n') var leftColumnWidth = 0 // simple heuristic for layout, make sure the // second column lines up along the left-hand. // don't allow the first column to take up more // than 50% of the screen. rows.forEach(function (row) { var columns = row.split('\t') if (columns.length > 1 && stringWidth(columns[0]) > leftColumnWidth) { leftColumnWidth = Math.min( Math.floor(_this.width * 0.5), stringWidth(columns[0]) ) } }) // generate a table: // replacing ' ' with padding calculations. // using the algorithmically generated width. rows.forEach(function (row) { var columns = row.split('\t') _this.div.apply(_this, columns.map(function (r, i) { return { text: r.trim(), padding: _this._measurePadding(r), width: (i === 0 && columns.length > 1) ? leftColumnWidth : undefined } })) }) return this.rows[this.rows.length - 1] } UI.prototype._colFromString = function (str) { return { text: str, padding: this._measurePadding(str) } } UI.prototype._measurePadding = function (str) { // measure padding without ansi escape codes var noAnsi = stripAnsi(str) return [0, noAnsi.match(/\s*$/)[0].length, 0, noAnsi.match(/^\s*/)[0].length] } UI.prototype.toString = function () { var _this = this var lines = [] _this.rows.forEach(function (row, i) { _this.rowToString(row, lines) }) // don't display any lines with the // hidden flag set. lines = lines.filter(function (line) { return !line.hidden }) return lines.map(function (line) { return line.text }).join('\n') } UI.prototype.rowToString = function (row, lines) { var _this = this var padding var rrows = this._rasterize(row) var str = '' var ts var width var wrapWidth rrows.forEach(function (rrow, r) { str = '' rrow.forEach(function (col, c) { ts = '' // temporary string used during alignment/padding. width = row[c].width // the width with padding. wrapWidth = _this._negatePadding(row[c]) // the width without padding. ts += col for (var i = 0; i < wrapWidth - stringWidth(col); i++) { ts += ' ' } // align the string within its column. if (row[c].align && row[c].align !== 'left' && _this.wrap) { ts = align[row[c].align](ts, wrapWidth) if (stringWidth(ts) < wrapWidth) ts += new Array(width - stringWidth(ts)).join(' ') } // apply border and padding to string. padding = row[c].padding || [0, 0, 0, 0] if (padding[left]) str += new Array(padding[left] + 1).join(' ') str += addBorder(row[c], ts, '| ') str += ts str += addBorder(row[c], ts, ' |') if (padding[right]) str += new Array(padding[right] + 1).join(' ') // if prior row is span, try to render the // current row on the prior line. if (r === 0 && lines.length > 0) { str = _this._renderInline(str, lines[lines.length - 1]) } }) // remove trailing whitespace. lines.push({ text: str.replace(/ +$/, ''), span: row.span }) }) return lines } function addBorder (col, ts, style) { if (col.border) { if (/[.']-+[.']/.test(ts)) return '' else if (ts.trim().length) return style else return ' ' } return '' } // if the full 'source' can render in // the target line, do so. UI.prototype._renderInline = function (source, previousLine) { var leadingWhitespace = source.match(/^ */)[0].length var target = previousLine.text var targetTextWidth = stringWidth(target.trimRight()) if (!previousLine.span) return source // if we're not applying wrapping logic, // just always append to the span. if (!this.wrap) { previousLine.hidden = true return target + source } if (leadingWhitespace < targetTextWidth) return source previousLine.hidden = true return target.trimRight() + new Array(leadingWhitespace - targetTextWidth + 1).join(' ') + source.trimLeft() } UI.prototype._rasterize = function (row) { var _this = this var i var rrow var rrows = [] var widths = this._columnWidths(row) var wrapped // word wrap all columns, and create // a data-structure that is easy to rasterize. row.forEach(function (col, c) { // leave room for left and right padding. col.width = widths[c] if (_this.wrap) wrapped = wrap(col.text, _this._negatePadding(col), { hard: true }).split('\n') else wrapped = col.text.split('\n') if (col.border) { wrapped.unshift('.' + new Array(_this._negatePadding(col) + 3).join('-') + '.') wrapped.push("'" + new Array(_this._negatePadding(col) + 3).join('-') + "'") } // add top and bottom padding. if (col.padding) { for (i = 0; i < (col.padding[top] || 0); i++) wrapped.unshift('') for (i = 0; i < (col.padding[bottom] || 0); i++) wrapped.push('') } wrapped.forEach(function (str, r) { if (!rrows[r]) rrows.push([]) rrow = rrows[r] for (var i = 0; i < c; i++) { if (rrow[i] === undefined) rrow.push('') } rrow.push(str) }) }) return rrows } UI.prototype._negatePadding = function (col) { var wrapWidth = col.width if (col.padding) wrapWidth -= (col.padding[left] || 0) + (col.padding[right] || 0) if (col.border) wrapWidth -= 4 return wrapWidth } UI.prototype._columnWidths = function (row) { var _this = this var widths = [] var unset = row.length var unsetWidth var remainingWidth = this.width // column widths can be set in config. row.forEach(function (col, i) { if (col.width) { unset-- widths[i] = col.width remainingWidth -= col.width } else { widths[i] = undefined } }) // any unset widths should be calculated. if (unset) unsetWidth = Math.floor(remainingWidth / unset) widths.forEach(function (w, i) { if (!_this.wrap) widths[i] = row[i].width || stringWidth(row[i].text) else if (w === undefined) widths[i] = Math.max(unsetWidth, _minWidth(row[i])) }) return widths } // calculates the minimum width of // a column, based on padding preferences. function _minWidth (col) { var padding = col.padding || [] var minWidth = 1 + (padding[left] || 0) + (padding[right] || 0) if (col.border) minWidth += 4 return minWidth } function getWindowWidth () { if (typeof process === 'object' && process.stdout && process.stdout.columns) return process.stdout.columns } function alignRight (str, width) { str = str.trim() var padding = '' var strWidth = stringWidth(str) if (strWidth < width) { padding = new Array(width - strWidth + 1).join(' ') } return padding + str } function alignCenter (str, width) { str = str.trim() var padding = '' var strWidth = stringWidth(str.trim()) if (strWidth < width) { padding = new Array(parseInt((width - strWidth) / 2, 10) + 1).join(' ') } return padding + str } module.exports = function (opts) { opts = opts || {} return new UI({ width: (opts || {}).width || getWindowWidth() || 80, wrap: typeof opts.wrap === 'boolean' ? opts.wrap : true }) } /***/ }), /***/ 71442: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; const ansiRegex = __webpack_require__(94008); const stripAnsi = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string; module.exports = stripAnsi; module.exports["default"] = stripAnsi; /***/ }), /***/ 50303: /***/ ((module) => { "use strict"; module.exports = function () { // https://mths.be/emoji return /\uD83C\uDFF4(?:\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74)\uDB40\uDC7F|\u200D\u2620\uFE0F)|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC68(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDB0-\uDDB3])|(?:\uD83C[\uDFFB-\uDFFF])\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDB0-\uDDB3]))|\uD83D\uDC69\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDB0-\uDDB3])|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2695\u2696\u2708]|\uD83D\uDC68(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|(?:(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)\uFE0F|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDD6-\uDDDD])(?:(?:\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\u200D[\u2640\u2642])|\uD83D\uDC69\u200D[\u2695\u2696\u2708])\uFE0F|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC68(?:\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])\u200D(?:\uD83C[\uDF3E\uDF73\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDB0-\uDDB3])|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC69(?:\uD83C[\uDFFB-\uDFFF])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|[#\*0-9]\uFE0F\u20E3|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270A-\u270D]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC70\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDCAA\uDD74\uDD7A\uDD90\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD36\uDDB5\uDDB6\uDDD1-\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDEEB\uDEEC\uDEF4-\uDEF9]|\uD83E[\uDD10-\uDD3A\uDD3C-\uDD3E\uDD40-\uDD45\uDD47-\uDD70\uDD73-\uDD76\uDD7A\uDD7C-\uDDA2\uDDB0-\uDDB9\uDDC0-\uDDC2\uDDD0-\uDDFF])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEF9]|\uD83E[\uDD10-\uDD3A\uDD3C-\uDD3E\uDD40-\uDD45\uDD47-\uDD70\uDD73-\uDD76\uDD7A\uDD7C-\uDDA2\uDDB0-\uDDB9\uDDC0-\uDDC2\uDDD0-\uDDFF])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC69\uDC6E\uDC70-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD18-\uDD1C\uDD1E\uDD1F\uDD26\uDD30-\uDD39\uDD3D\uDD3E\uDDB5\uDDB6\uDDB8\uDDB9\uDDD1-\uDDDD])/g; }; /***/ }), /***/ 24159: /***/ ((module) => { "use strict"; /* eslint-disable yoda */ module.exports = x => { if (Number.isNaN(x)) { return false; } // code points are derived from: // http://www.unix.org/Public/UNIDATA/EastAsianWidth.txt if ( x >= 0x1100 && ( x <= 0x115f || // Hangul Jamo x === 0x2329 || // LEFT-POINTING ANGLE BRACKET x === 0x232a || // RIGHT-POINTING ANGLE BRACKET // CJK Radicals Supplement .. Enclosed CJK Letters and Months (0x2e80 <= x && x <= 0x3247 && x !== 0x303f) || // Enclosed CJK Letters and Months .. CJK Unified Ideographs Extension A (0x3250 <= x && x <= 0x4dbf) || // CJK Unified Ideographs .. Yi Radicals (0x4e00 <= x && x <= 0xa4c6) || // Hangul Jamo Extended-A (0xa960 <= x && x <= 0xa97c) || // Hangul Syllables (0xac00 <= x && x <= 0xd7a3) || // CJK Compatibility Ideographs (0xf900 <= x && x <= 0xfaff) || // Vertical Forms (0xfe10 <= x && x <= 0xfe19) || // CJK Compatibility Forms .. Small Form Variants (0xfe30 <= x && x <= 0xfe6b) || // Halfwidth and Fullwidth Forms (0xff01 <= x && x <= 0xff60) || (0xffe0 <= x && x <= 0xffe6) || // Kana Supplement (0x1b000 <= x && x <= 0x1b001) || // Enclosed Ideographic Supplement (0x1f200 <= x && x <= 0x1f251) || // CJK Unified Ideographs Extension B .. Tertiary Ideographic Plane (0x20000 <= x && x <= 0x3fffd) ) ) { return true; } return false; }; /***/ }), /***/ 59210: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; const stripAnsi = __webpack_require__(16914); const isFullwidthCodePoint = __webpack_require__(24159); const emojiRegex = __webpack_require__(50303)(); module.exports = input => { input = input.replace(emojiRegex, ' '); if (typeof input !== 'string' || input.length === 0) { return 0; } input = stripAnsi(input); let width = 0; for (let i = 0; i < input.length; i++) { const code = input.codePointAt(i); // Ignore control characters if (code <= 0x1F || (code >= 0x7F && code <= 0x9F)) { continue; } // Ignore combining characters if (code >= 0x300 && code <= 0x36F) { continue; } // Surrogates if (code > 0xFFFF) { i++; } width += isFullwidthCodePoint(code) ? 2 : 1; } return width; }; /***/ }), /***/ 16914: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; const ansiRegex = __webpack_require__(94008); const stripAnsi = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string; module.exports = stripAnsi; module.exports["default"] = stripAnsi; /***/ }), /***/ 50257: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; const stringWidth = __webpack_require__(59210); const stripAnsi = __webpack_require__(32090); const ansiStyles = __webpack_require__(26434); const ESCAPES = new Set([ '\u001B', '\u009B' ]); const END_CODE = 39; const wrapAnsi = code => `${ESCAPES.values().next().value}[${code}m`; // Calculate the length of words split on ' ', ignoring // the extra characters added by ansi escape codes const wordLengths = string => string.split(' ').map(character => stringWidth(character)); // Wrap a long word across multiple rows // Ansi escape codes do not count towards length const wrapWord = (rows, word, columns) => { const characters = [...word]; let insideEscape = false; let visible = stringWidth(stripAnsi(rows[rows.length - 1])); for (const [index, character] of characters.entries()) { const characterLength = stringWidth(character); if (visible + characterLength <= columns) { rows[rows.length - 1] += character; } else { rows.push(character); visible = 0; } if (ESCAPES.has(character)) { insideEscape = true; } else if (insideEscape && character === 'm') { insideEscape = false; continue; } if (insideEscape) { continue; } visible += characterLength; if (visible === columns && index < characters.length - 1) { rows.push(''); visible = 0; } } // It's possible that the last row we copy over is only // ansi escape characters, handle this edge-case if (!visible && rows[rows.length - 1].length > 0 && rows.length > 1) { rows[rows.length - 2] += rows.pop(); } }; // Trims spaces from a string ignoring invisible sequences const stringVisibleTrimSpacesRight = str => { const words = str.split(' '); let last = words.length; while (last > 0) { if (stringWidth(words[last - 1]) > 0) { break; } last--; } if (last === words.length) { return str; } return words.slice(0, last).join(' ') + words.slice(last).join(''); }; // The wrap-ansi module can be invoked // in either 'hard' or 'soft' wrap mode // // 'hard' will never allow a string to take up more // than columns characters // // 'soft' allows long words to expand past the column length const exec = (string, columns, options = {}) => { if (options.trim !== false && string.trim() === '') { return ''; } let pre = ''; let ret = ''; let escapeCode; const lengths = wordLengths(string); let rows = ['']; for (const [index, word] of string.split(' ').entries()) { if (options.trim !== false) { rows[rows.length - 1] = rows[rows.length - 1].trimLeft(); } let rowLength = stringWidth(rows[rows.length - 1]); if (index !== 0) { if (rowLength >= columns && (options.wordWrap === false || options.trim === false)) { // If we start with a new word but the current row length equals the length of the columns, add a new row rows.push(''); rowLength = 0; } if (rowLength > 0 || options.trim === false) { rows[rows.length - 1] += ' '; rowLength++; } } // In 'hard' wrap mode, the length of a line is // never allowed to extend past 'columns' if (options.hard && lengths[index] > columns) { const remainingColumns = (columns - rowLength); const breaksStartingThisLine = 1 + Math.floor((lengths[index] - remainingColumns - 1) / columns); const breaksStartingNextLine = Math.floor((lengths[index] - 1) / columns); if (breaksStartingNextLine < breaksStartingThisLine) { rows.push(''); } wrapWord(rows, word, columns); continue; } if (rowLength + lengths[index] > columns && rowLength > 0 && lengths[index] > 0) { if (options.wordWrap === false && rowLength < columns) { wrapWord(rows, word, columns); continue; } rows.push(''); } if (rowLength + lengths[index] > columns && options.wordWrap === false) { wrapWord(rows, word, columns); continue; } rows[rows.length - 1] += word; } if (options.trim !== false) { rows = rows.map(stringVisibleTrimSpacesRight); } pre = rows.join('\n'); for (const [index, character] of [...pre].entries()) { ret += character; if (ESCAPES.has(character)) { const code = parseFloat(/\d[^m]*/.exec(pre.slice(index, index + 4))); escapeCode = code === END_CODE ? null : code; } const code = ansiStyles.codes.get(Number(escapeCode)); if (escapeCode && code) { if (pre[index + 1] === '\n') { ret += wrapAnsi(code); } else if (character === '\n') { ret += wrapAnsi(escapeCode); } } } return ret; }; // For each newline, invoke the method separately module.exports = (string, columns, options) => { return String(string) .normalize() .split('\n') .map(line => exec(line, columns, options)) .join('\n'); }; /***/ }), /***/ 32090: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { "use strict"; const ansiRegex = __webpack_require__(94008); const stripAnsi = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string; module.exports = stripAnsi; module.exports["default"] = stripAnsi; /***/ }), /***/ 98092: /***/ ((module, __unused_webpack_exports, __webpack_require__) => { var camelCase = __webpack_require__(23204) var decamelize = __webpack_require__(2466) var path = __webpack_require__(71017) var tokenizeArgString = __webpack_require__(56292) var util = __webpack_require__(73837) function parse (args, opts) { if (!opts) opts = {} // allow a string argument to be passed in rather // than an argv array. args = tokenizeArgString(args) // aliases might have transitive relationships, normalize this. var aliases = combineAliases(opts.alias || {}) var configuration = Object.assign({ 'short-option-groups': true, 'camel-case-expansion': true, 'dot-notation': true, 'parse-numbers': true, 'boolean-negation': true, 'negation-prefix': 'no-', 'duplicate-arguments-array': true, 'flatten-duplicate-arrays': true, 'populate--': false, 'combine-arrays': false, 'set-placeholder-key': false, 'halt-at-non-option': false, 'strip-aliased': false, 'strip-dashed': false }, opts.configuration) var defaults = opts.default || {} var configObjects = opts.configObjects || [] var envPrefix = opts.envPrefix var notFlagsOption = configuration['populate--'] var notFlagsArgv = notFlagsOption ? '--' : '_' var newAliases = {} // allow a i18n handler to be passed in, default to a fake one (util.format). var __ = opts.__ || util.format var error = null var flags = { aliases: {}, arrays: {}, bools: {}, strings: {}, numbers: {}, counts: {}, normalize: {}, configs: {}, defaulted: {}, nargs: {}, coercions: {}, keys: [] } var negative = /^-[0-9]+(\.[0-9]+)?/ var negatedBoolean = new RegExp('^--' + configuration['negation-prefix'] + '(.+)') ;[].concat(opts.array).filter(Boolean).forEach(function (opt) { var key = opt.key || opt // assign to flags[bools|strings|numbers] const assignment = Object.keys(opt).map(function (key) { return ({ boolean: 'bools', string: 'strings', number: 'numbers' })[key] }).filter(Boolean).pop() // assign key to be coerced if (assignment) { flags[assignment][key] = true } flags.arrays[key] = true flags.keys.push(key) }) ;[].concat(opts.boolean).filter(Boolean).forEach(function (key) { flags.bools[key] = true flags.keys.push(key) }) ;[].concat(opts.string).filter(Boolean).forEach(function (key) { flags.strings[key] = true flags.keys.push(key) }) ;[].concat(opts.number).filter(Boolean).forEach(function (key) { flags.numbers[key] = true flags.keys.push(key) }) ;[].concat(opts.count).filter(Boolean).forEach(function (key) { flags.counts[key] = true flags.keys.push(key) }) ;[].concat(opts.normalize).filter(Boolean).forEach(function (key) { flags.normalize[key] = true flags.keys.push(key) }) Object.keys(opts.narg || {}).forEach(function (k) { flags.nargs[k] = opts.narg[k] flags.keys.push(k) }) Object.keys(opts.coerce || {}).forEach(function (k) { flags.coercions[k] = opts.coerce[k] flags.keys.push(k) }) if (Array.isArray(opts.config) || typeof opts.config === 'string') { ;[].concat(opts.config).filter(Boolean).forEach(function (key) { flags.configs[key] = true }) } else { Object.keys(opts.config || {}).forEach(function (k) { flags.configs[k] = opts.config[k] }) } // create a lookup table that takes into account all // combinations of aliases: {f: ['foo'], foo: ['f']} extendAliases(opts.key, aliases, opts.default, flags.arrays) // apply default values to all aliases. Object.keys(defaults).forEach(function (key) { (flags.aliases[key] || []).forEach(function (alias) { defaults[alias] = defaults[key] }) }) var argv = { _: [] } Object.keys(flags.bools).forEach(function (key) { if (Object.prototype.hasOwnProperty.call(defaults, key)) { setArg(key, defaults[key]) setDefaulted(key) } }) var notFlags = [] for (var i = 0; i < args.length; i++) { var arg = args[i] var broken var key var letters var m var next var value // -- separated by = if (arg.match(/^--.+=/) || ( !configuration['short-option-groups'] && arg.match(/^-.+=/) )) { // Using [\s\S] instead of . because js doesn't support the // 'dotall' regex modifier. See: // http://stackoverflow.com/a/1068308/13216 m = arg.match(/^--?([^=]+)=([\s\S]*)$/) // nargs format = '--f=monkey washing cat' if (checkAllAliases(m[1], flags.nargs)) { args.splice(i + 1, 0, m[2]) i = eatNargs(i, m[1], args) // arrays format = '--f=a b c' } else if (checkAllAliases(m[1], flags.arrays) && args.length > i + 1) { args.splice(i + 1, 0, m[2]) i = eatArray(i, m[1], args) } else { setArg(m[1], m[2]) } } else if (arg.match(negatedBoolean) && configuration['boolean-negation']) { key = arg.match(negatedBoolean)[1] setArg(key, false) // -- seperated by space. } else if (arg.match(/^--.+/) || ( !configuration['short-option-groups'] && arg.match(/^-[^-]+/) )) { key = arg.match(/^--?(.+)/)[1] // nargs format = '--foo a b c' if (checkAllAliases(key, flags.nargs)) { i = eatNargs(i, key, args) // array format = '--foo a b c' } else if (checkAllAliases(key, flags.arrays) && args.length > i + 1) { i = eatArray(i, key, args) } else { next = flags.nargs[key] === 0 ? undefined : args[i + 1] if (next !== undefined && (!next.match(/^-/) || next.match(negative)) && !checkAllAliases(key, flags.bools) && !checkAllAliases(key, flags.counts)) { setArg(key, next) i++ } else if (/^(true|false)$/.test(next)) { setArg(key, next) i++ } else { setArg(key, defaultValue(key)) } } // dot-notation flag seperated by '='. } else if (arg.match(/^-.\..+=/)) { m = arg.match(/^-([^=]+)=([\s\S]*)$/) setArg(m[1], m[2]) // dot-notation flag seperated by space. } else if (arg.match(/^-.\..+/)) { next = args[i + 1] key = arg.match(/^-(.\..+)/)[1] if (next !== undefined && !next.match(/^-/) && !checkAllAliases(key, flags.bools) && !checkAllAliases(key, flags.counts)) { setArg(key, next) i++ } else { setArg(key, defaultValue(key)) } } else if (arg.match(/^-[^-]+/) && !arg.match(negative)) { letters = arg.slice(1, -1).split('') broken = false for (var j = 0; j < letters.length; j++) { next = arg.slice(j + 2) if (letters[j + 1] && letters[j + 1] === '=') { value = arg.slice(j + 3) key = letters[j] // nargs format = '-f=monkey washing cat' if (checkAllAliases(key, flags.nargs)) { args.splice(i + 1, 0, value) i = eatNargs(i, key, args) // array format = '-f=a b c' } else if (checkAllAliases(key, flags.arrays) && args.length > i + 1) { args.splice(i + 1, 0, value) i = eatArray(i, key, args) } else { setArg(key, value) } broken = true break } if (next === '-') { setArg(letters[j], next) continue } // current letter is an alphabetic character and next value is a number if (/[A-Za-z]/.test(letters[j]) && /^-?\d+(\.\d*)?(e-?\d+)?$/.test(next)) { setArg(letters[j], next) broken = true break } if (letters[j + 1] && letters[j + 1].match(/\W/)) { setArg(letters[j], next) broken = true break } else { setArg(letters[j], defaultValue(letters[j])) } } key = arg.slice(-1)[0] if (!broken && key !== '-') { // nargs format = '-f a b c' if (checkAllAliases(key, flags.nargs)) { i = eatNargs(i, key, args) // array format = '-f a b c' } else if (checkAllAliases(key, flags.arrays) && args.length > i + 1) { i = eatArray(i, key, args) } else { next = args[i + 1] if (next !== undefined && (!/^(-|--)[^-]/.test(next) || next.match(negative)) && !checkAllAliases(key, flags.bools) && !checkAllAliases(key, flags.counts)) { setArg(key, next) i++ } else if (/^(true|false)$/.test(next)) { setArg(key, next) i++ } else { setArg(key, defaultValue(key)) } } } } else if (arg === '--') { notFlags = args.slice(i + 1) break } else if (configuration['halt-at-non-option']) { notFlags = args.slice(i) break } else { argv._.push(maybeCoerceNumber('_', arg)) } } // order of precedence: // 1. command line arg // 2. value from env var // 3. value from config file // 4. value from config objects // 5. configured default value applyEnvVars(argv, true) // special case: check env vars that point to config file applyEnvVars(argv, false) setConfig(argv) setConfigObjects() applyDefaultsAndAliases(argv, flags.aliases, defaults) applyCoercions(argv) if (configuration['set-placeholder-key']) setPlaceholderKeys(argv) // for any counts either not in args or without an explicit default, set to 0 Object.keys(flags.counts).forEach(function (key) { if (!hasKey(argv, key.split('.'))) setArg(key, 0) }) // '--' defaults to undefined. if (notFlagsOption && notFlags.length) argv[notFlagsArgv] = [] notFlags.forEach(function (key) { argv[notFlagsArgv].push(key) }) if (configuration['camel-case-expansion'] && configuration['strip-dashed']) { Object.keys(argv).filter(key => key !== '--' && key.includes('-')).forEach(key => { delete argv[key] }) } if (configuration['strip-aliased']) { // XXX Switch to [].concat(...Object.values(aliases)) once node.js 6 is dropped ;[].concat(...Object.keys(aliases).map(k => aliases[k])).forEach(alias => { if (configuration['camel-case-expansion']) { delete argv[alias.split('.').map(prop => camelCase(prop)).join('.')] } delete argv[alias] }) } // how many arguments should we consume, based // on the nargs option? function eatNargs (i, key, args) { var ii const toEat = checkAllAliases(key, flags.nargs) // nargs will not consume flag arguments, e.g., -abc, --foo, // and terminates when one is observed. var available = 0 for (ii = i + 1; ii < args.length; ii++) { if (!args[ii].match(/^-[^0-9]/)) available++ else break } if (available < toEat) error = Error(__('Not enough arguments following: %s', key)) const consumed = Math.min(available, toEat) for (ii = i + 1; ii < (consumed + i + 1); ii++) { setArg(key, args[ii]) } return (i + consumed) } // if an option is an array, eat all non-hyphenated arguments // following it... YUM! // e.g., --foo apple banana cat becomes ["apple", "banana", "cat"] function eatArray (i, key, args) { var start = i + 1 var argsToSet = [] var multipleArrayFlag = i > 0 for (var ii = i + 1; ii < args.length; ii++) { if (/^-/.test(args[ii]) && !negative.test(args[ii])) { if (ii === start) { setArg(key, defaultForType('array')) } multipleArrayFlag = true break } i = ii argsToSet.push(args[ii]) } if (multipleArrayFlag) { setArg(key, argsToSet.map(function (arg) { return processValue(key, arg) })) } else { argsToSet.forEach(function (arg) { setArg(key, arg) }) } return i } function setArg (key, val) { unsetDefaulted(key) if (/-/.test(key) && configuration['camel-case-expansion']) { var alias = key.split('.').map(function (prop) { return camelCase(prop) }).join('.') addNewAlias(key, alias) } var value = processValue(key, val) var splitKey = key.split('.') setKey(argv, splitKey, value) // handle populating aliases of the full key if (flags.aliases[key] && flags.aliases[key].forEach) { flags.aliases[key].forEach(function (x) { x = x.split('.') setKey(argv, x, value) }) } // handle populating aliases of the first element of the dot-notation key if (splitKey.length > 1 && configuration['dot-notation']) { ;(flags.aliases[splitKey[0]] || []).forEach(function (x) { x = x.split('.') // expand alias with nested objects in key var a = [].concat(splitKey) a.shift() // nuke the old key. x = x.concat(a) setKey(argv, x, value) }) } // Set normalize getter and setter when key is in 'normalize' but isn't an array if (checkAllAliases(key, flags.normalize) && !checkAllAliases(key, flags.arrays)) { var keys = [key].concat(flags.aliases[key] || []) keys.forEach(function (key) { argv.__defineSetter__(key, function (v) { val = path.normalize(v) }) argv.__defineGetter__(key, function () { return typeof val === 'string' ? path.normalize(val) : val }) }) } } function addNewAlias (key, alias) { if (!(flags.aliases[key] && flags.aliases[key].length)) { flags.aliases[key] = [alias] newAliases[alias] = true } if (!(flags.aliases[alias] && flags.aliases[alias].length)) { addNewAlias(alias, key) } } function processValue (key, val) { // strings may be quoted, clean this up as we assign values. if (typeof val === 'string' && (val[0] === "'" || val[0] === '"') && val[val.length - 1] === val[0] ) { val = val.substring(1, val.length - 1) } // handle parsing boolean arguments --foo=true --bar false. if (checkAllAliases(key, flags.bools) || checkAllAliases(key, flags.counts)) { if (typeof val === 'string') val = val === 'true' } var value = maybeCoerceNumber(key, val) // increment a count given as arg (either no value or value parsed as boolean) if (checkAllAliases(key, flags.counts) && (isUndefined(value) || typeof value === 'boolean')) { value = increment } // Set normalized value when key is in 'normalize' and in 'arrays' if (checkAllAliases(key, flags.normalize) && checkAllAliases(key, flags.arrays)) { if (Array.isArray(val)) value = val.map(path.normalize) else value = path.normalize(val) } return value } function maybeCoerceNumber (key, value) { if (!checkAllAliases(key, flags.strings) && !checkAllAliases(key, flags.coercions)) { const shouldCoerceNumber = isNumber(value) && configuration['parse-numbers'] && ( Number.isSafeInteger(Math.floor(value)) ) if (shouldCoerceNumber || (!isUndefined(value) && checkAllAliases(key, flags.numbers))) value = Number(value) } return value } // set args from config.json file, this should be // applied last so that defaults can be applied. function setConfig (argv) { var configLookup = {} // expand defaults/aliases, in-case any happen to reference // the config.json file. applyDefaultsAndAliases(configLookup, flags.aliases, defaults) Object.keys(flags.configs).forEach(function (configKey) { var configPath = argv[configKey] || configLookup[configKey] if (configPath) { try { var config = null var resolvedConfigPath = path.resolve(process.cwd(), configPath) if (typeof flags.configs[configKey] === 'function') { try { config = flags.configs[configKey](resolvedConfigPath) } catch (e) { config = e } if (config instanceof Error) { error = config return } } else { config = __webpack_require__(21077)(resolvedConfigPath) } setConfigObject(config) } catch (ex) { if (argv[configKey]) error = Error(__('Invalid JSON config file: %s', configPath)) } } }) } // set args from config object. // it recursively checks nested objects. function setConfigObject (config, prev) { Object.keys(config).forEach(function (key) { var value = config[key] var fullKey = prev ? prev + '.' + key : key // if the value is an inner object and we have dot-notation // enabled, treat inner objects in config the same as // heavily nested dot notations (foo.bar.apple). if (typeof value === 'object' && value !== null && !Array.isArray(value) && configuration['dot-notation']) { // if the value is an object but not an array, check nested object setConfigObject(value, fullKey) } else { // setting arguments via CLI takes precedence over // values within the config file. if (!hasKey(argv, fullKey.split('.')) || (flags.defaulted[fullKey]) || (flags.arrays[fullKey] && configuration['combine-arrays'])) { setArg(fullKey, value) } } }) } // set all config objects passed in opts function setConfigObjects () { if (typeof configObjects === 'undefined') return configObjects.forEach(function (configObject) { setConfigObject(configObject) }) } function applyEnvVars (argv, configOnly) { if (typeof envPrefix === 'undefined') return var prefix = typeof envPrefix === 'string' ? envPrefix : '' Object.keys(process.env).forEach(function (envVar) { if (prefix === '' || envVar.lastIndexOf(prefix, 0) === 0) { // get array of nested keys and convert them to camel case var keys = envVar.split('__').map(function (key, i) { if (i ===