Spaces:
Sleeping
Sleeping
pythonic-rag-FastAPIReact
/
frontend
/node_modules
/@emotion
/babel-plugin
/src
/utils
/transformer-macro.js
| import { createMacro } from 'babel-plugin-macros' | |
| /* | |
| type Transformer = Function | |
| */ | |
| export function createTransformerMacro( | |
| transformers /*: { [key: string]: Transformer | [Transformer, Object] } */, | |
| { importSource } /*: { importSource: string } */ | |
| ) { | |
| let macro = createMacro( | |
| ({ path, source, references, state, babel, isEmotionCall }) => { | |
| if (!path) { | |
| path = state.file.scope.path | |
| .get('body') | |
| .find(p => p.isImportDeclaration() && p.node.source.value === source) | |
| } | |
| if (/\/macro$/.test(source)) { | |
| path | |
| .get('source') | |
| .replaceWith( | |
| babel.types.stringLiteral(source.replace(/\/macro$/, '')) | |
| ) | |
| } | |
| if (!isEmotionCall) { | |
| state.emotionSourceMap = true | |
| } | |
| Object.keys(references).forEach(importSpecifierName => { | |
| if (transformers[importSpecifierName]) { | |
| references[importSpecifierName].reverse().forEach(reference => { | |
| let options | |
| let transformer | |
| if (Array.isArray(transformers[importSpecifierName])) { | |
| transformer = transformers[importSpecifierName][0] | |
| options = transformers[importSpecifierName][1] | |
| } else { | |
| transformer = transformers[importSpecifierName] | |
| options = {} | |
| } | |
| transformer({ | |
| state, | |
| babel, | |
| path, | |
| importSource, | |
| importSpecifierName, | |
| options, | |
| reference | |
| }) | |
| }) | |
| } | |
| }) | |
| return { keepImports: true } | |
| } | |
| ) | |
| macro.transformers = transformers | |
| return macro | |
| } | |