UNPKG

i18next-scanner-esm

Version:

Scan your code, extract translation keys/values, and merge them into i18n resource files.

59 lines (48 loc) 1.56 kB
// Originally from: https://github.com/sderosiaux/acorn-jsx-walk import { simple as walk, base } from 'acorn-walk'; import { DynamicImportKey } from 'acorn-dynamic-import'; Object.assign(base, { FieldDefinition(node, state, callback) { if (node.value !== null) { callback(node.value, state); } }, // Workaround with `acorn` and `acorn-dynamic-import` // https://github.com/kristoferbaxter/dynamic-walk/blob/master/workaround.js [DynamicImportKey]: () => {}, }); // Extends acorn walk with JSX elements // https://github.com/RReverser/acorn-jsx/issues/23#issuecomment-403753801 Object.assign(base, { JSXAttribute(node, state, callback) { if (node.value !== null) { callback(node.value, state); } }, JSXElement(node, state, callback) { node.openingElement.attributes.forEach((attribute) => { callback(attribute, state); }); node.children.forEach((node) => { callback(node, state); }); }, JSXEmptyExpression(node, state, callback) { // Comments. Just ignore. }, JSXExpressionContainer(node, state, callback) { callback(node.expression, state); }, JSXFragment(node, state, callback) { node.children.forEach((node) => { callback(node, state); }); }, JSXSpreadAttribute(node, state, callback) { callback(node.argument, state); }, JSXText() {}, }); export default (ast, options) => { walk(ast, { ...options }); };