Spaces:
Sleeping
Sleeping
pythonic-rag-FastAPIReact
/
frontend
/node_modules
/@emotion
/babel-plugin
/src
/utils
/transpiled-output-utils.js
| // this only works correctly in modules, but we don't run on scripts anyway, so it's fine | |
| // the difference is that in modules template objects are being cached per call site | |
| export function getTypeScriptMakeTemplateObjectPath(path) { | |
| if (path.node.arguments.length === 0) { | |
| return null | |
| } | |
| const firstArgPath = path.get('arguments')[0] | |
| if ( | |
| firstArgPath.isLogicalExpression() && | |
| firstArgPath.get('left').isIdentifier() && | |
| firstArgPath.get('right').isAssignmentExpression() && | |
| firstArgPath.get('right.right').isCallExpression() && | |
| firstArgPath.get('right.right.callee').isIdentifier() && | |
| firstArgPath.node.right.right.callee.name.includes('makeTemplateObject') && | |
| firstArgPath.node.right.right.arguments.length === 2 | |
| ) { | |
| return firstArgPath.get('right.right') | |
| } | |
| return null | |
| } | |
| // this is only used to prevent appending strings/expressions to arguments incorectly | |
| // we could push them to found array expressions, as we do it for TS-transpile output ¯\_(ツ)_/¯ | |
| // it seems overly complicated though - mainly because we'd also have to check against existing stuff of a particular type (source maps & labels) | |
| // considering Babel double-transpilation as a valid use case seems rather far-fetched | |
| export function isTaggedTemplateTranspiledByBabel(path) { | |
| if (path.node.arguments.length === 0) { | |
| return false | |
| } | |
| const firstArgPath = path.get('arguments')[0] | |
| if ( | |
| !firstArgPath.isCallExpression() || | |
| !firstArgPath.get('callee').isIdentifier() | |
| ) { | |
| return false | |
| } | |
| const calleeName = firstArgPath.node.callee.name | |
| if (!calleeName.includes('templateObject')) { | |
| return false | |
| } | |
| const bindingPath = path.scope.getBinding(calleeName).path | |
| if (!bindingPath.isFunction()) { | |
| return false | |
| } | |
| const functionBody = bindingPath.get('body.body') | |
| if (!functionBody[0].isVariableDeclaration()) { | |
| return false | |
| } | |
| const declarationInit = functionBody[0].get('declarations')[0].get('init') | |
| if (!declarationInit.isCallExpression()) { | |
| return false | |
| } | |
| const declarationInitArguments = declarationInit.get('arguments') | |
| if ( | |
| declarationInitArguments.length === 0 || | |
| declarationInitArguments.length > 2 || | |
| declarationInitArguments.some(argPath => !argPath.isArrayExpression()) | |
| ) { | |
| return false | |
| } | |
| return true | |
| } | |