Files
flights_web_raw/apps/angular/node_modules/babel-plugin-emotion/src/emotion-macro.js
T

51 lines
1.5 KiB
JavaScript

// @flow
import { transformExpressionWithStyles } from './utils'
import { addNamed } from '@babel/helper-module-imports'
import { createMacro } from 'babel-plugin-macros'
export let createEmotionMacro = (instancePath: string) =>
createMacro(function macro({ references, state, babel, isEmotionCall }) {
if (!isEmotionCall) {
state.emotionSourceMap = true
}
let t = babel.types
Object.keys(references).forEach(referenceKey => {
let isPure = true
let runtimeNode = addNamed(state.file.path, referenceKey, instancePath)
switch (referenceKey) {
case 'injectGlobal': {
isPure = false
}
// eslint-disable-next-line no-fallthrough
case 'css':
case 'keyframes': {
references[referenceKey].reverse().forEach(reference => {
const path = reference.parentPath
reference.replaceWith(t.cloneDeep(runtimeNode))
if (isPure) {
path.addComment('leading', '#__PURE__')
}
let node = transformExpressionWithStyles({
babel,
state,
path,
shouldLabel: true
})
if (node) {
path.node.arguments[0] = node
}
})
break
}
default: {
references[referenceKey].reverse().forEach(reference => {
reference.replaceWith(t.cloneDeep(runtimeNode))
})
}
}
})
})