{"version":3,"sources":["jsdelivr-header.js","/npm/readline-sync@1.4.10/lib/readline-sync.js"],"names":[],"mappings":"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","file":"/npm/readline-sync@1.4.10/lib/readline-sync.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/readline-sync@1.4.10/lib/readline-sync.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","/*\n * readlineSync\n * https://github.com/anseki/readline-sync\n *\n * Copyright (c) 2019 anseki\n * Licensed under the MIT license.\n */\n\n'use strict';\n\nvar\n  IS_WIN = process.platform === 'win32',\n\n  ALGORITHM_CIPHER = 'aes-256-cbc',\n  ALGORITHM_HASH = 'sha256',\n  DEFAULT_ERR_MSG = 'The current environment doesn\\'t support interactive reading from TTY.',\n\n  fs = require('fs'),\n  TTY = process.binding('tty_wrap').TTY,\n  childProc = require('child_process'),\n  pathUtil = require('path'),\n\n  defaultOptions = {\n    /* eslint-disable key-spacing */\n    prompt:             '> ',\n    hideEchoBack:       false,\n    mask:               '*',\n    limit:              [],\n    limitMessage:       'Input another, please.$<( [)limit(])>',\n    defaultInput:       '',\n    trueValue:          [],\n    falseValue:         [],\n    caseSensitive:      false,\n    keepWhitespace:     false,\n    encoding:           'utf8',\n    bufferSize:         1024,\n    print:              void 0,\n    history:            true,\n    cd:                 false,\n    phContent:          void 0,\n    preCheck:           void 0\n    /* eslint-enable key-spacing */\n  },\n\n  fdR = 'none',\n  isRawMode = false,\n  salt = 0,\n  lastInput = '',\n  inputHistory = [],\n  _DBG_useExt = false,\n  _DBG_checkOptions = false,\n  _DBG_checkMethod = false,\n  fdW, ttyR, extHostPath, extHostArgs, tempdir, rawInput;\n\nfunction getHostArgs(options) {\n  // Send any text to crazy Windows shell safely.\n  function encodeArg(arg) {\n    return arg.replace(/[^\\w\\u0080-\\uFFFF]/g, function(chr) {\n      return '#' + chr.charCodeAt(0) + ';';\n    });\n  }\n\n  return extHostArgs.concat((function(conf) {\n    var args = [];\n    Object.keys(conf).forEach(function(optionName) {\n      if (conf[optionName] === 'boolean') {\n        if (options[optionName]) { args.push('--' + optionName); }\n      } else if (conf[optionName] === 'string') {\n        if (options[optionName]) {\n          args.push('--' + optionName, encodeArg(options[optionName]));\n        }\n      }\n    });\n    return args;\n  })({\n    /* eslint-disable key-spacing */\n    display:        'string',\n    displayOnly:    'boolean',\n    keyIn:          'boolean',\n    hideEchoBack:   'boolean',\n    mask:           'string',\n    limit:          'string',\n    caseSensitive:  'boolean'\n    /* eslint-enable key-spacing */\n  }));\n}\n\n// piping via files (for Node.js v0.10-)\nfunction _execFileSync(options, execOptions) {\n\n  function getTempfile(name) {\n    var suffix = '',\n      filepath, fd;\n    tempdir = tempdir || require('os').tmpdir();\n\n    while (true) {\n      filepath = pathUtil.join(tempdir, name + suffix);\n      try {\n        fd = fs.openSync(filepath, 'wx');\n      } catch (e) {\n        if (e.code === 'EEXIST') {\n          suffix++;\n          continue;\n        } else {\n          throw e;\n        }\n      }\n      fs.closeSync(fd);\n      break;\n    }\n    return filepath;\n  }\n\n  var res = {},\n    pathStdout = getTempfile('readline-sync.stdout'),\n    pathStderr = getTempfile('readline-sync.stderr'),\n    pathExit = getTempfile('readline-sync.exit'),\n    pathDone = getTempfile('readline-sync.done'),\n    crypto = require('crypto'),\n    hostArgs, shellPath, shellArgs, exitCode, extMessage, shasum, decipher, password;\n\n  shasum = crypto.createHash(ALGORITHM_HASH);\n  shasum.update('' + process.pid + (salt++) + Math.random());\n  password = shasum.digest('hex');\n  decipher = crypto.createDecipher(ALGORITHM_CIPHER, password);\n\n  hostArgs = getHostArgs(options);\n  if (IS_WIN) {\n    shellPath = process.env.ComSpec || 'cmd.exe';\n    process.env.Q = '\"'; // The quote (\") that isn't escaped.\n    // `()` for ignore space by echo\n    shellArgs = ['/V:ON', '/S', '/C',\n      '(%Q%' + shellPath + '%Q% /V:ON /S /C %Q%' + /* ESLint bug? */ // eslint-disable-line no-path-concat\n        '%Q%' + extHostPath + '%Q%' +\n          hostArgs.map(function(arg) { return ' %Q%' + arg + '%Q%'; }).join('') +\n        ' & (echo !ERRORLEVEL!)>%Q%' + pathExit + '%Q%%Q%) 2>%Q%' + pathStderr + '%Q%' +\n      ' |%Q%' + process.execPath + '%Q% %Q%' + __dirname + '\\\\encrypt.js%Q%' +\n        ' %Q%' + ALGORITHM_CIPHER + '%Q% %Q%' + password + '%Q%' +\n        ' >%Q%' + pathStdout + '%Q%' +\n      ' & (echo 1)>%Q%' + pathDone + '%Q%'];\n  } else {\n    shellPath = '/bin/sh';\n    shellArgs = ['-c',\n      // Use `()`, not `{}` for `-c` (text param)\n      '(\"' + extHostPath + '\"' + /* ESLint bug? */ // eslint-disable-line no-path-concat\n          hostArgs.map(function(arg) { return \" '\" + arg.replace(/'/g, \"'\\\\''\") + \"'\"; }).join('') +\n        '; echo $?>\"' + pathExit + '\") 2>\"' + pathStderr + '\"' +\n      ' |\"' + process.execPath + '\" \"' + __dirname + '/encrypt.js\"' +\n        ' \"' + ALGORITHM_CIPHER + '\" \"' + password + '\"' +\n        ' >\"' + pathStdout + '\"' +\n      '; echo 1 >\"' + pathDone + '\"'];\n  }\n  if (_DBG_checkMethod) { _DBG_checkMethod('_execFileSync', hostArgs); }\n  try {\n    childProc.spawn(shellPath, shellArgs, execOptions);\n  } catch (e) {\n    res.error = new Error(e.message);\n    res.error.method = '_execFileSync - spawn';\n    res.error.program = shellPath;\n    res.error.args = shellArgs;\n  }\n\n  while (fs.readFileSync(pathDone, {encoding: options.encoding}).trim() !== '1') {} // eslint-disable-line no-empty\n  if ((exitCode =\n      fs.readFileSync(pathExit, {encoding: options.encoding}).trim()) === '0') {\n    res.input =\n      decipher.update(fs.readFileSync(pathStdout, {encoding: 'binary'}),\n        'hex', options.encoding) +\n      decipher.final(options.encoding);\n  } else {\n    extMessage = fs.readFileSync(pathStderr, {encoding: options.encoding}).trim();\n    res.error = new Error(DEFAULT_ERR_MSG + (extMessage ? '\\n' + extMessage : ''));\n    res.error.method = '_execFileSync';\n    res.error.program = shellPath;\n    res.error.args = shellArgs;\n    res.error.extMessage = extMessage;\n    res.error.exitCode = +exitCode;\n  }\n\n  fs.unlinkSync(pathStdout);\n  fs.unlinkSync(pathStderr);\n  fs.unlinkSync(pathExit);\n  fs.unlinkSync(pathDone);\n\n  return res;\n}\n\nfunction readlineExt(options) {\n  var res = {},\n    execOptions = {env: process.env, encoding: options.encoding},\n    hostArgs, extMessage;\n\n  if (!extHostPath) {\n    if (IS_WIN) {\n      if (process.env.PSModulePath) { // Windows PowerShell\n        extHostPath = 'powershell.exe';\n        extHostArgs = ['-ExecutionPolicy', 'Bypass',\n          '-File', __dirname + '\\\\read.ps1']; // eslint-disable-line no-path-concat\n      } else { // Windows Script Host\n        extHostPath = 'cscript.exe';\n        extHostArgs = ['//nologo', __dirname + '\\\\read.cs.js']; // eslint-disable-line no-path-concat\n      }\n    } else {\n      extHostPath = '/bin/sh';\n      extHostArgs = [__dirname + '/read.sh']; // eslint-disable-line no-path-concat\n    }\n  }\n  if (IS_WIN && !process.env.PSModulePath) { // Windows Script Host\n    // ScriptPW (Win XP and Server2003) needs TTY stream as STDIN.\n    // In this case, If STDIN isn't TTY, an error is thrown.\n    execOptions.stdio = [process.stdin];\n  }\n\n  if (childProc.execFileSync) {\n    hostArgs = getHostArgs(options);\n    if (_DBG_checkMethod) { _DBG_checkMethod('execFileSync', hostArgs); }\n    try {\n      res.input = childProc.execFileSync(extHostPath, hostArgs, execOptions);\n    } catch (e) { // non-zero exit code\n      extMessage = e.stderr ? (e.stderr + '').trim() : '';\n      res.error = new Error(DEFAULT_ERR_MSG + (extMessage ? '\\n' + extMessage : ''));\n      res.error.method = 'execFileSync';\n      res.error.program = extHostPath;\n      res.error.args = hostArgs;\n      res.error.extMessage = extMessage;\n      res.error.exitCode = e.status;\n      res.error.code = e.code;\n      res.error.signal = e.signal;\n    }\n  } else {\n    res = _execFileSync(options, execOptions);\n  }\n  if (!res.error) {\n    res.input = res.input.replace(/^\\s*'|'\\s*$/g, '');\n    options.display = '';\n  }\n\n  return res;\n}\n\n/*\n  display:            string\n  displayOnly:        boolean\n  keyIn:              boolean\n  hideEchoBack:       boolean\n  mask:               string\n  limit:              string (pattern)\n  caseSensitive:      boolean\n  keepWhitespace:     boolean\n  encoding, bufferSize, print\n*/\nfunction _readlineSync(options) {\n  var input = '',\n    displaySave = options.display,\n    silent = !options.display && options.keyIn && options.hideEchoBack && !options.mask;\n\n  function tryExt() {\n    var res = readlineExt(options);\n    if (res.error) { throw res.error; }\n    return res.input;\n  }\n\n  if (_DBG_checkOptions) { _DBG_checkOptions(options); }\n\n  (function() { // open TTY\n    var fsB, constants, verNum;\n\n    function getFsB() {\n      if (!fsB) {\n        fsB = process.binding('fs'); // For raw device path\n        constants = process.binding('constants');\n        // for v6.3.0+\n        constants = constants && constants.fs && typeof constants.fs.O_RDWR === 'number'\n          ? constants.fs : constants;\n      }\n      return fsB;\n    }\n\n    if (typeof fdR !== 'string') { return; }\n    fdR = null;\n\n    if (IS_WIN) {\n      // iojs-v2.3.2+ input stream can't read first line. (#18)\n      // ** Don't get process.stdin before check! **\n      // Fixed v5.1.0\n      // Fixed v4.2.4\n      // It regressed again in v5.6.0, it is fixed in v6.2.0.\n      verNum = (function(ver) { // getVerNum\n        var nums = ver.replace(/^\\D+/, '').split('.');\n        var verNum = 0;\n        if ((nums[0] = +nums[0])) { verNum += nums[0] * 10000; }\n        if ((nums[1] = +nums[1])) { verNum += nums[1] * 100; }\n        if ((nums[2] = +nums[2])) { verNum += nums[2]; }\n        return verNum;\n      })(process.version);\n      if (!(verNum >= 20302 && verNum < 40204 || verNum >= 50000 && verNum < 50100 || verNum >= 50600 && verNum < 60200) &&\n          process.stdin.isTTY) {\n        process.stdin.pause();\n        fdR = process.stdin.fd;\n        ttyR = process.stdin._handle;\n      } else {\n        try {\n          // The stream by fs.openSync('\\\\\\\\.\\\\CON', 'r') can't switch to raw mode.\n          // 'CONIN$' might fail on XP, 2000, 7 (x86).\n          fdR = getFsB().open('CONIN$', constants.O_RDWR, parseInt('0666', 8));\n          ttyR = new TTY(fdR, true);\n        } catch (e) { /* ignore */ }\n      }\n\n      if (process.stdout.isTTY) {\n        fdW = process.stdout.fd;\n      } else {\n        try {\n          fdW = fs.openSync('\\\\\\\\.\\\\CON', 'w');\n        } catch (e) { /* ignore */ }\n        if (typeof fdW !== 'number') { // Retry\n          try {\n            fdW = getFsB().open('CONOUT$', constants.O_RDWR, parseInt('0666', 8));\n          } catch (e) { /* ignore */ }\n        }\n      }\n\n    } else {\n      if (process.stdin.isTTY) {\n        process.stdin.pause();\n        try {\n          fdR = fs.openSync('/dev/tty', 'r'); // device file, not process.stdin\n          ttyR = process.stdin._handle;\n        } catch (e) { /* ignore */ }\n      } else {\n        // Node.js v0.12 read() fails.\n        try {\n          fdR = fs.openSync('/dev/tty', 'r');\n          ttyR = new TTY(fdR, false);\n        } catch (e) { /* ignore */ }\n      }\n\n      if (process.stdout.isTTY) {\n        fdW = process.stdout.fd;\n      } else {\n        try {\n          fdW = fs.openSync('/dev/tty', 'w');\n        } catch (e) { /* ignore */ }\n      }\n    }\n  })();\n\n  (function() { // try read\n    var isCooked = !options.hideEchoBack && !options.keyIn,\n      atEol, limit, buffer, reqSize, readSize, chunk, line;\n    rawInput = '';\n\n    // Node.js v0.10- returns an error if same mode is set.\n    function setRawMode(mode) {\n      if (mode === isRawMode) { return true; }\n      if (ttyR.setRawMode(mode) !== 0) { return false; }\n      isRawMode = mode;\n      return true;\n    }\n\n    if (_DBG_useExt || !ttyR ||\n        typeof fdW !== 'number' && (options.display || !isCooked)) {\n      input = tryExt();\n      return;\n    }\n\n    if (options.display) {\n      fs.writeSync(fdW, options.display);\n      options.display = '';\n    }\n    if (options.displayOnly) { return; }\n\n    if (!setRawMode(!isCooked)) {\n      input = tryExt();\n      return;\n    }\n\n    reqSize = options.keyIn ? 1 : options.bufferSize;\n    // Check `allocUnsafe` to make sure of the new API.\n    buffer = Buffer.allocUnsafe && Buffer.alloc ? Buffer.alloc(reqSize) : new Buffer(reqSize);\n\n    if (options.keyIn && options.limit) {\n      limit = new RegExp('[^' + options.limit + ']',\n        'g' + (options.caseSensitive ? '' : 'i'));\n    }\n\n    while (true) {\n      readSize = 0;\n      try {\n        readSize = fs.readSync(fdR, buffer, 0, reqSize);\n      } catch (e) {\n        if (e.code !== 'EOF') {\n          setRawMode(false);\n          input += tryExt();\n          return;\n        }\n      }\n      if (readSize > 0) {\n        chunk = buffer.toString(options.encoding, 0, readSize);\n        rawInput += chunk;\n      } else {\n        chunk = '\\n';\n        rawInput += String.fromCharCode(0);\n      }\n\n      if (chunk && typeof (line = (chunk.match(/^(.*?)[\\r\\n]/) || [])[1]) === 'string') {\n        chunk = line;\n        atEol = true;\n      }\n\n      // other ctrl-chars\n      // eslint-disable-next-line no-control-regex\n      if (chunk) { chunk = chunk.replace(/[\\x00-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]/g, ''); }\n      if (chunk && limit) { chunk = chunk.replace(limit, ''); }\n\n      if (chunk) {\n        if (!isCooked) {\n          if (!options.hideEchoBack) {\n            fs.writeSync(fdW, chunk);\n          } else if (options.mask) {\n            fs.writeSync(fdW, (new Array(chunk.length + 1)).join(options.mask));\n          }\n        }\n        input += chunk;\n      }\n\n      if (!options.keyIn && atEol ||\n        options.keyIn && input.length >= reqSize) { break; }\n    }\n\n    if (!isCooked && !silent) { fs.writeSync(fdW, '\\n'); }\n    setRawMode(false);\n  })();\n\n  if (options.print && !silent) {\n    options.print(\n      displaySave + (\n        options.displayOnly ? '' : (\n          options.hideEchoBack ? (new Array(input.length + 1)).join(options.mask) : input\n        ) + '\\n' // must at least write '\\n'\n      ),\n      options.encoding);\n  }\n\n  return options.displayOnly ? '' :\n    (lastInput = options.keepWhitespace || options.keyIn ? input : input.trim());\n}\n\nfunction flattenArray(array, validator) {\n  var flatArray = [];\n  function _flattenArray(array) {\n    if (array == null) { return; }\n    if (Array.isArray(array)) {\n      array.forEach(_flattenArray);\n    } else if (!validator || validator(array)) {\n      flatArray.push(array);\n    }\n  }\n  _flattenArray(array);\n  return flatArray;\n}\n\nfunction escapePattern(pattern) {\n  return pattern.replace(/[\\x00-\\x7f]/g, // eslint-disable-line no-control-regex\n    function(s) { return '\\\\x' + ('00' + s.charCodeAt().toString(16)).substr(-2); });\n}\n\n// margeOptions(options1, options2 ... )\n// margeOptions(true, options1, options2 ... )\n//    arg1=true : Start from defaultOptions and pick elements of that.\nfunction margeOptions() {\n  var optionsList = Array.prototype.slice.call(arguments),\n    optionNames, fromDefault;\n\n  if (optionsList.length && typeof optionsList[0] === 'boolean') {\n    fromDefault = optionsList.shift();\n    if (fromDefault) {\n      optionNames = Object.keys(defaultOptions);\n      optionsList.unshift(defaultOptions);\n    }\n  }\n\n  return optionsList.reduce(function(options, optionsPart) {\n    if (optionsPart == null) { return options; }\n\n    // ======== DEPRECATED ========\n    if (optionsPart.hasOwnProperty('noEchoBack') &&\n        !optionsPart.hasOwnProperty('hideEchoBack')) {\n      optionsPart.hideEchoBack = optionsPart.noEchoBack;\n      delete optionsPart.noEchoBack;\n    }\n    if (optionsPart.hasOwnProperty('noTrim') &&\n        !optionsPart.hasOwnProperty('keepWhitespace')) {\n      optionsPart.keepWhitespace = optionsPart.noTrim;\n      delete optionsPart.noTrim;\n    }\n    // ======== /DEPRECATED ========\n\n    if (!fromDefault) { optionNames = Object.keys(optionsPart); }\n    optionNames.forEach(function(optionName) {\n      var value;\n      if (!optionsPart.hasOwnProperty(optionName)) { return; }\n      value = optionsPart[optionName];\n      /* eslint-disable no-multi-spaces */\n      switch (optionName) {\n        //                    _readlineSync <- *    * -> defaultOptions\n        // ================ string\n        case 'mask':                        // *    *\n        case 'limitMessage':                //      *\n        case 'defaultInput':                //      *\n        case 'encoding':                    // *    *\n          value = value != null ? value + '' : '';\n          if (value && optionName !== 'limitMessage') { value = value.replace(/[\\r\\n]/g, ''); }\n          options[optionName] = value;\n          break;\n        // ================ number(int)\n        case 'bufferSize':                  // *    *\n          if (!isNaN(value = parseInt(value, 10)) && typeof value === 'number') {\n            options[optionName] = value; // limited updating (number is needed)\n          }\n          break;\n        // ================ boolean\n        case 'displayOnly':                 // *\n        case 'keyIn':                       // *\n        case 'hideEchoBack':                // *    *\n        case 'caseSensitive':               // *    *\n        case 'keepWhitespace':              // *    *\n        case 'history':                     //      *\n        case 'cd':                          //      *\n          options[optionName] = !!value;\n          break;\n        // ================ array\n        case 'limit':                       // *    *     to string for readlineExt\n        case 'trueValue':                   //      *\n        case 'falseValue':                  //      *\n          options[optionName] = flattenArray(value, function(value) {\n            var type = typeof value;\n            return type === 'string' || type === 'number' ||\n              type === 'function' || value instanceof RegExp;\n          }).map(function(value) {\n            return typeof value === 'string' ? value.replace(/[\\r\\n]/g, '') : value;\n          });\n          break;\n        // ================ function\n        case 'print':                       // *    *\n        case 'phContent':                   //      *\n        case 'preCheck':                    //      *\n          options[optionName] = typeof value === 'function' ? value : void 0;\n          break;\n        // ================ other\n        case 'prompt':                      //      *\n        case 'display':                     // *\n          options[optionName] = value != null ? value : '';\n          break;\n        // no default\n      }\n      /* eslint-enable no-multi-spaces */\n    });\n    return options;\n  }, {});\n}\n\nfunction isMatched(res, comps, caseSensitive) {\n  return comps.some(function(comp) {\n    var type = typeof comp;\n    return type === 'string'\n      ? (caseSensitive ? res === comp : res.toLowerCase() === comp.toLowerCase()) :\n      type === 'number' ? parseFloat(res) === comp :\n      type === 'function' ? comp(res) :\n      comp instanceof RegExp ? comp.test(res) : false;\n  });\n}\n\nfunction replaceHomePath(path, expand) {\n  var homePath = pathUtil.normalize(\n    IS_WIN ? (process.env.HOMEDRIVE || '') + (process.env.HOMEPATH || '') :\n    process.env.HOME || '').replace(/[/\\\\]+$/, '');\n  path = pathUtil.normalize(path);\n  return expand ? path.replace(/^~(?=\\/|\\\\|$)/, homePath) :\n    path.replace(new RegExp('^' + escapePattern(homePath) +\n      '(?=\\\\/|\\\\\\\\|$)', IS_WIN ? 'i' : ''), '~');\n}\n\nfunction replacePlaceholder(text, generator) {\n  var PTN_INNER = '(?:\\\\(([\\\\s\\\\S]*?)\\\\))?(\\\\w+|.-.)(?:\\\\(([\\\\s\\\\S]*?)\\\\))?',\n    rePlaceholder = new RegExp('(\\\\$)?(\\\\$<' + PTN_INNER + '>)', 'g'),\n    rePlaceholderCompat = new RegExp('(\\\\$)?(\\\\$\\\\{' + PTN_INNER + '\\\\})', 'g');\n\n  function getPlaceholderText(s, escape, placeholder, pre, param, post) {\n    var text;\n    return escape || typeof (text = generator(param)) !== 'string' ? placeholder :\n      text ? (pre || '') + text + (post || '') : '';\n  }\n\n  return text.replace(rePlaceholder, getPlaceholderText)\n    .replace(rePlaceholderCompat, getPlaceholderText);\n}\n\nfunction array2charlist(array, caseSensitive, collectSymbols) {\n  var group = [],\n    groupClass = -1,\n    charCode = 0,\n    symbols = '',\n    values, suppressed;\n  function addGroup(groups, group) {\n    if (group.length > 3) { // ellipsis\n      groups.push(group[0] + '...' + group[group.length - 1]);\n      suppressed = true;\n    } else if (group.length) {\n      groups = groups.concat(group);\n    }\n    return groups;\n  }\n\n  values = array.reduce(function(chars, value) {\n    return chars.concat((value + '').split(''));\n  }, []).reduce(function(groups, curChar) {\n    var curGroupClass, curCharCode;\n    if (!caseSensitive) { curChar = curChar.toLowerCase(); }\n    curGroupClass = /^\\d$/.test(curChar) ? 1 :\n      /^[A-Z]$/.test(curChar) ? 2 : /^[a-z]$/.test(curChar) ? 3 : 0;\n    if (collectSymbols && curGroupClass === 0) {\n      symbols += curChar;\n    } else {\n      curCharCode = curChar.charCodeAt(0);\n      if (curGroupClass && curGroupClass === groupClass &&\n          curCharCode === charCode + 1) {\n        group.push(curChar);\n      } else {\n        groups = addGroup(groups, group);\n        group = [curChar];\n        groupClass = curGroupClass;\n      }\n      charCode = curCharCode;\n    }\n    return groups;\n  }, []);\n  values = addGroup(values, group); // last group\n  if (symbols) { values.push(symbols); suppressed = true; }\n  return {values: values, suppressed: suppressed};\n}\n\nfunction joinChunks(chunks, suppressed) {\n  return chunks.join(chunks.length > 2 ? ', ' : suppressed ? ' / ' : '/');\n}\n\nfunction getPhContent(param, options) {\n  var resCharlist = {},\n    text, values, arg;\n  if (options.phContent) {\n    text = options.phContent(param, options);\n  }\n  if (typeof text !== 'string') {\n    switch (param) {\n      case 'hideEchoBack':\n      case 'mask':\n      case 'defaultInput':\n      case 'caseSensitive':\n      case 'keepWhitespace':\n      case 'encoding':\n      case 'bufferSize':\n      case 'history':\n      case 'cd':\n        text = !options.hasOwnProperty(param) ? '' :\n          typeof options[param] === 'boolean' ? (options[param] ? 'on' : 'off') :\n          options[param] + '';\n        break;\n      // case 'prompt':\n      // case 'query':\n      // case 'display':\n      //   text = options.hasOwnProperty('displaySrc') ? options.displaySrc + '' : '';\n      //   break;\n      case 'limit':\n      case 'trueValue':\n      case 'falseValue':\n        values = options[options.hasOwnProperty(param + 'Src') ? param + 'Src' : param];\n        if (options.keyIn) { // suppress\n          resCharlist = array2charlist(values, options.caseSensitive);\n          values = resCharlist.values;\n        } else {\n          values = values.filter(function(value) {\n            var type = typeof value;\n            return type === 'string' || type === 'number';\n          });\n        }\n        text = joinChunks(values, resCharlist.suppressed);\n        break;\n      case 'limitCount':\n      case 'limitCountNotZero':\n        text = options[options.hasOwnProperty('limitSrc') ? 'limitSrc' : 'limit'].length;\n        text = text || param !== 'limitCountNotZero' ? text + '' : '';\n        break;\n      case 'lastInput':\n        text = lastInput;\n        break;\n      case 'cwd':\n      case 'CWD':\n      case 'cwdHome':\n        text = process.cwd();\n        if (param === 'CWD') {\n          text = pathUtil.basename(text);\n        } else if (param === 'cwdHome') {\n          text = replaceHomePath(text);\n        }\n        break;\n      case 'date':\n      case 'time':\n      case 'localeDate':\n      case 'localeTime':\n        text = (new Date())['to' +\n          param.replace(/^./, function(str) { return str.toUpperCase(); }) +\n          'String']();\n        break;\n      default: // with arg\n        if (typeof (arg = (param.match(/^history_m(\\d+)$/) || [])[1]) === 'string') {\n          text = inputHistory[inputHistory.length - arg] || '';\n        }\n    }\n  }\n  return text;\n}\n\nfunction getPhCharlist(param) {\n  var matches = /^(.)-(.)$/.exec(param),\n    text = '',\n    from, to, code, step;\n  if (!matches) { return null; }\n  from = matches[1].charCodeAt(0);\n  to = matches[2].charCodeAt(0);\n  step = from < to ? 1 : -1;\n  for (code = from; code !== to + step; code += step) { text += String.fromCharCode(code); }\n  return text;\n}\n\n// cmd \"arg\" \" a r g \" \"\" 'a\"r\"g' \"a\"\"rg\" \"arg\nfunction parseCl(cl) {\n  var reToken = new RegExp(/(\\s*)(?:(\"|')(.*?)(?:\\2|$)|(\\S+))/g),\n    taken = '',\n    args = [],\n    matches, part;\n  cl = cl.trim();\n  while ((matches = reToken.exec(cl))) {\n    part = matches[3] || matches[4] || '';\n    if (matches[1]) {\n      args.push(taken);\n      taken = '';\n    }\n    taken += part;\n  }\n  if (taken) { args.push(taken); }\n  return args;\n}\n\nfunction toBool(res, options) {\n  return (\n    (options.trueValue.length &&\n      isMatched(res, options.trueValue, options.caseSensitive)) ? true :\n    (options.falseValue.length &&\n      isMatched(res, options.falseValue, options.caseSensitive)) ? false : res);\n}\n\nfunction getValidLine(options) {\n  var res, forceNext, limitMessage,\n    matches, histInput, args, resCheck;\n\n  function _getPhContent(param) { return getPhContent(param, options); }\n  function addDisplay(text) { options.display += (/[^\\r\\n]$/.test(options.display) ? '\\n' : '') + text; }\n\n  options.limitSrc = options.limit;\n  options.displaySrc = options.display;\n  options.limit = ''; // for readlineExt\n  options.display = replacePlaceholder(options.display + '', _getPhContent);\n\n  while (true) {\n    res = _readlineSync(options);\n    forceNext = false;\n    limitMessage = '';\n\n    if (options.defaultInput && !res) { res = options.defaultInput; }\n\n    if (options.history) {\n      if ((matches = /^\\s*!(?:!|-1)(:p)?\\s*$/.exec(res))) { // `!!` `!-1` +`:p`\n        histInput = inputHistory[0] || '';\n        if (matches[1]) { // only display\n          forceNext = true;\n        } else { // replace input\n          res = histInput;\n        }\n        // Show it even if it is empty (NL only).\n        addDisplay(histInput + '\\n');\n        if (!forceNext) { // Loop may break\n          options.displayOnly = true;\n          _readlineSync(options);\n          options.displayOnly = false;\n        }\n      } else if (res && res !== inputHistory[inputHistory.length - 1]) {\n        inputHistory = [res];\n      }\n    }\n\n    if (!forceNext && options.cd && res) {\n      args = parseCl(res);\n      switch (args[0].toLowerCase()) {\n        case 'cd':\n          if (args[1]) {\n            try {\n              process.chdir(replaceHomePath(args[1], true));\n            } catch (e) {\n              addDisplay(e + '');\n            }\n          }\n          forceNext = true;\n          break;\n        case 'pwd':\n          addDisplay(process.cwd());\n          forceNext = true;\n          break;\n        // no default\n      }\n    }\n\n    if (!forceNext && options.preCheck) {\n      resCheck = options.preCheck(res, options);\n      res = resCheck.res;\n      if (resCheck.forceNext) { forceNext = true; } // Don't switch to false.\n    }\n\n    if (!forceNext) {\n      if (!options.limitSrc.length ||\n        isMatched(res, options.limitSrc, options.caseSensitive)) { break; }\n      if (options.limitMessage) {\n        limitMessage = replacePlaceholder(options.limitMessage, _getPhContent);\n      }\n    }\n\n    addDisplay((limitMessage ? limitMessage + '\\n' : '') +\n      replacePlaceholder(options.displaySrc + '', _getPhContent));\n  }\n  return toBool(res, options);\n}\n\n// for dev\nexports._DBG_set_useExt = function(val) { _DBG_useExt = val; };\nexports._DBG_set_checkOptions = function(val) { _DBG_checkOptions = val; };\nexports._DBG_set_checkMethod = function(val) { _DBG_checkMethod = val; };\nexports._DBG_clearHistory = function() { lastInput = ''; inputHistory = []; };\n\n// ------------------------------------\n\nexports.setDefaultOptions = function(options) {\n  defaultOptions = margeOptions(true, options);\n  return margeOptions(true); // copy\n};\n\nexports.question = function(query, options) {\n  /* eslint-disable key-spacing */\n  return getValidLine(margeOptions(margeOptions(true, options), {\n    display:            query\n  }));\n  /* eslint-enable key-spacing */\n};\n\nexports.prompt = function(options) {\n  var readOptions = margeOptions(true, options);\n  readOptions.display = readOptions.prompt;\n  return getValidLine(readOptions);\n};\n\nexports.keyIn = function(query, options) {\n  /* eslint-disable key-spacing */\n  var readOptions = margeOptions(margeOptions(true, options), {\n    display:            query,\n    keyIn:              true,\n    keepWhitespace:     true\n  });\n  /* eslint-enable key-spacing */\n\n  // char list\n  readOptions.limitSrc = readOptions.limit.filter(function(value) {\n    var type = typeof value;\n    return type === 'string' || type === 'number';\n  }).map(function(text) {\n    return replacePlaceholder(text + '', getPhCharlist);\n  });\n  // pattern\n  readOptions.limit = escapePattern(readOptions.limitSrc.join(''));\n\n  ['trueValue', 'falseValue'].forEach(function(optionName) {\n    readOptions[optionName] = readOptions[optionName].reduce(function(comps, comp) {\n      var type = typeof comp;\n      if (type === 'string' || type === 'number') {\n        comps = comps.concat((comp + '').split(''));\n      } else { comps.push(comp); }\n      return comps;\n    }, []);\n  });\n\n  readOptions.display = replacePlaceholder(readOptions.display + '',\n    function(param) { return getPhContent(param, readOptions); });\n\n  return toBool(_readlineSync(readOptions), readOptions);\n};\n\n// ------------------------------------\n\nexports.questionEMail = function(query, options) {\n  if (query == null) { query = 'Input e-mail address: '; }\n  /* eslint-disable key-spacing */\n  return exports.question(query, margeOptions({\n    // -------- default\n    hideEchoBack:       false,\n    // http://www.w3.org/TR/html5/forms.html#valid-e-mail-address\n    limit:              /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/,\n    limitMessage:       'Input valid e-mail address, please.',\n    trueValue:          null,\n    falseValue:         null\n  }, options, {\n    // -------- forced\n    keepWhitespace:     false,\n    cd:                 false\n  }));\n  /* eslint-enable key-spacing */\n};\n\nexports.questionNewPassword = function(query, options) {\n  /* eslint-disable key-spacing */\n  var resCharlist, min, max,\n    readOptions = margeOptions({\n      // -------- default\n      hideEchoBack:       true,\n      mask:               '*',\n      limitMessage:       'It can include: $<charlist>\\n' +\n                            'And the length must be: $<length>',\n      trueValue:          null,\n      falseValue:         null,\n      caseSensitive:      true\n    }, options, {\n      // -------- forced\n      history:            false,\n      cd:                 false,\n      // limit (by charlist etc.),\n      phContent: function(param) {\n        return param === 'charlist' ? resCharlist.text :\n          param === 'length' ? min + '...' + max : null;\n      }\n    }),\n    // added:     charlist, min, max, confirmMessage, unmatchMessage\n    charlist, confirmMessage, unmatchMessage,\n    limit, limitMessage, res1, res2;\n  /* eslint-enable key-spacing */\n  options = options || {};\n\n  charlist = replacePlaceholder(\n    options.charlist ? options.charlist + '' : '$<!-~>', getPhCharlist);\n  if (isNaN(min = parseInt(options.min, 10)) || typeof min !== 'number') { min = 12; }\n  if (isNaN(max = parseInt(options.max, 10)) || typeof max !== 'number') { max = 24; }\n  limit = new RegExp('^[' + escapePattern(charlist) +\n    ']{' + min + ',' + max + '}$');\n  resCharlist = array2charlist([charlist], readOptions.caseSensitive, true);\n  resCharlist.text = joinChunks(resCharlist.values, resCharlist.suppressed);\n\n  confirmMessage = options.confirmMessage != null ? options.confirmMessage :\n    'Reinput a same one to confirm it: ';\n  unmatchMessage = options.unmatchMessage != null ? options.unmatchMessage :\n    'It differs from first one.' +\n      ' Hit only the Enter key if you want to retry from first one.';\n\n  if (query == null) { query = 'Input new password: '; }\n\n  limitMessage = readOptions.limitMessage;\n  while (!res2) {\n    readOptions.limit = limit;\n    readOptions.limitMessage = limitMessage;\n    res1 = exports.question(query, readOptions);\n\n    readOptions.limit = [res1, ''];\n    readOptions.limitMessage = unmatchMessage;\n    res2 = exports.question(confirmMessage, readOptions);\n  }\n\n  return res1;\n};\n\nfunction _questionNum(query, options, parser) {\n  var validValue;\n  function getValidValue(value) {\n    validValue = parser(value);\n    return !isNaN(validValue) && typeof validValue === 'number';\n  }\n  /* eslint-disable key-spacing */\n  exports.question(query, margeOptions({\n    // -------- default\n    limitMessage:       'Input valid number, please.'\n  }, options, {\n    // -------- forced\n    limit:              getValidValue,\n    cd:                 false\n    // trueValue, falseValue, caseSensitive, keepWhitespace don't work.\n  }));\n  /* eslint-enable key-spacing */\n  return validValue;\n}\nexports.questionInt = function(query, options) {\n  return _questionNum(query, options, function(value) { return parseInt(value, 10); });\n};\nexports.questionFloat = function(query, options) {\n  return _questionNum(query, options, parseFloat);\n};\n\nexports.questionPath = function(query, options) {\n  /* eslint-disable key-spacing */\n  var error = '',\n    validPath, // before readOptions\n    readOptions = margeOptions({\n      // -------- default\n      hideEchoBack:       false,\n      limitMessage:       '$<error(\\n)>Input valid path, please.' +\n                            '$<( Min:)min>$<( Max:)max>',\n      history:            true,\n      cd:                 true\n    }, options, {\n      // -------- forced\n      keepWhitespace:     false,\n      limit: function(value) {\n        var exists, stat, res;\n        value = replaceHomePath(value, true);\n        error = ''; // for validate\n        // mkdir -p\n        function mkdirParents(dirPath) {\n          dirPath.split(/\\/|\\\\/).reduce(function(parents, dir) {\n            var path = pathUtil.resolve((parents += dir + pathUtil.sep));\n            if (!fs.existsSync(path)) {\n              fs.mkdirSync(path);\n            } else if (!fs.statSync(path).isDirectory()) {\n              throw new Error('Non directory already exists: ' + path);\n            }\n            return parents;\n          }, '');\n        }\n\n        try {\n          exists = fs.existsSync(value);\n          validPath = exists ? fs.realpathSync(value) : pathUtil.resolve(value);\n          // options.exists default: true, not-bool: no-check\n          if (!options.hasOwnProperty('exists') && !exists ||\n              typeof options.exists === 'boolean' && options.exists !== exists) {\n            error = (exists ? 'Already exists' : 'No such file or directory') +\n              ': ' + validPath;\n            return false;\n          }\n          if (!exists && options.create) {\n            if (options.isDirectory) {\n              mkdirParents(validPath);\n            } else {\n              mkdirParents(pathUtil.dirname(validPath));\n              fs.closeSync(fs.openSync(validPath, 'w')); // touch\n            }\n            validPath = fs.realpathSync(validPath);\n          }\n          if (exists && (options.min || options.max ||\n              options.isFile || options.isDirectory)) {\n            stat = fs.statSync(validPath);\n            // type check first (directory has zero size)\n            if (options.isFile && !stat.isFile()) {\n              error = 'Not file: ' + validPath;\n              return false;\n            } else if (options.isDirectory && !stat.isDirectory()) {\n              error = 'Not directory: ' + validPath;\n              return false;\n            } else if (options.min && stat.size < +options.min ||\n                options.max && stat.size > +options.max) {\n              error = 'Size ' + stat.size + ' is out of range: ' + validPath;\n              return false;\n            }\n          }\n          if (typeof options.validate === 'function' &&\n              (res = options.validate(validPath)) !== true) {\n            if (typeof res === 'string') { error = res; }\n            return false;\n          }\n        } catch (e) {\n          error = e + '';\n          return false;\n        }\n        return true;\n      },\n      // trueValue, falseValue, caseSensitive don't work.\n      phContent: function(param) {\n        return param === 'error' ? error :\n          param !== 'min' && param !== 'max' ? null :\n          options.hasOwnProperty(param) ? options[param] + '' : '';\n      }\n    });\n    // added:     exists, create, min, max, isFile, isDirectory, validate\n  /* eslint-enable key-spacing */\n  options = options || {};\n\n  if (query == null) { query = 'Input path (you can \"cd\" and \"pwd\"): '; }\n\n  exports.question(query, readOptions);\n  return validPath;\n};\n\n// props: preCheck, args, hRes, limit\nfunction getClHandler(commandHandler, options) {\n  var clHandler = {},\n    hIndex = {};\n  if (typeof commandHandler === 'object') {\n    Object.keys(commandHandler).forEach(function(cmd) {\n      if (typeof commandHandler[cmd] === 'function') {\n        hIndex[options.caseSensitive ? cmd : cmd.toLowerCase()] = commandHandler[cmd];\n      }\n    });\n    clHandler.preCheck = function(res) {\n      var cmdKey;\n      clHandler.args = parseCl(res);\n      cmdKey = clHandler.args[0] || '';\n      if (!options.caseSensitive) { cmdKey = cmdKey.toLowerCase(); }\n      clHandler.hRes =\n        cmdKey !== '_' && hIndex.hasOwnProperty(cmdKey)\n          ? hIndex[cmdKey].apply(res, clHandler.args.slice(1)) :\n          hIndex.hasOwnProperty('_') ? hIndex._.apply(res, clHandler.args) : null;\n      return {res: res, forceNext: false};\n    };\n    if (!hIndex.hasOwnProperty('_')) {\n      clHandler.limit = function() { // It's called after preCheck.\n        var cmdKey = clHandler.args[0] || '';\n        if (!options.caseSensitive) { cmdKey = cmdKey.toLowerCase(); }\n        return hIndex.hasOwnProperty(cmdKey);\n      };\n    }\n  } else {\n    clHandler.preCheck = function(res) {\n      clHandler.args = parseCl(res);\n      clHandler.hRes = typeof commandHandler === 'function'\n        ? commandHandler.apply(res, clHandler.args) : true; // true for break loop\n      return {res: res, forceNext: false};\n    };\n  }\n  return clHandler;\n}\n\nexports.promptCL = function(commandHandler, options) {\n  /* eslint-disable key-spacing */\n  var readOptions = margeOptions({\n      // -------- default\n      hideEchoBack:       false,\n      limitMessage:       'Requested command is not available.',\n      caseSensitive:      false,\n      history:            true\n    }, options),\n    //   -------- forced\n    //   trueValue, falseValue, keepWhitespace don't work.\n    //   preCheck, limit (by clHandler)\n    clHandler = getClHandler(commandHandler, readOptions);\n  /* eslint-enable key-spacing */\n  readOptions.limit = clHandler.limit;\n  readOptions.preCheck = clHandler.preCheck;\n  exports.prompt(readOptions);\n  return clHandler.args;\n};\n\nexports.promptLoop = function(inputHandler, options) {\n  /* eslint-disable key-spacing */\n  var readOptions = margeOptions({\n    // -------- default\n    hideEchoBack:       false,\n    trueValue:          null,\n    falseValue:         null,\n    caseSensitive:      false,\n    history:            true\n  }, options);\n  /* eslint-enable key-spacing */\n  while (true) { if (inputHandler(exports.prompt(readOptions))) { break; } }\n  // return; // nothing is returned\n};\n\nexports.promptCLLoop = function(commandHandler, options) {\n  /* eslint-disable key-spacing */\n  var readOptions = margeOptions({\n      // -------- default\n      hideEchoBack:       false,\n      limitMessage:       'Requested command is not available.',\n      caseSensitive:      false,\n      history:            true\n    }, options),\n    //   -------- forced\n    //   trueValue, falseValue, keepWhitespace don't work.\n    //   preCheck, limit (by clHandler)\n    clHandler = getClHandler(commandHandler, readOptions);\n  /* eslint-enable key-spacing */\n  readOptions.limit = clHandler.limit;\n  readOptions.preCheck = clHandler.preCheck;\n  while (true) {\n    exports.prompt(readOptions);\n    if (clHandler.hRes) { break; }\n  }\n  // return; // nothing is returned\n};\n\nexports.promptSimShell = function(options) {\n  /* eslint-disable key-spacing */\n  return exports.prompt(margeOptions({\n    // -------- default\n    hideEchoBack:       false,\n    history:            true\n  }, options, {\n    // -------- forced\n    prompt:             (function() {\n      return IS_WIN ? '$<cwd>>' :\n        // 'user@host:cwd$ '\n        (process.env.USER || '') +\n        (process.env.HOSTNAME ? '@' + process.env.HOSTNAME.replace(/\\..*$/, '') : '') +\n        ':$<cwdHome>$ ';\n    })()\n  }));\n  /* eslint-enable key-spacing */\n};\n\nfunction _keyInYN(query, options, limit) {\n  var res;\n  if (query == null) { query = 'Are you sure? '; }\n  if ((!options || options.guide !== false) && (query += '')) {\n    query = query.replace(/\\s*:?\\s*$/, '') + ' [y/n]: ';\n  }\n  /* eslint-disable key-spacing */\n  res = exports.keyIn(query, margeOptions(options, {\n    // -------- forced\n    hideEchoBack:       false,\n    limit:              limit,\n    trueValue:          'y',\n    falseValue:         'n',\n    caseSensitive:      false\n    // mask doesn't work.\n  }));\n  // added:     guide\n  /* eslint-enable key-spacing */\n  return typeof res === 'boolean' ? res : '';\n}\nexports.keyInYN = function(query, options) { return _keyInYN(query, options); };\nexports.keyInYNStrict = function(query, options) { return _keyInYN(query, options, 'yn'); };\n\nexports.keyInPause = function(query, options) {\n  if (query == null) { query = 'Continue...'; }\n  if ((!options || options.guide !== false) && (query += '')) {\n    query = query.replace(/\\s+$/, '') + ' (Hit any key)';\n  }\n  /* eslint-disable key-spacing */\n  exports.keyIn(query, margeOptions({\n    // -------- default\n    limit:              null\n  }, options, {\n    // -------- forced\n    hideEchoBack:       true,\n    mask:               ''\n  }));\n  // added:     guide\n  /* eslint-enable key-spacing */\n  // return; // nothing is returned\n};\n\nexports.keyInSelect = function(items, query, options) {\n  /* eslint-disable key-spacing */\n  var readOptions = margeOptions({\n      // -------- default\n      hideEchoBack:       false\n    }, options, {\n      // -------- forced\n      trueValue:          null,\n      falseValue:         null,\n      caseSensitive:      false,\n      // limit (by items),\n      phContent: function(param) {\n        return param === 'itemsCount' ? items.length + '' :\n          param === 'firstItem' ? (items[0] + '').trim() :\n          param === 'lastItem' ? (items[items.length - 1] + '').trim() : null;\n      }\n    }),\n    // added:     guide, cancel\n    keylist = '',\n    key2i = {},\n    charCode = 49 /* '1' */,\n    display = '\\n';\n  /* eslint-enable key-spacing */\n  if (!Array.isArray(items) || !items.length || items.length > 35) {\n    throw '`items` must be Array (max length: 35).';\n  }\n\n  items.forEach(function(item, i) {\n    var key = String.fromCharCode(charCode);\n    keylist += key;\n    key2i[key] = i;\n    display += '[' + key + '] ' + (item + '').trim() + '\\n';\n    charCode = charCode === 57 /* '9' */ ? 97 /* 'a' */ : charCode + 1;\n  });\n  if (!options || options.cancel !== false) {\n    keylist += '0';\n    key2i['0'] = -1;\n    display += '[0] ' +\n      (options && options.cancel != null && typeof options.cancel !== 'boolean'\n        ? (options.cancel + '').trim() : 'CANCEL') + '\\n';\n  }\n  readOptions.limit = keylist;\n  display += '\\n';\n\n  if (query == null) { query = 'Choose one from list: '; }\n  if ((query += '')) {\n    if (!options || options.guide !== false) {\n      query = query.replace(/\\s*:?\\s*$/, '') + ' [$<limit>]: ';\n    }\n    display += query;\n  }\n\n  return key2i[exports.keyIn(display, readOptions).toLowerCase()];\n};\n\nexports.getRawInput = function() { return rawInput; };\n\n// ======== DEPRECATED ========\nfunction _setOption(optionName, args) {\n  var options;\n  if (args.length) { options = {}; options[optionName] = args[0]; }\n  return exports.setDefaultOptions(options)[optionName];\n}\nexports.setPrint = function() { return _setOption('print', arguments); };\nexports.setPrompt = function() { return _setOption('prompt', arguments); };\nexports.setEncoding = function() { return _setOption('encoding', arguments); };\nexports.setMask = function() { return _setOption('mask', arguments); };\nexports.setBufferSize = function() { return _setOption('bufferSize', arguments); };\n"]}