@@ -15,6 +15,24 @@ import modulesValues from 'postcss-modules-values';
1515import localByDefault from 'postcss-modules-local-by-default' ;
1616import extractImports from 'postcss-modules-extract-imports' ;
1717import modulesScope from 'postcss-modules-scope' ;
18+ import camelCase from 'camelcase' ;
19+
20+ function uniqWith ( array , comparator ) {
21+ return array . reduce (
22+ ( acc , d ) => ( ! acc . some ( ( item ) => comparator ( d , item ) ) ? [ ...acc , d ] : acc ) ,
23+ [ ]
24+ ) ;
25+ }
26+
27+ function flatten ( array ) {
28+ return array . reduce ( ( a , b ) => a . concat ( b ) , [ ] ) ;
29+ }
30+
31+ function dashesCamelCase ( str ) {
32+ return str . replace ( / - + ( \w ) / g, ( match , firstLetter ) =>
33+ firstLetter . toUpperCase ( )
34+ ) ;
35+ }
1836
1937function getImportPrefix ( loaderContext , importLoaders ) {
2038 if ( importLoaders === false ) {
@@ -236,6 +254,46 @@ function getModuleCode(result, sourceMap, onlyLocals) {
236254 ) } , ""${ sourceMap && result . map ? `,${ result . map } ` : '' } ]);\n`;
237255}
238256
257+ function getExportItemCode ( key , value , localsStyle ) {
258+ let targetKey ;
259+ const items = [ ] ;
260+
261+ function addEntry ( k ) {
262+ items . push ( `\t${ JSON . stringify ( k ) } : ${ JSON . stringify ( value ) } ` ) ;
263+ }
264+
265+ switch ( localsStyle ) {
266+ case 'camelCase' :
267+ addEntry ( key ) ;
268+ targetKey = camelCase ( key ) ;
269+
270+ if ( targetKey !== key ) {
271+ addEntry ( targetKey ) ;
272+ }
273+ break ;
274+ case 'camelCaseOnly' :
275+ addEntry ( camelCase ( key ) ) ;
276+ break ;
277+ case 'dashes' :
278+ addEntry ( key ) ;
279+ targetKey = dashesCamelCase ( key ) ;
280+
281+ if ( targetKey !== key ) {
282+ addEntry ( targetKey ) ;
283+ }
284+ break ;
285+ case 'dashesOnly' :
286+ addEntry ( dashesCamelCase ( key ) ) ;
287+ break ;
288+ case 'asIs' :
289+ default :
290+ addEntry ( key ) ;
291+ break ;
292+ }
293+
294+ return items . join ( ',\n' ) ;
295+ }
296+
239297function getExportCode ( exportItems , onlyLocals ) {
240298 if ( exportItems . length === 0 ) {
241299 return '' ;
@@ -317,6 +375,9 @@ function prepareCode(file, messages, loaderContext, importPrefix, onlyLocals) {
317375}
318376
319377export {
378+ uniqWith ,
379+ flatten ,
380+ dashesCamelCase ,
320381 getImportPrefix ,
321382 getLocalIdent ,
322383 getFilter ,
@@ -328,6 +389,7 @@ export {
328389 getApiCode ,
329390 getImportCode ,
330391 getModuleCode ,
392+ getExportItemCode ,
331393 getExportCode ,
332394 prepareCode ,
333395} ;
0 commit comments