@scoutello/i18n-magic
Version:
Intelligent CLI toolkit that automates internationalization workflows for JavaScript/TypeScript projects and auto-translates new string keys to other languages
93 lines ⢠3.41 kB
JavaScript
import prompts from "prompts";
import { loadLocalesFile, writeLocalesFile } from "../lib/utils.js";
export const removeKey = async (config, key) => {
const { namespaces, locales, loadPath, savePath } = config;
if (!key) {
const response = await prompts({
type: "text",
name: "key",
message: "Enter the translation key to remove:",
validate: (value) => (value ? true : "Key cannot be empty"),
onState: (state) => {
if (state.aborted) {
process.nextTick(() => {
process.exit(0);
});
}
},
});
key = response.key;
}
if (!key) {
console.log("\nā Operation cancelled. No key was provided.");
return;
}
console.log(`\nš Searching for key "${key}" across all namespaces and locales...`);
const foundIn = [];
for (const namespace of namespaces) {
for (const locale of locales) {
try {
const existingKeys = await loadLocalesFile(loadPath, locale, namespace, {
silent: true,
});
if (Object.hasOwn(existingKeys, key)) {
foundIn.push({ namespace, locale });
}
}
catch {
// Skip if file doesn't exist or can't be read
}
}
}
if (foundIn.length === 0) {
console.log(`\nā Key "${key}" not found in any namespace or locale.`);
return;
}
console.log(`\nā ļø Key "${key}" found in ${foundIn.length} location(s):\n`);
const maxToShow = 20;
const itemsToShow = foundIn.slice(0, maxToShow);
for (const { namespace, locale } of itemsToShow) {
console.log(` ⢠${locale}:${namespace}`);
}
if (foundIn.length > maxToShow) {
console.log(` ... and ${foundIn.length - maxToShow} more`);
}
console.log("");
const { confirmed } = await prompts({
type: "confirm",
name: "confirmed",
message: `Do you want to remove "${key}" from ${foundIn.length} location(s)?`,
initial: false,
onState: (state) => {
if (state.aborted) {
process.nextTick(() => {
process.exit(0);
});
}
},
});
if (!confirmed) {
console.log("\nā Operation cancelled. No keys were removed.");
return;
}
console.log(`\nšļø Removing key "${key}"...`);
let removedCount = 0;
for (const { namespace, locale } of foundIn) {
try {
const existingKeys = await loadLocalesFile(loadPath, locale, namespace, {
silent: true,
});
if (Object.hasOwn(existingKeys, key)) {
delete existingKeys[key];
await writeLocalesFile(savePath, locale, namespace, existingKeys);
removedCount++;
console.log(` ā Removed from ${locale}:${namespace}`);
}
}
catch (error) {
console.error(` ā Failed to remove from ${locale}:${namespace}: ${error instanceof Error ? error.message : String(error)}`);
}
}
console.log(`\nā
Successfully removed key "${key}" from ${removedCount} location(s)`);
};
//# sourceMappingURL=remove-key.js.map