@scoutello/i18n-magic
Version:
Intelligent CLI toolkit that automates internationalization workflows with AI-powered translations for JavaScript/TypeScript projects
3 lines (2 loc) • 29.4 kB
JavaScript
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("fast-glob"),t=require("i18next-scanner"),n=require("node:fs"),r=require("node:path"),a=require("prompts"),o=require("console");function s(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(s=function(){return!!e})()}function c(){c=function(){return t};var e,t={},n=Object.prototype,r=n.hasOwnProperty,a=Object.defineProperty||function(e,t,n){e[t]=n.value},o="function"==typeof Symbol?Symbol:{},s=o.iterator||"@@iterator",u=o.asyncIterator||"@@asyncIterator",i=o.toStringTag||"@@toStringTag";function l(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{l({},"")}catch(e){l=function(e,t,n){return e[t]=n}}function f(e,t,n,r){var o=Object.create((t&&t.prototype instanceof m?t:m).prototype),s=new T(r||[]);return a(o,"_invoke",{value:E(e,n,s)}),o}function p(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}t.wrap=f;var h="suspendedStart",d="suspendedYield",v="executing",g="completed",y={};function m(){}function b(){}function x(){}var k={};l(k,s,(function(){return this}));var w=Object.getPrototypeOf,O=w&&w(w(_([])));O&&O!==n&&r.call(O,s)&&(k=O);var S=x.prototype=m.prototype=Object.create(k);function j(e){["next","throw","return"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function L(e,t){function n(a,o,s,c){var u=p(e[a],e,o);if("throw"!==u.type){var i=u.arg,l=i.value;return l&&"object"==typeof l&&r.call(l,"__await")?t.resolve(l.__await).then((function(e){n("next",e,s,c)}),(function(e){n("throw",e,s,c)})):t.resolve(l).then((function(e){i.value=e,s(i)}),(function(e){return n("throw",e,s,c)}))}c(u.arg)}var o;a(this,"_invoke",{value:function(e,r){function a(){return new t((function(t,a){n(e,r,t,a)}))}return o=o?o.then(a,a):a()}})}function E(t,n,r){var a=h;return function(o,s){if(a===v)throw Error("Generator is already running");if(a===g){if("throw"===o)throw s;return{value:e,done:!0}}for(r.method=o,r.arg=s;;){var c=r.delegate;if(c){var u=P(c,r);if(u){if(u===y)continue;return u}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(a===h)throw a=g,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);a=v;var i=p(t,n,r);if("normal"===i.type){if(a=r.done?g:d,i.arg===y)continue;return{value:i.arg,done:r.done}}"throw"===i.type&&(a=g,r.method="throw",r.arg=i.arg)}}}function P(t,n){var r=n.method,a=t.iterator[r];if(a===e)return n.delegate=null,"throw"===r&&t.iterator.return&&(n.method="return",n.arg=e,P(t,n),"throw"===n.method)||"return"!==r&&(n.method="throw",n.arg=new TypeError("The iterator does not provide a '"+r+"' method")),y;var o=p(a,t.iterator,n.arg);if("throw"===o.type)return n.method="throw",n.arg=o.arg,n.delegate=null,y;var s=o.arg;return s?s.done?(n[t.resultName]=s.value,n.next=t.nextLoc,"return"!==n.method&&(n.method="next",n.arg=e),n.delegate=null,y):s:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,y)}function N(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function F(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function T(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(N,this),this.reset(!0)}function _(t){if(t||""===t){var n=t[s];if(n)return n.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var a=-1,o=function n(){for(;++a<t.length;)if(r.call(t,a))return n.value=t[a],n.done=!1,n;return n.value=e,n.done=!0,n};return o.next=o}}throw new TypeError(typeof t+" is not iterable")}return b.prototype=x,a(S,"constructor",{value:x,configurable:!0}),a(x,"constructor",{value:b,configurable:!0}),b.displayName=l(x,i,"GeneratorFunction"),t.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===b||"GeneratorFunction"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,x):(e.__proto__=x,l(e,i,"GeneratorFunction")),e.prototype=Object.create(S),e},t.awrap=function(e){return{__await:e}},j(L.prototype),l(L.prototype,u,(function(){return this})),t.AsyncIterator=L,t.async=function(e,n,r,a,o){void 0===o&&(o=Promise);var s=new L(f(e,n,r,a),o);return t.isGeneratorFunction(n)?s:s.next().then((function(e){return e.done?e.value:s.next()}))},j(S),l(S,i,"Generator"),l(S,s,(function(){return this})),l(S,"toString",(function(){return"[object Generator]"})),t.keys=function(e){var t=Object(e),n=[];for(var r in t)n.push(r);return n.reverse(),function e(){for(;n.length;){var r=n.pop();if(r in t)return e.value=r,e.done=!1,e}return e.done=!0,e}},t.values=_,T.prototype={constructor:T,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(F),!t)for(var n in this)"t"===n.charAt(0)&&r.call(this,n)&&!isNaN(+n.slice(1))&&(this[n]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var n=this;function a(r,a){return c.type="throw",c.arg=t,n.next=r,a&&(n.method="next",n.arg=e),!!a}for(var o=this.tryEntries.length-1;o>=0;--o){var s=this.tryEntries[o],c=s.completion;if("root"===s.tryLoc)return a("end");if(s.tryLoc<=this.prev){var u=r.call(s,"catchLoc"),i=r.call(s,"finallyLoc");if(u&&i){if(this.prev<s.catchLoc)return a(s.catchLoc,!0);if(this.prev<s.finallyLoc)return a(s.finallyLoc)}else if(u){if(this.prev<s.catchLoc)return a(s.catchLoc,!0)}else{if(!i)throw Error("try statement without catch or finally");if(this.prev<s.finallyLoc)return a(s.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev<a.finallyLoc){var o=a;break}}o&&("break"===e||"continue"===e)&&o.tryLoc<=t&&t<=o.finallyLoc&&(o=null);var s=o?o.completion:{};return s.type=e,s.arg=t,o?(this.method="next",this.next=o.finallyLoc,y):this.complete(s)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),y},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),F(n),y}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var a=r.arg;F(n)}return a}}throw Error("illegal catch attempt")},delegateYield:function(t,n,r){return this.delegate={iterator:_(t),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=e),y}},t}function u(e,t,n,r,a,o,s){try{var c=e[o](s),u=c.value}catch(e){return void n(e)}c.done?t(u):Promise.resolve(u).then(r,a)}function i(e){return function(){var t=this,n=arguments;return new Promise((function(r,a){var o=e.apply(t,n);function s(e){u(o,r,a,s,c,"next",e)}function c(e){u(o,r,a,s,c,"throw",e)}s(void 0)}))}}function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},l.apply(this,arguments)}function f(e){return f=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},f(e)}function p(e,t){return p=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},p(e,t)}function h(e){var t="function"==typeof Map?new Map:void 0;return h=function(e){if(null===e||!function(e){try{return-1!==Function.toString.call(e).indexOf("[native code]")}catch(t){return"function"==typeof e}}(e))return e;if("function"!=typeof e)throw new TypeError("Super expression must either be null or a function");if(void 0!==t){if(t.has(e))return t.get(e);t.set(e,n)}function n(){return function(e,t,n){if(s())return Reflect.construct.apply(null,arguments);var r=[null];r.push.apply(r,t);var a=new(e.bind.apply(e,r));return n&&p(a,n.prototype),a}(e,arguments,f(this).constructor)}return n.prototype=Object.create(e.prototype,{constructor:{value:n,enumerable:!1,writable:!0,configurable:!0}}),p(n,e)},h(e)}function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function v(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(n)return(n=n.call(e)).next.bind(n);if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return d(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?d(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0;return function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}}}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 g=[{label:"Deutsch",name:"German",value:"de"},{label:"English",name:"English",value:"en"},{label:"Español",name:"Spanish",value:"es"},{label:"Français",name:"French",value:"fr"},{label:"Dansk",name:"Danish",value:"dk"},{label:"中文",name:"Chinese",value:"cn"},{label:"Русский",name:"Russian",value:"ru"},{label:"Italiano",name:"Italian",value:"it"},{label:"Nederlands",name:"Dutch",value:"nl"},{label:"Português",name:"Portuguese",value:"pt"},{label:"Türkçe",name:"Turkish",value:"tr"},{label:"Polski",name:"Polish",value:"pl"},{label:"Українська",name:"Ukrainian",value:"ua"},{label:"Suomi",name:"Finnish",value:"fi"},{label:"Norsk",name:"Norwegian",value:"no"},{label:"Svenska",name:"Swedish",value:"sv"},{label:"Čeština",name:"Czech",value:"cz"},{label:"Ελληνικά",name:"Greek",value:"gr"},{label:"日本語",name:"Japanese",value:"jp"},{label:"한국어",name:"Korean",value:"kr"},{label:"Română",name:"Romanian",value:"ro"},{label:"Hrvatski",name:"Croatian",value:"hr"},{label:"Magyar",name:"Hungarian",value:"hu"},{label:"Slovensky",name:"Slovak",value:"sk"},{label:"हिन्दी",name:"Hindi",value:"hi"},{label:"தமிழ்",name:"Tamil",value:"ta"},{label:"Bahasa Indonesia",name:"Indonesian",value:"id"},{label:"Tiếng Việt",name:"Vietnamese",value:"vn"}];function y(e){return e.filter((function(t,n){return e.indexOf(t)===n}))}var m=function(){var e=i(c().mark((function e(t){var n,r,a,o,s,u,i,f,p,h,d,v,y,m,b,x,k;return c().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:for(n=t.inputLanguage,r=t.context,a=t.openai,o=t.outputLanguage,s=t.model,u=Object.entries(t.object),i=[],f=0;f<u.length;f+=100)i.push(u.slice(f,f+100));p={},h=g.find((function(e){return e.value===n})),d=g.find((function(e){return e.value===o})),v=(null==h?void 0:h.label)||n,y=(null==d?void 0:d.label)||o,m=0,b=i;case 10:if(!(m<b.length)){e.next=23;break}return x=Object.fromEntries(b[m]),e.next=15,a.beta.chat.completions.parse({model:s,messages:[{content:"You are a bot that translates the values of a locales JSON. "+(r?'The user provided some additional context or guidelines about what to fill in the blanks: "'+r+'". ':"")+'The user provides you a JSON with a field named "inputLanguage", which defines the language the values of the JSON are defined in. It also has a field named "outputLanguage", which defines the language you should translate the values to. The last field is named "data", which includes the object with the values to translate. The keys of the values should never be changed. You output only a JSON, which has the same keys as the input, but with translated values. I give you an example input: {"inputLanguage": "English", outputLanguage: "German", "keys": {"hello": "Hello", "world": "World"}}. The output should be {"hello": "Hallo", "world": "Welt"}.',role:"system"},{content:JSON.stringify({inputLanguage:v,outputLanguage:y,data:x}),role:"user"}],response_format:{type:"json_object"}});case 15:return k=JSON.parse(e.sent.choices[0].message.content),p=l({},p,k),e.next=20,new Promise((function(e){return setTimeout(e,100)}));case 20:m++,e.next=10;break;case 23:return e.abrupt("return",p);case 24:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),b=function(){var e=i(c().mark((function e(t,r,a){var o,s,u;return c().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if("string"!=typeof t){e.next=11;break}return o=t.replace("{{lng}}",r).replace("{{ns}}",a),s=n.readFileSync(o,"utf-8"),e.prev=3,u=JSON.parse(s),e.abrupt("return",u);case 8:throw e.prev=8,e.t0=e.catch(3),new j("Invalid JSON in locale file for "+r+":"+a+". Path: "+o,r,a,e.t0 instanceof Error?e.t0:void 0);case 11:return e.abrupt("return",t(r,a));case 12:case"end":return e.stop()}}),e,null,[[3,8]])})));return function(t,n,r){return e.apply(this,arguments)}}(),x=function(){var e=i(c().mark((function e(t,r,a,o){var s;return c().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if("string"!=typeof t){e.next=4;break}return s=t.replace("{{lng}}",r).replace("{{ns}}",a),n.writeFileSync(s,JSON.stringify(o,null,2)),e.abrupt("return");case 4:return e.next=6,t(r,a,o);case 6:case"end":return e.stop()}}),e)})));return function(t,n,r,a){return e.apply(this,arguments)}}(),k=function(e,t,n){var r=e.split(":");return 1===r.length?n?e:null:r[0]===t?r[1]:null},w=function(){var r=i(c().mark((function r(a){var o,s,u,i,l,f,p,h,d,g,m,x,w,O,S,j,L,E,P;return c().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return o=a.globPatterns,s=a.namespaces,u=a.defaultNamespace,i=a.defaultLocale,l=a.loadPath,f=new t.Parser({nsSeparator:!1,keySeparator:!1}),r.next=4,e([].concat(o,["!**/node_modules/**"]));case 4:for(p=[],h=v(r.sent);!(d=h()).done;)g=n.readFileSync(d.value,"utf-8"),f.parseFuncFromString(g,{list:["t"]},(function(e){p.push(e)}));m=y(p),x=[],w=v(s);case 10:if((O=w()).done){r.next=27;break}return S=O.value,r.next=14,b(l,i,S);case 14:j=r.sent,console.log(Object.keys(j).length,"existing keys"),L=v(m);case 17:if((E=L()).done){r.next=25;break}if(P=k(E.value,S,S===u)){r.next=22;break}return r.abrupt("continue",23);case 22:j[P]||x.push({key:P,namespace:S});case 23:r.next=17;break;case 25:r.next=10;break;case 27:return r.abrupt("return",x);case 28:case"end":return r.stop()}}),r)})));return function(e){return r.apply(this,arguments)}}(),O=function(){var e=i(c().mark((function e(t){return c().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,a({name:"value",type:"text",message:t,onState:function(e){e.aborted&&process.nextTick((function(){process.exit(0)}))}});case 2:return e.abrupt("return",e.sent.value);case 4:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),S=function(){var e=i(c().mark((function e(t){var n,r,a,o,s,u,i,f,p,h,d,g,y,k,w,O,S,j,L,E,P,N,F;return c().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=t.namespaces,r=t.defaultLocale,a=t.loadPath,o=t.locales,s=t.context,u=t.openai,i=t.savePath,f=t.model,!t.disableTranslation){e.next=3;break}return e.abrupt("return");case 3:p=v(n);case 4:if((h=p()).done){e.next=31;break}return d=h.value,e.next=8,b(a,r,d);case 8:g=e.sent,y=v(o);case 10:if((k=y()).done){e.next=29;break}if((w=k.value)!==r){e.next=14;break}return e.abrupt("continue",27);case 14:return e.next=16,b(a,w,d);case 16:for(O=e.sent,S={},j=0,L=Object.entries(g);j<L.length;j++)N=(E=L[j])[1],O[P=E[0]]||(S[P]=N);if(!(Object.keys(S).length>0)){e.next=27;break}return console.log("Found "+Object.keys(S).length+" missing keys in "+w+" (namespace: "+d+")"),e.next=23,m({inputLanguage:r,outputLanguage:w,context:s,object:S,openai:u,model:f});case 23:F=l({},O,e.sent),x(i,w,d,F),console.log("✓ Translated and saved missing keys for "+w+" (namespace: "+d+")");case 27:e.next=10;break;case 29:e.next=4;break;case 31:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),j=function(e){function t(t,n,r,a){var o;return(o=e.call(this,t)||this).locale=void 0,o.namespace=void 0,o.cause=void 0,o.locale=n,o.namespace=r,o.cause=a,o.name="TranslationError",o}var n,r;return r=e,(n=t).prototype=Object.create(r.prototype),n.prototype.constructor=n,p(n,r),t}(h(Error)),L=function(){var e=i(c().mark((function e(t){return c().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,w(t);case 2:e.sent.length>0&&(console.error("Error: Missing translations found!"),process.exit(1));case 4:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),E=function(){var r=i(c().mark((function r(a){var o,s,u,i,l,f,p,h,d,g,m,w,O,S,j,L,E,P,N,F,T,_,C,I,A,G,J,q,M,R,H,Y;return c().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return o=a.globPatterns,s=a.namespaces,u=a.defaultNamespace,i=a.locales,l=a.loadPath,f=a.savePath,p=new t.Parser({nsSeparator:!1,keySeparator:!1}),r.next=4,e([].concat(o,["!**/node_modules/**"]));case 4:for(h=[],d=v(r.sent);!(g=d()).done;)m=n.readFileSync(g.value,"utf-8"),p.parseFuncFromString(m,{list:["t"]},(function(e){h.push(e)}));w=y(h),O={total:0,removed:0},S=v(s);case 10:if((j=S()).done){r.next=37;break}for(L=j.value,E=new Set,P=v(w);!(N=P()).done;)(F=k(N.value,L,L===u))&&E.add(F);T=v(i);case 15:if((_=T()).done){r.next=35;break}return C=_.value,r.next=19,b(l,C,L);case 19:for(I=r.sent,A=Object.keys(I).length,O.total+=A,G={},J=0,q=0,M=Object.entries(I);q<M.length;q++)Y=(R=M[q])[1],E.has(H=R[0])?G[H]=Y:J++;if(O.removed+=J,!(J>0)){r.next=32;break}return r.next=29,x(f,C,L,G);case 29:console.log("✓ Removed "+J+" unused keys from "+C+":"+L+" ("+Object.keys(G).length+" keys remaining)"),r.next=33;break;case 32:console.log("No unused keys found in "+C+":"+L);case 33:r.next=15;break;case 35:r.next=10;break;case 37:O.removed>0?console.log("✅ Removed "+O.removed+" unused keys (out of "+O.total+" total keys)"):console.log("✅ No unused keys found in the project ("+O.total+" total keys)");case 38:case"end":return r.stop()}}),r)})));return function(e){return r.apply(this,arguments)}}(),P=function(){var r=i(c().mark((function r(o){var s,u,i,l,f,p,h,d,g,m,w,O,S,j,L,E,P,N,F,T,_,C,I,A,G,J,q;return c().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return s=o.namespaces,u=o.loadPath,i=o.savePath,l=o.locales,f=o.defaultNamespace,r.next=3,a({type:"select",name:"value",message:"Select source namespace to create pruned version from:",choices:s.map((function(e){return{title:e,value:e}})),onState:function(e){e.aborted&&process.nextTick((function(){process.exit(0)}))}});case 3:return p=r.sent.value,r.next=7,a({type:"text",name:"value",message:"Enter the name for the new namespace:",validate:function(e){return e?!s.includes(e)||"Namespace already exists":"Namespace name cannot be empty"},onState:function(e){e.aborted&&process.nextTick((function(){process.exit(0)}))}});case 7:return h=r.sent.value,r.next=11,a({type:"list",name:"value",message:"Enter glob patterns to find relevant keys (comma separated):",initial:o.globPatterns.join(","),separator:",",onState:function(e){e.aborted&&process.nextTick((function(){process.exit(0)}))}});case 11:return d=r.sent.value,console.log("Finding keys used in files matching: "+d.join(", ")),g=new t.Parser({nsSeparator:!1,keySeparator:!1}),r.next=17,e([].concat(d,["!**/node_modules/**"]));case 17:for(m=r.sent,console.log("Found "+m.length+" files to scan"),w=[],O=v(m);!(S=O()).done;)j=n.readFileSync(S.value,"utf-8"),g.parseFuncFromString(j,{list:["t"]},(function(e){w.push(e)}));for(L=y(w),console.log("Found "+L.length+" unique translation keys"),E=[],P=v(L);!(N=P()).done;)(F=k(N.value,p,p===f))&&E.push(F);if(console.log("Found "+E.length+" keys from namespace '"+p+"'"),0!==E.length){r.next=29;break}return console.log("No relevant keys found. Exiting..."),r.abrupt("return");case 29:T=v(l);case 30:if((_=T()).done){r.next=48;break}return C=_.value,r.prev=32,r.next=35,b(u,C,p);case 35:for(I=r.sent,A={},G=v(E);!(J=G()).done;)I[q=J.value]&&(A[q]=I[q]);return r.next=40,x(i,C,h,A);case 40:console.log("Created pruned namespace '"+h+"' for locale '"+C+"' with "+Object.keys(A).length+" keys"),r.next=46;break;case 43:r.prev=43,r.t0=r.catch(32),console.error("Error creating pruned namespace for locale '"+C+"':",r.t0);case 46:r.next=30;break;case 48:console.log("✅ Successfully created pruned namespace '"+h+"'");case 49:case"end":return r.stop()}}),r,null,[[32,43]])})));return function(e){return r.apply(this,arguments)}}(),N=function(){var r=i(c().mark((function r(a,o){var s,u,i,l,f,p,h,d,g,m,w,O,S,j,L,E,P,N,F,T,_,C,I,A,G,J,q,M,R;return c().wrap((function(r){for(;;)switch(r.prev=r.next){case 0:if(u=a.loadPath,i=a.savePath,l=a.locales,f=a.defaultNamespace,h=o.newNamespace,d=o.globPatterns,(s=a.namespaces).includes(p=o.sourceNamespace)){r.next=4;break}throw new Error("Source namespace '"+p+"' not found in configuration");case 4:if(!s.includes(h)){r.next=6;break}throw new Error("Namespace '"+h+"' already exists");case 6:return console.log("Creating pruned namespace '"+h+"' from '"+p+"'"),console.log("Using glob patterns: "+d.join(", ")),g=new t.Parser({nsSeparator:!1,keySeparator:!1}),r.next=11,e([].concat(d,["!**/node_modules/**"]));case 11:for(m=r.sent,console.log("Found "+m.length+" files to scan"),w=[],O=v(m);!(S=O()).done;)j=n.readFileSync(S.value,"utf-8"),g.parseFuncFromString(j,{list:["t"]},(function(e){w.push(e)}));for(L=y(w),console.log("Found "+L.length+" unique translation keys"),E=[],P=v(L);!(N=P()).done;)(F=k(N.value,p,p===f))&&E.push(F);if(console.log("Found "+E.length+" keys from namespace '"+p+"'"),0!==E.length){r.next=23;break}return console.log("No relevant keys found. Exiting..."),r.abrupt("return",{success:!1,message:"No relevant keys found",keysCount:0});case 23:T=[],_=v(l);case 25:if((C=_()).done){r.next=46;break}return I=C.value,r.prev=27,r.next=30,b(u,I,p);case 30:for(A=r.sent,G={},J=v(E);!(q=J()).done;)A[M=q.value]&&(G[M]=A[M]);return r.next=35,x(i,I,h,G);case 35:R=Object.keys(G).length,console.log("Created pruned namespace '"+h+"' for locale '"+I+"' with "+R+" keys"),T.push({locale:I,keyCount:R,success:!0}),r.next=44;break;case 40:r.prev=40,r.t0=r.catch(27),console.error("Error creating pruned namespace for locale '"+I+"':",r.t0),T.push({locale:I,keyCount:0,success:!1,error:r.t0 instanceof Error?r.t0.message:String(r.t0)});case 44:r.next=25;break;case 46:return console.log("✅ Successfully created pruned namespace '"+h+"'"),r.abrupt("return",{success:!0,message:"Created pruned namespace '"+h+"' with "+E.length+" keys",keysCount:E.length,results:T});case 48:case"end":return r.stop()}}),r,null,[[27,40]])})));return function(e,t){return r.apply(this,arguments)}}(),F=function(){var e=i(c().mark((function e(t){var n;return c().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,O("Enter the key to replace the translation for: ");case 2:if(t[n=e.sent]){e.next=8;break}return console.log('The key "'+n+'" does not exist.'),e.next=7,F(t);case 7:return e.abrupt("return",e.sent);case 8:return console.log('The key "'+n+'" exists.'),e.abrupt("return",n);case 10:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),T=function(){var e=i(c().mark((function e(t,n){var r,a,o,s,u,i,l,f,p,h,d,g,y,k,w,S;return c().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=t.loadPath,a=t.savePath,o=t.defaultLocale,s=t.defaultNamespace,u=t.locales,i=t.context,l=t.openai,e.next=3,b(t.loadPath,t.defaultLocale,t.defaultNamespace);case 3:if(f=e.sent,!n){e.next=16;break}if(!f[n]){e.next=10;break}p=n,console.log('The key "'+p+'" exists.'),e.next=14;break;case 10:return console.log('The key "'+n+'" does not exist.'),e.next=13,F(f);case 13:p=e.sent;case 14:e.next=19;break;case 16:return e.next=18,F(f);case 18:p=e.sent;case 19:return console.log("The current translation in "+o+' for "'+p+'" is "'+f[p]+'".'),e.next=22,O("Enter the new translation: ");case 22:h=e.sent,d=v(u);case 24:if((g=d()).done){e.next=43;break}if(k="",(y=g.value)!==o){e.next=31;break}k=h,e.next=35;break;case 31:return e.next=33,m({context:i,inputLanguage:o,outputLanguage:y,object:(w={},w[p]=h,w),openai:l,model:t.model});case 33:k=e.sent[p];case 35:return e.next=37,b(r,y,s);case 37:(S=e.sent)[p]=k,x(a,y,s,S),console.log('The new translation for "'+p+'" in '+y+' is "'+k+'".');case 41:e.next=24;break;case 43:case"end":return e.stop()}}),e)})));return function(t,n){return e.apply(this,arguments)}}(),_=function(){var e=i(c().mark((function e(t){var n,r,a,s,u,i,l,f,p,h,d,g,y,k,j,L,P,N,F,T,_;return c().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(n=t.loadPath,r=t.savePath,a=t.defaultLocale,s=t.namespaces,u=t.locales,i=t.context,l=t.openai,f=t.disableTranslation,!t.autoClear){e.next=6;break}return o.log("🧹 Auto-clearing unused translations before scanning..."),e.next=5,E(t);case 5:o.log("✅ Auto-clear completed. Now scanning for missing translations...\n");case 6:return e.next=8,w(t);case 8:if(0!==(p=e.sent).length){e.next=14;break}return o.log("No new keys found."),e.next=13,S(t);case 13:return e.abrupt("return");case 14:o.log(p.length+" keys are missing. Please provide the values for the following keys in "+a+":"),h=[],d=v(p);case 17:if((g=d()).done){e.next=25;break}return y=g.value,e.next=21,O(y.key);case 21:h.push({key:y.key,namespace:y.namespace,value:e.sent});case 23:e.next=17;break;case 25:k=h.reduce((function(e,t){return e[t.key]=t.value,e}),{}),j=v(f?[a]:u);case 28:if((L=j()).done){e.next=48;break}if(N={},(P=L.value)!==a){e.next=35;break}N=k,e.next=38;break;case 35:return e.next=37,m({inputLanguage:a,outputLanguage:P,context:i,object:k,openai:l,model:t.model});case 37:N=e.sent;case 38:F=c().mark((function e(){var t,a,o,s,u,i;return c().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t=_.value,e.next=3,b(n,P,t);case 3:if(a=e.sent,o=h.filter((function(e){return e.namespace===t})),0!==o.length){e.next=7;break}return e.abrupt("return",1);case 7:for(s=v(o);!(u=s()).done;)a[(i=u.value).key]=N[i.key];x(r,P,t,a);case 9:case"end":return e.stop()}}),e)})),T=v(s);case 40:if((_=T()).done){e.next=46;break}return e.delegateYield(F(),"t0",42);case 42:if(!e.t0){e.next=44;break}return e.abrupt("continue",44);case 44:e.next=40;break;case 46:e.next=28;break;case 48:return e.next=50,S(t);case 50:o.log("Successfully translated "+p.length+" keys.");case 51:case"end":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}(),C=function(){var e=i(c().mark((function e(t){var n,r,a,o,s,u,i,f,p,h,d,g,y,k,w,O,S,L,E,P,N,F,T;return c().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=t.loadPath,r=t.savePath,a=t.defaultLocale,o=t.namespaces,s=t.locales,u=t.context,i=t.openai,e.prev=1,f=v(o);case 3:if((p=f()).done){e.next=62;break}return h=p.value,d=void 0,e.prev=6,e.next=9,b(n,a,h);case 9:d=e.sent,e.next=15;break;case 12:throw e.prev=12,e.t0=e.catch(6),new j('Failed to load default locale file for namespace "'+h+'"',a,h,e.t0 instanceof Error?e.t0:void 0);case 15:g=v(s);case 16:if((y=g()).done){e.next=60;break}if((k=y.value)!==a){e.next=20;break}return e.abrupt("continue",58);case 20:return w=void 0,e.prev=21,e.next=24,b(n,k,h);case 24:w=e.sent,e.next=31;break;case 27:e.prev=27,e.t1=e.catch(21),console.warn("Warning: Could not load locale file for "+k+" (namespace: "+h+"). Creating new file."),w={};case 31:for(O={},S=0,L=Object.entries(d);S<L.length;S++)N=(E=L[S])[1],w[P=E[0]]||(O[P]=N);if(!(Object.keys(O).length>0)){e.next=57;break}return console.log("Found "+Object.keys(O).length+" missing keys in "+k+" (namespace: "+h+")"),F=void 0,e.prev=36,e.next=39,m({inputLanguage:a,outputLanguage:k,context:u,object:O,openai:i,model:t.model});case 39:F=e.sent,e.next=45;break;case 42:throw e.prev=42,e.t2=e.catch(36),new j('Failed to translate keys for locale "'+k+'" (namespace: '+h+")",k,h,e.t2 instanceof Error?e.t2:void 0);case 45:return T=l({},w,F),e.prev=46,e.next=49,x(r,k,h,T);case 49:e.next=54;break;case 51:throw e.prev=51,e.t3=e.catch(46),new j('Failed to save translations for locale "'+k+'" (namespace: '+h+")",k,h,e.t3 instanceof Error?e.t3:void 0);case 54:console.log("Successfully translated and saved "+Object.keys(O).length+" keys for "+k+" (namespace: "+h+")"),e.next=58;break;case 57:console.log("No missing keys found for "+k+" (namespace: "+h+")");case 58:e.next=16;break;case 60:e.next=3;break;case 62:e.next=69;break;case 64:if(e.prev=64,e.t4=e.catch(1),!(e.t4 instanceof j)){e.next=68;break}throw e.t4;case 68:throw new j("An unexpected error occurred during translation",void 0,void 0,e.t4 instanceof Error?e.t4:void 0);case 69:case"end":return e.stop()}}),e,null,[[1,64],[6,12],[21,27],[36,42],[46,51]])})));return function(t){return e.apply(this,arguments)}}();exports.checkMissing=L,exports.createPrunedNamespace=P,exports.createPrunedNamespaceAutomated=N,exports.loadConfig=function(e){var t=e.configPath,a=void 0===t?"i18n-magic.js":t,o=r.join(process.cwd(),a);n.existsSync(o)||(console.error("Config file does not exist:",o),process.exit(1));try{return require(o)}catch(e){console.error("Error while loading config:",e),process.exit(1)}},exports.removeUnusedKeys=E,exports.replaceTranslation=T,exports.syncLocales=C,exports.translateMissing=_;
//# sourceMappingURL=i18n-magic.cjs.production.min.js.map