@formatjs/cli-lib
Version:
Lib for CLI for formatjs.
46 lines (45 loc) • 1.52 kB
JavaScript
import { transform } from 'ember-template-recast';
function extractText(node, fileName, options) {
if (!options.onMsgExtracted)
return;
if (!options.overrideIdFn)
return;
if (node.path.type !== 'PathExpression')
return;
if (['format-message', 'formatMessage'].includes(node.path.original)) {
let [first, second] = node.params;
if (first.type !== 'StringLiteral')
return;
let message = first?.value;
let desc;
if (second?.type === 'StringLiteral') {
desc = second.value?.trim().replace(/\s+/gm, ' ');
}
let defaultMessage = message?.trim().replace(/\s+/gm, ' ');
let id = typeof options.overrideIdFn === 'string'
? options.overrideIdFn
: options.overrideIdFn(undefined, defaultMessage, desc, fileName);
options.onMsgExtracted(fileName, [
{
id: id,
defaultMessage: defaultMessage,
description: desc,
},
]);
}
}
export function parseFile(source, fileName, options) {
let visitor = function () {
return {
MustacheStatement(node) {
extractText(node, fileName, options);
},
SubExpression(node) {
extractText(node, fileName, options);
},
};
};
// SAFETY: ember-template-recast's types are out of date,
// but it does not affect runtime
transform(source, visitor);
}