@frontitude/cli
Version:
The Frontitude CLI enables product teams to integrate their code with Frontitude (frontitude.com), thus creating a single source of truth for their product copy, from design to development.
1 lines • 4.14 kB
JavaScript
;Object.defineProperty(exports,"__esModule",{value:!0}),exports.formatTextsForOutputFileType=exports.getDryRunResult=exports.extendTextsPullOptions=exports.getFileDiff=exports.updateFileWithData=exports.getDataAndFileCombinedResult=void 0;const tslib_1=require("tslib"),lodash_merge_1=tslib_1.__importDefault(require("lodash.merge")),files_1=require("../../../../utils/files"),files_2=require("../../../../utils/files"),ErrorNames=tslib_1.__importStar(require("../../../../common/constants/ErrorNames")),constants_1=require("../../../constants"),index_1=require("../../index"),strings=tslib_1.__importStar(require("../../../../strings.json")),{xliff2js:xliff2js,createxliff12:createxliff12,xliff12ToJs:xliff12ToJs,createxliff:createxliff}=require("xliff"),XLIFF2_SCHEMA_NAME="urn:oasis:names:tc:xliff:document:2.0",XLIFF12_SCHEMA_NAME="urn:oasis:names:tc:xliff:document:1.2",readFileAsJson=async(e,t=!1)=>{if(!e||!(0,files_1.isPathOrFileExists)(e))return{data:{},namespace:""};let s="";const r=await(0,files_1.readFile)(e,{encoding:"utf8"})||"";if(t&&-1!==r.indexOf(XLIFF12_SCHEMA_NAME)||!t&&-1!==r.indexOf(XLIFF2_SCHEMA_NAME)){const e=new Error(strings["fileFormats-xliffVersionMismatchError"]);throw e.name=ErrorNames.XLIFF_VERSION_MISMATCH,e}const i=r?t?await xliff2js(r):await xliff12ToJs(r):{},o={source:{}};i&&i.targetLanguage&&(o[i.targetLanguage]={});const a=i&&i.resources;if(a){s=Object.keys(a)[0];for(const e of Object.keys(a[s]))o.source[e]=a[s][e].source,i.targetLanguage&&(o[i.targetLanguage][e]=a[s][e].target)}return{data:o,namespace:s}},convertToXliff12Format=e=>{const t={};for(const s of Object.keys(e)){t[s]=t[s]||{};for(const[r,i]of Object.entries(e[s]))if(i.plurals&&Object.keys(i.plurals).length>0){for(const[e,o]of Object.entries(i.plurals)){const i=`/${r}:dict/format:dict/${e}:dict/:string`;t[s][i]=o}const e=`${r}:dict/NSStringLocalizedFormatKey:dict/:string`;t[s][e]="format"}else t[s][r]=i.value}return t},convertToXliff2Format=e=>{const t={};for(const s of Object.keys(e)){t[s]=t[s]||{};for(const[r,i]of Object.entries(e[s]))if(i.plurals&&Object.keys(i.plurals).length>0){let e="{count, plural,";for(const[t,s]of Object.entries(i.plurals)){const r=` ${t} {${s}}`;e=e.concat(r)}e=e.concat("}"),t[s][r]=e}else t[s][r]=i.value}return t},getDataAndFileCombinedResult=async(e,t,s="source",r,i,o=!1)=>{const a=await readFileAsJson(e,o),n="source"!==s?{source:r,[i]:t}:{source:r};return(0,lodash_merge_1.default)({},a.data,n)};exports.getDataAndFileCombinedResult=getDataAndFileCombinedResult;const getLocaleDisplayName=e=>e.replace(/_/g,"-"),updateFileWithData=async(e,t,s,r,i)=>{const o=await(0,index_1.getXliffVersion)()===constants_1.XliffVersions.xliff_2_0,a="source"===s?"":s.substring(0,s.indexOf("_")>0?s.indexOf("_"):s.length),n=getLocaleDisplayName(i||"en"),l=getLocaleDisplayName("source"===s?n:s),f=await readFileAsJson(e,o),c=await(0,exports.getDataAndFileCombinedResult)(e,t,s,r,a,o),u=(0,files_2.getFileDetails)(e),d=f.namespace?f.namespace:u.fileNameWithoutExtension,x=o?await createxliff(n,l,c.source,"source"===s?c[a||s]:c[a],d):await createxliff12(n,l,c.source,"source"===s?c[a||s]:c[a],d);return await(0,files_1.writeFile)(e,x),(0,exports.getFileDiff)(f.data[a||s]||{},c[a||s])};exports.updateFileWithData=updateFileWithData;const getFileDiff=(e,t)=>{const s=[],r=[];for(const s of Object.keys(e))t[s]&&e[s]!==t[s]&&e[s]!==t[s].replace("\n","")&&r.push(s);for(const r of Object.keys(t))!e[r]&&t[r]&&s.push(r);return{added:s.length,edited:r.length}};exports.getFileDiff=getFileDiff;const extendTextsPullOptions=e=>({...e,isIncludeMetadata:!0});exports.extendTextsPullOptions=extendTextsPullOptions;const getDryRunResult=async(e,t)=>{const s=await(0,index_1.getXliffVersion)(),r=await(0,exports.getDataAndFileCombinedResult)(e,t,"source",t.source,"en",s===constants_1.XliffVersions.xliff_2_0);return r&&r.source};exports.getDryRunResult=getDryRunResult;const formatTextsForOutputFileType=async e=>await(0,index_1.getXliffVersion)()===constants_1.XliffVersions.xliff_2_0?convertToXliff2Format(e):convertToXliff12Format(e);exports.formatTextsForOutputFileType=formatTextsForOutputFileType;