@@ -10,7 +10,6 @@ import modulesValues from "postcss-modules-values";
1010import localByDefault from "postcss-modules-local-by-default" ;
1111import extractImports from "postcss-modules-extract-imports" ;
1212import modulesScope from "postcss-modules-scope" ;
13- import camelCase from "camelcase" ;
1413
1514const WEBPACK_IGNORE_COMMENT_REGEXP = / w e b p a c k I g n o r e : ( \s + ) ? ( t r u e | f a l s e ) / ;
1615
@@ -19,6 +18,68 @@ const regexSingleEscape = /[ -,.\/:-@[\]\^`{-~]/;
1918const regexExcessiveSpaces =
2019 / ( ^ | \\ + ) ? ( \\ [ A - F 0 - 9 ] { 1 , 6 } ) \x20 (? ! [ a - f A - F 0 - 9 \x20 ] ) / g;
2120
21+ const preserveCamelCase = ( string ) => {
22+ let result = string ;
23+ let isLastCharLower = false ;
24+ let isLastCharUpper = false ;
25+ let isLastLastCharUpper = false ;
26+
27+ for ( let i = 0 ; i < result . length ; i ++ ) {
28+ const character = result [ i ] ;
29+
30+ if ( isLastCharLower && / [ \p{ Lu} ] / u. test ( character ) ) {
31+ result = `${ result . slice ( 0 , i ) } -${ result . slice ( i ) } ` ;
32+ isLastCharLower = false ;
33+ isLastLastCharUpper = isLastCharUpper ;
34+ isLastCharUpper = true ;
35+ i += 1 ;
36+ } else if (
37+ isLastCharUpper &&
38+ isLastLastCharUpper &&
39+ / [ \p{ Ll} ] / u. test ( character )
40+ ) {
41+ result = `${ result . slice ( 0 , i - 1 ) } -${ result . slice ( i - 1 ) } ` ;
42+ isLastLastCharUpper = isLastCharUpper ;
43+ isLastCharUpper = false ;
44+ isLastCharLower = true ;
45+ } else {
46+ isLastCharLower =
47+ character . toLowerCase ( ) === character &&
48+ character . toUpperCase ( ) !== character ;
49+ isLastLastCharUpper = isLastCharUpper ;
50+ isLastCharUpper =
51+ character . toUpperCase ( ) === character &&
52+ character . toLowerCase ( ) !== character ;
53+ }
54+ }
55+
56+ return result ;
57+ } ;
58+
59+ function camelCase ( input ) {
60+ let result = input . trim ( ) ;
61+
62+ if ( result . length === 0 ) {
63+ return "" ;
64+ }
65+
66+ if ( result . length === 1 ) {
67+ return result . toLowerCase ( ) ;
68+ }
69+
70+ const hasUpperCase = result !== result . toLowerCase ( ) ;
71+
72+ if ( hasUpperCase ) {
73+ result = preserveCamelCase ( result ) ;
74+ }
75+
76+ return result
77+ . replace ( / ^ [ _ . \- ] + / , "" )
78+ . toLowerCase ( )
79+ . replace ( / [ _ . \- ] + ( [ \p{ Alpha} \p{ N} _ ] | $ ) / gu, ( _ , p1 ) => p1 . toUpperCase ( ) )
80+ . replace ( / \d + ( [ \p{ Alpha} \p{ N} _ ] | $ ) / gu, ( m ) => m . toUpperCase ( ) ) ;
81+ }
82+
2283function escape ( string ) {
2384 let output = "" ;
2485 let counter = 0 ;
@@ -881,4 +942,5 @@ export {
881942 sort ,
882943 WEBPACK_IGNORE_COMMENT_REGEXP ,
883944 combineRequests ,
945+ camelCase ,
884946} ;
0 commit comments