@terai/dev 0.0.0-dev-20261017133302 → 0.0.0-dev-20261017203019
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.default.cjs +13 -13
- package/dist/cli.default.cjs.map +1 -1
- package/dist/cli.default.mjs +6 -6
- package/dist/cli.default.mjs.map +1 -1
- package/package.json +8 -8
package/dist/cli.default.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{createRequire as e}from"node:module";import{cac as t}from"cac";import{findConfig as n,loadConfig as r,runtime as i,setupConfig as a}from"@terai/runtime";import o,{env as s}from"node:process";import c from"node:os";import l from"node:tty";import{spawn as u}from"node:child_process";import{fileURLToPath as d}from"node:url";import f from"node:path";import{format as p,promisify as m}from"node:util";import h from"os";import g from"path";import _ from"node:fs";import{input as v}from"@inquirer/prompts";import{preferredPM as y}from"preferred-pm";import{debounce as b}from"perfect-debounce";import{extract as x}from"@terai/extractor";import{convertExtractedMessagesToDictionary as S,groupDictionaryByChunks as C,
|
|
2
|
+
import{createRequire as e}from"node:module";import{cac as t}from"cac";import{findConfig as n,loadConfig as r,runtime as i,setupConfig as a}from"@terai/runtime";import o,{env as s}from"node:process";import c from"node:os";import l from"node:tty";import{spawn as u}from"node:child_process";import{fileURLToPath as d}from"node:url";import f from"node:path";import{format as p,promisify as m}from"node:util";import h from"os";import g from"path";import _ from"node:fs";import{input as v}from"@inquirer/prompts";import{preferredPM as y}from"preferred-pm";import{debounce as b}from"perfect-debounce";import{extract as x}from"@terai/extractor";import{convertExtractedMessagesToDictionary as S,groupDictionaryByChunks as C,resolveLocaleDictionary as ee,stringify as te}from"@terai/utils";import{translateDictionary as ne}from"@terai/translator";import{isMainThread as re,parentPort as w}from"node:worker_threads";var ie=Object.create,ae=Object.defineProperty,oe=Object.getOwnPropertyDescriptor,se=Object.getOwnPropertyNames,ce=Object.getPrototypeOf,le=Object.prototype.hasOwnProperty,ue=(e,t,n)=>()=>{if(n)throw n[0];try{return e&&(t=e(e=0)),t}catch(e){throw n=[e],e}},T=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t,t.exports),e=null),t.exports),de=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var i=se(t),a=0,o=i.length,s;a<o;a++)s=i[a],!le.call(e,s)&&s!==n&&ae(e,s,{get:(e=>t[e]).bind(null,s),enumerable:!(r=oe(t,s))||r.enumerable});return e},E=(e,t,n)=>(n=e==null?{}:ie(ce(e)),de(t||!e||!e.__esModule||!le.call(e,`default`)?ae(n,`default`,{value:e,enumerable:!0}):n,e)),D=/* @__PURE__ */ e(import.meta.url);function fe(e,t,n){let r=e.indexOf(t);if(r===-1)return e;let i=t.length,a=0,o=``;do o+=e.slice(a,r)+t+n,a=r+i,r=e.indexOf(t,a);while(r!==-1);return o+=e.slice(a),o}function pe(e,t,n,r){let i=0,a=``;do{let o=e[r-1]===`\r`;a+=e.slice(i,o?r-1:r)+t+(o?`\r
|
|
3
3
|
`:`
|
|
4
4
|
`)+n,i=r+1,r=e.indexOf(`
|
|
5
5
|
`,i)}while(r!==-1);return a+=e.slice(i),a}const me=(e=0)=>t=>`\u{1B}[${t+e}m`,he=(e=0)=>t=>`\u{1B}[${38+e};5;${t}m`,ge=(e=0)=>(t,n,r)=>`\u{1B}[${38+e};2;${t};${n};${r}m`,_e=e=>`\u{1B}[58;5;${e<90?e-30:e-90+8}m`,O={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],underlineDouble:[`4:2`,24],underlineCurly:[`4:3`,24],underlineDotted:[`4:4`,24],underlineDashed:[`4:5`,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]},underlineColor:{underlineBlack:[`58;5;0`,59],underlineRed:[`58;5;1`,59],underlineGreen:[`58;5;2`,59],underlineYellow:[`58;5;3`,59],underlineBlue:[`58;5;4`,59],underlineMagenta:[`58;5;5`,59],underlineCyan:[`58;5;6`,59],underlineWhite:[`58;5;7`,59],underlineBlackBright:[`58;5;8`,59],underlineGray:[`58;5;8`,59],underlineGrey:[`58;5;8`,59],underlineRedBright:[`58;5;9`,59],underlineGreenBright:[`58;5;10`,59],underlineYellowBright:[`58;5;11`,59],underlineBlueBright:[`58;5;12`,59],underlineMagentaBright:[`58;5;13`,59],underlineCyanBright:[`58;5;14`,59],underlineWhiteBright:[`58;5;15`,59]}};Object.keys(O.modifier);const ve=Object.keys(O.color),ye=Object.keys(O.bgColor);Object.keys(O.underlineColor),[...ve,...ye];function be(){let e=/* @__PURE__ */ new Map;for(let[t,n]of Object.entries(O)){for(let[t,r]of Object.entries(n))O[t]={open:`\u{1B}[${r[0]}m`,close:`\u{1B}[${r[1]}m`},n[t]=O[t],e.set(Number.parseInt(r[0],10),r[1]);Object.defineProperty(O,t,{value:n,enumerable:!1})}return Object.defineProperty(O,"codes",{value:e,enumerable:!1}),O.color.close=`\x1B[39m`,O.bgColor.close=`\x1B[49m`,O.underlineColor.close=`\x1B[59m`,O.color.ansi=me(),O.color.ansi256=he(),O.color.ansi16m=ge(),O.bgColor.ansi=me(10),O.bgColor.ansi256=he(10),O.bgColor.ansi16m=ge(10),O.underlineColor.ansi=_e,O.underlineColor.ansi256=he(20),O.underlineColor.ansi16m=ge(20),Object.defineProperties(O,{rgbToAnsi256:{value(e,t,n){return e===t&&t===n?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(t/255*5)+Math.round(n/255*5)},enumerable:!1},hexToRgb:{value(e){let t=/[\da-f]{6}|[\da-f]{3}/i.exec(e.toString(16));if(!t)return[0,0,0];let[n]=t;n.length===3&&(n=[...n].map(e=>e+e).join(``));let r=Number.parseInt(n,16);return[r>>16&255,r>>8&255,r&255]},enumerable:!1},hexToAnsi256:{value:e=>O.rgbToAnsi256(...O.hexToRgb(e)),enumerable:!1},ansi256ToAnsi:{value(e){if(e<8)return 30+e;if(e<16)return 90+(e-8);let t,n,r;if(e>=232)t=((e-232)*10+8)/255,n=t,r=t;else{e-=16;let i=e%36;t=Math.floor(e/36)/5,n=Math.floor(i/6)/5,r=i%6/5}let i=Math.max(t,n,r)*2;if(i===0)return 30;let a=30+(Math.round(r)<<2|Math.round(n)<<1|Math.round(t));return i===2&&(a+=60),a},enumerable:!1},rgbToAnsi:{value:(e,t,n)=>O.ansi256ToAnsi(O.rgbToAnsi256(e,t,n)),enumerable:!1},hexToAnsi:{value:e=>O.ansi256ToAnsi(O.hexToAnsi256(e)),enumerable:!1}}),O}const k=be();function A(e,t=globalThis.Deno?globalThis.Deno.args:o.argv){let n=e.startsWith(`-`)?``:e.length===1?`-`:`--`,r=t.indexOf(n+e),i=t.indexOf(`--`);return r!==-1&&(i===-1||r<i)}const{env:j}=o;let xe;A(`no-color`)||A(`no-colors`)||A(`color=false`)||A(`color=never`)?xe=0:(A(`color`)||A(`colors`)||A(`color=true`)||A(`color=always`))&&(xe=1);function Se(){return/^\d+$/.test(j.FORCE_COLOR)}function Ce(){if(`FORCE_COLOR`in j){if(j.FORCE_COLOR===`false`)return 0;if(j.FORCE_COLOR===`true`||j.FORCE_COLOR.length===0)return 1;if(Se())return Math.min(Number.parseInt(j.FORCE_COLOR,10),3)}}function we(e){return e!==0&&{level:e,hasBasic:!0,has256:e>=2,has16m:e>=3}}function Te(e,{streamIsTTY:t,sniffFlags:n=!0}={}){let r=Ce();r!==void 0&&(xe=r);let i=n?xe:r;if(i===0)return 0;if(n){if(A(`color=16m`)||A(`color=full`)||A(`color=truecolor`))return 3;if(A(`color=256`))return 2}if(i!==void 0&&Se())return i;if(`TF_BUILD`in j&&`AGENT_NAME`in j)return 1;if(e&&!t&&i===void 0)return 0;let a=i||0;if(j.TERM===`dumb`)return a;if(o.platform===`win32`){let e=c.release().split(`.`);return Number(e[0])>=10&&Number(e[2])>=10586?Number(e[2])>=14931?3:2:1}if(`CI`in j)return[`GITHUB_ACTIONS`,`GITEA_ACTIONS`,`CIRCLECI`].some(e=>e in j)?3:[`TRAVIS`,`APPVEYOR`,`GITLAB_CI`,`BUILDKITE`,`DRONE`].some(e=>e in j)||j.CI_NAME===`codeship`?1:a;if(`TEAMCITY_VERSION`in j)return+!!/^(?:9\.0*[1-9]\d*\.|\d{2,}\.)/.test(j.TEAMCITY_VERSION);if(j.COLORTERM===`truecolor`||j.TERM===`xterm-kitty`||j.TERM===`xterm-ghostty`||j.TERM===`wezterm`)return 3;if(`TERM_PROGRAM`in j){let e=Number.parseInt((j.TERM_PROGRAM_VERSION||``).split(`.`,1)[0],10);switch(j.TERM_PROGRAM){case`iTerm.app`:return e>=3?3:2;case`Apple_Terminal`:return 2}}return/-256(?:color)?$/i.test(j.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(j.TERM)||`COLORTERM`in j?1:a}function Ee(e,t={}){return we(Te(e,{streamIsTTY:e&&e.isTTY,...t}))}const{stdout:De,stderr:Oe}={stdout:Ee({isTTY:l.isatty(1)}),stderr:Ee({isTTY:l.isatty(2)})},ke=Symbol(`GENERATOR`),Ae=Symbol(`STYLER`),je=Symbol(`IS_EMPTY`),Me=Symbol(`LEVEL`),Ne=Object.create(null),Pe=e=>{if(!Number.isSafeInteger(e)||e<0||e>3)throw Error("The `level` should be an integer from 0 to 3")},Fe={enumerable:!0,get(){return this[Me]},set(e){Pe(e),this[Me]=e}},Ie=(e,t={})=>{t.level!==void 0&&Pe(t.level);let n=De?De.level:0;e[Me]=t.level===void 0?n:t.level},Le=e=>{let t=(...e)=>e.join(` `);return Ie(t,e),Object.setPrototypeOf(t,Re.prototype),t};function Re(e){return Le(e)}Object.setPrototypeOf(Re.prototype,Function.prototype);for(let[e,t]of Object.entries(k))Ne[e]={get(){let n=He(this,Ve(t.open,t.close,this[Ae]),this[je]);return Object.defineProperty(this,e,{value:n}),n}};Ne.visible={get(){let e=He(this,this[Ae],!0);return Object.defineProperty(this,"visible",{value:e}),e}};const ze=(e,t)=>{let n=k[t];if(e===`rgb`){let e=(e,t,r)=>n.ansi(k.rgbToAnsi(e,t,r));return[e,e,(e,t,r)=>n.ansi256(k.rgbToAnsi256(e,t,r)),n.ansi16m]}if(e===`hex`){let e=e=>n.ansi(k.hexToAnsi(e));return[e,e,e=>n.ansi256(k.hexToAnsi256(e)),e=>n.ansi16m(...k.hexToRgb(e))]}let r=e=>n.ansi(k.ansi256ToAnsi(e));return[r,r,n.ansi256,n.ansi256]};for(let e of[`rgb`,`hex`,`ansi256`]){let t=e[0].toUpperCase()+e.slice(1);for(let[n,r]of[[e,`color`],[`bg`+t,`bgColor`],[`underline`+t,`underlineColor`]]){let{close:t}=k[r],i=ze(e,r);Ne[n]={get(){let e=function(e,n,r){let a=i[this.level](e,n,r);return He(this,Ve(a,t,this[Ae]),this[je])};return Object.defineProperty(this,n,{value:e}),e}}}}const Be=Object.defineProperties(()=>{},{...Ne,level:{enumerable:!0,get(){return this[ke].level},set(e){this[ke].level=e}}}),Ve=(e,t,n)=>{let r,i;return n===void 0?(r=e,i=t):(r=n.openAll+e,i=t+n.closeAll),{open:e,close:t,openAll:r,closeAll:i,parent:n}},He=(e,t,n)=>{let r=(...e)=>e.length===1?Ue(r,``+e[0]):e.length===2?Ue(r,`${e[0]??``} ${e[1]??``}`):Ue(r,e.join(` `));return Object.setPrototypeOf(r,Be),r[ke]=e[ke]??e,r[Ae]=t,r[je]=n,r},Ue=(e,t)=>{if(e[ke][Me]<=0||!t)return e[je]?``:t;let n=e[Ae];if(n===void 0)return t;let{openAll:r,closeAll:i}=n;if(t.includes(`\x1B`))for(;n!==void 0;)t=fe(t,n.close,n.open),n=n.parent;let a=t.indexOf(`
|
|
@@ -82,13 +82,13 @@ let n=t.platform===`win32`?`\r
|
|
|
82
82
|
Try running with %s or get access `,U.cyan(`sudo`))+`
|
|
83
83
|
to the local update config store via
|
|
84
84
|
`+U.cyan(p(` sudo chown -R $USER:$(id -gn $USER) %s `,st));o.on(`exit`,()=>{console.error(mo(t,{textAlignment:`center`}))})}}check(){!this.config||this.config.get(`optOut`)||this.#r||(this.update=this.config.get(`update`),this.update&&(this.update.current=this.#t,this.config.delete(`update`)),!(Date.now()-this.config.get(`lastUpdateCheck`)<this.#n)&&u(o.execPath,[f.join(xo,`check.js`),JSON.stringify(this.#e)],{detached:!0,stdio:`ignore`}).unref())}async fetchInfo(){let{distTag:e}=this.#e,t=await ji(this._packageName,{version:e});return{latest:t,current:this.#t,type:(0,Dn.default)(this.#t,t)??e,name:this._packageName}}notify(e){let t=!this._shouldNotifyInNpmScript&&Ii;if(!o.stdout.isTTY||t||!this.update||!(0,On.default)(this.update.latest,this.update.current))return this;e={isGlobal:Yi,...e};let n=e.isGlobal?`npm i -g ${this._packageName}`:`npm i ${this._packageName}`,r=`Update available `+U.dim(`{currentVersion}`)+U.reset(` → `)+U.green(`{latestVersion}`)+`
|
|
85
|
-
Run `+U.cyan(`{updateCommand}`)+` to update`,i=e.message||r;e.boxenOptions??={padding:1,margin:1,textAlignment:`center`,borderColor:`yellow`,borderStyle:`round`};let a=mo(bo(i,{packageName:this._packageName,currentVersion:this.update.current,latestVersion:this.update.latest,updateCommand:n}),e.boxenOptions);return e.defer===!1?console.error(a):o.on(`exit`,()=>{console.error(a)}),this}};function Co(e){let t=new So(e);return t.check(),t}var wo={name:`@terai/dev`,version:`0.0.0-dev-
|
|
85
|
+
Run `+U.cyan(`{updateCommand}`)+` to update`,i=e.message||r;e.boxenOptions??={padding:1,margin:1,textAlignment:`center`,borderColor:`yellow`,borderStyle:`round`};let a=mo(bo(i,{packageName:this._packageName,currentVersion:this.update.current,latestVersion:this.update.latest,updateCommand:n}),e.boxenOptions);return e.defer===!1?console.error(a):o.on(`exit`,()=>{console.error(a)}),this}};function Co(e){let t=new So(e);return t.check(),t}var wo={name:`@terai/dev`,version:`0.0.0-dev-20261017203019`,description:`The user-facing package for Terai`,engines:{node:`>=22.13.0`},main:`./dist/index.cjs`,module:`./dist/index.mjs`,types:`./dist/index.d.mts`,repository:{type:`git`,url:`git+https://github.com/terai-labs/terai.git`,directory:`packages/dev`},private:!1,author:`Hugo Corta <corta.hugo@gmail.com>`,bin:{terai:`bin.js`},scripts:{dev:`tsdown --format=esm --no-dts --watch`,build:`tsdown`},files:[`bin.js`,`dist`],sideEffects:!1,publishConfig:{access:`public`},exports:{".":{import:{types:`./dist/index.d.mts`,default:`./dist/index.mjs`},require:{types:`./dist/index.d.cts`,default:`./dist/index.cjs`}}},dependencies:{"@inquirer/prompts":`^8.7.3`,"@terai/extractor":`workspace:*`,"@terai/runtime":`workspace:*`,"@terai/translator":`workspace:*`,"@terai/types":`workspace:*`,"@terai/utils":`workspace:*`,cac:`^7.1.0`,dotenv:`^18.0.8`,inquirer:`^14.2.3`,kleur:`^4.1.5`,"perfect-debounce":`^2.1.0`,"preferred-pm":`^5.0.1`},devDependencies:{"@terai/generator":`workspace:*`,"@terai/logger":`workspace:*`,"@types/update-notifier":`^6.0.8`,"update-notifier":`^7.3.1`}},To=(/* @__PURE__ */ T(((e,t)=>{Object.defineProperty(e,"__esModule",{value:!0}),e.outdent=void 0;function n(){}function r(){return typeof WeakMap<`u`?/* @__PURE__ */ new WeakMap:i()}function i(){return{add:n,delete:n,get:n,set:n,has:function(e){return!1}}}var a=Object.prototype.hasOwnProperty,o=function(e,t){return a.call(e,t)};function s(e,t){for(var n in t)o(t,n)&&(e[n]=t[n]);return e}var c=/^[ \t]*(?:\r\n|\r|\n)/,l=/(?:\r\n|\r|\n)[ \t]*$/,u=/^(?:[\r\n]|$)/,d=/(?:\r\n|\r|\n)([ \t]*)(?:[^ \t\r\n]|$)/,f=/^[ \t]*[\r\n][ \t\r\n]*$/;function p(e,t,n){var r=0,i=e[0].match(d);i&&(r=i[1].length);var a=`(\\r\\n|\\r|\\n).{0,`+r+`}`,o=new RegExp(a,`g`);t&&(e=e.slice(1));var s=n.newline,u=n.trimLeadingNewline,f=n.trimTrailingNewline,p=typeof s==`string`,m=e.length;return e.map(function(e,t){return e=e.replace(o,`$1`),t===0&&u&&(e=e.replace(c,``)),t===m-1&&f&&(e=e.replace(l,``)),p&&(e=e.replace(/\r\n|\n|\r/g,function(e){return s})),e})}function m(e,t){for(var n=``,r=0,i=e.length;r<i;r++)n+=e[r],r<i-1&&(n+=t[r]);return n}function h(e){return o(e,`raw`)&&o(e,`length`)}function g(e){var t=r(),n=r();function i(r){var a=[...arguments].slice(1);if(h(r)){var o=r,c=(a[0]===i||a[0]===_)&&f.test(o[0])&&u.test(o[1]),l=c?n:t,d=l.get(o);return d||(d=p(o,c,e),l.set(o,d)),a.length===0?d[0]:m(d,c?a.slice(1):a)}return g(s(s({},e),r||{}))}return s(i,{string:function(t){return p([t],!1,e)[0]}})}var _=g({trimLeadingNewline:!0,trimTrailingNewline:!0});if(e.outdent=_,e.default=_,t!==void 0)try{t.exports=_,Object.defineProperty(_,"__esModule",{value:!0}),_.default=_,_.outdent=_}catch{}})))();function Eo(e,t){return e.command(`init`,`Initialize config file`).option(`-f, --force`,`Force overwrite existing config files`).option(`--cwd <cwd>`,`Current working directory`,{default:t}).action(Do)}async function Do({cwd:e,force:t}){N.heading(`init`,`Initialize config file`);let r=n({cwd:e}),i=(await y(e))?.name??`npm`,o=i===`npm`?`npm run`:i;if(r&&!t)return N.log(To.outdent`
|
|
86
86
|
It looks like you already have a config file created.
|
|
87
87
|
You can now run ${N.colors.cyan(`'${o} terai extract --watch'`)}
|
|
88
|
-
`);let s=await v({message:`What locale do you use in your project messages?`,default:`en-US`,validate:e=>e.trim().length!==0||`Please provide a valid locale`}),c=await v({message:`What locales do you want to support? (comma separated)`,default:`fr-FR,es-ES,de-DE`,validate:e=>e.trim().length!==0||`Please provide at least one locale`,transformer:e=>e.split(`,`).map(e=>e.trim()).join(`,`)}),l=await v({message:`Where do you want to place your generated files?`,default:`./locale`}),u=N.time.success();await a({cwd:e,projectLocale:s,outDir:l,outLocales:c.split(`,`)}),u(`Config file created`),N.log(`🚀 You are set up to start using Terai! Thanks for choosing it.`)}async function Oo({dictionaries:e,locale:t,cwd:n,outDir:r}){let a=i.path.resolve(n,r,t),o=[];for(let t in e){let n=i.path.resolve(a,`${t}.json`),r=e[t],s=te(r);i.fs.write(n,s),o.push(s)}return o}function ko(e,t){return e.command(`extract`,`Statically extract messages from your project`).option(`-w, --watch`,`Watch files and rebuild`).option(`--cwd <cwd>`,`Current working directory`,{default:t}).action(Ao)}async function Ao(e){N.heading(`extract`,`Statically extract messages from your project`);let t=N.time.success(),n=await r(e),a=i.fs.glob({...n,cwd:e.cwd}),o=i.path.resolve(e.cwd,n.outDir),s=i.path.resolve(o,n.projectLocale),c=i.path.resolve(o,`.terai`,`locale-manifest.json`);N.info(`Scan:`,`Processing files...`);async function l(t=a){let r=await x({...n,filesPaths:t,cwd:e.cwd}),o=S(r),l={messages:r},u=C(o,l,n.projectLocale);return i.fs.remove(i.path.resolve(s)),await Oo({...n,dictionaries:u,locale:n.projectLocale,cwd:e.cwd}),i.fs.write(c,te(l)),Object.keys(o).length}N.info(`Extraction:`,`Extracting messages...`)
|
|
89
|
-
`),i.fs.watch({...n,...e}).on(`change`,b(async()=>{let e=N.time.success();N.info(`Extraction:`,`Files changed, processing messages...`)
|
|
88
|
+
`);let s=await v({message:`What locale do you use in your project messages?`,default:`en-US`,validate:e=>e.trim().length!==0||`Please provide a valid locale`}),c=await v({message:`What locales do you want to support? (comma separated)`,default:`fr-FR,es-ES,de-DE`,validate:e=>e.trim().length!==0||`Please provide at least one locale`,transformer:e=>e.split(`,`).map(e=>e.trim()).join(`,`)}),l=await v({message:`Where do you want to place your generated files?`,default:`./locale`}),u=N.time.success();await a({cwd:e,projectLocale:s,outDir:l,outLocales:c.split(`,`)}),u(`Config file created`),N.log(`🚀 You are set up to start using Terai! Thanks for choosing it.`)}async function Oo({dictionaries:e,locale:t,cwd:n,outDir:r}){let a=i.path.resolve(n,r,t),o=[];for(let t in e){let n=i.path.resolve(a,`${t}.json`),r=e[t],s=te(r);i.fs.write(n,s),o.push(s)}return o}function ko(e,t){return e.command(`extract`,`Statically extract messages from your project`).option(`-w, --watch`,`Watch files and rebuild`).option(`--cwd <cwd>`,`Current working directory`,{default:t}).action(Ao)}async function Ao(e){N.heading(`extract`,`Statically extract messages from your project`);let t=N.time.success(),n=await r(e),a=i.fs.glob({...n,cwd:e.cwd}),o=i.path.resolve(e.cwd,n.outDir),s=i.path.resolve(o,n.projectLocale),c=i.path.resolve(o,`.terai`,`locale-manifest.json`);N.info(`Scan:`,`Processing files...`);async function l(t=a){let r=await x({...n,filesPaths:t,cwd:e.cwd}),o=S(r),l={messages:r},u=C(o,l,n.projectLocale);return i.fs.remove(i.path.resolve(s)),await Oo({...n,dictionaries:u,locale:n.projectLocale,cwd:e.cwd}),i.fs.write(c,te(l)),Object.keys(o).length}N.info(`Extraction:`,`Extracting messages...`);try{t(`Extracted ${await l()} messages`)}catch(t){if(N.error(`extract`,t instanceof Error?t.message:String(t)),process.exitCode=1,!e.watch)return}e.watch&&(N.log(``),N.info(`Watch:`,`Watching files for changes...
|
|
89
|
+
`),i.fs.watch({...n,...e}).on(`change`,b(async()=>{let e=N.time.success();N.info(`Extraction:`,`Files changed, processing messages...`);try{e(`Extracted ${await l()} messages`)}catch(e){N.error(`extract`,e instanceof Error?e.message:String(e))}N.log(``)})))}function jo(e,t){return e.command(`translate`,`Translate messages from your project`).option(`--cwd <cwd>`,`Current working directory`,{default:t}).action(Mo)}async function Mo({cwd:e}){N.heading(`translate`,`Translate messages from your project`);let t=N.time.success(),n=await r({cwd:e}),a=i.path.resolve(e,n.outDir),o=i.path.resolve(e,n.outDir,`.terai`),s=i.path.resolve(o,`locale-manifest.json`);if(!i.fs.exists(s))return process.exitCode=1,N.error(`translate`,`No locale-manifest.json found in ${o}. Please run "extract" first.`);let c=JSON.parse(i.fs.readFile(s)),l=0,u=0,d=[];if(await Promise.all(n.outLocales.map(async t=>{try{let r=i.path.resolve(a,t),s=i.path.resolve(o,`cache`,`${t}.cache.json`),f=i.fs.exists(s)?JSON.parse(i.fs.readFile(s)):{},p=/* @__PURE__ */ new Map,{translated:m,untranslated:h}=ee({manifest:c,locale:t,cache:f,readChunk:e=>{let t=p.get(e);if(t)return t;let n=i.path.resolve(r,`${e}.json`),a=i.fs.exists(n)?JSON.parse(i.fs.readFile(n)):{};return p.set(e,a),a}}),g=Object.keys(m).length,_=Object.keys(h).length,v=0,y=[];if(_>0){let e=await ne({...n,dictionary:h,locale:t});if(Object.assign(m,e.dictionary),v=Object.keys(e.dictionary).length,e.failed.length){let t=e.errors.map(No).join(`; `);y.push(`${e.failed.length} messages failed to translate (${t})`)}e.missing.length&&y.push(`${e.missing.length} messages missing from the translator response (${e.missing.slice(0,5).join(`, `)}${e.missing.length>5?`, …`:``})`)}if(i.fs.write(s,te({...f,...m})),i.fs.remove(r),await Oo({...n,dictionaries:C(m,c,t),locale:t,cwd:e}),l+=v,u+=g,N.info(`Locale ${t.toUpperCase()}:`,`${v} new messages translated, ${g} recovered from cache`),y.length){let e=y.join(`, `);d.push({locale:t,reason:e}),N.error(`${t} translation:`,e)}}catch(e){let n=No(e);d.push({locale:t,reason:n}),N.error(`${t} translation:`,`Error translating to ${t}: ${n}\n`)}})),d.length)return process.exitCode=1,N.error(`translate`,`Translation incomplete for ${d.length}/${n.outLocales.length} locales (${d.map(e=>e.locale).join(`, `)}). Translated ${l} messages; run "translate" again to retry the rest.`);if(!l)return t(`Everything up-to-date`);t(`Translated ${l} messages, ${u} read from cache`)}function No(e){return e instanceof Error?e.cause?`${e.message}: ${No(e.cause)}`:e.message:String(e)}async function Po(){Co({pkg:wo,distTag:`latest`}).notify(),N.log(`${N.colors.bold(`terai`)} ${N.colors.cyan(`v${wo.version}`)}`);let e=i.cwd(),n=t(`terai`);Eo(n,e),ko(n,e),jo(n,e),n.help(),n.version(wo.version),n.parse(process.argv,{run:!1});try{await n.runMatchedCommand()}catch(e){e instanceof Error&&N.error(e.message),process.exit(1)}}function Fo(e,t,n){let r=e.indexOf(t);if(r===-1)return e;let i=t.length,a=0,o=``;do o+=e.slice(a,r)+t+n,a=r+i,r=e.indexOf(t,a);while(r!==-1);return o+=e.slice(a),o}function Io(e,t,n,r){let i=0,a=``;do{let o=e[r-1]===`\r`;a+=e.slice(i,o?r-1:r)+t+(o?`\r
|
|
90
90
|
`:`
|
|
91
91
|
`)+n,i=r+1,r=e.indexOf(`
|
|
92
|
-
`,i)}while(r!==-1);return a+=e.slice(i),a}const
|
|
93
|
-
`);return a!==-1&&(t=
|
|
92
|
+
`,i)}while(r!==-1);return a+=e.slice(i),a}const Lo=(e=0)=>t=>`\u{1B}[${t+e}m`,Ro=(e=0)=>t=>`\u{1B}[${38+e};5;${t}m`,zo=(e=0)=>(t,n,r)=>`\u{1B}[${38+e};2;${t};${n};${r}m`,Bo=e=>`\u{1B}[58;5;${e<90?e-30:e-90+8}m`,X={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],underlineDouble:[`4:2`,24],underlineCurly:[`4:3`,24],underlineDotted:[`4:4`,24],underlineDashed:[`4:5`,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]},underlineColor:{underlineBlack:[`58;5;0`,59],underlineRed:[`58;5;1`,59],underlineGreen:[`58;5;2`,59],underlineYellow:[`58;5;3`,59],underlineBlue:[`58;5;4`,59],underlineMagenta:[`58;5;5`,59],underlineCyan:[`58;5;6`,59],underlineWhite:[`58;5;7`,59],underlineBlackBright:[`58;5;8`,59],underlineGray:[`58;5;8`,59],underlineGrey:[`58;5;8`,59],underlineRedBright:[`58;5;9`,59],underlineGreenBright:[`58;5;10`,59],underlineYellowBright:[`58;5;11`,59],underlineBlueBright:[`58;5;12`,59],underlineMagentaBright:[`58;5;13`,59],underlineCyanBright:[`58;5;14`,59],underlineWhiteBright:[`58;5;15`,59]}};Object.keys(X.modifier);const Vo=Object.keys(X.color),Ho=Object.keys(X.bgColor);Object.keys(X.underlineColor),[...Vo,...Ho];function Uo(){let e=/* @__PURE__ */ new Map;for(let[t,n]of Object.entries(X)){for(let[t,r]of Object.entries(n))X[t]={open:`\u{1B}[${r[0]}m`,close:`\u{1B}[${r[1]}m`},n[t]=X[t],e.set(Number.parseInt(r[0],10),r[1]);Object.defineProperty(X,t,{value:n,enumerable:!1})}return Object.defineProperty(X,"codes",{value:e,enumerable:!1}),X.color.close=`\x1B[39m`,X.bgColor.close=`\x1B[49m`,X.underlineColor.close=`\x1B[59m`,X.color.ansi=Lo(),X.color.ansi256=Ro(),X.color.ansi16m=zo(),X.bgColor.ansi=Lo(10),X.bgColor.ansi256=Ro(10),X.bgColor.ansi16m=zo(10),X.underlineColor.ansi=Bo,X.underlineColor.ansi256=Ro(20),X.underlineColor.ansi16m=zo(20),Object.defineProperties(X,{rgbToAnsi256:{value(e,t,n){return e===t&&t===n?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(t/255*5)+Math.round(n/255*5)},enumerable:!1},hexToRgb:{value(e){let t=/[\da-f]{6}|[\da-f]{3}/i.exec(e.toString(16));if(!t)return[0,0,0];let[n]=t;n.length===3&&(n=[...n].map(e=>e+e).join(``));let r=Number.parseInt(n,16);return[r>>16&255,r>>8&255,r&255]},enumerable:!1},hexToAnsi256:{value:e=>X.rgbToAnsi256(...X.hexToRgb(e)),enumerable:!1},ansi256ToAnsi:{value(e){if(e<8)return 30+e;if(e<16)return 90+(e-8);let t,n,r;if(e>=232)t=((e-232)*10+8)/255,n=t,r=t;else{e-=16;let i=e%36;t=Math.floor(e/36)/5,n=Math.floor(i/6)/5,r=i%6/5}let i=Math.max(t,n,r)*2;if(i===0)return 30;let a=30+(Math.round(r)<<2|Math.round(n)<<1|Math.round(t));return i===2&&(a+=60),a},enumerable:!1},rgbToAnsi:{value:(e,t,n)=>X.ansi256ToAnsi(X.rgbToAnsi256(e,t,n)),enumerable:!1},hexToAnsi:{value:e=>X.ansi256ToAnsi(X.hexToAnsi256(e)),enumerable:!1}}),X}const Z=Uo();function Q(e,t=globalThis.Deno?globalThis.Deno.args:o.argv){let n=e.startsWith(`-`)?``:e.length===1?`-`:`--`,r=t.indexOf(n+e),i=t.indexOf(`--`);return r!==-1&&(i===-1||r<i)}const{env:$}=o;let Wo;Q(`no-color`)||Q(`no-colors`)||Q(`color=false`)||Q(`color=never`)?Wo=0:(Q(`color`)||Q(`colors`)||Q(`color=true`)||Q(`color=always`))&&(Wo=1);function Go(){return/^\d+$/.test($.FORCE_COLOR)}function Ko(){if(`FORCE_COLOR`in $){if($.FORCE_COLOR===`false`)return 0;if($.FORCE_COLOR===`true`||$.FORCE_COLOR.length===0)return 1;if(Go())return Math.min(Number.parseInt($.FORCE_COLOR,10),3)}}function qo(e){return e!==0&&{level:e,hasBasic:!0,has256:e>=2,has16m:e>=3}}function Jo(e,{streamIsTTY:t,sniffFlags:n=!0}={}){let r=Ko();r!==void 0&&(Wo=r);let i=n?Wo:r;if(i===0)return 0;if(n){if(Q(`color=16m`)||Q(`color=full`)||Q(`color=truecolor`))return 3;if(Q(`color=256`))return 2}if(i!==void 0&&Go())return i;if(`TF_BUILD`in $&&`AGENT_NAME`in $)return 1;if(e&&!t&&i===void 0)return 0;let a=i||0;if($.TERM===`dumb`)return a;if(o.platform===`win32`){let e=c.release().split(`.`);return Number(e[0])>=10&&Number(e[2])>=10586?Number(e[2])>=14931?3:2:1}if(`CI`in $)return[`GITHUB_ACTIONS`,`GITEA_ACTIONS`,`CIRCLECI`].some(e=>e in $)?3:[`TRAVIS`,`APPVEYOR`,`GITLAB_CI`,`BUILDKITE`,`DRONE`].some(e=>e in $)||$.CI_NAME===`codeship`?1:a;if(`TEAMCITY_VERSION`in $)return+!!/^(?:9\.0*[1-9]\d*\.|\d{2,}\.)/.test($.TEAMCITY_VERSION);if($.COLORTERM===`truecolor`||$.TERM===`xterm-kitty`||$.TERM===`xterm-ghostty`||$.TERM===`wezterm`)return 3;if(`TERM_PROGRAM`in $){let e=Number.parseInt(($.TERM_PROGRAM_VERSION||``).split(`.`,1)[0],10);switch($.TERM_PROGRAM){case`iTerm.app`:return e>=3?3:2;case`Apple_Terminal`:return 2}}return/-256(?:color)?$/i.test($.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test($.TERM)||`COLORTERM`in $?1:a}function Yo(e,t={}){return qo(Jo(e,{streamIsTTY:e&&e.isTTY,...t}))}const{stdout:Xo,stderr:Zo}={stdout:Yo({isTTY:l.isatty(1)}),stderr:Yo({isTTY:l.isatty(2)})},Qo=Symbol(`GENERATOR`),$o=Symbol(`STYLER`),es=Symbol(`IS_EMPTY`),ts=Symbol(`LEVEL`),ns=Object.create(null),rs=e=>{if(!Number.isSafeInteger(e)||e<0||e>3)throw Error("The `level` should be an integer from 0 to 3")},is={enumerable:!0,get(){return this[ts]},set(e){rs(e),this[ts]=e}},as=(e,t={})=>{t.level!==void 0&&rs(t.level);let n=Xo?Xo.level:0;e[ts]=t.level===void 0?n:t.level},os=e=>{let t=(...e)=>e.join(` `);return as(t,e),Object.setPrototypeOf(t,ss.prototype),t};function ss(e){return os(e)}Object.setPrototypeOf(ss.prototype,Function.prototype);for(let[e,t]of Object.entries(Z))ns[e]={get(){let n=ds(this,us(t.open,t.close,this[$o]),this[es]);return Object.defineProperty(this,e,{value:n}),n}};ns.visible={get(){let e=ds(this,this[$o],!0);return Object.defineProperty(this,"visible",{value:e}),e}};const cs=(e,t)=>{let n=Z[t];if(e===`rgb`){let e=(e,t,r)=>n.ansi(Z.rgbToAnsi(e,t,r));return[e,e,(e,t,r)=>n.ansi256(Z.rgbToAnsi256(e,t,r)),n.ansi16m]}if(e===`hex`){let e=e=>n.ansi(Z.hexToAnsi(e));return[e,e,e=>n.ansi256(Z.hexToAnsi256(e)),e=>n.ansi16m(...Z.hexToRgb(e))]}let r=e=>n.ansi(Z.ansi256ToAnsi(e));return[r,r,n.ansi256,n.ansi256]};for(let e of[`rgb`,`hex`,`ansi256`]){let t=e[0].toUpperCase()+e.slice(1);for(let[n,r]of[[e,`color`],[`bg`+t,`bgColor`],[`underline`+t,`underlineColor`]]){let{close:t}=Z[r],i=cs(e,r);ns[n]={get(){let e=function(e,n,r){let a=i[this.level](e,n,r);return ds(this,us(a,t,this[$o]),this[es])};return Object.defineProperty(this,n,{value:e}),e}}}}const ls=Object.defineProperties(()=>{},{...ns,level:{enumerable:!0,get(){return this[Qo].level},set(e){this[Qo].level=e}}}),us=(e,t,n)=>{let r,i;return n===void 0?(r=e,i=t):(r=n.openAll+e,i=t+n.closeAll),{open:e,close:t,openAll:r,closeAll:i,parent:n}},ds=(e,t,n)=>{let r=(...e)=>e.length===1?fs(r,``+e[0]):e.length===2?fs(r,`${e[0]??``} ${e[1]??``}`):fs(r,e.join(` `));return Object.setPrototypeOf(r,ls),r[Qo]=e[Qo]??e,r[$o]=t,r[es]=n,r},fs=(e,t)=>{if(e[Qo][ts]<=0||!t)return e[es]?``:t;let n=e[$o];if(n===void 0)return t;let{openAll:r,closeAll:i}=n;if(t.includes(`\x1B`))for(;n!==void 0;)t=Fo(t,n.close,n.open),n=n.parent;let a=t.indexOf(`
|
|
93
|
+
`);return a!==-1&&(t=Io(t,i,r,a)),r+t+i};Object.defineProperties(ss.prototype,{...ns,level:is});const ps=ss();ss({level:Zo?Zo.level:0}),Po().catch(e=>{e.loc&&console.error(ps.bold(ps.red(`Error parsing: ${e.loc.file}:${e.loc.line}:${e.loc.column}`))),e.frame?(console.error(ps.red(e.message)),console.error(ps.dim(e.frame))):console.error(ps.red(e.message)),process.exitCode=1,!re&&w&&w.postMessage(`error`)});export{};
|
|
94
94
|
//# sourceMappingURL=cli.default.mjs.map
|