Skip to content

Commit 9ba7753

Browse files
author
Evan Jacobs
committed
fix detection of classnames when babel plugin is involved
1 parent ab9e728 commit 9ba7753

File tree

5 files changed

+97
-81
lines changed

5 files changed

+97
-81
lines changed

.babelrc

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
{
22
"presets": ["@babel/preset-env", "@babel/preset-react"],
3-
"plugins": ["@babel/plugin-proposal-object-rest-spread", "@babel/plugin-proposal-class-properties"]
3+
"plugins": [
4+
"babel-plugin-styled-components",
5+
"@babel/plugin-proposal-object-rest-spread",
6+
"@babel/plugin-proposal-class-properties"
7+
]
48
}

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
"@wojtekmaj/enzyme-adapter-react-17": "^0.6.5",
3636
"babel-core": "^7.0.0-bridge.0",
3737
"babel-jest": "^26.0.0",
38+
"babel-plugin-styled-components": "^2.0.1",
3839
"enzyme": "^3.6.0",
3940
"enzyme-adapter-preact-pure": "^3.3.0",
4041
"enzyme-to-json": "^3.3.1",

src/styleSheetSerializer.js

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
const css = require('css');
22
const { getCSS, getHashes } = require('./utils');
33

4-
let cache = new WeakSet()
4+
let cache = new WeakSet();
55
const getNodes = (node, nodes = []) => {
66
if (typeof node === 'object') {
77
nodes.push(node);
@@ -40,17 +40,19 @@ const getClassNames = (nodes) =>
4040
return classNames;
4141
}, new Set());
4242

43+
const isStyledClass = (className) => /^\.?(\w+(-|_))?sc-/.test(className);
44+
4345
const filterClassNames = (classNames, hashes) => classNames.filter((className) => hashes.includes(className));
4446
const filterUnreferencedClassNames = (classNames, hashes) =>
45-
classNames.filter((className) => className.startsWith('sc-') && !hashes.includes(className));
47+
classNames.filter((className) => isStyledClass(className) && !hashes.includes(className));
4648

4749
const includesClassNames = (classNames, selectors) =>
4850
classNames.some((className) => selectors.some((selector) => selector.includes(className)));
4951

5052
const includesUnknownClassNames = (classNames, selectors) =>
5153
!selectors
5254
.flatMap((selector) => selector.split(' '))
53-
.filter((chunk) => chunk.includes('sc-'))
55+
.filter((chunk) => isStyledClass(chunk))
5456
.every((chunk) => classNames.some((className) => chunk.includes(className)));
5557

5658
const filterRules = (classNames) => (rule) =>
@@ -110,12 +112,11 @@ const replaceHashes = (result, hashes) =>
110112

111113
const serializerOptionDefaults = {
112114
addStyles: true,
113-
classNameFormatter: (index) => `c${index}`
115+
classNameFormatter: (index) => `c${index}`,
114116
};
115117
let serializerOptions = serializerOptionDefaults;
116118

117119
module.exports = {
118-
119120
/**
120121
* Configure jest-styled-components/serializer
121122
*
@@ -124,7 +125,7 @@ module.exports = {
124125
setStyleSheetSerializerOptions(options = {}) {
125126
serializerOptions = {
126127
...serializerOptionDefaults,
127-
...options
128+
...options,
128129
};
129130
},
130131

@@ -152,7 +153,7 @@ module.exports = {
152153
const classNamesToReplace = getClassNamesFromSelectorsByHashes(classNames, hashes);
153154
const code = print(val);
154155

155-
let result = serializerOptions.addStyles ? `${style}${style ? '\n\n' : ''}${code}`: code;
156+
let result = serializerOptions.addStyles ? `${style}${style ? '\n\n' : ''}${code}` : code;
156157
result = stripUnreferencedClassNames(result, unreferencedClassNames);
157158
result = replaceClassNames(result, classNamesToReplace, style, serializerOptions.classNameFormatter);
158159
result = replaceHashes(result, hashes);

0 commit comments

Comments
 (0)