@@ -11,7 +11,12 @@ import {
11
11
browserslistToTargets ,
12
12
type SourceLocation as LightningSourceLocation ,
13
13
} from 'lightningcss' ;
14
- import { remapSourceLocation , relativePath } from '@parcel/utils' ;
14
+ import {
15
+ remapSourceLocation ,
16
+ relativePath ,
17
+ globToRegex ,
18
+ normalizeSeparators ,
19
+ } from '@parcel/utils' ;
15
20
import browserslist from 'browserslist' ;
16
21
import nullthrows from 'nullthrows' ;
17
22
import ThrowableDiagnostic , { errorToDiagnostic } from '@parcel/diagnostic' ;
@@ -21,7 +26,22 @@ export default (new Transformer({
21
26
let conf = await config . getConfigFrom ( options . projectRoot + '/index' , [ ] , {
22
27
packageKey : '@parcel/transformer-css' ,
23
28
} ) ;
24
- return conf ?. contents ;
29
+ let contents = conf ?. contents ;
30
+ if ( typeof contents ?. cssModules ?. include === 'string' ) {
31
+ contents . cssModules . include = [ globToRegex ( contents . cssModules . include ) ] ;
32
+ } else if ( Array . isArray ( contents ?. cssModules ?. include ) ) {
33
+ contents . cssModules . include = contents . cssModules . include . map ( include =>
34
+ typeof include === 'string' ? globToRegex ( include ) : include ,
35
+ ) ;
36
+ }
37
+ if ( typeof contents ?. cssModules ?. exclude === 'string' ) {
38
+ contents . cssModules . exclude = [ globToRegex ( contents . cssModules . exclude ) ] ;
39
+ } else if ( Array . isArray ( contents ?. cssModules ?. exclude ) ) {
40
+ contents . cssModules . exclude = contents . cssModules . exclude . map ( exclude =>
41
+ typeof exclude === 'string' ? globToRegex ( exclude ) : exclude ,
42
+ ) ;
43
+ }
44
+ return contents ;
25
45
} ,
26
46
async transform ( { asset, config, options, logger} ) {
27
47
// Normalize the asset's environment so that properties that only affect JS don't cause CSS to be duplicated.
@@ -59,12 +79,32 @@ export default (new Transformer({
59
79
asset . meta . cssModulesCompiled == null
60
80
) {
61
81
let cssModulesConfig = config ?. cssModules ;
62
- if (
63
- ( asset . isSource &&
64
- ( typeof cssModulesConfig === 'boolean' ||
65
- cssModulesConfig ?. global ) ) ||
66
- / \. m o d u l e \. / . test ( asset . filePath )
67
- ) {
82
+ let isCSSModule = / \. m o d u l e \. / . test ( asset . filePath ) ;
83
+ if ( asset . isSource ) {
84
+ let projectRootPath = path . relative (
85
+ options . projectRoot ,
86
+ asset . filePath ,
87
+ ) ;
88
+ if ( typeof cssModulesConfig === 'boolean' ) {
89
+ isCSSModule = true ;
90
+ } else if ( cssModulesConfig ?. include ) {
91
+ isCSSModule = cssModulesConfig . include . some ( include =>
92
+ include . test ( projectRootPath ) ,
93
+ ) ;
94
+ } else if ( cssModulesConfig ?. global ) {
95
+ isCSSModule = true ;
96
+ }
97
+
98
+ if (
99
+ cssModulesConfig ?. exclude ?. some ( exclude =>
100
+ exclude . test ( projectRootPath ) ,
101
+ )
102
+ ) {
103
+ isCSSModule = false ;
104
+ }
105
+ }
106
+
107
+ if ( isCSSModule ) {
68
108
if ( cssModulesConfig ?. dashedIdents && ! asset . isSource ) {
69
109
cssModulesConfig . dashedIdents = false ;
70
110
}
@@ -74,7 +114,9 @@ export default (new Transformer({
74
114
}
75
115
76
116
res = transform ( {
77
- filename : path . relative ( options . projectRoot , asset . filePath ) ,
117
+ filename : normalizeSeparators (
118
+ path . relative ( options . projectRoot , asset . filePath ) ,
119
+ ) ,
78
120
code,
79
121
cssModules,
80
122
analyzeDependencies : asset . meta . hasDependencies !== false ,
0 commit comments