const fs = require('node:fs') const path = require('node:path') const typescript = require('typescript') module.exports = { input: [ 'frontend/js/**/*.{js,jsx,ts,tsx}', 'modules/**/*.{js,jsx,ts,tsx}', '!frontend/js/vendor/**', ], output: './', options: { sort: true, func: { list: ['t', 'phrase'], extensions: ['.js', '.jsx'], }, trans: { component: 'Trans', i18nKey: 'i18nKey', defaultsKey: 'defaults', extensions: ['.js', '.jsx'], fallbackKey: false, }, resource: { savePath: 'frontend/extracted-translations.json', jsonIndent: 2, lineEnding: '\n', }, }, // adapted from https://github.com/nucleartux/i18next-scanner-typescript/blob/master/src/index.js transform: function (file, enc, done) { const { base, ext } = path.parse(file.path) if (['.ts', '.tsx'].includes(ext) && !base.endsWith('.d.ts')) { const content = fs.readFileSync(file.path, enc) const { outputText } = typescript.transpileModule(content, { compilerOptions: { target: 'es2018', jsx: 'preserve' }, fileName: base, }) this.parser.parseTransFromString(outputText) this.parser.parseFuncFromString(outputText) } done() }, }