Skip to content

Commit 8a0c87b

Browse files
refactor: removed camelCase package from dependencies (webpack-contrib#1301)
1 parent 9940384 commit 8a0c87b

File tree

1 file changed

+62
-0
lines changed

1 file changed

+62
-0
lines changed

src/utils.js

+62
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,68 @@ function camelCase(input) {
8080
.replace(/\d+([\p{Alpha}\p{N}_]|$)/gu, (m) => m.toUpperCase());
8181
}
8282

83+
const preserveCamelCase = (string) => {
84+
let result = string;
85+
let isLastCharLower = false;
86+
let isLastCharUpper = false;
87+
let isLastLastCharUpper = false;
88+
89+
for (let i = 0; i < result.length; i++) {
90+
const character = result[i];
91+
92+
if (isLastCharLower && /[\p{Lu}]/u.test(character)) {
93+
result = `${result.slice(0, i)}-${result.slice(i)}`;
94+
isLastCharLower = false;
95+
isLastLastCharUpper = isLastCharUpper;
96+
isLastCharUpper = true;
97+
i += 1;
98+
} else if (
99+
isLastCharUpper &&
100+
isLastLastCharUpper &&
101+
/[\p{Ll}]/u.test(character)
102+
) {
103+
result = `${result.slice(0, i - 1)}-${result.slice(i - 1)}`;
104+
isLastLastCharUpper = isLastCharUpper;
105+
isLastCharUpper = false;
106+
isLastCharLower = true;
107+
} else {
108+
isLastCharLower =
109+
character.toLowerCase() === character &&
110+
character.toUpperCase() !== character;
111+
isLastLastCharUpper = isLastCharUpper;
112+
isLastCharUpper =
113+
character.toUpperCase() === character &&
114+
character.toLowerCase() !== character;
115+
}
116+
}
117+
118+
return result;
119+
};
120+
121+
function camelCase(input) {
122+
let result = input.trim();
123+
124+
if (result.length === 0) {
125+
return "";
126+
}
127+
128+
if (result.length === 1) {
129+
return result.toLowerCase();
130+
}
131+
132+
const hasUpperCase = result !== result.toLowerCase();
133+
134+
if (hasUpperCase) {
135+
result = preserveCamelCase(result);
136+
}
137+
138+
return result
139+
.replace(/^[_.\- ]+/, "")
140+
.toLowerCase()
141+
.replace(/[_.\- ]+([\p{Alpha}\p{N}_]|$)/gu, (_, p1) => p1.toUpperCase())
142+
.replace(/\d+([\p{Alpha}\p{N}_]|$)/gu, (m) => m.toUpperCase());
143+
}
144+
83145
function escape(string) {
84146
let output = "";
85147
let counter = 0;

0 commit comments

Comments
 (0)