Repository URL to install this package:
|
Version:
0.0.130 ▾
|
const fs = require('fs');
const chalk = require('chalk');
const _ = require('lodash');
const babel = require('babel-core');
const onesky = require('onesky-utils');
const glob = require('glob');
const processMessages = require('./processMessages');
const supportedLocales = require('./locales.json');
// eslint-disable-next-line no-unused-vars
const defaultLocales = Object.entries(supportedLocales).map(([locale, label]) => locale);
/**
* Helpers
*/
const log = (color, ...args) => {
console.log(chalk[color](...args));
};
const curryedLog = color => (...args) => log(color, ...args);
const logSuccess = curryedLog('green');
const logError = curryedLog('red');
/**
* Require and read config files
*/
const requireEnvVariables = () => {
if (!fs.existsSync('.env')) {
logError('Unable to find a .env file with Onesky API keys...');
return false;
}
// eslint-disable-next-line global-require
require('dotenv').config();
return true;
};
const getOneskyConfig = () => {
let oneskyConfig = null;
try {
oneskyConfig = JSON.parse(fs.readFileSync('.oneskyrc', 'utf8'));
} catch (e) {
logError('Unable to read .oneskyrc config file...');
}
return oneskyConfig;
};
/**
* Upload messages to Onesky
*/
const uploadMessages = (srcPath = './src') => {
if (!requireEnvVariables()) {
return;
}
const oneskyConfig = getOneskyConfig();
if (!oneskyConfig) {
return;
}
const translations = {};
glob(`${srcPath}/**/messages.js`, (err, files) => {
if (!err) {
files.forEach(file => {
const babelTransform = babel.transformFileSync(file, {
plugins: ['react-intl'],
});
const messages = _.get(babelTransform, 'metadata[react-intl].messages');
if (messages) {
messages.forEach(message => {
translations[message.id] = message.defaultMessage;
});
}
});
const oneskyOptions = Object.assign(oneskyConfig, {
secret: process.env.ONESKY_SECRET_KEY,
apiKey: process.env.ONESKY_PUBLIC_KEY,
content: JSON.stringify(translations),
language: 'en',
});
onesky
.postFile(oneskyOptions)
.then(content => {
logSuccess(content);
})
.catch(error => {
logError('An error occured while uploading translations to onesky:', error.message);
});
} else {
logError('An error occured while reading messages files:', err);
}
});
};
/**
* Download messages from Onesky
*/
const downloadTranslations = (oneskyConfig, i18nPath, language) => {
const oneskyOptions = Object.assign(oneskyConfig, {
secret: process.env.ONESKY_SECRET_KEY,
apiKey: process.env.ONESKY_PUBLIC_KEY,
language: 'en',
});
onesky
.getFile(oneskyOptions)
.then(content => {
const messages = processMessages.reduce(JSON.parse(content));
fs.writeFile(`${i18nPath}/${language}.json`, JSON.stringify(messages), err => {
if (err) {
logError(`An error occurred while writing ${language} translations file`, err);
return;
}
logSuccess(`Downloaded ${language} translations`);
});
})
.catch(error => {
logError(`An error occured while downloading ${language} translations from onesky:`, error.message);
});
};
const downloadMessages = (locales = defaultLocales, i18nPath = './i18n') => {
if (!requireEnvVariables()) {
return;
}
const oneskyConfig = getOneskyConfig();
if (!oneskyConfig) {
return;
}
locales.forEach(language => {
downloadTranslations(oneskyConfig, i18nPath, language);
});
};
/**
* Exports
*/
module.exports = {
uploadMessages,
downloadMessages,
};