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 / onesky / translations.js
Size: Mime:
"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