1/** 2 * @license 3 * Copyright (c) 2016, Contributors 4 * SPDX-License-Identifier: ISC 5 */ 6export function camelCase(str) { 7 // Handle the case where an argument is provided as camel case, e.g., fooBar. 8 // by ensuring that the string isn't already mixed case: 9 const isCamelCase = str !== str.toLowerCase() && str !== str.toUpperCase(); 10 if (!isCamelCase) { 11 str = str.toLowerCase(); 12 } 13 if (str.indexOf('-') === -1 && str.indexOf('_') === -1) { 14 return str; 15 } 16 else { 17 let camelcase = ''; 18 let nextChrUpper = false; 19 const leadingHyphens = str.match(/^-+/); 20 for (let i = leadingHyphens ? leadingHyphens[0].length : 0; i < str.length; i++) { 21 let chr = str.charAt(i); 22 if (nextChrUpper) { 23 nextChrUpper = false; 24 chr = chr.toUpperCase(); 25 } 26 if (i !== 0 && (chr === '-' || chr === '_')) { 27 nextChrUpper = true; 28 } 29 else if (chr !== '-' && chr !== '_') { 30 camelcase += chr; 31 } 32 } 33 return camelcase; 34 } 35} 36export function decamelize(str, joinString) { 37 const lowercase = str.toLowerCase(); 38 joinString = joinString || '-'; 39 let notCamelcase = ''; 40 for (let i = 0; i < str.length; i++) { 41 const chrLower = lowercase.charAt(i); 42 const chrString = str.charAt(i); 43 if (chrLower !== chrString && i > 0) { 44 notCamelcase += `${joinString}${lowercase.charAt(i)}`; 45 } 46 else { 47 notCamelcase += chrString; 48 } 49 } 50 return notCamelcase; 51} 52export function looksLikeNumber(x) { 53 if (x === null || x === undefined) 54 return false; 55 // if loaded from config, may already be a number. 56 if (typeof x === 'number') 57 return true; 58 // hexadecimal. 59 if (/^0x[0-9a-f]+$/i.test(x)) 60 return true; 61 // don't treat 0123 as a number; as it drops the leading '0'. 62 if (/^0[^.]/.test(x)) 63 return false; 64 return /^[-]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x); 65} 66