docs: function parse(args, exclude) {
      var normalized = normalizeArgs(args || _args, exclude);
      var clone = normalized.slice(0);
      clone.forEach(function (arg, i) {
          var next = clone[i + 1];
          var isFlag = _flagExp.test(arg);
          var isFlagNext = _flagExp.test(next || '');
          var isNoFlag = _noFlagExp.test(arg);
          if (isFlag) {
              var key = isNoFlag ? arg.replace(_noFlagExp, '') : arg.replace(_flagExp, '');
              key = key.split('.').map(function (k) { return chek_1.camelcase(k); }).join('.'); // handle dot keys.
              var curVal = chek_1.get(_flags, key);
              var exists = chek_1.isValue(curVal);
              if (exists)
                  curVal = chek_1.toArray(curVal, []);
              if (!isFlagNext && next) {
                  if (isNoFlag)
                      logger_1.log.error("Oops cannot set flag value using inverse (--no-xxx) flag " + arg + ".");
                  var val = castToType(next);
                  if (exists) {
                      curVal.push(val);
                      val = curVal;
                  }
                  chek_1.set(_flags, key, val);
                  clone.splice(i + 1, 1);
              }
              else {
                  chek_1.set(_flags, key, isNoFlag ? false : true);
              }
          }
          else {
              _commands.push(castToType(arg));
          }
      });
      if (_commands)
          _command = _commands.shift();
      return {
          command: _command,
          commands: _commands,
          cmd: _command,
          cmds: _commands,
          flags: _flags,
          source: _args,
          normalized: normalized
      };
  }