UNPKG

@spscommerce/phrase-cli

Version:

A CLI used for interacting with phraseApp to keep translations up-to-date

84 lines (74 loc) 2.52 kB
import { isDeepStrictEqual } from 'node:util'; import path from 'node:path'; import fs from 'node:fs'; import settings from '../settings.mjs'; // Synchronous file read const readTranslationJSON = (woodland) => { const localFilePath = path.join(process.cwd(), woodland ? settings.woodlandTranslationFile : settings.translationFile); try { const content = fs.readFileSync(localFilePath); return JSON.parse(content); } catch (error) { throw new Error(`utils.readTranslationJSON error: error: ${error}`); } }; const readI18nJSON = () => { const translationPath = './i18n.json'; const localFilePath = path.join(process.cwd(), translationPath); try { const content = fs.readFileSync(localFilePath); return JSON.parse(content); } catch (error) { throw new Error(`utils.readI18nJSON error: ${error}`); } }; const readLocaleTranslation = (localePath, woodland) => { const translationPath = woodland ? './woodland.json' : './translation.json'; const localFilePath = path.join(process.cwd(), localePath, translationPath); try { const content = fs.readFileSync(localFilePath); return JSON.parse(content); } catch (error) { throw new Error(`utils.readLocaleTranslationerror: ${error}`); } }; const writeLocalesTranslations = (dir, data, woodland) => { const translationFile = woodland ? 'woodland.json' : 'translation.json'; // check for existing directory if (!fs.existsSync(dir)) { fs.mkdirSync(dir, { recursive: true }); } const filePath = path.join(process.cwd(), dir, translationFile); fs.writeFileSync(filePath, JSON.stringify(data, null, 2)); }; const getKeyValuePairs = (objects) => { return objects.reduce((accum, object) => { const { content, key } = object; return { ...accum, [key.name]: content }; }, {}); }; const getObjectDiff = (obj1, obj2) => { const diff = Object.keys(obj1).reduce((result, key) => { if (!Object.prototype.hasOwnProperty.call(obj2, key)) { result.push(key); } else if (isDeepStrictEqual(obj1[key], obj2[key])) { const resultKeyIndex = result.indexOf(key); result.splice(resultKeyIndex, 1); } return result; }, Object.keys(obj2)); return diff; }; const hasNewUpdatedKey = (remote, local) => { const transRemote = getKeyValuePairs(remote); return !isDeepStrictEqual(transRemote, local); }; export { readTranslationJSON, readI18nJSON, hasNewUpdatedKey, getKeyValuePairs, getObjectDiff, readLocaleTranslation, writeLocalesTranslations };