@@ -15,6 +15,24 @@ import modulesValues from 'postcss-modules-values';
15
15
import localByDefault from 'postcss-modules-local-by-default' ;
16
16
import extractImports from 'postcss-modules-extract-imports' ;
17
17
import 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
+ }
18
36
19
37
function getImportPrefix ( loaderContext , importLoaders ) {
20
38
if ( importLoaders === false ) {
@@ -206,9 +224,8 @@ function getUrlItemCode(item, loaderContext) {
206
224
) } )${ hash ? ` + ${ hash } ` : '' } ${ needQuotes ? ', true' : '' } );`;
207
225
}
208
226
209
- function getApiCode ( loaderContext , sourceMap , importItems , moduleCode ) {
210
- // No imports and no module code
211
- if ( importItems . length === 0 && moduleCode . length === 0 ) {
227
+ function getApiCode ( loaderContext , sourceMap , onlyLocals ) {
228
+ if ( onlyLocals ) {
212
229
return '' ;
213
230
}
214
231
@@ -236,6 +253,46 @@ function getModuleCode(result, sourceMap, onlyLocals) {
236
253
) } , ""${ sourceMap && result . map ? `,${ result . map } ` : '' } ]);\n`;
237
254
}
238
255
256
+ function getExportItemCode ( key , value , localsStyle ) {
257
+ let targetKey ;
258
+ const items = [ ] ;
259
+
260
+ function addEntry ( k ) {
261
+ items . push ( `\t${ JSON . stringify ( k ) } : ${ JSON . stringify ( value ) } ` ) ;
262
+ }
263
+
264
+ switch ( localsStyle ) {
265
+ case 'camelCase' :
266
+ addEntry ( key ) ;
267
+ targetKey = camelCase ( key ) ;
268
+
269
+ if ( targetKey !== key ) {
270
+ addEntry ( targetKey ) ;
271
+ }
272
+ break ;
273
+ case 'camelCaseOnly' :
274
+ addEntry ( camelCase ( key ) ) ;
275
+ break ;
276
+ case 'dashes' :
277
+ addEntry ( key ) ;
278
+ targetKey = dashesCamelCase ( key ) ;
279
+
280
+ if ( targetKey !== key ) {
281
+ addEntry ( targetKey ) ;
282
+ }
283
+ break ;
284
+ case 'dashesOnly' :
285
+ addEntry ( dashesCamelCase ( key ) ) ;
286
+ break ;
287
+ case 'asIs' :
288
+ default :
289
+ addEntry ( key ) ;
290
+ break ;
291
+ }
292
+
293
+ return items . join ( ',\n' ) ;
294
+ }
295
+
239
296
function getExportCode ( exportItems , onlyLocals ) {
240
297
if ( exportItems . length === 0 ) {
241
298
return '' ;
@@ -317,6 +374,9 @@ function prepareCode(file, messages, loaderContext, importPrefix, onlyLocals) {
317
374
}
318
375
319
376
export {
377
+ uniqWith ,
378
+ flatten ,
379
+ dashesCamelCase ,
320
380
getImportPrefix ,
321
381
getLocalIdent ,
322
382
getFilter ,
@@ -328,6 +388,7 @@ export {
328
388
getApiCode ,
329
389
getImportCode ,
330
390
getModuleCode ,
391
+ getExportItemCode ,
331
392
getExportCode ,
332
393
prepareCode ,
333
394
} ;
0 commit comments