1 | var toValueString = require('./toValueString')
|
2 | var helperStringSubstring = require('./helperStringSubstring')
|
3 | var helperStringLowerCase = require('./helperStringLowerCase')
|
4 |
|
5 | var kebabCacheMaps = {}
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 | function kebabCase (str) {
|
14 | str = toValueString(str)
|
15 | if (kebabCacheMaps[str]) {
|
16 | return kebabCacheMaps[str]
|
17 | }
|
18 | if (/^[A-Z]+$/.test(str)) {
|
19 | return helperStringLowerCase(str)
|
20 | }
|
21 | var rest = str.replace(/^([a-z])([A-Z]+)([a-z]+)$/, function (text, prevLower, upper, nextLower) {
|
22 | var upperLen = upper.length
|
23 | if (upperLen > 1) {
|
24 | return prevLower + '-' + helperStringLowerCase(helperStringSubstring(upper, 0, upperLen - 1)) + '-' + helperStringLowerCase(helperStringSubstring(upper, upperLen - 1, upperLen)) + nextLower
|
25 | }
|
26 | return helperStringLowerCase(prevLower + '-' + upper + nextLower)
|
27 | }).replace(/^([A-Z]+)([a-z]+)?$/, function (text, upper, nextLower) {
|
28 | var upperLen = upper.length
|
29 | return helperStringLowerCase(helperStringSubstring(upper, 0, upperLen - 1) + '-' + helperStringSubstring(upper, upperLen - 1, upperLen) + (nextLower || ''))
|
30 | }).replace(/([a-z]?)([A-Z]+)([a-z]?)/g, function (text, prevLower, upper, nextLower, index) {
|
31 | var upperLen = upper.length
|
32 | if (upperLen > 1) {
|
33 | if (prevLower) {
|
34 | prevLower += '-'
|
35 | }
|
36 | if (nextLower) {
|
37 | return (prevLower || '') + helperStringLowerCase(helperStringSubstring(upper, 0, upperLen - 1)) + '-' + helperStringLowerCase(helperStringSubstring(upper, upperLen - 1, upperLen)) + nextLower
|
38 | }
|
39 | }
|
40 | return (prevLower || '') + (index ? '-' : '') + helperStringLowerCase(upper) + (nextLower || '')
|
41 | })
|
42 | rest = rest.replace(/([-]+)/g, function (text, flag, index) {
|
43 | return index && index + flag.length < rest.length ? '-' : ''
|
44 | })
|
45 | kebabCacheMaps[str] = rest
|
46 | return rest
|
47 | }
|
48 |
|
49 | module.exports = kebabCase
|