i18next-cli 1.33.4 → 1.33.5
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/cjs/cli.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var e=require("commander"),o=require("chokidar"),t=require("glob"),n=require("minimatch"),i=require("chalk"),r=require("./config.js"),a=require("./heuristic-config.js"),c=require("./extractor/core/extractor.js");require("node:path"),require("node:fs/promises"),require("jiti"),require("@croct/json5-parser");var s=require("./types-generator.js"),l=require("./syncer.js"),d=require("./migrator.js"),u=require("./init.js"),p=require("./linter.js"),g=require("./status.js"),f=require("./locize.js"),y=require("./rename-key.js");const h=new e.Command;h.name("i18next-cli").description("A unified, high-performance i18next CLI.").version("1.33.
|
|
2
|
+
"use strict";var e=require("commander"),o=require("chokidar"),t=require("glob"),n=require("minimatch"),i=require("chalk"),r=require("./config.js"),a=require("./heuristic-config.js"),c=require("./extractor/core/extractor.js");require("node:path"),require("node:fs/promises"),require("jiti"),require("@croct/json5-parser");var s=require("./types-generator.js"),l=require("./syncer.js"),d=require("./migrator.js"),u=require("./init.js"),p=require("./linter.js"),g=require("./status.js"),f=require("./locize.js"),y=require("./rename-key.js");const h=new e.Command;h.name("i18next-cli").description("A unified, high-performance i18next CLI.").version("1.33.5"),h.option("-c, --config <path>","Path to i18next-cli config file (overrides detection)"),h.command("extract").description("Extract translation keys from source files and update resource files.").option("-w, --watch","Watch for file changes and re-run the extractor.").option("--ci","Exit with a non-zero status code if any files are updated.").option("--dry-run","Run the extractor without writing any files to disk.").option("--sync-primary","Sync primary language values with default values from code.").option("--sync-all","Sync primary language values with default values from code AND clear synced keys in all other locales.").action(async e=>{try{const t=h.opts().config,i=await r.ensureConfig(t),a=async()=>{const o=!!e.syncPrimary||!!e.syncAll,t=await c.runExtractor(i,{isWatchMode:!!e.watch,isDryRun:!!e.dryRun,syncPrimaryWithDefaults:o,syncAll:!!e.syncAll});return e.ci&&!t?(console.log("✅ No files were updated."),process.exit(0)):e.ci&&t&&(console.error("❌ Some files were updated. This should not happen in CI mode."),process.exit(1)),t};if(await a(),e.watch){console.log("\nWatching for changes...");const e=await x(i.extract.input),t=m(i.extract.ignore),r=w(i.extract.output),c=[...t,...r].filter(Boolean),s=e.filter(e=>!c.some(o=>n.minimatch(e,o,{dot:!0})));o.watch(s,{ignored:/node_modules/,persistent:!0}).on("change",e=>{console.log(`\nFile changed: ${e}`),a()})}}catch(e){console.error("Error running extractor:",e),process.exit(1)}}),h.command("status [locale]").description("Display translation status. Provide a locale for a detailed key-by-key view.").option("-n, --namespace <ns>","Filter the status report by a specific namespace").action(async(e,o)=>{const t=h.opts().config;let n=await r.loadConfig(t);if(!n){console.log(i.blue("No config file found. Attempting to detect project structure..."));const e=await a.detectConfig();e||(console.error(i.red("Could not automatically detect your project structure.")),console.log(`Please create a config file first by running: ${i.cyan("npx i18next-cli init")}`),process.exit(1)),console.log(i.green("Project structure detected successfully!")),n=e}await g.runStatus(n,{detail:e,namespace:o.namespace})}),h.command("types").description("Generate TypeScript definitions from translation resource files.").option("-w, --watch","Watch for file changes and re-run the type generator.").action(async e=>{const t=h.opts().config,i=await r.ensureConfig(t),a=()=>s.runTypesGenerator(i);if(await a(),e.watch){console.log("\nWatching for changes...");const e=await x(i.types?.input||[]),t=[...m(i.extract?.ignore)].filter(Boolean),r=e.filter(e=>!t.some(o=>n.minimatch(e,o,{dot:!0})));o.watch(r,{persistent:!0}).on("change",e=>{console.log(`\nFile changed: ${e}`),a()})}}),h.command("sync").description("Synchronize secondary language files with the primary language file.").action(async()=>{const e=h.opts().config,o=await r.ensureConfig(e);await l.runSyncer(o)}),h.command("migrate-config [configPath]").description("Migrate a legacy i18next-parser.config.js to the new format.").action(async e=>{await d.runMigrator(e)}),h.command("init").description("Create a new i18next.config.ts/js file with an interactive setup wizard.").action(u.runInit),h.command("lint").description("Find potential issues like hardcoded strings in your codebase.").option("-w, --watch","Watch for file changes and re-run the linter.").action(async e=>{const t=h.opts().config,c=async()=>{let e=await r.loadConfig(t);if(!e){console.log(i.blue("No config file found. Attempting to detect project structure..."));const o=await a.detectConfig();o||(console.error(i.red("Could not automatically detect your project structure.")),console.log(`Please create a config file first by running: ${i.cyan("npx i18next-cli init")}`),process.exit(1)),console.log(i.green("Project structure detected successfully!")),e=o}await p.runLinterCli(e)};if(await c(),e.watch){console.log("\nWatching for changes...");const e=await r.loadConfig(t);if(e?.extract?.input){const t=await x(e.extract.input),i=[...m(e.extract.ignore),...w(e.extract.output)].filter(Boolean),r=t.filter(e=>!i.some(o=>n.minimatch(e,o,{dot:!0})));o.watch(r,{ignored:/node_modules/,persistent:!0}).on("change",e=>{console.log(`\nFile changed: ${e}`),c()})}}}),h.command("locize-sync").description("Synchronize local translations with your locize project.").option("--update-values","Update values of existing translations on locize.").option("--src-lng-only","Check for changes in source language only.").option("--compare-mtime","Compare modification times when syncing.").option("--dry-run","Run the command without making any changes.").option("--cdn-type <standard|pro>","Specify the cdn endpoint that should be used (depends on which cdn type you've in your locize project)").action(async e=>{const o=h.opts().config,t=await r.ensureConfig(o);await f.runLocizeSync(t,e)}),h.command("locize-download").description("Download all translations from your locize project.").option("--cdn-type <standard|pro>","Specify the cdn endpoint that should be used (depends on which cdn type you've in your locize project)").action(async e=>{const o=h.opts().config,t=await r.ensureConfig(o);await f.runLocizeDownload(t,e)}),h.command("locize-migrate").description("Migrate local translation files to a new locize project.").option("--cdn-type <standard|pro>","Specify the cdn endpoint that should be used (depends on which cdn type you've in your locize project)").action(async e=>{const o=h.opts().config,t=await r.ensureConfig(o);await f.runLocizeMigrate(t,e)}),h.command("rename-key <oldKey> <newKey>").description("Rename a translation key across all source files and translation files.").option("--dry-run","Preview changes without modifying files").action(async(e,o,t)=>{try{const n=h.opts().config,a=await r.ensureConfig(n),c=await y.runRenameKey(a,e,o,t);c.success||(c.conflicts&&(console.error(i.red("\n❌ Conflicts detected:")),c.conflicts.forEach(e=>console.error(` - ${e}`))),c.error&&console.error(i.red(`\n❌ ${c.error}`)),process.exit(1));0===c.sourceFiles.reduce((e,o)=>e+o.changes,0)&&console.log(i.yellow(`\n⚠️ No usages found for "${e}"`))}catch(e){console.error(i.red("Error renaming key:"),e),process.exit(1)}}),h.parse(process.argv);const m=e=>Array.isArray(e)?e:e?[e]:[],w=e=>e&&"string"==typeof e?[e.replace(/\{\{[^}]+\}\}/g,"*")]:[],x=async(e=[])=>{const o=m(e),n=await Promise.all(o.map(e=>t.glob(e||"",{nodir:!0})));return Array.from(new Set(n.flat()))};exports.program=h;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var e=require("./ast-utils.js");function t(t){if(t)return"StringLiteral"===t.type?t.value:"TemplateLiteral"===t.type&&e.isSimpleTemplateLiteral(t)?t.quasis[0].cooked:void 0}function n(t){if(t)return"StringLiteral"===t.type?t.value:"TemplateLiteral"===t.type&&e.isSimpleTemplateLiteral(t)?t.quasis?.[0]?.cooked:"ParenExpression"===t.type&&t.expr?n(t.expr):"ParenthesizedExpression"===t.type&&t.expression||"TsAsExpression"===t.type&&t.expression?n(t.expression):void 0}function i(e){return"StringLiteral"===e.value?.type?e.value.value:"JSXExpressionContainer"===e.value?.type?t(e.value.expression):void 0}exports.extractFromTransComponent=function(r,s){const o=r.opening.attributes?.find(e=>"JSXAttribute"===e.type&&"Identifier"===e.name.type&&"i18nKey"===e.name.value),p=r.opening.attributes?.find(e=>"JSXAttribute"===e.type&&"Identifier"===e.name.type&&"defaults"===e.name.value),a=r.opening.attributes?.find(e=>"JSXAttribute"===e.type&&"Identifier"===e.name.type&&"count"===e.name.value),l=r.opening.attributes?.find(e=>"JSXAttribute"===e.type&&"Identifier"===e.name.type&&"values"===e.name.value);let u;a||"JSXAttribute"!==l?.type||"JSXExpressionContainer"!==l.value?.type||"ObjectExpression"!==l.value.expression.type||(u=e.getObjectPropValueExpression(l.value.expression,"count"));const c=!!a||!!u,y=r.opening.attributes?.find(e=>"JSXAttribute"===e.type&&"Identifier"===e.name.type&&"tOptions"===e.name.value),f="JSXAttribute"===y?.type&&"JSXExpressionContainer"===y.value?.type&&"ObjectExpression"===y.value.expression.type?y.value.expression:void 0,g=r.opening.attributes?.find(e=>"JSXAttribute"===e.type&&"Identifier"===e.name.type&&"ordinal"===e.name.value),d=!!g,x=r.opening.attributes?.find(e=>"JSXAttribute"===e.type&&"Identifier"===e.name.type&&"context"===e.name.value);let v="JSXAttribute"===x?.type&&"JSXExpressionContainer"===x.value?.type?x.value.expression:"JSXAttribute"===x?.type&&"StringLiteral"===x.value?.type?x.value:void 0;const S=r.opening.attributes?.find(e=>"JSXAttribute"===e.type&&"Identifier"===e.name.type&&"ns"===e.name.value);let m;m="JSXAttribute"===S?.type?i(S):void 0,f&&(void 0===m&&(m=e.getObjectPropValue(f,"ns")),void 0===v&&(v=e.getObjectPropValueExpression(f,"context")));const h=function(e,i){if(!e||0===e.length)return"";const r=new Set(i.extract.transKeepBasicHtmlNodesFor??["br","strong","i","p"]),s=e=>e&&"JSXText"===e.type&&/^\s*$/.test(e.value)&&e.value.includes("\n"),o=e=>e&&("JSXElement"===e.type||"JSXFragment"===e.type),p=(e,t)=>{for(let n=t;n<e.length;n++){const t=e[n];if(t&&("JSXText"!==t.type||!s(t)))return t}},a=e=>{let t=e;for(;t;)if("ParenExpression"===t.type&&t.expr)t=t.expr;else if("ParenthesizedExpression"===t.type&&t.expression)t=t.expression;else{if("TsAsExpression"!==t.type||!t.expression)break;t=t.expression}return t};function l(e,i,u=!1,c=!1){if(!e||!e.length)return;const y=c&&e.filter(e=>e&&"JSXElement"===e.type&&"p"===e.opening?.name?.value).length>1;let f=0,g=e.length-1;for(;f<=g&&s(e[f]);)f++;for(;g>=f&&s(e[g]);)g--;const d=f<=g?e.slice(f,g+1):[],x=d.some(e=>e&&("JSXElement"===e.type||"JSXFragment"===e.type));for(let e=0;e<d.length;e++){const f=d[e];if(f)if("JSXText"!==f.type){if("JSXExpressionContainer"===f.type){if(u&&!x&&f.expression){const e=a(f.expression),t=e?.type;if("ObjectExpression"===t)continue;if(void 0!==n(e))continue;if("Identifier"===t||"MemberExpression"===t||"CallExpression"===t)continue}const r=t(f.expression);if(void 0!==r){const t=/^\s*$/.test(r)&&!r.includes("\n"),n=d[e-1],a=d[e+1];if(t){const t=p(d,e+1);if(o(n)&&o(t));else{const t=d[e+2];if(a&&"JSXText"===a.type&&s(a)&&t&&("JSXElement"===t.type||"JSXFragment"===t.type)){const t=d[e-1],n=d[e-2];if(!t||"JSXText"!==t.type&&n&&"JSXExpressionContainer"===n.type)continue}if(n&&("JSXElement"===n.type||"JSXFragment"===n.type)&&a&&"JSXText"===a.type&&s(a))continue;const r=!a||"JSXText"===a.type&&!s(a);if(n&&"JSXText"===n.type&&r){const e=i[i.length-1];if(e&&"JSXText"===e.type){e.value=String(e.value)+f.expression.value;continue}}if(n&&("JSXElement"===n.type||"JSXFragment"===n.type)&&a&&"JSXText"===a.type&&s(a))continue}}}i.push(f);continue}if("JSXElement"===f.type){const e=f.opening&&f.opening.name&&"Identifier"===f.opening.name.type?f.opening.name.value:void 0;if(e&&r.has(e)){const n=f.opening&&Array.isArray(f.opening.attributes)&&f.opening.attributes.length>0,o=f.children||[],p=1===o.length&&("JSXText"===o[0]?.type||"JSXExpressionContainer"===o[0]?.type&&void 0!==t(o[0].expression)),a=!o.length,u=p;if(n&&!p)i.push(f),l(f.children||[],i,!0);else if(a)i.push(f);else if(!u){if((f.children||[]).some(e=>"JSXExpressionContainer"===e.type&&void 0===t(e.expression)))i.push(f),l(f.children||[],i,!0);else if("p"===e){const e=(o||[]).some(e=>{if(!e||"JSXElement"!==e.type)return!1;const n=e.opening&&e.opening.name&&"Identifier"===e.opening.name.type?e.opening.name.value:void 0,i=e.opening&&Array.isArray(e.opening.attributes)&&e.opening.attributes.length>0,s=e.children||[],o=1===s.length&&("JSXText"===s[0]?.type||"JSXExpressionContainer"===s[0]?.type&&void 0!==t(s[0].expression));return!(n&&r.has(n)&&!i&&(0===s.length||o))}),n=c&&d.some(e=>e&&e!==f&&"JSXText"===e.type&&!s(e));y||c&&e&&!n?(i.push(f),l(f.children||[],i,!0,!1)):l(f.children||[],i,!1,!1)}else l(f.children||[],i,!1,!1)}continue}i.push(f),l(f.children||[],i,!0);continue}"JSXFragment"!==f.type||l(f.children||[],i,u)}else{if(u&&!x)continue;if(u&&s(f))continue;if(s(f)){const t=d[e-1],n=d[e+1];if(t&&("JSXElement"===t.type||"JSXFragment"===t.type)&&n&&("JSXElement"===n.type||"JSXFragment"===n.type))continue;const r=i[i.length-1],s=d[e-1];if(r){if(s&&"JSXExpressionContainer"===s.type)continue;if("JSXText"===r.type&&s&&"JSXText"===s.type){r.value=String(r.value)+f.value;continue}}}if(u&&x&&0===e)continue;i.push(f)}}}const u=[];function c(e){const n=new Map;if(!e||!e.length)return n;const i=e=>e&&"JSXText"===e.type&&!s(e)&&String(e.value).length>0,o=e=>{if(!e||"JSXExpressionContainer"!==e.type)return!1;const n=e.expression;if(!n||"JSXEmptyExpression"===n.type)return!1;const i=t(n);return void 0===i||(!/^\s*$/.test(i)||!i.includes("\n"))},p=e=>"Identifier"===e?.opening?.name?.type?e.opening.name.value:void 0,a=e=>{const n=e?.children||[];return 1===n.length&&("JSXText"===n[0]?.type||"JSXExpressionContainer"===n[0]?.type&&void 0!==t(n[0].expression))},l=e=>{const t=p(e);if(!t||!r.has(t))return!0;if("p"===t)return!0;const n=e.opening&&Array.isArray(e.opening.attributes)&&e.opening.attributes.length>0;return!!((e.children||[]).length>0)&&(!a(e)&&(!!n||-1!==u.indexOf(e)))},c=e=>{const t=p(e);if(!t||!r.has(t))return!1;if(0!==(e.children||[]).length)return!1;const n=e.opening&&Array.isArray(e.opening.attributes)&&e.opening.attributes.length>0;return"br"===t&&!n};let y=0;for(const t of e)t&&(i(t)||o(t)?y+=1:"JSXElement"!==t.type||(l(t)?(n.set(t,y),y+=1):c(t)&&(y+=1)));return n}l(e,u,!1,!0);const y=new Set,f=e=>String(e).replace(/^\s*\n\s*/g,"").replace(/\s*\n\s*$/g,"");function g(e,i,o=!1){if(!e||0===e.length)return"";let p="";const a=e=>{if(!e)return-1;if(i&&i.has(e))return i.get(e);if(i)for(const[t,n]of i.entries())try{if(t&&e&&t.span&&e.span&&t.span.start===e.span.start&&t.span.end===e.span.end)return n}catch(e){}return u.indexOf(e)},l=t=>{if(!o)return u.indexOf(t);const n=e.indexOf(t);if(-1===n)return-1;let i=0;for(let t=0;t<n;t++){const n=e[t];n&&("JSXText"===n.type?s(n)||i++:"JSXExpressionContainer"===n.type?n.expression&&"JSXEmptyExpression"!==n.expression.type&&i++:"JSXElement"===n.type&&i++)}return i};for(let i=0;i<e.length;i++){const d=e[i];if(d){if("JSXText"===d.type){if(s(d))continue;const t=e[i+1],n=e[i-1];if(n&&"JSXElement"===n.type){const t="Identifier"===n.opening?.name?.type?n.opening.name.value:void 0,s=t&&r.has(t),o=0===(n.children||[]).length;if(s&&o&&/^\s*\n\s*/.test(d.value)){const e=d.value.replace(/^\s*\n\s*/,"");if(e){p+=e;continue}continue}if(!s&&/^\s*\n\s*/.test(d.value)){const t=d.value.replace(/^\s*\n\s*/,"");if(t){if(n&&"JSXElement"===n.type&&Array.isArray(n.children)&&0===n.children.length){p+=t;continue}const r=e[i-2];if(r&&"JSXText"===r.type){const e=r.value.replace(/\n\s*$/,""),n=/[A-Za-z0-9]$/.test(e),i=/^[A-Za-z0-9]/.test(t),s=/^[a-z]/.test(t);if(n&&i&&s){p+=t;continue}}p+=" "+t;continue}continue}}if(/\n\s*$/.test(d.value)&&t&&"JSXElement"===t.type){const n=d.value.replace(/\n\s*$/,"");if(n.trim()){const o="Identifier"===t.opening?.name?.type?t.opening.name.value:void 0,a=o&&r.has(o),l=(t.children||[]).length>0,u=/\s\n/.test(d.value),c=e[i+2],f=c&&"JSXText"===c.type&&!s(c)&&/[a-zA-Z0-9]/.test(c.value),g=!!(t.opening&&Array.isArray(t.opening.attributes)&&t.opening.attributes.length>0),x=/^\s/.test(n)&&!/^\n/.test(n),v=n.trim(),S=x?" "+v:v,m=/[A-Za-z0-9]$/.test(v),h=c&&"string"==typeof c.value&&/^[A-Za-z0-9]/.test(c.value.trim()),J=c&&"string"==typeof c.value&&/^[a-z]/.test(c.value.trim()),X=c&&"string"==typeof c.value&&/^\s/.test(c.value)&&!/^\n/.test(c.value),E=g&&l&&f&&!(m&&h&&J&&!u&&!x&&!X),$=c&&"string"==typeof c.value&&/^[,;:!?.]/.test(c.value.trim()),b=E&&!$;m&&h&&J&&!u&&!x&&!X&&y.add(t),p+=u||a&&l||!a&&f&&x||b?S+" ":S;continue}}p+=d.value;continue}if("JSXExpressionContainer"===d.type){const e=d.expression;if(!e)continue;const i=t(e);if(void 0!==i)p+=i;else if("Identifier"===e.type)p+=`{{${e.value}}}`;else if("TsAsExpression"===e.type&&"ObjectExpression"===e.expression?.type){const t=e.expression,n=t.properties.filter(e=>"KeyValueProperty"===e.type&&e.key&&"Identifier"===e.key.type).map(e=>e.key.value);if(n.length>0)p+=n.map(e=>`{{${e}}}`).join("");else{const e=t.properties[0];if(!e||"Identifier"!==e.type)throw new Error("Unrecognized expression in JSX placeholder");p+=`{{${e.value}}}`}}else if("ObjectExpression"===e.type){const t=e.properties[0];if(t&&"KeyValueProperty"===t.type&&t.key&&"Identifier"===t.key.type)p+=`{{${t.key.value}}}`;else{if(!t||"Identifier"!==t.type)throw new Error("Unrecognized expression in JSX placeholder");p+=`{{${t.value}}}`}}else if("MemberExpression"===e.type&&e.property&&"Identifier"===e.property.type)p+=`{{${e.property.value}}}`;else if("CallExpression"===e.type&&"Identifier"===e.callee?.type)p+=`{{${e.callee.value}}}`;else if("ConditionalExpression"===e.type){const t=n(e.consequent),i=n(e.alternate);p+=void 0!==t&&void 0!==i?t.length>=i.length?t:i:void 0!==t?t:void 0!==i?i:""}else if("JSXEmptyExpression"!==e.type)throw new Error(`Unrecognized expression in JSX placeholder: ${e.type}`);continue}if("JSXElement"===d.type){const n=o?l(d):void 0;let s;if(d.opening&&d.opening.name&&"Identifier"===d.opening.name.type&&(s=d.opening.name.value),s&&r.has(s)){const l=d.opening&&Array.isArray(d.opening.attributes)&&d.opening.attributes.length>0,y=d.children||[],x=y.length>0,v=1===y.length&&("JSXText"===y[0]?.type||"JSXExpressionContainer"===y[0]?.type&&void 0!==t(y[0].expression)),S="p"===s;let m=0;if(S&&o&&(m=e.filter(e=>e&&"JSXElement"===e.type&&"p"===e.opening?.name?.value).length),!x||v){const t=v?g(y,void 0):"";if(""!==String(t).trim())if(r.has(s)&&"p"!==s)p+=`<${s}>${f(t)}</${s}>`;else if(S&&o&&m>1)p+=`<${s}>${f(t)}</${s}>`;else if(S){const e=o&&void 0!==n?n:u.indexOf(d);p+=`<${e}>${f(t)}</${e}>`}else{const e=o&&void 0!==n?n:u.indexOf(d);p+=`<${e}>${f(t)}</${e}>`}else{const t=e[i-1];t&&"JSXText"===t.type&&/\n\s*$/.test(t.value)&&(p=p.replace(/\s+$/,"")),p+=`<${s} />`}}else if(l&&!v){const e=o&&void 0!==n?n:a(d),t=c(y),i=g(y,t.size?t:void 0);p+=`<${e}>${f(i)}</${e}>`}else{const e=u.indexOf(d);if(-1!==e){const t=void 0!==n?n:e,i=c(y),r=g(y,i.size?i:void 0,!1);p+=`<${t}>${f(r)}</${t}>`}else{const e=g(y,void 0,!1);p+=`<${s}>${f(e)}</${s}>`}}}else{const e=d.children||[],t=a(d),n=c(e),i=g(e,n.size?n:void 0);p+=`<${t}>${f(i)}</${t}>`}continue}"JSXFragment"!==d.type||(p+=g(d.children||[]))}}return p}const d=g(e,void 0,!0),x=String(d).replace(/<br \/>\s*\n\s*/g,"<br />"),v=String(x),S=new Set;if(y&&y.size>0)for(let e=0;e<u.length;e++)y.has(u[e])&&S.add(e);let m=String(v);if(S&&S.size>0)for(const e of S)try{m=m.replace(new RegExp("\\s+<"+e+">","g"),"<"+e+">"),m=m.replace(new RegExp("<\\/"+e+">\\s+","g"),"</"+e+">")}catch(e){}m=m.replace(/<\/(\d+)>\s*\n\s*(\S)/g,(e,t,n)=>{const i=Number(t);return S.has(i)?`</${t}>${n}`:`</${t}> ${n}`}),m=m.replace(/(\S)\s*\n\s*<(\d+)/g,(e,t,n)=>{const i=Number(n);return S.has(i)?`${t}<${n}`:`${t} <${n}`}),m=m.replace(/\s*\n\s*/g," "),m=m.replace(/\s+/g," "),m=m.replace(/\s+([,;:!?.])/g,"$1");const h=m.trim();let J=String(h);if(S&&S.size>0)for(const e of S)try{J=J.replace(new RegExp("[\\s\\u00A0]+<"+e+">","g"),"<"+e+">"),J=J.replace(new RegExp("<\\/"+e+">[\\s\\u00A0]+","g"),"</"+e+">")}catch(e){}try{for(let e=0;e<u.length;e++){const t=u[e];if(!t||"JSXElement"!==t.type)continue;const n=u[e-1],i=u[e+1];if(!n||!i)continue;if("JSXText"!==n.type||"JSXText"!==i.type)continue;const r=String(n.value),s=String(i.value),o=r.replace(/\n\s*$/,""),p=/[A-Za-z0-9]$/.test(o),a=/^[A-Za-z0-9]/.test(s.trim()),l=/^[a-z]/.test(s.trim()),c=/\s\n/.test(r),y=s&&/^\s/.test(s)&&!/^\n/.test(s);if(p&&a&&l&&!c&&!y){const t=e;J=J.replace(new RegExp("\\s+<"+t+">","g"),"<"+t+">")}}}catch(e){}return J.trim()}(r.children,s);let J;const X="JSXAttribute"===p?.type?i(p):void 0;if(void 0!==X)J=X;else{const e=s.extract.defaultValue;J="string"==typeof e?e:""}let E,$;if("JSXAttribute"===o?.type){if("StringLiteral"===o.value?.type){if(E=o.value,$=E.value,!$||""===$.trim())return null;if(m&&"StringLiteral"===E.type){const e=s.extract.nsSeparator??":",t=E.value;if(e&&t.startsWith(`${m}${e}`)){if($=t.slice(`${m}${e}`.length),!$||""===$.trim())return null;E={...E,value:$}}}}else"JSXExpressionContainer"===o.value?.type&&"JSXEmptyExpression"!==o.value.expression.type&&(E=o.value.expression);if(!E)return null}return p||!$||h.trim()?!p&&h.trim()&&(J=h):J=$,{keyExpression:E,serializedChildren:h,ns:m,defaultValue:J,hasCount:c,isOrdinal:d,contextExpression:v,optionsNode:f,explicitDefault:void 0!==X||(e=>{if(!e||!Array.isArray(e.properties))return!1;for(const t of e.properties)if(t&&"KeyValueProperty"===t.type&&t.key){const e="Identifier"===t.key.type&&t.key.value||"StringLiteral"===t.key.type&&t.key.value;if("string"==typeof e&&e.startsWith("defaultValue"))return!0}return!1})(f)}};
|
|
1
|
+
"use strict";var e=require("./ast-utils.js");function t(t){if(t)return"StringLiteral"===t.type?t.value:"TemplateLiteral"===t.type&&e.isSimpleTemplateLiteral(t)?t.quasis[0].cooked:void 0}function n(i){if(i){if("StringLiteral"===i.type)return i.value;if("ParenExpression"===i.type&&i.expr)return n(i.expr);if("ParenthesizedExpression"===i.type&&i.expression)return n(i.expression);if("TsAsExpression"===i.type&&i.expression)return n(i.expression);if("JSXFragment"===i.type||"JSXElement"===i.type){const e=i.children??[];let n="";for(const i of e)if(i){if("JSXText"!==i.type){if("JSXExpressionContainer"===i.type){if(!i.expression||"JSXEmptyExpression"===i.expression.type)continue;const e=t(i.expression);if(void 0===e)return;n+=e;continue}return}n+=i.value}return n}if("TemplateLiteral"===i.type&&Array.isArray(i.expressions)&&0===i.expressions.length){return(i.quasis??[]).map(e=>e?.cooked??e?.raw??"").join("")}if("TemplateLiteral"===i.type&&e.isSimpleTemplateLiteral(i))return i.quasis?.[0]?.cooked;if("BinaryExpression"===i.type){if("+"===(i.operator??i.op)){const e=n(i.left),t=n(i.right);if(void 0!==e&&void 0!==t)return e+t}}}}function i(e){return"StringLiteral"===e.value?.type?e.value.value:"JSXExpressionContainer"===e.value?.type?t(e.value.expression):void 0}exports.extractFromTransComponent=function(r,s){const o=r.opening.attributes?.find(e=>"JSXAttribute"===e.type&&"Identifier"===e.name.type&&"i18nKey"===e.name.value),p=r.opening.attributes?.find(e=>"JSXAttribute"===e.type&&"Identifier"===e.name.type&&"defaults"===e.name.value),a=r.opening.attributes?.find(e=>"JSXAttribute"===e.type&&"Identifier"===e.name.type&&"count"===e.name.value),l=r.opening.attributes?.find(e=>"JSXAttribute"===e.type&&"Identifier"===e.name.type&&"values"===e.name.value);let u;a||"JSXAttribute"!==l?.type||"JSXExpressionContainer"!==l.value?.type||"ObjectExpression"!==l.value.expression.type||(u=e.getObjectPropValueExpression(l.value.expression,"count"));const c=!!a||!!u,f=r.opening.attributes?.find(e=>"JSXAttribute"===e.type&&"Identifier"===e.name.type&&"tOptions"===e.name.value),y="JSXAttribute"===f?.type&&"JSXExpressionContainer"===f.value?.type&&"ObjectExpression"===f.value.expression.type?f.value.expression:void 0,g=r.opening.attributes?.find(e=>"JSXAttribute"===e.type&&"Identifier"===e.name.type&&"ordinal"===e.name.value),v=!!g,d=r.opening.attributes?.find(e=>"JSXAttribute"===e.type&&"Identifier"===e.name.type&&"context"===e.name.value);let S="JSXAttribute"===d?.type&&"JSXExpressionContainer"===d.value?.type?d.value.expression:"JSXAttribute"===d?.type&&"StringLiteral"===d.value?.type?d.value:void 0;const x=r.opening.attributes?.find(e=>"JSXAttribute"===e.type&&"Identifier"===e.name.type&&"ns"===e.name.value);let m;m="JSXAttribute"===x?.type?i(x):void 0,y&&(void 0===m&&(m=e.getObjectPropValue(y,"ns")),void 0===S&&(S=e.getObjectPropValueExpression(y,"context")));const h=function(e,i){if(!e||0===e.length)return"";const r=new Set(i.extract.transKeepBasicHtmlNodesFor??["br","strong","i","p"]),s=e=>e&&"JSXText"===e.type&&/^\s*$/.test(e.value)&&e.value.includes("\n"),o=e=>e&&("JSXElement"===e.type||"JSXFragment"===e.type),p=(e,t)=>{for(let n=t;n<e.length;n++){const t=e[n];if(t&&("JSXText"!==t.type||!s(t)))return t}};function a(e,n,i=!1,l=!1){if(!e||!e.length)return;const u=l&&e.filter(e=>e&&"JSXElement"===e.type&&"p"===e.opening?.name?.value).length>1;let c=0,f=e.length-1;for(;c<=f&&s(e[c]);)c++;for(;f>=c&&s(e[f]);)f--;const y=c<=f?e.slice(c,f+1):[],g=y.some(e=>e&&("JSXElement"===e.type||"JSXFragment"===e.type));for(let e=0;e<y.length;e++){const c=y[e];if(c)if("JSXText"!==c.type){if("JSXExpressionContainer"===c.type){if(i&&!g)continue;const r=t(c.expression);if(void 0!==r){const t=/^\s*$/.test(r)&&!r.includes("\n"),i=y[e-1],a=y[e+1];if(t){const t=p(y,e+1);if(o(i)&&o(t));else{const t=y[e+2];if(a&&"JSXText"===a.type&&s(a)&&t&&("JSXElement"===t.type||"JSXFragment"===t.type)){const t=y[e-1],n=y[e-2];if(!t||"JSXText"!==t.type&&n&&"JSXExpressionContainer"===n.type)continue}if(i&&("JSXElement"===i.type||"JSXFragment"===i.type)&&a&&"JSXText"===a.type&&s(a))continue;const r=!a||"JSXText"===a.type&&!s(a);if(i&&"JSXText"===i.type&&r){const e=n[n.length-1];if(e&&"JSXText"===e.type){e.value=String(e.value)+c.expression.value;continue}}if(i&&("JSXElement"===i.type||"JSXFragment"===i.type)&&a&&"JSXText"===a.type&&s(a))continue}}}n.push(c);continue}if("JSXElement"===c.type){const e=c.opening&&c.opening.name&&"Identifier"===c.opening.name.type?c.opening.name.value:void 0;if(e&&r.has(e)){const i=c.opening&&Array.isArray(c.opening.attributes)&&c.opening.attributes.length>0,o=c.children||[],p=1===o.length&&("JSXText"===o[0]?.type||"JSXExpressionContainer"===o[0]?.type&&void 0!==t(o[0].expression)),f=!o.length,g=p;if(i&&!p)n.push(c),a(c.children||[],n,!0);else if(f)n.push(c);else if(!g){if((c.children||[]).some(e=>"JSXExpressionContainer"===e.type&&void 0===t(e.expression)))n.push(c),a(c.children||[],n,!0);else if("p"===e){const e=(o||[]).some(e=>{if(!e||"JSXElement"!==e.type)return!1;const n=e.opening&&e.opening.name&&"Identifier"===e.opening.name.type?e.opening.name.value:void 0,i=e.opening&&Array.isArray(e.opening.attributes)&&e.opening.attributes.length>0,s=e.children||[],o=1===s.length&&("JSXText"===s[0]?.type||"JSXExpressionContainer"===s[0]?.type&&void 0!==t(s[0].expression));return!(n&&r.has(n)&&!i&&(0===s.length||o))}),i=l&&y.some(e=>e&&e!==c&&"JSXText"===e.type&&!s(e));u||l&&e&&!i?(n.push(c),a(c.children||[],n,!0,!1)):a(c.children||[],n,!1,!1)}else a(c.children||[],n,!1,!1)}continue}n.push(c),a(c.children||[],n,!0);continue}"JSXFragment"!==c.type||a(c.children||[],n,i)}else{if(i&&!g)continue;if(i&&s(c))continue;if(s(c)){const t=y[e-1],i=y[e+1];if(t&&("JSXElement"===t.type||"JSXFragment"===t.type)&&i&&("JSXElement"===i.type||"JSXFragment"===i.type))continue;const r=n[n.length-1],s=y[e-1];if(r){if(s&&"JSXExpressionContainer"===s.type)continue;if("JSXText"===r.type&&s&&"JSXText"===s.type){r.value=String(r.value)+c.value;continue}}}if(i&&g&&0===e)continue;n.push(c)}}}const l=[];function u(e){const n=new Map;if(!e||!e.length)return n;const i=e=>e&&"JSXText"===e.type&&!s(e)&&String(e.value).length>0,o=e=>{if(!e||"JSXExpressionContainer"!==e.type)return!1;const n=e.expression;if(!n||"JSXEmptyExpression"===n.type)return!1;const i=t(n);return void 0===i||(!/^\s*$/.test(i)||!i.includes("\n"))},p=e=>"Identifier"===e?.opening?.name?.type?e.opening.name.value:void 0,a=e=>{const n=e?.children||[];return 1===n.length&&("JSXText"===n[0]?.type||"JSXExpressionContainer"===n[0]?.type&&void 0!==t(n[0].expression))},u=e=>{const t=p(e);if(!t||!r.has(t))return!0;if("p"===t)return!0;const n=e.opening&&Array.isArray(e.opening.attributes)&&e.opening.attributes.length>0;return!!((e.children||[]).length>0)&&(!a(e)&&(!!n||-1!==l.indexOf(e)))},c=e=>{const t=p(e);if(!t||!r.has(t))return!1;if(0!==(e.children||[]).length)return!1;const n=e.opening&&Array.isArray(e.opening.attributes)&&e.opening.attributes.length>0;return"br"===t&&!n};let f=0;for(const t of e)t&&(i(t)||o(t)?f+=1:"JSXElement"!==t.type||(u(t)?(n.set(t,f),f+=1):c(t)&&(f+=1)));return n}a(e,l,!1,!0);const c=new Set,f=e=>String(e).replace(/^\s*\n\s*/g,"").replace(/\s*\n\s*$/g,""),y=e=>"Identifier"===e?.opening?.name?.type?e.opening.name.value:void 0,g=e=>{const n=y(e);if(!n||!r.has(n))return;const i=e?.children||[];if(1!==i.length)return;const s=i[0];return s?"JSXText"===s.type?String(s.value):"JSXExpressionContainer"===s.type?t(s.expression):void 0:void 0};function v(e,i,o=!1){if(!e||0===e.length)return"";let p="";const a=e=>{if(!e)return-1;if(i&&i.has(e))return i.get(e);if(i)for(const[t,n]of i.entries())try{if(t&&e&&t.span&&e.span&&t.span.start===e.span.start&&t.span.end===e.span.end)return n}catch(e){}return l.indexOf(e)},y=t=>{if(!o)return l.indexOf(t);const n=e.indexOf(t);if(-1===n)return-1;let i=0;for(let t=0;t<n;t++){const n=e[t];n&&("JSXText"===n.type?s(n)||i++:"JSXExpressionContainer"===n.type?n.expression&&"JSXEmptyExpression"!==n.expression.type&&i++:"JSXElement"===n.type&&i++)}return i};for(let i=0;i<e.length;i++){const d=e[i];if(d){if("JSXText"===d.type){if(s(d))continue;const t=e[i+1],n=e[i-1];if(n&&"JSXElement"===n.type){const t="Identifier"===n.opening?.name?.type?n.opening.name.value:void 0,s=t&&r.has(t),o=0===(n.children||[]).length;if(s&&o&&/^\s*\n\s*/.test(d.value)){const e=d.value.replace(/^\s*\n\s*/,"");if(e){p+=e;continue}continue}if(s&&!o&&/^\s*\n\s*/.test(d.value)){const e=g(n);if(void 0!==e&&/\s$/.test(e)){const e=d.value.replace(/^\s*\n\s*/g,"").replace(/^\s+/g,"");if(e){p+=e;continue}continue}}if(!s&&/^\s*\n\s*/.test(d.value)){const t=d.value.replace(/^\s*\n\s*/,"");if(t){if(n&&"JSXElement"===n.type&&Array.isArray(n.children)&&0===n.children.length){p+=t;continue}const r=e[i-2];if(r&&"JSXText"===r.type){const e=r.value.replace(/\n\s*$/,""),n=/[A-Za-z0-9]$/.test(e),i=/^[A-Za-z0-9]/.test(t),s=/^[a-z]/.test(t);if(n&&i&&s){p+=t;continue}}p+=" "+t;continue}continue}}if(/\n\s*$/.test(d.value)&&t&&"JSXElement"===t.type){const n=d.value.replace(/\n\s*$/,"");if(n.trim()){const o="Identifier"===t.opening?.name?.type?t.opening.name.value:void 0,a=o&&r.has(o),l=(t.children||[]).length>0,u=g(t),f=void 0!==u&&/^\s/.test(u),y=/\s\n/.test(d.value),v=e[i+2],S=v&&"JSXText"===v.type&&!s(v)&&/[a-zA-Z0-9]/.test(v.value),x=!!(t.opening&&Array.isArray(t.opening.attributes)&&t.opening.attributes.length>0),m=/^\s/.test(n)&&!/^\n/.test(n),h=n.trim(),J=m?" "+h:h,X=/[A-Za-z0-9]$/.test(h),E=v&&"string"==typeof v.value&&/^[A-Za-z0-9]/.test(v.value.trim()),$=v&&"string"==typeof v.value&&/^[a-z]/.test(v.value.trim()),b=v&&"string"==typeof v.value&&/^\s/.test(v.value)&&!/^\n/.test(v.value),A=x&&l&&S&&!(X&&E&&$&&!y&&!m&&!b),T=v&&"string"==typeof v.value&&/^[,;:!?.]/.test(v.value.trim()),C=A&&!T;X&&E&&$&&!y&&!m&&!b&&c.add(t),p+=y||a&&l&&!f||!a&&S&&m||C?J+" ":J;continue}}p+=d.value;continue}if("JSXExpressionContainer"===d.type){const e=d.expression;if(!e)continue;const i=t(e);if(void 0!==i)p+=i;else if("Identifier"===e.type)p+=`{{${e.value}}}`;else if("TsAsExpression"===e.type&&"ObjectExpression"===e.expression?.type){const t=e.expression,n=t.properties.filter(e=>"KeyValueProperty"===e.type&&e.key&&"Identifier"===e.key.type).map(e=>e.key.value);if(n.length>0)p+=n.map(e=>`{{${e}}}`).join("");else{const e=t.properties[0];e&&"Identifier"===e.type?p+=`{{${e.value}}}`:p+=""}}else if("ObjectExpression"===e.type){const t=e.properties[0];t&&"KeyValueProperty"===t.type&&t.key&&"Identifier"===t.key.type?p+=`{{${t.key.value}}}`:t&&"Identifier"===t.type?p+=`{{${t.value}}}`:p+=""}else if("MemberExpression"===e.type&&e.property&&"Identifier"===e.property.type)p+=`{{${e.property.value}}}`;else if("CallExpression"===e.type&&"Identifier"===e.callee?.type)p+=`{{${e.callee.value}}}`;else if("ConditionalExpression"===e.type){const t=n(e.consequent),i=n(e.alternate);if(void 0!==t&&void 0!==i){const e=t.trim(),n=i.trim(),r=n.startsWith(e),s=e.startsWith(n);r&&n.length>e.length?p+=n:s&&e.length>n.length?p+=e:p+=t}else p+=void 0!==t?t:void 0!==i?i:""}else"JSXEmptyExpression"===e.type||(p+="");continue}if("JSXElement"===d.type){const n=o?y(d):void 0;let s;if(d.opening&&d.opening.name&&"Identifier"===d.opening.name.type&&(s=d.opening.name.value),s&&r.has(s)){const c=d.opening&&Array.isArray(d.opening.attributes)&&d.opening.attributes.length>0,y=d.children||[],g=y.length>0,S=1===y.length&&("JSXText"===y[0]?.type||"JSXExpressionContainer"===y[0]?.type&&void 0!==t(y[0].expression)),x="p"===s;let m=0;if(x&&o&&(m=e.filter(e=>e&&"JSXElement"===e.type&&"p"===e.opening?.name?.value).length),!g||S){const t=S?v(y,void 0):"";if(""!==String(t).trim())if(r.has(s)&&"p"!==s)p+=`<${s}>${f(t)}</${s}>`;else if(x&&o&&m>1)p+=`<${s}>${f(t)}</${s}>`;else if(x){const e=o&&void 0!==n?n:l.indexOf(d);p+=`<${e}>${f(t)}</${e}>`}else{const e=o&&void 0!==n?n:l.indexOf(d);p+=`<${e}>${f(t)}</${e}>`}else{const t=e[i-1];t&&"JSXText"===t.type&&/\n\s*$/.test(t.value)&&(p=p.replace(/\s+$/,"")),p+=`<${s} />`}}else if(c&&!S){const e=o&&void 0!==n?n:a(d),t=u(y),i=v(y,t.size?t:void 0);p+=`<${e}>${f(i)}</${e}>`}else{const e=l.indexOf(d);if(-1!==e){const t=void 0!==n?n:e,i=u(y),r=v(y,i.size?i:void 0,!1);p+=`<${t}>${f(r)}</${t}>`}else{const e=v(y,void 0,!1);p+=`<${s}>${f(e)}</${s}>`}}}else{const e=d.children||[],t=a(d),n=u(e),i=v(e,n.size?n:void 0);p+=`<${t}>${f(i)}</${t}>`}continue}"JSXFragment"!==d.type||(p+=v(d.children||[]))}}return p}const d=v(e,void 0,!0),S=String(d).replace(/<br \/>\s*\n\s*/g,"<br />"),x=String(S),m=new Set;if(c&&c.size>0)for(let e=0;e<l.length;e++)c.has(l[e])&&m.add(e);let h=String(x);if(m&&m.size>0)for(const e of m)try{h=h.replace(new RegExp("\\s+<"+e+">","g"),"<"+e+">"),h=h.replace(new RegExp("<\\/"+e+">\\s+","g"),"</"+e+">")}catch(e){}h=h.replace(/<\/(\d+)>\s*\n\s*(\S)/g,(e,t,n)=>{const i=Number(t);return m.has(i)?`</${t}>${n}`:`</${t}> ${n}`}),h=h.replace(/(\S)\s*\n\s*<(\d+)/g,(e,t,n)=>{const i=Number(n);return m.has(i)?`${t}<${n}`:`${t} <${n}`}),h=h.replace(/\s*\n\s*/g," "),h=h.replace(/\s+/g," "),h=h.replace(/\(\s+(\{\{)/g,"($1"),h=h.replace(/(\}\})\s+\)/g,"$1)"),h=h.replace(/\s+([,;:!?.])/g,"$1");const J=h.trim();let X=String(J);if(m&&m.size>0)for(const e of m)try{X=X.replace(new RegExp("[\\s\\u00A0]+<"+e+">","g"),"<"+e+">"),X=X.replace(new RegExp("<\\/"+e+">[\\s\\u00A0]+","g"),"</"+e+">")}catch(e){}try{for(let e=0;e<l.length;e++){const t=l[e];if(!t||"JSXElement"!==t.type)continue;const n=l[e-1],i=l[e+1];if(!n||!i)continue;if("JSXText"!==n.type||"JSXText"!==i.type)continue;const r=String(n.value),s=String(i.value),o=r.replace(/\n\s*$/,""),p=/[A-Za-z0-9]$/.test(o),a=/^[A-Za-z0-9]/.test(s.trim()),u=/^[a-z]/.test(s.trim()),c=/\s\n/.test(r),f=s&&/^\s/.test(s)&&!/^\n/.test(s);if(p&&a&&u&&!c&&!f){const t=e;X=X.replace(new RegExp("\\s+<"+t+">","g"),"<"+t+">")}}}catch(e){}return X.trim()}(r.children,s);let J;const X="JSXAttribute"===p?.type?i(p):void 0;if(void 0!==X)J=X;else{const e=s.extract.defaultValue;J="string"==typeof e?e:""}let E,$;if("JSXAttribute"===o?.type){if("StringLiteral"===o.value?.type){if(E=o.value,$=E.value,!$||""===$.trim())return null;if(m&&"StringLiteral"===E.type){const e=s.extract.nsSeparator??":",t=E.value;if(e&&t.startsWith(`${m}${e}`)){if($=t.slice(`${m}${e}`.length),!$||""===$.trim())return null;E={...E,value:$}}}}else"JSXExpressionContainer"===o.value?.type&&"JSXEmptyExpression"!==o.value.expression.type&&(E=o.value.expression);if(!E)return null}return p||!$||h.trim()?!p&&h.trim()&&(J=h):J=$,{keyExpression:E,serializedChildren:h,ns:m,defaultValue:J,hasCount:c,isOrdinal:v,contextExpression:S,optionsNode:y,explicitDefault:void 0!==X||(e=>{if(!e||!Array.isArray(e.properties))return!1;for(const t of e.properties)if(t&&"KeyValueProperty"===t.type&&t.key){const e="Identifier"===t.key.type&&t.key.value||"StringLiteral"===t.key.type&&t.key.value;if("string"==typeof e&&e.startsWith("defaultValue"))return!0}return!1})(y)}};
|
package/dist/esm/cli.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{Command as o}from"commander";import e from"chokidar";import{glob as t}from"glob";import{minimatch as n}from"minimatch";import i from"chalk";import{ensureConfig as r,loadConfig as a}from"./config.js";import{detectConfig as c}from"./heuristic-config.js";import{runExtractor as s}from"./extractor/core/extractor.js";import"node:path";import"node:fs/promises";import"jiti";import"@croct/json5-parser";import{runTypesGenerator as l}from"./types-generator.js";import{runSyncer as p}from"./syncer.js";import{runMigrator as d}from"./migrator.js";import{runInit as f}from"./init.js";import{runLinterCli as m}from"./linter.js";import{runStatus as u}from"./status.js";import{runLocizeSync as y,runLocizeDownload as g,runLocizeMigrate as h}from"./locize.js";import{runRenameKey as w}from"./rename-key.js";const x=new o;x.name("i18next-cli").description("A unified, high-performance i18next CLI.").version("1.33.
|
|
2
|
+
import{Command as o}from"commander";import e from"chokidar";import{glob as t}from"glob";import{minimatch as n}from"minimatch";import i from"chalk";import{ensureConfig as r,loadConfig as a}from"./config.js";import{detectConfig as c}from"./heuristic-config.js";import{runExtractor as s}from"./extractor/core/extractor.js";import"node:path";import"node:fs/promises";import"jiti";import"@croct/json5-parser";import{runTypesGenerator as l}from"./types-generator.js";import{runSyncer as p}from"./syncer.js";import{runMigrator as d}from"./migrator.js";import{runInit as f}from"./init.js";import{runLinterCli as m}from"./linter.js";import{runStatus as u}from"./status.js";import{runLocizeSync as y,runLocizeDownload as g,runLocizeMigrate as h}from"./locize.js";import{runRenameKey as w}from"./rename-key.js";const x=new o;x.name("i18next-cli").description("A unified, high-performance i18next CLI.").version("1.33.5"),x.option("-c, --config <path>","Path to i18next-cli config file (overrides detection)"),x.command("extract").description("Extract translation keys from source files and update resource files.").option("-w, --watch","Watch for file changes and re-run the extractor.").option("--ci","Exit with a non-zero status code if any files are updated.").option("--dry-run","Run the extractor without writing any files to disk.").option("--sync-primary","Sync primary language values with default values from code.").option("--sync-all","Sync primary language values with default values from code AND clear synced keys in all other locales.").action(async o=>{try{const t=x.opts().config,i=await r(t),a=async()=>{const e=!!o.syncPrimary||!!o.syncAll,t=await s(i,{isWatchMode:!!o.watch,isDryRun:!!o.dryRun,syncPrimaryWithDefaults:e,syncAll:!!o.syncAll});return o.ci&&!t?(console.log("✅ No files were updated."),process.exit(0)):o.ci&&t&&(console.error("❌ Some files were updated. This should not happen in CI mode."),process.exit(1)),t};if(await a(),o.watch){console.log("\nWatching for changes...");const o=await z(i.extract.input),t=j(i.extract.ignore),r=v(i.extract.output),c=[...t,...r].filter(Boolean),s=o.filter(o=>!c.some(e=>n(o,e,{dot:!0})));e.watch(s,{ignored:/node_modules/,persistent:!0}).on("change",o=>{console.log(`\nFile changed: ${o}`),a()})}}catch(o){console.error("Error running extractor:",o),process.exit(1)}}),x.command("status [locale]").description("Display translation status. Provide a locale for a detailed key-by-key view.").option("-n, --namespace <ns>","Filter the status report by a specific namespace").action(async(o,e)=>{const t=x.opts().config;let n=await a(t);if(!n){console.log(i.blue("No config file found. Attempting to detect project structure..."));const o=await c();o||(console.error(i.red("Could not automatically detect your project structure.")),console.log(`Please create a config file first by running: ${i.cyan("npx i18next-cli init")}`),process.exit(1)),console.log(i.green("Project structure detected successfully!")),n=o}await u(n,{detail:o,namespace:e.namespace})}),x.command("types").description("Generate TypeScript definitions from translation resource files.").option("-w, --watch","Watch for file changes and re-run the type generator.").action(async o=>{const t=x.opts().config,i=await r(t),a=()=>l(i);if(await a(),o.watch){console.log("\nWatching for changes...");const o=await z(i.types?.input||[]),t=[...j(i.extract?.ignore)].filter(Boolean),r=o.filter(o=>!t.some(e=>n(o,e,{dot:!0})));e.watch(r,{persistent:!0}).on("change",o=>{console.log(`\nFile changed: ${o}`),a()})}}),x.command("sync").description("Synchronize secondary language files with the primary language file.").action(async()=>{const o=x.opts().config,e=await r(o);await p(e)}),x.command("migrate-config [configPath]").description("Migrate a legacy i18next-parser.config.js to the new format.").action(async o=>{await d(o)}),x.command("init").description("Create a new i18next.config.ts/js file with an interactive setup wizard.").action(f),x.command("lint").description("Find potential issues like hardcoded strings in your codebase.").option("-w, --watch","Watch for file changes and re-run the linter.").action(async o=>{const t=x.opts().config,r=async()=>{let o=await a(t);if(!o){console.log(i.blue("No config file found. Attempting to detect project structure..."));const e=await c();e||(console.error(i.red("Could not automatically detect your project structure.")),console.log(`Please create a config file first by running: ${i.cyan("npx i18next-cli init")}`),process.exit(1)),console.log(i.green("Project structure detected successfully!")),o=e}await m(o)};if(await r(),o.watch){console.log("\nWatching for changes...");const o=await a(t);if(o?.extract?.input){const t=await z(o.extract.input),i=[...j(o.extract.ignore),...v(o.extract.output)].filter(Boolean),a=t.filter(o=>!i.some(e=>n(o,e,{dot:!0})));e.watch(a,{ignored:/node_modules/,persistent:!0}).on("change",o=>{console.log(`\nFile changed: ${o}`),r()})}}}),x.command("locize-sync").description("Synchronize local translations with your locize project.").option("--update-values","Update values of existing translations on locize.").option("--src-lng-only","Check for changes in source language only.").option("--compare-mtime","Compare modification times when syncing.").option("--dry-run","Run the command without making any changes.").option("--cdn-type <standard|pro>","Specify the cdn endpoint that should be used (depends on which cdn type you've in your locize project)").action(async o=>{const e=x.opts().config,t=await r(e);await y(t,o)}),x.command("locize-download").description("Download all translations from your locize project.").option("--cdn-type <standard|pro>","Specify the cdn endpoint that should be used (depends on which cdn type you've in your locize project)").action(async o=>{const e=x.opts().config,t=await r(e);await g(t,o)}),x.command("locize-migrate").description("Migrate local translation files to a new locize project.").option("--cdn-type <standard|pro>","Specify the cdn endpoint that should be used (depends on which cdn type you've in your locize project)").action(async o=>{const e=x.opts().config,t=await r(e);await h(t,o)}),x.command("rename-key <oldKey> <newKey>").description("Rename a translation key across all source files and translation files.").option("--dry-run","Preview changes without modifying files").action(async(o,e,t)=>{try{const n=x.opts().config,a=await r(n),c=await w(a,o,e,t);c.success||(c.conflicts&&(console.error(i.red("\n❌ Conflicts detected:")),c.conflicts.forEach(o=>console.error(` - ${o}`))),c.error&&console.error(i.red(`\n❌ ${c.error}`)),process.exit(1));0===c.sourceFiles.reduce((o,e)=>o+e.changes,0)&&console.log(i.yellow(`\n⚠️ No usages found for "${o}"`))}catch(o){console.error(i.red("Error renaming key:"),o),process.exit(1)}}),x.parse(process.argv);const j=o=>Array.isArray(o)?o:o?[o]:[],v=o=>o&&"string"==typeof o?[o.replace(/\{\{[^}]+\}\}/g,"*")]:[],z=async(o=[])=>{const e=j(o),n=await Promise.all(e.map(o=>t(o||"",{nodir:!0})));return Array.from(new Set(n.flat()))};export{x as program};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{getObjectPropValueExpression as e,getObjectPropValue as t,isSimpleTemplateLiteral as n}from"./ast-utils.js";function i(e){if(e)return"StringLiteral"===e.type?e.value:"TemplateLiteral"===e.type&&n(e)?e.quasis[0].cooked:void 0}function r(e){if(e)return"StringLiteral"===e.type?e.value:"TemplateLiteral"===e.type&&n(e)?e.quasis?.[0]?.cooked:"ParenExpression"===e.type&&e.expr?r(e.expr):"ParenthesizedExpression"===e.type&&e.expression||"TsAsExpression"===e.type&&e.expression?r(e.expression):void 0}function s(e){return"StringLiteral"===e.value?.type?e.value.value:"JSXExpressionContainer"===e.value?.type?i(e.value.expression):void 0}function o(n,o){const p=n.opening.attributes?.find(e=>"JSXAttribute"===e.type&&"Identifier"===e.name.type&&"i18nKey"===e.name.value),a=n.opening.attributes?.find(e=>"JSXAttribute"===e.type&&"Identifier"===e.name.type&&"defaults"===e.name.value),l=n.opening.attributes?.find(e=>"JSXAttribute"===e.type&&"Identifier"===e.name.type&&"count"===e.name.value),u=n.opening.attributes?.find(e=>"JSXAttribute"===e.type&&"Identifier"===e.name.type&&"values"===e.name.value);let c;l||"JSXAttribute"!==u?.type||"JSXExpressionContainer"!==u.value?.type||"ObjectExpression"!==u.value.expression.type||(c=e(u.value.expression,"count"));const y=!!l||!!c,f=n.opening.attributes?.find(e=>"JSXAttribute"===e.type&&"Identifier"===e.name.type&&"tOptions"===e.name.value),g="JSXAttribute"===f?.type&&"JSXExpressionContainer"===f.value?.type&&"ObjectExpression"===f.value.expression.type?f.value.expression:void 0,d=n.opening.attributes?.find(e=>"JSXAttribute"===e.type&&"Identifier"===e.name.type&&"ordinal"===e.name.value),v=!!d,x=n.opening.attributes?.find(e=>"JSXAttribute"===e.type&&"Identifier"===e.name.type&&"context"===e.name.value);let S="JSXAttribute"===x?.type&&"JSXExpressionContainer"===x.value?.type?x.value.expression:"JSXAttribute"===x?.type&&"StringLiteral"===x.value?.type?x.value:void 0;const h=n.opening.attributes?.find(e=>"JSXAttribute"===e.type&&"Identifier"===e.name.type&&"ns"===e.name.value);let m;m="JSXAttribute"===h?.type?s(h):void 0,g&&(void 0===m&&(m=t(g,"ns")),void 0===S&&(S=e(g,"context")));const J=function(e,t){if(!e||0===e.length)return"";const n=new Set(t.extract.transKeepBasicHtmlNodesFor??["br","strong","i","p"]),s=e=>e&&"JSXText"===e.type&&/^\s*$/.test(e.value)&&e.value.includes("\n"),o=e=>e&&("JSXElement"===e.type||"JSXFragment"===e.type),p=(e,t)=>{for(let n=t;n<e.length;n++){const t=e[n];if(t&&("JSXText"!==t.type||!s(t)))return t}},a=e=>{let t=e;for(;t;)if("ParenExpression"===t.type&&t.expr)t=t.expr;else if("ParenthesizedExpression"===t.type&&t.expression)t=t.expression;else{if("TsAsExpression"!==t.type||!t.expression)break;t=t.expression}return t};function l(e,t,u=!1,c=!1){if(!e||!e.length)return;const y=c&&e.filter(e=>e&&"JSXElement"===e.type&&"p"===e.opening?.name?.value).length>1;let f=0,g=e.length-1;for(;f<=g&&s(e[f]);)f++;for(;g>=f&&s(e[g]);)g--;const d=f<=g?e.slice(f,g+1):[],v=d.some(e=>e&&("JSXElement"===e.type||"JSXFragment"===e.type));for(let e=0;e<d.length;e++){const f=d[e];if(f)if("JSXText"!==f.type){if("JSXExpressionContainer"===f.type){if(u&&!v&&f.expression){const e=a(f.expression),t=e?.type;if("ObjectExpression"===t)continue;if(void 0!==r(e))continue;if("Identifier"===t||"MemberExpression"===t||"CallExpression"===t)continue}const n=i(f.expression);if(void 0!==n){const i=/^\s*$/.test(n)&&!n.includes("\n"),r=d[e-1],a=d[e+1];if(i){const n=p(d,e+1);if(o(r)&&o(n));else{const n=d[e+2];if(a&&"JSXText"===a.type&&s(a)&&n&&("JSXElement"===n.type||"JSXFragment"===n.type)){const t=d[e-1],n=d[e-2];if(!t||"JSXText"!==t.type&&n&&"JSXExpressionContainer"===n.type)continue}if(r&&("JSXElement"===r.type||"JSXFragment"===r.type)&&a&&"JSXText"===a.type&&s(a))continue;const i=!a||"JSXText"===a.type&&!s(a);if(r&&"JSXText"===r.type&&i){const e=t[t.length-1];if(e&&"JSXText"===e.type){e.value=String(e.value)+f.expression.value;continue}}if(r&&("JSXElement"===r.type||"JSXFragment"===r.type)&&a&&"JSXText"===a.type&&s(a))continue}}}t.push(f);continue}if("JSXElement"===f.type){const e=f.opening&&f.opening.name&&"Identifier"===f.opening.name.type?f.opening.name.value:void 0;if(e&&n.has(e)){const r=f.opening&&Array.isArray(f.opening.attributes)&&f.opening.attributes.length>0,o=f.children||[],p=1===o.length&&("JSXText"===o[0]?.type||"JSXExpressionContainer"===o[0]?.type&&void 0!==i(o[0].expression)),a=!o.length,u=p;if(r&&!p)t.push(f),l(f.children||[],t,!0);else if(a)t.push(f);else if(!u){if((f.children||[]).some(e=>"JSXExpressionContainer"===e.type&&void 0===i(e.expression)))t.push(f),l(f.children||[],t,!0);else if("p"===e){const e=(o||[]).some(e=>{if(!e||"JSXElement"!==e.type)return!1;const t=e.opening&&e.opening.name&&"Identifier"===e.opening.name.type?e.opening.name.value:void 0,r=e.opening&&Array.isArray(e.opening.attributes)&&e.opening.attributes.length>0,s=e.children||[],o=1===s.length&&("JSXText"===s[0]?.type||"JSXExpressionContainer"===s[0]?.type&&void 0!==i(s[0].expression));return!(t&&n.has(t)&&!r&&(0===s.length||o))}),r=c&&d.some(e=>e&&e!==f&&"JSXText"===e.type&&!s(e));y||c&&e&&!r?(t.push(f),l(f.children||[],t,!0,!1)):l(f.children||[],t,!1,!1)}else l(f.children||[],t,!1,!1)}continue}t.push(f),l(f.children||[],t,!0);continue}"JSXFragment"!==f.type||l(f.children||[],t,u)}else{if(u&&!v)continue;if(u&&s(f))continue;if(s(f)){const n=d[e-1],i=d[e+1];if(n&&("JSXElement"===n.type||"JSXFragment"===n.type)&&i&&("JSXElement"===i.type||"JSXFragment"===i.type))continue;const r=t[t.length-1],s=d[e-1];if(r){if(s&&"JSXExpressionContainer"===s.type)continue;if("JSXText"===r.type&&s&&"JSXText"===s.type){r.value=String(r.value)+f.value;continue}}}if(u&&v&&0===e)continue;t.push(f)}}}const u=[];function c(e){const t=new Map;if(!e||!e.length)return t;const r=e=>e&&"JSXText"===e.type&&!s(e)&&String(e.value).length>0,o=e=>{if(!e||"JSXExpressionContainer"!==e.type)return!1;const t=e.expression;if(!t||"JSXEmptyExpression"===t.type)return!1;const n=i(t);return void 0===n||(!/^\s*$/.test(n)||!n.includes("\n"))},p=e=>"Identifier"===e?.opening?.name?.type?e.opening.name.value:void 0,a=e=>{const t=e?.children||[];return 1===t.length&&("JSXText"===t[0]?.type||"JSXExpressionContainer"===t[0]?.type&&void 0!==i(t[0].expression))},l=e=>{const t=p(e);if(!t||!n.has(t))return!0;if("p"===t)return!0;const i=e.opening&&Array.isArray(e.opening.attributes)&&e.opening.attributes.length>0;return!!((e.children||[]).length>0)&&(!a(e)&&(!!i||-1!==u.indexOf(e)))},c=e=>{const t=p(e);if(!t||!n.has(t))return!1;if(0!==(e.children||[]).length)return!1;const i=e.opening&&Array.isArray(e.opening.attributes)&&e.opening.attributes.length>0;return"br"===t&&!i};let y=0;for(const n of e)n&&(r(n)||o(n)?y+=1:"JSXElement"!==n.type||(l(n)?(t.set(n,y),y+=1):c(n)&&(y+=1)));return t}l(e,u,!1,!0);const y=new Set,f=e=>String(e).replace(/^\s*\n\s*/g,"").replace(/\s*\n\s*$/g,"");function g(e,t,o=!1){if(!e||0===e.length)return"";let p="";const a=e=>{if(!e)return-1;if(t&&t.has(e))return t.get(e);if(t)for(const[n,i]of t.entries())try{if(n&&e&&n.span&&e.span&&n.span.start===e.span.start&&n.span.end===e.span.end)return i}catch(e){}return u.indexOf(e)},l=t=>{if(!o)return u.indexOf(t);const n=e.indexOf(t);if(-1===n)return-1;let i=0;for(let t=0;t<n;t++){const n=e[t];n&&("JSXText"===n.type?s(n)||i++:"JSXExpressionContainer"===n.type?n.expression&&"JSXEmptyExpression"!==n.expression.type&&i++:"JSXElement"===n.type&&i++)}return i};for(let t=0;t<e.length;t++){const d=e[t];if(d){if("JSXText"===d.type){if(s(d))continue;const i=e[t+1],r=e[t-1];if(r&&"JSXElement"===r.type){const i="Identifier"===r.opening?.name?.type?r.opening.name.value:void 0,s=i&&n.has(i),o=0===(r.children||[]).length;if(s&&o&&/^\s*\n\s*/.test(d.value)){const e=d.value.replace(/^\s*\n\s*/,"");if(e){p+=e;continue}continue}if(!s&&/^\s*\n\s*/.test(d.value)){const n=d.value.replace(/^\s*\n\s*/,"");if(n){if(r&&"JSXElement"===r.type&&Array.isArray(r.children)&&0===r.children.length){p+=n;continue}const i=e[t-2];if(i&&"JSXText"===i.type){const e=i.value.replace(/\n\s*$/,""),t=/[A-Za-z0-9]$/.test(e),r=/^[A-Za-z0-9]/.test(n),s=/^[a-z]/.test(n);if(t&&r&&s){p+=n;continue}}p+=" "+n;continue}continue}}if(/\n\s*$/.test(d.value)&&i&&"JSXElement"===i.type){const r=d.value.replace(/\n\s*$/,"");if(r.trim()){const o="Identifier"===i.opening?.name?.type?i.opening.name.value:void 0,a=o&&n.has(o),l=(i.children||[]).length>0,u=/\s\n/.test(d.value),c=e[t+2],f=c&&"JSXText"===c.type&&!s(c)&&/[a-zA-Z0-9]/.test(c.value),g=!!(i.opening&&Array.isArray(i.opening.attributes)&&i.opening.attributes.length>0),v=/^\s/.test(r)&&!/^\n/.test(r),x=r.trim(),S=v?" "+x:x,h=/[A-Za-z0-9]$/.test(x),m=c&&"string"==typeof c.value&&/^[A-Za-z0-9]/.test(c.value.trim()),J=c&&"string"==typeof c.value&&/^[a-z]/.test(c.value.trim()),X=c&&"string"==typeof c.value&&/^\s/.test(c.value)&&!/^\n/.test(c.value),E=g&&l&&f&&!(h&&m&&J&&!u&&!v&&!X),$=c&&"string"==typeof c.value&&/^[,;:!?.]/.test(c.value.trim()),b=E&&!$;h&&m&&J&&!u&&!v&&!X&&y.add(i),p+=u||a&&l||!a&&f&&v||b?S+" ":S;continue}}p+=d.value;continue}if("JSXExpressionContainer"===d.type){const e=d.expression;if(!e)continue;const t=i(e);if(void 0!==t)p+=t;else if("Identifier"===e.type)p+=`{{${e.value}}}`;else if("TsAsExpression"===e.type&&"ObjectExpression"===e.expression?.type){const t=e.expression,n=t.properties.filter(e=>"KeyValueProperty"===e.type&&e.key&&"Identifier"===e.key.type).map(e=>e.key.value);if(n.length>0)p+=n.map(e=>`{{${e}}}`).join("");else{const e=t.properties[0];if(!e||"Identifier"!==e.type)throw new Error("Unrecognized expression in JSX placeholder");p+=`{{${e.value}}}`}}else if("ObjectExpression"===e.type){const t=e.properties[0];if(t&&"KeyValueProperty"===t.type&&t.key&&"Identifier"===t.key.type)p+=`{{${t.key.value}}}`;else{if(!t||"Identifier"!==t.type)throw new Error("Unrecognized expression in JSX placeholder");p+=`{{${t.value}}}`}}else if("MemberExpression"===e.type&&e.property&&"Identifier"===e.property.type)p+=`{{${e.property.value}}}`;else if("CallExpression"===e.type&&"Identifier"===e.callee?.type)p+=`{{${e.callee.value}}}`;else if("ConditionalExpression"===e.type){const t=r(e.consequent),n=r(e.alternate);p+=void 0!==t&&void 0!==n?t.length>=n.length?t:n:void 0!==t?t:void 0!==n?n:""}else if("JSXEmptyExpression"!==e.type)throw new Error(`Unrecognized expression in JSX placeholder: ${e.type}`);continue}if("JSXElement"===d.type){const r=o?l(d):void 0;let s;if(d.opening&&d.opening.name&&"Identifier"===d.opening.name.type&&(s=d.opening.name.value),s&&n.has(s)){const l=d.opening&&Array.isArray(d.opening.attributes)&&d.opening.attributes.length>0,y=d.children||[],v=y.length>0,x=1===y.length&&("JSXText"===y[0]?.type||"JSXExpressionContainer"===y[0]?.type&&void 0!==i(y[0].expression)),S="p"===s;let h=0;if(S&&o&&(h=e.filter(e=>e&&"JSXElement"===e.type&&"p"===e.opening?.name?.value).length),!v||x){const i=x?g(y,void 0):"";if(""!==String(i).trim())if(n.has(s)&&"p"!==s)p+=`<${s}>${f(i)}</${s}>`;else if(S&&o&&h>1)p+=`<${s}>${f(i)}</${s}>`;else if(S){const e=o&&void 0!==r?r:u.indexOf(d);p+=`<${e}>${f(i)}</${e}>`}else{const e=o&&void 0!==r?r:u.indexOf(d);p+=`<${e}>${f(i)}</${e}>`}else{const n=e[t-1];n&&"JSXText"===n.type&&/\n\s*$/.test(n.value)&&(p=p.replace(/\s+$/,"")),p+=`<${s} />`}}else if(l&&!x){const e=o&&void 0!==r?r:a(d),t=c(y),n=g(y,t.size?t:void 0);p+=`<${e}>${f(n)}</${e}>`}else{const e=u.indexOf(d);if(-1!==e){const t=void 0!==r?r:e,n=c(y),i=g(y,n.size?n:void 0,!1);p+=`<${t}>${f(i)}</${t}>`}else{const e=g(y,void 0,!1);p+=`<${s}>${f(e)}</${s}>`}}}else{const e=d.children||[],t=a(d),n=c(e),i=g(e,n.size?n:void 0);p+=`<${t}>${f(i)}</${t}>`}continue}"JSXFragment"!==d.type||(p+=g(d.children||[]))}}return p}const d=g(e,void 0,!0),v=String(d).replace(/<br \/>\s*\n\s*/g,"<br />"),x=String(v),S=new Set;if(y&&y.size>0)for(let e=0;e<u.length;e++)y.has(u[e])&&S.add(e);let h=String(x);if(S&&S.size>0)for(const e of S)try{h=h.replace(new RegExp("\\s+<"+e+">","g"),"<"+e+">"),h=h.replace(new RegExp("<\\/"+e+">\\s+","g"),"</"+e+">")}catch(e){}h=h.replace(/<\/(\d+)>\s*\n\s*(\S)/g,(e,t,n)=>{const i=Number(t);return S.has(i)?`</${t}>${n}`:`</${t}> ${n}`}),h=h.replace(/(\S)\s*\n\s*<(\d+)/g,(e,t,n)=>{const i=Number(n);return S.has(i)?`${t}<${n}`:`${t} <${n}`}),h=h.replace(/\s*\n\s*/g," "),h=h.replace(/\s+/g," "),h=h.replace(/\s+([,;:!?.])/g,"$1");const m=h.trim();let J=String(m);if(S&&S.size>0)for(const e of S)try{J=J.replace(new RegExp("[\\s\\u00A0]+<"+e+">","g"),"<"+e+">"),J=J.replace(new RegExp("<\\/"+e+">[\\s\\u00A0]+","g"),"</"+e+">")}catch(e){}try{for(let e=0;e<u.length;e++){const t=u[e];if(!t||"JSXElement"!==t.type)continue;const n=u[e-1],i=u[e+1];if(!n||!i)continue;if("JSXText"!==n.type||"JSXText"!==i.type)continue;const r=String(n.value),s=String(i.value),o=r.replace(/\n\s*$/,""),p=/[A-Za-z0-9]$/.test(o),a=/^[A-Za-z0-9]/.test(s.trim()),l=/^[a-z]/.test(s.trim()),c=/\s\n/.test(r),y=s&&/^\s/.test(s)&&!/^\n/.test(s);if(p&&a&&l&&!c&&!y){const t=e;J=J.replace(new RegExp("\\s+<"+t+">","g"),"<"+t+">")}}}catch(e){}return J.trim()}(n.children,o);let X;const E="JSXAttribute"===a?.type?s(a):void 0;if(void 0!==E)X=E;else{const e=o.extract.defaultValue;X="string"==typeof e?e:""}let $,b;if("JSXAttribute"===p?.type){if("StringLiteral"===p.value?.type){if($=p.value,b=$.value,!b||""===b.trim())return null;if(m&&"StringLiteral"===$.type){const e=o.extract.nsSeparator??":",t=$.value;if(e&&t.startsWith(`${m}${e}`)){if(b=t.slice(`${m}${e}`.length),!b||""===b.trim())return null;$={...$,value:b}}}}else"JSXExpressionContainer"===p.value?.type&&"JSXEmptyExpression"!==p.value.expression.type&&($=p.value.expression);if(!$)return null}a||!b||J.trim()?!a&&J.trim()&&(X=J):X=b;return{keyExpression:$,serializedChildren:J,ns:m,defaultValue:X,hasCount:y,isOrdinal:v,contextExpression:S,optionsNode:g,explicitDefault:void 0!==E||(e=>{if(!e||!Array.isArray(e.properties))return!1;for(const t of e.properties)if(t&&"KeyValueProperty"===t.type&&t.key){const e="Identifier"===t.key.type&&t.key.value||"StringLiteral"===t.key.type&&t.key.value;if("string"==typeof e&&e.startsWith("defaultValue"))return!0}return!1})(g)}}export{o as extractFromTransComponent};
|
|
1
|
+
import{getObjectPropValueExpression as e,getObjectPropValue as t,isSimpleTemplateLiteral as n}from"./ast-utils.js";function i(e){if(e)return"StringLiteral"===e.type?e.value:"TemplateLiteral"===e.type&&n(e)?e.quasis[0].cooked:void 0}function r(e){if(e){if("StringLiteral"===e.type)return e.value;if("ParenExpression"===e.type&&e.expr)return r(e.expr);if("ParenthesizedExpression"===e.type&&e.expression)return r(e.expression);if("TsAsExpression"===e.type&&e.expression)return r(e.expression);if("JSXFragment"===e.type||"JSXElement"===e.type){const t=e.children??[];let n="";for(const e of t)if(e){if("JSXText"!==e.type){if("JSXExpressionContainer"===e.type){if(!e.expression||"JSXEmptyExpression"===e.expression.type)continue;const t=i(e.expression);if(void 0===t)return;n+=t;continue}return}n+=e.value}return n}if("TemplateLiteral"===e.type&&Array.isArray(e.expressions)&&0===e.expressions.length){return(e.quasis??[]).map(e=>e?.cooked??e?.raw??"").join("")}if("TemplateLiteral"===e.type&&n(e))return e.quasis?.[0]?.cooked;if("BinaryExpression"===e.type){if("+"===(e.operator??e.op)){const t=r(e.left),n=r(e.right);if(void 0!==t&&void 0!==n)return t+n}}}}function s(e){return"StringLiteral"===e.value?.type?e.value.value:"JSXExpressionContainer"===e.value?.type?i(e.value.expression):void 0}function o(n,o){const p=n.opening.attributes?.find(e=>"JSXAttribute"===e.type&&"Identifier"===e.name.type&&"i18nKey"===e.name.value),a=n.opening.attributes?.find(e=>"JSXAttribute"===e.type&&"Identifier"===e.name.type&&"defaults"===e.name.value),l=n.opening.attributes?.find(e=>"JSXAttribute"===e.type&&"Identifier"===e.name.type&&"count"===e.name.value),u=n.opening.attributes?.find(e=>"JSXAttribute"===e.type&&"Identifier"===e.name.type&&"values"===e.name.value);let c;l||"JSXAttribute"!==u?.type||"JSXExpressionContainer"!==u.value?.type||"ObjectExpression"!==u.value.expression.type||(c=e(u.value.expression,"count"));const f=!!l||!!c,y=n.opening.attributes?.find(e=>"JSXAttribute"===e.type&&"Identifier"===e.name.type&&"tOptions"===e.name.value),g="JSXAttribute"===y?.type&&"JSXExpressionContainer"===y.value?.type&&"ObjectExpression"===y.value.expression.type?y.value.expression:void 0,d=n.opening.attributes?.find(e=>"JSXAttribute"===e.type&&"Identifier"===e.name.type&&"ordinal"===e.name.value),v=!!d,S=n.opening.attributes?.find(e=>"JSXAttribute"===e.type&&"Identifier"===e.name.type&&"context"===e.name.value);let x="JSXAttribute"===S?.type&&"JSXExpressionContainer"===S.value?.type?S.value.expression:"JSXAttribute"===S?.type&&"StringLiteral"===S.value?.type?S.value:void 0;const m=n.opening.attributes?.find(e=>"JSXAttribute"===e.type&&"Identifier"===e.name.type&&"ns"===e.name.value);let h;h="JSXAttribute"===m?.type?s(m):void 0,g&&(void 0===h&&(h=t(g,"ns")),void 0===x&&(x=e(g,"context")));const J=function(e,t){if(!e||0===e.length)return"";const n=new Set(t.extract.transKeepBasicHtmlNodesFor??["br","strong","i","p"]),s=e=>e&&"JSXText"===e.type&&/^\s*$/.test(e.value)&&e.value.includes("\n"),o=e=>e&&("JSXElement"===e.type||"JSXFragment"===e.type),p=(e,t)=>{for(let n=t;n<e.length;n++){const t=e[n];if(t&&("JSXText"!==t.type||!s(t)))return t}};function a(e,t,r=!1,l=!1){if(!e||!e.length)return;const u=l&&e.filter(e=>e&&"JSXElement"===e.type&&"p"===e.opening?.name?.value).length>1;let c=0,f=e.length-1;for(;c<=f&&s(e[c]);)c++;for(;f>=c&&s(e[f]);)f--;const y=c<=f?e.slice(c,f+1):[],g=y.some(e=>e&&("JSXElement"===e.type||"JSXFragment"===e.type));for(let e=0;e<y.length;e++){const c=y[e];if(c)if("JSXText"!==c.type){if("JSXExpressionContainer"===c.type){if(r&&!g)continue;const n=i(c.expression);if(void 0!==n){const i=/^\s*$/.test(n)&&!n.includes("\n"),r=y[e-1],a=y[e+1];if(i){const n=p(y,e+1);if(o(r)&&o(n));else{const n=y[e+2];if(a&&"JSXText"===a.type&&s(a)&&n&&("JSXElement"===n.type||"JSXFragment"===n.type)){const t=y[e-1],n=y[e-2];if(!t||"JSXText"!==t.type&&n&&"JSXExpressionContainer"===n.type)continue}if(r&&("JSXElement"===r.type||"JSXFragment"===r.type)&&a&&"JSXText"===a.type&&s(a))continue;const i=!a||"JSXText"===a.type&&!s(a);if(r&&"JSXText"===r.type&&i){const e=t[t.length-1];if(e&&"JSXText"===e.type){e.value=String(e.value)+c.expression.value;continue}}if(r&&("JSXElement"===r.type||"JSXFragment"===r.type)&&a&&"JSXText"===a.type&&s(a))continue}}}t.push(c);continue}if("JSXElement"===c.type){const e=c.opening&&c.opening.name&&"Identifier"===c.opening.name.type?c.opening.name.value:void 0;if(e&&n.has(e)){const r=c.opening&&Array.isArray(c.opening.attributes)&&c.opening.attributes.length>0,o=c.children||[],p=1===o.length&&("JSXText"===o[0]?.type||"JSXExpressionContainer"===o[0]?.type&&void 0!==i(o[0].expression)),f=!o.length,g=p;if(r&&!p)t.push(c),a(c.children||[],t,!0);else if(f)t.push(c);else if(!g){if((c.children||[]).some(e=>"JSXExpressionContainer"===e.type&&void 0===i(e.expression)))t.push(c),a(c.children||[],t,!0);else if("p"===e){const e=(o||[]).some(e=>{if(!e||"JSXElement"!==e.type)return!1;const t=e.opening&&e.opening.name&&"Identifier"===e.opening.name.type?e.opening.name.value:void 0,r=e.opening&&Array.isArray(e.opening.attributes)&&e.opening.attributes.length>0,s=e.children||[],o=1===s.length&&("JSXText"===s[0]?.type||"JSXExpressionContainer"===s[0]?.type&&void 0!==i(s[0].expression));return!(t&&n.has(t)&&!r&&(0===s.length||o))}),r=l&&y.some(e=>e&&e!==c&&"JSXText"===e.type&&!s(e));u||l&&e&&!r?(t.push(c),a(c.children||[],t,!0,!1)):a(c.children||[],t,!1,!1)}else a(c.children||[],t,!1,!1)}continue}t.push(c),a(c.children||[],t,!0);continue}"JSXFragment"!==c.type||a(c.children||[],t,r)}else{if(r&&!g)continue;if(r&&s(c))continue;if(s(c)){const n=y[e-1],i=y[e+1];if(n&&("JSXElement"===n.type||"JSXFragment"===n.type)&&i&&("JSXElement"===i.type||"JSXFragment"===i.type))continue;const r=t[t.length-1],s=y[e-1];if(r){if(s&&"JSXExpressionContainer"===s.type)continue;if("JSXText"===r.type&&s&&"JSXText"===s.type){r.value=String(r.value)+c.value;continue}}}if(r&&g&&0===e)continue;t.push(c)}}}const l=[];function u(e){const t=new Map;if(!e||!e.length)return t;const r=e=>e&&"JSXText"===e.type&&!s(e)&&String(e.value).length>0,o=e=>{if(!e||"JSXExpressionContainer"!==e.type)return!1;const t=e.expression;if(!t||"JSXEmptyExpression"===t.type)return!1;const n=i(t);return void 0===n||(!/^\s*$/.test(n)||!n.includes("\n"))},p=e=>"Identifier"===e?.opening?.name?.type?e.opening.name.value:void 0,a=e=>{const t=e?.children||[];return 1===t.length&&("JSXText"===t[0]?.type||"JSXExpressionContainer"===t[0]?.type&&void 0!==i(t[0].expression))},u=e=>{const t=p(e);if(!t||!n.has(t))return!0;if("p"===t)return!0;const i=e.opening&&Array.isArray(e.opening.attributes)&&e.opening.attributes.length>0;return!!((e.children||[]).length>0)&&(!a(e)&&(!!i||-1!==l.indexOf(e)))},c=e=>{const t=p(e);if(!t||!n.has(t))return!1;if(0!==(e.children||[]).length)return!1;const i=e.opening&&Array.isArray(e.opening.attributes)&&e.opening.attributes.length>0;return"br"===t&&!i};let f=0;for(const n of e)n&&(r(n)||o(n)?f+=1:"JSXElement"!==n.type||(u(n)?(t.set(n,f),f+=1):c(n)&&(f+=1)));return t}a(e,l,!1,!0);const c=new Set,f=e=>String(e).replace(/^\s*\n\s*/g,"").replace(/\s*\n\s*$/g,""),y=e=>"Identifier"===e?.opening?.name?.type?e.opening.name.value:void 0,g=e=>{const t=y(e);if(!t||!n.has(t))return;const r=e?.children||[];if(1!==r.length)return;const s=r[0];return s?"JSXText"===s.type?String(s.value):"JSXExpressionContainer"===s.type?i(s.expression):void 0:void 0};function d(e,t,o=!1){if(!e||0===e.length)return"";let p="";const a=e=>{if(!e)return-1;if(t&&t.has(e))return t.get(e);if(t)for(const[n,i]of t.entries())try{if(n&&e&&n.span&&e.span&&n.span.start===e.span.start&&n.span.end===e.span.end)return i}catch(e){}return l.indexOf(e)},y=t=>{if(!o)return l.indexOf(t);const n=e.indexOf(t);if(-1===n)return-1;let i=0;for(let t=0;t<n;t++){const n=e[t];n&&("JSXText"===n.type?s(n)||i++:"JSXExpressionContainer"===n.type?n.expression&&"JSXEmptyExpression"!==n.expression.type&&i++:"JSXElement"===n.type&&i++)}return i};for(let t=0;t<e.length;t++){const v=e[t];if(v){if("JSXText"===v.type){if(s(v))continue;const i=e[t+1],r=e[t-1];if(r&&"JSXElement"===r.type){const i="Identifier"===r.opening?.name?.type?r.opening.name.value:void 0,s=i&&n.has(i),o=0===(r.children||[]).length;if(s&&o&&/^\s*\n\s*/.test(v.value)){const e=v.value.replace(/^\s*\n\s*/,"");if(e){p+=e;continue}continue}if(s&&!o&&/^\s*\n\s*/.test(v.value)){const e=g(r);if(void 0!==e&&/\s$/.test(e)){const e=v.value.replace(/^\s*\n\s*/g,"").replace(/^\s+/g,"");if(e){p+=e;continue}continue}}if(!s&&/^\s*\n\s*/.test(v.value)){const n=v.value.replace(/^\s*\n\s*/,"");if(n){if(r&&"JSXElement"===r.type&&Array.isArray(r.children)&&0===r.children.length){p+=n;continue}const i=e[t-2];if(i&&"JSXText"===i.type){const e=i.value.replace(/\n\s*$/,""),t=/[A-Za-z0-9]$/.test(e),r=/^[A-Za-z0-9]/.test(n),s=/^[a-z]/.test(n);if(t&&r&&s){p+=n;continue}}p+=" "+n;continue}continue}}if(/\n\s*$/.test(v.value)&&i&&"JSXElement"===i.type){const r=v.value.replace(/\n\s*$/,"");if(r.trim()){const o="Identifier"===i.opening?.name?.type?i.opening.name.value:void 0,a=o&&n.has(o),l=(i.children||[]).length>0,u=g(i),f=void 0!==u&&/^\s/.test(u),y=/\s\n/.test(v.value),d=e[t+2],S=d&&"JSXText"===d.type&&!s(d)&&/[a-zA-Z0-9]/.test(d.value),x=!!(i.opening&&Array.isArray(i.opening.attributes)&&i.opening.attributes.length>0),m=/^\s/.test(r)&&!/^\n/.test(r),h=r.trim(),J=m?" "+h:h,X=/[A-Za-z0-9]$/.test(h),E=d&&"string"==typeof d.value&&/^[A-Za-z0-9]/.test(d.value.trim()),$=d&&"string"==typeof d.value&&/^[a-z]/.test(d.value.trim()),b=d&&"string"==typeof d.value&&/^\s/.test(d.value)&&!/^\n/.test(d.value),A=x&&l&&S&&!(X&&E&&$&&!y&&!m&&!b),T=d&&"string"==typeof d.value&&/^[,;:!?.]/.test(d.value.trim()),I=A&&!T;X&&E&&$&&!y&&!m&&!b&&c.add(i),p+=y||a&&l&&!f||!a&&S&&m||I?J+" ":J;continue}}p+=v.value;continue}if("JSXExpressionContainer"===v.type){const e=v.expression;if(!e)continue;const t=i(e);if(void 0!==t)p+=t;else if("Identifier"===e.type)p+=`{{${e.value}}}`;else if("TsAsExpression"===e.type&&"ObjectExpression"===e.expression?.type){const t=e.expression,n=t.properties.filter(e=>"KeyValueProperty"===e.type&&e.key&&"Identifier"===e.key.type).map(e=>e.key.value);if(n.length>0)p+=n.map(e=>`{{${e}}}`).join("");else{const e=t.properties[0];e&&"Identifier"===e.type?p+=`{{${e.value}}}`:p+=""}}else if("ObjectExpression"===e.type){const t=e.properties[0];t&&"KeyValueProperty"===t.type&&t.key&&"Identifier"===t.key.type?p+=`{{${t.key.value}}}`:t&&"Identifier"===t.type?p+=`{{${t.value}}}`:p+=""}else if("MemberExpression"===e.type&&e.property&&"Identifier"===e.property.type)p+=`{{${e.property.value}}}`;else if("CallExpression"===e.type&&"Identifier"===e.callee?.type)p+=`{{${e.callee.value}}}`;else if("ConditionalExpression"===e.type){const t=r(e.consequent),n=r(e.alternate);if(void 0!==t&&void 0!==n){const e=t.trim(),i=n.trim(),r=i.startsWith(e),s=e.startsWith(i);r&&i.length>e.length?p+=i:s&&e.length>i.length?p+=e:p+=t}else p+=void 0!==t?t:void 0!==n?n:""}else"JSXEmptyExpression"===e.type||(p+="");continue}if("JSXElement"===v.type){const r=o?y(v):void 0;let s;if(v.opening&&v.opening.name&&"Identifier"===v.opening.name.type&&(s=v.opening.name.value),s&&n.has(s)){const c=v.opening&&Array.isArray(v.opening.attributes)&&v.opening.attributes.length>0,y=v.children||[],g=y.length>0,S=1===y.length&&("JSXText"===y[0]?.type||"JSXExpressionContainer"===y[0]?.type&&void 0!==i(y[0].expression)),x="p"===s;let m=0;if(x&&o&&(m=e.filter(e=>e&&"JSXElement"===e.type&&"p"===e.opening?.name?.value).length),!g||S){const i=S?d(y,void 0):"";if(""!==String(i).trim())if(n.has(s)&&"p"!==s)p+=`<${s}>${f(i)}</${s}>`;else if(x&&o&&m>1)p+=`<${s}>${f(i)}</${s}>`;else if(x){const e=o&&void 0!==r?r:l.indexOf(v);p+=`<${e}>${f(i)}</${e}>`}else{const e=o&&void 0!==r?r:l.indexOf(v);p+=`<${e}>${f(i)}</${e}>`}else{const n=e[t-1];n&&"JSXText"===n.type&&/\n\s*$/.test(n.value)&&(p=p.replace(/\s+$/,"")),p+=`<${s} />`}}else if(c&&!S){const e=o&&void 0!==r?r:a(v),t=u(y),n=d(y,t.size?t:void 0);p+=`<${e}>${f(n)}</${e}>`}else{const e=l.indexOf(v);if(-1!==e){const t=void 0!==r?r:e,n=u(y),i=d(y,n.size?n:void 0,!1);p+=`<${t}>${f(i)}</${t}>`}else{const e=d(y,void 0,!1);p+=`<${s}>${f(e)}</${s}>`}}}else{const e=v.children||[],t=a(v),n=u(e),i=d(e,n.size?n:void 0);p+=`<${t}>${f(i)}</${t}>`}continue}"JSXFragment"!==v.type||(p+=d(v.children||[]))}}return p}const v=d(e,void 0,!0),S=String(v).replace(/<br \/>\s*\n\s*/g,"<br />"),x=String(S),m=new Set;if(c&&c.size>0)for(let e=0;e<l.length;e++)c.has(l[e])&&m.add(e);let h=String(x);if(m&&m.size>0)for(const e of m)try{h=h.replace(new RegExp("\\s+<"+e+">","g"),"<"+e+">"),h=h.replace(new RegExp("<\\/"+e+">\\s+","g"),"</"+e+">")}catch(e){}h=h.replace(/<\/(\d+)>\s*\n\s*(\S)/g,(e,t,n)=>{const i=Number(t);return m.has(i)?`</${t}>${n}`:`</${t}> ${n}`}),h=h.replace(/(\S)\s*\n\s*<(\d+)/g,(e,t,n)=>{const i=Number(n);return m.has(i)?`${t}<${n}`:`${t} <${n}`}),h=h.replace(/\s*\n\s*/g," "),h=h.replace(/\s+/g," "),h=h.replace(/\(\s+(\{\{)/g,"($1"),h=h.replace(/(\}\})\s+\)/g,"$1)"),h=h.replace(/\s+([,;:!?.])/g,"$1");const J=h.trim();let X=String(J);if(m&&m.size>0)for(const e of m)try{X=X.replace(new RegExp("[\\s\\u00A0]+<"+e+">","g"),"<"+e+">"),X=X.replace(new RegExp("<\\/"+e+">[\\s\\u00A0]+","g"),"</"+e+">")}catch(e){}try{for(let e=0;e<l.length;e++){const t=l[e];if(!t||"JSXElement"!==t.type)continue;const n=l[e-1],i=l[e+1];if(!n||!i)continue;if("JSXText"!==n.type||"JSXText"!==i.type)continue;const r=String(n.value),s=String(i.value),o=r.replace(/\n\s*$/,""),p=/[A-Za-z0-9]$/.test(o),a=/^[A-Za-z0-9]/.test(s.trim()),u=/^[a-z]/.test(s.trim()),c=/\s\n/.test(r),f=s&&/^\s/.test(s)&&!/^\n/.test(s);if(p&&a&&u&&!c&&!f){const t=e;X=X.replace(new RegExp("\\s+<"+t+">","g"),"<"+t+">")}}}catch(e){}return X.trim()}(n.children,o);let X;const E="JSXAttribute"===a?.type?s(a):void 0;if(void 0!==E)X=E;else{const e=o.extract.defaultValue;X="string"==typeof e?e:""}let $,b;if("JSXAttribute"===p?.type){if("StringLiteral"===p.value?.type){if($=p.value,b=$.value,!b||""===b.trim())return null;if(h&&"StringLiteral"===$.type){const e=o.extract.nsSeparator??":",t=$.value;if(e&&t.startsWith(`${h}${e}`)){if(b=t.slice(`${h}${e}`.length),!b||""===b.trim())return null;$={...$,value:b}}}}else"JSXExpressionContainer"===p.value?.type&&"JSXEmptyExpression"!==p.value.expression.type&&($=p.value.expression);if(!$)return null}a||!b||J.trim()?!a&&J.trim()&&(X=J):X=b;return{keyExpression:$,serializedChildren:J,ns:h,defaultValue:X,hasCount:f,isOrdinal:v,contextExpression:x,optionsNode:g,explicitDefault:void 0!==E||(e=>{if(!e||!Array.isArray(e.properties))return!1;for(const t of e.properties)if(t&&"KeyValueProperty"===t.type&&t.key){const e="Identifier"===t.key.type&&t.key.value||"StringLiteral"===t.key.type&&t.key.value;if("string"==typeof e&&e.startsWith("defaultValue"))return!0}return!1})(g)}}export{o as extractFromTransComponent};
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsx-parser.d.ts","sourceRoot":"","sources":["../../../src/extractor/parsers/jsx-parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAgB,UAAU,EAAiB,gBAAgB,EAAE,MAAM,WAAW,CAAA;AACtG,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAGvD,MAAM,WAAW,sBAAsB;IACrC,gDAAgD;IAChD,aAAa,CAAC,EAAE,UAAU,CAAC;IAE3B,qDAAqD;IACrD,kBAAkB,EAAE,MAAM,CAAC;IAE3B,mDAAmD;IACnD,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,8DAA8D;IAC9D,EAAE,CAAC,EAAE,MAAM,CAAC;IAEZ,oEAAoE;IACpE,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,0DAA0D;IAC1D,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,8EAA8E;IAC9E,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAE/B,mDAAmD;IACnD,iBAAiB,CAAC,EAAE,UAAU,CAAC;IAE/B,kHAAkH;IAClH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;
|
|
1
|
+
{"version":3,"file":"jsx-parser.d.ts","sourceRoot":"","sources":["../../../src/extractor/parsers/jsx-parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAgB,UAAU,EAAiB,gBAAgB,EAAE,MAAM,WAAW,CAAA;AACtG,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAGvD,MAAM,WAAW,sBAAsB;IACrC,gDAAgD;IAChD,aAAa,CAAC,EAAE,UAAU,CAAC;IAE3B,qDAAqD;IACrD,kBAAkB,EAAE,MAAM,CAAC;IAE3B,mDAAmD;IACnD,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,8DAA8D;IAC9D,EAAE,CAAC,EAAE,MAAM,CAAC;IAEZ,oEAAoE;IACpE,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,0DAA0D;IAC1D,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,8EAA8E;IAC9E,WAAW,CAAC,EAAE,gBAAgB,CAAC;IAE/B,mDAAmD;IACnD,iBAAiB,CAAC,EAAE,UAAU,CAAC;IAE/B,kHAAkH;IAClH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAyGD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,yBAAyB,CAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,oBAAoB,GAAG,sBAAsB,GAAG,IAAI,CA2LxH"}
|