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 / api.js
Size: Mime:
const onesky = require('@brainly/onesky-utils');

/**
 * Interact with the OneSky API
 *
 * @module @doodle/i18n/disty/onesky/api
 */

/**
 * OneSky credentials
 *
 * @typedef {object} OneSkyCredentials
 * @property {string} secret
 * @property {string} apiKey
 */

/**
 * OneSky Translation
 * @typedef {object} OneSkyTranslationOptions
 * @property {string} projectId
 * @property {string} language
 * @property {string} fileName
 */

/**
 * OneSky translation upload options
 *
 * @typedef {object} OneSkySyncOptions
 * @property {string} format
 * @property {string} keepStrings
 */

/**
 * OneSky Language object
 *
 * @typedef {object} OneSkyLanguage
 * @property {string} code language code, i.e. en-US or de
 * @property {string} english_name i.e. English (United States)
 * @property {string} local_name i.e. English (United States)
 * @property {string} locale i.e. en
 * @property {string} region i.e. US
 * @property {bool} is_base_language
 * @property {bool} is_ready_to_publish
 * @property {string} translation_progress i.e. 100%
 * @property {string} uploaded_at i.e. 2013-10-07T15:27:10+0000
 * @property {number} uploaded_at_timestamp i.e. 1381159630
 */

/**
 * Retrieve the defined languages in the OneSky project
 *
 * @param {string} projectId
 * @param {OneSkyCredentials} credentials
 * @returns {Promise<OneSkyLanguage>}
 * @async
 */
const getProjectLanguages = async (projectId, credentials) => {
  const result = await onesky.getLanguages({
    projectId,
    ...credentials,
  });

  if (result) {
    const { data } = JSON.parse(result);

    return data;
  }
  return [];
};

/**
 * Upload messages to a OneSky project for one language
 *
 * @param {OneSkyTranslationOptions} projectTranslation
 * @param {object} messages
 * @param {OneSkyCredentials} credentials
 * @param {OneSkySyncOptions} syncOptions
 * @returns {Promise}
 * @async
 */
const uploadProjectTranslation = async (projectTranslation, messages, credentials, syncOptions) =>
  onesky.postFile({
    language: 'en',
    fileName: 'translations.json',
    ...projectTranslation,

    format: 'HIERARCHICAL_JSON',
    keepStrings: true,
    ...syncOptions,

    ...credentials,
    content: JSON.stringify(messages),
  });

/**
 * Download messages from a OneSky project by one language
 *
 * @param {OneSkyTranslationOptions} projectTranslationOptions
 * @param {OneSkyCredentials} credentials
 * @returns {Promise<object>}
 * @async
 */
const getProjectMessagesByLanguage = async (projectTranslationOptions, credentials) => {
  const content = await onesky.getFile({
    language: 'en',
    fileName: 'translations.json',
    ...projectTranslationOptions,

    ...credentials,
  });

  if (content) {
    return JSON.parse(content);
  }
  return {};
};

module.exports = {
  getProjectMessagesByLanguage,
  uploadProjectTranslation,
  getProjectLanguages,
};