UNPKG

@dvhb/react-intl-messages

Version:

Library for parsing source files and extract react-intl messages

90 lines (89 loc) 3.41 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const utils_1 = require("../utils"); const BASE_URL = 'https://api.lokalise.co/api2'; class Lokalise { constructor(defaultLocale, projectId, token) { this.defaultLocale = defaultLocale; this.projectId = projectId; this.token = token; this.lokaliseKeys = []; this.newMessages = []; } getHeaders() { return { 'content-type': 'application/json', 'X-Api-Token': this.token, }; } formatMessages(messages) { return messages.map(message => ({ key_name: message.id, description: message ? message.description : '', platforms: ['ios', 'android', 'web', 'other'], translations: [{ language_iso: this.defaultLocale, translation: message ? message.defaultMessage : '' }], })); } async getKeys() { utils_1.showInfo('Start fetching messages from Lokalise'); try { const response = await utils_1.request({ headers: this.getHeaders(), url: `${BASE_URL}/projects/${this.projectId}/keys`, method: 'GET', qs: { include_translations: '1', limit: 5000 }, }); if (!response || !response.keys) throw Error('Wrong answer from lokalise'); this.lokaliseKeys = [...response.keys]; const arrOfRequests = []; const currentPage = 2; const arr = [...Array(Number(response.headers['x-pagination-page-count']) - 1)]; arr.forEach((i, index) => { arrOfRequests.push(utils_1.request({ headers: this.getHeaders(), url: `${BASE_URL}/projects/${this.projectId}/keys`, method: 'GET', qs: { include_translations: '1', limit: 500, page: currentPage + index }, })); }); const res = await Promise.all(arrOfRequests); res.forEach(i => { this.lokaliseKeys = [...this.lokaliseKeys, ...i.keys]; }); utils_1.showInfo('Finish fetching messages from Lokalise'); } catch (e) { utils_1.showError(`Error while fetching strings from lokalise\n${e}`); } } getMessage(locale, id) { const key = this.lokaliseKeys.find(key => key.key_name.web === id); const lokaliseString = key && key.translations.find(translation => translation.language_iso === locale); if (lokaliseString) { return lokaliseString.translation; } if (locale === this.defaultLocale) { this.newMessages.push(id); } return ''; } async uploadMessages(messages) { try { const response = await utils_1.request({ headers: this.getHeaders(), body: { keys: this.formatMessages(messages) }, url: `${BASE_URL}/projects/${this.projectId}/keys`, method: 'POST', }); utils_1.showInfo(`Response from lokalise: ${response}`); } catch (e) { utils_1.showError(`Error while uploading strings to lokalise\n${e}`); } } getNewMessages() { return this.newMessages; } } exports.Lokalise = Lokalise;