Skip to content

Commit e89c994

Browse files
committed
add CamelPascalToSnakeCase conversion
1 parent 97943f5 commit e89c994

File tree

2 files changed

+32
-27
lines changed

2 files changed

+32
-27
lines changed

Conversions/CamelPascalToSnakeCase.js

+23-20
Original file line numberDiff line numberDiff line change
@@ -5,37 +5,40 @@
55
*/
66

77
function camelPascalToSnakeCase(inputStr) {
8-
if (typeof inputStr !== "string") {
9-
throw new Error(`Expected string as input, found ${typeof inputStr}`);
8+
if (typeof inputStr !== 'string') {
9+
throw new Error(`Expected string as input, found ${typeof inputStr}`)
1010
}
1111

12-
let snakeStr = "";
13-
let lastCharWasLower = false;
12+
let snakeStr = ''
13+
let lastCharWasLower = false
1414

1515
for (let index = 0; index < inputStr.length; index++) {
16-
const char = inputStr[index];
16+
const char = inputStr[index]
1717

18-
if (/[A-Z]/.test(char) && (!lastCharWasLower || (index > 0 && /[a-z0-9]/.test(inputStr[index - 1])))) {
19-
if (index > 0 && inputStr[index - 1] !== "_") {
20-
snakeStr += "_";
21-
}
22-
snakeStr += char.toLowerCase();
23-
lastCharWasLower = false;
24-
} else if (/[a-z0-9]/.test(char)) {
25-
snakeStr += char;
26-
lastCharWasLower = /[a-z]/.test(char);
27-
} else {
28-
snakeStr += "_";
29-
lastCharWasLower = false;
18+
if (
19+
/[A-Z]/.test(char) &&
20+
(!lastCharWasLower || (index > 0 && /[a-z0-9]/.test(inputStr[index - 1])))
21+
) {
22+
if (index > 0 && inputStr[index - 1] !== '_') {
23+
snakeStr += '_'
3024
}
25+
snakeStr += char.toLowerCase()
26+
lastCharWasLower = false
27+
} else if (/[a-z0-9]/.test(char)) {
28+
snakeStr += char
29+
lastCharWasLower = /[a-z]/.test(char)
30+
} else {
31+
snakeStr += '_'
32+
lastCharWasLower = false
33+
}
3134
}
3235

3336
// Remove leading underscore
34-
if (snakeStr[0] === "_") {
35-
snakeStr = snakeStr.substring(1);
37+
if (snakeStr[0] === '_') {
38+
snakeStr = snakeStr.substring(1)
3639
}
3740

38-
return snakeStr;
41+
return snakeStr
3942
}
4043

4144
export { camelPascalToSnakeCase }
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { camelPascalToSnakeCase } from "../CamelPascalToSnakeCase";
1+
import { camelPascalToSnakeCase } from '../CamelPascalToSnakeCase'
22

33
describe('camelToSnakeCase', () => {
44
it.each([
@@ -7,12 +7,14 @@ describe('camelToSnakeCase', () => {
77
['123someRandom123String123', '123some_random123_string123'],
88
['123SomeRandom123String123', '123_some_random123_string123'],
99
['123SomeRandom123String123', '123_some_random123_string123'],
10-
['', ''],
10+
['', '']
1111
])('converts %s to snake_case %s', (input, expected) => {
12-
expect(camelPascalToSnakeCase(input)).toBe(expected);
13-
});
12+
expect(camelPascalToSnakeCase(input)).toBe(expected)
13+
})
1414

1515
it('throws an error when the input is not a string', () => {
16-
expect(() => camelPascalToSnakeCase(123)).toThrow('Expected string as input');
17-
});
18-
});
16+
expect(() => camelPascalToSnakeCase(123)).toThrow(
17+
'Expected string as input'
18+
)
19+
})
20+
})

0 commit comments

Comments
 (0)