.gitignore added
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / stylelint / node_modules / camelcase / index.js
1 'use strict';
2
3 function preserveCamelCase(str) {
4         let isLastCharLower = false;
5         let isLastCharUpper = false;
6         let isLastLastCharUpper = false;
7
8         for (let i = 0; i < str.length; i++) {
9                 const c = str[i];
10
11                 if (isLastCharLower && /[a-zA-Z]/.test(c) && c.toUpperCase() === c) {
12                         str = str.substr(0, i) + '-' + str.substr(i);
13                         isLastCharLower = false;
14                         isLastLastCharUpper = isLastCharUpper;
15                         isLastCharUpper = true;
16                         i++;
17                 } else if (isLastCharUpper && isLastLastCharUpper && /[a-zA-Z]/.test(c) && c.toLowerCase() === c) {
18                         str = str.substr(0, i - 1) + '-' + str.substr(i - 1);
19                         isLastLastCharUpper = isLastCharUpper;
20                         isLastCharUpper = false;
21                         isLastCharLower = true;
22                 } else {
23                         isLastCharLower = c.toLowerCase() === c;
24                         isLastLastCharUpper = isLastCharUpper;
25                         isLastCharUpper = c.toUpperCase() === c;
26                 }
27         }
28
29         return str;
30 }
31
32 module.exports = function (str) {
33         if (arguments.length > 1) {
34                 str = Array.from(arguments)
35                         .map(x => x.trim())
36                         .filter(x => x.length)
37                         .join('-');
38         } else {
39                 str = str.trim();
40         }
41
42         if (str.length === 0) {
43                 return '';
44         }
45
46         if (str.length === 1) {
47                 return str.toLowerCase();
48         }
49
50         if (/^[a-z0-9]+$/.test(str)) {
51                 return str;
52         }
53
54         const hasUpperCase = str !== str.toLowerCase();
55
56         if (hasUpperCase) {
57                 str = preserveCamelCase(str);
58         }
59
60         return str
61                 .replace(/^[_.\- ]+/, '')
62                 .toLowerCase()
63                 .replace(/[_.\- ]+(\w|$)/g, (m, p1) => p1.toUpperCase());
64 };