Repository URL to install this package:
|
Version:
5.0.0-rc.5 ▾
|
import globby from 'globby';
import deepmerge from 'deepmerge';
import * as babel from '@babel/core';
import { promisify } from 'util';
const transformFile = promisify(babel.transformFile);
/**
* Extract translations from source code
*
* @module @doodle/i18n/disty/onesky/extract
*/
/**
* Extract react-intl's `defineMessages` message definition from Javascript file by parsing the AST
*
* @param {String} file
* @returns {Promise<object>}
* @async
*/
export const extractDefaultMessagesFromFile = async file => {
const { metadata = {} } = await transformFile(file, {
plugins: ['react-intl'],
});
const { messages = [] } = metadata['react-intl'];
return messages.reduce((extracted, message) => {
extracted[message.id] = message.defaultMessage;
return extracted;
}, {});
};
/**
* Extract react-intl's `defineMessages` message definitions from source files
*
* @param {string} sourcePattern
* @returns {Promise<object>}
* @async
*/
export const extractDefaultMessages = async sourcePattern => {
const files = await globby(`${sourcePattern}`);
const messagesArray = await Promise.all(files.map(extractDefaultMessagesFromFile));
return deepmerge.all(messagesArray);
};