medusa-plugin-tolgee
Version:
Medusa V2 Plugin to easily add translations to your models with Tolgee
133 lines • 12.5 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const axios_1 = __importDefault(require("axios"));
const utils_1 = require("@medusajs/utils");
const common_1 = require("../../common");
class TolgeeModuleService {
constructor({}, options) {
this.client_ = axios_1.default.create({
baseURL: `${options.baseURL}/v2/projects/${options.projectId}`,
headers: {
Accept: "application/json",
"X-API-Key": options.apiKey,
},
maxBodyLength: Infinity,
});
this.options_ = {
...options,
keys: {
...common_1.defaultSupportedProperties,
...options.keys,
},
};
}
async getOptions() {
try {
const { data } = await this.client_.get(`/languages`);
const languages = data?._embedded?.languages;
if (!languages)
return { defaultLanguage: "en", availableLanguages: [], apiKey: "", apiUrl: "" };
this.defaultLanguage = languages.find((lang) => lang.base)?.tag ?? languages[0].tag;
this.availableLanguages = languages.map((lang) => ({
label: lang.name,
tag: lang.tag,
}));
return {
defaultLanguage: this.defaultLanguage,
availableLanguages: this.availableLanguages ?? [],
apiKey: this.options_.apiKey,
apiUrl: this.options_.baseURL
};
}
catch (error) {
throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, `Failed to fetch languages for project: ${error.message}`);
}
}
async getNamespaceKeys(id) {
const ids = Array.isArray(id) ? id : [id];
try {
const response = await this.client_.get(`/keys/select?filterNamespace=${ids.join(",")}`);
return response.data.ids;
}
catch (error) {
throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, `Failed to fetch namespace keys for ${id}: ${error.message}`);
}
}
async getKeyName(keyId) {
try {
const response = await this.client_.get(`/keys/${keyId}`);
return response.data.name;
}
catch (error) {
throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, `Failed to fetch key name for key ID ${keyId}: ${error.message}`);
}
}
async getProductTranslationKeys(ids) {
const keys = await this.getNamespaceKeys(ids);
return await Promise.all(keys.map((keyId) => this.getKeyName(keyId)));
}
async list(filter) {
try {
const country_code = filter.context?.country_code?.toLowerCase();
const ids = Array.isArray(filter.id) ? filter.id : [filter.id];
const langs = (await this.getOptions()).availableLanguages.map((lang) => lang.tag).join(",");
const response = await Promise.all(ids.map(async (id) => {
const { data } = await this.client_.get(`/translations/${country_code ?? langs}?ns=${id}`);
for (const key in data) {
data[key] = data[key][id];
}
return { id, ...(country_code ? data[country_code] : data) };
}));
return response;
}
catch (error) {
throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, `Failed to fetch translations for key ID ${filter.id}: ${error.message}`);
}
}
async createNewKeyWithTranslation(keys) {
try {
await this.client_.post(`/keys/import`, {
keys: keys.map(({ id, keyName, translation }) => ({
name: `${id}.${keyName}`,
namespace: id,
translations: { [this.defaultLanguage]: translation },
}))
});
return;
}
catch (error) {
console.error(error);
throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, `Failed to import keys ${error}`);
}
}
async createModelTranslations(models, type) {
const keys = models.flatMap((model) => this.options_.keys?.[type]?.map((key) => ({
id: model.id,
keyName: key,
translation: model?.[key] ?? ""
})) ?? []);
try {
await this.createNewKeyWithTranslation(keys);
return models.map((model) => model.id);
}
catch (error) {
console.error(`Entities of type ${type} already translated or error creating translations: ${models.map((model) => model.id)}`, error);
return [];
}
}
async deleteTranslation(id) {
const keys = await this.getNamespaceKeys(id);
try {
const response = await this.client_.delete(`/keys/${keys}`);
return response.data;
}
catch (error) {
throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, `Failed to delete translations for namespace ${id}: ${error.message}`);
}
}
}
exports.default = TolgeeModuleService;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL3RvbGdlZS9zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsa0RBQXdEO0FBQ3hELDJDQUE4QztBQUU5Qyx5Q0FBK0Y7QUF3Qi9GLE1BQU0sbUJBQW1CO0lBTXJCLFlBQVksRUFBRyxFQUFFLE9BQTJCO1FBRXhDLElBQUksQ0FBQyxPQUFPLEdBQUcsZUFBSyxDQUFDLE1BQU0sQ0FBQztZQUN4QixPQUFPLEVBQUUsR0FBRyxPQUFPLENBQUMsT0FBTyxnQkFBZ0IsT0FBTyxDQUFDLFNBQVMsRUFBRTtZQUM5RCxPQUFPLEVBQUU7Z0JBQ0wsTUFBTSxFQUFFLGtCQUFrQjtnQkFDMUIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxNQUFNO2FBQzlCO1lBQ0QsYUFBYSxFQUFFLFFBQVE7U0FDMUIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFFBQVEsR0FBRztZQUNaLEdBQUcsT0FBTztZQUNWLElBQUksRUFBRTtnQkFDRixHQUFHLG1DQUEwQjtnQkFDN0IsR0FBRyxPQUFPLENBQUMsSUFBSTthQUNsQjtTQUNKLENBQUM7SUFDTixDQUFDO0lBRUQsS0FBSyxDQUFDLFVBQVU7UUFDWixJQUFJLENBQUM7WUFDRCxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBMEIsWUFBWSxDQUFDLENBQUM7WUFFL0UsTUFBTSxTQUFTLEdBQUcsSUFBSSxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUE7WUFDNUMsSUFBSSxDQUFDLFNBQVM7Z0JBQ1YsT0FBTyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFBO1lBRXBGLElBQUksQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFDLElBQUks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