Repository URL to install this package:
|
Version:
6.1.0 ▾
|
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.uploadTranslationFiles = exports.updateTranslationFiles = exports.updateTranslationFile = exports.downloadMergedTranslationFiles = exports.getMergedProjectTranslations = exports.getProjectTranslations = void 0;
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _deepmerge = _interopRequireDefault(require("deepmerge"));
var _extract = require("./extract");
var _api = require("./api");
var _transform = require("./transform");
var _utils = require("./utils");
var _diff = require("./diff");
/**
* Manage translations for OneSky
*
* @module @doodle/i18n/disty/onesky/translations
*/
/**
* Download translations from a OneSky project for all defined languages in the project
*
* @param {string} projectId
* @param {OneSkyCredentials} credentials
* @returns {Promise<object>}
* @async
*/
var getProjectTranslations = /*#__PURE__*/function () {
var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(projectId, credentials) {
var projectLanguages, languageCodes, projectMessages;
return _regenerator.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.next = 2;
return (0, _api.getProjectLanguages)(projectId, credentials);
case 2:
projectLanguages = _context.sent;
languageCodes = projectLanguages.map(function (_ref2) {
var code = _ref2.code;
return code;
});
_context.next = 6;
return Promise.all(languageCodes.map(function (language) {
return (0, _api.getProjectMessagesByLanguage)({
projectId: projectId,
language: language
}, credentials);
}));
case 6:
projectMessages = _context.sent;
return _context.abrupt("return", projectMessages.reduce(function (result, messages, index) {
result[languageCodes[index]] = (0, _transform.unflatten)(messages);
return result;
}, {}));
case 8:
case "end":
return _context.stop();
}
}
}, _callee);
}));
return function getProjectTranslations(_x, _x2) {
return _ref.apply(this, arguments);
};
}();
/**
* Download translations from multiple OneSky projects for all defined languages
* in the respective projects and combine the message translations
*
* @param {string[]} projectIds
* @param {OneSkyCredentials} credentials
* @returns {Promise<object>}
* @async
*/
exports.getProjectTranslations = getProjectTranslations;
var getMergedProjectTranslations = /*#__PURE__*/function () {
var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(projectIds, credentials) {
var errors, projectsTranslations;
return _regenerator.default.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
errors = {};
_context2.next = 3;
return Promise.all(projectIds.map(function (projectId) {
return getProjectTranslations(projectId, credentials).catch(function (error) {
errors[projectId] = error;
});
}));
case 3:
projectsTranslations = _context2.sent;
if (!Object.keys(errors).length) {
_context2.next = 6;
break;
}
throw new Error(JSON.stringify(errors));
case 6:
return _context2.abrupt("return", _deepmerge.default.all(projectsTranslations));
case 7:
case "end":
return _context2.stop();
}
}
}, _callee2);
}));
return function getMergedProjectTranslations(_x3, _x4) {
return _ref3.apply(this, arguments);
};
}();
/**
* Download all translations from multiple OneSky projects and write them to JSON files by language
*
* @param {string[]} projectIds
* @param {string} targetPath
* @param {OneSkyCredentials} credentials
* @returns {Promise<object>}
* @async
*/
exports.getMergedProjectTranslations = getMergedProjectTranslations;
var downloadMergedTranslationFiles = /*#__PURE__*/function () {
var _ref4 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(projectIds, targetPath, credentials) {
var combinedTranslations;
return _regenerator.default.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
_context3.next = 2;
return getMergedProjectTranslations(projectIds, credentials);
case 2:
combinedTranslations = _context3.sent;
_context3.next = 5;
return Promise.all(Object.keys(combinedTranslations).map(function (language) {
return (0, _utils.writeJsonFile)("".concat(targetPath, "/").concat(language, ".json"), combinedTranslations[language]);
}));
case 5:
return _context3.abrupt("return", combinedTranslations);
case 6:
case "end":
return _context3.stop();
}
}
}, _callee3);
}));
return function downloadMergedTranslationFiles(_x5, _x6, _x7) {
return _ref4.apply(this, arguments);
};
}();
/**
* Update a translation file containing hierarchical messages with changes from source messages
*
* @param {string} file
* @param {object} sourceMessages
* @param {bool} includeValues
* @returns {Promise}
* @async
*/
exports.downloadMergedTranslationFiles = downloadMergedTranslationFiles;
var updateTranslationFile = /*#__PURE__*/function () {
var _ref5 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(file, sourceMessages) {
var includeValues,
translation,
messages,
addedKeys,
changedKeys,
renamed,
deleted,
sourceMessageEntries,
updatedMessages,
_args4 = arguments;
return _regenerator.default.wrap(function _callee4$(_context4) {
while (1) {
switch (_context4.prev = _context4.next) {
case 0:
includeValues = _args4.length > 2 && _args4[2] !== undefined ? _args4[2] : false;
_context4.next = 3;
return (0, _utils.readJsonFile)(file);
case 3:
translation = _context4.sent;
messages = (0, _transform.flatten)(translation);
addedKeys = includeValues ? (0, _diff.getAddedKeys)(sourceMessages, messages) : [];
changedKeys = includeValues ? (0, _diff.getChangedKeys)(sourceMessages, messages) : [];
renamed = (0, _diff.getRenamedKeys)(sourceMessages, messages);
deleted = (0, _diff.getDeletedKeys)(sourceMessages, messages);
sourceMessageEntries = Object.entries(sourceMessages);
updatedMessages = (0, _diff.updateMessages)(messages, {
added: sourceMessageEntries.filter(function (_ref6) {
var _ref7 = (0, _slicedToArray2.default)(_ref6, 1),
k = _ref7[0];
return addedKeys.indexOf(k) >= 0;
}),
changed: sourceMessageEntries.filter(function (_ref8) {
var _ref9 = (0, _slicedToArray2.default)(_ref8, 1),
k = _ref9[0];
return changedKeys.indexOf(k) >= 0;
}),
renamed: renamed,
deleted: deleted
});
_context4.next = 13;
return (0, _utils.writeJsonFile)(file, updatedMessages);
case 13:
case "end":
return _context4.stop();
}
}
}, _callee4);
}));
return function updateTranslationFile(_x8, _x9) {
return _ref5.apply(this, arguments);
};
}();
/**
* Update local translation files with changes from the source for all languages defined by the OneSky project
*
* @param {string} projectId
* @param {OneSkyCredentials} credentials
* @param {string} sourcePattern
* @param {string} targetPath
* @param {string} includeValues
* @returns {Promise}
* @async
*/
exports.updateTranslationFile = updateTranslationFile;
var updateTranslationFiles = /*#__PURE__*/function () {
var _ref10 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5(projectId, credentials, sourcePattern, targetPath) {
var includeValues,
projectLanguages,
languageCodes,
baseLanguage,
sourceMessages,
errors,
_args5 = arguments;
return _regenerator.default.wrap(function _callee5$(_context5) {
while (1) {
switch (_context5.prev = _context5.next) {
case 0:
includeValues = _args5.length > 4 && _args5[4] !== undefined ? _args5[4] : false;
_context5.next = 3;
return (0, _api.getProjectLanguages)(projectId, credentials);
case 3:
projectLanguages = _context5.sent;
languageCodes = projectLanguages.map(function (_ref11) {
var code = _ref11.code;
return code;
});
baseLanguage = projectLanguages.filter(function (_ref12) {
var isBaseLanguage = _ref12.is_base_language;
return isBaseLanguage;
})[0].code;
_context5.next = 8;
return (0, _extract.extractDefaultMessages)("".concat(sourcePattern));
case 8:
sourceMessages = _context5.sent;
errors = {};
_context5.next = 12;
return Promise.all(languageCodes.map(function (language) {
return updateTranslationFile("".concat(targetPath, "/onesky/").concat(projectId, "/").concat(language, ".json"), sourceMessages, includeValues ? true : language === baseLanguage).catch(function (error) {
errors[language] = error;
});
}));
case 12:
if (Object.keys(errors).length) {
console.error(errors);
}
case 13:
case "end":
return _context5.stop();
}
}
}, _callee5);
}));
return function updateTranslationFiles(_x10, _x11, _x12, _x13) {
return _ref10.apply(this, arguments);
};
}();
/**
* Upload translation files for all languages of the project, not only the base language!
*
* @param {string} path path to folder containing the hierarchical `${language}.json` translation files
* @param {OneSkyTranslationOptions} translationOptions
* @param {OneSkyCredentials} credentials
* @param {OneSkySyncOptions} syncOptions
* @returns {Promise}
* @async
*/
exports.updateTranslationFiles = updateTranslationFiles;
var uploadTranslationFiles = /*#__PURE__*/function () {
var _ref14 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee7(path, _ref13, credentials) {
var projectId,
fileName,
_ref15,
keepStrings,
format,
projectLanguages,
languageCodes,
doUpload,
_args7 = arguments;
return _regenerator.default.wrap(function _callee7$(_context7) {
while (1) {
switch (_context7.prev = _context7.next) {
case 0:
projectId = _ref13.projectId, fileName = _ref13.fileName;
_ref15 = _args7.length > 3 && _args7[3] !== undefined ? _args7[3] : {}, keepStrings = _ref15.keepStrings, format = _ref15.format;
_context7.next = 4;
return (0, _api.getProjectLanguages)(projectId, credentials);
case 4:
projectLanguages = _context7.sent;
languageCodes = projectLanguages.map(function (_ref16) {
var code = _ref16.code;
return code;
});
doUpload = /*#__PURE__*/function () {
var _ref17 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6(language) {
var translations;
return _regenerator.default.wrap(function _callee6$(_context6) {
while (1) {
switch (_context6.prev = _context6.next) {
case 0:
_context6.next = 2;
return (0, _utils.readJsonFile)("".concat(path, "/onesky/").concat(projectId, "/").concat(language, ".json"));
case 2:
translations = _context6.sent;
_context6.next = 5;
return (0, _api.uploadProjectTranslation)({
language: language,
projectId: projectId,
fileName: fileName
}, (0, _transform.flatten)(translations), credentials, {
keepStrings: keepStrings,
format: format
});
case 5:
case "end":
return _context6.stop();
}
}
}, _callee6);
}));
return function doUpload(_x17) {
return _ref17.apply(this, arguments);
};
}();
_context7.next = 9;
return Promise.all(languageCodes.map(doUpload));
case 9:
case "end":
return _context7.stop();
}
}
}, _callee7);
}));
return function uploadTranslationFiles(_x14, _x15, _x16) {
return _ref14.apply(this, arguments);
};
}();
exports.uploadTranslationFiles = uploadTranslationFiles;
//# sourceMappingURL=translations.js.map