'use strict';

Object.defineProperty(exports, '__esModule', { value: true });

/**
 * 横线转驼峰命名，如果第一个字符是字母，则不处理。
 * @param {string} str  输入字符串
 * @param {boolean} handleSnake  是否处理下划线，默认不处理
 * @returns {string} 处理后的字符串
 * @example
 *
 * camelize('ab-cd-ef')
 *
 * // => abCdEf
 *
 */
function camelize() {
  var str = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
  var handleSnake = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
  var camelizeRE = /-(\w)/g;
  var snakeRE = /_(\w)/g;
  var cb = function cb() {
    var str = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
    var re = arguments.length > 1 ? arguments[1] : undefined;
    return str.replace(re, function (_, c) {
      return c ? c.toUpperCase() : '';
    });
  };
  if (!handleSnake) {
    return cb(str, camelizeRE);
  }
  return cb(cb(str, camelizeRE), snakeRE);
}
var toCamel = camelize;
/**
 * 驼峰命名转横线命名：拆分字符串，使用 - 相连，并且转换为小写
 * @param {string} str 输入字符串
 * @returns {string} 处理后的字符串
 *
 * @example
 *
 * hyphenate('abCd')
 *
 * // => ab-cd
 *
 */
function hyphenate(str) {
  var hyphenateRE = /\B([A-Z])/g;
  return str.replace(hyphenateRE, '-$1').toLowerCase();
}
var toKebab = hyphenate;
/**
 * 字符串首位大写
 * @param {string} str 输入字符串
 * @returns {string} 处理后的字符串
 *
 * @example
 *
 * capitalize('abc')
 *
 * // => Abc
 */
function capitalize(str) {
  return str.charAt(0).toUpperCase() + str.slice(1);
}
/**
 * 将每个单词的首字母转换为大写
 * @param {string} str 输入字符串
 * @returns {string} 处理后的字符串
 *
 * @example
 *
 * titleize('my name is yang')
 *
 * // My Name Is Yang
 *
 * titleize('foo-bar')
 *
 * // Foo-Bar
 */
function titleize(str) {
  if (typeof str !== 'string') {
    throw new TypeError('Expected a string');
  }
  return str.toLowerCase().replace(/(?:^|\s|-)\S/g, function (x) {
    return x.toUpperCase();
  });
}
/**
 * 首字母小写
 * @param {string} str 输入字符串
 * @returns {string} 输出字符串
 * @example
 *
 * lowerInitial('GroupId')
 *
 * // groupId
 */
function lowerInitial(str) {
  return str.replace(/^(\w)/, function (a, b) {
    return b === null || b === void 0 ? void 0 : b.toLowerCase();
  });
}
/**
 * 用大驼峰，即 PascalCase 格式，来格式化字符串
 * @param str 字符串
 * @returns PascalCase 的字符串
 *
 * @example
 * ```ts
 * pascalCase('ab-cd')
 * // AbCd
 *
 * pascalCase('ab_cd')
 * // AbCd
 * ```
 */
function pascalCase() {
  var str = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
  return capitalize(camelize(str));
}
var toPascal = pascalCase;

exports.camelize = camelize;
exports.capitalize = capitalize;
exports.hyphenate = hyphenate;
exports.lowerInitial = lowerInitial;
exports.pascalCase = pascalCase;
exports.titleize = titleize;
exports.toCamel = toCamel;
exports.toKebab = toKebab;
exports.toPascal = toPascal;
