Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add missing #__PURE__ annotations #1613

Merged
merged 2 commits into from
Nov 7, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .changeset/nine-mugs-care.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'@emotion/core': patch
'@emotion/is-prop-valid': patch
'@emotion/serialize': patch
---

Add missing `#__PURE__` annotations
94 changes: 47 additions & 47 deletions packages/core/src/class-names.js
Original file line number Diff line number Diff line change
Expand Up @@ -78,57 +78,57 @@ type Props = {
}) => React.Node
}

export const ClassNames: React.AbstractComponent<Props> = withEmotionCache(
(props, cache) => {
let rules = ''
let serializedHashes = ''
let hasRendered = false
export const ClassNames: React.AbstractComponent<
Props
> = /* #__PURE__ */ withEmotionCache((props, cache) => {
let rules = ''
let serializedHashes = ''
let hasRendered = false

let css = (...args: Array<any>) => {
if (hasRendered && process.env.NODE_ENV !== 'production') {
throw new Error('css can only be used during render')
}
let serialized = serializeStyles(args, cache.registered)
if (isBrowser) {
insertStyles(cache, serialized, false)
} else {
let res = insertStyles(cache, serialized, false)
if (res !== undefined) {
rules += res
}
}
if (!isBrowser) {
serializedHashes += ` ${serialized.name}`
}
return `${cache.key}-${serialized.name}`
let css = (...args: Array<any>) => {
if (hasRendered && process.env.NODE_ENV !== 'production') {
throw new Error('css can only be used during render')
}
let cx = (...args: Array<ClassNameArg>) => {
if (hasRendered && process.env.NODE_ENV !== 'production') {
throw new Error('cx can only be used during render')
let serialized = serializeStyles(args, cache.registered)
if (isBrowser) {
insertStyles(cache, serialized, false)
} else {
let res = insertStyles(cache, serialized, false)
if (res !== undefined) {
rules += res
}
return merge(cache.registered, css, classnames(args))
}
let content = {
css,
cx,
theme: useContext(ThemeContext)
if (!isBrowser) {
serializedHashes += ` ${serialized.name}`
}
let ele = props.children(content)
hasRendered = true
if (!isBrowser && rules.length !== 0) {
return (
<React.Fragment>
<style
{...{
[`data-emotion-${cache.key}`]: serializedHashes.substring(1),
dangerouslySetInnerHTML: { __html: rules },
nonce: cache.sheet.nonce
}}
/>
{ele}
</React.Fragment>
)
return `${cache.key}-${serialized.name}`
}
let cx = (...args: Array<ClassNameArg>) => {
if (hasRendered && process.env.NODE_ENV !== 'production') {
throw new Error('cx can only be used during render')
}
return ele
return merge(cache.registered, css, classnames(args))
}
let content = {
css,
cx,
theme: useContext(ThemeContext)
}
let ele = props.children(content)
hasRendered = true
if (!isBrowser && rules.length !== 0) {
return (
<React.Fragment>
<style
{...{
[`data-emotion-${cache.key}`]: serializedHashes.substring(1),
dangerouslySetInnerHTML: { __html: rules },
nonce: cache.sheet.nonce
}}
/>
{ele}
</React.Fragment>
)
}
)
return ele
})
4 changes: 3 additions & 1 deletion packages/is-prop-valid/src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,12 @@ declare var codegen: { require: string => RegExp }
const reactPropsRegex = codegen.require('./props')

// https://esbench.com/bench/5bfee68a4cd7e6009ef61d23
export default memoize(
const isPropValid = /* #__PURE__ */ memoize(
prop =>
reactPropsRegex.test(prop) ||
(prop.charCodeAt(0) === 111 /* o */ &&
prop.charCodeAt(1) === 110 /* n */ &&
prop.charCodeAt(2) < 91) /* Z+1 */
)

export default isPropValid
2 changes: 1 addition & 1 deletion packages/serialize/src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ let animationRegex = /_EMO_([^_]+?)_([^]*?)_EMO_/g
const isCustomProperty = (property: string) => property.charCodeAt(1) === 45
const isProcessableValue = value => value != null && typeof value !== 'boolean'

const processStyleName = memoize(
const processStyleName = /* #__PURE__ */ memoize(
(styleName: string) =>
isCustomProperty(styleName)
? styleName
Expand Down