1
1
const css = require ( 'css' ) ;
2
2
const { getCSS, getHashes } = require ( './utils' ) ;
3
3
4
- let cache = new WeakSet ( )
4
+ let cache = new WeakSet ( ) ;
5
5
const getNodes = ( node , nodes = [ ] ) => {
6
6
if ( typeof node === 'object' ) {
7
7
nodes . push ( node ) ;
@@ -40,17 +40,19 @@ const getClassNames = (nodes) =>
40
40
return classNames ;
41
41
} , new Set ( ) ) ;
42
42
43
+ const isStyledClass = ( className ) => / ^ \. ? ( \w + ( - | _ ) ) ? s c - / . test ( className ) ;
44
+
43
45
const filterClassNames = ( classNames , hashes ) => classNames . filter ( ( className ) => hashes . includes ( className ) ) ;
44
46
const filterUnreferencedClassNames = ( classNames , hashes ) =>
45
- classNames . filter ( ( className ) => className . startsWith ( 'sc-' ) && ! hashes . includes ( className ) ) ;
47
+ classNames . filter ( ( className ) => isStyledClass ( className ) && ! hashes . includes ( className ) ) ;
46
48
47
49
const includesClassNames = ( classNames , selectors ) =>
48
50
classNames . some ( ( className ) => selectors . some ( ( selector ) => selector . includes ( className ) ) ) ;
49
51
50
52
const includesUnknownClassNames = ( classNames , selectors ) =>
51
53
! selectors
52
54
. flatMap ( ( selector ) => selector . split ( ' ' ) )
53
- . filter ( ( chunk ) => chunk . includes ( 'sc-' ) )
55
+ . filter ( ( chunk ) => isStyledClass ( chunk ) )
54
56
. every ( ( chunk ) => classNames . some ( ( className ) => chunk . includes ( className ) ) ) ;
55
57
56
58
const filterRules = ( classNames ) => ( rule ) =>
@@ -110,12 +112,11 @@ const replaceHashes = (result, hashes) =>
110
112
111
113
const serializerOptionDefaults = {
112
114
addStyles : true ,
113
- classNameFormatter : ( index ) => `c${ index } `
115
+ classNameFormatter : ( index ) => `c${ index } ` ,
114
116
} ;
115
117
let serializerOptions = serializerOptionDefaults ;
116
118
117
119
module . exports = {
118
-
119
120
/**
120
121
* Configure jest-styled-components/serializer
121
122
*
@@ -124,7 +125,7 @@ module.exports = {
124
125
setStyleSheetSerializerOptions ( options = { } ) {
125
126
serializerOptions = {
126
127
...serializerOptionDefaults ,
127
- ...options
128
+ ...options ,
128
129
} ;
129
130
} ,
130
131
@@ -152,7 +153,7 @@ module.exports = {
152
153
const classNamesToReplace = getClassNamesFromSelectorsByHashes ( classNames , hashes ) ;
153
154
const code = print ( val ) ;
154
155
155
- let result = serializerOptions . addStyles ? `${ style } ${ style ? '\n\n' : '' } ${ code } ` : code ;
156
+ let result = serializerOptions . addStyles ? `${ style } ${ style ? '\n\n' : '' } ${ code } ` : code ;
156
157
result = stripUnreferencedClassNames ( result , unreferencedClassNames ) ;
157
158
result = replaceClassNames ( result , classNamesToReplace , style , serializerOptions . classNameFormatter ) ;
158
159
result = replaceHashes ( result , hashes ) ;
0 commit comments