Some checks failed
CI/CD Pipeline / unit-tests (push) Failing after 1m16s
CI/CD Pipeline / integration-tests (push) Failing after 2m32s
CI/CD Pipeline / lint (push) Successful in 5m22s
CI/CD Pipeline / e2e-tests (push) Has been skipped
CI/CD Pipeline / build (push) Has been skipped
40 lines
1.3 KiB
JavaScript
40 lines
1.3 KiB
JavaScript
import { serializeStyles } from '@emotion/serialize'
|
|
|
|
// to anyone looking at this, this isn't intended to simplify every single case
|
|
// it's meant to simplify the most common cases so i don't want to make it especially complex
|
|
// also, this will be unnecessary when prepack is ready
|
|
export function simplifyObject(node, t /*: Object */) {
|
|
let finalString = ''
|
|
for (let i = 0; i < node.properties.length; i++) {
|
|
let property = node.properties[i]
|
|
|
|
if (
|
|
!t.isObjectProperty(property) ||
|
|
property.computed ||
|
|
(!t.isIdentifier(property.key) && !t.isStringLiteral(property.key)) ||
|
|
(!t.isStringLiteral(property.value) &&
|
|
!t.isNumericLiteral(property.value) &&
|
|
!t.isObjectExpression(property.value))
|
|
) {
|
|
return node
|
|
}
|
|
|
|
let key = property.key.name || property.key.value
|
|
if (key === 'styles') {
|
|
return node
|
|
}
|
|
if (t.isObjectExpression(property.value)) {
|
|
let simplifiedChild = simplifyObject(property.value, t)
|
|
if (!t.isStringLiteral(simplifiedChild)) {
|
|
return node
|
|
}
|
|
finalString += `${key}{${simplifiedChild.value}}`
|
|
continue
|
|
}
|
|
let value = property.value.value
|
|
|
|
finalString += serializeStyles([{ [key]: value }]).styles
|
|
}
|
|
return t.stringLiteral(finalString)
|
|
}
|