Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
@doodle/i18n / dist / src / onesky / extract.js
Size: Mime:
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,
};