-
Notifications
You must be signed in to change notification settings - Fork 934
/
Copy pathensure-case.js
34 lines (31 loc) · 929 Bytes
/
ensure-case.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import {camelCase, kebabCase, snakeCase, upperFirst, startCase} from 'lodash';
export default ensureCase;
function ensureCase(raw = '', target = 'lowercase') {
const input = String(raw);
switch (target) {
case 'camel-case':
return camelCase(input) === input;
case 'kebab-case':
return kebabCase(input) === input;
case 'snake-case':
return snakeCase(input) === input;
case 'pascal-case':
return upperFirst(camelCase(input)) === input;
case 'start-case':
return startCase(input) === input;
case 'upper-case':
case 'uppercase':
return input.toUpperCase() === input;
case 'sentence-case':
case 'sentencecase':
return (
ensureCase(raw.charAt(0), 'upper-case') &&
ensureCase(raw.substring(1), 'lower-case')
);
case 'lower-case':
case 'lowercase':
return input.toLowerCase() === input;
default:
throw new TypeError(`ensure-case: Unknown target case "${target}"`);
}
}