UNPKG

qwc2

Version:
17 lines 8.59 kB
#!/usr/bin/env node /** * Copyright 2017-2024 Sourcepole AG * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. */var _packageJson$dependen;function _toConsumableArray(r){return _arrayWithoutHoles(r)||_iterableToArray(r)||_unsupportedIterableToArray(r)||_nonIterableSpread()}function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _iterableToArray(r){if("undefined"!=typeof Symbol&&null!=r[Symbol.iterator]||null!=r["@@iterator"])return Array.from(r)}function _arrayWithoutHoles(r){if(Array.isArray(r))return _arrayLikeToArray(r)}function _createForOfIteratorHelper(r,e){var t="undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(!t){if(Array.isArray(r)||(t=_unsupportedIterableToArray(r))||e&&r&&"number"==typeof r.length){t&&(r=t);var _n=0,F=function F(){};return{s:F,n:function n(){return _n>=r.length?{done:!0}:{done:!1,value:r[_n++]}},e:function e(r){throw r},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var o,a=!0,u=!1;return{s:function s(){t=t.call(r)},n:function n(){var r=t.next();return a=r.done,r},e:function e(r){u=!0,o=r},f:function f(){try{a||null==t["return"]||t["return"]()}finally{if(u)throw o}}}}function _unsupportedIterableToArray(r,a){if(r){if("string"==typeof r)return _arrayLikeToArray(r,a);var t={}.toString.call(r).slice(8,-1);return"Object"===t&&r.constructor&&(t=r.constructor.name),"Map"===t||"Set"===t?Array.from(r):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?_arrayLikeToArray(r,a):void 0}}function _arrayLikeToArray(r,a){(null==a||a>r.length)&&(a=r.length);for(var e=0,n=Array(a);e<a;e++)n[e]=r[e];return n}function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}var fs=require("fs");var merge=require("deepmerge");var objectPath=require("object-path");var readJSON=function readJSON(path){try{return JSON.parse(fs.readFileSync(process.cwd()+path,"utf8"))}catch(e){return{}}};var _cleanMessages=function cleanMessages(data,ref){for(var _i=0,_Object$keys=Object.keys(data);_i<_Object$keys.length;_i++){var property=_Object$keys[_i];var omit=ref&&!(property in ref);if(_typeof(data[property])==="object"){if(omit){delete data[property]}else{_cleanMessages(data[property],ref?ref[property]:undefined)}}else if(data[property]===""||omit){delete data[property]}}return data};var createSkel=function createSkel(strings){var skel={locale:"",messages:{}};var _iterator=_createForOfIteratorHelper(strings),_step;try{for(_iterator.s();!(_step=_iterator.n()).done;){var string=_step.value;var path=string.split(".");var cur=skel.messages;for(var i=0;i<path.length-1;++i){cur[path[i]]=cur[path[i]]||{};cur=cur[path[i]]}cur[path[path.length-1]]=""}}catch(err){_iterator.e(err)}finally{_iterator.f()}return skel};var _listDir=function listDir(dir,pattern){var results=[];var list=fs.readdirSync(dir);list.forEach(function(file){if(file==="node_modules"){return}var path=dir+"/"+file;var stat=fs.statSync(path);if(stat&&stat.isDirectory()){/* Recurse into a subdirectory */results=results.concat(_listDir(path,pattern))}else if(pattern.exec(file)){/* Is a file */results.push(path)}});return results};var updateTsConfig=function updateTsConfig(topdir,tsconfig){var collectedMsgIds=arguments.length>2&&arguments[2]!==undefined?arguments[2]:null;var files=_listDir(topdir,/^.*\.jsx?$/);var trRegEx=/LocaleUtils\.tr(?:msg)?\((['"])([A-Za-z0-9._]+)\1/g;var msgIds=new Set;var _iterator2=_createForOfIteratorHelper(files),_step2;try{for(_iterator2.s();!(_step2=_iterator2.n()).done;){var file=_step2.value;var data=fs.readFileSync(file).toString();var _iterator3=_createForOfIteratorHelper(data.matchAll(trRegEx)),_step3;try{for(_iterator3.s();!(_step3=_iterator3.n()).done;){var match=_step3.value;if((!collectedMsgIds||!collectedMsgIds.has(match[2]))&&!match[2].endsWith(".")){msgIds.add(match[2])}}}catch(err){_iterator3.e(err)}finally{_iterator3.f()}}}catch(err){_iterator2.e(err)}finally{_iterator2.f()}var msgIdList=Array.from(msgIds);msgIdList.sort();var json=readJSON(tsconfig);json.strings=msgIdList;fs.writeFileSync(process.cwd()+"/"+tsconfig,JSON.stringify(json,null,2)+"\n");return msgIds};// Determine workspaces / dependencies var packageJson=readJSON("/package.json");var workspaces=packageJson.workspaces||[];var qwcDeps=Object.keys((_packageJson$dependen=packageJson.dependencies)!==null&&_packageJson$dependen!==void 0?_packageJson$dependen:{qwc2:"0"}).filter(function(dep){return dep.startsWith("qwc")});// Generate workspace translations var collectedMsgIds=new Set;var _iterator4=_createForOfIteratorHelper(workspaces),_step4;try{for(_iterator4.s();!(_step4=_iterator4.n()).done;){var workspace=_step4.value;/* eslint-disable-next-line */console.log("Generating translations for "+workspace);var newMsgIds=updateTsConfig(process.cwd()+"/"+workspace,"/"+workspace+"/static/translations/tsconfig.json");collectedMsgIds=new Set([].concat(_toConsumableArray(collectedMsgIds),_toConsumableArray(newMsgIds)));var _config=readJSON("/"+workspace+"/static/translations/tsconfig.json");var _strings=[].concat(_toConsumableArray(_config.strings||[]),_toConsumableArray(_config.extra_strings||[]));var _skel=createSkel(_strings);var _iterator6=_createForOfIteratorHelper(_config.languages||[]),_step6;try{for(_iterator6.s();!(_step6=_iterator6.n()).done;){var lang=_step6.value;var langskel=merge(_skel,{locale:lang});// Merge translations var data=merge(langskel,_cleanMessages(readJSON("/"+workspace+"/static/translations/"+lang+".json"),langskel));// Write updated translations file try{fs.writeFileSync(process.cwd()+"/"+workspace+"/static/translations/"+lang+".json",JSON.stringify(data,null,2)+"\n");/* eslint-disable-next-line */console.log("Wrote "+workspace+"/static/translations/"+lang+".json")}catch(e){/* eslint-disable-next-line */console.error("Failed to write "+workspace+"/static/translations/"+lang+".json: "+e)}}}catch(err){_iterator6.e(err)}finally{_iterator6.f()}}// Generate application translations }catch(err){_iterator4.e(err)}finally{_iterator4.f()}updateTsConfig(fs.existsSync(process.cwd()+"/js")?process.cwd()+"/js":process.cwd(),"/static/translations/tsconfig.json",collectedMsgIds);var config=readJSON("/static/translations/tsconfig.json");var strings=[].concat(_toConsumableArray(config.strings||[]),_toConsumableArray(config.extra_strings||[]));var skel=createSkel(strings);var _iterator5=_createForOfIteratorHelper(config.languages||[]),_step5;try{for(_iterator5.s();!(_step5=_iterator5.n()).done;){var _lang=_step5.value;var _langskel=merge(skel,{locale:_lang});var origData=readJSON("/static/translations/"+_lang+".json");var _data=merge(_langskel,_cleanMessages(readJSON("/static/translations/"+_lang+".json"),_langskel));// Merge translations from workspaces var _iterator7=_createForOfIteratorHelper(workspaces),_step7;try{for(_iterator7.s();!(_step7=_iterator7.n()).done;){var _workspace=_step7.value;_data=merge(_data,readJSON("/"+_workspace+"/static/translations/"+_lang+".json"))}// Merge translations from dependencies }catch(err){_iterator7.e(err)}finally{_iterator7.f()}var _iterator8=_createForOfIteratorHelper(qwcDeps),_step8;try{for(_iterator8.s();!(_step8=_iterator8.n()).done;){var qwcDep=_step8.value;_data=merge(_data,readJSON("/node_modules/"+qwcDep+"/static/translations/"+_lang+".json"))}// Revert to original values for strings specified in overrides }catch(err){_iterator8.e(err)}finally{_iterator8.f()}var _iterator9=_createForOfIteratorHelper(config.overrides||[]),_step9;try{for(_iterator9.s();!(_step9=_iterator9.n()).done;){var path=_step9.value;var value=objectPath.get(origData.messages,path);if(value!==undefined){objectPath.set(_data.messages,path,value)}}// Write output }catch(err){_iterator9.e(err)}finally{_iterator9.f()}try{fs.writeFileSync(process.cwd()+"/static/translations/"+_lang+".json",JSON.stringify(_data,null,2)+"\n");/* eslint-disable-next-line */console.log("Wrote static/translations/"+_lang+".json")}catch(e){/* eslint-disable-next-line */console.error("Failed to write static/translations/"+_lang+".json: "+e)}}}catch(err){_iterator5.e(err)}finally{_iterator5.f()}