1 | /**
|
---|
2 | * @license
|
---|
3 | * Copyright (c) 2016, Contributors
|
---|
4 | * SPDX-License-Identifier: ISC
|
---|
5 | */
|
---|
6 | export 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 | }
|
---|
36 | export 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 | }
|
---|
52 | export 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 | }
|
---|