61 lines
1.9 KiB
JavaScript
Executable File
61 lines
1.9 KiB
JavaScript
Executable File
import {
|
|
getTypeScriptMakeTemplateObjectPath,
|
|
isTaggedTemplateTranspiledByBabel
|
|
} from './transpiled-output-utils'
|
|
|
|
export const appendStringReturningExpressionToArguments = (
|
|
t,
|
|
path,
|
|
expression
|
|
) => {
|
|
let lastIndex = path.node.arguments.length - 1
|
|
let last = path.node.arguments[lastIndex]
|
|
if (t.isStringLiteral(last)) {
|
|
if (typeof expression === 'string') {
|
|
path.node.arguments[lastIndex].value += expression
|
|
} else {
|
|
path.node.arguments[lastIndex] = t.binaryExpression('+', last, expression)
|
|
}
|
|
} else {
|
|
const makeTemplateObjectCallPath = getTypeScriptMakeTemplateObjectPath(path)
|
|
|
|
if (makeTemplateObjectCallPath) {
|
|
makeTemplateObjectCallPath.get('arguments').forEach(argPath => {
|
|
const elements = argPath.get('elements')
|
|
const lastElement = elements[elements.length - 1]
|
|
if (typeof expression === 'string') {
|
|
lastElement.replaceWith(
|
|
t.stringLiteral(lastElement.node.value + expression)
|
|
)
|
|
} else {
|
|
lastElement.replaceWith(
|
|
t.binaryExpression('+', lastElement.node, t.cloneNode(expression))
|
|
)
|
|
}
|
|
})
|
|
} else if (!isTaggedTemplateTranspiledByBabel(path)) {
|
|
if (typeof expression === 'string') {
|
|
path.node.arguments.push(t.stringLiteral(expression))
|
|
} else {
|
|
path.node.arguments.push(expression)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
export const joinStringLiterals = (expressions /*: Array<*> */, t) => {
|
|
return expressions.reduce((finalExpressions, currentExpression, i) => {
|
|
if (!t.isStringLiteral(currentExpression)) {
|
|
finalExpressions.push(currentExpression)
|
|
} else if (
|
|
t.isStringLiteral(finalExpressions[finalExpressions.length - 1])
|
|
) {
|
|
finalExpressions[finalExpressions.length - 1].value +=
|
|
currentExpression.value
|
|
} else {
|
|
finalExpressions.push(currentExpression)
|
|
}
|
|
return finalExpressions
|
|
}, [])
|
|
}
|