@@ -80,6 +80,68 @@ function camelCase(input) {
80
80
. replace ( / \d + ( [ \p{ Alpha} \p{ N} _ ] | $ ) / gu, ( m ) => m . toUpperCase ( ) ) ;
81
81
}
82
82
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
+
83
145
function escape ( string ) {
84
146
let output = "" ;
85
147
let counter = 0 ;
0 commit comments