blob: 929facb626c179a424ef1e8ae1d51beb6b2adf7b [file] [log] [blame]
Leo Repp58b9f112021-11-22 11:57:47 +01001'use strict';
2
3function preserveCamelCase(str) {
4 var isLastCharLower = false;
5
6 for (var i = 0; i < str.length; i++) {
7 var c = str.charAt(i);
8
9 if (isLastCharLower && (/[a-zA-Z]/).test(c) && c.toUpperCase() === c) {
10 str = str.substr(0, i) + '-' + str.substr(i);
11 isLastCharLower = false;
12 i++;
13 } else {
14 isLastCharLower = (c.toLowerCase() === c);
15 }
16 }
17
18 return str;
19}
20
21module.exports = function () {
22 var str = [].map.call(arguments, function (str) {
23 return str.trim();
24 }).filter(function (str) {
25 return str.length;
26 }).join('-');
27
28 if (!str.length) {
29 return '';
30 }
31
32 if (str.length === 1) {
33 return str;
34 }
35
36 if (!(/[_.\- ]+/).test(str)) {
37 if (str === str.toUpperCase()) {
38 return str.toLowerCase();
39 }
40
41 if (str[0] !== str[0].toLowerCase()) {
42 return str[0].toLowerCase() + str.slice(1);
43 }
44
45 return str;
46 }
47
48 str = preserveCamelCase(str);
49
50 return str
51 .replace(/^[_.\- ]+/, '')
52 .toLowerCase()
53 .replace(/[_.\- ]+(\w|$)/g, function (m, p1) {
54 return p1.toUpperCase();
55 });
56};