UNPKG

@nutui/nutui-react

Version:

京东风格的轻量级移动端 React 组件库,支持一套代码生成 H5 和小程序

107 lines (106 loc) 4.23 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "camelCase", { enumerable: true, get: function() { return camelCase; } }); var _object_spread = require("@swc/helpers/_/_object_spread"); var UPPERCASE = RegExp("[\\p{Lu}]", "u"); var LOWERCASE = RegExp("[\\p{Ll}]", "u"); var LEADING_CAPITAL = RegExp("^[\\p{Lu}](?![\\p{Lu}])", "gu"); var IDENTIFIER = RegExp("([\\p{Alpha}\\p{N}_]|$)", "u"); var SEPARATORS = /[_.\- ]+/; var LEADING_SEPARATORS = new RegExp("^".concat(SEPARATORS.source)); var SEPARATORS_AND_IDENTIFIER = new RegExp(SEPARATORS.source + IDENTIFIER.source, 'gu'); var NUMBERS_AND_IDENTIFIER = new RegExp("\\d+".concat(IDENTIFIER.source), 'gu'); var preserveCamelCase = function preserveCamelCase(string, toLowerCase, toUpperCase) { var isLastCharLower = false; var isLastCharUpper = false; var isLastLastCharUpper = false; for(var index = 0; index < string.length; index++){ var character = string[index]; if (isLastCharLower && UPPERCASE.test(character)) { string = "".concat(string.slice(0, index), "-").concat(string.slice(index)); isLastCharLower = false; isLastLastCharUpper = isLastCharUpper; isLastCharUpper = true; index++; } else if (isLastCharUpper && isLastLastCharUpper && LOWERCASE.test(character)) { string = "".concat(string.slice(0, index - 1), "-").concat(string.slice(index - 1)); isLastLastCharUpper = isLastCharUpper; isLastCharUpper = false; isLastCharLower = true; } else { isLastCharLower = toLowerCase(character) === character && toUpperCase(character) !== character; isLastLastCharUpper = isLastCharUpper; isLastCharUpper = toUpperCase(character) === character && toLowerCase(character) !== character; } } return string; }; var preserveConsecutiveUppercase = function preserveConsecutiveUppercase(input, toLowerCase) { LEADING_CAPITAL.lastIndex = 0; return input.replace(LEADING_CAPITAL, function(m1) { return toLowerCase(m1); }); }; var postProcess = function postProcess(input, toUpperCase) { SEPARATORS_AND_IDENTIFIER.lastIndex = 0; NUMBERS_AND_IDENTIFIER.lastIndex = 0; return input.replace(SEPARATORS_AND_IDENTIFIER, function(_, identifier) { return toUpperCase(identifier); }).replace(NUMBERS_AND_IDENTIFIER, function(m) { return toUpperCase(m); }); }; var camelCase = function camelCase(input, options) { if (!(typeof input === 'string' || Array.isArray(input))) { throw new TypeError('Expected the input to be `string | string[]`'); } options = (0, _object_spread._)({ pascalCase: false, preserveConsecutiveUppercase: false }, options); if (Array.isArray(input)) { input = input.map(function(x) { return x.trim(); }).filter(function(x) { return x.length; }).join('-'); } else { input = input.trim(); } if (input.length === 0) { return ''; } var toLowerCase = options.locale === false ? function toLowerCase(string) { return string.toLowerCase(); } : function(string) { return string.toLocaleLowerCase(options.locale); }; var toUpperCase = options.locale === false ? function toUpperCase(string) { return string.toUpperCase(); } : function(string) { return string.toLocaleUpperCase(options.locale); }; if (input.length === 1) { if (SEPARATORS.test(input)) { return ''; } return options.pascalCase ? toUpperCase(input) : toLowerCase(input); } var hasUpperCase = input !== toLowerCase(input); if (hasUpperCase) { input = preserveCamelCase(input, toLowerCase, toUpperCase); } input = input.replace(LEADING_SEPARATORS, ''); input = options.preserveConsecutiveUppercase ? preserveConsecutiveUppercase(input, toLowerCase) : toLowerCase(input); if (options.pascalCase) { input = toUpperCase(input.charAt(0)) + input.slice(1); } return postProcess(input, toUpperCase); };