Repository URL to install this package:
|
Version:
4.2.0 ▾
|
const globby = require('globby');
const deepmerge = require('deepmerge');
const babel = require('babel-core');
const { promisify } = require('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
*/
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
*/
const extractDefaultMessages = async sourcePattern => {
const files = await globby(`${sourcePattern}`);
const messagesArray = await Promise.all(files.map(extractDefaultMessagesFromFile));
return deepmerge.all(messagesArray);
};
module.exports = {
extractDefaultMessagesFromFile,
extractDefaultMessages,
};