jest-styled-components
Advanced tools
Comparing version 4.0.3 to 4.1.0-0
{ | ||
"name": "jest-styled-components", | ||
"version": "4.0.3", | ||
"version": "4.1.0-0", | ||
"description": "Jest utilities for Styled Components", | ||
@@ -5,0 +5,0 @@ "main": "./src/index.js", |
const css = require('css') | ||
const { getCSS } = require('./utils') | ||
const { getCSS, getHashes } = require('./utils') | ||
@@ -58,15 +58,24 @@ const getClassNames = node => { | ||
const replaceClassNames = (classNames, style, code) => { | ||
let index = 0 | ||
return classNames.reduce((acc, className) => { | ||
if (style.indexOf(className) > -1) { | ||
return acc.replace(new RegExp(className, 'g'), `c${index++}`) | ||
} | ||
const replaceClassNames = (classNames, style, result) => | ||
classNames | ||
.filter(className => style.includes(className)) | ||
.reduce( | ||
(acc, className, index) => | ||
acc.replace(new RegExp(className, 'g'), `c${index++}`), | ||
result | ||
) | ||
return acc.replace( | ||
new RegExp(`(className="[^"]*?)${className}\\s?([^"]*")`, 'g'), | ||
'$1$2' | ||
const replaceHashes = (classNames, hashes, result) => | ||
classNames | ||
.filter( | ||
className => className.startsWith('sc-') || hashes.includes(className) | ||
) | ||
}, `${style}${style ? '\n\n' : ''}${code}`) | ||
} | ||
.reduce( | ||
(acc, className) => | ||
acc.replace( | ||
new RegExp(`(className="[^"]*?)${className}\\s?([^"]*")`, 'g'), | ||
'$1$2' | ||
), | ||
result | ||
) | ||
@@ -86,4 +95,9 @@ const styleSheetSerializer = { | ||
const code = print(val) | ||
const hashes = getHashes() | ||
return classNames.length ? replaceClassNames(classNames, style, code) : code | ||
let result = `${style}${style ? '\n\n' : ''}${code}` | ||
result = replaceClassNames(classNames, style, result) | ||
result = replaceHashes(classNames, hashes, result) | ||
return result | ||
}, | ||
@@ -90,0 +104,0 @@ } |
@@ -5,4 +5,2 @@ const css = require('css') | ||
const STYLE_TAGS_REGEXP = /<style[^>]*>([^<]*)</g | ||
const isOverV2 = () => Boolean(ServerStyleSheet) | ||
@@ -18,33 +16,34 @@ | ||
const getStyle = html => { | ||
const getHTML = () => | ||
isServer() | ||
? new ServerStyleSheet().getStyleTags() | ||
: StyleSheet.default.instance.toHTML() | ||
const extract = regex => { | ||
let style = '' | ||
let matches | ||
while ((matches = STYLE_TAGS_REGEXP.exec(html)) !== null) { | ||
style += matches[1].trim() | ||
while ((matches = regex.exec(getHTML())) !== null) { | ||
style += `${matches[1]} ` | ||
} | ||
return style | ||
return style.trim() | ||
} | ||
const getStyle = () => extract(/<style[^>]*>([^<]*)</g) | ||
const getCSS = () => { | ||
let style | ||
const style = isOverV2() | ||
? getStyle() | ||
: StyleSheet.rules().map(rule => rule.cssText).join('\n') | ||
if (isOverV2()) { | ||
if (isServer()) { | ||
style = getStyle(new ServerStyleSheet().getStyleTags()) | ||
} else { | ||
style = getStyle(StyleSheet.default.instance.toHTML()) | ||
} | ||
} else { | ||
style = StyleSheet.rules().map(rule => rule.cssText).join('\n') | ||
} | ||
return css.parse(style) | ||
} | ||
const getHashes = () => extract(/data-styled-components="([^"]*)"/g) | ||
module.exports = { | ||
resetStyleSheet, | ||
getStyle, | ||
getHashes, | ||
getCSS, | ||
} |
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
17164
280
2