1
+ 'use strict' ;
2
+
3
+ var _slicedToArray = function ( ) { function sliceIterator ( arr , i ) { var _arr = [ ] ; var _n = true ; var _d = false ; var _e = undefined ; try { for ( var _i = arr [ Symbol . iterator ] ( ) , _s ; ! ( _n = ( _s = _i . next ( ) ) . done ) ; _n = true ) { _arr . push ( _s . value ) ; if ( i && _arr . length === i ) break ; } } catch ( err ) { _d = true ; _e = err ; } finally { try { if ( ! _n && _i [ "return" ] ) _i [ "return" ] ( ) ; } finally { if ( _d ) throw _e ; } } return _arr ; } return function ( arr , i ) { if ( Array . isArray ( arr ) ) { return arr ; } else if ( Symbol . iterator in Object ( arr ) ) { return sliceIterator ( arr , i ) ; } else { throw new TypeError ( "Invalid attempt to destructure non-iterable instance" ) ; } } ; } ( ) ;
4
+
5
+ var _cssLoader = require ( 'css-loader' ) ;
6
+
7
+ var _cssLoader2 = _interopRequireDefault ( _cssLoader ) ;
8
+
9
+ var _locals = require ( 'css-loader/locals' ) ;
10
+
11
+ var _locals2 = _interopRequireDefault ( _locals ) ;
12
+
13
+ var _loaderUtils = require ( 'loader-utils' ) ;
14
+
15
+ var _loaderUtils2 = _interopRequireDefault ( _loaderUtils ) ;
16
+
17
+ require ( 'colour' ) ;
18
+
19
+ var _cssModuleToInterface = require ( './cssModuleToInterface' ) ;
20
+
21
+ var _persist = require ( './persist' ) ;
22
+
23
+ var persist = _interopRequireWildcard ( _persist ) ;
24
+
25
+ var _logger = require ( './logger' ) ;
26
+
27
+ var _logger2 = _interopRequireDefault ( _logger ) ;
28
+
29
+ function _interopRequireWildcard ( obj ) { if ( obj && obj . __esModule ) { return obj ; } else { var newObj = { } ; if ( obj != null ) { for ( var key in obj ) { if ( Object . prototype . hasOwnProperty . call ( obj , key ) ) newObj [ key ] = obj [ key ] ; } } newObj . default = obj ; return newObj ; } }
30
+
31
+ function _interopRequireDefault ( obj ) { return obj && obj . __esModule ? obj : { default : obj } ; }
32
+
33
+ function _toConsumableArray ( arr ) { if ( Array . isArray ( arr ) ) { for ( var i = 0 , arr2 = Array ( arr . length ) ; i < arr . length ; i ++ ) { arr2 [ i ] = arr [ i ] ; } return arr2 ; } else { return Array . from ( arr ) ; } }
34
+
35
+ function delegateToCssLoader ( ctx , input , callback ) {
36
+ ctx . async = function ( ) {
37
+ return callback ;
38
+ } ;
39
+ _cssLoader2 . default . call . apply ( _cssLoader2 . default , [ ctx ] . concat ( _toConsumableArray ( input ) ) ) ;
40
+ }
41
+
42
+ module . exports = function ( ) {
43
+ var _this = this ;
44
+
45
+ for ( var _len = arguments . length , input = Array ( _len ) , _key = 0 ; _key < _len ; _key ++ ) {
46
+ input [ _key ] = arguments [ _key ] ;
47
+ }
48
+
49
+ if ( this . cacheable ) this . cacheable ( ) ;
50
+
51
+ // mock async step 1 - css loader is async, we need to intercept this so we get async ourselves
52
+ var callback = this . async ( ) ;
53
+
54
+ var query = _loaderUtils2 . default . parseQuery ( this . query ) ;
55
+ var logger = ( 0 , _logger2 . default ) ( query . silent ) ;
56
+
57
+ var moduleMode = query . modules || query . module ;
58
+ if ( ! moduleMode ) {
59
+ logger ( 'warn' , 'Typings for CSS-Modules: option `modules` is not active - skipping extraction work...' . red ) ;
60
+ return delegateToCssLoader ( this , input , callback ) ;
61
+ }
62
+
63
+ // mock async step 2 - offer css loader a "fake" callback
64
+ this . async = function ( ) {
65
+ return function ( err , content ) {
66
+ if ( err ) {
67
+ return callback ( err ) ;
68
+ }
69
+ var filename = _this . resourcePath ;
70
+ var cssModuleInterfaceFilename = ( 0 , _cssModuleToInterface . filenameToTypingsFilename ) ( filename ) ;
71
+
72
+ var keyRegex = / " ( [ ^ \\ " ] + ) " : / g;
73
+ var match = void 0 ;
74
+ var cssModuleKeys = [ ] ;
75
+
76
+ while ( match = keyRegex . exec ( content ) ) {
77
+ if ( cssModuleKeys . indexOf ( match [ 1 ] ) < 0 ) {
78
+ cssModuleKeys . push ( match [ 1 ] ) ;
79
+ }
80
+ }
81
+
82
+ var cssModuleDefinition = void 0 ;
83
+ if ( ! query . namedExport ) {
84
+ cssModuleDefinition = ( 0 , _cssModuleToInterface . generateGenericExportInterface ) ( cssModuleKeys , filename ) ;
85
+ } else {
86
+ var _filterNonWordClasses = ( 0 , _cssModuleToInterface . filterNonWordClasses ) ( cssModuleKeys ) ,
87
+ _filterNonWordClasses2 = _slicedToArray ( _filterNonWordClasses , 2 ) ,
88
+ cleanedDefinitions = _filterNonWordClasses2 [ 0 ] ,
89
+ skippedDefinitions = _filterNonWordClasses2 [ 1 ] ;
90
+
91
+ if ( skippedDefinitions . length > 0 && ! query . camelCase ) {
92
+ logger ( 'warn' , ( 'Typings for CSS-Modules: option \'namedExport\' was set but \'camelCase\' for the css-loader not.\nThe following classes will not be available as named exports:\n' + skippedDefinitions . map ( function ( sd ) {
93
+ return ' - "' + sd + '"' ;
94
+ } ) . join ( '\n' ) . red + '\n' ) . yellow ) ;
95
+ }
96
+
97
+ var _filterReservedWordCl = ( 0 , _cssModuleToInterface . filterReservedWordClasses ) ( cleanedDefinitions ) ,
98
+ _filterReservedWordCl2 = _slicedToArray ( _filterReservedWordCl , 2 ) ,
99
+ nonReservedWordDefinitions = _filterReservedWordCl2 [ 0 ] ,
100
+ reservedWordDefinitions = _filterReservedWordCl2 [ 1 ] ;
101
+
102
+ if ( reservedWordDefinitions . length > 0 ) {
103
+ logger ( 'warn' , ( 'Your css contains classes which are reserved words in JavaScript.\nConsequently the following classes will not be available as named exports:\n' + reservedWordDefinitions . map ( function ( rwd ) {
104
+ return ' - "' + rwd + '"' ;
105
+ } ) . join ( '\n' ) . red + '\nThese can be accessed using the object literal syntax; eg styles[\'delete\'] instead of styles.delete.\n' ) . yellow ) ;
106
+ }
107
+
108
+ cssModuleDefinition = ( 0 , _cssModuleToInterface . generateNamedExports ) ( nonReservedWordDefinitions ) ;
109
+ }
110
+ if ( cssModuleDefinition . trim ( ) === '' ) {
111
+ // Ensure empty CSS modules export something
112
+ cssModuleDefinition = 'export {};\n' ;
113
+ }
114
+ if ( query . banner ) {
115
+ // Prefix banner to CSS module
116
+ cssModuleDefinition = query . banner + '\n' + cssModuleDefinition ;
117
+ }
118
+ persist . writeToFileIfChanged ( cssModuleInterfaceFilename , cssModuleDefinition , query ) ;
119
+ // mock async step 3 - make `async` return the actual callback again before calling the 'real' css-loader
120
+ delegateToCssLoader ( _this , input , callback ) ;
121
+ } ;
122
+ } ;
123
+ _locals2 . default . call . apply ( _locals2 . default , [ this ] . concat ( input ) ) ;
124
+ } ;
0 commit comments