lingo.dev 0.99.1 → 0.99.2

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/build/cli.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli/index.ts","../src/cli/cmd/auth.ts","../src/cli/utils/settings.ts","../src/cli/utils/errors.ts","../src/cli/utils/cloudflare-status.ts","../src/cli/utils/auth.ts","../src/cli/cmd/login.ts","../src/cli/utils/ui.ts","../src/cli/constants.ts","../src/cli/cmd/logout.ts","../src/cli/cmd/init.ts","../src/cli/utils/config.ts","../src/cli/utils/find-locale-paths.ts","../src/cli/utils/ensure-patterns.ts","../src/cli/utils/update-gitignore.ts","../src/cli/utils/init-ci-cd.ts","../src/cli/cmd/show/index.ts","../src/cli/cmd/show/config.ts","../src/cli/cmd/show/locale.ts","../src/cli/cmd/show/files.ts","../src/cli/utils/buckets.ts","../src/cli/cmd/config/index.ts","../src/cli/cmd/config/set.ts","../src/cli/cmd/config/unset.ts","../src/cli/cmd/config/get.ts","../src/cli/cmd/i18n.ts","../src/cli/loaders/_utils.ts","../src/cli/loaders/json.ts","../src/cli/loaders/flat.ts","../src/cli/loaders/text-file.ts","../src/cli/loaders/yaml.ts","../src/cli/loaders/root-key.ts","../src/cli/loaders/flutter.ts","../src/cli/loaders/android.ts","../src/cli/loaders/csv.ts","../src/cli/loaders/html.ts","../src/cli/loaders/markdown.ts","../src/cli/loaders/properties.ts","../src/cli/loaders/xcode-strings.ts","../src/cli/loaders/xcode-stringsdict.ts","../src/cli/loaders/xcode-xcstrings.ts","../src/cli/loaders/prettier.ts","../src/cli/loaders/unlocalizable.ts","../src/cli/loaders/po/index.ts","../src/cli/loaders/xliff.ts","../src/cli/loaders/xml.ts","../src/cli/loaders/srt.ts","../src/cli/loaders/dato/index.ts","../src/cli/loaders/dato/_base.ts","../src/cli/loaders/dato/filter.ts","../src/cli/loaders/dato/api.ts","../src/cli/loaders/dato/_utils.ts","../src/cli/loaders/dato/extract.ts","../src/cli/loaders/vtt.ts","../src/cli/loaders/variable/index.ts","../src/cli/loaders/sync.ts","../src/cli/utils/plutil-formatter.ts","../src/cli/loaders/plutil-json-loader.ts","../src/cli/loaders/php.ts","../src/cli/loaders/vue-json.ts","../src/cli/loaders/typescript/index.ts","../src/cli/loaders/typescript/cjs-interop.ts","../src/cli/loaders/inject-locale.ts","../src/cli/loaders/locked-keys.ts","../src/cli/loaders/mdx2/frontmatter-split.ts","../src/cli/utils/md5.ts","../src/cli/loaders/mdx2/code-placeholder.ts","../src/cli/loaders/mdx2/localizable-document.ts","../src/cli/loaders/mdx2/sections-split-2.ts","../src/cli/loaders/mdx2/locked-patterns.ts","../src/cli/loaders/ignored-keys.ts","../src/cli/loaders/index.ts","../src/cli/processor/index.ts","../src/cli/processor/lingo.ts","../src/cli/processor/basic.ts","../src/cli/utils/exp-backoff.ts","../src/cli/utils/observability.ts","../src/cli/utils/delta.ts","../src/cli/utils/fs.ts","../src/cli/cmd/lockfile.ts","../src/cli/utils/lockfile.ts","../src/cli/cmd/cleanup.ts","../src/cli/cmd/mcp.ts","../src/cli/cmd/ci/index.ts","../src/cli/cmd/ci/flows/pull-request.ts","../src/cli/cmd/ci/flows/in-branch.ts","../src/cli/cmd/ci/flows/_base.ts","../src/cli/cmd/run/index.ts","../src/cli/cmd/run/setup.ts","../src/cli/cmd/run/_const.ts","../src/cli/localizer/lingodotdev.ts","../src/cli/localizer/explicit.ts","../src/cli/localizer/index.ts","../src/cli/cmd/run/plan.ts","../src/cli/cmd/run/execute.ts","../src/cli/cmd/run/_types.ts","../src/cli/cmd/run/_utils.ts","../src/cli/cmd/ci/platforms/bitbucket.ts","../src/cli/cmd/ci/platforms/_base.ts","../src/cli/cmd/ci/platforms/github.ts","../src/cli/cmd/ci/platforms/gitlab.ts","../src/cli/cmd/ci/platforms/index.ts","../src/cli/cmd/status.ts","../src/cli/cmd/may-the-fourth.ts","../package.json"],"sourcesContent":["import dotenv from \"dotenv\";\ndotenv.config();\n\nimport { InteractiveCommand } from \"interactive-commander\";\nimport figlet from \"figlet\";\nimport { vice } from \"gradient-string\";\nimport chalk from \"chalk\";\n\nimport authCmd from \"./cmd/auth\";\nimport loginCmd from \"./cmd/login\";\nimport logoutCmd from \"./cmd/logout\";\nimport initCmd from \"./cmd/init\";\nimport showCmd from \"./cmd/show\";\nimport configCmd from \"./cmd/config\";\nimport i18nCmd from \"./cmd/i18n\";\nimport lockfileCmd from \"./cmd/lockfile\";\nimport cleanupCmd from \"./cmd/cleanup\";\nimport mcpCmd from \"./cmd/mcp\";\nimport ciCmd from \"./cmd/ci\";\nimport statusCmd from \"./cmd/status\";\nimport mayTheFourthCmd from \"./cmd/may-the-fourth\";\n\nimport packageJson from \"../../package.json\";\nimport run from \"./cmd/run\";\n\nexport default new InteractiveCommand()\n .name(\"lingo.dev\")\n .description(\"Lingo.dev CLI\")\n .helpOption(\"-h, --help\", \"Show help\")\n .addHelpText(\n \"beforeAll\",\n `\n${vice(\n figlet.textSync(\"LINGO.DEV\", {\n font: \"ANSI Shadow\",\n horizontalLayout: \"default\",\n verticalLayout: \"default\",\n }),\n)}\n\n⚡️ AI-powered open-source CLI for web & mobile localization.\n\nStar the the repo :) https://github.com/LingoDotDev/lingo.dev\n`,\n )\n .version(`v${packageJson.version}`, \"-v, --version\", \"Show version\")\n .addCommand(initCmd)\n .interactive(\"-y, --no-interactive\", \"Disable interactive mode\") // all interactive commands above\n .addCommand(i18nCmd)\n .addCommand(authCmd)\n .addCommand(loginCmd)\n .addCommand(logoutCmd)\n .addCommand(showCmd)\n .addCommand(configCmd)\n .addCommand(lockfileCmd)\n .addCommand(cleanupCmd)\n .addCommand(mcpCmd)\n .addCommand(ciCmd)\n .addCommand(statusCmd)\n .addCommand(mayTheFourthCmd, { hidden: true })\n .addCommand(run, { hidden: true })\n .exitOverride((err) => {\n // Exit with code 0 when help or version is displayed\n if (\n err.code === \"commander.helpDisplayed\" ||\n err.code === \"commander.version\" ||\n err.code === \"commander.help\"\n ) {\n process.exit(0);\n }\n process.exit(1);\n });\n","import { Command } from \"interactive-commander\";\nimport Ora from \"ora\";\nimport { getSettings, saveSettings } from \"../utils/settings\";\nimport { createAuthenticator } from \"../utils/auth\";\n\nexport default new Command()\n .command(\"auth\")\n .description(\"Show current authentication status\")\n .helpOption(\"-h, --help\", \"Show help\")\n // Deprecated options, safe to remove after September 2025\n .option(\n \"--login\",\n \"Login to your account (deprecated: use 'lingo.dev login' instead)\",\n )\n .option(\n \"--logout\",\n \"Logout from your account (deprecated: use 'lingo.dev logout' instead)\",\n )\n .action(async (options) => {\n try {\n // Handle deprecated login option\n if (options.login) {\n Ora().warn(\n \"⚠️ DEPRECATED: '--login' is deprecated. Please use 'lingo.dev login' instead.\",\n );\n process.exit(1);\n }\n\n // Handle deprecated logout option\n if (options.logout) {\n Ora().warn(\n \"⚠️ DEPRECATED: '--logout' is deprecated. Please use 'lingo.dev logout' instead.\",\n );\n process.exit(1);\n }\n\n // Default behavior: show authentication status\n const settings = await getSettings(undefined);\n const authenticator = createAuthenticator({\n apiUrl: settings.auth.apiUrl,\n apiKey: settings.auth.apiKey!,\n });\n const auth = await authenticator.whoami();\n if (!auth) {\n Ora().warn(\"Not authenticated\");\n } else {\n Ora().succeed(`Authenticated as ${auth.email}`);\n }\n } catch (error: any) {\n Ora().fail(error.message);\n process.exit(1);\n }\n });\n","import os from \"os\";\nimport path from \"path\";\nimport _ from \"lodash\";\nimport Z from \"zod\";\nimport fs from \"fs\";\nimport Ini from \"ini\";\n\nexport type CliSettings = Z.infer<typeof SettingsSchema>;\n\nexport function getSettings(explicitApiKey: string | undefined): CliSettings {\n const env = _loadEnv();\n const systemFile = _loadSystemFile();\n const defaults = _loadDefaults();\n\n _legacyEnvVarWarning();\n\n _envVarsInfo();\n\n return {\n auth: {\n apiKey:\n explicitApiKey ||\n env.LINGODOTDEV_API_KEY ||\n systemFile.auth?.apiKey ||\n defaults.auth.apiKey,\n apiUrl:\n env.LINGODOTDEV_API_URL ||\n systemFile.auth?.apiUrl ||\n defaults.auth.apiUrl,\n webUrl:\n env.LINGODOTDEV_WEB_URL ||\n systemFile.auth?.webUrl ||\n defaults.auth.webUrl,\n },\n llm: {\n openaiApiKey: env.OPENAI_API_KEY || systemFile.llm?.openaiApiKey,\n anthropicApiKey: env.ANTHROPIC_API_KEY || systemFile.llm?.anthropicApiKey,\n groqApiKey: env.GROQ_API_KEY || systemFile.llm?.groqApiKey,\n googleApiKey: env.GOOGLE_API_KEY || systemFile.llm?.googleApiKey,\n openrouterApiKey:env.OPENROUTER_API_KEY || systemFile.llm?.openrouterApiKey,\n },\n };\n}\n\nexport function saveSettings(settings: CliSettings): void {\n _saveSystemFile(settings);\n}\n\nexport function loadSystemSettings() {\n return _loadSystemFile();\n}\n\nconst flattenZodObject = (schema: Z.ZodObject<any>, prefix = \"\"): string[] => {\n return Object.entries(schema.shape).flatMap(([key, value]) => {\n const newPrefix = prefix ? `${prefix}.${key}` : key;\n if (value instanceof Z.ZodObject) {\n return flattenZodObject(value, newPrefix);\n }\n return [newPrefix];\n });\n};\n\nconst SettingsSchema = Z.object({\n auth: Z.object({\n apiKey: Z.string(),\n apiUrl: Z.string(),\n webUrl: Z.string(),\n }),\n llm: Z.object({\n openaiApiKey: Z.string().optional(),\n anthropicApiKey: Z.string().optional(),\n groqApiKey: Z.string().optional(),\n googleApiKey: Z.string().optional(),\n openrouterApiKey: Z.string().optional(),\n }),\n});\n\nexport const SETTINGS_KEYS = flattenZodObject(\n SettingsSchema,\n) as readonly string[];\n\n// Private\n\nfunction _loadDefaults(): CliSettings {\n return {\n auth: {\n apiKey: \"\",\n apiUrl: \"https://engine.lingo.dev\",\n webUrl: \"https://lingo.dev\",\n },\n llm: {},\n };\n}\n\nfunction _loadEnv() {\n return Z.object({\n LINGODOTDEV_API_KEY: Z.string().optional(),\n LINGODOTDEV_API_URL: Z.string().optional(),\n LINGODOTDEV_WEB_URL: Z.string().optional(),\n OPENAI_API_KEY: Z.string().optional(),\n ANTHROPIC_API_KEY: Z.string().optional(),\n GROQ_API_KEY: Z.string().optional(),\n GOOGLE_API_KEY: Z.string().optional(),\n OPENROUTER_API_KEY: Z.string().optional(),\n })\n .passthrough()\n .parse(process.env);\n}\n\nfunction _loadSystemFile() {\n const settingsFilePath = _getSettingsFilePath();\n const content = fs.existsSync(settingsFilePath)\n ? fs.readFileSync(settingsFilePath, \"utf-8\")\n : \"\";\n const data = Ini.parse(content);\n\n return Z.object({\n auth: Z.object({\n apiKey: Z.string().optional(),\n apiUrl: Z.string().optional(),\n webUrl: Z.string().optional(),\n }).optional(),\n llm: Z.object({\n openaiApiKey: Z.string().optional(),\n anthropicApiKey: Z.string().optional(),\n groqApiKey: Z.string().optional(),\n googleApiKey: Z.string().optional(),\n openrouterApiKey: Z.string().optional(),\n }).optional(),\n })\n .passthrough()\n .parse(data);\n}\n\nfunction _saveSystemFile(settings: CliSettings) {\n const settingsFilePath = _getSettingsFilePath();\n const content = Ini.stringify(settings);\n fs.writeFileSync(settingsFilePath, content);\n}\n\nfunction _getSettingsFilePath(): string {\n const settingsFile = \".lingodotdevrc\";\n const homedir = os.homedir();\n const settingsFilePath = path.join(homedir, settingsFile);\n return settingsFilePath;\n}\n\nfunction _legacyEnvVarWarning() {\n const env = _loadEnv();\n\n if (env.REPLEXICA_API_KEY && !env.LINGODOTDEV_API_KEY) {\n console.warn(\n \"\\x1b[33m%s\\x1b[0m\",\n `\n⚠️ WARNING: REPLEXICA_API_KEY env var is deprecated ⚠️\n===========================================================\n\nPlease use LINGODOTDEV_API_KEY instead.\n===========================================================\n`,\n );\n }\n}\n\nfunction _envVarsInfo() {\n const env = _loadEnv();\n const systemFile = _loadSystemFile();\n\n if (env.LINGODOTDEV_API_KEY && systemFile.auth?.apiKey) {\n console.info(\n \"\\x1b[36m%s\\x1b[0m\",\n `ℹ️ Using LINGODOTDEV_API_KEY env var instead of credentials from user config`,\n );\n }\n if (env.OPENAI_API_KEY && systemFile.llm?.openaiApiKey) {\n console.info(\n \"\\x1b[36m%s\\x1b[0m\",\n `ℹ️ Using OPENAI_API_KEY env var instead of key from user config.`,\n );\n }\n if (env.ANTHROPIC_API_KEY && systemFile.llm?.anthropicApiKey) {\n console.info(\n \"\\x1b[36m%s\\x1b[0m\",\n `ℹ️ Using ANTHROPIC_API_KEY env var instead of key from user config`,\n );\n }\n if (env.GROQ_API_KEY && systemFile.llm?.groqApiKey) {\n console.info(\n \"\\x1b[36m%s\\x1b[0m\",\n `ℹ️ Using GROQ_API_KEY env var instead of key from user config`,\n );\n }\n if (env.GOOGLE_API_KEY && systemFile.llm?.googleApiKey) {\n console.info(\n \"\\x1b[36m%s\\x1b[0m\",\n `ℹ️ Using GOOGLE_API_KEY env var instead of key from user config`,\n );\n }\n if (env.OPENROUTER_API_KEY && systemFile.llm?.openrouterApiKey) {\n console.info(\n \"\\x1b[36m%s\\x1b[0m\",\n `ℹ️ Using OPENROUTER_API_KEY env var instead of key from user config`,\n );\n }\n if (env.LINGODOTDEV_API_URL) {\n console.info(\n \"\\x1b[36m%s\\x1b[0m\",\n `ℹ️ Using LINGODOTDEV_API_URL: ${env.LINGODOTDEV_API_URL}`,\n );\n }\n if (env.LINGODOTDEV_WEB_URL) {\n console.info(\n \"\\x1b[36m%s\\x1b[0m\",\n `ℹ️ Using LINGODOTDEV_WEB_URL: ${env.LINGODOTDEV_WEB_URL}`,\n );\n }\n}\n","export const docLinks = {\n i18nNotFound: \"https://docs.lingo.dev/quickstart#initialization\",\n bucketNotFound: \"https://docs.lingo.dev/config#buckets\",\n authError: \"https://docs.lingo.dev/auth\",\n localeTargetNotFound: \"https://docs.lingo.dev/config#locale\",\n lockFiletNotFound: \"https://docs.lingo.dev/config#i18n-lock\",\n failedReplexicaEngine: \"https://docs.lingo.dev/\",\n placeHolderFailed: \"https://docs.lingo.dev/formats/json\",\n translationFailed: \"https://docs.lingo.dev/setup/cli#core-command-i18n\",\n connectionFailed: \"https://docs.lingo.dev/\",\n invalidType: \"https://docs.lingo.dev/setup/cli#configuration-commands\",\n invalidPathPattern: \"https://docs.lingo.dev/config#buckets\",\n androidResouceError: \"https://docs.lingo.dev/formats/android\",\n invalidBucketType: \"https://docs.lingo.dev/config#buckets\",\n invalidStringDict: \"https://docs.lingo.dev/formats/xcode-stringsdict\",\n};\n\ntype DocLinkKeys = keyof typeof docLinks;\n\nexport class CLIError extends Error {\n public readonly docUrl: string;\n\n constructor({ message, docUrl }: { message: string; docUrl: DocLinkKeys }) {\n super(message);\n this.docUrl = docLinks[docUrl];\n this.message = `${this.message}\\n visit: ${this.docUrl}`;\n }\n}\n","export interface CloudflareStatusResponse {\n status: {\n indicator: 'none' | 'minor' | 'major' | 'critical';\n description: string;\n };\n}\n\nexport async function checkCloudflareStatus(): Promise<CloudflareStatusResponse | null> {\n try {\n const response = await fetch('https://www.cloudflarestatus.com/api/v2/status.json', {\n signal: AbortSignal.timeout(5000),\n });\n if (response.ok) {\n return await response.json();\n }\n } catch (error) {\n }\n return null;\n}\n\nexport function formatCloudflareStatusMessage(status: CloudflareStatusResponse): string {\n if (status.status.indicator === 'none') {\n return '';\n }\n return `Cloudflare is experiencing ${status.status.indicator} issues: ${status.status.description}. This may be affecting the API connection.`;\n}\n","import { CLIError } from \"./errors\";\nimport { checkCloudflareStatus, formatCloudflareStatusMessage } from \"./cloudflare-status\";\n\nexport type AuthenticatorParams = {\n apiUrl: string;\n apiKey: string;\n};\n\nexport type AuthPayload = {\n email: string;\n id: string;\n};\n\nexport function createAuthenticator(params: AuthenticatorParams) {\n return {\n async whoami(): Promise<AuthPayload | null> {\n try {\n const res = await fetch(`${params.apiUrl}/whoami`, {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${params.apiKey}`,\n ContentType: \"application/json\",\n },\n });\n\n if (res.ok) {\n const payload = await res.json();\n if (!payload?.email) {\n return null;\n }\n\n return {\n email: payload.email,\n id: payload.id,\n };\n }\n\n if (res.status >= 500 && res.status < 600) {\n const originalErrorMessage = `Server error (${res.status}): ${res.statusText}. Please try again later.`;\n \n const cloudflareStatus = await checkCloudflareStatus();\n \n if (!cloudflareStatus) {\n throw new CLIError({\n message: originalErrorMessage,\n docUrl: \"connectionFailed\",\n });\n }\n \n if (cloudflareStatus.status.indicator !== 'none') {\n const cloudflareMessage = formatCloudflareStatusMessage(cloudflareStatus);\n throw new CLIError({\n message: cloudflareMessage,\n docUrl: \"connectionFailed\",\n });\n }\n \n throw new CLIError({\n message: originalErrorMessage,\n docUrl: \"connectionFailed\",\n });\n }\n\n return null;\n } catch (error) {\n if (error instanceof CLIError) {\n throw error;\n }\n\n const isNetworkError =\n error instanceof TypeError && error.message === \"fetch failed\";\n if (isNetworkError) {\n throw new CLIError({\n message: `Failed to connect to the API at ${params.apiUrl}. Please check your connection and try again.`,\n docUrl: \"connectionFailed\",\n });\n } else {\n throw error;\n }\n }\n },\n };\n}\n","import { Command } from \"interactive-commander\";\nimport Ora from \"ora\";\nimport express from \"express\";\nimport cors from \"cors\";\nimport open from \"open\";\nimport readline from \"readline/promises\";\nimport { getSettings, saveSettings } from \"../utils/settings\";\nimport {\n renderClear,\n renderSpacer,\n renderBanner,\n renderHero,\n} from \"../utils/ui\";\n\nexport default new Command()\n .command(\"login\")\n .description(\"Authenticate with Lingo.dev API\")\n .helpOption(\"-h, --help\", \"Show help\")\n .action(async () => {\n try {\n await renderClear();\n await renderSpacer();\n await renderBanner();\n await renderHero();\n await renderSpacer();\n\n const settings = await getSettings(undefined);\n const apiKey = await login(settings.auth.webUrl);\n settings.auth.apiKey = apiKey;\n await saveSettings(settings);\n Ora().succeed(\"Successfully logged in\");\n } catch (error: any) {\n Ora().fail(error.message);\n process.exit(1);\n }\n });\n\nexport async function login(webAppUrl: string) {\n await readline\n .createInterface({\n input: process.stdin,\n output: process.stdout,\n })\n .question(\n `\nPress Enter to open the browser for authentication.\n\n---\n\nHaving issues? Put LINGODOTDEV_API_KEY in your .env file instead.\n `.trim() + \"\\n\",\n );\n\n const spinner = Ora().start(\"Waiting for the API key\");\n const apiKey = await waitForApiKey(async (port) => {\n await open(`${webAppUrl}/app/cli?port=${port}`, { wait: false });\n });\n spinner.succeed(\"API key received\");\n\n return apiKey;\n}\n\nasync function waitForApiKey(cb: (port: string) => void): Promise<string> {\n const app = express();\n app.use(express.json());\n app.use(cors());\n\n return new Promise((resolve) => {\n const server = app.listen(0, async () => {\n const port = (server.address() as any).port;\n cb(port.toString());\n });\n\n app.post(\"/\", (req, res) => {\n const apiKey = req.body.apiKey;\n res.end();\n server.close(() => {\n resolve(apiKey);\n });\n });\n });\n}\n","import chalk from \"chalk\";\nimport figlet from \"figlet\";\nimport { vice } from \"gradient-string\";\nimport readline from \"readline\";\nimport { colors } from \"../constants\";\n\nexport async function renderClear() {\n console.log(\"\\x1Bc\");\n}\n\nexport async function renderSpacer() {\n console.log(\" \");\n}\n\nexport async function renderBanner() {\n console.log(\n vice(\n figlet.textSync(\"LINGO.DEV\", {\n font: \"ANSI Shadow\",\n horizontalLayout: \"default\",\n verticalLayout: \"default\",\n }),\n ),\n );\n}\n\nexport async function renderHero() {\n console.log(\n `⚡️ ${chalk.hex(colors.green)(\"Lingo.dev\")} - open-source, AI-powered i18n CLI for web & mobile localization.`,\n );\n console.log(\"\");\n\n const label1 = \"⭐ GitHub Repo:\";\n const label2 = \"📚 Docs:\";\n const label3 = \"💬 24/7 Support:\";\n const maxLabelWidth = 17; // Approximate visual width accounting for emoji\n\n console.log(\n `${chalk.hex(colors.blue)(label1.padEnd(maxLabelWidth))} ${chalk.hex(colors.blue)(\"https://lingo.dev/go/gh\")}`,\n );\n console.log(\n `${chalk.hex(colors.blue)(label2.padEnd(maxLabelWidth + 1))} ${chalk.hex(colors.blue)(\"https://lingo.dev/go/docs\")}`,\n ); // Docs emoji seems narrower\n console.log(\n `${chalk.hex(colors.blue)(label3.padEnd(maxLabelWidth + 1))} ${chalk.hex(colors.blue)(\"hi@lingo.dev\")}`,\n );\n}\n\nexport async function waitForUserPrompt(message: string): Promise<void> {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n return new Promise((resolve) => {\n rl.question(chalk.dim(`[${message}]\\n`), () => {\n rl.close();\n resolve();\n });\n });\n}\n\nexport async function pauseIfDebug(debug: boolean) {\n if (debug) {\n await waitForUserPrompt(\"Press Enter to continue...\");\n }\n}\n\nexport async function renderSummary(results: Map<any, any>) {\n console.log(chalk.hex(colors.green)(\"[Done]\"));\n\n const skippedTasksCount = Array.from(results.values()).filter(\n (r) => r.status === \"skipped\",\n ).length;\n console.log(`• ${chalk.hex(colors.yellow)(skippedTasksCount)} from cache`);\n\n const succeededTasksCount = Array.from(results.values()).filter(\n (r) => r.status === \"success\",\n ).length;\n console.log(`• ${chalk.hex(colors.yellow)(succeededTasksCount)} processed`);\n\n const failedTasksCount = Array.from(results.values()).filter(\n (r) => r.status === \"error\",\n ).length;\n console.log(`• ${chalk.hex(colors.yellow)(failedTasksCount)} failed`);\n}\n","export const colors = {\n orange: \"#ff6600\",\n green: \"#6ae300\",\n blue: \"#0090ff\",\n yellow: \"#ffcc00\",\n grey: \"#808080\",\n red: \"#ff0000\",\n};\n","import { Command } from \"interactive-commander\";\nimport Ora from \"ora\";\nimport { getSettings, saveSettings } from \"../utils/settings\";\nimport {\n renderClear,\n renderSpacer,\n renderBanner,\n renderHero,\n} from \"../utils/ui\";\n\nexport default new Command()\n .command(\"logout\")\n .description(\"Sign out from Lingo.dev API\")\n .helpOption(\"-h, --help\", \"Show help\")\n .action(async () => {\n try {\n await renderClear();\n await renderSpacer();\n await renderBanner();\n await renderHero();\n await renderSpacer();\n\n const settings = await getSettings(undefined);\n settings.auth.apiKey = \"\";\n await saveSettings(settings);\n Ora().succeed(\"Successfully logged out\");\n } catch (error: any) {\n Ora().fail(error.message);\n process.exit(1);\n }\n });\n","import { InteractiveCommand, InteractiveOption } from \"interactive-commander\";\nimport Ora from \"ora\";\nimport { getConfig, saveConfig } from \"../utils/config\";\nimport { defaultConfig, LocaleCode, resolveLocaleCode, bucketTypes } from \"@lingo.dev/_spec\";\nimport fs from \"fs\";\nimport path from \"path\";\nimport _ from \"lodash\";\nimport { checkbox, confirm, input } from \"@inquirer/prompts\";\nimport { login } from \"./login\";\nimport { getSettings, saveSettings } from \"../utils/settings\";\nimport { createAuthenticator } from \"../utils/auth\";\nimport findLocaleFiles from \"../utils/find-locale-paths\";\nimport { ensurePatterns } from \"../utils/ensure-patterns\";\nimport updateGitignore from \"../utils/update-gitignore\";\nimport initCICD from \"../utils/init-ci-cd\";\nimport open from \"open\";\n\nconst openUrl = (path: string) => {\n const settings = getSettings(undefined);\n open(`${settings.auth.webUrl}${path}`, { wait: false });\n};\n\nconst throwHelpError = (option: string, value: string) => {\n if (value === \"help\") {\n openUrl(\"/go/call\");\n }\n throw new Error(\n `Invalid ${option}: ${value}\\n\\nDo you need support for ${value} ${option}? Type \"help\" and we will.`,\n );\n};\n\nexport default new InteractiveCommand()\n .command(\"init\")\n .description(\"Initialize Lingo.dev project\")\n .helpOption(\"-h, --help\", \"Show help\")\n .addOption(new InteractiveOption(\"-f --force\", \"Overwrite existing config\").prompt(undefined).default(false))\n .addOption(\n new InteractiveOption(\"-s --source <locale>\", \"Source locale\")\n .argParser((value) => {\n try {\n resolveLocaleCode(value as LocaleCode);\n } catch (e) {\n throwHelpError(\"locale\", value);\n }\n return value;\n })\n .default(\"en\"),\n )\n .addOption(\n new InteractiveOption(\"-t --targets <locale...>\", \"List of target locales\")\n .argParser((value) => {\n const values = (value.includes(\",\") ? value.split(\",\") : value.split(\" \")) as LocaleCode[];\n values.forEach((value) => {\n try {\n resolveLocaleCode(value);\n } catch (e) {\n throwHelpError(\"locale\", value);\n }\n });\n return values;\n })\n .default(\"es\"),\n )\n .addOption(\n new InteractiveOption(\"-b, --bucket <type>\", \"Type of bucket\")\n .argParser((value) => {\n if (!bucketTypes.includes(value as (typeof bucketTypes)[number])) {\n throwHelpError(\"bucket format\", value);\n }\n return value;\n })\n .default(\"json\"),\n )\n .addOption(\n new InteractiveOption(\"-p, --paths [path...]\", \"List of paths for the bucket\")\n .argParser((value) => {\n if (!value || value.length === 0) return [];\n const values = value.includes(\",\") ? value.split(\",\") : value.split(\" \");\n\n for (const p of values) {\n try {\n const dirPath = path.dirname(p);\n const stats = fs.statSync(dirPath);\n if (!stats.isDirectory()) {\n throw new Error(`${dirPath} is not a directory`);\n }\n } catch (err) {\n throw new Error(`Invalid path: ${p}`);\n }\n }\n\n return values;\n })\n .prompt(undefined) // make non-interactive\n .default([]),\n )\n .action(async (options) => {\n const settings = getSettings(undefined);\n const isInteractive = options.interactive;\n\n const spinner = Ora().start(\"Initializing Lingo.dev project\");\n\n let existingConfig = await getConfig(false);\n if (existingConfig && !options.force) {\n spinner.fail(\"Lingo.dev project already initialized\");\n return process.exit(1);\n }\n\n const newConfig = _.cloneDeep(defaultConfig);\n\n newConfig.locale.source = options.source;\n newConfig.locale.targets = options.targets;\n\n if (!isInteractive) {\n newConfig.buckets = {\n [options.bucket]: {\n include: options.paths || [],\n },\n };\n } else {\n let selectedPatterns: string[] = [];\n const localeFiles = findLocaleFiles(options.bucket);\n\n if (!localeFiles) {\n spinner.warn(\n `Bucket type \"${options.bucket}\" does not supported automatic initialization. Add paths to \"i18n.json\" manually.`,\n );\n newConfig.buckets = {\n [options.bucket]: {\n include: options.paths || [],\n },\n };\n } else {\n const { patterns, defaultPatterns } = localeFiles;\n\n if (patterns.length > 0) {\n spinner.succeed(\"Found existing locale files:\");\n\n selectedPatterns = await checkbox({\n message: \"Select the paths to use\",\n choices: patterns.map((value) => ({\n value,\n })),\n });\n } else {\n spinner.succeed(\"No existing locale files found.\");\n }\n\n if (selectedPatterns.length === 0) {\n const useDefault = await confirm({\n message: `Use (and create) default path ${defaultPatterns.join(\", \")}?`,\n });\n if (useDefault) {\n ensurePatterns(defaultPatterns, options.source);\n selectedPatterns = defaultPatterns;\n }\n }\n\n if (selectedPatterns.length === 0) {\n const customPaths = await input({\n message: \"Enter paths to use\",\n });\n selectedPatterns = customPaths.includes(\",\") ? customPaths.split(\",\") : customPaths.split(\" \");\n }\n\n newConfig.buckets = {\n [options.bucket]: {\n include: selectedPatterns || [],\n },\n };\n }\n }\n\n await saveConfig(newConfig);\n\n spinner.succeed(\"Lingo.dev project initialized\");\n\n if (isInteractive) {\n await initCICD(spinner);\n\n const openDocs = await confirm({ message: \"Would you like to see our docs?\" });\n if (openDocs) {\n openUrl(\"/go/docs\");\n }\n }\n\n const authenticator = createAuthenticator({\n apiKey: settings.auth.apiKey,\n apiUrl: settings.auth.apiUrl,\n });\n const auth = await authenticator.whoami();\n if (!auth) {\n if (isInteractive) {\n const doAuth = await confirm({\n message: \"It looks like you are not logged into the CLI. Login now?\",\n });\n if (doAuth) {\n const apiKey = await login(settings.auth.webUrl);\n settings.auth.apiKey = apiKey;\n await saveSettings(settings);\n\n const newAuthenticator = createAuthenticator({\n apiKey: settings.auth.apiKey,\n apiUrl: settings.auth.apiUrl,\n });\n const auth = await newAuthenticator.whoami();\n if (auth) {\n Ora().succeed(`Authenticated as ${auth?.email}`);\n } else {\n Ora().fail(\"Authentication failed.\");\n }\n }\n } else {\n Ora().warn(\"You are not logged in. Run `npx lingo.dev@latest auth --login` to login.\");\n }\n } else {\n Ora().succeed(`Authenticated as ${auth.email}`);\n }\n\n updateGitignore();\n\n if (!isInteractive) {\n Ora().info(\"Please see https://docs.lingo.dev/\");\n }\n });\n","import _ from \"lodash\";\nimport fs from \"fs\";\nimport path from \"path\";\nimport { I18nConfig, parseI18nConfig } from \"@lingo.dev/_spec\";\n\nexport function getConfig(resave = true): I18nConfig | null {\n const configFilePath = _getConfigFilePath();\n\n const configFileExists = fs.existsSync(configFilePath);\n if (!configFileExists) {\n return null;\n }\n\n const fileContents = fs.readFileSync(configFilePath, \"utf8\");\n const rawConfig = JSON.parse(fileContents);\n\n const result = parseI18nConfig(rawConfig);\n const didConfigChange = !_.isEqual(rawConfig, result);\n\n if (resave && didConfigChange) {\n // Ensure the config is saved with the latest version / schema\n saveConfig(result);\n }\n\n return result;\n}\n\nexport function saveConfig(config: I18nConfig) {\n const configFilePath = _getConfigFilePath();\n\n const serialized = JSON.stringify(config, null, 2);\n fs.writeFileSync(configFilePath, serialized);\n\n return config;\n}\n\n// Private\n\nfunction _getConfigFilePath() {\n return path.join(process.cwd(), \"i18n.json\");\n}\n","import fs from \"fs\";\nimport path from \"path\";\nimport { glob } from \"glob\";\nimport _ from \"lodash\";\nimport { LocaleCode, resolveLocaleCode } from \"@lingo.dev/_spec\";\n\nexport default function findLocaleFiles(bucket: string) {\n switch (bucket) {\n case \"json\":\n return findLocaleFilesWithExtension(\".json\");\n case \"yaml\":\n return findLocaleFilesWithExtension(\".yml\");\n case \"flutter\":\n return findLocaleFilesWithExtension(\".arb\");\n case \"android\":\n return findLocaleFilesWithExtension(\".xml\");\n case \"markdown\":\n return findLocaleFilesWithExtension(\".md\");\n case \"php\":\n return findLocaleFilesWithExtension(\".php\");\n case \"po\":\n return findLocaleFilesWithExtension(\".po\");\n case \"xcode-xcstrings\":\n return findLocaleFilesForFilename(\"Localizable.xcstrings\");\n case \"xcode-strings\":\n return findLocaleFilesForFilename(\"Localizable.strings\");\n case \"xcode-stringsdict\":\n return findLocaleFilesForFilename(\"Localizable.stringsdict\");\n default:\n return null;\n }\n}\n\nfunction findLocaleFilesWithExtension(ext: string) {\n const files = glob.sync(`**/*${ext}`, {\n ignore: [\"node_modules/**\", \"package*.json\", \"i18n.json\", \"lingo.json\"],\n });\n\n const localeFilePattern = new RegExp(`\\/([a-z]{2}(-[A-Z]{2})?)${ext}$`);\n const localeDirectoryPattern = new RegExp(`\\/([a-z]{2}(-[A-Z]{2})?)\\/[^\\/]+${ext}$`);\n const potentialLocaleFiles = files.filter(\n (file: string) => localeFilePattern.test(file) || localeDirectoryPattern.test(file),\n );\n\n const potantialLocaleFilesAndPatterns = potentialLocaleFiles\n .map((file: string) => {\n const matchPotentialLocales = Array.from(\n file.matchAll(new RegExp(`\\/([a-z]{2}(-[A-Z]{2})?|[^\\/]+)(?=\\/|${ext})`, \"g\")),\n );\n const potantialLocales = matchPotentialLocales.map((match) => match[1]);\n return { file, potantialLocales };\n })\n .map(({ file, potantialLocales }) => {\n for (const locale of potantialLocales) {\n try {\n resolveLocaleCode(locale as LocaleCode);\n return { locale, file };\n } catch (e) {}\n }\n return { file, locale: null };\n })\n .filter(({ locale }) => locale !== null);\n\n const localeFilesAndPatterns = potantialLocaleFilesAndPatterns.map(({ file, locale }) => {\n const pattern = file\n .replaceAll(new RegExp(`/${locale}${ext}`, \"g\"), `/[locale]${ext}`)\n .replaceAll(new RegExp(`/${locale}/`, \"g\"), `/[locale]/`)\n .replaceAll(new RegExp(`/${locale}/`, \"g\"), `/[locale]/`); // for when there are 2 locales one after another\n return { pattern, file };\n });\n\n const grouppedFilesAndPatterns = _.groupBy(localeFilesAndPatterns, \"pattern\");\n const patterns = Object.keys(grouppedFilesAndPatterns);\n const defaultPatterns = [`i18n/[locale]${ext}`];\n\n if (patterns.length > 0) {\n return { patterns, defaultPatterns };\n }\n\n return { patterns: [], defaultPatterns };\n}\n\nfunction findLocaleFilesForFilename(fileName: string) {\n const pattern = fileName;\n const localeFiles = glob.sync(`**/${fileName}`, {\n ignore: [\"node_modules/**\", \"package*.json\", \"i18n.json\", \"lingo.json\"],\n });\n\n const localeFilesAndPatterns = localeFiles.map((file: string) => ({\n file,\n pattern: path.join(path.dirname(file), pattern),\n }));\n const grouppedFilesAndPatterns = _.groupBy(localeFilesAndPatterns, \"pattern\");\n const patterns = Object.keys(grouppedFilesAndPatterns);\n const defaultPatterns = [fileName];\n\n if (patterns.length > 0) {\n return { patterns, defaultPatterns };\n }\n\n return { patterns: [], defaultPatterns };\n}\n","import fs from \"fs\";\nimport path from \"path\";\nimport { glob } from \"glob\";\nimport _ from \"lodash\";\nimport { LocaleCode, resolveLocaleCode } from \"@lingo.dev/_spec\";\n\nexport function ensurePatterns(patterns: string[], source: string) {\n if (patterns.length === 0) {\n throw new Error(\"No patterns found\");\n }\n\n patterns.forEach((pattern) => {\n const filePath = pattern.replace(\"[locale]\", source);\n if (!fs.existsSync(filePath)) {\n const defaultContent = getDefaultContent(path.extname(filePath), source);\n fs.mkdirSync(path.dirname(filePath), { recursive: true });\n fs.writeFileSync(filePath, defaultContent);\n }\n });\n}\n\nfunction getDefaultContent(ext: string, source: string) {\n const defaultGreeting = \"Hello from Lingo.dev\";\n switch (ext) {\n case \".json\":\n case \".arb\":\n return `{\\n\\t\"greeting\": \"${defaultGreeting}\"\\n}`;\n case \".yml\":\n return `${source}:\\n\\tgreeting: \"${defaultGreeting}\"`;\n case \".xml\":\n return `<resources>\\n\\t<string name=\"greeting\">${defaultGreeting}</string>\\n</resources>`;\n case \".md\":\n return `# ${defaultGreeting}`;\n case \".xcstrings\":\n return `{\n \"sourceLanguage\" : \"${source}\",\n \"strings\" : {\n \"${defaultGreeting}\" : {\n \"extractionState\" : \"manual\",\n \"localizations\" : {\n \"${source}\" : {\n \"stringUnit\" : {\n \"state\" : \"translated\",\n \"value\" : \"${defaultGreeting}\"\n }\n }\n }\n }\n }\n}`;\n case \".strings\":\n return `\"greeting\" = \"${defaultGreeting}\";`;\n case \".stringsdict\":\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n <key>key</key>\n <dict>\n <key>NSStringLocalizedFormatKey</key>\n <string>%#@count@</string>\n <key>count</key>\n <dict>\n <key>NSStringFormatSpecTypeKey</key>\n <string>NSStringPluralRuleType</string>\n <key>NSStringFormatValueTypeKey</key>\n <string>d</string>\n <key>zero</key>\n <string>No items</string>\n <key>one</key>\n <string>One item</string>\n <key>other</key>\n <string>%d items</string>\n </dict>\n </dict>\n</dict>\n</plist>`;\n default:\n throw new Error(`Unsupported file extension: ${ext}`);\n }\n}\n","import fs from \"fs\";\nimport path from \"path\";\n\nexport default function updateGitignore() {\n const cacheFile = \"i18n.cache\";\n const projectRoot = findCurrentProjectRoot();\n if (!projectRoot) {\n return;\n }\n const gitignorePath = path.join(projectRoot, \".gitignore\");\n if (!fs.existsSync(gitignorePath)) {\n return;\n }\n\n const gitignore = fs.readFileSync(gitignorePath, \"utf8\").split(\"\\n\");\n const cacheIsIgnored = gitignore.includes(cacheFile);\n\n if (!cacheIsIgnored) {\n let content = \"\";\n\n // Ensure there's a trailing newline\n content = fs.readFileSync(gitignorePath, \"utf8\");\n if (content !== \"\" && !content.endsWith(\"\\n\")) {\n content += \"\\n\";\n }\n\n content += `${cacheFile}\\n`;\n fs.writeFileSync(gitignorePath, content);\n }\n}\n\nfunction findCurrentProjectRoot() {\n let currentDir = process.cwd();\n while (currentDir !== path.parse(currentDir).root) {\n const gitDirPath = path.join(currentDir, \".git\");\n if (fs.existsSync(gitDirPath) && fs.lstatSync(gitDirPath).isDirectory()) {\n return currentDir;\n }\n currentDir = path.dirname(currentDir);\n }\n return null;\n}\n","import { checkbox, confirm } from \"@inquirer/prompts\";\nimport fs from \"fs\";\nimport { Ora } from \"ora\";\nimport path from \"path\";\n\ntype Platform = \"github\" | \"bitbucket\" | \"gitlab\";\n\nconst platforms: Platform[] = [\"github\", \"bitbucket\", \"gitlab\"];\n\nexport default async function initCICD(spinner: Ora) {\n const initializers = getPlatformInitializers(spinner);\n\n const init = await confirm({\n message: \"Would you like to use Lingo.dev in your CI/CD?\",\n });\n\n if (!init) {\n spinner.warn(\"CI/CD not initialized. To set it up later, see docs: https://docs.lingo.dev/ci-action/overview\");\n return;\n }\n\n const selectedPlatforms: Platform[] = await checkbox({\n message: \"Please select CI/CD platform(s) you want to use:\",\n choices: platforms.map((platform) => ({\n name: initializers[platform].name,\n value: platform,\n checked: initializers[platform].isEnabled(),\n })),\n });\n\n for (const platform of selectedPlatforms) {\n await initializers[platform].init();\n }\n}\n\nfunction getPlatformInitializers(spinner: Ora) {\n return {\n github: makeGithubInitializer(spinner),\n bitbucket: makeBitbucketInitializer(spinner),\n gitlab: makeGitlabInitializer(spinner),\n };\n}\n\ntype PlatformConfig = {\n name: string;\n checkPath: string;\n ciConfigPath: string;\n ciConfigContent: string;\n};\n\nfunction makePlatformInitializer(config: PlatformConfig, spinner: Ora) {\n return {\n name: config.name,\n isEnabled: () => {\n const filePath = path.join(process.cwd(), config.checkPath);\n return fs.existsSync(filePath);\n },\n init: async () => {\n const filePath = path.join(process.cwd(), config.ciConfigPath);\n const dirPath = path.dirname(filePath);\n if (!fs.existsSync(dirPath)) {\n fs.mkdirSync(dirPath, { recursive: true });\n }\n let canWrite = true;\n if (fs.existsSync(filePath)) {\n canWrite = await confirm({\n message: `File ${filePath} already exists. Do you want to overwrite it?`,\n default: false,\n });\n }\n if (canWrite) {\n fs.writeFileSync(filePath, config.ciConfigContent);\n spinner.succeed(`CI/CD initialized for ${config.name}`);\n } else {\n spinner.warn(`CI/CD not initialized for ${config.name}`);\n }\n },\n };\n}\n\nfunction makeGithubInitializer(spinner: Ora) {\n return makePlatformInitializer(\n {\n name: \"GitHub Action\",\n checkPath: \".github\",\n ciConfigPath: \".github/workflows/i18n.yml\",\n ciConfigContent: `name: Lingo.dev i18n\n\non:\n push:\n branches:\n - main\n\npermissions:\n contents: write\n pull-requests: write\n\njobs:\n i18n:\n name: Run i18n\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n - uses: lingodotdev/lingo.dev@main\n with:\n api-key: \\${{ secrets.LINGODOTDEV_API_KEY }}\n`,\n },\n spinner,\n );\n}\n\nfunction makeBitbucketInitializer(spinner: Ora) {\n return makePlatformInitializer(\n {\n name: \"Bitbucket Pipeline\",\n checkPath: \"bitbucket-pipelines.yml\",\n ciConfigPath: \"bitbucket-pipelines.yml\",\n ciConfigContent: `pipelines:\n branches:\n main:\n - step:\n name: Run i18n\n script:\n - pipe: lingodotdev/lingo.dev:main`,\n },\n spinner,\n );\n}\n\nfunction makeGitlabInitializer(spinner: Ora) {\n return makePlatformInitializer(\n {\n name: \"Gitlab CI\",\n checkPath: \".gitlab-ci.yml\",\n ciConfigPath: \".gitlab-ci.yml\",\n ciConfigContent: `lingodotdev:\n image: lingodotdev/ci-action:latest\n script:\n - echo \"Done\"\n`,\n },\n spinner,\n );\n}\n","import { Command } from \"interactive-commander\";\nimport _ from \"lodash\";\nimport configCmd from \"./config\";\nimport localeCmd from \"./locale\";\nimport filesCmd from \"./files\";\n\nexport default new Command()\n .command(\"show\")\n .description(\"Prints out the current configuration\")\n .helpOption(\"-h, --help\", \"Show help\")\n .addCommand(configCmd)\n .addCommand(localeCmd)\n .addCommand(filesCmd);\n","import { Command } from \"interactive-commander\";\nimport _ from \"lodash\";\nimport fs from \"fs\";\nimport path from \"path\";\nimport { defaultConfig } from \"@lingo.dev/_spec\";\n\nexport default new Command()\n .command(\"config\")\n .description(\"Print out the current configuration\")\n .helpOption(\"-h, --help\", \"Show help\")\n .action(async (options) => {\n const fileConfig = loadReplexicaFileConfig();\n const config = _.merge({}, defaultConfig, fileConfig);\n\n console.log(JSON.stringify(config, null, 2));\n });\n\nfunction loadReplexicaFileConfig(): any {\n const replexicaConfigPath = path.resolve(process.cwd(), \"i18n.json\");\n const fileExists = fs.existsSync(replexicaConfigPath);\n if (!fileExists) {\n return undefined;\n }\n\n const fileContent = fs.readFileSync(replexicaConfigPath, \"utf-8\");\n const replexicaFileConfig = JSON.parse(fileContent);\n return replexicaFileConfig;\n}\n","import { Command } from \"interactive-commander\";\nimport _ from \"lodash\";\nimport Z from \"zod\";\nimport Ora from \"ora\";\nimport { localeCodes } from \"@lingo.dev/_spec\";\nimport { CLIError } from \"../../utils/errors\";\n\nexport default new Command()\n .command(\"locale\")\n .description(\"Print out the list of locales\")\n .helpOption(\"-h, --help\", \"Show help\")\n // argument can be equal either \"sources\" or \"targets\"\n .argument(\"<type>\", 'Type of locales to show, either \"sources\" or \"targets\"')\n .action(async (type) => {\n const ora = Ora();\n try {\n switch (type) {\n default:\n throw new CLIError({\n message: `Invalid type: ${type}`,\n docUrl: \"invalidType\",\n });\n case \"sources\":\n localeCodes.forEach((locale) => console.log(locale));\n break;\n case \"targets\":\n localeCodes.forEach((locale) => console.log(locale));\n break;\n }\n } catch (error: any) {\n ora.fail(error.message);\n process.exit(1);\n }\n });\n","import { Command } from \"interactive-commander\";\nimport _ from \"lodash\";\nimport Ora from \"ora\";\nimport { getConfig } from \"../../utils/config\";\nimport { CLIError } from \"../../utils/errors\";\nimport { getBuckets } from \"../../utils/buckets\";\nimport { resolveOverriddenLocale } from \"@lingo.dev/_spec\";\n\nexport default new Command()\n .command(\"files\")\n .description(\"Print out the list of files managed by Lingo.dev\")\n .option(\"--source\", \"Only show source files, files containing the original translations\")\n .option(\"--target\", \"Only show target files, files containing translated content\")\n .helpOption(\"-h, --help\", \"Show help\")\n .action(async (type) => {\n const ora = Ora();\n try {\n try {\n const i18nConfig = await getConfig();\n\n if (!i18nConfig) {\n throw new CLIError({\n message: \"i18n.json not found. Please run `lingo.dev init` to initialize the project.\",\n docUrl: \"i18nNotFound\",\n });\n }\n\n const buckets = getBuckets(i18nConfig);\n for (const bucket of buckets) {\n for (const bucketConfig of bucket.paths) {\n const sourceLocale = resolveOverriddenLocale(i18nConfig.locale.source, bucketConfig.delimiter);\n const sourcePath = bucketConfig.pathPattern.replace(/\\[locale\\]/g, sourceLocale);\n const targetPaths = i18nConfig.locale.targets.map((_targetLocale) => {\n const targetLocale = resolveOverriddenLocale(_targetLocale, bucketConfig.delimiter);\n return bucketConfig.pathPattern.replace(/\\[locale\\]/g, targetLocale);\n });\n\n const result: string[] = [];\n if (!type.source && !type.target) {\n result.push(sourcePath, ...targetPaths);\n } else if (type.source) {\n result.push(sourcePath);\n } else if (type.target) {\n result.push(...targetPaths);\n }\n\n result.forEach((path) => {\n console.log(path);\n });\n }\n }\n } catch (error: any) {\n throw new CLIError({\n message: `Failed to expand placeholdered globs: ${error.message}`,\n docUrl: \"placeHolderFailed\",\n });\n }\n } catch (error: any) {\n ora.fail(error.message);\n process.exit(1);\n }\n });\n","import _ from \"lodash\";\nimport path from \"path\";\nimport { glob } from \"glob\";\nimport { CLIError } from \"./errors\";\nimport {\n I18nConfig,\n resolveOverriddenLocale,\n BucketItem,\n LocaleDelimiter,\n} from \"@lingo.dev/_spec\";\nimport { bucketTypeSchema } from \"@lingo.dev/_spec\";\nimport Z from \"zod\";\n\ntype BucketConfig = {\n type: Z.infer<typeof bucketTypeSchema>;\n paths: Array<{ pathPattern: string; delimiter?: LocaleDelimiter }>;\n injectLocale?: string[];\n lockedKeys?: string[];\n lockedPatterns?: string[];\n ignoredKeys?: string[];\n};\n\nexport function getBuckets(i18nConfig: I18nConfig) {\n const result = Object.entries(i18nConfig.buckets).map(\n ([bucketType, bucketEntry]) => {\n const includeItems = bucketEntry.include.map((item) =>\n resolveBucketItem(item),\n );\n const excludeItems = bucketEntry.exclude?.map((item) =>\n resolveBucketItem(item),\n );\n const config: BucketConfig = {\n type: bucketType as Z.infer<typeof bucketTypeSchema>,\n paths: extractPathPatterns(\n i18nConfig.locale.source,\n includeItems,\n excludeItems,\n ),\n };\n if (bucketEntry.injectLocale) {\n config.injectLocale = bucketEntry.injectLocale;\n }\n if (bucketEntry.lockedKeys) {\n config.lockedKeys = bucketEntry.lockedKeys;\n }\n if (bucketEntry.lockedPatterns) {\n config.lockedPatterns = bucketEntry.lockedPatterns;\n }\n if (bucketEntry.ignoredKeys) {\n config.ignoredKeys = bucketEntry.ignoredKeys;\n }\n return config;\n },\n );\n\n return result;\n}\n\nfunction extractPathPatterns(\n sourceLocale: string,\n include: BucketItem[],\n exclude?: BucketItem[],\n) {\n const includedPatterns = include.flatMap((pattern) =>\n expandPlaceholderedGlob(\n pattern.path,\n resolveOverriddenLocale(sourceLocale, pattern.delimiter),\n ).map((pathPattern) => ({\n pathPattern,\n delimiter: pattern.delimiter,\n })),\n );\n const excludedPatterns = exclude?.flatMap((pattern) =>\n expandPlaceholderedGlob(\n pattern.path,\n resolveOverriddenLocale(sourceLocale, pattern.delimiter),\n ).map((pathPattern) => ({\n pathPattern,\n delimiter: pattern.delimiter,\n })),\n );\n const result = _.differenceBy(\n includedPatterns,\n excludedPatterns ?? [],\n (item) => item.pathPattern,\n );\n return result;\n}\n\n// Path expansion\nfunction expandPlaceholderedGlob(\n _pathPattern: string,\n sourceLocale: string,\n): string[] {\n // Throw if pathPattern is an absolute path\n const absolutePathPattern = path.resolve(_pathPattern);\n const pathPattern = path.relative(process.cwd(), absolutePathPattern);\n // Throw if pathPattern points outside the current working directory\n if (path.relative(process.cwd(), pathPattern).startsWith(\"..\")) {\n throw new CLIError({\n message: `Invalid path pattern: ${pathPattern}. Path pattern must be within the current working directory.`,\n docUrl: \"invalidPathPattern\",\n });\n }\n // Throw error if pathPattern contains \"**\" – we don't support recursive path patterns\n if (pathPattern.includes(\"**\")) {\n throw new CLIError({\n message: `Invalid path pattern: ${pathPattern}. Recursive path patterns are not supported.`,\n docUrl: \"invalidPathPattern\",\n });\n }\n\n // Break down path pattern into parts\n const pathPatternChunks = pathPattern.split(path.sep);\n // Find the index of the segment containing \"[locale]\"\n const localeSegmentIndexes = pathPatternChunks.reduce(\n (indexes, segment, index) => {\n if (segment.includes(\"[locale]\")) {\n indexes.push(index);\n }\n return indexes;\n },\n [] as number[],\n );\n // substitute [locale] in pathPattern with sourceLocale\n const sourcePathPattern = pathPattern.replaceAll(/\\[locale\\]/g, sourceLocale);\n // get all files that match the sourcePathPattern\n const sourcePaths = glob\n .sync(sourcePathPattern, { follow: true, withFileTypes: true })\n .filter((file) => file.isFile() || file.isSymbolicLink())\n .map((file) => file.fullpath())\n .map((fullpath) => path.relative(process.cwd(), fullpath));\n // transform each source file path back to [locale] placeholder paths\n const placeholderedPaths = sourcePaths.map((sourcePath) => {\n const sourcePathChunks = sourcePath.split(path.sep);\n localeSegmentIndexes.forEach((localeSegmentIndex) => {\n // Find the position of the \"[locale]\" placeholder within the segment\n const pathPatternChunk = pathPatternChunks[localeSegmentIndex];\n const sourcePathChunk = sourcePathChunks[localeSegmentIndex];\n const regexp = new RegExp(\n \"(\" +\n pathPatternChunk\n .replaceAll(\".\", \"\\\\.\")\n .replaceAll(\"*\", \".*\")\n .replace(\"[locale]\", `)${sourceLocale}(`) +\n \")\",\n );\n const match = sourcePathChunk.match(regexp);\n if (match) {\n const [, prefix, suffix] = match;\n const placeholderedSegment = prefix + \"[locale]\" + suffix;\n sourcePathChunks[localeSegmentIndex] = placeholderedSegment;\n }\n });\n const placeholderedPath = sourcePathChunks.join(path.sep);\n return placeholderedPath;\n });\n // return the placeholdered paths\n return placeholderedPaths;\n}\n\nfunction resolveBucketItem(bucketItem: string | BucketItem): BucketItem {\n if (typeof bucketItem === \"string\") {\n return { path: bucketItem, delimiter: null };\n }\n return bucketItem;\n}\n","import { Command } from \"interactive-commander\";\n\nimport setCmd from \"./set\";\nimport unsetCmd from \"./unset\";\nimport getCmd from \"./get\";\n\nexport default new Command()\n .command(\"config\")\n .description(\"Manage Lingo.dev CLI configuration\")\n .helpOption(\"-h, --help\", \"Show help\")\n .addCommand(setCmd)\n .addCommand(unsetCmd)\n .addCommand(getCmd);\n","import { Command } from \"interactive-commander\";\nimport chalk from \"chalk\";\nimport dedent from \"dedent\";\nimport _ from \"lodash\";\nimport {\n SETTINGS_KEYS,\n loadSystemSettings,\n saveSettings,\n} from \"../../utils/settings\";\n\nexport default new Command()\n .name(\"set\")\n .description(\"Set a configuration key to a value\")\n .addHelpText(\"afterAll\", `\\nAvailable keys:\\n ${SETTINGS_KEYS.join(\"\\n \")}`)\n .argument(\"<key>\", \"Configuration key to set\")\n .argument(\"<value>\", \"New value\")\n .helpOption(\"-h, --help\", \"Show help\")\n .action(async (key: string, value: string) => {\n if (!SETTINGS_KEYS.includes(key)) {\n console.error(\n dedent`\n ${chalk.red(\"✖\")} Unknown configuration key: ${chalk.bold(key)}\n Run ${chalk.dim(\"lingo.dev config set --help\")} to see available keys.\n `,\n );\n process.exitCode = 1;\n return;\n }\n\n const current = loadSystemSettings();\n const updated: any = _.cloneDeep(current);\n _.set(updated, key, value);\n\n try {\n saveSettings(updated as any);\n console.log(`${chalk.green(\"✔\")} Set ${chalk.bold(key)}`);\n } catch (err) {\n console.error(\n chalk.red(\n `✖ Failed to save configuration: ${chalk.dim(\n err instanceof Error ? err.message : String(err),\n )}`,\n ),\n );\n process.exitCode = 1;\n }\n });\n","import { Command } from \"interactive-commander\";\nimport chalk from \"chalk\";\nimport dedent from \"dedent\";\nimport _ from \"lodash\";\nimport {\n SETTINGS_KEYS,\n loadSystemSettings,\n saveSettings,\n} from \"../../utils/settings\";\n\nexport default new Command()\n .name(\"unset\")\n .description(\"Remove a configuration key\")\n .addHelpText(\"afterAll\", `\\nAvailable keys:\\n ${SETTINGS_KEYS.join(\"\\n \")}`)\n .argument(\"<key>\", \"Configuration key to remove\")\n .helpOption(\"-h, --help\", \"Show help\")\n .action(async (key: string) => {\n // Validate key first (defensive; choices() should already restrict but keep for safety).\n if (!SETTINGS_KEYS.includes(key)) {\n console.error(\n dedent`\n ${chalk.red(\"✖\")} Unknown configuration key: ${chalk.bold(key)}\n Run ${chalk.dim(\"lingo.dev config unset --help\")} to see available keys.\n `,\n );\n process.exitCode = 1;\n return;\n }\n\n // Load existing settings.\n const settings = loadSystemSettings();\n const currentValue = _.get(settings, key);\n\n if (!_.trim(String(currentValue || \"\"))) {\n console.log(`${chalk.cyan(\"ℹ\")} ${chalk.bold(key)} is not set.`);\n return;\n } else {\n const updated: any = _.cloneDeep(settings);\n _.unset(updated, key);\n try {\n saveSettings(updated as any);\n console.log(\n `${chalk.green(\"✔\")} Removed configuration key ${chalk.bold(key)}`,\n );\n } catch (err) {\n console.error(\n chalk.red(\n `✖ Failed to save configuration: ${chalk.dim(\n err instanceof Error ? err.message : String(err),\n )}`,\n ),\n );\n process.exitCode = 1;\n }\n }\n });\n","import { Command } from \"interactive-commander\";\nimport chalk from \"chalk\";\nimport _ from \"lodash\";\nimport { SETTINGS_KEYS, loadSystemSettings } from \"../../utils/settings\";\nimport dedent from \"dedent\";\n\nexport default new Command()\n .name(\"get\")\n .description(\"Get the value of a configuration key\")\n .addHelpText(\"afterAll\", `\\nAvailable keys:\\n ${SETTINGS_KEYS.join(\"\\n \")}`)\n .argument(\"<key>\", \"Configuration key\")\n .helpOption(\"-h, --help\", \"Show help\")\n .action(async (key: string) => {\n // Validate that the provided key is one of the recognised configuration keys.\n if (!SETTINGS_KEYS.includes(key)) {\n console.error(\n dedent`\n ${chalk.red(\"✖\")} Unknown configuration key: ${chalk.bold(key)}\n Run ${chalk.dim(\"lingo.dev config get --help\")} to see available keys.\n `,\n );\n process.exitCode = 1;\n return;\n }\n\n const settings = loadSystemSettings();\n const value = _.get(settings, key);\n\n if (!value) {\n // Key is valid but not set in the configuration file.\n console.log(`${chalk.cyan(\"ℹ\")} ${chalk.bold(key)} is not set.`);\n return;\n }\n\n if (typeof value === \"object\") {\n console.log(JSON.stringify(value, null, 2));\n } else {\n console.log(value);\n }\n });\n","import {\n bucketTypeSchema,\n I18nConfig,\n localeCodeSchema,\n resolveOverriddenLocale,\n} from \"@lingo.dev/_spec\";\nimport { Command } from \"interactive-commander\";\nimport Z from \"zod\";\nimport _ from \"lodash\";\nimport * as path from \"path\";\nimport { getConfig } from \"../utils/config\";\nimport { getSettings } from \"../utils/settings\";\nimport { CLIError } from \"../utils/errors\";\nimport Ora from \"ora\";\nimport createBucketLoader from \"../loaders\";\nimport { createAuthenticator } from \"../utils/auth\";\nimport { getBuckets } from \"../utils/buckets\";\nimport chalk from \"chalk\";\nimport { createTwoFilesPatch } from \"diff\";\nimport inquirer from \"inquirer\";\nimport externalEditor from \"external-editor\";\nimport updateGitignore from \"../utils/update-gitignore\";\nimport createProcessor from \"../processor\";\nimport { withExponentialBackoff } from \"../utils/exp-backoff\";\nimport trackEvent from \"../utils/observability\";\nimport { createDeltaProcessor } from \"../utils/delta\";\nimport { tryReadFile, writeFile } from \"../utils/fs\";\nimport { flatten, unflatten } from \"flat\";\n\nexport default new Command()\n .command(\"i18n\")\n .description(\"Run Localization engine\")\n .helpOption(\"-h, --help\", \"Show help\")\n .option(\n \"--locale <locale>\",\n \"Locale to process\",\n (val: string, prev: string[]) => (prev ? [...prev, val] : [val]),\n )\n .option(\n \"--bucket <bucket>\",\n \"Bucket to process\",\n (val: string, prev: string[]) => (prev ? [...prev, val] : [val]),\n )\n .option(\n \"--key <key>\",\n \"Key to process. Process only a specific translation key, useful for debugging or updating a single entry\",\n )\n .option(\n \"--file [files...]\",\n \"File to process. Process only a specific path, may contain asterisk * to match multiple files. Useful if you have a lot of files and want to focus on a specific one. Specify more files separated by commas or spaces.\",\n )\n .option(\n \"--frozen\",\n `Run in read-only mode - fails if any translations need updating, useful for CI/CD pipelines to detect missing translations`,\n )\n .option(\n \"--force\",\n \"Ignore lockfile and process all keys, useful for full re-translation\",\n )\n .option(\n \"--verbose\",\n \"Show detailed output including intermediate processing data and API communication details\",\n )\n .option(\n \"--interactive\",\n \"Enable interactive mode for reviewing and editing translations before they are applied\",\n )\n .option(\n \"--api-key <api-key>\",\n \"Explicitly set the API key to use, override the default API key from settings\",\n )\n .option(\n \"--debug\",\n \"Pause execution at start for debugging purposes, waits for user confirmation before proceeding\",\n )\n .option(\n \"--strict\",\n \"Stop processing on first error instead of continuing with other locales/buckets\",\n )\n .action(async function (options) {\n updateGitignore();\n\n const ora = Ora();\n const flags = parseFlags(options);\n\n if (flags.debug) {\n // wait for user input, use inquirer\n const { debug } = await inquirer.prompt([\n {\n type: \"confirm\",\n name: \"debug\",\n message: \"Debug mode. Wait for user input before continuing.\",\n },\n ]);\n }\n\n let hasErrors = false;\n let authId: string | null = null;\n try {\n ora.start(\"Loading configuration...\");\n const i18nConfig = getConfig();\n const settings = getSettings(flags.apiKey);\n ora.succeed(\"Configuration loaded\");\n\n ora.start(\"Validating localization configuration...\");\n validateParams(i18nConfig, flags);\n ora.succeed(\"Localization configuration is valid\");\n\n ora.start(\"Connecting to Lingo.dev Localization Engine...\");\n const isByokMode = !!i18nConfig?.provider;\n\n if (isByokMode) {\n authId = null;\n ora.succeed(\"Using external provider (BYOK mode)\");\n } else {\n const auth = await validateAuth(settings);\n authId = auth.id;\n ora.succeed(`Authenticated as ${auth.email}`);\n }\n\n trackEvent(authId, \"cmd.i18n.start\", {\n i18nConfig,\n flags,\n });\n\n let buckets = getBuckets(i18nConfig!);\n if (flags.bucket?.length) {\n buckets = buckets.filter((bucket: any) =>\n flags.bucket!.includes(bucket.type),\n );\n }\n ora.succeed(\"Buckets retrieved\");\n\n if (flags.file?.length) {\n buckets = buckets\n .map((bucket: any) => {\n const paths = bucket.paths.filter((path: any) =>\n flags.file!.find((file) => path.pathPattern?.includes(file)),\n );\n return { ...bucket, paths };\n })\n .filter((bucket: any) => bucket.paths.length > 0);\n if (buckets.length === 0) {\n ora.fail(\n \"No buckets found. All buckets were filtered out by --file option.\",\n );\n process.exit(1);\n } else {\n ora.info(`\\x1b[36mProcessing only filtered buckets:\\x1b[0m`);\n buckets.map((bucket: any) => {\n ora.info(` ${bucket.type}:`);\n bucket.paths.forEach((path: any) => {\n ora.info(` - ${path.pathPattern}`);\n });\n });\n }\n }\n\n const targetLocales = flags.locale?.length\n ? flags.locale\n : i18nConfig!.locale.targets;\n\n // Ensure the lockfile exists\n ora.start(\"Setting up localization cache...\");\n const checkLockfileProcessor = createDeltaProcessor(\"\");\n const lockfileExists = await checkLockfileProcessor.checkIfLockExists();\n if (!lockfileExists) {\n ora.start(\"Creating i18n.lock...\");\n for (const bucket of buckets) {\n for (const bucketPath of bucket.paths) {\n const sourceLocale = resolveOverriddenLocale(\n i18nConfig!.locale.source,\n bucketPath.delimiter,\n );\n const bucketLoader = createBucketLoader(\n bucket.type,\n bucketPath.pathPattern,\n {\n isCacheRestore: false,\n defaultLocale: sourceLocale,\n injectLocale: bucket.injectLocale,\n },\n bucket.lockedKeys,\n bucket.lockedPatterns,\n bucket.ignoredKeys,\n );\n bucketLoader.setDefaultLocale(sourceLocale);\n await bucketLoader.init();\n\n const sourceData = await bucketLoader.pull(\n i18nConfig!.locale.source,\n );\n\n const deltaProcessor = createDeltaProcessor(bucketPath.pathPattern);\n const checksums = await deltaProcessor.createChecksums(sourceData);\n await deltaProcessor.saveChecksums(checksums);\n }\n }\n ora.succeed(\"Localization cache initialized\");\n } else {\n ora.succeed(\"Localization cache loaded\");\n }\n\n if (flags.frozen) {\n ora.start(\"Checking for lockfile updates...\");\n let requiresUpdate: string | null = null;\n bucketLoop: for (const bucket of buckets) {\n for (const bucketPath of bucket.paths) {\n const sourceLocale = resolveOverriddenLocale(\n i18nConfig!.locale.source,\n bucketPath.delimiter,\n );\n\n const bucketLoader = createBucketLoader(\n bucket.type,\n bucketPath.pathPattern,\n {\n isCacheRestore: false,\n defaultLocale: sourceLocale,\n returnUnlocalizedKeys: true,\n injectLocale: bucket.injectLocale,\n },\n bucket.lockedKeys,\n );\n bucketLoader.setDefaultLocale(sourceLocale);\n await bucketLoader.init();\n\n const { unlocalizable: sourceUnlocalizable, ...sourceData } =\n await bucketLoader.pull(i18nConfig!.locale.source);\n const deltaProcessor = createDeltaProcessor(bucketPath.pathPattern);\n const sourceChecksums =\n await deltaProcessor.createChecksums(sourceData);\n const savedChecksums = await deltaProcessor.loadChecksums();\n\n // Get updated data by comparing current checksums with saved checksums\n const updatedSourceData = _.pickBy(\n sourceData,\n (value, key) => sourceChecksums[key] !== savedChecksums[key],\n );\n\n // translation was updated in the source file\n if (Object.keys(updatedSourceData).length > 0) {\n requiresUpdate = \"updated\";\n break bucketLoop;\n }\n\n for (const _targetLocale of targetLocales) {\n const targetLocale = resolveOverriddenLocale(\n _targetLocale,\n bucketPath.delimiter,\n );\n const { unlocalizable: targetUnlocalizable, ...targetData } =\n await bucketLoader.pull(targetLocale);\n\n const missingKeys = _.difference(\n Object.keys(sourceData),\n Object.keys(targetData),\n );\n const extraKeys = _.difference(\n Object.keys(targetData),\n Object.keys(sourceData),\n );\n const unlocalizableDataDiff = !_.isEqual(\n sourceUnlocalizable,\n targetUnlocalizable,\n );\n\n // translation is missing in the target file\n if (missingKeys.length > 0) {\n requiresUpdate = \"missing\";\n break bucketLoop;\n }\n\n // target file has extra translations\n if (extraKeys.length > 0) {\n requiresUpdate = \"extra\";\n break bucketLoop;\n }\n\n // unlocalizable keys do not match\n if (unlocalizableDataDiff) {\n requiresUpdate = \"unlocalizable\";\n break bucketLoop;\n }\n }\n }\n }\n\n if (requiresUpdate) {\n const message = {\n updated: \"Source file has been updated.\",\n missing: \"Target file is missing translations.\",\n extra:\n \"Target file has extra translations not present in the source file.\",\n unlocalizable:\n \"Unlocalizable data (such as booleans, dates, URLs, etc.) do not match.\",\n }[requiresUpdate];\n ora.fail(\n `Localization data has changed; please update i18n.lock or run without --frozen.`,\n );\n ora.fail(` Details: ${message}`);\n process.exit(1);\n } else {\n ora.succeed(\"No lockfile updates required.\");\n }\n }\n\n // Process each bucket\n for (const bucket of buckets) {\n try {\n console.log();\n ora.info(`Processing bucket: ${bucket.type}`);\n for (const bucketPath of bucket.paths) {\n const bucketOra = Ora({ indent: 2 }).info(\n `Processing path: ${bucketPath.pathPattern}`,\n );\n\n const sourceLocale = resolveOverriddenLocale(\n i18nConfig!.locale.source,\n bucketPath.delimiter,\n );\n\n const bucketLoader = createBucketLoader(\n bucket.type,\n bucketPath.pathPattern,\n {\n isCacheRestore: false,\n defaultLocale: sourceLocale,\n injectLocale: bucket.injectLocale,\n },\n bucket.lockedKeys,\n bucket.lockedPatterns,\n bucket.ignoredKeys,\n );\n bucketLoader.setDefaultLocale(sourceLocale);\n await bucketLoader.init();\n let sourceData = await bucketLoader.pull(sourceLocale);\n\n for (const _targetLocale of targetLocales) {\n const targetLocale = resolveOverriddenLocale(\n _targetLocale,\n bucketPath.delimiter,\n );\n try {\n bucketOra.start(\n `[${sourceLocale} -> ${targetLocale}] (0%) Localization in progress...`,\n );\n\n sourceData = await bucketLoader.pull(sourceLocale);\n\n const targetData = await bucketLoader.pull(targetLocale);\n const deltaProcessor = createDeltaProcessor(\n bucketPath.pathPattern,\n );\n const checksums = await deltaProcessor.loadChecksums();\n const delta = await deltaProcessor.calculateDelta({\n sourceData,\n targetData,\n checksums,\n });\n let processableData = _.chain(sourceData)\n .entries()\n .filter(\n ([key, value]) =>\n delta.added.includes(key) ||\n delta.updated.includes(key) ||\n !!flags.force,\n )\n .fromPairs()\n .value();\n\n if (flags.key) {\n processableData = _.pickBy(\n processableData,\n (_, key) => key === flags.key,\n );\n }\n if (flags.verbose) {\n bucketOra.info(JSON.stringify(processableData, null, 2));\n }\n\n bucketOra.start(\n `[${sourceLocale} -> ${targetLocale}] [${Object.keys(processableData).length} entries] (0%) AI localization in progress...`,\n );\n let processPayload = createProcessor(i18nConfig!.provider, {\n apiKey: settings.auth.apiKey,\n apiUrl: settings.auth.apiUrl,\n });\n processPayload = withExponentialBackoff(\n processPayload,\n 3,\n 1000,\n );\n\n const processedTargetData = await processPayload(\n {\n sourceLocale,\n sourceData,\n processableData,\n targetLocale,\n targetData,\n },\n (progress, sourceChunk, processedChunk) => {\n bucketOra.text = `[${sourceLocale} -> ${targetLocale}] [${Object.keys(processableData).length} entries] (${progress}%) AI localization in progress...`;\n },\n );\n\n if (flags.verbose) {\n bucketOra.info(JSON.stringify(processedTargetData, null, 2));\n }\n\n let finalTargetData = _.merge(\n {},\n sourceData,\n targetData,\n processedTargetData,\n );\n\n // rename keys\n finalTargetData = _.chain(finalTargetData)\n .entries()\n .map(([key, value]) => {\n const renaming = delta.renamed.find(\n ([oldKey, newKey]) => oldKey === key,\n );\n if (!renaming) {\n return [key, value];\n }\n return [renaming[1], value];\n })\n .fromPairs()\n .value();\n\n if (flags.interactive) {\n bucketOra.stop();\n const reviewedData = await reviewChanges({\n pathPattern: bucketPath.pathPattern,\n targetLocale,\n currentData: targetData,\n proposedData: finalTargetData,\n sourceData,\n force: flags.force!,\n });\n\n finalTargetData = reviewedData;\n bucketOra.start(\n `Applying changes to ${bucketPath} (${targetLocale})`,\n );\n }\n\n const finalDiffSize = _.chain(finalTargetData)\n .omitBy((value, key) => value === targetData[key])\n .size()\n .value();\n\n // Push to bucket all the time as there might be changes to unlocalizable keys\n await bucketLoader.push(targetLocale, finalTargetData);\n\n if (finalDiffSize > 0 || flags.force) {\n bucketOra.succeed(\n `[${sourceLocale} -> ${targetLocale}] Localization completed`,\n );\n } else {\n bucketOra.succeed(\n `[${sourceLocale} -> ${targetLocale}] Localization completed (no changes).`,\n );\n }\n } catch (_error: any) {\n const error = new Error(\n `[${sourceLocale} -> ${targetLocale}] Localization failed: ${_error.message}`,\n );\n if (flags.strict) {\n throw error;\n } else {\n bucketOra.fail(error.message);\n hasErrors = true;\n }\n }\n }\n\n const deltaProcessor = createDeltaProcessor(bucketPath.pathPattern);\n const checksums = await deltaProcessor.createChecksums(sourceData);\n await deltaProcessor.saveChecksums(checksums);\n }\n } catch (_error: any) {\n const error = new Error(\n `Failed to process bucket ${bucket.type}: ${_error.message}`,\n );\n if (flags.strict) {\n throw error;\n } else {\n ora.fail(error.message);\n hasErrors = true;\n }\n }\n }\n console.log();\n if (!hasErrors) {\n ora.succeed(\"Localization completed.\");\n trackEvent(authId, \"cmd.i18n.success\", {\n i18nConfig,\n flags,\n });\n } else {\n ora.warn(\"Localization completed with errors.\");\n trackEvent(authId || \"unknown\", \"cmd.i18n.error\", {\n flags,\n });\n }\n } catch (error: any) {\n ora.fail(error.message);\n\n trackEvent(authId || \"unknown\", \"cmd.i18n.error\", {\n flags,\n error,\n });\n process.exit(1);\n }\n });\n\nfunction parseFlags(options: any) {\n return Z.object({\n apiKey: Z.string().optional(),\n locale: Z.array(localeCodeSchema).optional(),\n bucket: Z.array(bucketTypeSchema).optional(),\n force: Z.boolean().optional(),\n frozen: Z.boolean().optional(),\n verbose: Z.boolean().optional(),\n strict: Z.boolean().optional(),\n key: Z.string().optional(),\n file: Z.array(Z.string()).optional(),\n interactive: Z.boolean().default(false),\n debug: Z.boolean().default(false),\n }).parse(options);\n}\n\n// Export validateAuth for use in other commands\nexport async function validateAuth(settings: ReturnType<typeof getSettings>) {\n if (!settings.auth.apiKey) {\n throw new CLIError({\n message:\n \"Not authenticated. Please run `lingo.dev auth --login` to authenticate.\",\n docUrl: \"authError\",\n });\n }\n\n const authenticator = createAuthenticator({\n apiKey: settings.auth.apiKey,\n apiUrl: settings.auth.apiUrl,\n });\n const user = await authenticator.whoami();\n if (!user) {\n throw new CLIError({\n message:\n \"Invalid API key. Please run `lingo.dev auth --login` to authenticate.\",\n docUrl: \"authError\",\n });\n }\n\n return user;\n}\n\nfunction validateParams(\n i18nConfig: I18nConfig | null,\n flags: ReturnType<typeof parseFlags>,\n) {\n if (!i18nConfig) {\n throw new CLIError({\n message:\n \"i18n.json not found. Please run `lingo.dev init` to initialize the project.\",\n docUrl: \"i18nNotFound\",\n });\n } else if (!i18nConfig.buckets || !Object.keys(i18nConfig.buckets).length) {\n throw new CLIError({\n message:\n \"No buckets found in i18n.json. Please add at least one bucket containing i18n content.\",\n docUrl: \"bucketNotFound\",\n });\n } else if (\n flags.locale?.some((locale) => !i18nConfig.locale.targets.includes(locale))\n ) {\n throw new CLIError({\n message: `One or more specified locales do not exist in i18n.json locale.targets. Please add them to the list and try again.`,\n docUrl: \"localeTargetNotFound\",\n });\n } else if (\n flags.bucket?.some(\n (bucket) =>\n !i18nConfig.buckets[bucket as keyof typeof i18nConfig.buckets],\n )\n ) {\n throw new CLIError({\n message: `One or more specified buckets do not exist in i18n.json. Please add them to the list and try again.`,\n docUrl: \"bucketNotFound\",\n });\n }\n}\n\nasync function reviewChanges(args: {\n pathPattern: string;\n targetLocale: string;\n currentData: Record<string, any>;\n proposedData: Record<string, any>;\n sourceData: Record<string, any>;\n force: boolean;\n}): Promise<Record<string, any>> {\n const currentStr = JSON.stringify(args.currentData, null, 2);\n const proposedStr = JSON.stringify(args.proposedData, null, 2);\n\n // Early return if no changes\n if (currentStr === proposedStr && !args.force) {\n console.log(\n `\\n${chalk.blue(args.pathPattern)} (${chalk.yellow(args.targetLocale)}): ${chalk.gray(\"No changes to review\")}`,\n );\n return args.proposedData;\n }\n\n const patch = createTwoFilesPatch(\n `${args.pathPattern} (current)`,\n `${args.pathPattern} (proposed)`,\n currentStr,\n proposedStr,\n undefined,\n undefined,\n { context: 3 },\n );\n\n // Color the diff output\n const coloredDiff = patch\n .split(\"\\n\")\n .map((line) => {\n if (line.startsWith(\"+\")) return chalk.green(line);\n if (line.startsWith(\"-\")) return chalk.red(line);\n if (line.startsWith(\"@\")) return chalk.cyan(line);\n return line;\n })\n .join(\"\\n\");\n\n console.log(\n `\\nReviewing changes for ${chalk.blue(args.pathPattern)} (${chalk.yellow(args.targetLocale)}):`,\n );\n console.log(coloredDiff);\n\n const { action } = await inquirer.prompt([\n {\n type: \"list\",\n name: \"action\",\n message: \"Choose action:\",\n choices: [\n { name: \"Approve changes\", value: \"approve\" },\n { name: \"Skip changes\", value: \"skip\" },\n { name: \"Edit individually\", value: \"edit\" },\n ],\n default: \"approve\",\n },\n ]);\n\n if (action === \"approve\") {\n return args.proposedData;\n }\n\n if (action === \"skip\") {\n return args.currentData;\n }\n\n // If edit was chosen, prompt for each changed value\n const customData = { ...args.currentData };\n const changes = _.reduce(\n args.proposedData,\n (result: string[], value: string, key: string) => {\n if (args.currentData[key] !== value) {\n result.push(key);\n }\n return result;\n },\n [],\n );\n\n for (const key of changes) {\n console.log(`\\nEditing value for: ${chalk.cyan(key)}`);\n console.log(chalk.gray(\"Source text:\"), chalk.blue(args.sourceData[key]));\n console.log(\n chalk.gray(\"Current value:\"),\n chalk.red(args.currentData[key] || \"(empty)\"),\n );\n console.log(\n chalk.gray(\"Suggested value:\"),\n chalk.green(args.proposedData[key]),\n );\n console.log(\n chalk.gray(\n \"\\nYour editor will open. Edit the text and save to continue.\",\n ),\n );\n console.log(chalk.gray(\"------------\"));\n\n try {\n // Prepare the editor content with a header comment and the suggested value\n const editorContent = [\n \"# Edit the translation below.\",\n \"# Lines starting with # will be ignored.\",\n \"# Save and exit the editor to continue.\",\n \"#\",\n `# Source text (${chalk.blue(\"English\")}):`,\n `# ${args.sourceData[key]}`,\n \"#\",\n `# Current value (${chalk.red(args.targetLocale)}):`,\n `# ${args.currentData[key] || \"(empty)\"}`,\n \"#\",\n args.proposedData[key],\n ].join(\"\\n\");\n\n const result = externalEditor.edit(editorContent);\n\n // Clean up the result by removing comments and trimming\n const customValue = result\n .split(\"\\n\")\n .filter((line) => !line.startsWith(\"#\"))\n .join(\"\\n\")\n .trim();\n\n if (customValue) {\n customData[key] = customValue;\n } else {\n console.log(\n chalk.yellow(\"Empty value provided, keeping the current value.\"),\n );\n customData[key] = args.currentData[key] || args.proposedData[key];\n }\n } catch (error) {\n console.log(\n chalk.red(\"Error while editing, keeping the suggested value.\"),\n );\n customData[key] = args.proposedData[key];\n }\n }\n\n return customData;\n}\n","import { ILoader, ILoaderDefinition } from \"./_types\";\n\nexport function composeLoaders(\n ...loaders: ILoader<any, any, any>[]\n): ILoader<any, any> {\n return {\n init: async () => {\n for (const loader of loaders) {\n await loader.init?.();\n }\n },\n setDefaultLocale(locale: string) {\n for (const loader of loaders) {\n loader.setDefaultLocale?.(locale);\n }\n return this;\n },\n pull: async (locale, input) => {\n let result: any = input;\n for (let i = 0; i < loaders.length; i++) {\n result = await loaders[i].pull(locale, result);\n }\n return result;\n },\n push: async (locale, data) => {\n let result: any = data;\n for (let i = loaders.length - 1; i >= 0; i--) {\n result = await loaders[i].push(locale, result);\n }\n return result;\n },\n };\n}\n\nexport function createLoader<I, O, C>(\n lDefinition: ILoaderDefinition<I, O, C>,\n): ILoader<I, O, C> {\n const state = {\n defaultLocale: undefined as string | undefined,\n originalInput: undefined as I | undefined | null,\n pullInput: undefined as I | undefined | null,\n pullOutput: undefined as O | undefined | null,\n initCtx: undefined as C | undefined,\n };\n return {\n async init() {\n if (state.initCtx) {\n return state.initCtx;\n }\n state.initCtx = await lDefinition.init?.();\n return state.initCtx as C;\n },\n setDefaultLocale(locale) {\n if (state.defaultLocale) {\n throw new Error(\"Default locale already set\");\n }\n state.defaultLocale = locale;\n return this;\n },\n async pull(locale, input) {\n if (!state.defaultLocale) {\n throw new Error(\"Default locale not set\");\n }\n if (state.originalInput === undefined && locale !== state.defaultLocale) {\n throw new Error(\"The first pull must be for the default locale\");\n }\n if (locale === state.defaultLocale) {\n state.originalInput = input || null;\n }\n\n state.pullInput = input;\n const result = await lDefinition.pull(\n locale,\n input,\n state.initCtx!,\n state.defaultLocale,\n state.originalInput!,\n );\n state.pullOutput = result;\n\n return result;\n },\n async push(locale, data) {\n if (!state.defaultLocale) {\n throw new Error(\"Default locale not set\");\n }\n if (state.originalInput === undefined) {\n throw new Error(\"Cannot push data without pulling first\");\n }\n\n const pushResult = await lDefinition.push(\n locale,\n data,\n state.originalInput,\n state.defaultLocale,\n state.pullInput!,\n state.pullOutput!,\n );\n return pushResult;\n },\n };\n}\n","import { jsonrepair } from \"jsonrepair\";\nimport { ILoader } from \"./_types\";\nimport { createLoader } from \"./_utils\";\n\nexport default function createJsonLoader(): ILoader<string, Record<string, any>> {\n return createLoader({\n pull: async (locale, input) => {\n const jsonString = input || \"{}\";\n let result: Record<string, any>;\n try {\n result = JSON.parse(jsonString);\n } catch (error) {\n result = JSON.parse(jsonrepair(jsonString));\n }\n return result;\n },\n push: async (locale, data) => {\n const serializedData = JSON.stringify(data, null, 2);\n return serializedData;\n },\n });\n}\n","import { flatten, unflatten } from \"flat\";\nimport { ILoader } from \"./_types\";\nimport { composeLoaders, createLoader } from \"./_utils\";\nimport _ from \"lodash\";\n\nexport const OBJECT_NUMERIC_KEY_PREFIX = \"__lingodotdev__obj__\";\n\nexport default function createFlatLoader() {\n return composeLoaders(createDenormalizeLoader(), createNormalizeLoader());\n}\n\ntype DenormalizeResult = {\n denormalized: Record<string, string>;\n keysMap: Record<string, string>;\n};\n\nfunction createDenormalizeLoader(): ILoader<\n Record<string, any>,\n DenormalizeResult\n> {\n return createLoader({\n pull: async (locale, input) => {\n const inputDenormalized = denormalizeObjectKeys(input || {});\n const denormalized: Record<string, string> = flatten(inputDenormalized, {\n delimiter: \"/\",\n transformKey(key) {\n return encodeURIComponent(String(key));\n },\n });\n const keysMap = buildDenormalizedKeysMap(denormalized);\n return { denormalized, keysMap };\n },\n push: async (locale, { denormalized }) => {\n const normalized = normalizeObjectKeys(denormalized);\n return normalized;\n },\n });\n}\n\nfunction createNormalizeLoader(): ILoader<\n DenormalizeResult,\n Record<string, string>\n> {\n return createLoader({\n pull: async (locale, input) => {\n const normalized = normalizeObjectKeys(input.denormalized);\n return normalized;\n },\n push: async (locale, data, originalInput) => {\n const keysMap = originalInput?.keysMap ?? {};\n const input = mapDenormalizedKeys(data, keysMap);\n const denormalized: Record<string, any> = unflatten(input, {\n delimiter: \"/\",\n transformKey(key) {\n return decodeURIComponent(String(key));\n },\n });\n return { denormalized, keysMap: keysMap || {} };\n },\n });\n}\n\nexport function buildDenormalizedKeysMap(obj: Record<string, string>) {\n if (!obj) return {};\n\n return Object.keys(obj).reduce(\n (acc, key) => {\n if (key) {\n const normalizedKey = `${key}`.replace(OBJECT_NUMERIC_KEY_PREFIX, \"\");\n acc[normalizedKey] = key;\n }\n return acc;\n },\n {} as Record<string, string>,\n );\n}\n\nexport function mapDenormalizedKeys(\n obj: Record<string, any>,\n denormalizedKeysMap: Record<string, string>,\n) {\n return Object.keys(obj).reduce(\n (acc, key) => {\n const denormalizedKey = denormalizedKeysMap[key] ?? key;\n acc[denormalizedKey] = obj[key];\n return acc;\n },\n {} as Record<string, string>,\n );\n}\n\nexport function denormalizeObjectKeys(\n obj: Record<string, any>,\n): Record<string, any> {\n if (_.isObject(obj) && !_.isArray(obj)) {\n return _.transform(\n obj,\n (result, value, key) => {\n const newKey = !isNaN(Number(key))\n ? `${OBJECT_NUMERIC_KEY_PREFIX}${key}`\n : key;\n result[newKey] =\n _.isObject(value) && !_.isDate(value)\n ? denormalizeObjectKeys(value)\n : value;\n },\n {} as Record<string, any>,\n );\n } else {\n return obj;\n }\n}\n\nexport function normalizeObjectKeys(\n obj: Record<string, any>,\n): Record<string, any> {\n if (_.isObject(obj) && !_.isArray(obj)) {\n return _.transform(\n obj,\n (result, value, key) => {\n const newKey = `${key}`.replace(OBJECT_NUMERIC_KEY_PREFIX, \"\");\n result[newKey] =\n _.isObject(value) && !_.isDate(value)\n ? normalizeObjectKeys(value)\n : value;\n },\n {} as Record<string, any>,\n );\n } else {\n return obj;\n }\n}\n","import fs from \"fs/promises\";\nimport path from \"path\";\nimport { ILoader } from \"./_types\";\nimport { createLoader } from \"./_utils\";\n\nexport default function createTextFileLoader(pathPattern: string): ILoader<void, string> {\n return createLoader({\n async pull(locale) {\n const result = await readFileForLocale(pathPattern, locale);\n const trimmedResult = result.trim();\n return trimmedResult;\n },\n async push(locale, data, _, originalLocale) {\n const draftPath = pathPattern.replaceAll(\"[locale]\", locale);\n const finalPath = path.resolve(draftPath);\n\n // Create parent directories if needed\n const dirPath = path.dirname(finalPath);\n await fs.mkdir(dirPath, { recursive: true });\n\n const trimmedPayload = data.trim();\n\n // Add trailing new line if needed\n const trailingNewLine = await getTrailingNewLine(pathPattern, locale, originalLocale);\n let finalPayload = trimmedPayload + trailingNewLine;\n\n await fs.writeFile(finalPath, finalPayload, {\n encoding: \"utf-8\",\n flag: \"w\",\n });\n },\n });\n}\n\nasync function readFileForLocale(pathPattern: string, locale: string) {\n const draftPath = pathPattern.replaceAll(\"[locale]\", locale);\n const finalPath = path.resolve(draftPath);\n const exists = await fs\n .access(finalPath)\n .then(() => true)\n .catch(() => false);\n if (!exists) {\n return \"\";\n }\n return fs.readFile(finalPath, \"utf-8\");\n}\n\nasync function getTrailingNewLine(pathPattern: string, locale: string, originalLocale: string) {\n let templateData = await readFileForLocale(pathPattern, locale);\n if (!templateData) {\n templateData = await readFileForLocale(pathPattern, originalLocale);\n }\n\n if (templateData?.match(/[\\r\\n]$/)) {\n const ending = templateData?.includes(\"\\r\\n\") ? \"\\r\\n\" : templateData?.includes(\"\\r\") ? \"\\r\" : \"\\n\";\n return ending;\n }\n return \"\";\n}\n","import YAML, { ToStringOptions } from \"yaml\";\nimport { ILoader } from \"./_types\";\nimport { createLoader } from \"./_utils\";\n\nexport default function createYamlLoader(): ILoader<string, Record<string, any>> {\n return createLoader({\n async pull(locale, input) {\n return YAML.parse(input) || {};\n },\n async push(locale, payload, originalInput) {\n return YAML.stringify(payload, {\n lineWidth: -1,\n defaultKeyType: getKeyType(originalInput),\n defaultStringType: getStringType(originalInput),\n });\n },\n });\n}\n\n// check if the yaml keys are using double quotes or single quotes\nfunction getKeyType(yamlString: string | null): ToStringOptions[\"defaultKeyType\"] {\n if (yamlString) {\n const lines = yamlString.split(\"\\n\");\n const hasDoubleQuotes = lines.find((line) => {\n return line.trim().startsWith('\"') && line.trim().match('\":');\n });\n if (hasDoubleQuotes) {\n return \"QUOTE_DOUBLE\";\n }\n }\n return \"PLAIN\";\n}\n\n// check if the yaml string values are using double quotes or single quotes\nfunction getStringType(yamlString: string | null): ToStringOptions[\"defaultStringType\"] {\n if (yamlString) {\n const lines = yamlString.split(\"\\n\");\n const hasDoubleQuotes = lines.find((line) => {\n const trimmedLine = line.trim();\n return (\n (trimmedLine.startsWith('\"') || trimmedLine.match(/:\\s*\"/)) &&\n (trimmedLine.endsWith('\"') || trimmedLine.endsWith('\",'))\n );\n });\n if (hasDoubleQuotes) {\n return \"QUOTE_DOUBLE\";\n }\n }\n return \"PLAIN\";\n}\n","import { ILoader } from \"./_types\";\nimport { createLoader } from \"./_utils\";\n\nexport default function createRootKeyLoader(replaceAll = false): ILoader<Record<string, any>, Record<string, any>> {\n return createLoader({\n async pull(locale, input) {\n const result = input[locale];\n return result;\n },\n async push(locale, data, originalInput) {\n const result = {\n ...(replaceAll ? {} : originalInput),\n [locale]: data,\n };\n return result;\n },\n });\n}\n","import _ from \"lodash\";\nimport { ILoader } from \"./_types\";\nimport { createLoader } from \"./_utils\";\n\nexport default function createFlutterLoader(): ILoader<Record<string, any>, Record<string, any>> {\n return createLoader({\n async pull(locale, input) {\n // skip all metadata (keys starting with @)\n const result = _.pickBy(input, (value, key) => !key.startsWith(\"@\"));\n return result;\n },\n async push(locale, data, originalInput) {\n const result = _.merge({}, originalInput, { \"@@locale\": locale }, data);\n return result;\n },\n });\n}\n","import { parseStringPromise, Builder } from \"xml2js\";\nimport { ILoader } from \"./_types\";\nimport { CLIError } from \"../utils/errors\";\nimport { createLoader } from \"./_utils\";\n\nexport default function createAndroidLoader(): ILoader<\n string,\n Record<string, any>\n> {\n return createLoader({\n async pull(locale, input) {\n try {\n if (!input) {\n return {};\n }\n\n const result: Record<string, any> = {};\n\n const stringRegex =\n /<string\\s+name=\"([^\"]+)\"(?:\\s+translatable=\"([^\"]+)\")?[^>]*>([\\s\\S]*?)<\\/string>/gi;\n let stringMatch;\n while ((stringMatch = stringRegex.exec(input)) !== null) {\n const name = stringMatch[1];\n const translatable = stringMatch[2];\n let value = stringMatch[3];\n\n if (translatable === \"false\") {\n continue;\n }\n\n const cdataRegex = /<!\\[CDATA\\[([\\s\\S]*?)\\]\\]>/g;\n value = value.replace(cdataRegex, (match, content) => content);\n\n value = value\n .replace(/&lt;/g, \"<\")\n .replace(/&gt;/g, \">\")\n .replace(/&amp;/g, \"&\")\n .replace(/&quot;/g, '\"')\n .replace(/&apos;/g, \"'\")\n .replace(/\\\\'/g, \"'\");\n\n result[name] = value;\n }\n\n const parsed = await parseStringPromise(input, {\n explicitArray: true,\n mergeAttrs: false,\n normalize: true,\n normalizeTags: false,\n trim: true,\n attrkey: \"$\",\n charkey: \"_\",\n });\n\n if (!parsed || !parsed.resources) {\n return result;\n }\n\n if (parsed.resources[\"string-array\"]) {\n parsed.resources[\"string-array\"].forEach((arrayItem: any) => {\n if (arrayItem.$ && arrayItem.$.translatable === \"false\") {\n return;\n }\n\n const name = arrayItem.$.name;\n const items: string[] = [];\n\n if (arrayItem.item) {\n arrayItem.item.forEach((item: any) => {\n let itemValue = \"\";\n if (typeof item === \"string\") {\n itemValue = item;\n } else if (item._) {\n itemValue = item._;\n } else if (item._ === \"\") {\n itemValue = \"\";\n }\n items.push(\n itemValue === \"\" || /^\\s+$/.test(itemValue)\n ? itemValue\n : itemValue.trim(),\n );\n });\n }\n\n result[name] = items;\n });\n }\n\n if (parsed.resources.plurals) {\n parsed.resources.plurals.forEach((pluralItem: any) => {\n if (pluralItem.$ && pluralItem.$.translatable === \"false\") {\n return;\n }\n\n const name = pluralItem.$.name;\n const pluralObj: Record<string, string> = {};\n\n if (pluralItem.item) {\n pluralItem.item.forEach((item: any) => {\n if (item.$ && item.$.quantity) {\n let value = \"\";\n if (item._) {\n value = item._;\n } else if (item._ === \"\") {\n value = \"\";\n }\n pluralObj[item.$.quantity] =\n value === \"\" || /^\\s+$/.test(value) ? value : value.trim();\n }\n });\n }\n\n result[name] = pluralObj;\n });\n }\n\n if (parsed.resources.bool) {\n parsed.resources.bool.forEach((boolItem: any) => {\n if (boolItem.$ && boolItem.$.translatable === \"false\") {\n return;\n }\n\n const name = boolItem.$.name;\n result[name] = boolItem._ === \"true\";\n });\n }\n\n if (parsed.resources.integer) {\n parsed.resources.integer.forEach((intItem: any) => {\n if (intItem.$ && intItem.$.translatable === \"false\") {\n return;\n }\n\n const name = intItem.$.name;\n result[name] = parseInt(intItem._ || \"0\", 10);\n });\n }\n\n return result;\n } catch (error) {\n console.error(\"Error parsing Android resource file:\", error);\n throw new CLIError({\n message: \"Failed to parse Android resource file\",\n docUrl: \"androidResouceError\",\n });\n }\n },\n async push(locale, payload) {\n try {\n const xmlObj: AndroidResources = {\n resources: {\n string: [],\n \"string-array\": [],\n plurals: [],\n bool: [],\n integer: [],\n },\n };\n\n const processHtmlContent = (str: string): { _: string } => {\n if (typeof str !== \"string\") return { _: String(str) };\n\n const processedStr = str.replace(/(?<!\\\\)'/g, \"\\\\'\");\n\n return { _: processedStr };\n };\n\n for (const [key, value] of Object.entries(payload)) {\n if (typeof value === \"string\") {\n xmlObj.resources.string.push({\n $: { name: key },\n ...processHtmlContent(value),\n });\n } else if (Array.isArray(value)) {\n xmlObj.resources[\"string-array\"].push({\n $: { name: key },\n item: value.map((item) => processHtmlContent(item)),\n });\n } else if (typeof value === \"object\") {\n xmlObj.resources.plurals.push({\n $: { name: key },\n item: Object.entries(value).map(([quantity, text]) => ({\n $: { quantity },\n ...processHtmlContent(text as string),\n })),\n });\n } else if (typeof value === \"boolean\") {\n xmlObj.resources.bool.push({\n $: { name: key },\n _: value.toString(),\n });\n } else if (typeof value === \"number\") {\n xmlObj.resources.integer.push({\n $: { name: key },\n _: value.toString(),\n });\n }\n }\n\n const builder = new Builder({\n headless: true,\n renderOpts: {\n pretty: true,\n indent: \" \",\n newline: \"\\n\",\n },\n });\n\n return builder.buildObject(xmlObj);\n } catch (error) {\n console.error(\"Error generating Android resource file:\", error);\n throw new CLIError({\n message: \"Failed to generate Android resource file\",\n docUrl: \"androidResouceError\",\n });\n }\n },\n });\n}\n\ninterface AndroidResource {\n $: {\n name: string;\n translatable?: string;\n [key: string]: string | undefined;\n };\n _?: string;\n item?: Array<{\n $?: { quantity?: string };\n _?: string;\n }>;\n}\n\ninterface AndroidResources {\n resources: {\n string: AndroidResource[];\n \"string-array\": AndroidResource[];\n plurals: AndroidResource[];\n bool: AndroidResource[];\n integer: AndroidResource[];\n };\n}\n","import { parse } from \"csv-parse/sync\";\nimport { stringify } from \"csv-stringify/sync\";\nimport _ from \"lodash\";\nimport { ILoader } from \"./_types\";\nimport { composeLoaders, createLoader } from \"./_utils\";\n\n/**\n * Tries to detect the key column name from a csvString.\n * \n * Current logic: get first cell > 'KEY' fallback if empty\n */\nexport function detectKeyColumnName(csvString: string) {\n const row: string[] | undefined = parse(csvString)[0];\n const firstColumn = row?.[0]?.trim();\n return firstColumn || \"KEY\";\n}\n\nexport default function createCsvLoader() {\n return composeLoaders(_createCsvLoader(), createPullOutputCleaner())\n}\n\ntype InternalTransferState = {\n keyColumnName: string;\n inputParsed: Record<string, any>[];\n items: Record<string, string>;\n}\n\nfunction _createCsvLoader(): ILoader<\n string,\n InternalTransferState\n> {\n return createLoader({\n async pull(locale, input) {\n const keyColumnName = detectKeyColumnName(input.split('\\n').find(l => l.length)!);\n const inputParsed = parse(input, {\n columns: true,\n skip_empty_lines: true,\n relax_column_count_less: true,\n }) as Record<string, any>[];\n\n const items: Record<string, string> = {};\n\n // Assign keys that already have translation so AI doesn't re-generate it.\n _.forEach(inputParsed, (row) => {\n const key = row[keyColumnName];\n if (key && row[locale] && row[locale].trim() !== \"\") {\n items[key] = row[locale];\n }\n });\n\n return {\n inputParsed,\n keyColumnName,\n items\n };\n },\n async push(locale, { inputParsed, keyColumnName, items }) {\n const columns = inputParsed.length > 0 ? Object.keys(inputParsed[0]) : [keyColumnName, locale];\n if (!columns.includes(locale)) {\n columns.push(locale);\n }\n\n const updatedRows = inputParsed.map((row) => ({\n ...row,\n [locale]: items[row[keyColumnName]] || row[locale] || \"\",\n }));\n const existingKeys = new Set(inputParsed.map((row) => row[keyColumnName]));\n\n Object.entries(items).forEach(([key, value]) => {\n if (!existingKeys.has(key)) {\n const newRow: Record<string, string> = {\n [keyColumnName]: key,\n ...Object.fromEntries(columns.map((column) => [column, \"\"])),\n };\n newRow[locale] = value;\n updatedRows.push(newRow);\n }\n });\n\n return stringify(updatedRows, {\n header: true,\n columns,\n });\n },\n });\n}\n\n/**\n * This is a simple extra loader that is used to clean the data written to lockfile\n */\nfunction createPullOutputCleaner(): ILoader<\n InternalTransferState,\n Record<string, string>\n> {\n return createLoader({\n async pull(_locale, input) {\n return input.items;\n },\n async push(_locale, data, _oI, _oL, pullInput) {\n return { ...pullInput!, items: data };\n },\n });\n}\n","import { JSDOM } from \"jsdom\";\nimport { ILoader } from \"./_types\";\nimport { createLoader } from \"./_utils\";\n\nfunction normalizeTextContent(text: string, isStandalone: boolean): string {\n // Remove any leading/trailing whitespace for initial comparison\n const trimmed = text.trim();\n if (!trimmed) return \"\";\n\n // For all text nodes, just return the trimmed content\n return trimmed;\n}\n\nexport default function createHtmlLoader(): ILoader<string, Record<string, any>> {\n const LOCALIZABLE_ATTRIBUTES: Record<string, string[]> = {\n meta: [\"content\"],\n img: [\"alt\"],\n input: [\"placeholder\"],\n a: [\"title\"],\n };\n const UNLOCALIZABLE_TAGS = [\"script\", \"style\"];\n\n return createLoader({\n async pull(locale, input) {\n const result: Record<string, any> = {};\n const dom = new JSDOM(input);\n const document = dom.window.document;\n\n const getPath = (node: Node, attribute?: string): string => {\n const indices: number[] = [];\n let current = node as ChildNode;\n let rootParent = \"\";\n\n while (current) {\n const parent = current.parentElement as Element;\n if (!parent) break;\n\n if (parent === document.documentElement) {\n rootParent = current.nodeName.toLowerCase();\n break;\n }\n\n // Get index among significant siblings (non-empty text nodes and elements)\n const siblings = Array.from(parent.childNodes).filter(\n (n) => n.nodeType === 1 || (n.nodeType === 3 && n.textContent?.trim()),\n );\n const index = siblings.indexOf(current);\n if (index !== -1) {\n indices.unshift(index);\n }\n current = parent;\n }\n\n const basePath = rootParent ? `${rootParent}/${indices.join(\"/\")}` : indices.join(\"/\");\n return attribute ? `${basePath}#${attribute}` : basePath;\n };\n\n const processNode = (node: Node) => {\n // Check if node is inside an unlocalizable tag\n let parent = node.parentElement;\n while (parent) {\n if (UNLOCALIZABLE_TAGS.includes(parent.tagName.toLowerCase())) {\n return; // Skip processing this node and its children\n }\n parent = parent.parentElement;\n }\n\n if (node.nodeType === 3) {\n // Text node\n const text = node.textContent || \"\";\n const normalizedText = normalizeTextContent(text, true);\n if (normalizedText) {\n result[getPath(node)] = normalizedText;\n }\n } else if (node.nodeType === 1) {\n // Element node\n const element = node as Element;\n\n // Handle localizable attributes\n const tagName = element.tagName.toLowerCase();\n const attributes = LOCALIZABLE_ATTRIBUTES[tagName] || [];\n attributes.forEach((attr) => {\n const value = element.getAttribute(attr);\n if (value) {\n result[getPath(element, attr)] = value;\n }\n });\n\n // Process all child nodes\n Array.from(element.childNodes)\n .filter((n) => n.nodeType === 1 || (n.nodeType === 3 && n.textContent?.trim()))\n .forEach(processNode);\n }\n };\n\n // Process head and body\n Array.from(document.head.childNodes)\n .filter((n) => n.nodeType === 1 || (n.nodeType === 3 && n.textContent?.trim()))\n .forEach(processNode);\n Array.from(document.body.childNodes)\n .filter((n) => n.nodeType === 1 || (n.nodeType === 3 && n.textContent?.trim()))\n .forEach(processNode);\n\n return result;\n },\n\n async push(locale, data, originalInput) {\n const dom = new JSDOM(originalInput ?? \"<!DOCTYPE html><html><head></head><body></body></html>\");\n const document = dom.window.document;\n\n // Set the HTML lang attribute to the current locale\n const htmlElement = document.documentElement;\n htmlElement.setAttribute(\"lang\", locale);\n\n // Sort paths to ensure proper order of creation\n const paths = Object.keys(data).sort((a, b) => {\n const aDepth = a.split(\"/\").length;\n const bDepth = b.split(\"/\").length;\n return aDepth - bDepth;\n });\n\n paths.forEach((path) => {\n const value = data[path];\n const [nodePath, attribute] = path.split(\"#\");\n const [rootTag, ...indices] = nodePath.split(\"/\");\n\n let parent: Element = rootTag === \"head\" ? document.head : document.body;\n let current: Node | null = parent;\n\n // Navigate to the target node\n for (let i = 0; i < indices.length; i++) {\n const index = parseInt(indices[i]);\n const siblings = Array.from(parent.childNodes).filter(\n (n) => n.nodeType === 1 || (n.nodeType === 3 && n.textContent?.trim()),\n );\n\n if (index >= siblings.length) {\n // Create missing nodes\n if (i === indices.length - 1) {\n // Last index - create text node\n const textNode = document.createTextNode(\"\");\n parent.appendChild(textNode);\n current = textNode;\n } else {\n // Create intermediate element\n const element = document.createElement(\"div\");\n parent.appendChild(element);\n current = element;\n parent = element;\n }\n } else {\n current = siblings[index];\n if (current.nodeType === 1) {\n parent = current as Element;\n }\n }\n }\n\n // Set content\n if (current) {\n if (attribute) {\n (current as Element).setAttribute(attribute, value);\n } else {\n current.textContent = value;\n }\n }\n });\n\n // Preserve formatting by using serialize() with pretty print\n return dom.serialize();\n },\n });\n}\n","import matter from \"gray-matter\";\nimport YAML from \"yaml\";\nimport { ILoader } from \"./_types\";\nimport { createLoader } from \"./_utils\";\n\nconst SECTION_REGEX = /^(#{1,6}\\s.*$|[-=*]{3,}$|!\\[.*\\]\\(.*\\)$|\\[.*\\]\\(.*\\)$)/gm;\nconst MD_SECTION_PREFIX = \"md-section-\";\nconst FM_ATTR_PREFIX = \"fm-attr-\";\n\nconst yamlEngine = {\n parse: (str: string) => YAML.parse(str),\n stringify: (obj: any) => YAML.stringify(obj, { defaultStringType: \"PLAIN\" }),\n};\n\nexport default function createMarkdownLoader(): ILoader<string, Record<string, string>> {\n return createLoader({\n async pull(locale, input) {\n const { data: frontmatter, content } = matter(input, {\n engines: {\n yaml: yamlEngine,\n },\n });\n\n const sections = content\n .split(SECTION_REGEX)\n .map((section) => section?.trim() ?? \"\")\n .filter(Boolean);\n\n return {\n ...Object.fromEntries(\n sections\n .map((section, index) => [`${MD_SECTION_PREFIX}${index}`, section])\n .filter(([, section]) => Boolean(section)),\n ),\n ...Object.fromEntries(Object.entries(frontmatter).map(([key, value]) => [`${FM_ATTR_PREFIX}${key}`, value])),\n };\n },\n async push(locale, data: Record<string, string>) {\n const frontmatter = Object.fromEntries(\n Object.entries(data)\n .filter(([key]) => key.startsWith(FM_ATTR_PREFIX))\n .map(([key, value]) => [key.replace(FM_ATTR_PREFIX, \"\"), value]),\n );\n\n let content = Object.entries(data)\n .filter(([key]) => key.startsWith(MD_SECTION_PREFIX))\n .sort(([a], [b]) => Number(a.split(\"-\").pop()) - Number(b.split(\"-\").pop()))\n .map(([, value]) => value?.trim() ?? \"\")\n .filter(Boolean)\n .join(\"\\n\\n\");\n\n if (Object.keys(frontmatter).length > 0) {\n content = `\\n${content}`;\n }\n\n return matter.stringify(content, frontmatter, {\n engines: {\n yaml: yamlEngine,\n },\n });\n },\n });\n}\n","import { ILoader } from \"./_types\";\nimport { createLoader } from \"./_utils\";\n\nexport default function createPropertiesLoader(): ILoader<string, Record<string, any>> {\n return createLoader({\n async pull(locale, text) {\n const result: Record<string, string> = {};\n const lines = text.split(\"\\n\");\n\n for (const line of lines) {\n const trimmed = line.trim();\n\n // Skip empty lines and comments\n if (isSkippableLine(trimmed)) {\n continue;\n }\n\n const { key, value } = parsePropertyLine(trimmed);\n if (key) {\n result[key] = value;\n }\n }\n\n return result;\n },\n async push(locale, payload) {\n const result = Object.entries(payload)\n .filter(([_, value]) => value != null)\n .map(([key, value]) => `${key}=${value}`)\n .join(\"\\n\");\n\n return result;\n },\n });\n}\n\nfunction isSkippableLine(line: string): boolean {\n return !line || line.startsWith(\"#\");\n}\n\nfunction parsePropertyLine(line: string): { key: string; value: string } {\n const [key, ...valueParts] = line.split(\"=\");\n return {\n key: key?.trim() || \"\",\n value: valueParts.join(\"=\").trim(),\n };\n}\n","import { ILoader } from \"./_types\";\nimport { createLoader } from \"./_utils\";\n\nexport default function createXcodeStringsLoader(): ILoader<string, Record<string, any>> {\n return createLoader({\n async pull(locale, input) {\n const lines = input.split(\"\\n\");\n const result: Record<string, string> = {};\n\n for (const line of lines) {\n const trimmedLine = line.trim();\n if (trimmedLine && !trimmedLine.startsWith(\"//\")) {\n const match = trimmedLine.match(/^\"(.+)\"\\s*=\\s*\"(.+)\";$/);\n if (match) {\n const [, key, value] = match;\n result[key] = unescapeXcodeString(value);\n }\n }\n }\n\n return result;\n },\n async push(locale, payload) {\n const lines = Object.entries(payload).map(([key, value]) => {\n const escapedValue = escapeXcodeString(value);\n return `\"${key}\" = \"${escapedValue}\";`;\n });\n return lines.join(\"\\n\");\n },\n });\n}\n\nfunction unescapeXcodeString(str: string): string {\n return str.replace(/\\\\\"/g, '\"').replace(/\\\\n/g, \"\\n\").replace(/\\\\\\\\/g, \"\\\\\");\n}\n\nfunction escapeXcodeString(str: string): string {\n return str.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"').replace(/\\n/g, \"\\\\n\");\n}\n","import plist from \"plist\";\nimport { ILoader } from \"./_types\";\nimport { createLoader } from \"./_utils\";\nimport { CLIError } from \"../utils/errors\";\n\nconst emptyData = [\n '<?xml version=\"1.0\" encoding=\"UTF-8\"?>',\n '<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">',\n '<plist version=\"1.0\">',\n \"<dict/>\",\n \"</plist>\",\n].join(\"\\n\");\n\nexport default function createXcodeStringsdictLoader(): ILoader<string, Record<string, any>> {\n return createLoader({\n async pull(locale, input) {\n try {\n const parsed = plist.parse(input || emptyData);\n if (typeof parsed !== \"object\" || parsed === null) {\n throw new CLIError({\n message: \"Invalid .stringsdict format\",\n docUrl: \"invalidStringDict\",\n });\n }\n return parsed as Record<string, any>;\n } catch (error: any) {\n throw new CLIError({\n message: `Invalid .stringsdict format: ${error.message}`,\n docUrl: \"invalidStringDict\",\n });\n }\n },\n async push(locale, payload) {\n const plistContent = plist.build(payload);\n return plistContent;\n },\n });\n}\n","import { ILoader } from \"./_types\";\nimport { createLoader } from \"./_utils\";\nimport _ from \"lodash\";\n\nexport default function createXcodeXcstringsLoader(\n defaultLocale: string,\n): ILoader<Record<string, any>, Record<string, any>> {\n return createLoader({\n async pull(locale, input, initCtx) {\n const resultData: Record<string, any> = {};\n const isSourceLanguage = locale === defaultLocale;\n\n for (const [translationKey, _translationEntity] of Object.entries((input as any).strings)) {\n const rootTranslationEntity = _translationEntity as any;\n\n if (rootTranslationEntity.shouldTranslate === false) {\n continue;\n }\n\n const langTranslationEntity = rootTranslationEntity?.localizations?.[locale];\n\n if (langTranslationEntity) {\n if (\"stringUnit\" in langTranslationEntity) {\n resultData[translationKey] = langTranslationEntity.stringUnit.value;\n } else if (\"variations\" in langTranslationEntity) {\n if (\"plural\" in langTranslationEntity.variations) {\n resultData[translationKey] = {};\n const pluralForms = langTranslationEntity.variations.plural;\n for (const form in pluralForms) {\n if (pluralForms[form]?.stringUnit?.value) {\n resultData[translationKey][form] = pluralForms[form].stringUnit.value;\n }\n }\n }\n }\n } else if (isSourceLanguage) {\n resultData[translationKey] = translationKey;\n }\n }\n\n return resultData;\n },\n async push(locale, payload, originalInput) {\n const langDataToMerge: any = {};\n langDataToMerge.strings = {};\n\n const input = _.cloneDeep(originalInput) || { sourceLanguage: locale, strings: {} };\n\n for (const [key, value] of Object.entries(payload)) {\n if (value === null || value === undefined) {\n continue;\n }\n\n const hasDoNotTranslateFlag =\n originalInput &&\n (originalInput as any).strings &&\n (originalInput as any).strings[key] &&\n (originalInput as any).strings[key].shouldTranslate === false;\n\n if (typeof value === \"string\") {\n langDataToMerge.strings[key] = {\n extractionState: originalInput?.strings?.[key]?.extractionState,\n localizations: {\n [locale]: {\n stringUnit: {\n state: \"translated\",\n value,\n },\n },\n },\n };\n\n if (hasDoNotTranslateFlag) {\n langDataToMerge.strings[key].shouldTranslate = false;\n }\n } else {\n const updatedVariations: any = {};\n\n for (const form in value) {\n updatedVariations[form] = {\n stringUnit: {\n state: \"translated\",\n value: value[form],\n },\n };\n }\n\n langDataToMerge.strings[key] = {\n extractionState: \"manual\",\n localizations: {\n [locale]: {\n variations: {\n plural: updatedVariations,\n },\n },\n },\n };\n\n if (hasDoNotTranslateFlag) {\n langDataToMerge.strings[key].shouldTranslate = false;\n }\n }\n }\n\n const result = _.merge({}, originalInput, langDataToMerge);\n return result;\n },\n });\n}\n","import path from \"path\";\nimport prettier, { Options } from \"prettier\";\nimport { ILoader } from \"./_types\";\nimport { createLoader } from \"./_utils\";\n\nexport type PrettierLoaderOptions = {\n parser: Options[\"parser\"];\n bucketPathPattern: string;\n stage?: \"pull\" | \"push\" | \"both\";\n alwaysFormat?: boolean;\n};\n\nexport default function createPrettierLoader(\n options: PrettierLoaderOptions,\n): ILoader<string, string> {\n const stage = options.stage || \"both\";\n return createLoader({\n async pull(locale, data) {\n if (![\"pull\", \"both\"].includes(stage)) {\n return data;\n }\n\n const draftPath = options.bucketPathPattern.replaceAll(\n \"[locale]\",\n locale,\n );\n const finalPath = path.resolve(draftPath);\n\n return await formatDataWithPrettier(data, finalPath, options);\n },\n async push(locale, data) {\n if (![\"push\", \"both\"].includes(stage)) {\n return data;\n }\n\n const draftPath = options.bucketPathPattern.replaceAll(\n \"[locale]\",\n locale,\n );\n const finalPath = path.resolve(draftPath);\n\n return await formatDataWithPrettier(data, finalPath, options);\n },\n });\n}\n\nasync function loadPrettierConfig(filePath: string) {\n try {\n const config = await prettier.resolveConfig(filePath);\n return config;\n } catch (error) {\n return {};\n }\n}\n\nasync function formatDataWithPrettier(\n data: string,\n filePath: string,\n options: PrettierLoaderOptions,\n): Promise<string> {\n const prettierConfig = await loadPrettierConfig(filePath);\n\n // Skip formatting if no config found and alwaysFormat is not enabled\n if (!prettierConfig && !options.alwaysFormat) {\n return data;\n }\n\n const config: Options = {\n ...(prettierConfig || { printWidth: 2500, bracketSameLine: false }),\n parser: options.parser,\n // For HTML parser, preserve comments and quotes\n ...(options.parser === \"html\"\n ? {\n htmlWhitespaceSensitivity: \"ignore\",\n singleQuote: false,\n embeddedLanguageFormatting: \"off\",\n }\n : {}),\n };\n\n try {\n // format with prettier\n return await prettier.format(data, config);\n } catch (error) {\n if (\n error instanceof Error &&\n error.message.startsWith(\"Cannot find package\")\n ) {\n console.log();\n console.log(\n \"⚠️ Prettier plugins are not installed. Formatting without plugins.\",\n );\n console.log(\n \"⚠️ To use prettier plugins install project dependencies before running Lingo.dev.\",\n );\n\n config.plugins = [];\n\n // clear file system structure cache\n await prettier.clearConfigCache();\n\n // format again without plugins\n return await prettier.format(data, config);\n }\n\n throw error;\n }\n}\n","import _ from \"lodash\";\nimport _isUrl from \"is-url\";\nimport { isValid, parseISO } from \"date-fns\";\n\nimport { ILoader } from \"./_types\";\nimport { createLoader } from \"./_utils\";\n\nexport default function createUnlocalizableLoader(\n isCacheRestore: boolean = false,\n returnUnlocalizedKeys: boolean = false,\n): ILoader<Record<string, any>, Record<string, any>> {\n const rules = {\n isEmpty: (v: any) => _.isEmpty(v),\n isNumber: (v: any) => typeof v === \"number\" || /^[0-9]+$/.test(v),\n isBoolean: (v: any) => _.isBoolean(v),\n isIsoDate: (v: any) => _.isString(v) && _isIsoDate(v),\n isSystemId: (v: any) => _.isString(v) && _isSystemId(v),\n isUrl: (v: any) => _.isString(v) && _isUrl(v),\n };\n return createLoader({\n async pull(locale, input) {\n const passthroughKeys = Object.entries(input)\n .filter(([key, value]) => {\n // Check each rule individually for better debugging\n for (const [ruleName, rule] of Object.entries(rules)) {\n if (rule(value)) {\n return true;\n }\n }\n return false;\n })\n .map(([key, _]) => key);\n\n const result = _.omitBy(input, (_, key) => passthroughKeys.includes(key));\n\n if (returnUnlocalizedKeys) {\n result.unlocalizable = _.omitBy(input, (_, key) => !passthroughKeys.includes(key));\n }\n\n return result;\n },\n async push(locale, data, originalInput) {\n if (isCacheRestore) {\n return _.merge({}, data);\n }\n\n const result = _.merge({}, originalInput, data);\n return result;\n },\n });\n}\n\nfunction _isSystemId(v: string) {\n return /^(?=.*[A-Z])(?=.*[a-z])(?=.*\\d)[A-Za-z0-9]{22}$/.test(v);\n}\n\nfunction _isIsoDate(v: string) {\n return isValid(parseISO(v));\n}\n","import _ from \"lodash\";\nimport gettextParser from \"gettext-parser\";\nimport { GetTextTranslations } from \"gettext-parser\";\nimport { ILoader } from \"../_types\";\nimport { composeLoaders, createLoader } from \"../_utils\";\n\nexport type PoTranslationEntry = GetTextTranslations[\"translations\"][\"\"];\nexport type PoTranslationValue = { singular: string; plural: string | null };\n\nexport type PoLoaderParams = {\n multiline: boolean;\n};\n\nexport default function createPoLoader(\n params: PoLoaderParams = { multiline: false },\n): ILoader<string, Record<string, PoTranslationValue>> {\n return composeLoaders(createPoDataLoader(params), createPoContentLoader());\n}\n\nexport function createPoDataLoader(\n params: PoLoaderParams,\n): ILoader<string, PoTranslationEntry> {\n return createLoader({\n async pull(locale, input) {\n const parsedPo = gettextParser.po.parse(input);\n const result: PoTranslationEntry = {};\n const sections = input.split(\"\\n\\n\").filter(Boolean);\n for (const section of sections) {\n const sectionPo = gettextParser.po.parse(section);\n // skip section with no translations (some sections might have only obsolete entries)\n if (Object.keys(sectionPo.translations).length === 0) {\n continue;\n }\n\n const contextKey = _.keys(sectionPo.translations)[0];\n const entries = sectionPo.translations[contextKey];\n Object.entries(entries).forEach(([msgid, entry]) => {\n if (msgid && entry.msgid) {\n const context = entry.msgctxt || \"\";\n const fullEntry = parsedPo.translations[context]?.[msgid];\n if (fullEntry) {\n result[msgid] = fullEntry;\n }\n }\n });\n }\n return result;\n },\n\n async push(locale, data, originalInput, originalLocale, pullInput) {\n // Parse each section to maintain structure\n const currentSections = pullInput?.split(\"\\n\\n\").filter(Boolean) || [];\n const originalSections =\n originalInput?.split(\"\\n\\n\").filter(Boolean) || [];\n const result = originalSections\n .map((section) => {\n const sectionPo = gettextParser.po.parse(section);\n // skip section with no translations (some sections might have only obsolete entries)\n if (Object.keys(sectionPo.translations).length === 0) {\n return null;\n }\n\n const contextKey = _.keys(sectionPo.translations)[0];\n const entries = sectionPo.translations[contextKey];\n const msgid = Object.keys(entries).find((key) => entries[key].msgid);\n if (!msgid) {\n // If the section is empty, try to find it in the current sections\n const currentSection = currentSections.find((cs) => {\n const csPo = gettextParser.po.parse(cs);\n const csContextKey = _.keys(csPo.translations)[0];\n const csEntries = csPo.translations[csContextKey];\n const csMsgid = Object.keys(csEntries).find(\n (key) => csEntries[key].msgid,\n );\n return csMsgid === msgid;\n });\n\n if (currentSection) {\n return currentSection;\n }\n return section;\n }\n if (data[msgid]) {\n const updatedPo = _.merge({}, sectionPo, {\n translations: {\n [contextKey]: {\n [msgid]: {\n msgstr: data[msgid].msgstr,\n },\n },\n },\n });\n const updatedSection = gettextParser.po\n .compile(updatedPo, { foldLength: params.multiline ? 76 : false })\n .toString()\n .replace(\n [`msgid \"\"`, `msgstr \"Content-Type: text/plain\\\\n\"`].join(\"\\n\"),\n \"\",\n )\n .trim();\n return preserveCommentOrder(updatedSection, section);\n }\n return section.trim();\n })\n .filter(Boolean)\n .join(\"\\n\\n\");\n return result;\n },\n });\n}\n\nexport function createPoContentLoader(): ILoader<\n PoTranslationEntry,\n Record<string, PoTranslationEntry>\n> {\n return createLoader({\n async pull(locale, input, initCtx, originalLocale) {\n const result = _.chain(input)\n .entries()\n .filter(([, entry]) => !!entry.msgid)\n .map(([, entry]) => {\n const singularFallback =\n locale === originalLocale ? entry.msgid : null;\n const pluralFallback =\n locale === originalLocale\n ? entry.msgid_plural || entry.msgid\n : null;\n const hasPlural = entry.msgstr.length > 1;\n return [\n entry.msgid,\n {\n singular: entry.msgstr[0] || singularFallback,\n plural: hasPlural\n ? ((entry.msgstr[1] || pluralFallback) as string | null)\n : null,\n },\n ];\n })\n .fromPairs()\n .value();\n return result;\n },\n async push(locale, data, originalInput) {\n const result = _.chain(originalInput)\n .entries()\n .map(([, entry]) => [\n entry.msgid,\n {\n ...entry,\n msgstr: [\n data[entry.msgid]?.singular,\n data[entry.msgid]?.plural || null,\n ].filter(Boolean),\n },\n ])\n .fromPairs()\n .value();\n\n return result;\n },\n });\n}\n\nfunction preserveCommentOrder(section: string, originalSection: string) {\n // Split both sections into lines\n const sectionLines = section.split(/\\r?\\n/);\n const originalLines = originalSection.split(/\\r?\\n/);\n\n // Helper: is a comment line\n const isComment = (line: string) => line.trim().startsWith(\"#\");\n\n // Extract comment lines and their indices\n const sectionComments = sectionLines.filter(isComment);\n const nonCommentLines = sectionLines.filter((line) => !isComment(line));\n\n // If there are no comments in the section, return the section as is\n if (sectionComments.length <= 1) {\n return section;\n }\n\n // Extract the order of comment lines from the original section\n const originalCommentOrder = originalLines.filter(isComment);\n\n // Build a map from comment content (trimmed) to the actual comment line in the new section\n const commentMap = new Map<string, string>();\n for (const line of sectionComments) {\n commentMap.set(line.trim(), line);\n }\n\n // Reorder comments to match the original order, using the new section's comment lines\n const reorderedComments: string[] = [];\n for (const orig of originalCommentOrder) {\n const trimmed = orig.trim();\n if (commentMap.has(trimmed)) {\n reorderedComments.push(commentMap.get(trimmed)!);\n commentMap.delete(trimmed);\n }\n }\n // Add any new comments from the new section that weren't in the original, preserving their order\n for (const line of sectionComments) {\n if (!originalCommentOrder.some((orig) => orig.trim() === line.trim())) {\n reorderedComments.push(line);\n }\n }\n\n // Reconstruct the section: comments (in order) + non-comment lines (in order)\n return [...reorderedComments, ...nonCommentLines]\n .join(\"\\n\")\n .replace(/\\n{3,}/g, \"\\n\\n\")\n .trim();\n}\n","import xliff from \"xliff\";\nimport { ILoader } from \"./_types\";\nimport { createLoader } from \"./_utils\";\n\nexport default function createXliffLoader(): ILoader<string, Record<string, any>> {\n return createLoader({\n async pull(locale, input) {\n const js = await xliff.xliff2js(input);\n return js || {};\n },\n async push(locale, payload) {\n const res = await xliff.js2xliff(payload);\n return res.trim();\n },\n });\n}\n","import { parseStringPromise, Builder } from \"xml2js\";\nimport { ILoader } from \"./_types\";\nimport { createLoader } from \"./_utils\";\n\nfunction normalizeXMLString(xmlString: string): string {\n return xmlString.replace(/\\s+/g, \" \").replace(/>\\s+</g, \"><\").replace(\"\\n\", \"\").trim();\n}\n\nexport default function createXmlLoader(): ILoader<string, Record<string, any>> {\n return createLoader({\n async pull(locale, input) {\n let result: Record<string, any> = {};\n\n try {\n const parsed = await parseStringPromise(input, {\n explicitArray: false,\n mergeAttrs: false,\n normalize: true,\n preserveChildrenOrder: true,\n normalizeTags: true,\n includeWhiteChars: true,\n trim: true,\n });\n result = parsed;\n } catch (error) {\n console.error(\"Failed to parse XML:\", error);\n result = {};\n }\n\n return result;\n },\n\n async push(locale, data) {\n try {\n const builder = new Builder({ headless: true });\n const xmlOutput = builder.buildObject(data);\n const expectedOutput = normalizeXMLString(xmlOutput);\n return expectedOutput;\n } catch (error) {\n console.error(\"Failed to build XML:\", error);\n return \"\";\n }\n },\n });\n}\n","import { ILoader } from \"./_types\";\nimport { createLoader } from \"./_utils\";\nimport srtParser from \"srt-parser-2\";\n\nexport default function createSrtLoader(): ILoader<string, Record<string, any>> {\n const parser = new srtParser();\n return createLoader({\n async pull(locale, input) {\n const parsed = parser.fromSrt(input) || [];\n const result: Record<string, string> = {};\n\n parsed.forEach((entry) => {\n const key = `${entry.id}#${entry.startTime}-${entry.endTime}`;\n result[key] = entry.text;\n });\n\n return result;\n },\n\n async push(locale, payload) {\n const output = Object.entries(payload).map(([key, text]) => {\n const [id, timeRange] = key.split(\"#\");\n const [startTime, endTime] = timeRange.split(\"-\");\n\n return {\n id: id,\n startTime: startTime,\n startSeconds: 0,\n endTime: endTime,\n endSeconds: 0,\n text: text,\n };\n });\n\n const srtContent = parser.toSrt(output).trim().replace(/\\r?\\n/g, \"\\n\");\n return srtContent;\n },\n });\n}\n","import fs from \"fs\";\nimport JSON5 from \"json5\";\nimport { composeLoaders } from \"../_utils\";\nimport { datoConfigSchema } from \"./_base\";\nimport createDatoFilterLoader from \"./filter\";\nimport createDatoApiLoader from \"./api\";\nimport createDatoExtractLoader from \"./extract\";\n\nexport default function createDatoLoader(configFilePath: string) {\n try {\n const configContent = fs.readFileSync(configFilePath, \"utf-8\");\n const datoConfig = datoConfigSchema.parse(JSON5.parse(configContent));\n\n return composeLoaders(\n createDatoApiLoader(datoConfig, (updatedConfig) =>\n fs.writeFileSync(configFilePath, JSON5.stringify(updatedConfig, null, 2)),\n ),\n createDatoFilterLoader(),\n createDatoExtractLoader(),\n );\n } catch (error: any) {\n throw new Error([`Failed to parse DatoCMS config file.`, `Error: ${error.message}`].join(\"\\n\\n\"));\n }\n}\n","import Z from \"zod\";\n\n// DatoCMS config\nexport const datoConfigSchema = Z.object({\n project: Z.string(),\n models: Z.record(\n Z.string(),\n Z.object({\n records: Z.array(Z.string()).optional(),\n fields: Z.array(Z.string()).optional(),\n }),\n ),\n});\n\nexport type DatoConfig = Z.infer<typeof datoConfigSchema>;\n\n// DatoCMS settings\nexport const datoSettingsSchema = Z.object({\n auth: Z.object({\n apiKey: Z.string(),\n }),\n});\n\nexport type DatoSettings = Z.infer<typeof datoSettingsSchema>;\n\nexport const DEFAULT_LOCALE = \"en\";\n\n//\n\nexport type DatoRecordPayload = {\n [field: string]: {\n [locale: string]: DatoValue;\n };\n};\n\nexport type DatoValue = DatoSimpleValue | DatoComplexValue;\nexport type DatoSimpleValue = DatoPrimitive | DastDocument;\nexport type DatoComplexValue = DatoBlock | DatoBlock[];\n\nexport type DatoPrimitive = null | string | boolean | number;\n\nexport type DastDocument = {\n schema: \"dast\";\n document: DastDocumentNode;\n};\n\nexport type DastDocumentNode = {\n type: \"root\" | \"span\" | \"paragraph\";\n value?: DatoPrimitive;\n children?: DastDocumentNode[];\n};\n\nexport type DatoBlock = {\n id?: string;\n type: \"item\";\n attributes: Record<string, DatoSimpleValue>;\n relationships: any;\n};\n","import _ from \"lodash\";\nimport fs from \"fs\";\nimport { ILoader } from \"../_types\";\nimport { createLoader } from \"../_utils\";\nimport { DatoApiLoaderOutput } from \"./api\";\n\nexport type DatoFilterLoaderOutput = {\n [modelId: string]: {\n [recordId: string]: {\n [fieldName: string]: any;\n };\n };\n};\n\nexport default function createDatoFilterLoader(): ILoader<DatoApiLoaderOutput, DatoFilterLoaderOutput> {\n return createLoader({\n async pull(locale, input) {\n const result: DatoFilterLoaderOutput = {};\n\n for (const [modelId, modelInfo] of _.entries(input)) {\n result[modelId] = {};\n for (const record of modelInfo.records) {\n result[modelId][record.id] = _.chain(modelInfo.fields)\n .mapKeys((field) => field.api_key)\n .mapValues((field) => _.get(record, [field.api_key, locale]))\n .value();\n }\n }\n\n return result;\n },\n async push(locale, data, originalInput, originalLocale) {\n const result = _.cloneDeep(originalInput || {});\n\n for (const [modelId, modelInfo] of _.entries(result)) {\n for (const record of modelInfo.records) {\n for (const [fieldId, fieldValue] of _.entries(record)) {\n const fieldInfo = modelInfo.fields.find((field) => field.api_key === fieldId);\n if (fieldInfo) {\n const sourceFieldValue = _.get(fieldValue, [originalLocale]);\n const targetFieldValue = _.get(data, [modelId, record.id, fieldId]);\n if (targetFieldValue) {\n _.set(record, [fieldId, locale], targetFieldValue);\n } else {\n _.set(record, [fieldId, locale], sourceFieldValue);\n }\n\n _.chain(fieldValue)\n .keys()\n .reject((loc) => loc === locale || loc === originalLocale)\n .filter((loc) => _.isEmpty(_.get(fieldValue, [loc])))\n .forEach((loc) => _.set(record, [fieldId, loc], sourceFieldValue))\n .value();\n }\n }\n }\n }\n\n return result;\n },\n });\n}\n","import _ from \"lodash\";\nimport { ILoader } from \"../_types\";\nimport { createLoader } from \"../_utils\";\nimport createDatoClient, { DatoClient } from \"./_utils\";\nimport { SimpleSchemaTypes } from \"@datocms/cma-client-node\";\nimport { DatoConfig } from \"./_base\";\nimport inquirer from \"inquirer\";\n\nexport type DatoApiLoaderOutput = {\n [modelId: string]: {\n fields: SimpleSchemaTypes.Field[];\n records: SimpleSchemaTypes.Item[];\n };\n};\n\nexport type DatoApiLoaderCtx = {\n models: {\n [modelId: string]: {\n fields: SimpleSchemaTypes.Field[];\n records: SimpleSchemaTypes.Item[];\n };\n };\n};\n\nexport default function createDatoApiLoader(\n config: DatoConfig,\n onConfigUpdate: (config: DatoConfig) => void,\n): ILoader<void, DatoApiLoaderOutput, DatoApiLoaderCtx> {\n const dato = createDatoClient({\n apiKey: process.env.DATO_API_TOKEN || \"\",\n projectId: config.project,\n });\n return createLoader({\n init: async () => {\n const result: DatoApiLoaderCtx = {\n models: {},\n };\n const updatedConfig = _.cloneDeep(config);\n console.log(`Initializing DatoCMS loader...`);\n\n const project = await dato.findProject();\n const modelChoices = await getModelChoices(dato, config);\n const selectedModels = await promptModelSelection(modelChoices);\n\n for (const modelId of selectedModels) {\n if (!updatedConfig.models[modelId]) {\n updatedConfig.models[modelId] = {\n fields: [],\n records: [],\n };\n }\n }\n\n for (const modelId of Object.keys(updatedConfig.models)) {\n if (!selectedModels.includes(modelId)) {\n delete updatedConfig.models[modelId];\n }\n }\n\n for (const modelId of _.keys(updatedConfig.models)) {\n const { modelName, fields } = await getModelFields(dato, modelId);\n\n if (fields.length > 0) {\n result.models[modelId] = { fields: [], records: [] };\n\n const fieldInfos = await getFieldDetails(dato, fields);\n const fieldChoices = createFieldChoices(fieldInfos);\n const selectedFields = await promptFieldSelection(modelName, fieldChoices);\n\n for (const fieldInfo of fieldInfos) {\n const isLocalized = await updateFieldLocalization(dato, fieldInfo, selectedFields.includes(fieldInfo.id));\n if (isLocalized) {\n result.models[modelId].fields.push(fieldInfo);\n updatedConfig.models[modelId].fields = _.uniq([\n ...(updatedConfig.models[modelId].fields || []),\n fieldInfo.api_key,\n ]);\n }\n }\n\n const records = await dato.findRecordsForModel(modelId);\n const recordChoices = createRecordChoices(records, config.models[modelId]?.records || [], project);\n const selectedRecords = await promptRecordSelection(modelName, recordChoices);\n\n result.models[modelId].records = records.filter((record) => selectedRecords.includes(record.id));\n updatedConfig.models[modelId].records = selectedRecords;\n }\n }\n console.log(`DatoCMS loader initialized.`);\n onConfigUpdate(updatedConfig);\n return result;\n },\n async pull(locale, input, initCtx) {\n const result: DatoApiLoaderOutput = {};\n\n for (const modelId of _.keys(initCtx?.models || {})) {\n let records = initCtx?.models[modelId].records || [];\n const recordIds = records.map((record) => record.id);\n records = await dato.findRecords(recordIds);\n console.log(`Fetched ${records.length} records for model ${modelId}`);\n\n if (records.length > 0) {\n result[modelId] = {\n fields: initCtx?.models?.[modelId]?.fields || [],\n records: records,\n };\n }\n }\n return result;\n },\n async push(locale, data, originalInput) {\n for (const modelId of _.keys(data)) {\n for (let i = 0; i < data[modelId].records.length; i++) {\n const record = data[modelId].records[i];\n console.log(`Updating record ${i + 1}/${data[modelId].records.length} for model ${modelId}...`);\n await dato.updateRecord(record.id, record);\n }\n }\n },\n });\n}\n\nexport async function getModelFields(dato: any, modelId: string) {\n const modelInfo = await dato.findModel(modelId);\n return {\n modelName: modelInfo.name,\n fields: _.filter(modelInfo.fields, (field) => field.type === \"field\"),\n };\n}\n\nexport async function getFieldDetails(dato: DatoClient, fields: SimpleSchemaTypes.Field[]) {\n return Promise.all(fields.map((field) => dato.findField(field.id)));\n}\n\nexport function createFieldChoices(fieldInfos: SimpleSchemaTypes.Field[]) {\n return fieldInfos.map((field) => ({\n name: field.label,\n value: field.id,\n checked: field.localized,\n }));\n}\n\nexport async function promptFieldSelection(modelName: string, choices: any[]) {\n const { selectedFields } = await inquirer.prompt([\n {\n type: \"checkbox\",\n name: \"selectedFields\",\n message: `Select fields to enable localization for model \"${modelName}\":`,\n choices,\n pageSize: process.stdout.rows - 4, // Subtract some rows for prompt text and margins\n },\n ]);\n return selectedFields;\n}\n\nexport async function updateFieldLocalization(\n dato: any,\n fieldInfo: SimpleSchemaTypes.Field,\n shouldBeLocalized: boolean,\n) {\n if (shouldBeLocalized !== fieldInfo.localized) {\n console.log(`${shouldBeLocalized ? \"Enabling\" : \"Disabling\"} localization for ${fieldInfo.label}...`);\n await dato.updateField(fieldInfo.id, { localized: shouldBeLocalized });\n }\n return shouldBeLocalized;\n}\n\nexport function createRecordChoices(\n records: SimpleSchemaTypes.Item[],\n selectedIds: string[] = [],\n project: SimpleSchemaTypes.Site,\n) {\n return records.map((record) => ({\n name: `${record.id} - https://${project.internal_domain}/editor/item_types/${record.item_type.id}/items/${record.id}`,\n value: record.id,\n checked: selectedIds?.includes(record.id),\n }));\n}\n\nexport async function promptRecordSelection(modelName: string, choices: any[]) {\n const { selectedRecords } = await inquirer.prompt([\n {\n type: \"checkbox\",\n name: \"selectedRecords\",\n message: `Select records to include for model \"${modelName}\":`,\n choices,\n pageSize: process.stdout.rows - 4, // Subtract some rows for prompt text and margins\n },\n ]);\n return selectedRecords;\n}\n\nexport async function getModelChoices(dato: DatoClient, config: DatoConfig) {\n const models = await dato.findModels();\n return models.map((model) => ({\n name: `${model.name} (${model.api_key})`,\n value: model.id,\n checked: config.models[model.id] !== undefined,\n pageSize: process.stdout.rows - 4, // Subtract some rows for prompt text and margins\n }));\n}\n\nexport async function promptModelSelection(choices: any[]) {\n const { selectedModels } = await inquirer.prompt([\n {\n type: \"checkbox\",\n name: \"selectedModels\",\n message: \"Select models to include:\",\n choices,\n pageSize: process.stdout.rows - 4, // Subtract some rows for prompt text and margins\n },\n ]);\n return selectedModels;\n}\n","import _ from \"lodash\";\nimport { buildClient, SimpleSchemaTypes } from \"@datocms/cma-client-node\";\nimport { DastDocument, DatoBlock, DatoSimpleValue, DatoValue } from \"./_base\";\nimport { DastDocumentNode } from \"./_base\";\n\ntype DatoClientParams = {\n apiKey: string;\n projectId: string;\n};\n\nexport type DatoClient = ReturnType<typeof createDatoClient>;\n\nexport default function createDatoClient(params: DatoClientParams) {\n if (!params.apiKey) {\n throw new Error(\"Missing required environment variable: DATO_API_TOKEN. Please set this variable and try again.\");\n }\n const dato = buildClient({\n apiToken: params.apiKey,\n extraHeaders: {\n \"X-Exclude-Invalid\": \"true\",\n },\n });\n\n return {\n findProject: async (): Promise<SimpleSchemaTypes.Site> => {\n const project = await dato.site.find();\n return project;\n },\n updateField: async (fieldId: string, payload: SimpleSchemaTypes.FieldUpdateSchema): Promise<void> => {\n try {\n await dato.fields.update(fieldId, payload);\n } catch (_error: any) {\n throw new Error(\n [\n `Failed to update field in DatoCMS.`,\n `Field ID: ${fieldId}`,\n `Payload: ${JSON.stringify(payload, null, 2)}`,\n `Error: ${JSON.stringify(_error, null, 2)}`,\n ].join(\"\\n\\n\"),\n );\n }\n },\n findField: async (fieldId: string): Promise<SimpleSchemaTypes.Field> => {\n try {\n const field = await dato.fields.find(fieldId);\n if (!field) {\n throw new Error(`Field ${fieldId} not found`);\n }\n return field;\n } catch (_error: any) {\n throw new Error(\n [\n `Failed to find field in DatoCMS.`,\n `Field ID: ${fieldId}`,\n `Error: ${JSON.stringify(_error, null, 2)}`,\n ].join(\"\\n\\n\"),\n );\n }\n },\n findModels: async (): Promise<SimpleSchemaTypes.ItemType[]> => {\n try {\n const models = await dato.itemTypes.list();\n const modelsWithoutBlocks = models.filter((model) => !model.modular_block);\n return modelsWithoutBlocks;\n } catch (_error: any) {\n throw new Error(\n [`Failed to find models in DatoCMS.`, `Error: ${JSON.stringify(_error, null, 2)}`].join(\"\\n\\n\"),\n );\n }\n },\n findModel: async (modelId: string): Promise<SimpleSchemaTypes.ItemType> => {\n try {\n const model = await dato.itemTypes.find(modelId);\n if (!model) {\n throw new Error(`Model ${modelId} not found`);\n }\n return model;\n } catch (_error: any) {\n throw new Error(\n [\n `Failed to find model in DatoCMS.`,\n `Model ID: ${modelId}`,\n `Error: ${JSON.stringify(_error, null, 2)}`,\n ].join(\"\\n\\n\"),\n );\n }\n },\n findRecords: async (records: string[], limit: number = 100): Promise<SimpleSchemaTypes.Item[]> => {\n return dato.items\n .list({\n nested: true,\n version: \"current\",\n limit,\n filter: {\n projectId: params.projectId,\n only_valid: \"true\",\n ids: !records.length ? undefined : records.join(\",\"),\n },\n })\n .catch((error: any) => Promise.reject(error?.response?.body?.data?.[0] || error));\n },\n findRecordsForModel: async (modelId: string, records?: string[]): Promise<SimpleSchemaTypes.Item[]> => {\n try {\n const result = await dato.items\n .list({\n nested: true,\n version: \"current\",\n filter: {\n type: modelId,\n only_valid: \"true\",\n ids: !records?.length ? undefined : records.join(\",\"),\n },\n })\n .catch((error: any) => Promise.reject(error?.response?.body?.data?.[0] || error));\n return result;\n } catch (_error: any) {\n throw new Error(\n [\n `Failed to find records for model in DatoCMS.`,\n `Model ID: ${modelId}`,\n `Error: ${JSON.stringify(_error, null, 2)}`,\n ].join(\"\\n\\n\"),\n );\n }\n },\n updateRecord: async (id: string, payload: any): Promise<void> => {\n try {\n await dato.items\n .update(id, payload)\n .catch((error: any) => Promise.reject(error?.response?.body?.data?.[0] || error));\n } catch (_error: any) {\n if (_error?.attributes?.details?.message) {\n throw new Error(\n [\n `${_error.attributes.details.message}`,\n `Payload: ${JSON.stringify(payload, null, 2)}`,\n `Error: ${JSON.stringify(_error, null, 2)}`,\n ].join(\"\\n\\n\"),\n );\n }\n\n throw new Error(\n [\n `Failed to update record in DatoCMS.`,\n `Record ID: ${id}`,\n `Payload: ${JSON.stringify(payload, null, 2)}`,\n `Error: ${JSON.stringify(_error, null, 2)}`,\n ].join(\"\\n\\n\"),\n );\n }\n },\n enableFieldLocalization: async (args: { modelId: string; fieldId: string }): Promise<void> => {\n try {\n await dato.fields\n .update(`${args.modelId}::${args.fieldId}`, { localized: true })\n .catch((error: any) => Promise.reject(error?.response?.body?.data?.[0] || error));\n } catch (_error: any) {\n if (_error?.attributes?.code === \"NOT_FOUND\") {\n throw new Error(\n [\n `Field \"${args.fieldId}\" not found in model \"${args.modelId}\".`,\n `Error: ${JSON.stringify(_error, null, 2)}`,\n ].join(\"\\n\\n\"),\n );\n }\n\n if (_error?.attributes?.details?.message) {\n throw new Error(\n [`${_error.attributes.details.message}`, `Error: ${JSON.stringify(_error, null, 2)}`].join(\"\\n\\n\"),\n );\n }\n\n throw new Error(\n [\n `Failed to enable field localization in DatoCMS.`,\n `Field ID: ${args.fieldId}`,\n `Model ID: ${args.modelId}`,\n `Error: ${JSON.stringify(_error, null, 2)}`,\n ].join(\"\\n\\n\"),\n );\n }\n },\n };\n}\n\ntype TraverseDatoCallbackMap = {\n onValue?: (path: string[], value: DatoSimpleValue, setValue: (value: DatoSimpleValue) => void) => void;\n onBlock?: (path: string[], value: DatoBlock) => void;\n};\n\nexport function traverseDatoPayload(\n payload: Record<string, DatoValue>,\n callbackMap: TraverseDatoCallbackMap,\n path: string[] = [],\n) {\n for (const fieldName of Object.keys(payload)) {\n const fieldValue = payload[fieldName];\n traverseDatoValue(payload, fieldValue, callbackMap, [...path, fieldName]);\n }\n}\n\nexport function traverseDatoValue(\n parent: Record<string, DatoValue>,\n value: DatoValue,\n callbackMap: TraverseDatoCallbackMap,\n path: string[] = [],\n) {\n if (_.isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n traverseDatoValue(parent, value[i], callbackMap, [...path, i.toString()]);\n }\n } else if (_.isObject(value)) {\n if (\"schema\" in value && value.schema === \"dast\") {\n traverseDastDocument(value, callbackMap, [...path]);\n } else if (\"type\" in value && value.type === \"item\") {\n traverseDatoBlock(value, callbackMap, [...path]);\n } else {\n throw new Error([\"Unsupported dato object value type:\", JSON.stringify(value, null, 2)].join(\"\\n\\n\"));\n }\n } else {\n callbackMap.onValue?.(path, value, (value) => {\n _.set(parent, path[path.length - 1], value);\n });\n }\n}\n\nexport function traverseDastDocument(dast: DastDocument, callbackMap: TraverseDatoCallbackMap, path: string[] = []) {\n traverseDastNode(dast.document, callbackMap, [...path, \"document\"]);\n}\n\nexport function traverseDatoBlock(block: DatoBlock, callbackMap: TraverseDatoCallbackMap, path: string[] = []) {\n callbackMap.onBlock?.(path, block);\n traverseDatoPayload(block.attributes, callbackMap, [...path, \"attributes\"]);\n}\n\nexport function traverseDastNode(node: DastDocumentNode, callbackMap: TraverseDatoCallbackMap, path: string[] = []) {\n if (node.value) {\n callbackMap.onValue?.(path, node.value, (value) => {\n _.set(node, \"value\", value);\n });\n }\n if (node.children?.length) {\n for (let i = 0; i < node.children.length; i++) {\n traverseDastNode(node.children[i], callbackMap, [...path, i.toString()]);\n }\n }\n}\n","import _ from \"lodash\";\nimport { ILoader } from \"../_types\";\nimport { createLoader } from \"../_utils\";\nimport { DatoFilterLoaderOutput } from \"./filter\";\nimport fs from \"fs\";\nimport Z from \"zod\";\n\nexport type DatoExtractLoaderOutput = {\n [modelId: string]: {\n [recordId: string]: {\n [fieldName: string]: string | Record<string, object>;\n };\n };\n};\n\nexport default function createDatoExtractLoader(): ILoader<DatoFilterLoaderOutput, DatoExtractLoaderOutput> {\n return createLoader({\n async pull(locale, input) {\n const result: DatoExtractLoaderOutput = {};\n\n for (const [modelId, modelInfo] of _.entries(input)) {\n for (const [recordId, record] of _.entries(modelInfo)) {\n for (const [fieldName, fieldValue] of _.entries(record)) {\n const parsedValue = createParsedDatoValue(fieldValue);\n if (parsedValue) {\n _.set(result, [modelId, `_${recordId}`, fieldName], parsedValue);\n }\n }\n }\n }\n\n return result;\n },\n async push(locale, data, originalInput) {\n const result = _.cloneDeep(originalInput || {});\n\n for (const [modelId, modelInfo] of _.entries(data)) {\n for (const [virtualRecordId, record] of _.entries(modelInfo)) {\n for (const [fieldName, fieldValue] of _.entries(record)) {\n const [, recordId] = virtualRecordId.split(\"_\");\n const originalFieldValue = _.get(originalInput, [modelId, recordId, fieldName]);\n const rawValue = createRawDatoValue(fieldValue, originalFieldValue, true);\n _.set(result, [modelId, recordId, fieldName], rawValue || originalFieldValue);\n }\n }\n }\n\n return result;\n },\n });\n}\n\nexport type DatoValueRaw = any;\nexport type DatoValueParsed = any;\n\nexport function detectDatoFieldType(rawDatoValue: DatoValueRaw): string | null {\n if (_.has(rawDatoValue, \"document\") && _.get(rawDatoValue, \"schema\") === \"dast\") {\n return \"structured_text\";\n } else if (_.has(rawDatoValue, \"no_index\") || _.has(rawDatoValue, \"twitter_card\")) {\n return \"seo\";\n } else if (_.get(rawDatoValue, \"type\") === \"item\") {\n return \"single_block\";\n } else if (_.isArray(rawDatoValue) && _.every(rawDatoValue, (item) => _.get(item, \"type\") === \"item\")) {\n return \"rich_text\";\n } else if (_isFile(rawDatoValue)) {\n return \"file\";\n } else if (_.isArray(rawDatoValue) && _.every(rawDatoValue, (item) => _isFile(item))) {\n return \"gallery\";\n } else if (_isJson(rawDatoValue)) {\n return \"json\";\n } else if (_.isString(rawDatoValue)) {\n return \"string\";\n } else if (_isVideo(rawDatoValue)) {\n return \"video\";\n } else if (_.isArray(rawDatoValue) && _.every(rawDatoValue, (item) => _.isString(item))) {\n return \"ref_list\";\n } else {\n return null;\n }\n}\n\nexport function createParsedDatoValue(rawDatoValue: DatoValueRaw): DatoValueParsed {\n const fieldType = detectDatoFieldType(rawDatoValue);\n switch (fieldType) {\n default:\n return rawDatoValue;\n case \"structured_text\":\n return serializeStructuredText(rawDatoValue);\n case \"seo\":\n return serializeSeo(rawDatoValue);\n case \"single_block\":\n return serializeBlock(rawDatoValue);\n case \"rich_text\":\n return serializeBlockList(rawDatoValue);\n case \"json\":\n return JSON.parse(rawDatoValue);\n case \"video\":\n return serializeVideo(rawDatoValue);\n case \"file\":\n return serializeFile(rawDatoValue);\n case \"gallery\":\n return serializeGallery(rawDatoValue);\n case \"ref_list\":\n return null;\n }\n}\n\nexport function createRawDatoValue(\n parsedDatoValue: DatoValueParsed,\n originalRawDatoValue: any,\n isClean = false,\n): DatoValueRaw {\n const fieldType = detectDatoFieldType(originalRawDatoValue);\n switch (fieldType) {\n default:\n return parsedDatoValue;\n case \"structured_text\":\n return deserializeStructuredText(parsedDatoValue, originalRawDatoValue);\n case \"seo\":\n return deserializeSeo(parsedDatoValue, originalRawDatoValue);\n case \"single_block\":\n return deserializeBlock(parsedDatoValue, originalRawDatoValue, isClean);\n case \"rich_text\":\n return deserializeBlockList(parsedDatoValue, originalRawDatoValue, isClean);\n case \"json\":\n return JSON.stringify(parsedDatoValue, null, 2);\n case \"video\":\n return deserializeVideo(parsedDatoValue, originalRawDatoValue);\n case \"file\":\n return deserializeFile(parsedDatoValue, originalRawDatoValue);\n case \"gallery\":\n return deserializeGallery(parsedDatoValue, originalRawDatoValue);\n case \"ref_list\":\n return originalRawDatoValue;\n }\n}\n\nfunction serializeStructuredText(rawStructuredText: any) {\n return serializeStructuredTextNode(rawStructuredText);\n // Encapsulates helper function args\n function serializeStructuredTextNode(node: any, path: string[] = [], acc: Record<string, any> = {}) {\n if (\"document\" in node) {\n return serializeStructuredTextNode(node.document, [...path, \"document\"], acc);\n }\n\n if (!_.isNil(node.value)) {\n acc[[...path, \"value\"].join(\".\")] = node.value;\n } else if (_.get(node, \"type\") === \"block\") {\n acc[[...path, \"item\"].join(\".\")] = serializeBlock(node.item);\n }\n\n if (node.children) {\n for (let i = 0; i < node.children.length; i++) {\n serializeStructuredTextNode(node.children[i], [...path, i.toString()], acc);\n }\n }\n\n return acc;\n }\n}\n\nfunction serializeSeo(rawSeo: any) {\n return _.chain(rawSeo).pick([\"title\", \"description\"]).value();\n}\n\nfunction serializeBlock(rawBlock: any) {\n if (_.get(rawBlock, \"type\") === \"item\" && _.has(rawBlock, \"id\")) {\n return serializeBlock(rawBlock.attributes);\n }\n\n const result: Record<string, any> = {};\n for (const [attributeName, attributeValue] of _.entries(rawBlock)) {\n result[attributeName] = createParsedDatoValue(attributeValue);\n }\n\n return result;\n}\n\nfunction serializeBlockList(rawBlockList: any) {\n return _.chain(rawBlockList)\n .map((block) => serializeBlock(block))\n .value();\n}\n\nfunction serializeVideo(rawVideo: any) {\n return _.chain(rawVideo).pick([\"title\"]).value();\n}\n\nfunction serializeFile(rawFile: any) {\n return _.chain(rawFile).pick([\"alt\", \"title\"]).value();\n}\n\nfunction serializeGallery(rawGallery: any) {\n return _.chain(rawGallery)\n .map((item) => serializeFile(item))\n .value();\n}\n\nfunction deserializeFile(parsedFile: any, originalRawFile: any) {\n return _.chain(parsedFile).defaults(originalRawFile).value();\n}\n\nfunction deserializeGallery(parsedGallery: any, originalRawGallery: any) {\n return _.chain(parsedGallery)\n .map((item, i) => deserializeFile(item, originalRawGallery[i]))\n .value();\n}\n\nfunction deserializeVideo(parsedVideo: any, originalRawVideo: any) {\n return _.chain(parsedVideo).defaults(originalRawVideo).value();\n}\n\nfunction deserializeBlock(payload: any, rawNode: any, isClean = false) {\n const result = _.cloneDeep(rawNode);\n\n for (const [attributeName, attributeValue] of _.entries(rawNode.attributes)) {\n const rawValue = createRawDatoValue(payload[attributeName], attributeValue, isClean);\n _.set(result, [\"attributes\", attributeName], rawValue);\n }\n\n if (isClean) {\n delete result[\"id\"];\n }\n\n return result;\n}\n\nfunction deserializeSeo(parsedSeo: any, originalRawSeo: any) {\n return _.chain(parsedSeo).pick([\"title\", \"description\"]).defaults(originalRawSeo).value();\n}\n\nfunction deserializeBlockList(parsedBlockList: any, originalRawBlockList: any, isClean = false) {\n return _.chain(parsedBlockList)\n .map((block, i) => deserializeBlock(block, originalRawBlockList[i], isClean))\n .value();\n}\n\nfunction deserializeStructuredText(parsedStructuredText: Record<string, string>, originalRawStructuredText: any) {\n const result = _.cloneDeep(originalRawStructuredText);\n\n for (const [path, value] of _.entries(parsedStructuredText)) {\n const realPath = _.chain(path.split(\".\"))\n .flatMap((s) => (!_.isNaN(_.toNumber(s)) ? [\"children\", s] : s))\n .value();\n const deserializedValue = createRawDatoValue(value, _.get(originalRawStructuredText, realPath), true);\n _.set(result, realPath, deserializedValue);\n }\n\n return result;\n}\n\nfunction _isJson(rawDatoValue: DatoValueRaw): boolean {\n try {\n return (\n _.isString(rawDatoValue) &&\n rawDatoValue.startsWith(\"{\") &&\n rawDatoValue.endsWith(\"}\") &&\n !!JSON.parse(rawDatoValue)\n );\n } catch (e) {\n return false;\n }\n}\n\nfunction _isFile(rawDatoValue: DatoValueRaw): boolean {\n return (\n _.isObject(rawDatoValue) &&\n [\"alt\", \"title\", \"custom_data\", \"focal_point\", \"upload_id\"].every((key) => _.has(rawDatoValue, key))\n );\n}\n\nfunction _isVideo(rawDatoValue: DatoValueRaw): boolean {\n return (\n _.isObject(rawDatoValue) &&\n [\"url\", \"title\", \"width\", \"height\", \"provider\", \"provider_uid\", \"thumbnail_url\"].every((key) =>\n _.has(rawDatoValue, key),\n )\n );\n}\n","import webvtt from \"node-webvtt\";\nimport { ILoader } from \"./_types\";\nimport { createLoader } from \"./_utils\";\n\nexport default function createVttLoader(): ILoader<\n string,\n Record<string, any>\n> {\n return createLoader({\n async pull(locale, input) {\n if (!input) {\n return \"\"; // if VTT file does not exist yet we can not parse it - return empty string\n }\n const vtt = webvtt.parse(input)?.cues;\n if (Object.keys(vtt).length === 0) {\n return {};\n } else {\n return vtt.reduce((result: any, cue: any, index: number) => {\n const key = `${index}#${cue.start}-${cue.end}#${cue.identifier}`;\n result[key] = cue.text;\n return result;\n }, {});\n }\n },\n async push(locale, payload) {\n const output = Object.entries(payload).map(([key, text]) => {\n const [id, timeRange, identifier] = key.split(\"#\");\n const [startTime, endTime] = timeRange.split(\"-\");\n\n return {\n end: Number(endTime),\n identifier: identifier,\n start: Number(startTime),\n styles: \"\",\n text: text,\n };\n });\n\n const input = {\n valid: true,\n strict: true,\n cues: output,\n };\n\n return webvtt.compile(input);\n },\n });\n}\n","import _ from \"lodash\";\nimport { ILoader } from \"../_types\";\nimport { composeLoaders, createLoader } from \"../_utils\";\n\nexport type VariableLoaderParams = {\n type: \"ieee\" | \"python\";\n};\n\nexport default function createVariableLoader(\n params: VariableLoaderParams,\n): ILoader<Record<string, any>, Record<string, string>> {\n return composeLoaders(variableExtractLoader(params), variableContentLoader());\n}\n\ntype VariableExtractionPayload = {\n variables: string[];\n value: string;\n};\n\nfunction variableExtractLoader(\n params: VariableLoaderParams,\n): ILoader<Record<string, string>, Record<string, VariableExtractionPayload>> {\n const specifierPattern = getFormatSpecifierPattern(params.type);\n return createLoader({\n pull: async (locale, input, initXtx, originalLocale, originalInput) => {\n const result: Record<string, VariableExtractionPayload> = {};\n const inputValues = _.omitBy(input, _.isEmpty);\n for (const [key, value] of Object.entries(inputValues)) {\n const originalValue = originalInput[key];\n const matches = originalValue.match(specifierPattern) || [];\n result[key] = result[key] || {\n value,\n variables: [],\n };\n for (let i = 0; i < matches.length; i++) {\n const match = matches[i];\n const currentValue = result[key].value;\n const newValue = currentValue?.replace(match, `{variable:${i}}`);\n\n result[key].value = newValue;\n result[key].variables[i] = match;\n }\n }\n return result;\n },\n push: async (\n locale,\n data,\n originalInput,\n originalDefaultLocale,\n pullInput,\n pullOutput,\n ) => {\n const result: Record<string, string> = {};\n for (const [key, valueObj] of Object.entries(data)) {\n result[key] = valueObj.value;\n for (let i = 0; i < valueObj.variables.length; i++) {\n const variable = valueObj.variables[i];\n const currentValue = result[key];\n const newValue = currentValue?.replace(`{variable:${i}}`, variable);\n result[key] = newValue;\n }\n }\n return result;\n },\n });\n}\n\nfunction variableContentLoader(): ILoader<\n Record<string, VariableExtractionPayload>,\n Record<string, string>\n> {\n return createLoader({\n pull: async (locale, input) => {\n const result = _.mapValues(input, (payload) => payload.value);\n return result;\n },\n push: async (locale, data, originalInput, defaultLocale, pullInput) => {\n const result: Record<string, VariableExtractionPayload> = _.cloneDeep(\n originalInput || {},\n );\n for (const [key, originalValueObj] of Object.entries(result)) {\n result[key] = {\n ...originalValueObj,\n value: data[key],\n };\n }\n return result;\n },\n });\n}\n\nfunction getFormatSpecifierPattern(type: VariableLoaderParams[\"type\"]): RegExp {\n switch (type) {\n case \"ieee\":\n return /%(?:\\d+\\$)?[+-]?(?:[ 0]|'.)?-?\\d*(?:\\.\\d+)?(?:[hljztL]|ll|hh)?[@diuoxXfFeEgGaAcspn%]/g;\n case \"python\":\n return /%\\([^)]+\\)[diouxXeEfFgGcrs%]/g;\n default:\n throw new Error(`Unsupported variable format type: ${type}`);\n }\n}\n","import _ from \"lodash\";\n\nimport { ILoader } from \"./_types\";\nimport { createLoader } from \"./_utils\";\n\nexport default function createSyncLoader(): ILoader<\n Record<string, string>,\n Record<string, string>\n> {\n return createLoader({\n async pull(locale, input, initCtx, originalLocale, originalInput) {\n if (!originalInput) {\n return input;\n }\n\n return _.chain(originalInput)\n .mapValues((value, key) => input[key])\n .value() as Record<string, string>;\n },\n async push(locale, data, originalInput) {\n if (!originalInput) {\n return data;\n }\n\n return _.chain(originalInput || {})\n .mapValues((value, key) => data[key])\n .value();\n },\n });\n}\n","export function formatPlutilStyle(jsonData: any, existingJson?: string): string {\n // Detect indentation from existing JSON if provided\n const indent = existingJson ? detectIndentation(existingJson) : \" \";\n\n function format(data: any, level = 0): string {\n const currentIndent = indent.repeat(level);\n const nextIndent = indent.repeat(level + 1);\n\n if (typeof data !== \"object\" || data === null) {\n return JSON.stringify(data);\n }\n\n if (Array.isArray(data)) {\n if (data.length === 0) return \"[]\";\n const items = data.map((item) => `${nextIndent}${format(item, level + 1)}`);\n return `[\\n${items.join(\",\\n\")}\\n${currentIndent}]`;\n }\n\n const keys = Object.keys(data);\n if (keys.length === 0) {\n return `{\\n\\n${currentIndent}}`; // Empty object with proper indentation\n }\n\n // Sort keys to ensure whitespace keys come first\n const sortedKeys = keys.sort((a, b) => {\n // If both keys are whitespace or both are non-whitespace, maintain stable order\n const aIsWhitespace = /^\\s*$/.test(a);\n const bIsWhitespace = /^\\s*$/.test(b);\n\n if (aIsWhitespace && !bIsWhitespace) return -1;\n if (!aIsWhitespace && bIsWhitespace) return 1;\n return a.localeCompare(b, undefined, { numeric: true });\n });\n\n const items = sortedKeys.map((key) => {\n const value = data[key];\n return `${nextIndent}${JSON.stringify(key)} : ${format(value, level + 1)}`;\n });\n\n return `{\\n${items.join(\",\\n\")}\\n${currentIndent}}`;\n }\n\n const result = format(jsonData);\n return result;\n}\n\nfunction detectIndentation(jsonStr: string): string {\n // Find the first indented line\n const match = jsonStr.match(/\\n(\\s+)/);\n return match ? match[1] : \" \"; // fallback to 4 spaces if no indentation found\n}\n","import { formatPlutilStyle } from \"../utils/plutil-formatter\";\nimport { ILoader } from \"./_types\";\nimport { createLoader } from \"./_utils\";\n\nexport default function createPlutilJsonTextLoader(): ILoader<string, string> {\n return createLoader({\n async pull(locale, data) {\n return data;\n },\n async push(locale, data, originalInput) {\n const jsonData = JSON.parse(data);\n const result = formatPlutilStyle(jsonData, originalInput || \"\");\n\n return result;\n },\n });\n}\n","import { ILoader } from \"./_types\";\nimport { createLoader } from \"./_utils\";\nimport { fromString } from \"php-array-reader\";\n\nexport default function createPhpLoader(): ILoader<string, Record<string, any>> {\n return createLoader({\n pull: async (locale, input) => {\n try {\n const output = fromString(input);\n return output;\n } catch (error) {\n throw new Error(`Error parsing PHP file for locale ${locale}`);\n }\n },\n push: async (locale, data, originalInput) => {\n const output = toPhpString(data, originalInput);\n return output;\n },\n });\n}\n\nfunction toPhpString(data: Record<string, any>, originalPhpString: string | null) {\n const defaultFilePrefix = \"<?php\\n\\n\";\n if (originalPhpString) {\n const [filePrefix = defaultFilePrefix] = originalPhpString.split(\"return \");\n const shortArraySyntax = !originalPhpString.includes(\"array(\");\n const output = `${filePrefix}return ${toPhpArray(data, shortArraySyntax)};`;\n return output;\n }\n return `${defaultFilePrefix}return ${toPhpArray(data)};`;\n}\n\nfunction toPhpArray(data: any, shortSyntax = true, indentLevel = 1): string {\n if (data === null || data === undefined) {\n return \"null\";\n }\n if (typeof data === \"string\") {\n return `'${escapePhpString(data)}'`;\n }\n if (typeof data === \"number\") {\n return data.toString();\n }\n if (typeof data === \"boolean\") {\n return data ? \"true\" : \"false\";\n }\n\n const arrayStart = shortSyntax ? \"[\" : \"array(\";\n const arrayEnd = shortSyntax ? \"]\" : \")\";\n\n if (Array.isArray(data)) {\n return `${arrayStart}\\n${data\n .map((value) => `${indent(indentLevel)}${toPhpArray(value, shortSyntax, indentLevel + 1)}`)\n .join(\",\\n\")}\\n${indent(indentLevel - 1)}${arrayEnd}`;\n }\n\n const output = `${arrayStart}\\n${Object.entries(data)\n .map(([key, value]) => `${indent(indentLevel)}'${key}' => ${toPhpArray(value, shortSyntax, indentLevel + 1)}`)\n .join(\",\\n\")}\\n${indent(indentLevel - 1)}${arrayEnd}`;\n return output;\n}\n\nfunction indent(level: number) {\n return \" \".repeat(level);\n}\n\nfunction escapePhpString(str: string) {\n return str\n .replaceAll(\"\\\\\", \"\\\\\\\\\")\n .replaceAll(\"'\", \"\\\\'\")\n .replaceAll(\"\\r\", \"\\\\r\")\n .replaceAll(\"\\n\", \"\\\\n\")\n .replaceAll(\"\\t\", \"\\\\t\");\n}\n","import { jsonrepair } from \"jsonrepair\";\nimport { ILoader } from \"./_types\";\nimport { createLoader } from \"./_utils\";\n\nexport default function createVueJsonLoader(): ILoader<string, Record<string, any>> {\n return createLoader({\n pull: async (locale, input, ctx) => {\n const parsed = parseVueFile(input);\n return parsed?.i18n?.[locale] ?? {};\n },\n push: async (locale, data, originalInput) => {\n const parsed = parseVueFile(originalInput ?? \"\");\n if (!parsed) {\n return originalInput ?? \"\";\n }\n\n parsed.i18n[locale] = data;\n return `${parsed.before}<i18n>\\n${JSON.stringify(parsed.i18n, null, 2)}\\n</i18n>${parsed.after}`;\n },\n });\n}\n\nfunction parseVueFile(input: string) {\n const match = input.match(/^([\\s\\S]*)<i18n>([\\s\\S]*)<\\/i18n>([\\s\\S]*)$/);\n\n if (!match) {\n return null;\n }\n\n const [, before, jsonString = \"{}\", after] = match;\n let i18n: Record<string, any>;\n try {\n i18n = JSON.parse(jsonString);\n } catch (error) {\n i18n = JSON.parse(jsonrepair(jsonString));\n }\n\n return { before, after, i18n };\n}\n","import { parse } from \"@babel/parser\";\nimport _ from \"lodash\";\nimport babelTraverseModule from \"@babel/traverse\";\nimport type { NodePath } from \"@babel/traverse\";\nimport * as t from \"@babel/types\";\nimport babelGenerateModule from \"@babel/generator\";\nimport { ILoader } from \"../_types\";\nimport { createLoader } from \"../_utils\";\nimport { resolveCjsExport } from \"./cjs-interop\";\n\nconst traverse = resolveCjsExport(babelTraverseModule, \"@babel/traverse\");\nconst generate = resolveCjsExport(babelGenerateModule, \"@babel/generator\");\n\nexport default function createTypescriptLoader(): ILoader<\n string,\n Record<string, any>\n> {\n return createLoader({\n pull: async (locale, input) => {\n if (!input) {\n return {};\n }\n\n const ast = parseTypeScript(input);\n const extractedStrings = extractStringsFromDefaultExport(ast);\n return extractedStrings;\n },\n push: async (\n locale,\n data,\n originalInput,\n defaultLocale,\n pullInput,\n pullOutput,\n ) => {\n const ast = parseTypeScript(originalInput || \"\");\n const finalData = _.merge({}, pullOutput, data);\n updateStringsInDefaultExport(ast, finalData);\n\n const { code } = generate(ast, {\n jsescOption: {\n minimal: true,\n },\n });\n return code;\n },\n });\n}\n\n/**\n * Parse TypeScript code into an AST\n */\nfunction parseTypeScript(input: string) {\n return parse(input, {\n sourceType: \"module\",\n plugins: [\"typescript\"],\n });\n}\n\n/**\n * Extract the localizable (string literal) content from the default export\n * and return it as a nested object that mirrors the original structure.\n */\nfunction extractStringsFromDefaultExport(ast: t.File): Record<string, any> {\n let extracted: Record<string, any> = {};\n\n traverse(ast, {\n ExportDefaultDeclaration(path: NodePath<t.ExportDefaultDeclaration>) {\n const { declaration } = path.node;\n\n const decl = unwrapTSAsExpression(declaration);\n\n if (t.isObjectExpression(decl)) {\n extracted = objectExpressionToObject(decl);\n } else if (t.isArrayExpression(decl)) {\n extracted = arrayExpressionToArray(decl) as unknown as Record<\n string,\n any\n >;\n } else if (t.isIdentifier(decl)) {\n // Handle: const foo = {...}; export default foo;\n const binding = path.scope.bindings[decl.name];\n if (\n binding &&\n t.isVariableDeclarator(binding.path.node) &&\n binding.path.node.init\n ) {\n const initRaw = binding.path.node.init;\n const init = initRaw ? unwrapTSAsExpression(initRaw) : initRaw;\n if (t.isObjectExpression(init)) {\n extracted = objectExpressionToObject(init);\n } else if (t.isArrayExpression(init)) {\n extracted = arrayExpressionToArray(init) as unknown as Record<\n string,\n any\n >;\n }\n }\n }\n },\n });\n\n return extracted;\n}\n\n/**\n * Helper: unwraps nested TSAsExpression nodes (e.g. `obj as const`)\n * to get to the underlying expression/node we care about.\n */\nfunction unwrapTSAsExpression<T extends t.Node>(node: T): t.Node {\n let current: t.Node = node;\n // TSAsExpression is produced for `expr as const` assertions.\n // We want to get to the underlying expression so that the rest of the\n // loader logic can work unchanged.\n // There could theoretically be multiple nested `as const` assertions, so we\n // unwrap in a loop.\n // eslint-disable-next-line no-constant-condition\n while (t.isTSAsExpression(current)) {\n current = current.expression;\n }\n return current;\n}\n\n/**\n * Recursively converts an `ObjectExpression` into a plain JavaScript object that\n * only contains the string-literal values we care about. Non-string primitives\n * (numbers, booleans, etc.) are ignored.\n */\nfunction objectExpressionToObject(\n objectExpression: t.ObjectExpression,\n): Record<string, any> {\n const obj: Record<string, any> = {};\n\n objectExpression.properties.forEach((prop) => {\n if (!t.isObjectProperty(prop)) return;\n\n const key = getPropertyKey(prop);\n\n if (t.isStringLiteral(prop.value)) {\n obj[key] = prop.value.value;\n } else if (\n t.isTemplateLiteral(prop.value) &&\n prop.value.expressions.length === 0\n ) {\n // Handle template literals without expressions as plain strings\n obj[key] = prop.value.quasis[0].value.cooked ?? \"\";\n } else if (t.isObjectExpression(prop.value)) {\n const nested = objectExpressionToObject(prop.value);\n if (Object.keys(nested).length > 0) {\n obj[key] = nested;\n }\n } else if (t.isArrayExpression(prop.value)) {\n const arr = arrayExpressionToArray(prop.value);\n if (arr.length > 0) {\n obj[key] = arr;\n }\n }\n });\n\n return obj;\n}\n\n/**\n * Recursively converts an `ArrayExpression` into a JavaScript array that\n * contains string literals and nested objects/arrays when relevant.\n */\nfunction arrayExpressionToArray(arrayExpression: t.ArrayExpression): any[] {\n const arr: any[] = [];\n\n arrayExpression.elements.forEach((element) => {\n if (!element) return; // holes in the array\n\n if (t.isStringLiteral(element)) {\n arr.push(element.value);\n } else if (\n t.isTemplateLiteral(element) &&\n element.expressions.length === 0\n ) {\n arr.push(element.quasis[0].value.cooked ?? \"\");\n } else if (t.isObjectExpression(element)) {\n const nestedObj = objectExpressionToObject(element);\n arr.push(nestedObj);\n } else if (t.isArrayExpression(element)) {\n arr.push(arrayExpressionToArray(element));\n }\n });\n\n return arr;\n}\n\n// ------------------ updating helpers (nested data) ------------------------\n\nfunction updateStringsInDefaultExport(\n ast: t.File,\n data: Record<string, any>,\n): boolean {\n let modified = false;\n\n traverse(ast, {\n ExportDefaultDeclaration(path: NodePath<t.ExportDefaultDeclaration>) {\n const { declaration } = path.node;\n\n const decl = unwrapTSAsExpression(declaration);\n\n if (t.isObjectExpression(decl)) {\n modified = updateStringsInObjectExpression(decl, data) || modified;\n } else if (t.isArrayExpression(decl)) {\n if (Array.isArray(data)) {\n modified = updateStringsInArrayExpression(decl, data) || modified;\n }\n } else if (t.isIdentifier(decl)) {\n modified = updateStringsInExportedIdentifier(path, data) || modified;\n }\n },\n });\n\n return modified;\n}\n\nfunction updateStringsInObjectExpression(\n objectExpression: t.ObjectExpression,\n data: Record<string, any>,\n): boolean {\n let modified = false;\n\n objectExpression.properties.forEach((prop) => {\n if (!t.isObjectProperty(prop)) return;\n\n const key = getPropertyKey(prop);\n const incomingVal = data?.[key];\n\n if (incomingVal === undefined) {\n // nothing to update for this key\n return;\n }\n\n if (t.isStringLiteral(prop.value) && typeof incomingVal === \"string\") {\n if (prop.value.value !== incomingVal) {\n prop.value.value = incomingVal;\n modified = true;\n }\n } else if (\n t.isTemplateLiteral(prop.value) &&\n prop.value.expressions.length === 0 &&\n typeof incomingVal === \"string\"\n ) {\n const currentVal = prop.value.quasis[0].value.cooked ?? \"\";\n if (currentVal !== incomingVal) {\n // Replace the existing template literal with an updated one\n prop.value.quasis[0].value.raw = incomingVal;\n prop.value.quasis[0].value.cooked = incomingVal;\n modified = true;\n }\n } else if (\n t.isObjectExpression(prop.value) &&\n typeof incomingVal === \"object\" &&\n !Array.isArray(incomingVal)\n ) {\n const subModified = updateStringsInObjectExpression(\n prop.value,\n incomingVal,\n );\n modified = subModified || modified;\n } else if (t.isArrayExpression(prop.value) && Array.isArray(incomingVal)) {\n const subModified = updateStringsInArrayExpression(\n prop.value,\n incomingVal,\n );\n modified = subModified || modified;\n }\n });\n\n return modified;\n}\n\nfunction updateStringsInArrayExpression(\n arrayExpression: t.ArrayExpression,\n incoming: any[],\n): boolean {\n let modified = false;\n\n arrayExpression.elements.forEach((element, index) => {\n if (!element) return;\n\n const incomingVal = incoming?.[index];\n if (incomingVal === undefined) return;\n\n if (t.isStringLiteral(element) && typeof incomingVal === \"string\") {\n if (element.value !== incomingVal) {\n element.value = incomingVal;\n modified = true;\n }\n } else if (\n t.isTemplateLiteral(element) &&\n element.expressions.length === 0 &&\n typeof incomingVal === \"string\"\n ) {\n const currentVal = element.quasis[0].value.cooked ?? \"\";\n if (currentVal !== incomingVal) {\n element.quasis[0].value.raw = incomingVal;\n element.quasis[0].value.cooked = incomingVal;\n modified = true;\n }\n } else if (\n t.isObjectExpression(element) &&\n typeof incomingVal === \"object\" &&\n !Array.isArray(incomingVal)\n ) {\n const subModified = updateStringsInObjectExpression(element, incomingVal);\n modified = subModified || modified;\n } else if (t.isArrayExpression(element) && Array.isArray(incomingVal)) {\n const subModified = updateStringsInArrayExpression(element, incomingVal);\n modified = subModified || modified;\n }\n });\n\n return modified;\n}\n\nfunction updateStringsInExportedIdentifier(\n path: NodePath<t.ExportDefaultDeclaration>,\n data: Record<string, any>,\n): boolean {\n const exportName = (path.node.declaration as t.Identifier).name;\n const binding = path.scope.bindings[exportName];\n\n if (!binding || !binding.path.node) return false;\n\n if (t.isVariableDeclarator(binding.path.node) && binding.path.node.init) {\n const initRaw = binding.path.node.init;\n const init = initRaw ? unwrapTSAsExpression(initRaw) : initRaw;\n if (t.isObjectExpression(init)) {\n return updateStringsInObjectExpression(init, data);\n } else if (t.isArrayExpression(init)) {\n return updateStringsInArrayExpression(init, data as any[]);\n }\n }\n\n return false;\n}\n\n/**\n * Get the string key from an object property\n */\nfunction getPropertyKey(prop: t.ObjectProperty): string {\n if (t.isIdentifier(prop.key)) {\n return prop.key.name;\n } else if (t.isStringLiteral(prop.key)) {\n return prop.key.value;\n } else if (t.isNumericLiteral(prop.key)) {\n return String(prop.key.value);\n }\n return String(prop.key);\n}\n","/**\n * @fileoverview Helpers for CommonJS ⇆ ES Module inter-op quirks.\n */\n\n/**\n * Resolve the actual default export value of a CommonJS module that has been\n * imported via an ES-module `import` statement.\n *\n * Why is this needed?\n * -------------------\n * When a package that is published as **CommonJS** (for example, `@babel/traverse`)\n * is imported inside native **ESM** code (or via a bundler in ESM mode) the\n * runtime value you receive is not consistent across environments:\n *\n * • **Node.js** (native ESM) wraps the CJS module in an object like\n * `{ default: moduleExports, …namedReExports }`.\n * • **esbuild / Vite / Vitest** may decide to mimic TypeScript's\n * `esModuleInterop` behaviour and give you `moduleExports` directly.\n * • Other tools can produce yet different shapes.\n *\n * If you blindly assume one shape, you will hit runtime errors such as\n * `TypeError: traverse is not a function` when the actual function lives on the\n * `.default` property — or the opposite, depending on the environment.\n *\n * This helper inspects the imported value at runtime and returns what looks like\n * the real default export regardless of how it was wrapped. It hides the ugly\n * `typeof mod === \"function\" ? … : mod.default` branching behind a single call\n * site.\n *\n * Example\n * -------\n * ```ts\n * import traverseModule from \"@babel/traverse\";\n * import { resolveCjsExport } from \"../utils/cjs-interop\";\n *\n * const traverse = resolveCjsExport<typeof traverseModule>(\n * traverseModule,\n * \"@babel/traverse\",\n * );\n * ```\n *\n * @template T Expected type of the resolved export.\n * @param mod The runtime value returned by the `import` statement.\n * @param name Friendly name of the module (for error messages).\n * @returns The resolved default export value.\n */\nexport function resolveCjsExport<T = any>(mod: T, name: string = \"module\"): T {\n // If the module value itself is callable or clearly not an object, assume it's\n // already the export we want (covers most bundler scenarios).\n if (typeof mod === \"function\" || typeof mod !== \"object\" || mod === null) {\n return mod as T;\n }\n\n // Otherwise, look for a `.default` property which is common in Node's CJS->ESM\n // wrapper as well as in Babel's `interopRequireDefault` helpers.\n if (\"default\" in mod && typeof mod.default !== \"undefined\") {\n return mod.default as T;\n }\n\n // Give up: log the mysterious shape and throw to fail fast.\n /* eslint-disable no-console */\n console.error(\n `[resolveCjsExport] Unable to determine default export for ${name}.`,\n \"Received value:\",\n mod,\n );\n throw new Error(`Failed to resolve default export for ${name}.`);\n}\n","import _ from \"lodash\";\nimport { ILoader } from \"./_types\";\nimport { createLoader } from \"./_utils\";\n\nexport default function createInjectLocaleLoader(\n injectLocaleKeys?: string[],\n): ILoader<Record<string, any>, Record<string, any>> {\n return createLoader({\n async pull(locale, data) {\n if (!injectLocaleKeys) {\n return data;\n }\n const omitKeys = injectLocaleKeys.filter((key) => {\n return _.get(data, key) === locale;\n });\n const result = _.omit(data, omitKeys);\n return result;\n },\n async push(locale, data, originalInput, originalLocale) {\n if (!injectLocaleKeys) {\n return data;\n }\n\n // ensures locale keys are in correct position\n const mergedData = _.merge({}, originalInput, data);\n\n injectLocaleKeys.forEach((key) => {\n if (_.get(mergedData, key) === originalLocale) {\n _.set(mergedData, key, locale);\n }\n });\n\n return mergedData;\n },\n });\n}\n","import { ILoader } from \"./_types\";\nimport { createLoader } from \"./_utils\";\nimport _ from \"lodash\";\n\nexport default function createLockedKeysLoader(\n lockedKeys: string[],\n isCacheRestore: boolean = false,\n): ILoader<Record<string, any>, Record<string, any>> {\n return createLoader({\n pull: async (locale, data) =>\n _.chain(data)\n .pickBy((value, key) => !lockedKeys.some((lockedKey) => key.startsWith(lockedKey)))\n .value(),\n push: async (locale, data, originalInput) => {\n const lockedSubObject = _.chain(originalInput)\n .pickBy((value, key) => lockedKeys.some((lockedKey) => key.startsWith(lockedKey)))\n .value();\n\n if (isCacheRestore) {\n return _.merge({}, data, lockedSubObject);\n } else {\n return _.merge({}, originalInput, data, lockedSubObject);\n }\n },\n });\n}\n","import matter from \"gray-matter\";\nimport YAML from \"yaml\";\nimport { ILoader } from \"../_types\";\nimport { createLoader } from \"../_utils\";\nimport { RawMdx } from \"./_types\";\n\nexport default function createMdxFrontmatterSplitLoader(): ILoader<\n string,\n RawMdx\n> {\n const fmEngine = createFmEngine();\n\n return createLoader({\n async pull(locale, input) {\n const source = input || \"\";\n const { data: frontmatter, content } = fmEngine.parse(source);\n\n return {\n frontmatter: frontmatter as Record<string, any>,\n content,\n };\n },\n\n async push(locale, data) {\n const { frontmatter = {}, content = \"\" } = data || ({} as RawMdx);\n\n const result = fmEngine.stringify(content, frontmatter).trim();\n\n return result;\n },\n });\n}\n\nfunction createFmEngine() {\n const yamlEngine = {\n parse: (str: string) => YAML.parse(str),\n stringify: (obj: any) =>\n YAML.stringify(obj, { defaultStringType: \"PLAIN\" }),\n };\n\n return {\n parse: (input: string) =>\n matter(input, {\n engines: {\n yaml: yamlEngine,\n },\n }),\n stringify: (content: string, frontmatter: Record<string, any>) =>\n matter.stringify(content, frontmatter, {\n engines: {\n yaml: yamlEngine,\n },\n }),\n };\n}\n","import { MD5 } from \"object-hash\";\n\nexport function md5(input: any) {\n return MD5(input);\n}\n","import { ILoader } from \"../_types\";\nimport { createLoader } from \"../_utils\";\nimport { md5 } from \"../../utils/md5\";\nimport _ from \"lodash\";\n\nconst fenceRegex = /([ \\t]*)(^>\\s*)?```([\\s\\S]*?)```/gm;\nconst inlineCodeRegex = /(?<!`)`([^`\\r\\n]+?)`(?!`)/g;\n\n// Matches markdown image tags, with optional alt text & parenthesis URL, possibly inside blockquotes\n// Captures patterns like ![](url) or ![alt](url), with optional leading '> ' for blockquotes\nconst imageRegex = /([ \\t]*)(^>\\s*)?!\\[[^\\]]*?\\]\\(([^()]*(\\([^()]*\\)[^()]*)*)\\)/gm;\n\n/**\n * Ensures that markdown image tags are surrounded by blank lines (\\n\\n) so that they are properly\n * treated as separate blocks during subsequent processing and serialization.\n *\n * Behaviour mirrors `ensureTrailingFenceNewline` logic for code fences:\n * • If an image tag is already inside a blockquote (starts with `>` after trimming) we leave it untouched.\n * • Otherwise we add two newlines before and after the image tag, then later collapse multiple\n * consecutive blank lines back to exactly one separation using lodash chain logic.\n */\nfunction ensureSurroundingImageNewlines(_content: string) {\n let found = false;\n let content = _content;\n let workingContent = content;\n\n do {\n found = false;\n const matches = workingContent.match(imageRegex);\n if (matches) {\n const match = matches[0];\n\n const replacement = match.trim().startsWith(\">\")\n ? match\n : `\\n\\n${match}\\n\\n`;\n\n content = content.replaceAll(match, replacement);\n workingContent = workingContent.replaceAll(match, \"\");\n found = true;\n }\n } while (found);\n\n content = _.chain(content)\n .split(\"\\n\\n\")\n .map((section) => _.trim(section, \"\\n\"))\n .filter(Boolean)\n .join(\"\\n\\n\")\n .value();\n\n return content;\n}\n\nfunction ensureTrailingFenceNewline(_content: string) {\n let found = false;\n let content = _content;\n let workingContent = content;\n\n do {\n found = false;\n const matches = workingContent.match(fenceRegex);\n if (matches) {\n const match = matches[0];\n\n const replacement = match.trim().startsWith(\">\")\n ? match\n : `\\n\\n${match}\\n\\n`;\n content = content.replaceAll(match, replacement);\n workingContent = workingContent.replaceAll(match, \"\");\n found = true;\n }\n } while (found);\n\n content = _.chain(content)\n .split(\"\\n\\n\")\n .map((section) => _.trim(section, \"\\n\"))\n .filter(Boolean)\n .join(\"\\n\\n\")\n .value();\n\n return content;\n}\n\n// Helper that replaces code (block & inline) with stable placeholders and returns\n// both the transformed content and the placeholder → original mapping so it can\n// later be restored. Extracted so that we can reuse the exact same logic in both\n// `pull` and `push` phases (e.g. to recreate the mapping from `originalInput`).\nfunction extractCodePlaceholders(content: string): {\n content: string;\n codePlaceholders: Record<string, string>;\n} {\n let finalContent = content;\n finalContent = ensureTrailingFenceNewline(finalContent);\n finalContent = ensureSurroundingImageNewlines(finalContent);\n\n const codePlaceholders: Record<string, string> = {};\n\n const codeBlockMatches = finalContent.matchAll(fenceRegex);\n for (const match of codeBlockMatches) {\n const codeBlock = match[0];\n const codeBlockHash = md5(codeBlock);\n const placeholder = `---CODE-PLACEHOLDER-${codeBlockHash}---`;\n\n codePlaceholders[placeholder] = codeBlock;\n\n const replacement = codeBlock.trim().startsWith(\">\")\n ? `> ${placeholder}`\n : `${placeholder}`;\n finalContent = finalContent.replace(codeBlock, replacement);\n }\n\n const inlineCodeMatches = finalContent.matchAll(inlineCodeRegex);\n for (const match of inlineCodeMatches) {\n const inlineCode = match[0];\n const inlineCodeHash = md5(inlineCode);\n const placeholder = `---INLINE-CODE-PLACEHOLDER-${inlineCodeHash}---`;\n\n codePlaceholders[placeholder] = inlineCode;\n\n const replacement = placeholder;\n finalContent = finalContent.replace(inlineCode, replacement);\n }\n\n return {\n content: finalContent,\n codePlaceholders,\n };\n}\n\nexport default function createMdxCodePlaceholderLoader(): ILoader<\n string,\n string\n> {\n return createLoader({\n async pull(locale, input) {\n const response = extractCodePlaceholders(input);\n return response.content;\n },\n\n async push(locale, data, originalInput, originalLocale, pullInput) {\n const sourceInfo = extractCodePlaceholders(originalInput ?? \"\");\n const currentInfo = extractCodePlaceholders(pullInput ?? \"\");\n\n const codePlaceholders = _.merge(\n sourceInfo.codePlaceholders,\n currentInfo.codePlaceholders,\n );\n\n let result = data;\n for (const [placeholder, original] of Object.entries(codePlaceholders)) {\n const replacement = original.startsWith(\">\")\n ? _.trimStart(original, \"> \")\n : original;\n result = result.replaceAll(placeholder, replacement);\n }\n\n return result;\n },\n });\n}\n","import { ILoader } from \"../_types\";\nimport { createLoader } from \"../_utils\";\nimport { LocalizableMdxDocument, SectionedMdx } from \"./_types\";\n\nexport default function createLocalizableMdxDocumentLoader(): ILoader<SectionedMdx, LocalizableMdxDocument> {\n return createLoader({\n async pull(_locale, input) {\n return {\n meta: input.frontmatter,\n content: input.sections,\n };\n },\n\n async push(_locale, data, originalInput, _originalLocale, pullInput) {\n const result: SectionedMdx = {\n frontmatter: data.meta || {},\n sections: data.content || {},\n };\n\n return result;\n },\n });\n}\n","import { ILoader } from \"../_types\";\nimport { createLoader } from \"../_utils\";\nimport { PlaceholderedMdx, SectionedMdx } from \"./_types\";\nimport _ from \"lodash\";\n\nexport default function createMdxSectionsSplit2Loader(): ILoader<\n PlaceholderedMdx,\n SectionedMdx\n> {\n return createLoader({\n async pull(locale, input) {\n const sections = _.chain(input.content)\n .split(\"\\n\\n\")\n .filter(Boolean)\n .map((section, index) => [index, section])\n .fromPairs()\n .value();\n\n const result: SectionedMdx = {\n frontmatter: input.frontmatter,\n sections,\n };\n\n return result;\n },\n\n async push(locale, data, originalInput, _originalLocale, pullInput) {\n const content = _.chain(data.sections).values().join(\"\\n\\n\").value();\n\n const result: PlaceholderedMdx = {\n frontmatter: data.frontmatter,\n codePlaceholders: pullInput?.codePlaceholders || {},\n content,\n };\n\n return result;\n },\n });\n}\n","import { ILoader } from \"../_types\";\nimport { createLoader } from \"../_utils\";\nimport { md5 } from \"../../utils/md5\";\nimport _ from \"lodash\";\nimport { I18nConfig } from \"@lingo.dev/_spec\";\n\n/**\n * Extracts content matching regex patterns and replaces it with placeholders.\n * Returns the transformed content and a mapping of placeholders to original content.\n */\nfunction extractLockedPatterns(\n content: string,\n patterns: string[] = []\n): {\n content: string;\n lockedPlaceholders: Record<string, string>;\n} {\n let finalContent = content;\n const lockedPlaceholders: Record<string, string> = {};\n\n if (!patterns || patterns.length === 0) {\n return { content: finalContent, lockedPlaceholders };\n }\n\n for (const patternStr of patterns) {\n try {\n const pattern = new RegExp(patternStr, \"gm\");\n const matches = Array.from(finalContent.matchAll(pattern));\n \n for (const match of matches) {\n const matchedText = match[0];\n const matchHash = md5(matchedText);\n const placeholder = `---LOCKED-PATTERN-${matchHash}---`;\n \n lockedPlaceholders[placeholder] = matchedText;\n finalContent = finalContent.replace(matchedText, placeholder);\n }\n } catch (error) {\n console.warn(`Invalid regex pattern: ${patternStr}`);\n }\n }\n\n return {\n content: finalContent,\n lockedPlaceholders,\n };\n}\n\nexport default function createMdxLockedPatternsLoader(defaultPatterns?: string[]): ILoader<\n string,\n string\n> {\n return createLoader({\n async pull(locale, input, initCtx, originalLocale) {\n const patterns = defaultPatterns || [];\n \n const { content } = extractLockedPatterns(input || \"\", patterns);\n \n return content;\n },\n\n async push(locale, data, originalInput, originalLocale, pullInput, pullOutput) {\n const patterns = defaultPatterns || [];\n \n if (!pullInput) {\n return data;\n }\n \n const { lockedPlaceholders } = extractLockedPatterns(pullInput as string, patterns);\n \n let result = data;\n for (const [placeholder, original] of Object.entries(lockedPlaceholders)) {\n result = result.replaceAll(placeholder, original);\n }\n \n return result;\n },\n });\n}\n","import { ILoader } from \"./_types\";\nimport { createLoader } from \"./_utils\";\nimport _ from \"lodash\";\n\nexport default function createIgnoredKeysLoader(\n ignoredKeys: string[],\n): ILoader<Record<string, any>, Record<string, any>> {\n return createLoader({\n pull: async (locale, data) => {\n const result = _.chain(data).omit(ignoredKeys).value();\n return result;\n },\n push: async (locale, data, originalInput, originalLocale, pullInput) => {\n const result = _.merge({}, data, _.pick(pullInput, ignoredKeys));\n return result;\n },\n });\n}\n","import Z from \"zod\";\nimport jsdom from \"jsdom\";\nimport { bucketTypeSchema } from \"@lingo.dev/_spec\";\nimport { composeLoaders } from \"./_utils\";\nimport createJsonLoader from \"./json\";\nimport createFlatLoader from \"./flat\";\nimport createTextFileLoader from \"./text-file\";\nimport createYamlLoader from \"./yaml\";\nimport createRootKeyLoader from \"./root-key\";\nimport createFlutterLoader from \"./flutter\";\nimport { ILoader } from \"./_types\";\nimport createAndroidLoader from \"./android\";\nimport createCsvLoader from \"./csv\";\nimport createHtmlLoader from \"./html\";\nimport createMarkdownLoader from \"./markdown\";\nimport createPropertiesLoader from \"./properties\";\nimport createXcodeStringsLoader from \"./xcode-strings\";\nimport createXcodeStringsdictLoader from \"./xcode-stringsdict\";\nimport createXcodeXcstringsLoader from \"./xcode-xcstrings\";\nimport createPrettierLoader from \"./prettier\";\nimport createUnlocalizableLoader from \"./unlocalizable\";\nimport createPoLoader from \"./po\";\nimport createXliffLoader from \"./xliff\";\nimport createXmlLoader from \"./xml\";\nimport createSrtLoader from \"./srt\";\nimport createDatoLoader from \"./dato\";\nimport createVttLoader from \"./vtt\";\nimport createVariableLoader from \"./variable\";\nimport createSyncLoader from \"./sync\";\nimport createPlutilJsonTextLoader from \"./plutil-json-loader\";\nimport createPhpLoader from \"./php\";\nimport createVueJsonLoader from \"./vue-json\";\nimport createTypescriptLoader from \"./typescript\";\nimport createInjectLocaleLoader from \"./inject-locale\";\nimport createLockedKeysLoader from \"./locked-keys\";\nimport createMdxFrontmatterSplitLoader from \"./mdx2/frontmatter-split\";\nimport createMdxCodePlaceholderLoader from \"./mdx2/code-placeholder\";\nimport createLocalizableMdxDocumentLoader from \"./mdx2/localizable-document\";\nimport createMdxSectionsSplit2Loader from \"./mdx2/sections-split-2\";\nimport createMdxLockedPatternsLoader from \"./mdx2/locked-patterns\";\nimport createIgnoredKeysLoader from \"./ignored-keys\";\n\ntype BucketLoaderOptions = {\n isCacheRestore: boolean;\n returnUnlocalizedKeys?: boolean;\n defaultLocale: string;\n injectLocale?: string[];\n};\n\nexport default function createBucketLoader(\n bucketType: Z.infer<typeof bucketTypeSchema>,\n bucketPathPattern: string,\n options: BucketLoaderOptions,\n lockedKeys?: string[],\n lockedPatterns?: string[],\n ignoredKeys?: string[],\n): ILoader<void, Record<string, string>> {\n switch (bucketType) {\n default:\n throw new Error(`Unsupported bucket type: ${bucketType}`);\n case \"android\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createAndroidLoader(),\n createFlatLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(\n options.isCacheRestore,\n options.returnUnlocalizedKeys,\n ),\n );\n case \"csv\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createCsvLoader(),\n createFlatLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(\n options.isCacheRestore,\n options.returnUnlocalizedKeys,\n ),\n );\n case \"html\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createPrettierLoader({ parser: \"html\", bucketPathPattern }),\n createHtmlLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(\n options.isCacheRestore,\n options.returnUnlocalizedKeys,\n ),\n );\n case \"json\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createPrettierLoader({ parser: \"json\", bucketPathPattern }),\n createJsonLoader(),\n createInjectLocaleLoader(options.injectLocale),\n createFlatLoader(),\n createLockedKeysLoader(lockedKeys || [], options.isCacheRestore),\n createSyncLoader(),\n createUnlocalizableLoader(\n options.isCacheRestore,\n options.returnUnlocalizedKeys,\n ),\n );\n case \"markdown\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createPrettierLoader({ parser: \"markdown\", bucketPathPattern }),\n createMarkdownLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(\n options.isCacheRestore,\n options.returnUnlocalizedKeys,\n ),\n );\n case \"mdx\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createPrettierLoader({\n parser: \"mdx\",\n bucketPathPattern,\n }),\n createMdxCodePlaceholderLoader(),\n createMdxLockedPatternsLoader(lockedPatterns),\n createMdxFrontmatterSplitLoader(),\n createMdxSectionsSplit2Loader(),\n createLocalizableMdxDocumentLoader(),\n createFlatLoader(),\n createLockedKeysLoader(lockedKeys || [], options.isCacheRestore),\n createSyncLoader(),\n createUnlocalizableLoader(\n options.isCacheRestore,\n options.returnUnlocalizedKeys,\n ),\n );\n case \"po\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createPoLoader(),\n createFlatLoader(),\n createSyncLoader(),\n createVariableLoader({ type: \"python\" }),\n createUnlocalizableLoader(\n options.isCacheRestore,\n options.returnUnlocalizedKeys,\n ),\n );\n case \"properties\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createPropertiesLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(\n options.isCacheRestore,\n options.returnUnlocalizedKeys,\n ),\n );\n case \"xcode-strings\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createXcodeStringsLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(\n options.isCacheRestore,\n options.returnUnlocalizedKeys,\n ),\n );\n case \"xcode-stringsdict\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createXcodeStringsdictLoader(),\n createFlatLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(\n options.isCacheRestore,\n options.returnUnlocalizedKeys,\n ),\n );\n case \"xcode-xcstrings\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createPlutilJsonTextLoader(),\n createJsonLoader(),\n createXcodeXcstringsLoader(options.defaultLocale),\n createFlatLoader(),\n createSyncLoader(),\n createVariableLoader({ type: \"ieee\" }),\n createUnlocalizableLoader(\n options.isCacheRestore,\n options.returnUnlocalizedKeys,\n ),\n );\n case \"yaml\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createPrettierLoader({ parser: \"yaml\", bucketPathPattern }),\n createYamlLoader(),\n createFlatLoader(),\n createLockedKeysLoader(lockedKeys || [], options.isCacheRestore),\n createSyncLoader(),\n createUnlocalizableLoader(\n options.isCacheRestore,\n options.returnUnlocalizedKeys,\n ),\n );\n case \"yaml-root-key\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createPrettierLoader({ parser: \"yaml\", bucketPathPattern }),\n createYamlLoader(),\n createRootKeyLoader(true),\n createFlatLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(\n options.isCacheRestore,\n options.returnUnlocalizedKeys,\n ),\n );\n case \"flutter\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createPrettierLoader({ parser: \"json\", bucketPathPattern }),\n createJsonLoader(),\n createFlutterLoader(),\n createFlatLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(\n options.isCacheRestore,\n options.returnUnlocalizedKeys,\n ),\n );\n case \"xliff\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createXliffLoader(),\n createFlatLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(\n options.isCacheRestore,\n options.returnUnlocalizedKeys,\n ),\n );\n case \"xml\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createXmlLoader(),\n createFlatLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(\n options.isCacheRestore,\n options.returnUnlocalizedKeys,\n ),\n );\n case \"srt\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createSrtLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(\n options.isCacheRestore,\n options.returnUnlocalizedKeys,\n ),\n );\n case \"dato\":\n return composeLoaders(\n createDatoLoader(bucketPathPattern),\n createSyncLoader(),\n createFlatLoader(),\n createUnlocalizableLoader(\n options.isCacheRestore,\n options.returnUnlocalizedKeys,\n ),\n );\n case \"vtt\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createVttLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(\n options.isCacheRestore,\n options.returnUnlocalizedKeys,\n ),\n );\n case \"php\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createPhpLoader(),\n createSyncLoader(),\n createFlatLoader(),\n createUnlocalizableLoader(\n options.isCacheRestore,\n options.returnUnlocalizedKeys,\n ),\n );\n case \"vue-json\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createVueJsonLoader(),\n createSyncLoader(),\n createFlatLoader(),\n createUnlocalizableLoader(\n options.isCacheRestore,\n options.returnUnlocalizedKeys,\n ),\n );\n case \"typescript\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createPrettierLoader({ parser: \"typescript\", bucketPathPattern }),\n createTypescriptLoader(),\n createFlatLoader(),\n createSyncLoader(),\n createLockedKeysLoader(lockedKeys || [], options.isCacheRestore),\n createIgnoredKeysLoader(ignoredKeys || []),\n createUnlocalizableLoader(\n options.isCacheRestore,\n options.returnUnlocalizedKeys,\n ),\n );\n }\n}\n","import { I18nConfig } from \"@lingo.dev/_spec\";\nimport chalk from \"chalk\";\nimport dedent from \"dedent\";\nimport { LocalizerFn } from \"./_base\";\nimport { createLingoLocalizer } from \"./lingo\";\nimport { createBasicTranslator } from \"./basic\";\nimport { createOpenAI } from \"@ai-sdk/openai\";\nimport { colors } from \"../constants\";\nimport { createAnthropic } from \"@ai-sdk/anthropic\";\nimport { createGoogleGenerativeAI } from \"@ai-sdk/google\";\nimport { createOpenRouter } from \"@openrouter/ai-sdk-provider\";\nimport { createOllama } from \"ollama-ai-provider\";\n\nexport default function createProcessor(\n provider: I18nConfig[\"provider\"],\n params: { apiKey?: string; apiUrl: string },\n): LocalizerFn {\n if (!provider) {\n const result = createLingoLocalizer(params);\n return result;\n } else {\n const model = getPureModelProvider(provider);\n const result = createBasicTranslator(model, provider.prompt);\n return result;\n }\n}\n\nfunction getPureModelProvider(provider: I18nConfig[\"provider\"]) {\n const createMissingKeyErrorMessage = (\n providerId: string,\n envVar?: string,\n ) => dedent`\n You're trying to use raw ${chalk.dim(providerId)} API for translation. ${envVar ? `However, ${chalk.dim(envVar)} environment variable is not set.` : \"However, that provider is unavailable.\"}\n\n To fix this issue:\n 1. ${envVar ? `Set ${chalk.dim(envVar)} in your environment variables` : \"Set the environment variable for your provider (if required)\"}, or\n 2. Remove the ${chalk.italic(\"provider\")} node from your i18n.json configuration to switch to ${chalk.hex(colors.green)(\"Lingo.dev\")}\n\n ${chalk.hex(colors.blue)(\"Docs: https://lingo.dev/go/docs\")}\n`;\n\n const createUnsupportedProviderErrorMessage = (providerId?: string) =>\n dedent`\n You're trying to use unsupported provider: ${chalk.dim(providerId)}.\n\n To fix this issue:\n 1. Switch to one of the supported providers, or\n 2. Remove the ${chalk.italic(\"provider\")} node from your i18n.json configuration to switch to ${chalk.hex(colors.green)(\"Lingo.dev\")}\n\n ${chalk.hex(colors.blue)(\"Docs: https://lingo.dev/go/docs\")}\n `;\n\n switch (provider?.id) {\n case \"openai\": {\n if (!process.env.OPENAI_API_KEY) {\n throw new Error(\n createMissingKeyErrorMessage(\"OpenAI\", \"OPENAI_API_KEY\"),\n );\n }\n return createOpenAI({\n apiKey: process.env.OPENAI_API_KEY,\n baseURL: provider.baseUrl,\n })(provider.model);\n }\n case \"anthropic\": {\n if (!process.env.ANTHROPIC_API_KEY) {\n throw new Error(\n createMissingKeyErrorMessage(\"Anthropic\", \"ANTHROPIC_API_KEY\"),\n );\n }\n return createAnthropic({\n apiKey: process.env.ANTHROPIC_API_KEY,\n })(provider.model);\n }\n case \"google\": {\n if (!process.env.GOOGLE_API_KEY) {\n throw new Error(\n createMissingKeyErrorMessage(\"Google\", \"GOOGLE_API_KEY\"),\n );\n }\n return createGoogleGenerativeAI({\n apiKey: process.env.GOOGLE_API_KEY,\n })(provider.model);\n }\n case \"openrouter\": {\n if (!process.env.OPENROUTER_API_KEY) {\n throw new Error(\n createMissingKeyErrorMessage(\"OpenRouter\", \"OPENROUTER_API_KEY\"),\n );\n }\n return createOpenRouter({\n apiKey: process.env.OPENROUTER_API_KEY,\n baseURL: provider.baseUrl,\n })(provider.model);\n }\n case \"ollama\": {\n // No API key check needed for Ollama\n return createOllama()(provider.model);\n }\n default: {\n throw new Error(createUnsupportedProviderErrorMessage(provider?.id));\n }\n }\n}\n","import { LingoDotDevEngine } from \"@lingo.dev/_sdk\";\nimport { LocalizerInput, LocalizerProgressFn } from \"./_base\";\n\nexport function createLingoLocalizer(params: {\n apiKey?: string;\n apiUrl: string;\n}) {\n return async (input: LocalizerInput, onProgress: LocalizerProgressFn) => {\n if (!Object.keys(input.processableData).length) {\n return input.processableData;\n }\n\n const lingo = new LingoDotDevEngine({\n apiKey: params.apiKey,\n apiUrl: params.apiUrl,\n });\n\n const result = await lingo.localizeObject(\n input.processableData,\n {\n sourceLocale: input.sourceLocale,\n targetLocale: input.targetLocale,\n reference: {\n [input.sourceLocale]: input.sourceData,\n [input.targetLocale]: input.targetData,\n },\n },\n onProgress,\n );\n\n return result;\n };\n}\n","import { generateText, LanguageModelV1 } from \"ai\";\nimport { LocalizerInput, LocalizerProgressFn } from \"./_base\";\nimport _ from \"lodash\";\n\nexport function createBasicTranslator(\n model: LanguageModelV1,\n systemPrompt: string,\n) {\n return async (input: LocalizerInput, onProgress: LocalizerProgressFn) => {\n const chunks = extractPayloadChunks(input.processableData);\n\n const subResults: Record<string, any>[] = [];\n for (let i = 0; i < chunks.length; i++) {\n const chunk = chunks[i];\n const result = await doJob({\n ...input,\n processableData: chunk,\n });\n subResults.push(result);\n onProgress((i / chunks.length) * 100, chunk, result);\n }\n\n const result = _.merge({}, ...subResults);\n\n return result;\n };\n\n async function doJob(input: LocalizerInput) {\n if (!Object.keys(input.processableData).length) {\n return input.processableData;\n }\n\n const response = await generateText({\n model,\n messages: [\n {\n role: \"system\",\n content: JSON.stringify({\n role: \"system\",\n content: systemPrompt\n .replaceAll(\"{source}\", input.sourceLocale)\n .replaceAll(\"{target}\", input.targetLocale),\n }),\n },\n {\n role: \"user\",\n content: JSON.stringify({\n sourceLocale: \"en\",\n targetLocale: \"es\",\n data: {\n message: \"Hello, world!\",\n },\n }),\n },\n {\n role: \"assistant\",\n content: JSON.stringify({\n sourceLocale: \"en\",\n targetLocale: \"es\",\n data: {\n message: \"Hola, mundo!\",\n },\n }),\n },\n {\n role: \"user\",\n content: JSON.stringify({\n sourceLocale: input.sourceLocale,\n targetLocale: input.targetLocale,\n data: input.processableData,\n }),\n },\n ],\n });\n\n const result = JSON.parse(response.text);\n\n return result?.data || {};\n }\n}\n\n/**\n * Extract payload chunks based on the ideal chunk size\n * @param payload - The payload to be chunked\n * @returns An array of payload chunks\n */\nfunction extractPayloadChunks(\n payload: Record<string, string>,\n): Record<string, string>[] {\n const idealBatchItemSize = 250;\n const batchSize = 25;\n const result: Record<string, string>[] = [];\n let currentChunk: Record<string, string> = {};\n let currentChunkItemCount = 0;\n\n const payloadEntries = Object.entries(payload);\n for (let i = 0; i < payloadEntries.length; i++) {\n const [key, value] = payloadEntries[i];\n currentChunk[key] = value;\n currentChunkItemCount++;\n\n const currentChunkSize = countWordsInRecord(currentChunk);\n if (\n currentChunkSize > idealBatchItemSize ||\n currentChunkItemCount >= batchSize ||\n i === payloadEntries.length - 1\n ) {\n result.push(currentChunk);\n currentChunk = {};\n currentChunkItemCount = 0;\n }\n }\n\n return result;\n}\n\n/**\n * Count words in a record or array\n * @param payload - The payload to count words in\n * @returns The total number of words\n */\nfunction countWordsInRecord(\n payload: any | Record<string, any> | Array<any>,\n): number {\n if (Array.isArray(payload)) {\n return payload.reduce((acc, item) => acc + countWordsInRecord(item), 0);\n } else if (typeof payload === \"object\" && payload !== null) {\n return Object.values(payload).reduce(\n (acc: number, item) => acc + countWordsInRecord(item),\n 0,\n );\n } else if (typeof payload === \"string\") {\n return payload.trim().split(/\\s+/).filter(Boolean).length;\n } else {\n return 0;\n }\n}\n","export function withExponentialBackoff<T, Args extends any[]>(\n fn: (...args: Args) => Promise<T>,\n maxAttempts: number = 3,\n baseDelay: number = 1000,\n): (...args: Args) => Promise<T> {\n return async (...args: Args): Promise<T> => {\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n try {\n return await fn(...args);\n } catch (error) {\n if (attempt === maxAttempts - 1) throw error;\n\n const delay = baseDelay * Math.pow(2, attempt);\n await new Promise((resolve) => setTimeout(resolve, delay));\n }\n }\n throw new Error(\"Unreachable code\");\n };\n}\n","import pkg from \"node-machine-id\";\nconst { machineIdSync } = pkg;\n\nexport default async function trackEvent(\n distinctId: string | null | undefined,\n event: string,\n properties?: Record<string, any>,\n) {\n if (process.env.DO_NOT_TRACK) {\n return;\n }\n\n try {\n const actualId = distinctId || `device-${machineIdSync()}`;\n\n const { PostHog } = await import(\"posthog-node\");\n const posthog = new PostHog(\n \"phc_eR0iSoQufBxNY36k0f0T15UvHJdTfHlh8rJcxsfhfXk\",\n {\n host: \"https://eu.i.posthog.com\",\n flushAt: 1,\n flushInterval: 0,\n },\n );\n\n await posthog.capture({\n distinctId: actualId,\n event,\n properties: {\n ...properties,\n meta: {\n version: process.env.npm_package_version,\n isCi: process.env.CI === \"true\",\n },\n },\n });\n\n await posthog.shutdown();\n } catch (error) {\n if (process.env.DEBUG) {\n console.error(error);\n }\n }\n}\n","import _ from \"lodash\";\nimport z from \"zod\";\nimport { md5 } from \"./md5\";\nimport { tryReadFile, writeFile, checkIfFileExists } from \"../utils/fs\";\nimport * as path from \"path\";\nimport YAML from \"yaml\";\n\nconst LockSchema = z.object({\n version: z.literal(1).default(1),\n checksums: z\n .record(\n z.string(), // localizable files' keys\n // checksums hashmap\n z\n .record(\n // key\n z.string(),\n // checksum of the key's value in the source locale\n z.string(),\n )\n .default({}),\n )\n .default({}),\n});\nexport type LockData = z.infer<typeof LockSchema>;\n\nexport function createDeltaProcessor(fileKey: string) {\n const lockfilePath = path.join(process.cwd(), \"i18n.lock\");\n return {\n async checkIfLockExists() {\n return checkIfFileExists(lockfilePath);\n },\n async calculateDelta(params: {\n sourceData: Record<string, any>;\n targetData: Record<string, any>;\n checksums: Record<string, string>;\n }) {\n let added = _.difference(Object.keys(params.sourceData), Object.keys(params.targetData));\n let removed = _.difference(Object.keys(params.targetData), Object.keys(params.sourceData));\n const updated = _.filter(Object.keys(params.sourceData), (key) => {\n return md5(params.sourceData[key]) !== params.checksums[key] && params.checksums[key];\n });\n\n const renamed: [string, string][] = [];\n for (const addedKey of added) {\n const addedHash = md5(params.sourceData[addedKey]);\n for (const removedKey of removed) {\n if (params.checksums[removedKey] === addedHash) {\n renamed.push([removedKey, addedKey]);\n break;\n }\n }\n }\n added = added.filter((key) => !renamed.some(([oldKey, newKey]) => newKey === key));\n removed = removed.filter((key) => !renamed.some(([oldKey, newKey]) => oldKey === key));\n\n const hasChanges = [added.length > 0, removed.length > 0, updated.length > 0, renamed.length > 0].some((v) => v);\n\n return {\n added,\n removed,\n updated,\n renamed,\n hasChanges,\n };\n },\n async loadLock() {\n const lockfileContent = tryReadFile(lockfilePath, null);\n const lockfileYaml = lockfileContent ? YAML.parse(lockfileContent) : null;\n const lockfileData: z.infer<typeof LockSchema> = lockfileYaml\n ? LockSchema.parse(lockfileYaml)\n : {\n version: 1,\n checksums: {},\n };\n return lockfileData;\n },\n async saveLock(lockData: LockData) {\n const lockfileYaml = YAML.stringify(lockData);\n writeFile(lockfilePath, lockfileYaml);\n },\n async loadChecksums() {\n const id = md5(fileKey);\n const lockfileData = await this.loadLock();\n return lockfileData.checksums[id] || {};\n },\n async saveChecksums(checksums: Record<string, string>) {\n const id = md5(fileKey);\n const lockfileData = await this.loadLock();\n lockfileData.checksums[id] = checksums;\n await this.saveLock(lockfileData);\n },\n async createChecksums(sourceData: Record<string, any>) {\n const checksums = _.mapValues(sourceData, (value) => md5(value));\n return checksums;\n },\n };\n}\n","import * as fs from \"fs\";\nimport * as path from \"path\";\n\nexport function tryReadFile(filePath: string, defaultValue: string | null = null): string | null {\n try {\n const content = fs.readFileSync(filePath, \"utf-8\");\n return content;\n } catch (error) {\n return defaultValue;\n }\n}\n\nexport function writeFile(filePath: string, content: string) {\n // create dirs\n const dir = path.dirname(filePath);\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n fs.writeFileSync(filePath, content);\n}\n\nexport function checkIfFileExists(filePath: string) {\n return fs.existsSync(filePath);\n}\n","import { Command } from \"interactive-commander\";\nimport Z from \"zod\";\nimport Ora from \"ora\";\nimport { createLockfileHelper } from \"../utils/lockfile\";\nimport { bucketTypeSchema, resolveOverriddenLocale } from \"@lingo.dev/_spec\";\nimport { getConfig } from \"../utils/config\";\nimport createBucketLoader from \"../loaders\";\nimport { getBuckets } from \"../utils/buckets\";\n\nexport default new Command()\n .command(\"lockfile\")\n .description(\"Create a lockfile if it does not exist\")\n .helpOption(\"-h, --help\", \"Show help\")\n .option(\"-f, --force\", \"Force create a lockfile\")\n .action(async (options) => {\n const flags = flagsSchema.parse(options);\n const ora = Ora();\n\n const lockfileHelper = createLockfileHelper();\n if (lockfileHelper.isLockfileExists() && !flags.force) {\n ora.warn(`Lockfile won't be created because it already exists. Use --force to overwrite.`);\n } else {\n const i18nConfig = getConfig();\n const buckets = getBuckets(i18nConfig!);\n\n for (const bucket of buckets) {\n for (const bucketConfig of bucket.paths) {\n const sourceLocale = resolveOverriddenLocale(i18nConfig!.locale.source, bucketConfig.delimiter);\n const bucketLoader = createBucketLoader(bucket.type, bucketConfig.pathPattern, {\n isCacheRestore: false,\n defaultLocale: sourceLocale,\n });\n bucketLoader.setDefaultLocale(sourceLocale);\n\n const sourceData = await bucketLoader.pull(sourceLocale);\n lockfileHelper.registerSourceData(bucketConfig.pathPattern, sourceData);\n }\n }\n ora.succeed(\"Lockfile created\");\n }\n });\n\nconst flagsSchema = Z.object({\n force: Z.boolean().default(false),\n});\n","import fs from \"fs\";\nimport path from \"path\";\nimport Z from \"zod\";\nimport YAML from \"yaml\";\nimport { MD5 } from \"object-hash\";\nimport _ from \"lodash\";\n\nexport function createLockfileHelper() {\n return {\n isLockfileExists: () => {\n const lockfilePath = _getLockfilePath();\n return fs.existsSync(lockfilePath);\n },\n registerSourceData: (pathPattern: string, sourceData: Record<string, any>) => {\n const lockfile = _loadLockfile();\n\n const sectionKey = MD5(pathPattern);\n const sectionChecksums = _.mapValues(sourceData, (value) => MD5(value));\n\n lockfile.checksums[sectionKey] = sectionChecksums;\n\n _saveLockfile(lockfile);\n },\n registerPartialSourceData: (pathPattern: string, partialSourceData: Record<string, any>) => {\n const lockfile = _loadLockfile();\n\n const sectionKey = MD5(pathPattern);\n const sectionChecksums = _.mapValues(partialSourceData, (value) => MD5(value));\n\n lockfile.checksums[sectionKey] = _.merge({}, lockfile.checksums[sectionKey] ?? {}, sectionChecksums);\n\n _saveLockfile(lockfile);\n },\n extractUpdatedData: (pathPattern: string, sourceData: Record<string, any>) => {\n const lockfile = _loadLockfile();\n\n const sectionKey = MD5(pathPattern);\n const currentChecksums = _.mapValues(sourceData, (value) => MD5(value));\n\n const savedChecksums = lockfile.checksums[sectionKey] || {};\n const updatedData = _.pickBy(sourceData, (value, key) => savedChecksums[key] !== currentChecksums[key]);\n\n return updatedData;\n },\n };\n\n function _loadLockfile() {\n const lockfilePath = _getLockfilePath();\n if (!fs.existsSync(lockfilePath)) {\n return LockfileSchema.parse({});\n }\n const content = fs.readFileSync(lockfilePath, \"utf-8\");\n const result = LockfileSchema.parse(YAML.parse(content));\n return result;\n }\n\n function _saveLockfile(lockfile: Z.infer<typeof LockfileSchema>) {\n const lockfilePath = _getLockfilePath();\n const content = YAML.stringify(lockfile);\n fs.writeFileSync(lockfilePath, content);\n }\n\n function _getLockfilePath() {\n return path.join(process.cwd(), \"i18n.lock\");\n }\n}\n\nconst LockfileSchema = Z.object({\n version: Z.literal(1).default(1),\n checksums: Z.record(\n Z.string(), // localizable files' keys\n Z.record(\n // checksums hashmap\n Z.string(), // key\n Z.string(), // checksum of the key's value in the source locale\n ).default({}),\n ).default({}),\n});\n","import { I18nConfig, resolveOverriddenLocale } from \"@lingo.dev/_spec\";\nimport { Command } from \"interactive-commander\";\nimport _ from \"lodash\";\nimport { getConfig } from \"../utils/config\";\nimport { CLIError } from \"../utils/errors\";\nimport Ora from \"ora\";\nimport createBucketLoader from \"../loaders\";\nimport { getBuckets } from \"../utils/buckets\";\n\nexport default new Command()\n .command(\"cleanup\")\n .description(\"Remove keys from target files that do not exist in the source file\")\n .helpOption(\"-h, --help\", \"Show help\")\n .option(\"--locale <locale>\", \"Specific locale to cleanup\")\n .option(\"--bucket <bucket>\", \"Specific bucket to cleanup\")\n .option(\"--dry-run\", \"Show what would be removed without making changes\")\n .option(\n \"--verbose\",\n \"Show detailed output including:\\n\" + \" - List of keys that would be removed.\\n\" + \" - Processing steps.\",\n )\n .action(async function (options) {\n const ora = Ora();\n const results: any = [];\n\n try {\n ora.start(\"Loading configuration...\");\n const i18nConfig = getConfig();\n validateConfig(i18nConfig);\n ora.succeed(\"Configuration loaded\");\n\n let buckets = getBuckets(i18nConfig!);\n if (options.bucket) {\n buckets = buckets.filter((bucket: any) => bucket.type === options.bucket);\n }\n\n const targetLocales = options.locale ? [options.locale] : i18nConfig!.locale.targets;\n\n // Process each bucket\n for (const bucket of buckets) {\n console.log();\n ora.info(`Processing bucket: ${bucket.type}`);\n\n for (const bucketConfig of bucket.paths) {\n const sourceLocale = resolveOverriddenLocale(i18nConfig!.locale.source, bucketConfig.delimiter);\n const bucketOra = Ora({ indent: 2 }).info(`Processing path: ${bucketConfig.pathPattern}`);\n const bucketLoader = createBucketLoader(bucket.type, bucketConfig.pathPattern, {\n isCacheRestore: false,\n defaultLocale: sourceLocale,\n });\n bucketLoader.setDefaultLocale(sourceLocale);\n\n // Load source data\n const sourceData = await bucketLoader.pull(sourceLocale);\n const sourceKeys = Object.keys(sourceData);\n\n for (const _targetLocale of targetLocales) {\n const targetLocale = resolveOverriddenLocale(_targetLocale, bucketConfig.delimiter);\n try {\n const targetData = await bucketLoader.pull(targetLocale);\n const targetKeys = Object.keys(targetData);\n const keysToRemove = _.difference(targetKeys, sourceKeys);\n\n if (keysToRemove.length === 0) {\n bucketOra.succeed(`[${targetLocale}] No keys to remove`);\n continue;\n }\n\n if (options.verbose) {\n bucketOra.info(`[${targetLocale}] Keys to remove: ${JSON.stringify(keysToRemove, null, 2)}`);\n }\n\n if (!options.dryRun) {\n const cleanedData = _.pick(targetData, sourceKeys);\n await bucketLoader.push(targetLocale, cleanedData);\n bucketOra.succeed(`[${targetLocale}] Removed ${keysToRemove.length} keys`);\n } else {\n bucketOra.succeed(`[${targetLocale}] Would remove ${keysToRemove.length} keys (dry run)`);\n }\n } catch (error: any) {\n bucketOra.fail(`[${targetLocale}] Failed to cleanup: ${error.message}`);\n results.push({\n step: `Cleanup ${bucket.type}/${bucketConfig} for ${targetLocale}`,\n status: \"Failed\",\n error: error.message,\n });\n }\n }\n }\n }\n\n console.log();\n ora.succeed(\"Cleanup completed!\");\n } catch (error: any) {\n ora.fail(error.message);\n process.exit(1);\n } finally {\n displaySummary(results);\n }\n });\n\nfunction validateConfig(i18nConfig: I18nConfig | null) {\n if (!i18nConfig) {\n throw new CLIError({\n message: \"i18n.json not found. Please run `lingo.dev init` to initialize the project.\",\n docUrl: \"i18nNotFound\",\n });\n }\n if (!i18nConfig.buckets || !Object.keys(i18nConfig.buckets).length) {\n throw new CLIError({\n message: \"No buckets found in i18n.json. Please add at least one bucket containing i18n content.\",\n docUrl: \"bucketNotFound\",\n });\n }\n}\n\nfunction displaySummary(results: any[]) {\n if (results.length === 0) return;\n\n console.log(\"\\nProcess Summary:\");\n results.forEach((result) => {\n console.log(`${result.step}: ${result.status}`);\n if (result.error) console.log(` - Error: ${result.error}`);\n });\n}\n","import { Command } from \"interactive-commander\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport Z from \"zod\";\nimport { ReplexicaEngine } from \"@lingo.dev/_sdk\";\nimport { getSettings } from \"../utils/settings\";\nimport { createAuthenticator } from \"../utils/auth\";\n\nexport default new Command()\n .command(\"mcp\")\n .description(\"Use Lingo.dev model context provider with your AI agent\")\n .helpOption(\"-h, --help\", \"Show help\")\n .action(async (_, program) => {\n const apiKey = program.args[0];\n const settings = getSettings(apiKey);\n\n if (!settings.auth.apiKey) {\n console.error(\"No API key provided\");\n return;\n }\n\n const authenticator = createAuthenticator({\n apiUrl: settings.auth.apiUrl,\n apiKey: settings.auth.apiKey!,\n });\n const auth = await authenticator.whoami();\n\n if (!auth) {\n console.error(\"Not authenticated\");\n return;\n } else {\n console.log(`Authenticated as ${auth.email}`);\n }\n\n const replexicaEngine = new ReplexicaEngine({\n apiKey: settings.auth.apiKey,\n apiUrl: settings.auth.apiUrl,\n });\n\n const server = new McpServer({\n name: \"Lingo.dev\",\n version: \"1.0.0\",\n });\n\n server.tool(\n \"translate\",\n \"Detect language and translate text with Lingo.dev.\",\n {\n text: Z.string(),\n targetLocale: Z.string().regex(/^[a-z]{2}(-[A-Z]{2})?$/),\n },\n async ({ text, targetLocale }) => {\n const sourceLocale = await replexicaEngine.recognizeLocale(text);\n const data = await replexicaEngine.localizeText(text, {\n sourceLocale,\n targetLocale,\n });\n return { content: [{ type: \"text\", text: data }] };\n },\n );\n\n const transport = new StdioServerTransport();\n await server.connect(transport);\n console.log(\"Lingo.dev MCP Server running on stdio\");\n });\n","import { Command } from \"interactive-commander\";\nimport createOra from \"ora\";\nimport { getSettings } from \"../../utils/settings\";\nimport { createAuthenticator } from \"../../utils/auth\";\nimport { IIntegrationFlow } from \"./flows/_base\";\nimport { PullRequestFlow } from \"./flows/pull-request\";\nimport { InBranchFlow } from \"./flows/in-branch\";\nimport { getPlatformKit } from \"./platforms\";\n\ninterface CIOptions {\n parallel?: boolean;\n apiKey?: string;\n debug?: boolean;\n pullRequest?: boolean;\n commitMessage?: string;\n pullRequestTitle?: string;\n workingDirectory?: string;\n processOwnCommits?: boolean;\n}\n\nexport default new Command()\n .command(\"ci\")\n .description(\"Run Lingo.dev CI/CD action\")\n .helpOption(\"-h, --help\", \"Show help\")\n .option(\"--parallel [boolean]\", \"Run in parallel mode\", parseBooleanArg)\n .option(\"--api-key <key>\", \"API key\")\n .option(\n \"--pull-request [boolean]\",\n \"Create a pull request with the changes\",\n parseBooleanArg,\n )\n .option(\"--commit-message <message>\", \"Commit message\")\n .option(\"--pull-request-title <title>\", \"Pull request title\")\n .option(\"--working-directory <dir>\", \"Working directory\")\n .option(\n \"--process-own-commits [boolean]\",\n \"Process commits made by this action\",\n parseBooleanArg,\n )\n .action(async (options: CIOptions) => {\n const settings = getSettings(options.apiKey);\n\n console.log(options);\n\n if (!settings.auth.apiKey) {\n console.error(\"No API key provided\");\n return;\n }\n\n const authenticator = createAuthenticator({\n apiUrl: settings.auth.apiUrl,\n apiKey: settings.auth.apiKey,\n });\n const auth = await authenticator.whoami();\n\n if (!auth) {\n console.error(\"Not authenticated\");\n return;\n }\n\n const env = {\n LINGODOTDEV_API_KEY: settings.auth.apiKey,\n LINGODOTDEV_PULL_REQUEST: options.pullRequest?.toString() || \"false\",\n ...(options.commitMessage && {\n LINGODOTDEV_COMMIT_MESSAGE: options.commitMessage,\n }),\n ...(options.pullRequestTitle && {\n LINGODOTDEV_PULL_REQUEST_TITLE: options.pullRequestTitle,\n }),\n ...(options.workingDirectory && {\n LINGODOTDEV_WORKING_DIRECTORY: options.workingDirectory,\n }),\n ...(options.processOwnCommits && {\n LINGODOTDEV_PROCESS_OWN_COMMITS: options.processOwnCommits.toString(),\n }),\n };\n\n process.env = { ...process.env, ...env };\n\n const ora = createOra();\n const platformKit = getPlatformKit();\n const { isPullRequestMode } = platformKit.config;\n\n ora.info(`Pull request mode: ${isPullRequestMode ? \"on\" : \"off\"}`);\n\n const flow: IIntegrationFlow = isPullRequestMode\n ? new PullRequestFlow(ora, platformKit)\n : new InBranchFlow(ora, platformKit);\n\n const canRun = await flow.preRun?.();\n if (canRun === false) {\n return;\n }\n\n const hasChanges = await flow.run({\n parallel: options.parallel,\n });\n if (!hasChanges) {\n return;\n }\n\n await flow.postRun?.();\n });\n\nfunction parseBooleanArg(val: string | boolean | undefined): boolean {\n if (val === true) return true;\n if (typeof val === \"string\") {\n return val.toLowerCase() === \"true\";\n }\n return false;\n}\n","import { execSync } from \"child_process\";\nimport { InBranchFlow } from \"./in-branch\";\nimport { IIntegrationFlowOptions } from \"./_base\";\n\nexport class PullRequestFlow extends InBranchFlow {\n async preRun() {\n const canContinue = await super.preRun?.();\n if (!canContinue) {\n return false;\n }\n\n this.ora.start(\"Calculating automated branch name\");\n this.i18nBranchName = this.calculatePrBranchName();\n this.ora.succeed(\n `Automated branch name calculated: ${this.i18nBranchName}`,\n );\n\n this.ora.start(\"Checking if branch exists\");\n const branchExists = await this.checkBranchExistance(this.i18nBranchName);\n this.ora.succeed(branchExists ? \"Branch exists\" : \"Branch does not exist\");\n\n if (branchExists) {\n this.ora.start(`Checking out branch ${this.i18nBranchName}`);\n this.checkoutI18nBranch(this.i18nBranchName);\n this.ora.succeed(`Checked out branch ${this.i18nBranchName}`);\n\n this.ora.start(\n `Syncing with ${this.platformKit.platformConfig.baseBranchName}`,\n );\n this.syncI18nBranch();\n this.ora.succeed(`Checked out and synced branch ${this.i18nBranchName}`);\n } else {\n this.ora.start(`Creating branch ${this.i18nBranchName}`);\n this.createI18nBranch(this.i18nBranchName);\n this.ora.succeed(`Created branch ${this.i18nBranchName}`);\n }\n\n return true;\n }\n\n override async run(options: IIntegrationFlowOptions) {\n return super.run({\n force: true,\n ...options,\n });\n }\n\n async postRun() {\n if (!this.i18nBranchName) {\n throw new Error(\n \"i18nBranchName is not set. Did you forget to call preRun?\",\n );\n }\n\n this.ora.start(\"Checking if PR already exists\");\n const pullRequestNumber = await this.ensureFreshPr(this.i18nBranchName);\n // await this.createLabelIfNotExists(pullRequestNumber, 'lingo.dev/i18n', false);\n this.ora.succeed(\n `Pull request ready: ${this.platformKit.buildPullRequestUrl(pullRequestNumber)}`,\n );\n }\n\n private calculatePrBranchName(): string {\n return `lingo.dev/${this.platformKit.platformConfig.baseBranchName}`;\n }\n\n private async checkBranchExistance(prBranchName: string) {\n return this.platformKit.branchExists({\n branch: prBranchName,\n });\n }\n\n private async ensureFreshPr(i18nBranchName: string) {\n // Check if PR exists\n this.ora.start(\n `Checking for existing PR with head ${i18nBranchName} and base ${this.platformKit.platformConfig.baseBranchName}`,\n );\n let prNumber = await this.platformKit.getOpenPullRequestNumber({\n branch: i18nBranchName,\n });\n\n if (prNumber) {\n this.ora.succeed(`Existing PR found: #${prNumber}`);\n } else {\n // Create new PR\n this.ora.start(`Creating new PR`);\n prNumber = await this.platformKit.createPullRequest({\n head: i18nBranchName,\n title: this.platformKit.config.pullRequestTitle,\n body: this.getPrBodyContent(),\n });\n this.ora.succeed(`Created new PR: #${prNumber}`);\n }\n\n return prNumber;\n }\n\n private checkoutI18nBranch(i18nBranchName: string) {\n execSync(`git fetch origin ${i18nBranchName}`, { stdio: \"inherit\" });\n execSync(`git checkout -b ${i18nBranchName}`, {\n stdio: \"inherit\",\n });\n }\n\n private createI18nBranch(i18nBranchName: string) {\n try {\n execSync(\n `git fetch origin ${this.platformKit.platformConfig.baseBranchName}`,\n { stdio: \"inherit\" },\n );\n execSync(\n `git checkout -b ${i18nBranchName} origin/${this.platformKit.platformConfig.baseBranchName}`,\n {\n stdio: \"inherit\",\n },\n );\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : \"Unknown error occurred\";\n this.ora.fail(`Failed to create branch: ${errorMessage}`);\n this.ora.info(`\n Troubleshooting tips:\n 1. Make sure you have permission to create branches\n 2. Check if the branch already exists locally (try 'git branch -a')\n 3. Verify connectivity to remote repository\n `);\n throw new Error(`Branch creation failed: ${errorMessage}`);\n }\n }\n\n private syncI18nBranch() {\n if (!this.i18nBranchName) {\n throw new Error(\"i18nBranchName is not set\");\n }\n\n this.ora.start(\n `Fetching latest changes from ${this.platformKit.platformConfig.baseBranchName}`,\n );\n execSync(\n `git fetch origin ${this.platformKit.platformConfig.baseBranchName}`,\n { stdio: \"inherit\" },\n );\n this.ora.succeed(\n `Fetched latest changes from ${this.platformKit.platformConfig.baseBranchName}`,\n );\n\n try {\n this.ora.start(\"Attempting to rebase branch\");\n execSync(\n `git rebase origin/${this.platformKit.platformConfig.baseBranchName}`,\n { stdio: \"inherit\" },\n );\n this.ora.succeed(\"Successfully rebased branch\");\n } catch (error) {\n this.ora.warn(\"Rebase failed, falling back to alternative sync method\");\n\n this.ora.start(\"Aborting failed rebase\");\n execSync(\"git rebase --abort\", { stdio: \"inherit\" });\n this.ora.succeed(\"Aborted failed rebase\");\n\n this.ora.start(\n `Resetting to ${this.platformKit.platformConfig.baseBranchName}`,\n );\n execSync(\n `git reset --hard origin/${this.platformKit.platformConfig.baseBranchName}`,\n { stdio: \"inherit\" },\n );\n this.ora.succeed(\n `Reset to ${this.platformKit.platformConfig.baseBranchName}`,\n );\n\n this.ora.start(\"Restoring target files\");\n const targetFiles = [\"i18n.lock\"];\n const targetFileNames = execSync(\n `npx lingo.dev@latest show files --target ${this.platformKit.platformConfig.baseBranchName}`,\n { encoding: \"utf8\" },\n )\n .split(\"\\n\")\n .filter(Boolean);\n targetFiles.push(...targetFileNames);\n execSync(`git fetch origin ${this.i18nBranchName}`, { stdio: \"inherit\" });\n for (const file of targetFiles) {\n try {\n // bring all files to the i18n branch's state\n execSync(`git checkout FETCH_HEAD -- ${file}`, { stdio: \"inherit\" });\n } catch (error) {\n // If file doesn't exist in FETCH_HEAD, that's okay - just skip it\n this.ora.warn(`Skipping non-existent file: ${file}`);\n continue;\n }\n }\n this.ora.succeed(\"Restored target files\");\n }\n\n this.ora.start(\"Checking for changes to commit\");\n const hasChanges = this.checkCommitableChanges();\n if (hasChanges) {\n execSync(\"git add .\", { stdio: \"inherit\" });\n execSync(\n `git commit -m \"chore: sync with ${this.platformKit.platformConfig.baseBranchName}\" --no-verify`,\n {\n stdio: \"inherit\",\n },\n );\n this.ora.succeed(\"Committed additional changes\");\n } else {\n this.ora.succeed(\"No changes to commit\");\n }\n }\n\n private getPrBodyContent(): string {\n return `\nHey team,\n\n[**Lingo.dev**](https://lingo.dev) here with fresh translations!\n\n### In this update\n\n- Added missing translations\n- Performed brand voice, context and glossary checks\n- Enhanced translations using Lingo.dev Localization Engine\n\n### Next Steps\n\n- [ ] Review the changes\n- [ ] Merge when ready\n `.trim();\n }\n}\n","import { execSync } from \"child_process\";\nimport path from \"path\";\nimport {\n gitConfig,\n IntegrationFlow,\n escapeShellArg,\n IIntegrationFlowOptions,\n} from \"./_base\";\nimport i18nCmd from \"../../i18n\";\nimport runCmd from \"../../run\";\n\nexport class InBranchFlow extends IntegrationFlow {\n async preRun() {\n this.ora.start(\"Configuring git\");\n const canContinue = this.configureGit();\n this.ora.succeed(\"Git configured\");\n\n return canContinue;\n }\n\n async run(options: IIntegrationFlowOptions) {\n this.ora.start(\"Running Lingo.dev\");\n await this.runLingoDotDev(options.parallel);\n this.ora.succeed(\"Done running Lingo.dev\");\n\n execSync(`rm -f i18n.cache`, { stdio: \"inherit\" }); // do not commit cache file if it exists\n\n this.ora.start(\"Checking for changes\");\n const hasChanges = this.checkCommitableChanges();\n this.ora.succeed(hasChanges ? \"Changes detected\" : \"No changes detected\");\n\n if (hasChanges) {\n this.ora.start(\"Committing changes\");\n execSync(`git add .`, { stdio: \"inherit\" });\n execSync(`git status --porcelain`, { stdio: \"inherit\" });\n execSync(\n `git commit -m ${escapeShellArg(this.platformKit.config.commitMessage)} --no-verify`,\n {\n stdio: \"inherit\",\n },\n );\n this.ora.succeed(\"Changes committed\");\n\n this.ora.start(\"Pushing changes to remote\");\n const currentBranch =\n this.i18nBranchName ?? this.platformKit.platformConfig.baseBranchName;\n execSync(\n `git push origin ${currentBranch} ${options.force ? \"--force\" : \"\"}`,\n {\n stdio: \"inherit\",\n },\n );\n this.ora.succeed(\"Changes pushed to remote\");\n }\n\n return hasChanges;\n }\n\n protected checkCommitableChanges() {\n return (\n execSync('git status --porcelain || echo \"has_changes\"', {\n encoding: \"utf8\",\n }).length > 0\n );\n }\n\n private async runLingoDotDev(isParallel?: boolean) {\n try {\n if (!isParallel) {\n await i18nCmd\n .exitOverride()\n .parseAsync([\"--api-key\", this.platformKit.config.replexicaApiKey], {\n from: \"user\",\n });\n } else {\n await runCmd\n .exitOverride()\n .parseAsync([\"--api-key\", this.platformKit.config.replexicaApiKey], {\n from: \"user\",\n });\n }\n } catch (err: any) {\n if (err.code === \"commander.helpDisplayed\") return;\n throw err;\n }\n }\n\n private configureGit() {\n const { processOwnCommits } = this.platformKit.config;\n const { baseBranchName } = this.platformKit.platformConfig;\n\n this.ora.info(`Current working directory:`);\n execSync(`pwd`, { stdio: \"inherit\" });\n execSync(`ls -la`, { stdio: \"inherit\" });\n\n execSync(`git config --global safe.directory ${process.cwd()}`);\n\n execSync(`git config user.name \"${gitConfig.userName}\"`);\n execSync(`git config user.email \"${gitConfig.userEmail}\"`);\n\n // perform platform-specific configuration before fetching or pushing to the remote\n this.platformKit?.gitConfig();\n\n execSync(`git fetch origin ${baseBranchName}`, { stdio: \"inherit\" });\n execSync(`git checkout ${baseBranchName} --`, { stdio: \"inherit\" });\n\n if (!processOwnCommits) {\n const currentAuthor = `${gitConfig.userName} <${gitConfig.userEmail}>`;\n const authorOfLastCommit = execSync(\n `git log -1 --pretty=format:'%an <%ae>'`,\n ).toString();\n if (authorOfLastCommit === currentAuthor) {\n this.ora.warn(\n `The last commit was already made by ${currentAuthor}, so this run will be skipped, as running again would have no effect. See docs: https://docs.lingo.dev/ci-action/overview`,\n );\n return false;\n }\n }\n\n const workingDir = path.resolve(\n process.cwd(),\n this.platformKit.config.workingDir,\n );\n if (workingDir !== process.cwd()) {\n this.ora.info(\n `Changing to working directory: ${this.platformKit.config.workingDir}`,\n );\n process.chdir(workingDir);\n }\n\n return true;\n }\n}\n","import { Ora } from \"ora\";\nimport { PlatformKit } from \"../platforms/_base\";\n\nexport type IIntegrationFlowOptions = {\n parallel?: boolean;\n force?: boolean;\n};\n\nexport interface IIntegrationFlow {\n preRun?(): Promise<boolean>;\n run(options: IIntegrationFlowOptions): Promise<boolean>;\n postRun?(): Promise<void>;\n}\n\nexport abstract class IntegrationFlow implements IIntegrationFlow {\n protected i18nBranchName?: string;\n\n constructor(\n protected ora: Ora,\n protected platformKit: PlatformKit,\n ) {}\n\n abstract run(options: IIntegrationFlowOptions): Promise<boolean>;\n}\n\nexport const gitConfig = {\n userName: \"Lingo.dev\",\n userEmail: \"support@lingo.dev\",\n};\n\nexport function escapeShellArg(arg: string): string {\n return `'${arg.replace(/'/g, \"'\\\\''\")}'`;\n}\n","import { Command } from \"interactive-commander\";\nimport setup from \"./setup\";\nimport plan from \"./plan\";\nimport execute from \"./execute\";\nimport { CmdRunContext, flagsSchema } from \"./_types\";\nimport {\n renderClear,\n renderSpacer,\n renderBanner,\n renderHero,\n pauseIfDebug,\n renderSummary,\n} from \"../../utils/ui\";\nimport chalk from \"chalk\";\nimport trackEvent from \"../../utils/observability\";\nimport { determineAuthId } from \"./_utils\";\n\nexport default new Command()\n .command(\"run\")\n .description(\"Run Lingo.dev localization engine\")\n .helpOption(\"-h, --help\", \"Show help\")\n .option(\n \"--source-locale <source-locale>\",\n \"Locale to use as source locale. Defaults to i18n.json locale.source\",\n )\n .option(\n \"--target-locale <target-locale>\",\n \"Locale to use as target locale. Defaults to i18n.json locale.targets\",\n (val: string, prev: string[]) => (prev ? [...prev, val] : [val]),\n )\n .option(\n \"--bucket <bucket>\",\n \"Bucket to process\",\n (val: string, prev: string[]) => (prev ? [...prev, val] : [val]),\n )\n .option(\n \"--file <file>\",\n \"File to process. Process only files that include this string in their path. Useful if you have a lot of files and want to focus on a specific one. Specify more files separated by commas or spaces.\",\n (val: string, prev: string[]) => (prev ? [...prev, val] : [val]),\n )\n .option(\n \"--key <key>\",\n \"Key to process. Process only a specific translation key, useful for updating a single entry\",\n (val: string, prev: string[]) => (prev ? [...prev, val] : [val]),\n )\n .option(\n \"--force\",\n \"Ignore lockfile and process all keys, useful for full re-translation\",\n )\n .option(\n \"--api-key <api-key>\",\n \"Explicitly set the API key to use, override the default API key from settings\",\n )\n .option(\n \"--debug\",\n \"Pause execution at start for debugging purposes, waits for user confirmation before proceeding\",\n )\n .option(\n \"--concurrency <concurrency>\",\n \"Number of concurrent tasks to run\",\n (val: string) => parseInt(val),\n )\n .action(async (args) => {\n let authId: string | null = null;\n try {\n const ctx: CmdRunContext = {\n flags: flagsSchema.parse(args),\n config: null,\n results: new Map(),\n tasks: [],\n localizer: null,\n };\n\n await pauseIfDebug(ctx.flags.debug);\n await renderClear();\n await renderSpacer();\n await renderBanner();\n await renderHero();\n await renderSpacer();\n\n await setup(ctx);\n\n authId = await determineAuthId(ctx);\n\n trackEvent(authId, \"cmd.run.start\", {\n config: ctx.config,\n flags: ctx.flags,\n });\n\n await renderSpacer();\n\n await plan(ctx);\n await renderSpacer();\n\n await execute(ctx);\n await renderSpacer();\n\n await renderSummary(ctx.results);\n await renderSpacer();\n\n trackEvent(authId, \"cmd.run.success\", {\n config: ctx.config,\n flags: ctx.flags,\n });\n } catch (error: any) {\n trackEvent(authId || \"unknown\", \"cmd.run.error\", {});\n process.exit(1);\n }\n });\n","import chalk from \"chalk\";\nimport { Listr } from \"listr2\";\nimport { colors } from \"../../constants\";\nimport { CmdRunContext, flagsSchema } from \"./_types\";\nimport { commonTaskRendererOptions } from \"./_const\";\nimport { getConfig } from \"../../utils/config\";\nimport createLocalizer from \"../../localizer\";\n\nexport default async function setup(input: CmdRunContext) {\n console.log(chalk.hex(colors.orange)(\"[Setup]\"));\n\n return new Listr<CmdRunContext>(\n [\n {\n title: \"Setting up the environment\",\n task: async (ctx, task) => {\n // setup gitignore, etc here\n task.title = `Environment setup completed`;\n },\n },\n {\n title: \"Loading i18n configuration\",\n task: async (ctx, task) => {\n ctx.config = getConfig(true);\n\n if (!ctx.config) {\n throw new Error(\n \"i18n.json not found. Please run `lingo.dev init` to initialize the project.\",\n );\n } else if (\n !ctx.config.buckets ||\n !Object.keys(ctx.config.buckets).length\n ) {\n throw new Error(\n \"No buckets found in i18n.json. Please add at least one bucket containing i18n content.\",\n );\n } else if (\n ctx.flags.bucket?.some(\n (bucket) =>\n !ctx.config?.buckets[bucket as keyof typeof ctx.config.buckets],\n )\n ) {\n throw new Error(\n `One or more specified buckets do not exist in i18n.json. Please add them to the list first and try again.`,\n );\n }\n task.title = `Loaded i18n configuration`;\n },\n },\n {\n title: \"Selecting localization provider\",\n task: async (ctx, task) => {\n ctx.localizer = createLocalizer(\n ctx.config?.provider,\n ctx.flags.apiKey,\n );\n if (!ctx.localizer) {\n throw new Error(\n \"Could not create localization provider. Please check your i18n.json configuration.\",\n );\n }\n task.title =\n ctx.localizer.id === \"Lingo.dev\"\n ? `Using ${chalk.hex(colors.green)(ctx.localizer.id)} provider`\n : `Using raw ${chalk.hex(colors.yellow)(ctx.localizer.id)} API`;\n },\n },\n {\n title: \"Checking authentication\",\n task: async (ctx, task) => {\n const authStatus = await ctx.localizer!.checkAuth();\n if (!authStatus.authenticated) {\n throw new Error(\n `Failed to authenticate with ${chalk.hex(colors.yellow)(ctx.localizer!.id)} provider. Please check your API key and try again.`,\n );\n }\n task.title = `Authenticated as ${chalk.hex(colors.yellow)(authStatus.username)}`;\n },\n },\n {\n title: \"Initializing localization provider\",\n async task(ctx, task) {\n const isLingoDotDev = ctx.localizer!.id === \"Lingo.dev\";\n\n const subTasks = isLingoDotDev\n ? [\n \"Brand voice enabled\",\n \"Translation memory connected\",\n \"Glossary enabled\",\n \"Quality assurance enabled\",\n ].map((title) => ({ title, task: () => {} }))\n : [\n \"Skipping brand voice\",\n \"Skipping glossary\",\n \"Skipping translation memory\",\n \"Skipping quality assurance\",\n ].map((title) => ({ title, task: () => {}, skip: true }));\n\n return task.newListr(subTasks, {\n concurrent: true,\n rendererOptions: { collapseSubtasks: false },\n });\n },\n },\n ],\n {\n rendererOptions: commonTaskRendererOptions,\n },\n ).run(input);\n}\n","import chalk from \"chalk\";\nimport { ListrDefaultRendererLogLevels } from \"listr2\";\nimport { colors } from \"../../constants\";\n\nexport const commonTaskRendererOptions = {\n color: {\n [ListrDefaultRendererLogLevels.COMPLETED]: (msg?: string) =>\n msg ? chalk.hex(colors.green)(msg) : chalk.hex(colors.green)(\"\"),\n },\n icon: {\n [ListrDefaultRendererLogLevels.COMPLETED]: chalk.hex(colors.green)(\"✓\"),\n },\n};\n","import dedent from \"dedent\";\nimport { ILocalizer, LocalizerData } from \"./_types\";\nimport chalk from \"chalk\";\nimport { colors } from \"../constants\";\nimport { LingoDotDevEngine } from \"@lingo.dev/_sdk\";\nimport { getSettings } from \"../utils/settings\";\n\nexport default function createLingoDotDevLocalizer(\n explicitApiKey?: string,\n): ILocalizer {\n const { auth } = getSettings(explicitApiKey);\n\n if (!auth) {\n throw new Error(\n dedent`\n You're trying to use ${chalk.hex(colors.green)(\"Lingo.dev\")} provider, however, you are not authenticated.\n\n To fix this issue:\n 1. Run ${chalk.dim(\"lingo.dev login\")} to authenticate, or\n 2. Use the ${chalk.dim(\"--api-key\")} flag to provide an API key.\n 3. Set ${chalk.dim(\"LINGODOTDEV_API_KEY\")} environment variable.\n `,\n );\n }\n\n const engine = new LingoDotDevEngine({\n apiKey: auth.apiKey,\n apiUrl: auth.apiUrl,\n });\n\n return {\n id: \"Lingo.dev\",\n checkAuth: async () => {\n try {\n const response = await engine.whoami();\n return {\n authenticated: !!response,\n username: response?.email,\n };\n } catch {\n return { authenticated: false };\n }\n },\n localize: async (input: LocalizerData, onProgress) => {\n // Nothing to translate – return the input as-is.\n if (!Object.keys(input.processableData).length) {\n return input;\n }\n\n const processedData = await engine.localizeObject(\n input.processableData,\n {\n sourceLocale: input.sourceLocale,\n targetLocale: input.targetLocale,\n reference: {\n [input.sourceLocale]: input.sourceData,\n [input.targetLocale]: input.targetData,\n },\n },\n onProgress,\n );\n\n return processedData;\n },\n };\n}\n","import { createAnthropic } from \"@ai-sdk/anthropic\";\nimport { createGoogleGenerativeAI } from \"@ai-sdk/google\";\nimport { createOpenAI } from \"@ai-sdk/openai\";\nimport { createOpenRouter } from \"@openrouter/ai-sdk-provider\";\nimport { I18nConfig } from \"@lingo.dev/_spec\";\nimport chalk from \"chalk\";\nimport dedent from \"dedent\";\nimport { ILocalizer, LocalizerData } from \"./_types\";\nimport { LanguageModel, Message, generateText } from \"ai\";\nimport { colors } from \"../constants\";\nimport { jsonrepair } from \"jsonrepair\";\nimport { createOllama } from \"ollama-ai-provider\";\n\nexport default function createExplicitLocalizer(\n provider: NonNullable<I18nConfig[\"provider\"]>,\n): ILocalizer {\n switch (provider.id) {\n default:\n throw new Error(\n dedent`\n You're trying to use unsupported provider: ${chalk.dim(provider.id)}.\n\n To fix this issue:\n 1. Switch to one of the supported providers, or\n 2. Remove the ${chalk.italic(\"provider\")} node from your i18n.json configuration to switch to ${chalk.hex(colors.green)(\"Lingo.dev\")}\n\n ${chalk.hex(colors.blue)(\"Docs: https://lingo.dev/go/docs\")}\n `,\n );\n case \"openai\":\n return createAiSdkLocalizer({\n factory: (params) => createOpenAI(params).languageModel(provider.model),\n id: provider.id,\n prompt: provider.prompt,\n apiKeyName: \"OPENAI_API_KEY\",\n baseUrl: provider.baseUrl,\n });\n case \"anthropic\":\n return createAiSdkLocalizer({\n factory: (params) =>\n createAnthropic(params).languageModel(provider.model),\n id: provider.id,\n prompt: provider.prompt,\n apiKeyName: \"ANTHROPIC_API_KEY\",\n baseUrl: provider.baseUrl,\n });\n case \"google\":\n return createAiSdkLocalizer({\n factory: (params) =>\n createGoogleGenerativeAI(params).languageModel(provider.model),\n id: provider.id,\n prompt: provider.prompt,\n apiKeyName: \"GOOGLE_API_KEY\",\n baseUrl: provider.baseUrl,\n });\n case \"openrouter\":\n return createAiSdkLocalizer({\n factory: (params) =>\n createOpenRouter(params).languageModel(provider.model),\n id: provider.id,\n prompt: provider.prompt,\n apiKeyName: \"OPENROUTER_API_KEY\",\n baseUrl: provider.baseUrl,\n });\n case \"ollama\":\n return createAiSdkLocalizer({\n factory: (_params) => createOllama().languageModel(provider.model),\n id: provider.id,\n prompt: provider.prompt,\n skipAuth: true,\n });\n }\n}\n\nfunction createAiSdkLocalizer(params: {\n factory: (params: { apiKey?: string; baseUrl?: string }) => LanguageModel;\n id: NonNullable<I18nConfig[\"provider\"]>[\"id\"];\n prompt: string;\n apiKeyName?: string;\n baseUrl?: string;\n skipAuth?: boolean;\n}): ILocalizer {\n const skipAuth = params.skipAuth === true;\n\n const apiKey = process.env[params?.apiKeyName ?? \"\"];\n if ((!skipAuth && !apiKey) || !params.apiKeyName) {\n throw new Error(\n dedent`\n You're trying to use raw ${chalk.dim(params.id)} API for translation. ${params.apiKeyName ? `However, ${chalk.dim(params.apiKeyName)} environment variable is not set.` : \"However, that provider is unavailable.\"}\n\n To fix this issue:\n 1. ${params.apiKeyName ? `Set ${chalk.dim(params.apiKeyName)} in your environment variables` : \"Set the environment variable for your provider (if required)\"}, or\n 2. Remove the ${chalk.italic(\"provider\")} node from your i18n.json configuration to switch to ${chalk.hex(colors.green)(\"Lingo.dev\")}\n\n ${chalk.hex(colors.blue)(\"Docs: https://lingo.dev/go/docs\")}\n `,\n );\n }\n\n const model = params.factory(\n skipAuth ? {} : { apiKey, baseUrl: params.baseUrl },\n );\n\n return {\n id: params.id,\n checkAuth: async () => {\n try {\n await generateText({\n model,\n messages: [\n { role: \"system\", content: \"You are an echo server\" },\n { role: \"user\", content: \"OK\" },\n { role: \"assistant\", content: \"OK\" },\n { role: \"user\", content: \"OK\" },\n ],\n });\n\n return { authenticated: true, username: \"anonymous\" };\n } catch (error) {\n return { authenticated: false };\n }\n },\n localize: async (input: LocalizerData) => {\n const systemPrompt = params.prompt\n .replaceAll(\"{source}\", input.sourceLocale)\n .replaceAll(\"{target}\", input.targetLocale);\n const shots = [\n [\n {\n sourceLocale: \"en\",\n targetLocale: \"es\",\n data: {\n message: \"Hello, world!\",\n },\n },\n {\n sourceLocale: \"en\",\n targetLocale: \"es\",\n data: {\n message: \"Hola, mundo!\",\n },\n },\n ],\n ];\n\n const payload = {\n sourceLocale: input.sourceLocale,\n targetLocale: input.targetLocale,\n data: input.processableData,\n };\n\n const response = await generateText({\n model,\n messages: [\n { role: \"system\", content: systemPrompt },\n { role: \"user\", content: \"OK\" },\n ...shots.flatMap(\n ([userShot, assistantShot]) =>\n [\n { role: \"user\", content: JSON.stringify(userShot) },\n { role: \"assistant\", content: JSON.stringify(assistantShot) },\n ] as Message[],\n ),\n { role: \"user\", content: JSON.stringify(payload) },\n ],\n });\n\n const result = JSON.parse(response.text);\n const index = result.data.indexOf(\"{\");\n const lastIndex = result.data.lastIndexOf(\"}\");\n const trimmed = result.data.slice(index, lastIndex + 1);\n const repaired = jsonrepair(trimmed);\n const finalResult = JSON.parse(repaired);\n\n return finalResult.data;\n },\n };\n}\n","import { I18nConfig } from \"@lingo.dev/_spec\";\n\nimport createLingoDotDevLocalizer from \"./lingodotdev\";\nimport createExplicitLocalizer from \"./explicit\";\nimport { ILocalizer } from \"./_types\";\n\nexport default function createLocalizer(\n provider: I18nConfig[\"provider\"],\n apiKey?: string,\n): ILocalizer {\n if (!provider) {\n return createLingoDotDevLocalizer(apiKey);\n } else {\n return createExplicitLocalizer(provider);\n }\n}\n","import chalk from \"chalk\";\nimport { Listr } from \"listr2\";\n\nimport { colors } from \"../../constants\";\nimport { resolveOverriddenLocale } from \"@lingo.dev/_spec\";\nimport { getBuckets } from \"../../utils/buckets\";\nimport { commonTaskRendererOptions } from \"./_const\";\nimport { CmdRunContext } from \"./_types\";\n\nexport default async function plan(\n input: CmdRunContext,\n): Promise<CmdRunContext> {\n console.log(chalk.hex(colors.orange)(\"[Planning]\"));\n\n let buckets = getBuckets(input.config!);\n if (input.flags.bucket) {\n buckets = buckets.filter((b) => input.flags.bucket!.includes(b.type));\n }\n\n const _sourceLocale = input.flags.sourceLocale || input.config!.locale.source;\n if (!_sourceLocale) {\n throw new Error(\n `No source locale provided. Use --source-locale to specify the source locale or add it to i18n.json (locale.source)`,\n );\n }\n const _targetLocales =\n input.flags.targetLocale || input.config!.locale.targets;\n if (!_targetLocales.length) {\n throw new Error(\n `No target locales provided. Use --target-locale to specify the target locales or add them to i18n.json (locale.targets)`,\n );\n }\n\n return new Listr<CmdRunContext>(\n [\n {\n title: \"Locating content buckets\",\n task: async (ctx, task) => {\n const bucketCount = buckets.length;\n const bucketFilter = input.flags.bucket\n ? ` ${chalk.dim(`(filtered by: ${chalk.hex(colors.yellow)(input.flags.bucket!.join(\", \"))})`)}`\n : \"\";\n task.title = `Found ${chalk.hex(colors.yellow)(bucketCount.toString())} bucket(s)${bucketFilter}`;\n },\n },\n {\n title: \"Detecting locales\",\n task: async (ctx, task) => {\n task.title = `Found ${chalk.hex(colors.yellow)(_targetLocales.length.toString())} target locale(s)`;\n },\n },\n {\n title: \"Locating localizable files\",\n task: async (ctx, task) => {\n const patterns: string[] = [];\n\n for (const bucket of buckets) {\n for (const bucketPath of bucket.paths) {\n if (input.flags.file) {\n if (\n !input.flags.file.some((f) =>\n bucketPath.pathPattern.includes(f),\n )\n ) {\n continue;\n }\n }\n\n patterns.push(bucketPath.pathPattern);\n }\n }\n\n const fileFilter = input.flags.file\n ? ` ${chalk.dim(`(filtered by: ${chalk.hex(colors.yellow)(input.flags.file.join(\", \"))})`)}`\n : \"\";\n task.title = `Found ${chalk.hex(colors.yellow)(patterns.length.toString())} path pattern(s)${fileFilter}`;\n },\n },\n {\n title: \"Computing translation tasks\",\n task: async (ctx, task) => {\n for (const bucket of buckets) {\n for (const bucketPath of bucket.paths) {\n if (input.flags.file) {\n if (\n !input.flags.file.some((f) =>\n bucketPath.pathPattern.includes(f),\n )\n ) {\n continue;\n }\n }\n\n const sourceLocale = resolveOverriddenLocale(\n _sourceLocale,\n bucketPath.delimiter,\n );\n\n for (const _targetLocale of _targetLocales) {\n const targetLocale = resolveOverriddenLocale(\n _targetLocale,\n bucketPath.delimiter,\n );\n\n // Skip if source and target are identical (shouldn't happen but guard)\n if (sourceLocale === targetLocale) continue;\n\n ctx.tasks.push({\n sourceLocale,\n targetLocale,\n bucketType: bucket.type,\n bucketPathPattern: bucketPath.pathPattern,\n injectLocale: bucket.injectLocale || [],\n lockedKeys: bucket.lockedKeys || [],\n lockedPatterns: bucket.lockedPatterns || [],\n onlyKeys: input.flags.key || [],\n });\n }\n }\n }\n\n task.title = `Prepared ${chalk.hex(colors.green)(ctx.tasks.length.toString())} translation task(s)`;\n },\n },\n ],\n {\n rendererOptions: commonTaskRendererOptions,\n },\n ).run(input);\n}\n","import chalk from \"chalk\";\nimport { Listr, ListrTask } from \"listr2\";\nimport pLimit, { LimitFunction } from \"p-limit\";\nimport _ from \"lodash\";\n\nimport { colors } from \"../../constants\";\nimport { CmdRunContext, CmdRunTask, CmdRunTaskResult } from \"./_types\";\nimport { commonTaskRendererOptions } from \"./_const\";\nimport createBucketLoader from \"../../loaders\";\nimport { createDeltaProcessor } from \"../../utils/delta\";\n\nconst MAX_WORKER_COUNT = 10;\n\nexport default async function execute(input: CmdRunContext) {\n const effectiveConcurrency = Math.min(\n input.flags.concurrency,\n input.tasks.length,\n MAX_WORKER_COUNT,\n );\n console.log(chalk.hex(colors.orange)(`[Localization]`));\n\n return new Listr<CmdRunContext>(\n [\n {\n title: \"Initializing localization engine\",\n task: async (ctx, task) => {\n task.title = `Localization engine ${chalk.hex(colors.green)(\"ready\")} (${ctx.localizer!.id})`;\n },\n },\n {\n title: `Processing localization tasks ${chalk.dim(`(tasks: ${input.tasks.length}, concurrency: ${effectiveConcurrency})`)}`,\n task: (ctx, task) => {\n if (input.tasks.length < 1) {\n task.title = `Skipping, nothing to localize.`;\n task.skip();\n return;\n }\n\n const i18nLimiter = pLimit(effectiveConcurrency);\n const ioLimiter = pLimit(1);\n const workersCount = effectiveConcurrency;\n\n const workerTasks: ListrTask[] = [];\n for (let i = 0; i < workersCount; i++) {\n const assignedTasks = ctx.tasks.filter(\n (_, idx) => idx % workersCount === i,\n );\n workerTasks.push(\n createWorkerTask({\n ctx,\n assignedTasks,\n ioLimiter,\n i18nLimiter,\n onDone() {\n task.title = createExecutionProgressMessage(ctx);\n },\n }),\n );\n }\n\n return task.newListr(workerTasks, {\n concurrent: true,\n exitOnError: false,\n rendererOptions: {\n ...commonTaskRendererOptions,\n collapseSubtasks: true,\n },\n });\n },\n },\n ],\n {\n exitOnError: false,\n rendererOptions: commonTaskRendererOptions,\n },\n ).run(input);\n}\n\nfunction createWorkerStatusMessage(args: {\n assignedTask: CmdRunTask;\n percentage: number;\n}) {\n const displayPath = args.assignedTask.bucketPathPattern.replace(\n \"[locale]\",\n args.assignedTask.targetLocale,\n );\n return `[${chalk.hex(colors.yellow)(`${args.percentage}%`)}] Processing: ${chalk.dim(\n displayPath,\n )} (${chalk.hex(colors.yellow)(args.assignedTask.sourceLocale)} -> ${chalk.hex(\n colors.yellow,\n )(args.assignedTask.targetLocale)})`;\n}\n\nfunction createExecutionProgressMessage(ctx: CmdRunContext) {\n const succeededTasksCount = countTasks(\n ctx,\n (_t, result) => result.status === \"success\",\n );\n const failedTasksCount = countTasks(\n ctx,\n (_t, result) => result.status === \"error\",\n );\n const skippedTasksCount = countTasks(\n ctx,\n (_t, result) => result.status === \"skipped\",\n );\n\n return `Processed ${chalk.green(succeededTasksCount)}/${ctx.tasks.length}, Failed ${chalk.red(failedTasksCount)}, Skipped ${chalk.dim(skippedTasksCount)}`;\n}\n\nfunction createLoaderForTask(assignedTask: CmdRunTask) {\n const bucketLoader = createBucketLoader(\n assignedTask.bucketType,\n assignedTask.bucketPathPattern,\n {\n defaultLocale: assignedTask.sourceLocale,\n isCacheRestore: false,\n injectLocale: assignedTask.injectLocale,\n },\n assignedTask.lockedKeys,\n assignedTask.lockedPatterns,\n );\n bucketLoader.setDefaultLocale(assignedTask.sourceLocale);\n\n return bucketLoader;\n}\n\nfunction createWorkerTask(args: {\n ctx: CmdRunContext;\n assignedTasks: CmdRunTask[];\n ioLimiter: LimitFunction;\n i18nLimiter: LimitFunction;\n onDone: () => void;\n}): ListrTask {\n return {\n title: \"Initializing...\",\n task: async (_subCtx: any, subTask: any) => {\n for (const assignedTask of args.assignedTasks) {\n subTask.title = createWorkerStatusMessage({\n assignedTask,\n percentage: 0,\n });\n const bucketLoader = createLoaderForTask(assignedTask);\n const deltaProcessor = createDeltaProcessor(\n assignedTask.bucketPathPattern,\n );\n\n const taskResult = await args.i18nLimiter(async () => {\n try {\n const sourceData = await bucketLoader.pull(\n assignedTask.sourceLocale,\n );\n const targetData = await bucketLoader.pull(\n assignedTask.targetLocale,\n );\n const checksums = await deltaProcessor.loadChecksums();\n const delta = await deltaProcessor.calculateDelta({\n sourceData,\n targetData,\n checksums,\n });\n\n const processableData = _.chain(sourceData)\n .entries()\n .filter(\n ([key, value]) =>\n delta.added.includes(key) ||\n delta.updated.includes(key) ||\n !!args.ctx.flags.force,\n )\n .filter(\n ([key]) =>\n !assignedTask.onlyKeys.length ||\n assignedTask.onlyKeys.includes(key),\n )\n .fromPairs()\n .value();\n\n if (!Object.keys(processableData).length) {\n return { status: \"skipped\" } satisfies CmdRunTaskResult;\n }\n\n const processedTargetData = await args.ctx.localizer!.localize(\n {\n sourceLocale: assignedTask.sourceLocale,\n targetLocale: assignedTask.targetLocale,\n sourceData,\n targetData,\n processableData,\n },\n (progress) => {\n subTask.title = createWorkerStatusMessage({\n assignedTask,\n percentage: progress,\n });\n },\n );\n\n let finalTargetData = _.merge(\n {},\n sourceData,\n targetData,\n processedTargetData,\n );\n\n finalTargetData = _.chain(finalTargetData)\n .entries()\n .map(([key, value]) => {\n const renaming = delta.renamed.find(\n ([oldKey]) => oldKey === key,\n );\n if (!renaming) {\n return [key, value];\n }\n return [renaming[1], value];\n })\n .fromPairs()\n .value();\n\n await args.ioLimiter(async () => {\n await bucketLoader.pull(assignedTask.sourceLocale);\n await bucketLoader.push(\n assignedTask.targetLocale,\n finalTargetData,\n );\n\n const checksums =\n await deltaProcessor.createChecksums(sourceData);\n await deltaProcessor.saveChecksums(checksums);\n });\n\n return { status: \"success\" } satisfies CmdRunTaskResult;\n } catch (error) {\n return {\n status: \"error\",\n error: error as Error,\n } satisfies CmdRunTaskResult;\n }\n });\n\n args.ctx.results.set(assignedTask, taskResult);\n }\n\n subTask.title = \"Done\";\n },\n };\n}\n\nfunction countTasks(\n ctx: CmdRunContext,\n predicate: (task: CmdRunTask, result: CmdRunTaskResult) => boolean,\n) {\n return Array.from(ctx.results.entries()).filter(([task, result]) =>\n predicate(task, result),\n ).length;\n}\n","import {\n bucketTypeSchema,\n I18nConfig,\n localeCodeSchema,\n bucketTypes,\n} from \"@lingo.dev/_spec\";\nimport { z } from \"zod\";\nimport { ILocalizer } from \"../../localizer/_types\";\n\nexport type CmdRunContext = {\n flags: CmdRunFlags;\n config: I18nConfig | null;\n localizer: ILocalizer | null;\n tasks: CmdRunTask[];\n results: Map<CmdRunTask, CmdRunTaskResult>;\n};\n\nexport type CmdRunTaskResult = {\n status: \"success\" | \"error\" | \"skipped\";\n error?: Error;\n};\n\nexport type CmdRunTask = {\n sourceLocale: string;\n targetLocale: string;\n bucketType: (typeof bucketTypes)[number];\n bucketPathPattern: string;\n injectLocale: string[];\n lockedKeys: string[];\n lockedPatterns: string[];\n onlyKeys: string[];\n};\n\nexport const flagsSchema = z.object({\n bucket: z.array(bucketTypeSchema).optional(),\n key: z.array(z.string()).optional(),\n file: z.array(z.string()).optional(),\n apiKey: z.string().optional(),\n force: z.boolean().optional(),\n frozen: z.boolean().optional(),\n verbose: z.boolean().optional(),\n strict: z.boolean().optional(),\n interactive: z.boolean().default(false),\n concurrency: z.number().positive().default(10),\n debug: z.boolean().default(false),\n sourceLocale: z.string().optional(),\n targetLocale: z.array(z.string()).optional(),\n});\nexport type CmdRunFlags = z.infer<typeof flagsSchema>;\n","import { CmdRunContext } from \"./_types\";\n\n/**\n * Determines the authentication ID for tracking purposes\n */\nexport async function determineAuthId(\n ctx: CmdRunContext,\n): Promise<string | null> {\n const isByokMode = !!ctx.config?.provider;\n\n if (isByokMode) {\n return null;\n } else {\n try {\n const authStatus = await ctx.localizer?.checkAuth();\n return authStatus?.username || null;\n } catch {\n return null;\n }\n }\n}\n","import { execSync } from \"child_process\";\nimport bbLib from \"bitbucket\";\nimport Z from \"zod\";\nimport { PlatformKit } from \"./_base\";\n\nconst { Bitbucket } = bbLib;\n\ninterface BitbucketConfig {\n baseBranchName: string;\n repositoryOwner: string;\n repositoryName: string;\n bbToken?: string;\n}\n\nexport class BitbucketPlatformKit extends PlatformKit<BitbucketConfig> {\n private _bb?: ReturnType<typeof Bitbucket>;\n\n private get bb() {\n if (!this._bb) {\n this._bb = new Bitbucket({\n auth: { token: this.platformConfig.bbToken || \"\" },\n });\n }\n return this._bb;\n }\n\n async branchExists({ branch }: { branch: string }) {\n return await this.bb.repositories\n .getBranch({\n workspace: this.platformConfig.repositoryOwner,\n repo_slug: this.platformConfig.repositoryName,\n name: branch,\n })\n .then((r) => r.data)\n .then((v) => !!v)\n .catch((r) => (r.status === 404 ? false : Promise.reject(r)));\n }\n\n async getOpenPullRequestNumber({ branch }: { branch: string }) {\n return await this.bb.repositories\n .listPullRequests({\n workspace: this.platformConfig.repositoryOwner,\n repo_slug: this.platformConfig.repositoryName,\n state: \"OPEN\",\n })\n .then(({ data: { values } }) => {\n // TODO: we might need to handle pagination in future\n // bitbucket API does not support filtering pull requests\n // https://developer.atlassian.com/cloud/bitbucket/rest/api-group-pullrequests/#api-repositories-workspace-repo-slug-pullrequests-get\n return values?.find(\n ({ source, destination }) =>\n source?.branch?.name === branch &&\n destination?.branch?.name === this.platformConfig.baseBranchName,\n );\n })\n .then((pr) => pr?.id);\n }\n\n async closePullRequest({ pullRequestNumber }: { pullRequestNumber: number }) {\n await this.bb.repositories.declinePullRequest({\n workspace: this.platformConfig.repositoryOwner,\n repo_slug: this.platformConfig.repositoryName,\n pull_request_id: pullRequestNumber,\n });\n }\n\n async createPullRequest({\n title,\n body,\n head,\n }: {\n title: string;\n body?: string;\n head: string;\n }) {\n return await this.bb.repositories\n .createPullRequest({\n workspace: this.platformConfig.repositoryOwner,\n repo_slug: this.platformConfig.repositoryName,\n _body: {\n title,\n description: body,\n source: { branch: { name: head } },\n destination: { branch: { name: this.platformConfig.baseBranchName } },\n } as any,\n })\n .then(({ data }) => data.id ?? 0);\n }\n\n async commentOnPullRequest({\n pullRequestNumber,\n body,\n }: {\n pullRequestNumber: number;\n body: string;\n }) {\n await this.bb.repositories.createPullRequestComment({\n workspace: this.platformConfig.repositoryOwner,\n repo_slug: this.platformConfig.repositoryName,\n pull_request_id: pullRequestNumber,\n _body: {\n content: {\n raw: body,\n },\n } as any,\n });\n }\n\n async gitConfig() {\n execSync(\"git config --unset http.${BITBUCKET_GIT_HTTP_ORIGIN}.proxy\", {\n stdio: \"inherit\",\n });\n execSync(\n \"git config http.${BITBUCKET_GIT_HTTP_ORIGIN}.proxy http://host.docker.internal:29418/\",\n {\n stdio: \"inherit\",\n },\n );\n }\n\n get platformConfig() {\n const env = Z.object({\n BITBUCKET_BRANCH: Z.string(),\n BITBUCKET_REPO_FULL_NAME: Z.string(),\n BB_TOKEN: Z.string().optional(),\n }).parse(process.env);\n\n const [repositoryOwner, repositoryName] =\n env.BITBUCKET_REPO_FULL_NAME.split(\"/\");\n\n return {\n baseBranchName: env.BITBUCKET_BRANCH,\n repositoryOwner,\n repositoryName,\n bbToken: env.BB_TOKEN,\n };\n }\n\n buildPullRequestUrl(pullRequestNumber: number) {\n const { repositoryOwner, repositoryName } = this.platformConfig;\n return `https://bitbucket.org/${repositoryOwner}/${repositoryName}/pull-requests/${pullRequestNumber}`;\n }\n}\n","import { execSync } from \"child_process\";\nimport Z from \"zod\";\n\nconst defaultMessage = \"feat: update translations via @lingodotdev\";\n\ninterface BasePlatformConfig {\n baseBranchName: string;\n repositoryOwner: string;\n repositoryName: string;\n}\n\nexport abstract class PlatformKit<PlatformConfig extends BasePlatformConfig = BasePlatformConfig> {\n abstract branchExists(props: { branch: string }): Promise<boolean>;\n\n abstract getOpenPullRequestNumber(props: { branch: string }): Promise<number | undefined>;\n\n abstract closePullRequest(props: { pullRequestNumber: number }): Promise<void>;\n\n abstract createPullRequest(props: { head: string; title: string; body?: string }): Promise<number>;\n\n abstract commentOnPullRequest(props: { pullRequestNumber: number; body: string }): Promise<void>;\n\n abstract get platformConfig(): PlatformConfig;\n\n abstract buildPullRequestUrl(pullRequestNumber: number): string;\n\n gitConfig(token?: string, repoUrl?: string) {\n if (token && repoUrl) {\n execSync(`git remote set-url origin ${repoUrl}`, {\n stdio: \"inherit\",\n });\n }\n }\n\n get config() {\n const env = Z.object({\n LINGODOTDEV_API_KEY: Z.string(),\n LINGODOTDEV_PULL_REQUEST: Z.preprocess((val) => val === \"true\" || val === true, Z.boolean()),\n LINGODOTDEV_COMMIT_MESSAGE: Z.string().optional(),\n LINGODOTDEV_PULL_REQUEST_TITLE: Z.string().optional(),\n LINGODOTDEV_WORKING_DIRECTORY: Z.string().optional(),\n LINGODOTDEV_PROCESS_OWN_COMMITS: Z.preprocess((val) => val === \"true\" || val === true, Z.boolean()).optional(),\n }).parse(process.env);\n\n return {\n replexicaApiKey: env.LINGODOTDEV_API_KEY,\n isPullRequestMode: env.LINGODOTDEV_PULL_REQUEST,\n commitMessage: env.LINGODOTDEV_COMMIT_MESSAGE || defaultMessage,\n pullRequestTitle: env.LINGODOTDEV_PULL_REQUEST_TITLE || defaultMessage,\n workingDir: env.LINGODOTDEV_WORKING_DIRECTORY || \".\",\n processOwnCommits: env.LINGODOTDEV_PROCESS_OWN_COMMITS || false,\n };\n }\n}\n\nexport interface IConfig {\n replexicaApiKey: string;\n isPullRequestMode: boolean;\n commitMessage: string;\n pullRequestTitle: string;\n}\n","import { Octokit } from \"octokit\";\nimport { PlatformKit } from \"./_base\";\nimport Z from \"zod\";\n\nexport class GitHubPlatformKit extends PlatformKit {\n private _octokit?: Octokit;\n\n private get octokit(): Octokit {\n if (!this._octokit) {\n this._octokit = new Octokit({ auth: this.platformConfig.ghToken });\n }\n return this._octokit;\n }\n\n async branchExists({ branch }: { branch: string }) {\n return await this.octokit.rest.repos\n .getBranch({\n branch,\n owner: this.platformConfig.repositoryOwner,\n repo: this.platformConfig.repositoryName,\n })\n .then((r) => r.data)\n .then((v) => !!v)\n .catch((r) => (r.status === 404 ? false : Promise.reject(r)));\n }\n\n async getOpenPullRequestNumber({ branch }: { branch: string }) {\n return await this.octokit.rest.pulls\n .list({\n head: `${this.platformConfig.repositoryOwner}:${branch}`,\n owner: this.platformConfig.repositoryOwner,\n repo: this.platformConfig.repositoryName,\n base: this.platformConfig.baseBranchName,\n state: \"open\",\n })\n .then(({ data }) => data[0])\n .then((pr) => pr?.number);\n }\n\n async closePullRequest({ pullRequestNumber }: { pullRequestNumber: number }) {\n await this.octokit.rest.pulls.update({\n pull_number: pullRequestNumber,\n owner: this.platformConfig.repositoryOwner,\n repo: this.platformConfig.repositoryName,\n state: \"closed\",\n });\n }\n\n async createPullRequest({\n head,\n title,\n body,\n }: {\n head: string;\n title: string;\n body?: string;\n }) {\n return await this.octokit.rest.pulls\n .create({\n head,\n title,\n body,\n owner: this.platformConfig.repositoryOwner,\n repo: this.platformConfig.repositoryName,\n base: this.platformConfig.baseBranchName,\n })\n .then(({ data }) => data.number);\n }\n\n async commentOnPullRequest({\n pullRequestNumber,\n body,\n }: {\n pullRequestNumber: number;\n body: string;\n }) {\n await this.octokit.rest.issues.createComment({\n issue_number: pullRequestNumber,\n body,\n owner: this.platformConfig.repositoryOwner,\n repo: this.platformConfig.repositoryName,\n });\n }\n\n async gitConfig() {\n const { ghToken, repositoryOwner, repositoryName } = this.platformConfig;\n const { processOwnCommits } = this.config;\n\n if (ghToken && processOwnCommits) {\n console.log(\n \"Using provided GH_TOKEN. This will trigger your CI/CD pipeline to run again.\",\n );\n\n const url = `https://${ghToken}@github.com/${repositoryOwner}/${repositoryName}.git`;\n\n super.gitConfig(ghToken, url);\n }\n }\n\n get platformConfig() {\n const env = Z.object({\n GITHUB_REPOSITORY: Z.string(),\n GITHUB_REPOSITORY_OWNER: Z.string(),\n GITHUB_REF_NAME: Z.string(),\n GITHUB_HEAD_REF: Z.string(),\n GH_TOKEN: Z.string().optional(),\n }).parse(process.env);\n\n const baseBranchName = !env.GITHUB_REF_NAME.endsWith(\"/merge\")\n ? env.GITHUB_REF_NAME\n : env.GITHUB_HEAD_REF;\n\n return {\n ghToken: env.GH_TOKEN,\n baseBranchName,\n repositoryOwner: env.GITHUB_REPOSITORY_OWNER,\n repositoryName: env.GITHUB_REPOSITORY.split(\"/\")[1],\n };\n }\n\n buildPullRequestUrl(pullRequestNumber: number) {\n const { repositoryOwner, repositoryName } = this.platformConfig;\n return `https://github.com/${repositoryOwner}/${repositoryName}/pull/${pullRequestNumber}`;\n }\n}\n","import { Gitlab } from \"@gitbeaker/rest\";\nimport Z from \"zod\";\nimport { PlatformKit } from \"./_base\";\n\nconst gl = new Gitlab({ token: \"\" });\n\nexport class GitlabPlatformKit extends PlatformKit {\n private _gitlab?: InstanceType<typeof Gitlab>;\n\n constructor() {\n super();\n\n // change directory to current repository before executing replexica\n process.chdir(this.platformConfig.projectDir);\n }\n\n private get gitlab(): InstanceType<typeof Gitlab> {\n if (!this._gitlab) {\n this._gitlab = new Gitlab({\n token: this.platformConfig.glToken || \"\",\n });\n }\n return this._gitlab;\n }\n\n get platformConfig() {\n const env = Z.object({\n GL_TOKEN: Z.string().optional(),\n CI_COMMIT_BRANCH: Z.string(),\n CI_MERGE_REQUEST_SOURCE_BRANCH_NAME: Z.string().optional(),\n CI_PROJECT_NAMESPACE: Z.string(),\n CI_PROJECT_NAME: Z.string(),\n CI_PROJECT_ID: Z.string(),\n CI_PROJECT_DIR: Z.string(),\n CI_REPOSITORY_URL: Z.string(),\n }).parse(process.env);\n\n const config = {\n glToken: env.GL_TOKEN,\n baseBranchName:\n env.CI_MERGE_REQUEST_SOURCE_BRANCH_NAME ?? env.CI_COMMIT_BRANCH,\n repositoryOwner: env.CI_PROJECT_NAMESPACE,\n repositoryName: env.CI_PROJECT_NAME,\n gitlabProjectId: env.CI_PROJECT_ID,\n projectDir: env.CI_PROJECT_DIR,\n reporitoryUrl: env.CI_REPOSITORY_URL,\n };\n\n return config;\n }\n\n async branchExists({ branch }: { branch: string }): Promise<boolean> {\n try {\n await this.gitlab.Branches.show(\n this.platformConfig.gitlabProjectId,\n branch,\n );\n return true;\n } catch {\n return false;\n }\n }\n\n async getOpenPullRequestNumber({\n branch,\n }: {\n branch: string;\n }): Promise<number | undefined> {\n const mergeRequests = await this.gitlab.MergeRequests.all({\n projectId: this.platformConfig.gitlabProjectId,\n sourceBranch: branch,\n state: \"opened\",\n });\n return mergeRequests[0]?.iid;\n }\n\n async closePullRequest({\n pullRequestNumber,\n }: {\n pullRequestNumber: number;\n }): Promise<void> {\n await this.gitlab.MergeRequests.edit(\n this.platformConfig.gitlabProjectId,\n pullRequestNumber,\n {\n stateEvent: \"close\",\n },\n );\n }\n\n async createPullRequest({\n head,\n title,\n body,\n }: {\n head: string;\n title: string;\n body?: string;\n }): Promise<number> {\n const mr = await this.gitlab.MergeRequests.create(\n this.platformConfig.gitlabProjectId,\n head,\n this.platformConfig.baseBranchName,\n title,\n {\n description: body,\n },\n );\n return mr.iid;\n }\n\n async commentOnPullRequest({\n pullRequestNumber,\n body,\n }: {\n pullRequestNumber: number;\n body: string;\n }): Promise<void> {\n await this.gitlab.MergeRequestNotes.create(\n this.platformConfig.gitlabProjectId,\n pullRequestNumber,\n body,\n );\n }\n\n gitConfig(): Promise<void> | void {\n const glToken = this.platformConfig.glToken;\n const url = `https://oauth2:${glToken}@gitlab.com/${this.platformConfig.repositoryOwner}/${this.platformConfig.repositoryName}.git`;\n\n super.gitConfig(glToken, url);\n }\n\n buildPullRequestUrl(pullRequestNumber: number): string {\n return `https://gitlab.com/${this.platformConfig.repositoryOwner}/${this.platformConfig.repositoryName}/-/merge_requests/${pullRequestNumber}`;\n }\n}\n","import { BitbucketPlatformKit } from \"./bitbucket\";\nimport { GitHubPlatformKit } from \"./github\";\nimport { GitlabPlatformKit } from \"./gitlab\";\n\nexport const getPlatformKit = () => {\n if (process.env.BITBUCKET_PIPELINE_UUID) {\n return new BitbucketPlatformKit();\n }\n\n if (process.env.GITHUB_ACTION) {\n return new GitHubPlatformKit();\n }\n\n if (process.env.GITLAB_CI) {\n return new GitlabPlatformKit();\n }\n\n throw new Error(\"This platform is not supported\");\n};\n","import { bucketTypeSchema, I18nConfig, localeCodeSchema, resolveOverriddenLocale } from \"@lingo.dev/_spec\";\nimport { Command } from \"interactive-commander\";\nimport Z from \"zod\";\nimport _ from \"lodash\";\nimport * as path from \"path\";\nimport { getConfig } from \"../utils/config\";\nimport { getSettings } from \"../utils/settings\";\nimport { CLIError } from \"../utils/errors\";\nimport Ora from \"ora\";\nimport createBucketLoader from \"../loaders\";\nimport { createAuthenticator } from \"../utils/auth\";\nimport { getBuckets } from \"../utils/buckets\";\nimport chalk from \"chalk\";\nimport Table from \"cli-table3\";\nimport { createDeltaProcessor } from \"../utils/delta\";\nimport trackEvent from \"../utils/observability\";\n\n// Define types for our language stats\ninterface LanguageStats {\n complete: number;\n missing: number;\n updated: number;\n words: number;\n}\n\nexport default new Command()\n .command(\"status\")\n .description(\"Show the status of the localization process\")\n .helpOption(\"-h, --help\", \"Show help\")\n .option(\"--locale <locale>\", \"Locale to process\", (val: string, prev: string[]) => (prev ? [...prev, val] : [val]))\n .option(\"--bucket <bucket>\", \"Bucket to process\", (val: string, prev: string[]) => (prev ? [...prev, val] : [val]))\n .option(\n \"--file [files...]\",\n \"File to process. Process only a specific path, may contain asterisk * to match multiple files.\",\n )\n .option(\"--force\", \"Ignore lockfile and process all keys, useful for estimating full re-translation\")\n .option(\"--verbose\", \"Show detailed output including key-level word counts\")\n .option(\"--api-key <api-key>\", \"Explicitly set the API key to use, override the default API key from settings\")\n .action(async function (options) {\n const ora = Ora();\n const flags = parseFlags(options);\n let authId: string | null = null;\n\n try {\n ora.start(\"Loading configuration...\");\n const i18nConfig = getConfig();\n const settings = getSettings(flags.apiKey);\n ora.succeed(\"Configuration loaded\");\n\n // Try to authenticate, but continue even if not authenticated\n try {\n ora.start(\"Checking authentication status...\");\n const auth = await tryAuthenticate(settings);\n if (auth) {\n authId = auth.id;\n ora.succeed(`Authenticated as ${auth.email}`);\n } else {\n ora.info(\n \"Not authenticated. Continuing without authentication. (Run `lingo.dev auth --login` to authenticate)\",\n );\n }\n } catch (error) {\n ora.info(\"Authentication failed. Continuing without authentication.\");\n }\n\n ora.start(\"Validating localization configuration...\");\n validateParams(i18nConfig, flags);\n ora.succeed(\"Localization configuration is valid\");\n\n // Track event with or without authentication\n trackEvent(authId || \"status\", \"cmd.status.start\", {\n i18nConfig,\n flags,\n });\n\n let buckets = getBuckets(i18nConfig!);\n if (flags.bucket?.length) {\n buckets = buckets.filter((bucket: any) => flags.bucket!.includes(bucket.type));\n }\n ora.succeed(\"Buckets retrieved\");\n\n if (flags.file?.length) {\n buckets = buckets\n .map((bucket: any) => {\n const paths = bucket.paths.filter((path: any) => flags.file!.find((file) => path.pathPattern?.match(file)));\n return { ...bucket, paths };\n })\n .filter((bucket: any) => bucket.paths.length > 0);\n if (buckets.length === 0) {\n ora.fail(\"No buckets found. All buckets were filtered out by --file option.\");\n process.exit(1);\n } else {\n ora.info(`\\x1b[36mProcessing only filtered buckets:\\x1b[0m`);\n buckets.map((bucket: any) => {\n ora.info(` ${bucket.type}:`);\n bucket.paths.forEach((path: any) => {\n ora.info(` - ${path.pathPattern}`);\n });\n });\n }\n }\n\n const targetLocales = flags.locale?.length ? flags.locale : i18nConfig!.locale.targets;\n\n // Global stats\n let totalSourceKeyCount = 0;\n let uniqueKeysToTranslate = 0;\n let totalExistingTranslations = 0;\n const totalWordCount = new Map<string, number>(); // Words per language\n const languageStats: Record<string, LanguageStats> = {};\n\n // Initialize per-language stats\n for (const locale of targetLocales) {\n languageStats[locale] = {\n complete: 0,\n missing: 0,\n updated: 0,\n words: 0,\n };\n totalWordCount.set(locale, 0);\n }\n\n // Per-file stats\n const fileStats: Record<\n string,\n {\n path: string;\n sourceKeys: number;\n wordCount: number;\n languageStats: Record<\n string,\n {\n complete: number;\n missing: number;\n updated: number;\n words: number;\n }\n >;\n }\n > = {};\n\n // Process each bucket\n for (const bucket of buckets) {\n try {\n console.log();\n ora.info(`Analyzing bucket: ${bucket.type}`);\n\n for (const bucketPath of bucket.paths) {\n const bucketOra = Ora({ indent: 2 }).info(`Analyzing path: ${bucketPath.pathPattern}`);\n\n const sourceLocale = resolveOverriddenLocale(i18nConfig!.locale.source, bucketPath.delimiter);\n const bucketLoader = createBucketLoader(\n bucket.type,\n bucketPath.pathPattern,\n {\n isCacheRestore: false,\n defaultLocale: sourceLocale,\n injectLocale: bucket.injectLocale,\n },\n bucket.lockedKeys,\n );\n\n bucketLoader.setDefaultLocale(sourceLocale);\n await bucketLoader.init();\n\n // Initialize file stats\n const filePath = bucketPath.pathPattern;\n if (!fileStats[filePath]) {\n fileStats[filePath] = {\n path: filePath,\n sourceKeys: 0,\n wordCount: 0,\n languageStats: {},\n };\n\n for (const locale of targetLocales) {\n fileStats[filePath].languageStats[locale] = {\n complete: 0,\n missing: 0,\n updated: 0,\n words: 0,\n };\n }\n }\n\n // Get source data and count source keys\n const sourceData = await bucketLoader.pull(sourceLocale);\n const sourceKeys = Object.keys(sourceData);\n fileStats[filePath].sourceKeys = sourceKeys.length;\n totalSourceKeyCount += sourceKeys.length;\n\n // Calculate source word count\n let sourceWordCount = 0;\n for (const key of sourceKeys) {\n const value = sourceData[key];\n if (typeof value === \"string\") {\n const words = value.trim().split(/\\s+/).length;\n sourceWordCount += words;\n }\n }\n fileStats[filePath].wordCount = sourceWordCount;\n\n // Process each target locale\n for (const _targetLocale of targetLocales) {\n const targetLocale = resolveOverriddenLocale(_targetLocale, bucketPath.delimiter);\n bucketOra.start(`[${sourceLocale} -> ${targetLocale}] Analyzing translation status...`);\n\n let targetData = {};\n let fileExists = true;\n\n try {\n targetData = await bucketLoader.pull(targetLocale);\n } catch (error) {\n fileExists = false;\n bucketOra.info(\n `[${sourceLocale} -> ${targetLocale}] Target file not found, assuming all keys need translation.`,\n );\n }\n\n if (!fileExists) {\n // All keys are missing for this locale\n fileStats[filePath].languageStats[targetLocale].missing = sourceKeys.length;\n fileStats[filePath].languageStats[targetLocale].words = sourceWordCount;\n languageStats[targetLocale].missing += sourceKeys.length;\n languageStats[targetLocale].words += sourceWordCount;\n totalWordCount.set(targetLocale, (totalWordCount.get(targetLocale) || 0) + sourceWordCount);\n\n bucketOra.succeed(\n `[${sourceLocale} -> ${targetLocale}] ${chalk.red(`0% complete`)} (0/${sourceKeys.length} keys) - file not found`,\n );\n continue;\n }\n\n // Calculate delta for existing file\n const deltaProcessor = createDeltaProcessor(bucketPath.pathPattern);\n const checksums = await deltaProcessor.loadChecksums();\n const delta = await deltaProcessor.calculateDelta({\n sourceData,\n targetData,\n checksums,\n });\n\n const missingKeys = delta.added;\n const updatedKeys = delta.updated;\n const completeKeys = sourceKeys.filter((key) => !missingKeys.includes(key) && !updatedKeys.includes(key));\n\n // Count words that need translation\n let wordsToTranslate = 0;\n const keysToProcess = flags.force ? sourceKeys : [...missingKeys, ...updatedKeys];\n\n for (const key of keysToProcess) {\n const value = sourceData[String(key)];\n if (typeof value === \"string\") {\n const words = value.trim().split(/\\s+/).length;\n wordsToTranslate += words;\n }\n }\n\n // Update file stats\n fileStats[filePath].languageStats[targetLocale].missing = missingKeys.length;\n fileStats[filePath].languageStats[targetLocale].updated = updatedKeys.length;\n fileStats[filePath].languageStats[targetLocale].complete = completeKeys.length;\n fileStats[filePath].languageStats[targetLocale].words = wordsToTranslate;\n\n // Update global stats\n languageStats[targetLocale].missing += missingKeys.length;\n languageStats[targetLocale].updated += updatedKeys.length;\n languageStats[targetLocale].complete += completeKeys.length;\n languageStats[targetLocale].words += wordsToTranslate;\n totalWordCount.set(targetLocale, (totalWordCount.get(targetLocale) || 0) + wordsToTranslate);\n\n // Display progress\n const totalKeysInFile = sourceKeys.length;\n const completionPercent = ((completeKeys.length / totalKeysInFile) * 100).toFixed(1);\n\n if (missingKeys.length === 0 && updatedKeys.length === 0) {\n bucketOra.succeed(\n `[${sourceLocale} -> ${targetLocale}] ${chalk.green(`100% complete`)} (${completeKeys.length}/${totalKeysInFile} keys)`,\n );\n } else {\n const message = `[${sourceLocale} -> ${targetLocale}] ${\n parseFloat(completionPercent) > 50\n ? chalk.yellow(`${completionPercent}% complete`)\n : chalk.red(`${completionPercent}% complete`)\n } (${completeKeys.length}/${totalKeysInFile} keys)`;\n\n bucketOra.succeed(message);\n\n if (flags.verbose) {\n if (missingKeys.length > 0) {\n console.log(` ${chalk.red(`Missing:`)} ${missingKeys.length} keys, ~${wordsToTranslate} words`);\n console.log(\n ` ${chalk.dim(`Example missing: ${missingKeys.slice(0, 2).join(\", \")}${missingKeys.length > 2 ? \"...\" : \"\"}`)}`,\n );\n }\n if (updatedKeys.length > 0) {\n console.log(` ${chalk.yellow(`Updated:`)} ${updatedKeys.length} keys that changed in source`);\n }\n }\n }\n }\n }\n } catch (error: any) {\n ora.fail(`Failed to analyze bucket ${bucket.type}: ${error.message}`);\n }\n }\n\n // Calculate unique keys needing translation and keys fully translated\n // Count unique keys that need translation\n const totalKeysNeedingTranslation = Object.values(languageStats).reduce((sum, stats) => {\n return sum + stats.missing + stats.updated;\n }, 0);\n\n // Calculate keys that are completely translated\n const totalCompletedKeys = totalSourceKeyCount - totalKeysNeedingTranslation / targetLocales.length;\n\n // Summary output\n console.log();\n ora.succeed(chalk.green(`Localization status completed.`));\n\n // Create a visually impactful main header\n console.log(chalk.bold.cyan(`\\n╔════════════════════════════════════╗`));\n console.log(chalk.bold.cyan(`║ LOCALIZATION STATUS REPORT ║`));\n console.log(chalk.bold.cyan(`╚════════════════════════════════════╝`));\n\n // Source content overview\n console.log(chalk.bold(`\\n📝 SOURCE CONTENT:`));\n console.log(`• Source language: ${chalk.green(i18nConfig!.locale.source)}`);\n console.log(`• Source keys: ${chalk.yellow(totalSourceKeyCount.toString())} keys across all files`);\n\n // Create a language-by-language breakdown table\n console.log(chalk.bold(`\\n🌐 LANGUAGE BY LANGUAGE BREAKDOWN:`));\n\n // Create a new table instance with cli-table3\n const table = new Table({\n head: [\"Language\", \"Status\", \"Complete\", \"Missing\", \"Updated\", \"Total Keys\", \"Words to Translate\"],\n style: {\n head: [\"white\"], // White color for headers\n border: [], // No color for borders\n },\n colWidths: [12, 20, 18, 12, 12, 12, 15], // Explicit column widths, making Status column wider\n });\n\n // Data rows\n let totalWordsToTranslate = 0;\n for (const locale of targetLocales) {\n const stats = languageStats[locale];\n const percentComplete = ((stats.complete / totalSourceKeyCount) * 100).toFixed(1);\n const totalNeeded = stats.missing + stats.updated;\n\n // Determine status text and color\n let statusText;\n let statusColor;\n if (stats.missing === totalSourceKeyCount) {\n statusText = \"🔴 Not started\";\n statusColor = chalk.red;\n } else if (stats.missing === 0 && stats.updated === 0) {\n statusText = \"✅ Complete\";\n statusColor = chalk.green;\n } else if (parseFloat(percentComplete) > 80) {\n statusText = \"🟡 Almost done\";\n statusColor = chalk.yellow;\n } else if (parseFloat(percentComplete) > 0) {\n statusText = \"🟠 In progress\";\n statusColor = chalk.yellow;\n } else {\n statusText = \"🔴 Not started\";\n statusColor = chalk.red;\n }\n\n // Create row data\n const words = totalWordCount.get(locale) || 0;\n totalWordsToTranslate += words;\n\n // Add row to the table\n table.push([\n locale,\n statusColor(statusText),\n `${stats.complete}/${totalSourceKeyCount} (${percentComplete}%)`,\n stats.missing > 0 ? chalk.red(stats.missing.toString()) : \"0\",\n stats.updated > 0 ? chalk.yellow(stats.updated.toString()) : \"0\",\n totalNeeded > 0 ? chalk.magenta(totalNeeded.toString()) : \"0\",\n words > 0 ? `~${words.toLocaleString()}` : \"0\",\n ]);\n }\n\n // Display the table\n console.log(table.toString());\n\n // Total usage summary\n console.log(chalk.bold(`\\n📊 USAGE ESTIMATE:`));\n console.log(\n `• WORDS TO BE CONSUMED: ~${chalk.yellow.bold(totalWordsToTranslate.toLocaleString())} words across all languages`,\n );\n console.log(` (Words are counted from source language for keys that need translation in target languages)`);\n\n // Breakdown by language if we have multiple languages\n if (targetLocales.length > 1) {\n console.log(`• Per-language breakdown:`);\n for (const locale of targetLocales) {\n const words = totalWordCount.get(locale) || 0;\n const percent = ((words / totalWordsToTranslate) * 100).toFixed(1);\n console.log(` - ${locale}: ~${words.toLocaleString()} words (${percent}% of total)`);\n }\n }\n\n // Detailed stats if flags.confirm is specified\n if (flags.confirm && Object.keys(fileStats).length > 0) {\n console.log(chalk.bold(`\\n📑 BREAKDOWN BY FILE:`));\n\n Object.entries(fileStats)\n .sort((a, b) => b[1].wordCount - a[1].wordCount) // Sort by word count\n .forEach(([path, stats]) => {\n // Skip files with no source keys\n if (stats.sourceKeys === 0) return;\n\n console.log(chalk.bold(`\\n• ${path}:`));\n console.log(` ${stats.sourceKeys} source keys, ~${stats.wordCount.toLocaleString()} source words`);\n\n // Create file detail table\n const fileTable = new Table({\n head: [\"Language\", \"Status\", \"Details\"],\n style: {\n head: [\"white\"],\n border: [],\n },\n colWidths: [12, 20, 50], // Explicit column widths for file detail table\n });\n\n for (const locale of targetLocales) {\n const langStats = stats.languageStats[locale];\n const complete = langStats.complete;\n const total = stats.sourceKeys;\n const completion = ((complete / total) * 100).toFixed(1);\n\n let status = \"✅ Complete\";\n let statusColor = chalk.green;\n\n if (langStats.missing === total) {\n status = \"❌ Not started\";\n statusColor = chalk.red;\n } else if (langStats.missing > 0 || langStats.updated > 0) {\n status = `⚠️ ${completion}% complete`;\n statusColor = chalk.yellow;\n }\n\n // Show counts only if there's something missing or updated\n let details = \"\";\n if (langStats.missing > 0 || langStats.updated > 0) {\n const parts = [];\n if (langStats.missing > 0) parts.push(`${langStats.missing} missing`);\n if (langStats.updated > 0) parts.push(`${langStats.updated} changed`);\n details = `${parts.join(\", \")}, ~${langStats.words} words`;\n } else {\n details = \"All keys translated\";\n }\n\n fileTable.push([locale, statusColor(status), details]);\n }\n\n console.log(fileTable.toString());\n });\n }\n\n // Find fully translated and missing languages\n const completeLanguages = targetLocales.filter(\n (locale) => languageStats[locale].missing === 0 && languageStats[locale].updated === 0,\n );\n\n const missingLanguages = targetLocales.filter((locale) => languageStats[locale].complete === 0);\n\n // Add optimization tips\n console.log(chalk.bold.green(`\\n💡 OPTIMIZATION TIPS:`));\n\n if (missingLanguages.length > 0) {\n console.log(\n `• ${chalk.yellow(missingLanguages.join(\", \"))} ${missingLanguages.length === 1 ? \"has\" : \"have\"} no translations yet`,\n );\n }\n\n if (completeLanguages.length > 0) {\n console.log(\n `• ${chalk.green(completeLanguages.join(\", \"))} ${completeLanguages.length === 1 ? \"is\" : \"are\"} completely translated`,\n );\n }\n\n // Other tips\n if (targetLocales.length > 1) {\n console.log(`• Translating one language at a time reduces complexity`);\n console.log(`• Try 'lingo.dev@latest i18n --locale ${targetLocales[0]}' to process just one language`);\n }\n\n // Track successful completion\n trackEvent(authId || \"status\", \"cmd.status.success\", {\n i18nConfig,\n flags,\n totalSourceKeyCount,\n languageStats,\n totalWordsToTranslate,\n authenticated: !!authId,\n });\n } catch (error: any) {\n ora.fail(error.message);\n trackEvent(authId || \"status\", \"cmd.status.error\", {\n flags,\n error: error.message,\n authenticated: !!authId,\n });\n process.exit(1);\n }\n });\n\nfunction parseFlags(options: any) {\n return Z.object({\n locale: Z.array(localeCodeSchema).optional(),\n bucket: Z.array(bucketTypeSchema).optional(),\n force: Z.boolean().optional(),\n confirm: Z.boolean().optional(),\n verbose: Z.boolean().optional(),\n file: Z.array(Z.string()).optional(),\n apiKey: Z.string().optional(),\n }).parse(options);\n}\n\nasync function tryAuthenticate(settings: ReturnType<typeof getSettings>) {\n if (!settings.auth.apiKey) {\n return null;\n }\n\n try {\n const authenticator = createAuthenticator({\n apiKey: settings.auth.apiKey,\n apiUrl: settings.auth.apiUrl,\n });\n const user = await authenticator.whoami();\n return user;\n } catch (error) {\n return null;\n }\n}\n\nfunction validateParams(i18nConfig: I18nConfig | null, flags: ReturnType<typeof parseFlags>) {\n if (!i18nConfig) {\n throw new CLIError({\n message: \"i18n.json not found. Please run `lingo.dev init` to initialize the project.\",\n docUrl: \"i18nNotFound\",\n });\n } else if (!i18nConfig.buckets || !Object.keys(i18nConfig.buckets).length) {\n throw new CLIError({\n message: \"No buckets found in i18n.json. Please add at least one bucket containing i18n content.\",\n docUrl: \"bucketNotFound\",\n });\n } else if (flags.locale?.some((locale) => !i18nConfig.locale.targets.includes(locale))) {\n throw new CLIError({\n message: `One or more specified locales do not exist in i18n.json locale.targets. Please add them to the list and try again.`,\n docUrl: \"localeTargetNotFound\",\n });\n } else if (flags.bucket?.some((bucket) => !i18nConfig.buckets[bucket as keyof typeof i18nConfig.buckets])) {\n throw new CLIError({\n message: `One or more specified buckets do not exist in i18n.json. Please add them to the list and try again.`,\n docUrl: \"bucketNotFound\",\n });\n }\n}\n","import { Command } from \"interactive-commander\";\nimport * as cp from \"node:child_process\";\nimport figlet from \"figlet\";\nimport chalk from \"chalk\";\nimport { vice } from \"gradient-string\";\nimport { setTimeout } from \"node:timers/promises\";\n\nexport const colors = {\n orange: \"#ff6600\",\n green: \"#6ae300\",\n blue: \"#0090ff\",\n yellow: \"#ffcc00\",\n grey: \"#808080\",\n red: \"#ff0000\",\n};\n\nexport default new Command()\n .command(\"may-the-fourth\")\n .description(\"May the Fourth be with you\")\n .helpOption(\"-h, --help\", \"Show help\")\n .action(async () => {\n await renderClear();\n await renderBanner();\n await renderSpacer();\n\n console.log(chalk.hex(colors.yellow)(\"Loading the Star Wars movie...\"));\n await renderSpacer();\n\n await new Promise<void>((resolve, reject) => {\n const ssh = cp.spawn(\"ssh\", [\"starwarstel.net\"], {\n stdio: \"inherit\",\n });\n\n ssh.on(\"close\", (code) => {\n if (code !== 0) {\n console.error(`SSH process exited with code ${code}`);\n // Optionally reject the promise if the exit code is non-zero\n // reject(new Error(`SSH process exited with code ${code}`));\n }\n resolve(); // Resolve the promise when SSH closes\n });\n\n ssh.on(\"error\", (err) => {\n console.error(\"Failed to start SSH process:\", err);\n reject(err); // Reject the promise on error\n });\n });\n\n // This code now runs after the SSH process has finished\n await renderSpacer();\n console.log(\n `${chalk.hex(colors.green)(\"We hope you enjoyed it! :)\")} ${chalk.hex(colors.blue)(\"May the Fourth be with you! 🚀\")}`,\n );\n await renderSpacer();\n console.log(chalk.dim(`---`));\n await renderSpacer();\n await renderHero();\n });\n\nasync function renderClear() {\n console.log(\"\\x1Bc\");\n}\n\nasync function renderSpacer() {\n console.log(\" \");\n}\n\nasync function renderBanner() {\n console.log(\n vice(\n figlet.textSync(\"LINGO.DEV\", {\n font: \"ANSI Shadow\",\n horizontalLayout: \"default\",\n verticalLayout: \"default\",\n }),\n ),\n );\n}\n\nasync function renderHero() {\n console.log(\n `⚡️ ${chalk.hex(colors.green)(\"Lingo.dev\")} - open-source, AI-powered i18n CLI for web & mobile localization.`,\n );\n console.log(\" \");\n console.log(\n chalk.hex(colors.blue)(\"⭐ GitHub Repo: https://lingo.dev/go/gh\"),\n );\n console.log(chalk.hex(colors.blue)(\"💬 24/7 Support: hi@lingo.dev\"));\n}\n","{\n \"name\": \"lingo.dev\",\n \"version\": \"0.99.1\",\n \"description\": \"Lingo.dev CLI\",\n \"private\": false,\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"type\": \"module\",\n \"sideEffects\": false,\n \"exports\": {\n \"./cli\": {\n \"types\": \"./build/cli.d.ts\",\n \"import\": \"./build/cli.mjs\",\n \"require\": \"./build/cli.cjs\"\n },\n \"./sdk\": {\n \"types\": \"./build/sdk.d.ts\",\n \"import\": \"./build/sdk.mjs\",\n \"require\": \"./build/sdk.cjs\"\n },\n \"./spec\": {\n \"types\": \"./build/spec.d.ts\",\n \"import\": \"./build/spec.mjs\",\n \"require\": \"./build/spec.cjs\"\n },\n \"./compiler\": {\n \"types\": \"./build/compiler.d.ts\",\n \"import\": \"./build/compiler.mjs\",\n \"require\": \"./build/compiler.cjs\"\n },\n \"./react\": {\n \"types\": \"./build/react.d.ts\",\n \"import\": \"./build/react.mjs\",\n \"require\": \"./build/react.cjs\"\n },\n \"./react-client\": {\n \"types\": \"./build/react/client.d.ts\",\n \"import\": \"./build/react/client.mjs\",\n \"require\": \"./build/react/client.cjs\"\n },\n \"./react/client\": {\n \"types\": \"./build/react/client.d.ts\",\n \"import\": \"./build/react/client.mjs\",\n \"require\": \"./build/react/client.cjs\"\n },\n \"./react-rsc\": {\n \"types\": \"./build/react/rsc.d.ts\",\n \"import\": \"./build/react/rsc.mjs\",\n \"require\": \"./build/react/rsc.cjs\"\n },\n \"./react/rsc\": {\n \"types\": \"./build/react/rsc.d.ts\",\n \"import\": \"./build/react/rsc.mjs\",\n \"require\": \"./build/react/rsc.cjs\"\n },\n \"./react-router\": {\n \"types\": \"./build/react/react-router.d.ts\",\n \"import\": \"./build/react/react-router.mjs\",\n \"require\": \"./build/react/react-router.cjs\"\n },\n \"./react/react-router\": {\n \"types\": \"./build/react/react-router.d.ts\",\n \"import\": \"./build/react/react-router.mjs\",\n \"require\": \"./build/react/react-router.cjs\"\n }\n },\n \"typesVersions\": {\n \"*\": {\n \"sdk\": [\n \"./build/sdk.d.ts\"\n ],\n \"cli\": [\n \"./build/cli.d.ts\"\n ],\n \"spec\": [\n \"./build/spec.d.ts\"\n ],\n \"compiler\": [\n \"./build/compiler.d.ts\"\n ],\n \"react\": [\n \"./build/react.d.ts\"\n ],\n \"react/client\": [\n \"./build/react/client.d.ts\"\n ],\n \"react/rsc\": [\n \"./build/react/rsc.d.ts\"\n ],\n \"react/react-router\": [\n \"./build/react/react-router.d.ts\"\n ]\n }\n },\n \"bin\": {\n \"lingo.dev\": \"./bin/cli.mjs\"\n },\n \"files\": [\n \"bin\",\n \"build\"\n ],\n \"scripts\": {\n \"lingo.dev\": \"node --inspect=9229 ./bin/cli.mjs\",\n \"dev\": \"tsup --watch\",\n \"build\": \"tsc --noEmit && tsup\",\n \"test\": \"vitest run\",\n \"test:watch\": \"vitest\",\n \"clean\": \"rm -rf build\"\n },\n \"keywords\": [],\n \"author\": \"\",\n \"license\": \"Apache-2.0\",\n \"dependencies\": {\n \"@ai-sdk/anthropic\": \"^1.2.11\",\n \"@ai-sdk/google\": \"^1.2.19\",\n \"@ai-sdk/openai\": \"^1.3.22\",\n \"@babel/generator\": \"^7.27.1\",\n \"@babel/parser\": \"^7.27.1\",\n \"@babel/traverse\": \"^7.27.4\",\n \"@babel/types\": \"^7.27.1\",\n \"@datocms/cma-client-node\": \"^4.0.1\",\n \"@gitbeaker/rest\": \"^39.34.3\",\n \"@inkjs/ui\": \"^2.0.0\",\n \"@inquirer/prompts\": \"^7.4.1\",\n \"@lingo.dev/_compiler\": \"workspace:*\",\n \"@lingo.dev/_react\": \"workspace:*\",\n \"@lingo.dev/_sdk\": \"workspace:*\",\n \"@lingo.dev/_spec\": \"workspace:*\",\n \"@modelcontextprotocol/sdk\": \"^1.5.0\",\n \"@openrouter/ai-sdk-provider\": \"^0.7.1\",\n \"@paralleldrive/cuid2\": \"^2.2.2\",\n \"ai\": \"^4.3.15\",\n \"bitbucket\": \"^2.12.0\",\n \"chalk\": \"^5.4.1\",\n \"cli-progress\": \"^3.12.0\",\n \"cli-table3\": \"^0.6.5\",\n \"cors\": \"^2.8.5\",\n \"csv-parse\": \"^5.6.0\",\n \"csv-stringify\": \"^6.5.2\",\n \"date-fns\": \"^4.1.0\",\n \"dedent\": \"^1.5.3\",\n \"diff\": \"^7.0.0\",\n \"dotenv\": \"^16.4.7\",\n \"express\": \"^5.1.0\",\n \"external-editor\": \"^3.1.0\",\n \"figlet\": \"^1.8.0\",\n \"flat\": \"^6.0.1\",\n \"gettext-parser\": \"^8.0.0\",\n \"glob\": \"<11.0.0\",\n \"gradient-string\": \"^3.0.0\",\n \"gray-matter\": \"^4.0.3\",\n \"ini\": \"^5.0.0\",\n \"ink\": \"^4.2.0\",\n \"ink-progress-bar\": \"^3.0.0\",\n \"ink-spinner\": \"^5.0.0\",\n \"inquirer\": \"^12.6.0\",\n \"interactive-commander\": \"^0.5.194\",\n \"is-url\": \"^1.2.4\",\n \"jsdom\": \"^25.0.1\",\n \"json5\": \"^2.2.3\",\n \"jsonrepair\": \"^3.11.2\",\n \"listr2\": \"^8.3.2\",\n \"lodash\": \"^4.17.21\",\n \"marked\": \"^15.0.6\",\n \"mdast-util-from-markdown\": \"^2.0.2\",\n \"mdast-util-gfm\": \"^3.1.0\",\n \"micromark-extension-gfm\": \"^3.0.0\",\n \"node-machine-id\": \"^1.1.12\",\n \"node-webvtt\": \"^1.9.4\",\n \"object-hash\": \"^3.0.0\",\n \"octokit\": \"^4.0.2\",\n \"ollama-ai-provider\": \"^1.2.0\",\n \"open\": \"^10.1.2\",\n \"ora\": \"^8.1.1\",\n \"p-limit\": \"^6.2.0\",\n \"php-array-reader\": \"^2.1.2\",\n \"plist\": \"^3.1.0\",\n \"posthog-node\": \"^4.17.0\",\n \"prettier\": \"^3.4.2\",\n \"react\": \"^18.3.1\",\n \"rehype-stringify\": \"^10.0.1\",\n \"remark-disable-tokenizers\": \"^1.1.1\",\n \"remark-frontmatter\": \"^5.0.0\",\n \"remark-gfm\": \"^4.0.1\",\n \"remark-mdx\": \"^3.1.0\",\n \"remark-mdx-frontmatter\": \"^5.1.0\",\n \"remark-parse\": \"^11.0.0\",\n \"remark-rehype\": \"^11.1.2\",\n \"remark-stringify\": \"^11.0.0\",\n \"srt-parser-2\": \"^1.2.3\",\n \"unified\": \"^11.0.5\",\n \"unist-util-visit\": \"^5.0.0\",\n \"vfile\": \"^6.0.3\",\n \"xliff\": \"^6.2.1\",\n \"xml2js\": \"^0.6.2\",\n \"xpath\": \"^0.0.34\",\n \"yaml\": \"^2.7.0\",\n \"zod\": \"^3.24.1\"\n },\n \"devDependencies\": {\n \"@types/babel__generator\": \"^7.27.0\",\n \"@types/cli-progress\": \"^3.11.6\",\n \"@types/cors\": \"^2.8.17\",\n \"@types/diff\": \"^7.0.0\",\n \"@types/express\": \"^5.0.1\",\n \"@types/figlet\": \"^1.7.0\",\n \"@types/gettext-parser\": \"^4.0.4\",\n \"@types/glob\": \"^8.1.0\",\n \"@types/ini\": \"^4.1.1\",\n \"@types/is-url\": \"^1.2.32\",\n \"@types/jsdom\": \"^21.1.7\",\n \"@types/lodash\": \"^4.17.16\",\n \"@types/mdast\": \"^4.0.4\",\n \"@types/node\": \"^22.10.2\",\n \"@types/node-gettext\": \"^3.0.6\",\n \"@types/object-hash\": \"^3.0.6\",\n \"@types/plist\": \"^3.0.5\",\n \"@types/react\": \"^18.3.20\",\n \"@types/xml2js\": \"^0.4.14\",\n \"tsup\": \"^8.3.5\",\n \"typescript\": \"^5.8.3\",\n \"vitest\": \"^3.1.2\"\n },\n \"engines\": {\n \"node\": \">=18\"\n },\n \"packageManager\": \"pnpm@9.12.3\"\n}\n"],"mappings":"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","names":["InteractiveCommand","figlet","vice","Command","Ora","readline","Command","Ora","readline","Command","Ora","Command","Ora","Ora","fs","path","resolveLocaleCode","fs","path","_","checkbox","confirm","path","_","fs","path","fs","path","fs","path","open","path","resolveLocaleCode","value","fs","Ora","_","checkbox","confirm","auth","Command","Command","_","fs","path","defaultConfig","Command","Ora","Command","Ora","Command","Ora","_","path","glob","_","path","glob","resolveOverriddenLocale","Command","Ora","path","Command","Command","Command","chalk","_","Command","chalk","_","Command","chalk","dedent","_","Command","dedent","chalk","_","Command","chalk","_","dedent","Command","chalk","_","config_default","Command","resolveOverriddenLocale","Command","Z","_","Ora","input","input","_","input","fs","path","_","path","fs","input","input","_","input","_","input","_","input","_","input","path","YAML","YAML","input","_","input","input","_","input","path","path","_","_","input","_","input","_","input","parseStringPromise","Builder","input","parseStringPromise","Builder","input","fs","Z","_","input","_","_","_","_","input","_","input","_","path","fs","input","_","input","_","_","input","_","indent","items","input","jsonrepair","input","jsonrepair","parse","_","input","_","parse","path","_","_","_","matter","YAML","input","yamlEngine","YAML","matter","input","_","input","input","_","input","input","_","chalk","inquirer","chalk","dedent","input","_","input","result","dedent","chalk","_","fs","path","path","YAML","_","Command","Ora","inquirer","path","resolveOverriddenLocale","_","deltaProcessor","checksums","Z","chalk","Command","Z","Ora","fs","path","Z","YAML","MD5","_","resolveOverriddenLocale","Command","Ora","resolveOverriddenLocale","Z","resolveOverriddenLocale","Command","_","Ora","Command","Ora","resolveOverriddenLocale","_","Command","Z","Command","_","Z","Command","execSync","path","Command","chalk","chalk","chalk","dedent","chalk","LingoDotDevEngine","dedent","chalk","LingoDotDevEngine","input","createAnthropic","createGoogleGenerativeAI","createOpenAI","createOpenRouter","chalk","dedent","generateText","jsonrepair","createOllama","dedent","chalk","createOpenAI","createAnthropic","createGoogleGenerativeAI","createOpenRouter","generateText","input","input","chalk","chalk","Listr","resolveOverriddenLocale","input","chalk","Listr","resolveOverriddenLocale","chalk","Listr","_","input","chalk","Listr","_","checksums","bucketTypeSchema","z","flagsSchema","Command","flagsSchema","path","execSync","error","execSync","Z","execSync","Z","execSync","Z","Z","Z","Z","Command","bucketTypeSchema","localeCodeSchema","resolveOverriddenLocale","Command","Z","Ora","chalk","Command","Ora","parseFlags","validateParams","path","resolveOverriddenLocale","chalk","Z","localeCodeSchema","bucketTypeSchema","Command","figlet","chalk","vice","colors","renderClear","renderBanner","renderSpacer","renderHero","InteractiveCommand","vice","figlet","config_default"]}
1
+ {"version":3,"sources":["../src/cli/index.ts","../src/cli/cmd/auth.ts","../src/cli/utils/settings.ts","../src/cli/utils/errors.ts","../src/cli/utils/cloudflare-status.ts","../src/cli/utils/auth.ts","../src/cli/cmd/login.ts","../src/cli/utils/ui.ts","../src/cli/constants.ts","../src/cli/cmd/logout.ts","../src/cli/cmd/init.ts","../src/cli/utils/config.ts","../src/cli/utils/find-locale-paths.ts","../src/cli/utils/ensure-patterns.ts","../src/cli/utils/update-gitignore.ts","../src/cli/utils/init-ci-cd.ts","../src/cli/cmd/show/index.ts","../src/cli/cmd/show/config.ts","../src/cli/cmd/show/locale.ts","../src/cli/cmd/show/files.ts","../src/cli/utils/buckets.ts","../src/cli/cmd/config/index.ts","../src/cli/cmd/config/set.ts","../src/cli/cmd/config/unset.ts","../src/cli/cmd/config/get.ts","../src/cli/cmd/i18n.ts","../src/cli/loaders/_utils.ts","../src/cli/loaders/json.ts","../src/cli/loaders/flat.ts","../src/cli/loaders/text-file.ts","../src/cli/loaders/yaml.ts","../src/cli/loaders/root-key.ts","../src/cli/loaders/flutter.ts","../src/cli/loaders/android.ts","../src/cli/loaders/csv.ts","../src/cli/loaders/html.ts","../src/cli/loaders/markdown.ts","../src/cli/loaders/properties.ts","../src/cli/loaders/xcode-strings.ts","../src/cli/loaders/xcode-stringsdict.ts","../src/cli/loaders/xcode-xcstrings.ts","../src/cli/loaders/prettier.ts","../src/cli/loaders/unlocalizable.ts","../src/cli/loaders/po/index.ts","../src/cli/loaders/xliff.ts","../src/cli/loaders/xml.ts","../src/cli/loaders/srt.ts","../src/cli/loaders/dato/index.ts","../src/cli/loaders/dato/_base.ts","../src/cli/loaders/dato/filter.ts","../src/cli/loaders/dato/api.ts","../src/cli/loaders/dato/_utils.ts","../src/cli/loaders/dato/extract.ts","../src/cli/loaders/vtt.ts","../src/cli/loaders/variable/index.ts","../src/cli/loaders/sync.ts","../src/cli/utils/plutil-formatter.ts","../src/cli/loaders/plutil-json-loader.ts","../src/cli/loaders/php.ts","../src/cli/loaders/vue-json.ts","../src/cli/loaders/typescript/index.ts","../src/cli/loaders/typescript/cjs-interop.ts","../src/cli/loaders/inject-locale.ts","../src/cli/loaders/locked-keys.ts","../src/cli/loaders/mdx2/frontmatter-split.ts","../src/cli/utils/md5.ts","../src/cli/loaders/mdx2/code-placeholder.ts","../src/cli/loaders/mdx2/localizable-document.ts","../src/cli/loaders/mdx2/sections-split-2.ts","../src/cli/loaders/mdx2/locked-patterns.ts","../src/cli/loaders/ignored-keys.ts","../src/cli/loaders/index.ts","../src/cli/processor/index.ts","../src/cli/processor/lingo.ts","../src/cli/processor/basic.ts","../src/cli/utils/exp-backoff.ts","../src/cli/utils/observability.ts","../src/cli/utils/delta.ts","../src/cli/utils/fs.ts","../src/cli/cmd/lockfile.ts","../src/cli/utils/lockfile.ts","../src/cli/cmd/cleanup.ts","../src/cli/cmd/mcp.ts","../src/cli/cmd/ci/index.ts","../src/cli/cmd/ci/flows/pull-request.ts","../src/cli/cmd/ci/flows/in-branch.ts","../src/cli/cmd/ci/flows/_base.ts","../src/cli/cmd/run/index.ts","../src/cli/cmd/run/setup.ts","../src/cli/cmd/run/_const.ts","../src/cli/localizer/lingodotdev.ts","../src/cli/localizer/explicit.ts","../src/cli/localizer/index.ts","../src/cli/cmd/run/plan.ts","../src/cli/cmd/run/execute.ts","../src/cli/cmd/run/_types.ts","../src/cli/cmd/run/_utils.ts","../src/cli/cmd/ci/platforms/bitbucket.ts","../src/cli/cmd/ci/platforms/_base.ts","../src/cli/cmd/ci/platforms/github.ts","../src/cli/cmd/ci/platforms/gitlab.ts","../src/cli/cmd/ci/platforms/index.ts","../src/cli/cmd/status.ts","../src/cli/cmd/may-the-fourth.ts","../package.json"],"sourcesContent":["import dotenv from \"dotenv\";\ndotenv.config();\n\nimport { InteractiveCommand } from \"interactive-commander\";\nimport figlet from \"figlet\";\nimport { vice } from \"gradient-string\";\nimport chalk from \"chalk\";\n\nimport authCmd from \"./cmd/auth\";\nimport loginCmd from \"./cmd/login\";\nimport logoutCmd from \"./cmd/logout\";\nimport initCmd from \"./cmd/init\";\nimport showCmd from \"./cmd/show\";\nimport configCmd from \"./cmd/config\";\nimport i18nCmd from \"./cmd/i18n\";\nimport lockfileCmd from \"./cmd/lockfile\";\nimport cleanupCmd from \"./cmd/cleanup\";\nimport mcpCmd from \"./cmd/mcp\";\nimport ciCmd from \"./cmd/ci\";\nimport statusCmd from \"./cmd/status\";\nimport mayTheFourthCmd from \"./cmd/may-the-fourth\";\n\nimport packageJson from \"../../package.json\";\nimport run from \"./cmd/run\";\n\nexport default new InteractiveCommand()\n .name(\"lingo.dev\")\n .description(\"Lingo.dev CLI\")\n .helpOption(\"-h, --help\", \"Show help\")\n .addHelpText(\n \"beforeAll\",\n `\n${vice(\n figlet.textSync(\"LINGO.DEV\", {\n font: \"ANSI Shadow\",\n horizontalLayout: \"default\",\n verticalLayout: \"default\",\n }),\n)}\n\n⚡️ AI-powered open-source CLI for web & mobile localization.\n\nStar the the repo :) https://github.com/LingoDotDev/lingo.dev\n`,\n )\n .version(`v${packageJson.version}`, \"-v, --version\", \"Show version\")\n .addCommand(initCmd)\n .interactive(\"-y, --no-interactive\", \"Disable interactive mode\") // all interactive commands above\n .addCommand(i18nCmd)\n .addCommand(authCmd)\n .addCommand(loginCmd)\n .addCommand(logoutCmd)\n .addCommand(showCmd)\n .addCommand(configCmd)\n .addCommand(lockfileCmd)\n .addCommand(cleanupCmd)\n .addCommand(mcpCmd)\n .addCommand(ciCmd)\n .addCommand(statusCmd)\n .addCommand(mayTheFourthCmd, { hidden: true })\n .addCommand(run, { hidden: true })\n .exitOverride((err) => {\n // Exit with code 0 when help or version is displayed\n if (\n err.code === \"commander.helpDisplayed\" ||\n err.code === \"commander.version\" ||\n err.code === \"commander.help\"\n ) {\n process.exit(0);\n }\n process.exit(1);\n });\n","import { Command } from \"interactive-commander\";\nimport Ora from \"ora\";\nimport { getSettings, saveSettings } from \"../utils/settings\";\nimport { createAuthenticator } from \"../utils/auth\";\n\nexport default new Command()\n .command(\"auth\")\n .description(\"Show current authentication status\")\n .helpOption(\"-h, --help\", \"Show help\")\n // Deprecated options, safe to remove after September 2025\n .option(\n \"--login\",\n \"Login to your account (deprecated: use 'lingo.dev login' instead)\",\n )\n .option(\n \"--logout\",\n \"Logout from your account (deprecated: use 'lingo.dev logout' instead)\",\n )\n .action(async (options) => {\n try {\n // Handle deprecated login option\n if (options.login) {\n Ora().warn(\n \"⚠️ DEPRECATED: '--login' is deprecated. Please use 'lingo.dev login' instead.\",\n );\n process.exit(1);\n }\n\n // Handle deprecated logout option\n if (options.logout) {\n Ora().warn(\n \"⚠️ DEPRECATED: '--logout' is deprecated. Please use 'lingo.dev logout' instead.\",\n );\n process.exit(1);\n }\n\n // Default behavior: show authentication status\n const settings = await getSettings(undefined);\n const authenticator = createAuthenticator({\n apiUrl: settings.auth.apiUrl,\n apiKey: settings.auth.apiKey!,\n });\n const auth = await authenticator.whoami();\n if (!auth) {\n Ora().warn(\"Not authenticated\");\n } else {\n Ora().succeed(`Authenticated as ${auth.email}`);\n }\n } catch (error: any) {\n Ora().fail(error.message);\n process.exit(1);\n }\n });\n","import os from \"os\";\nimport path from \"path\";\nimport _ from \"lodash\";\nimport Z from \"zod\";\nimport fs from \"fs\";\nimport Ini from \"ini\";\n\nexport type CliSettings = Z.infer<typeof SettingsSchema>;\n\nexport function getSettings(explicitApiKey: string | undefined): CliSettings {\n const env = _loadEnv();\n const systemFile = _loadSystemFile();\n const defaults = _loadDefaults();\n\n _legacyEnvVarWarning();\n\n _envVarsInfo();\n\n return {\n auth: {\n apiKey:\n explicitApiKey ||\n env.LINGODOTDEV_API_KEY ||\n systemFile.auth?.apiKey ||\n defaults.auth.apiKey,\n apiUrl:\n env.LINGODOTDEV_API_URL ||\n systemFile.auth?.apiUrl ||\n defaults.auth.apiUrl,\n webUrl:\n env.LINGODOTDEV_WEB_URL ||\n systemFile.auth?.webUrl ||\n defaults.auth.webUrl,\n },\n llm: {\n openaiApiKey: env.OPENAI_API_KEY || systemFile.llm?.openaiApiKey,\n anthropicApiKey: env.ANTHROPIC_API_KEY || systemFile.llm?.anthropicApiKey,\n groqApiKey: env.GROQ_API_KEY || systemFile.llm?.groqApiKey,\n googleApiKey: env.GOOGLE_API_KEY || systemFile.llm?.googleApiKey,\n openrouterApiKey:env.OPENROUTER_API_KEY || systemFile.llm?.openrouterApiKey,\n },\n };\n}\n\nexport function saveSettings(settings: CliSettings): void {\n _saveSystemFile(settings);\n}\n\nexport function loadSystemSettings() {\n return _loadSystemFile();\n}\n\nconst flattenZodObject = (schema: Z.ZodObject<any>, prefix = \"\"): string[] => {\n return Object.entries(schema.shape).flatMap(([key, value]) => {\n const newPrefix = prefix ? `${prefix}.${key}` : key;\n if (value instanceof Z.ZodObject) {\n return flattenZodObject(value, newPrefix);\n }\n return [newPrefix];\n });\n};\n\nconst SettingsSchema = Z.object({\n auth: Z.object({\n apiKey: Z.string(),\n apiUrl: Z.string(),\n webUrl: Z.string(),\n }),\n llm: Z.object({\n openaiApiKey: Z.string().optional(),\n anthropicApiKey: Z.string().optional(),\n groqApiKey: Z.string().optional(),\n googleApiKey: Z.string().optional(),\n openrouterApiKey: Z.string().optional(),\n }),\n});\n\nexport const SETTINGS_KEYS = flattenZodObject(\n SettingsSchema,\n) as readonly string[];\n\n// Private\n\nfunction _loadDefaults(): CliSettings {\n return {\n auth: {\n apiKey: \"\",\n apiUrl: \"https://engine.lingo.dev\",\n webUrl: \"https://lingo.dev\",\n },\n llm: {},\n };\n}\n\nfunction _loadEnv() {\n return Z.object({\n LINGODOTDEV_API_KEY: Z.string().optional(),\n LINGODOTDEV_API_URL: Z.string().optional(),\n LINGODOTDEV_WEB_URL: Z.string().optional(),\n OPENAI_API_KEY: Z.string().optional(),\n ANTHROPIC_API_KEY: Z.string().optional(),\n GROQ_API_KEY: Z.string().optional(),\n GOOGLE_API_KEY: Z.string().optional(),\n OPENROUTER_API_KEY: Z.string().optional(),\n })\n .passthrough()\n .parse(process.env);\n}\n\nfunction _loadSystemFile() {\n const settingsFilePath = _getSettingsFilePath();\n const content = fs.existsSync(settingsFilePath)\n ? fs.readFileSync(settingsFilePath, \"utf-8\")\n : \"\";\n const data = Ini.parse(content);\n\n return Z.object({\n auth: Z.object({\n apiKey: Z.string().optional(),\n apiUrl: Z.string().optional(),\n webUrl: Z.string().optional(),\n }).optional(),\n llm: Z.object({\n openaiApiKey: Z.string().optional(),\n anthropicApiKey: Z.string().optional(),\n groqApiKey: Z.string().optional(),\n googleApiKey: Z.string().optional(),\n openrouterApiKey: Z.string().optional(),\n }).optional(),\n })\n .passthrough()\n .parse(data);\n}\n\nfunction _saveSystemFile(settings: CliSettings) {\n const settingsFilePath = _getSettingsFilePath();\n const content = Ini.stringify(settings);\n fs.writeFileSync(settingsFilePath, content);\n}\n\nfunction _getSettingsFilePath(): string {\n const settingsFile = \".lingodotdevrc\";\n const homedir = os.homedir();\n const settingsFilePath = path.join(homedir, settingsFile);\n return settingsFilePath;\n}\n\nfunction _legacyEnvVarWarning() {\n const env = _loadEnv();\n\n if (env.REPLEXICA_API_KEY && !env.LINGODOTDEV_API_KEY) {\n console.warn(\n \"\\x1b[33m%s\\x1b[0m\",\n `\n⚠️ WARNING: REPLEXICA_API_KEY env var is deprecated ⚠️\n===========================================================\n\nPlease use LINGODOTDEV_API_KEY instead.\n===========================================================\n`,\n );\n }\n}\n\nfunction _envVarsInfo() {\n const env = _loadEnv();\n const systemFile = _loadSystemFile();\n\n if (env.LINGODOTDEV_API_KEY && systemFile.auth?.apiKey) {\n console.info(\n \"\\x1b[36m%s\\x1b[0m\",\n `ℹ️ Using LINGODOTDEV_API_KEY env var instead of credentials from user config`,\n );\n }\n if (env.OPENAI_API_KEY && systemFile.llm?.openaiApiKey) {\n console.info(\n \"\\x1b[36m%s\\x1b[0m\",\n `ℹ️ Using OPENAI_API_KEY env var instead of key from user config.`,\n );\n }\n if (env.ANTHROPIC_API_KEY && systemFile.llm?.anthropicApiKey) {\n console.info(\n \"\\x1b[36m%s\\x1b[0m\",\n `ℹ️ Using ANTHROPIC_API_KEY env var instead of key from user config`,\n );\n }\n if (env.GROQ_API_KEY && systemFile.llm?.groqApiKey) {\n console.info(\n \"\\x1b[36m%s\\x1b[0m\",\n `ℹ️ Using GROQ_API_KEY env var instead of key from user config`,\n );\n }\n if (env.GOOGLE_API_KEY && systemFile.llm?.googleApiKey) {\n console.info(\n \"\\x1b[36m%s\\x1b[0m\",\n `ℹ️ Using GOOGLE_API_KEY env var instead of key from user config`,\n );\n }\n if (env.OPENROUTER_API_KEY && systemFile.llm?.openrouterApiKey) {\n console.info(\n \"\\x1b[36m%s\\x1b[0m\",\n `ℹ️ Using OPENROUTER_API_KEY env var instead of key from user config`,\n );\n }\n if (env.LINGODOTDEV_API_URL) {\n console.info(\n \"\\x1b[36m%s\\x1b[0m\",\n `ℹ️ Using LINGODOTDEV_API_URL: ${env.LINGODOTDEV_API_URL}`,\n );\n }\n if (env.LINGODOTDEV_WEB_URL) {\n console.info(\n \"\\x1b[36m%s\\x1b[0m\",\n `ℹ️ Using LINGODOTDEV_WEB_URL: ${env.LINGODOTDEV_WEB_URL}`,\n );\n }\n}\n","export const docLinks = {\n i18nNotFound: \"https://docs.lingo.dev/quickstart#initialization\",\n bucketNotFound: \"https://docs.lingo.dev/config#buckets\",\n authError: \"https://docs.lingo.dev/auth\",\n localeTargetNotFound: \"https://docs.lingo.dev/config#locale\",\n lockFiletNotFound: \"https://docs.lingo.dev/config#i18n-lock\",\n failedReplexicaEngine: \"https://docs.lingo.dev/\",\n placeHolderFailed: \"https://docs.lingo.dev/formats/json\",\n translationFailed: \"https://docs.lingo.dev/setup/cli#core-command-i18n\",\n connectionFailed: \"https://docs.lingo.dev/\",\n invalidType: \"https://docs.lingo.dev/setup/cli#configuration-commands\",\n invalidPathPattern: \"https://docs.lingo.dev/config#buckets\",\n androidResouceError: \"https://docs.lingo.dev/formats/android\",\n invalidBucketType: \"https://docs.lingo.dev/config#buckets\",\n invalidStringDict: \"https://docs.lingo.dev/formats/xcode-stringsdict\",\n};\n\ntype DocLinkKeys = keyof typeof docLinks;\n\nexport class CLIError extends Error {\n public readonly docUrl: string;\n\n constructor({ message, docUrl }: { message: string; docUrl: DocLinkKeys }) {\n super(message);\n this.docUrl = docLinks[docUrl];\n this.message = `${this.message}\\n visit: ${this.docUrl}`;\n }\n}\n","export interface CloudflareStatusResponse {\n status: {\n indicator: 'none' | 'minor' | 'major' | 'critical';\n description: string;\n };\n}\n\nexport async function checkCloudflareStatus(): Promise<CloudflareStatusResponse | null> {\n try {\n const response = await fetch('https://www.cloudflarestatus.com/api/v2/status.json', {\n signal: AbortSignal.timeout(5000),\n });\n if (response.ok) {\n return await response.json();\n }\n } catch (error) {\n }\n return null;\n}\n\nexport function formatCloudflareStatusMessage(status: CloudflareStatusResponse): string {\n if (status.status.indicator === 'none') {\n return '';\n }\n return `Cloudflare is experiencing ${status.status.indicator} issues: ${status.status.description}. This may be affecting the API connection.`;\n}\n","import { CLIError } from \"./errors\";\nimport { checkCloudflareStatus, formatCloudflareStatusMessage } from \"./cloudflare-status\";\n\nexport type AuthenticatorParams = {\n apiUrl: string;\n apiKey: string;\n};\n\nexport type AuthPayload = {\n email: string;\n id: string;\n};\n\nexport function createAuthenticator(params: AuthenticatorParams) {\n return {\n async whoami(): Promise<AuthPayload | null> {\n try {\n const res = await fetch(`${params.apiUrl}/whoami`, {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${params.apiKey}`,\n ContentType: \"application/json\",\n },\n });\n\n if (res.ok) {\n const payload = await res.json();\n if (!payload?.email) {\n return null;\n }\n\n return {\n email: payload.email,\n id: payload.id,\n };\n }\n\n if (res.status >= 500 && res.status < 600) {\n const originalErrorMessage = `Server error (${res.status}): ${res.statusText}. Please try again later.`;\n \n const cloudflareStatus = await checkCloudflareStatus();\n \n if (!cloudflareStatus) {\n throw new CLIError({\n message: originalErrorMessage,\n docUrl: \"connectionFailed\",\n });\n }\n \n if (cloudflareStatus.status.indicator !== 'none') {\n const cloudflareMessage = formatCloudflareStatusMessage(cloudflareStatus);\n throw new CLIError({\n message: cloudflareMessage,\n docUrl: \"connectionFailed\",\n });\n }\n \n throw new CLIError({\n message: originalErrorMessage,\n docUrl: \"connectionFailed\",\n });\n }\n\n return null;\n } catch (error) {\n if (error instanceof CLIError) {\n throw error;\n }\n\n const isNetworkError =\n error instanceof TypeError && error.message === \"fetch failed\";\n if (isNetworkError) {\n throw new CLIError({\n message: `Failed to connect to the API at ${params.apiUrl}. Please check your connection and try again.`,\n docUrl: \"connectionFailed\",\n });\n } else {\n throw error;\n }\n }\n },\n };\n}\n","import { Command } from \"interactive-commander\";\nimport Ora from \"ora\";\nimport express from \"express\";\nimport cors from \"cors\";\nimport open from \"open\";\nimport readline from \"readline/promises\";\nimport { getSettings, saveSettings } from \"../utils/settings\";\nimport {\n renderClear,\n renderSpacer,\n renderBanner,\n renderHero,\n} from \"../utils/ui\";\n\nexport default new Command()\n .command(\"login\")\n .description(\"Authenticate with Lingo.dev API\")\n .helpOption(\"-h, --help\", \"Show help\")\n .action(async () => {\n try {\n await renderClear();\n await renderSpacer();\n await renderBanner();\n await renderHero();\n await renderSpacer();\n\n const settings = await getSettings(undefined);\n const apiKey = await login(settings.auth.webUrl);\n settings.auth.apiKey = apiKey;\n await saveSettings(settings);\n Ora().succeed(\"Successfully logged in\");\n } catch (error: any) {\n Ora().fail(error.message);\n process.exit(1);\n }\n });\n\nexport async function login(webAppUrl: string) {\n await readline\n .createInterface({\n input: process.stdin,\n output: process.stdout,\n })\n .question(\n `\nPress Enter to open the browser for authentication.\n\n---\n\nHaving issues? Put LINGODOTDEV_API_KEY in your .env file instead.\n `.trim() + \"\\n\",\n );\n\n const spinner = Ora().start(\"Waiting for the API key\");\n const apiKey = await waitForApiKey(async (port) => {\n await open(`${webAppUrl}/app/cli?port=${port}`, { wait: false });\n });\n spinner.succeed(\"API key received\");\n\n return apiKey;\n}\n\nasync function waitForApiKey(cb: (port: string) => void): Promise<string> {\n const app = express();\n app.use(express.json());\n app.use(cors());\n\n return new Promise((resolve) => {\n const server = app.listen(0, async () => {\n const port = (server.address() as any).port;\n cb(port.toString());\n });\n\n app.post(\"/\", (req, res) => {\n const apiKey = req.body.apiKey;\n res.end();\n server.close(() => {\n resolve(apiKey);\n });\n });\n });\n}\n","import chalk from \"chalk\";\nimport figlet from \"figlet\";\nimport { vice } from \"gradient-string\";\nimport readline from \"readline\";\nimport { colors } from \"../constants\";\n\nexport async function renderClear() {\n console.log(\"\\x1Bc\");\n}\n\nexport async function renderSpacer() {\n console.log(\" \");\n}\n\nexport async function renderBanner() {\n console.log(\n vice(\n figlet.textSync(\"LINGO.DEV\", {\n font: \"ANSI Shadow\",\n horizontalLayout: \"default\",\n verticalLayout: \"default\",\n }),\n ),\n );\n}\n\nexport async function renderHero() {\n console.log(\n `⚡️ ${chalk.hex(colors.green)(\"Lingo.dev\")} - open-source, AI-powered i18n CLI for web & mobile localization.`,\n );\n console.log(\"\");\n\n const label1 = \"⭐ GitHub Repo:\";\n const label2 = \"📚 Docs:\";\n const label3 = \"💬 24/7 Support:\";\n const maxLabelWidth = 17; // Approximate visual width accounting for emoji\n\n console.log(\n `${chalk.hex(colors.blue)(label1.padEnd(maxLabelWidth))} ${chalk.hex(colors.blue)(\"https://lingo.dev/go/gh\")}`,\n );\n console.log(\n `${chalk.hex(colors.blue)(label2.padEnd(maxLabelWidth + 1))} ${chalk.hex(colors.blue)(\"https://lingo.dev/go/docs\")}`,\n ); // Docs emoji seems narrower\n console.log(\n `${chalk.hex(colors.blue)(label3.padEnd(maxLabelWidth + 1))} ${chalk.hex(colors.blue)(\"hi@lingo.dev\")}`,\n );\n}\n\nexport async function waitForUserPrompt(message: string): Promise<void> {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n return new Promise((resolve) => {\n rl.question(chalk.dim(`[${message}]\\n`), () => {\n rl.close();\n resolve();\n });\n });\n}\n\nexport async function pauseIfDebug(debug: boolean) {\n if (debug) {\n await waitForUserPrompt(\"Press Enter to continue...\");\n }\n}\n\nexport async function renderSummary(results: Map<any, any>) {\n console.log(chalk.hex(colors.green)(\"[Done]\"));\n\n const skippedTasksCount = Array.from(results.values()).filter(\n (r) => r.status === \"skipped\",\n ).length;\n console.log(`• ${chalk.hex(colors.yellow)(skippedTasksCount)} from cache`);\n\n const succeededTasksCount = Array.from(results.values()).filter(\n (r) => r.status === \"success\",\n ).length;\n console.log(`• ${chalk.hex(colors.yellow)(succeededTasksCount)} processed`);\n\n const failedTasksCount = Array.from(results.values()).filter(\n (r) => r.status === \"error\",\n ).length;\n console.log(`• ${chalk.hex(colors.yellow)(failedTasksCount)} failed`);\n}\n","export const colors = {\n orange: \"#ff6600\",\n green: \"#6ae300\",\n blue: \"#0090ff\",\n yellow: \"#ffcc00\",\n grey: \"#808080\",\n red: \"#ff0000\",\n};\n","import { Command } from \"interactive-commander\";\nimport Ora from \"ora\";\nimport { getSettings, saveSettings } from \"../utils/settings\";\nimport {\n renderClear,\n renderSpacer,\n renderBanner,\n renderHero,\n} from \"../utils/ui\";\n\nexport default new Command()\n .command(\"logout\")\n .description(\"Sign out from Lingo.dev API\")\n .helpOption(\"-h, --help\", \"Show help\")\n .action(async () => {\n try {\n await renderClear();\n await renderSpacer();\n await renderBanner();\n await renderHero();\n await renderSpacer();\n\n const settings = await getSettings(undefined);\n settings.auth.apiKey = \"\";\n await saveSettings(settings);\n Ora().succeed(\"Successfully logged out\");\n } catch (error: any) {\n Ora().fail(error.message);\n process.exit(1);\n }\n });\n","import { InteractiveCommand, InteractiveOption } from \"interactive-commander\";\nimport Ora from \"ora\";\nimport { getConfig, saveConfig } from \"../utils/config\";\nimport { defaultConfig, LocaleCode, resolveLocaleCode, bucketTypes } from \"@lingo.dev/_spec\";\nimport fs from \"fs\";\nimport path from \"path\";\nimport _ from \"lodash\";\nimport { checkbox, confirm, input } from \"@inquirer/prompts\";\nimport { login } from \"./login\";\nimport { getSettings, saveSettings } from \"../utils/settings\";\nimport { createAuthenticator } from \"../utils/auth\";\nimport findLocaleFiles from \"../utils/find-locale-paths\";\nimport { ensurePatterns } from \"../utils/ensure-patterns\";\nimport updateGitignore from \"../utils/update-gitignore\";\nimport initCICD from \"../utils/init-ci-cd\";\nimport open from \"open\";\n\nconst openUrl = (path: string) => {\n const settings = getSettings(undefined);\n open(`${settings.auth.webUrl}${path}`, { wait: false });\n};\n\nconst throwHelpError = (option: string, value: string) => {\n if (value === \"help\") {\n openUrl(\"/go/call\");\n }\n throw new Error(\n `Invalid ${option}: ${value}\\n\\nDo you need support for ${value} ${option}? Type \"help\" and we will.`,\n );\n};\n\nexport default new InteractiveCommand()\n .command(\"init\")\n .description(\"Initialize Lingo.dev project\")\n .helpOption(\"-h, --help\", \"Show help\")\n .addOption(new InteractiveOption(\"-f --force\", \"Overwrite existing config\").prompt(undefined).default(false))\n .addOption(\n new InteractiveOption(\"-s --source <locale>\", \"Source locale\")\n .argParser((value) => {\n try {\n resolveLocaleCode(value as LocaleCode);\n } catch (e) {\n throwHelpError(\"locale\", value);\n }\n return value;\n })\n .default(\"en\"),\n )\n .addOption(\n new InteractiveOption(\"-t --targets <locale...>\", \"List of target locales\")\n .argParser((value) => {\n const values = (value.includes(\",\") ? value.split(\",\") : value.split(\" \")) as LocaleCode[];\n values.forEach((value) => {\n try {\n resolveLocaleCode(value);\n } catch (e) {\n throwHelpError(\"locale\", value);\n }\n });\n return values;\n })\n .default(\"es\"),\n )\n .addOption(\n new InteractiveOption(\"-b, --bucket <type>\", \"Type of bucket\")\n .argParser((value) => {\n if (!bucketTypes.includes(value as (typeof bucketTypes)[number])) {\n throwHelpError(\"bucket format\", value);\n }\n return value;\n })\n .default(\"json\"),\n )\n .addOption(\n new InteractiveOption(\"-p, --paths [path...]\", \"List of paths for the bucket\")\n .argParser((value) => {\n if (!value || value.length === 0) return [];\n const values = value.includes(\",\") ? value.split(\",\") : value.split(\" \");\n\n for (const p of values) {\n try {\n const dirPath = path.dirname(p);\n const stats = fs.statSync(dirPath);\n if (!stats.isDirectory()) {\n throw new Error(`${dirPath} is not a directory`);\n }\n } catch (err) {\n throw new Error(`Invalid path: ${p}`);\n }\n }\n\n return values;\n })\n .prompt(undefined) // make non-interactive\n .default([]),\n )\n .action(async (options) => {\n const settings = getSettings(undefined);\n const isInteractive = options.interactive;\n\n const spinner = Ora().start(\"Initializing Lingo.dev project\");\n\n let existingConfig = await getConfig(false);\n if (existingConfig && !options.force) {\n spinner.fail(\"Lingo.dev project already initialized\");\n return process.exit(1);\n }\n\n const newConfig = _.cloneDeep(defaultConfig);\n\n newConfig.locale.source = options.source;\n newConfig.locale.targets = options.targets;\n\n if (!isInteractive) {\n newConfig.buckets = {\n [options.bucket]: {\n include: options.paths || [],\n },\n };\n } else {\n let selectedPatterns: string[] = [];\n const localeFiles = findLocaleFiles(options.bucket);\n\n if (!localeFiles) {\n spinner.warn(\n `Bucket type \"${options.bucket}\" does not supported automatic initialization. Add paths to \"i18n.json\" manually.`,\n );\n newConfig.buckets = {\n [options.bucket]: {\n include: options.paths || [],\n },\n };\n } else {\n const { patterns, defaultPatterns } = localeFiles;\n\n if (patterns.length > 0) {\n spinner.succeed(\"Found existing locale files:\");\n\n selectedPatterns = await checkbox({\n message: \"Select the paths to use\",\n choices: patterns.map((value) => ({\n value,\n })),\n });\n } else {\n spinner.succeed(\"No existing locale files found.\");\n }\n\n if (selectedPatterns.length === 0) {\n const useDefault = await confirm({\n message: `Use (and create) default path ${defaultPatterns.join(\", \")}?`,\n });\n if (useDefault) {\n ensurePatterns(defaultPatterns, options.source);\n selectedPatterns = defaultPatterns;\n }\n }\n\n if (selectedPatterns.length === 0) {\n const customPaths = await input({\n message: \"Enter paths to use\",\n });\n selectedPatterns = customPaths.includes(\",\") ? customPaths.split(\",\") : customPaths.split(\" \");\n }\n\n newConfig.buckets = {\n [options.bucket]: {\n include: selectedPatterns || [],\n },\n };\n }\n }\n\n await saveConfig(newConfig);\n\n spinner.succeed(\"Lingo.dev project initialized\");\n\n if (isInteractive) {\n await initCICD(spinner);\n\n const openDocs = await confirm({ message: \"Would you like to see our docs?\" });\n if (openDocs) {\n openUrl(\"/go/docs\");\n }\n }\n\n const authenticator = createAuthenticator({\n apiKey: settings.auth.apiKey,\n apiUrl: settings.auth.apiUrl,\n });\n const auth = await authenticator.whoami();\n if (!auth) {\n if (isInteractive) {\n const doAuth = await confirm({\n message: \"It looks like you are not logged into the CLI. Login now?\",\n });\n if (doAuth) {\n const apiKey = await login(settings.auth.webUrl);\n settings.auth.apiKey = apiKey;\n await saveSettings(settings);\n\n const newAuthenticator = createAuthenticator({\n apiKey: settings.auth.apiKey,\n apiUrl: settings.auth.apiUrl,\n });\n const auth = await newAuthenticator.whoami();\n if (auth) {\n Ora().succeed(`Authenticated as ${auth?.email}`);\n } else {\n Ora().fail(\"Authentication failed.\");\n }\n }\n } else {\n Ora().warn(\"You are not logged in. Run `npx lingo.dev@latest auth --login` to login.\");\n }\n } else {\n Ora().succeed(`Authenticated as ${auth.email}`);\n }\n\n updateGitignore();\n\n if (!isInteractive) {\n Ora().info(\"Please see https://docs.lingo.dev/\");\n }\n });\n","import _ from \"lodash\";\nimport fs from \"fs\";\nimport path from \"path\";\nimport { I18nConfig, parseI18nConfig } from \"@lingo.dev/_spec\";\n\nexport function getConfig(resave = true): I18nConfig | null {\n const configFilePath = _getConfigFilePath();\n\n const configFileExists = fs.existsSync(configFilePath);\n if (!configFileExists) {\n return null;\n }\n\n const fileContents = fs.readFileSync(configFilePath, \"utf8\");\n const rawConfig = JSON.parse(fileContents);\n\n const result = parseI18nConfig(rawConfig);\n const didConfigChange = !_.isEqual(rawConfig, result);\n\n if (resave && didConfigChange) {\n // Ensure the config is saved with the latest version / schema\n saveConfig(result);\n }\n\n return result;\n}\n\nexport function saveConfig(config: I18nConfig) {\n const configFilePath = _getConfigFilePath();\n\n const serialized = JSON.stringify(config, null, 2);\n fs.writeFileSync(configFilePath, serialized);\n\n return config;\n}\n\n// Private\n\nfunction _getConfigFilePath() {\n return path.join(process.cwd(), \"i18n.json\");\n}\n","import fs from \"fs\";\nimport path from \"path\";\nimport { glob } from \"glob\";\nimport _ from \"lodash\";\nimport { LocaleCode, resolveLocaleCode } from \"@lingo.dev/_spec\";\n\nexport default function findLocaleFiles(bucket: string) {\n switch (bucket) {\n case \"json\":\n return findLocaleFilesWithExtension(\".json\");\n case \"yaml\":\n return findLocaleFilesWithExtension(\".yml\");\n case \"flutter\":\n return findLocaleFilesWithExtension(\".arb\");\n case \"android\":\n return findLocaleFilesWithExtension(\".xml\");\n case \"markdown\":\n return findLocaleFilesWithExtension(\".md\");\n case \"php\":\n return findLocaleFilesWithExtension(\".php\");\n case \"po\":\n return findLocaleFilesWithExtension(\".po\");\n case \"xcode-xcstrings\":\n return findLocaleFilesForFilename(\"Localizable.xcstrings\");\n case \"xcode-strings\":\n return findLocaleFilesForFilename(\"Localizable.strings\");\n case \"xcode-stringsdict\":\n return findLocaleFilesForFilename(\"Localizable.stringsdict\");\n default:\n return null;\n }\n}\n\nfunction findLocaleFilesWithExtension(ext: string) {\n const files = glob.sync(`**/*${ext}`, {\n ignore: [\"node_modules/**\", \"package*.json\", \"i18n.json\", \"lingo.json\"],\n });\n\n const localeFilePattern = new RegExp(`\\/([a-z]{2}(-[A-Z]{2})?)${ext}$`);\n const localeDirectoryPattern = new RegExp(`\\/([a-z]{2}(-[A-Z]{2})?)\\/[^\\/]+${ext}$`);\n const potentialLocaleFiles = files.filter(\n (file: string) => localeFilePattern.test(file) || localeDirectoryPattern.test(file),\n );\n\n const potantialLocaleFilesAndPatterns = potentialLocaleFiles\n .map((file: string) => {\n const matchPotentialLocales = Array.from(\n file.matchAll(new RegExp(`\\/([a-z]{2}(-[A-Z]{2})?|[^\\/]+)(?=\\/|${ext})`, \"g\")),\n );\n const potantialLocales = matchPotentialLocales.map((match) => match[1]);\n return { file, potantialLocales };\n })\n .map(({ file, potantialLocales }) => {\n for (const locale of potantialLocales) {\n try {\n resolveLocaleCode(locale as LocaleCode);\n return { locale, file };\n } catch (e) {}\n }\n return { file, locale: null };\n })\n .filter(({ locale }) => locale !== null);\n\n const localeFilesAndPatterns = potantialLocaleFilesAndPatterns.map(({ file, locale }) => {\n const pattern = file\n .replaceAll(new RegExp(`/${locale}${ext}`, \"g\"), `/[locale]${ext}`)\n .replaceAll(new RegExp(`/${locale}/`, \"g\"), `/[locale]/`)\n .replaceAll(new RegExp(`/${locale}/`, \"g\"), `/[locale]/`); // for when there are 2 locales one after another\n return { pattern, file };\n });\n\n const grouppedFilesAndPatterns = _.groupBy(localeFilesAndPatterns, \"pattern\");\n const patterns = Object.keys(grouppedFilesAndPatterns);\n const defaultPatterns = [`i18n/[locale]${ext}`];\n\n if (patterns.length > 0) {\n return { patterns, defaultPatterns };\n }\n\n return { patterns: [], defaultPatterns };\n}\n\nfunction findLocaleFilesForFilename(fileName: string) {\n const pattern = fileName;\n const localeFiles = glob.sync(`**/${fileName}`, {\n ignore: [\"node_modules/**\", \"package*.json\", \"i18n.json\", \"lingo.json\"],\n });\n\n const localeFilesAndPatterns = localeFiles.map((file: string) => ({\n file,\n pattern: path.join(path.dirname(file), pattern),\n }));\n const grouppedFilesAndPatterns = _.groupBy(localeFilesAndPatterns, \"pattern\");\n const patterns = Object.keys(grouppedFilesAndPatterns);\n const defaultPatterns = [fileName];\n\n if (patterns.length > 0) {\n return { patterns, defaultPatterns };\n }\n\n return { patterns: [], defaultPatterns };\n}\n","import fs from \"fs\";\nimport path from \"path\";\nimport { glob } from \"glob\";\nimport _ from \"lodash\";\nimport { LocaleCode, resolveLocaleCode } from \"@lingo.dev/_spec\";\n\nexport function ensurePatterns(patterns: string[], source: string) {\n if (patterns.length === 0) {\n throw new Error(\"No patterns found\");\n }\n\n patterns.forEach((pattern) => {\n const filePath = pattern.replace(\"[locale]\", source);\n if (!fs.existsSync(filePath)) {\n const defaultContent = getDefaultContent(path.extname(filePath), source);\n fs.mkdirSync(path.dirname(filePath), { recursive: true });\n fs.writeFileSync(filePath, defaultContent);\n }\n });\n}\n\nfunction getDefaultContent(ext: string, source: string) {\n const defaultGreeting = \"Hello from Lingo.dev\";\n switch (ext) {\n case \".json\":\n case \".arb\":\n return `{\\n\\t\"greeting\": \"${defaultGreeting}\"\\n}`;\n case \".yml\":\n return `${source}:\\n\\tgreeting: \"${defaultGreeting}\"`;\n case \".xml\":\n return `<resources>\\n\\t<string name=\"greeting\">${defaultGreeting}</string>\\n</resources>`;\n case \".md\":\n return `# ${defaultGreeting}`;\n case \".xcstrings\":\n return `{\n \"sourceLanguage\" : \"${source}\",\n \"strings\" : {\n \"${defaultGreeting}\" : {\n \"extractionState\" : \"manual\",\n \"localizations\" : {\n \"${source}\" : {\n \"stringUnit\" : {\n \"state\" : \"translated\",\n \"value\" : \"${defaultGreeting}\"\n }\n }\n }\n }\n }\n}`;\n case \".strings\":\n return `\"greeting\" = \"${defaultGreeting}\";`;\n case \".stringsdict\":\n return `<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n <key>key</key>\n <dict>\n <key>NSStringLocalizedFormatKey</key>\n <string>%#@count@</string>\n <key>count</key>\n <dict>\n <key>NSStringFormatSpecTypeKey</key>\n <string>NSStringPluralRuleType</string>\n <key>NSStringFormatValueTypeKey</key>\n <string>d</string>\n <key>zero</key>\n <string>No items</string>\n <key>one</key>\n <string>One item</string>\n <key>other</key>\n <string>%d items</string>\n </dict>\n </dict>\n</dict>\n</plist>`;\n default:\n throw new Error(`Unsupported file extension: ${ext}`);\n }\n}\n","import fs from \"fs\";\nimport path from \"path\";\n\nexport default function updateGitignore() {\n const cacheFile = \"i18n.cache\";\n const projectRoot = findCurrentProjectRoot();\n if (!projectRoot) {\n return;\n }\n const gitignorePath = path.join(projectRoot, \".gitignore\");\n if (!fs.existsSync(gitignorePath)) {\n return;\n }\n\n const gitignore = fs.readFileSync(gitignorePath, \"utf8\").split(\"\\n\");\n const cacheIsIgnored = gitignore.includes(cacheFile);\n\n if (!cacheIsIgnored) {\n let content = \"\";\n\n // Ensure there's a trailing newline\n content = fs.readFileSync(gitignorePath, \"utf8\");\n if (content !== \"\" && !content.endsWith(\"\\n\")) {\n content += \"\\n\";\n }\n\n content += `${cacheFile}\\n`;\n fs.writeFileSync(gitignorePath, content);\n }\n}\n\nfunction findCurrentProjectRoot() {\n let currentDir = process.cwd();\n while (currentDir !== path.parse(currentDir).root) {\n const gitDirPath = path.join(currentDir, \".git\");\n if (fs.existsSync(gitDirPath) && fs.lstatSync(gitDirPath).isDirectory()) {\n return currentDir;\n }\n currentDir = path.dirname(currentDir);\n }\n return null;\n}\n","import { checkbox, confirm } from \"@inquirer/prompts\";\nimport fs from \"fs\";\nimport { Ora } from \"ora\";\nimport path from \"path\";\n\ntype Platform = \"github\" | \"bitbucket\" | \"gitlab\";\n\nconst platforms: Platform[] = [\"github\", \"bitbucket\", \"gitlab\"];\n\nexport default async function initCICD(spinner: Ora) {\n const initializers = getPlatformInitializers(spinner);\n\n const init = await confirm({\n message: \"Would you like to use Lingo.dev in your CI/CD?\",\n });\n\n if (!init) {\n spinner.warn(\"CI/CD not initialized. To set it up later, see docs: https://docs.lingo.dev/ci-action/overview\");\n return;\n }\n\n const selectedPlatforms: Platform[] = await checkbox({\n message: \"Please select CI/CD platform(s) you want to use:\",\n choices: platforms.map((platform) => ({\n name: initializers[platform].name,\n value: platform,\n checked: initializers[platform].isEnabled(),\n })),\n });\n\n for (const platform of selectedPlatforms) {\n await initializers[platform].init();\n }\n}\n\nfunction getPlatformInitializers(spinner: Ora) {\n return {\n github: makeGithubInitializer(spinner),\n bitbucket: makeBitbucketInitializer(spinner),\n gitlab: makeGitlabInitializer(spinner),\n };\n}\n\ntype PlatformConfig = {\n name: string;\n checkPath: string;\n ciConfigPath: string;\n ciConfigContent: string;\n};\n\nfunction makePlatformInitializer(config: PlatformConfig, spinner: Ora) {\n return {\n name: config.name,\n isEnabled: () => {\n const filePath = path.join(process.cwd(), config.checkPath);\n return fs.existsSync(filePath);\n },\n init: async () => {\n const filePath = path.join(process.cwd(), config.ciConfigPath);\n const dirPath = path.dirname(filePath);\n if (!fs.existsSync(dirPath)) {\n fs.mkdirSync(dirPath, { recursive: true });\n }\n let canWrite = true;\n if (fs.existsSync(filePath)) {\n canWrite = await confirm({\n message: `File ${filePath} already exists. Do you want to overwrite it?`,\n default: false,\n });\n }\n if (canWrite) {\n fs.writeFileSync(filePath, config.ciConfigContent);\n spinner.succeed(`CI/CD initialized for ${config.name}`);\n } else {\n spinner.warn(`CI/CD not initialized for ${config.name}`);\n }\n },\n };\n}\n\nfunction makeGithubInitializer(spinner: Ora) {\n return makePlatformInitializer(\n {\n name: \"GitHub Action\",\n checkPath: \".github\",\n ciConfigPath: \".github/workflows/i18n.yml\",\n ciConfigContent: `name: Lingo.dev i18n\n\non:\n push:\n branches:\n - main\n\npermissions:\n contents: write\n pull-requests: write\n\njobs:\n i18n:\n name: Run i18n\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n - uses: lingodotdev/lingo.dev@main\n with:\n api-key: \\${{ secrets.LINGODOTDEV_API_KEY }}\n`,\n },\n spinner,\n );\n}\n\nfunction makeBitbucketInitializer(spinner: Ora) {\n return makePlatformInitializer(\n {\n name: \"Bitbucket Pipeline\",\n checkPath: \"bitbucket-pipelines.yml\",\n ciConfigPath: \"bitbucket-pipelines.yml\",\n ciConfigContent: `pipelines:\n branches:\n main:\n - step:\n name: Run i18n\n script:\n - pipe: lingodotdev/lingo.dev:main`,\n },\n spinner,\n );\n}\n\nfunction makeGitlabInitializer(spinner: Ora) {\n return makePlatformInitializer(\n {\n name: \"Gitlab CI\",\n checkPath: \".gitlab-ci.yml\",\n ciConfigPath: \".gitlab-ci.yml\",\n ciConfigContent: `lingodotdev:\n image: lingodotdev/ci-action:latest\n script:\n - echo \"Done\"\n`,\n },\n spinner,\n );\n}\n","import { Command } from \"interactive-commander\";\nimport _ from \"lodash\";\nimport configCmd from \"./config\";\nimport localeCmd from \"./locale\";\nimport filesCmd from \"./files\";\n\nexport default new Command()\n .command(\"show\")\n .description(\"Prints out the current configuration\")\n .helpOption(\"-h, --help\", \"Show help\")\n .addCommand(configCmd)\n .addCommand(localeCmd)\n .addCommand(filesCmd);\n","import { Command } from \"interactive-commander\";\nimport _ from \"lodash\";\nimport fs from \"fs\";\nimport path from \"path\";\nimport { defaultConfig } from \"@lingo.dev/_spec\";\n\nexport default new Command()\n .command(\"config\")\n .description(\"Print out the current configuration\")\n .helpOption(\"-h, --help\", \"Show help\")\n .action(async (options) => {\n const fileConfig = loadReplexicaFileConfig();\n const config = _.merge({}, defaultConfig, fileConfig);\n\n console.log(JSON.stringify(config, null, 2));\n });\n\nfunction loadReplexicaFileConfig(): any {\n const replexicaConfigPath = path.resolve(process.cwd(), \"i18n.json\");\n const fileExists = fs.existsSync(replexicaConfigPath);\n if (!fileExists) {\n return undefined;\n }\n\n const fileContent = fs.readFileSync(replexicaConfigPath, \"utf-8\");\n const replexicaFileConfig = JSON.parse(fileContent);\n return replexicaFileConfig;\n}\n","import { Command } from \"interactive-commander\";\nimport _ from \"lodash\";\nimport Z from \"zod\";\nimport Ora from \"ora\";\nimport { localeCodes } from \"@lingo.dev/_spec\";\nimport { CLIError } from \"../../utils/errors\";\n\nexport default new Command()\n .command(\"locale\")\n .description(\"Print out the list of locales\")\n .helpOption(\"-h, --help\", \"Show help\")\n // argument can be equal either \"sources\" or \"targets\"\n .argument(\"<type>\", 'Type of locales to show, either \"sources\" or \"targets\"')\n .action(async (type) => {\n const ora = Ora();\n try {\n switch (type) {\n default:\n throw new CLIError({\n message: `Invalid type: ${type}`,\n docUrl: \"invalidType\",\n });\n case \"sources\":\n localeCodes.forEach((locale) => console.log(locale));\n break;\n case \"targets\":\n localeCodes.forEach((locale) => console.log(locale));\n break;\n }\n } catch (error: any) {\n ora.fail(error.message);\n process.exit(1);\n }\n });\n","import { Command } from \"interactive-commander\";\nimport _ from \"lodash\";\nimport Ora from \"ora\";\nimport { getConfig } from \"../../utils/config\";\nimport { CLIError } from \"../../utils/errors\";\nimport { getBuckets } from \"../../utils/buckets\";\nimport { resolveOverriddenLocale } from \"@lingo.dev/_spec\";\n\nexport default new Command()\n .command(\"files\")\n .description(\"Print out the list of files managed by Lingo.dev\")\n .option(\"--source\", \"Only show source files, files containing the original translations\")\n .option(\"--target\", \"Only show target files, files containing translated content\")\n .helpOption(\"-h, --help\", \"Show help\")\n .action(async (type) => {\n const ora = Ora();\n try {\n try {\n const i18nConfig = await getConfig();\n\n if (!i18nConfig) {\n throw new CLIError({\n message: \"i18n.json not found. Please run `lingo.dev init` to initialize the project.\",\n docUrl: \"i18nNotFound\",\n });\n }\n\n const buckets = getBuckets(i18nConfig);\n for (const bucket of buckets) {\n for (const bucketConfig of bucket.paths) {\n const sourceLocale = resolveOverriddenLocale(i18nConfig.locale.source, bucketConfig.delimiter);\n const sourcePath = bucketConfig.pathPattern.replace(/\\[locale\\]/g, sourceLocale);\n const targetPaths = i18nConfig.locale.targets.map((_targetLocale) => {\n const targetLocale = resolveOverriddenLocale(_targetLocale, bucketConfig.delimiter);\n return bucketConfig.pathPattern.replace(/\\[locale\\]/g, targetLocale);\n });\n\n const result: string[] = [];\n if (!type.source && !type.target) {\n result.push(sourcePath, ...targetPaths);\n } else if (type.source) {\n result.push(sourcePath);\n } else if (type.target) {\n result.push(...targetPaths);\n }\n\n result.forEach((path) => {\n console.log(path);\n });\n }\n }\n } catch (error: any) {\n throw new CLIError({\n message: `Failed to expand placeholdered globs: ${error.message}`,\n docUrl: \"placeHolderFailed\",\n });\n }\n } catch (error: any) {\n ora.fail(error.message);\n process.exit(1);\n }\n });\n","import _ from \"lodash\";\nimport path from \"path\";\nimport { glob } from \"glob\";\nimport { CLIError } from \"./errors\";\nimport {\n I18nConfig,\n resolveOverriddenLocale,\n BucketItem,\n LocaleDelimiter,\n} from \"@lingo.dev/_spec\";\nimport { bucketTypeSchema } from \"@lingo.dev/_spec\";\nimport Z from \"zod\";\n\ntype BucketConfig = {\n type: Z.infer<typeof bucketTypeSchema>;\n paths: Array<{ pathPattern: string; delimiter?: LocaleDelimiter }>;\n injectLocale?: string[];\n lockedKeys?: string[];\n lockedPatterns?: string[];\n ignoredKeys?: string[];\n};\n\nexport function getBuckets(i18nConfig: I18nConfig) {\n const result = Object.entries(i18nConfig.buckets).map(\n ([bucketType, bucketEntry]) => {\n const includeItems = bucketEntry.include.map((item) =>\n resolveBucketItem(item),\n );\n const excludeItems = bucketEntry.exclude?.map((item) =>\n resolveBucketItem(item),\n );\n const config: BucketConfig = {\n type: bucketType as Z.infer<typeof bucketTypeSchema>,\n paths: extractPathPatterns(\n i18nConfig.locale.source,\n includeItems,\n excludeItems,\n ),\n };\n if (bucketEntry.injectLocale) {\n config.injectLocale = bucketEntry.injectLocale;\n }\n if (bucketEntry.lockedKeys) {\n config.lockedKeys = bucketEntry.lockedKeys;\n }\n if (bucketEntry.lockedPatterns) {\n config.lockedPatterns = bucketEntry.lockedPatterns;\n }\n if (bucketEntry.ignoredKeys) {\n config.ignoredKeys = bucketEntry.ignoredKeys;\n }\n return config;\n },\n );\n\n return result;\n}\n\nfunction extractPathPatterns(\n sourceLocale: string,\n include: BucketItem[],\n exclude?: BucketItem[],\n) {\n const includedPatterns = include.flatMap((pattern) =>\n expandPlaceholderedGlob(\n pattern.path,\n resolveOverriddenLocale(sourceLocale, pattern.delimiter),\n ).map((pathPattern) => ({\n pathPattern,\n delimiter: pattern.delimiter,\n })),\n );\n const excludedPatterns = exclude?.flatMap((pattern) =>\n expandPlaceholderedGlob(\n pattern.path,\n resolveOverriddenLocale(sourceLocale, pattern.delimiter),\n ).map((pathPattern) => ({\n pathPattern,\n delimiter: pattern.delimiter,\n })),\n );\n const result = _.differenceBy(\n includedPatterns,\n excludedPatterns ?? [],\n (item) => item.pathPattern,\n );\n return result;\n}\n\n// Path expansion\nfunction expandPlaceholderedGlob(\n _pathPattern: string,\n sourceLocale: string,\n): string[] {\n // Throw if pathPattern is an absolute path\n const absolutePathPattern = path.resolve(_pathPattern);\n const pathPattern = path.relative(process.cwd(), absolutePathPattern);\n // Throw if pathPattern points outside the current working directory\n if (path.relative(process.cwd(), pathPattern).startsWith(\"..\")) {\n throw new CLIError({\n message: `Invalid path pattern: ${pathPattern}. Path pattern must be within the current working directory.`,\n docUrl: \"invalidPathPattern\",\n });\n }\n // Throw error if pathPattern contains \"**\" – we don't support recursive path patterns\n if (pathPattern.includes(\"**\")) {\n throw new CLIError({\n message: `Invalid path pattern: ${pathPattern}. Recursive path patterns are not supported.`,\n docUrl: \"invalidPathPattern\",\n });\n }\n\n // Break down path pattern into parts\n const pathPatternChunks = pathPattern.split(path.sep);\n // Find the index of the segment containing \"[locale]\"\n const localeSegmentIndexes = pathPatternChunks.reduce(\n (indexes, segment, index) => {\n if (segment.includes(\"[locale]\")) {\n indexes.push(index);\n }\n return indexes;\n },\n [] as number[],\n );\n // substitute [locale] in pathPattern with sourceLocale\n const sourcePathPattern = pathPattern.replaceAll(/\\[locale\\]/g, sourceLocale);\n // get all files that match the sourcePathPattern\n const sourcePaths = glob\n .sync(sourcePathPattern, { follow: true, withFileTypes: true })\n .filter((file) => file.isFile() || file.isSymbolicLink())\n .map((file) => file.fullpath())\n .map((fullpath) => path.relative(process.cwd(), fullpath));\n // transform each source file path back to [locale] placeholder paths\n const placeholderedPaths = sourcePaths.map((sourcePath) => {\n const sourcePathChunks = sourcePath.split(path.sep);\n localeSegmentIndexes.forEach((localeSegmentIndex) => {\n // Find the position of the \"[locale]\" placeholder within the segment\n const pathPatternChunk = pathPatternChunks[localeSegmentIndex];\n const sourcePathChunk = sourcePathChunks[localeSegmentIndex];\n const regexp = new RegExp(\n \"(\" +\n pathPatternChunk\n .replaceAll(\".\", \"\\\\.\")\n .replaceAll(\"*\", \".*\")\n .replace(\"[locale]\", `)${sourceLocale}(`) +\n \")\",\n );\n const match = sourcePathChunk.match(regexp);\n if (match) {\n const [, prefix, suffix] = match;\n const placeholderedSegment = prefix + \"[locale]\" + suffix;\n sourcePathChunks[localeSegmentIndex] = placeholderedSegment;\n }\n });\n const placeholderedPath = sourcePathChunks.join(path.sep);\n return placeholderedPath;\n });\n // return the placeholdered paths\n return placeholderedPaths;\n}\n\nfunction resolveBucketItem(bucketItem: string | BucketItem): BucketItem {\n if (typeof bucketItem === \"string\") {\n return { path: bucketItem, delimiter: null };\n }\n return bucketItem;\n}\n","import { Command } from \"interactive-commander\";\n\nimport setCmd from \"./set\";\nimport unsetCmd from \"./unset\";\nimport getCmd from \"./get\";\n\nexport default new Command()\n .command(\"config\")\n .description(\"Manage Lingo.dev CLI configuration\")\n .helpOption(\"-h, --help\", \"Show help\")\n .addCommand(setCmd)\n .addCommand(unsetCmd)\n .addCommand(getCmd);\n","import { Command } from \"interactive-commander\";\nimport chalk from \"chalk\";\nimport dedent from \"dedent\";\nimport _ from \"lodash\";\nimport {\n SETTINGS_KEYS,\n loadSystemSettings,\n saveSettings,\n} from \"../../utils/settings\";\n\nexport default new Command()\n .name(\"set\")\n .description(\"Set a configuration key to a value\")\n .addHelpText(\"afterAll\", `\\nAvailable keys:\\n ${SETTINGS_KEYS.join(\"\\n \")}`)\n .argument(\"<key>\", \"Configuration key to set\")\n .argument(\"<value>\", \"New value\")\n .helpOption(\"-h, --help\", \"Show help\")\n .action(async (key: string, value: string) => {\n if (!SETTINGS_KEYS.includes(key)) {\n console.error(\n dedent`\n ${chalk.red(\"✖\")} Unknown configuration key: ${chalk.bold(key)}\n Run ${chalk.dim(\"lingo.dev config set --help\")} to see available keys.\n `,\n );\n process.exitCode = 1;\n return;\n }\n\n const current = loadSystemSettings();\n const updated: any = _.cloneDeep(current);\n _.set(updated, key, value);\n\n try {\n saveSettings(updated as any);\n console.log(`${chalk.green(\"✔\")} Set ${chalk.bold(key)}`);\n } catch (err) {\n console.error(\n chalk.red(\n `✖ Failed to save configuration: ${chalk.dim(\n err instanceof Error ? err.message : String(err),\n )}`,\n ),\n );\n process.exitCode = 1;\n }\n });\n","import { Command } from \"interactive-commander\";\nimport chalk from \"chalk\";\nimport dedent from \"dedent\";\nimport _ from \"lodash\";\nimport {\n SETTINGS_KEYS,\n loadSystemSettings,\n saveSettings,\n} from \"../../utils/settings\";\n\nexport default new Command()\n .name(\"unset\")\n .description(\"Remove a configuration key\")\n .addHelpText(\"afterAll\", `\\nAvailable keys:\\n ${SETTINGS_KEYS.join(\"\\n \")}`)\n .argument(\"<key>\", \"Configuration key to remove\")\n .helpOption(\"-h, --help\", \"Show help\")\n .action(async (key: string) => {\n // Validate key first (defensive; choices() should already restrict but keep for safety).\n if (!SETTINGS_KEYS.includes(key)) {\n console.error(\n dedent`\n ${chalk.red(\"✖\")} Unknown configuration key: ${chalk.bold(key)}\n Run ${chalk.dim(\"lingo.dev config unset --help\")} to see available keys.\n `,\n );\n process.exitCode = 1;\n return;\n }\n\n // Load existing settings.\n const settings = loadSystemSettings();\n const currentValue = _.get(settings, key);\n\n if (!_.trim(String(currentValue || \"\"))) {\n console.log(`${chalk.cyan(\"ℹ\")} ${chalk.bold(key)} is not set.`);\n return;\n } else {\n const updated: any = _.cloneDeep(settings);\n _.unset(updated, key);\n try {\n saveSettings(updated as any);\n console.log(\n `${chalk.green(\"✔\")} Removed configuration key ${chalk.bold(key)}`,\n );\n } catch (err) {\n console.error(\n chalk.red(\n `✖ Failed to save configuration: ${chalk.dim(\n err instanceof Error ? err.message : String(err),\n )}`,\n ),\n );\n process.exitCode = 1;\n }\n }\n });\n","import { Command } from \"interactive-commander\";\nimport chalk from \"chalk\";\nimport _ from \"lodash\";\nimport { SETTINGS_KEYS, loadSystemSettings } from \"../../utils/settings\";\nimport dedent from \"dedent\";\n\nexport default new Command()\n .name(\"get\")\n .description(\"Get the value of a configuration key\")\n .addHelpText(\"afterAll\", `\\nAvailable keys:\\n ${SETTINGS_KEYS.join(\"\\n \")}`)\n .argument(\"<key>\", \"Configuration key\")\n .helpOption(\"-h, --help\", \"Show help\")\n .action(async (key: string) => {\n // Validate that the provided key is one of the recognised configuration keys.\n if (!SETTINGS_KEYS.includes(key)) {\n console.error(\n dedent`\n ${chalk.red(\"✖\")} Unknown configuration key: ${chalk.bold(key)}\n Run ${chalk.dim(\"lingo.dev config get --help\")} to see available keys.\n `,\n );\n process.exitCode = 1;\n return;\n }\n\n const settings = loadSystemSettings();\n const value = _.get(settings, key);\n\n if (!value) {\n // Key is valid but not set in the configuration file.\n console.log(`${chalk.cyan(\"ℹ\")} ${chalk.bold(key)} is not set.`);\n return;\n }\n\n if (typeof value === \"object\") {\n console.log(JSON.stringify(value, null, 2));\n } else {\n console.log(value);\n }\n });\n","import {\n bucketTypeSchema,\n I18nConfig,\n localeCodeSchema,\n resolveOverriddenLocale,\n} from \"@lingo.dev/_spec\";\nimport { Command } from \"interactive-commander\";\nimport Z from \"zod\";\nimport _ from \"lodash\";\nimport * as path from \"path\";\nimport { getConfig } from \"../utils/config\";\nimport { getSettings } from \"../utils/settings\";\nimport { CLIError } from \"../utils/errors\";\nimport Ora from \"ora\";\nimport createBucketLoader from \"../loaders\";\nimport { createAuthenticator } from \"../utils/auth\";\nimport { getBuckets } from \"../utils/buckets\";\nimport chalk from \"chalk\";\nimport { createTwoFilesPatch } from \"diff\";\nimport inquirer from \"inquirer\";\nimport externalEditor from \"external-editor\";\nimport updateGitignore from \"../utils/update-gitignore\";\nimport createProcessor from \"../processor\";\nimport { withExponentialBackoff } from \"../utils/exp-backoff\";\nimport trackEvent from \"../utils/observability\";\nimport { createDeltaProcessor } from \"../utils/delta\";\nimport { tryReadFile, writeFile } from \"../utils/fs\";\nimport { flatten, unflatten } from \"flat\";\n\nexport default new Command()\n .command(\"i18n\")\n .description(\"Run Localization engine\")\n .helpOption(\"-h, --help\", \"Show help\")\n .option(\n \"--locale <locale>\",\n \"Locale to process\",\n (val: string, prev: string[]) => (prev ? [...prev, val] : [val]),\n )\n .option(\n \"--bucket <bucket>\",\n \"Bucket to process\",\n (val: string, prev: string[]) => (prev ? [...prev, val] : [val]),\n )\n .option(\n \"--key <key>\",\n \"Key to process. Process only a specific translation key, useful for debugging or updating a single entry\",\n )\n .option(\n \"--file [files...]\",\n \"File to process. Process only a specific path, may contain asterisk * to match multiple files. Useful if you have a lot of files and want to focus on a specific one. Specify more files separated by commas or spaces.\",\n )\n .option(\n \"--frozen\",\n `Run in read-only mode - fails if any translations need updating, useful for CI/CD pipelines to detect missing translations`,\n )\n .option(\n \"--force\",\n \"Ignore lockfile and process all keys, useful for full re-translation\",\n )\n .option(\n \"--verbose\",\n \"Show detailed output including intermediate processing data and API communication details\",\n )\n .option(\n \"--interactive\",\n \"Enable interactive mode for reviewing and editing translations before they are applied\",\n )\n .option(\n \"--api-key <api-key>\",\n \"Explicitly set the API key to use, override the default API key from settings\",\n )\n .option(\n \"--debug\",\n \"Pause execution at start for debugging purposes, waits for user confirmation before proceeding\",\n )\n .option(\n \"--strict\",\n \"Stop processing on first error instead of continuing with other locales/buckets\",\n )\n .action(async function (options) {\n updateGitignore();\n\n const ora = Ora();\n const flags = parseFlags(options);\n\n if (flags.debug) {\n // wait for user input, use inquirer\n const { debug } = await inquirer.prompt([\n {\n type: \"confirm\",\n name: \"debug\",\n message: \"Debug mode. Wait for user input before continuing.\",\n },\n ]);\n }\n\n let hasErrors = false;\n let authId: string | null = null;\n try {\n ora.start(\"Loading configuration...\");\n const i18nConfig = getConfig();\n const settings = getSettings(flags.apiKey);\n ora.succeed(\"Configuration loaded\");\n\n ora.start(\"Validating localization configuration...\");\n validateParams(i18nConfig, flags);\n ora.succeed(\"Localization configuration is valid\");\n\n ora.start(\"Connecting to Lingo.dev Localization Engine...\");\n const isByokMode = !!i18nConfig?.provider;\n\n if (isByokMode) {\n authId = null;\n ora.succeed(\"Using external provider (BYOK mode)\");\n } else {\n const auth = await validateAuth(settings);\n authId = auth.id;\n ora.succeed(`Authenticated as ${auth.email}`);\n }\n\n trackEvent(authId, \"cmd.i18n.start\", {\n i18nConfig,\n flags,\n });\n\n let buckets = getBuckets(i18nConfig!);\n if (flags.bucket?.length) {\n buckets = buckets.filter((bucket: any) =>\n flags.bucket!.includes(bucket.type),\n );\n }\n ora.succeed(\"Buckets retrieved\");\n\n if (flags.file?.length) {\n buckets = buckets\n .map((bucket: any) => {\n const paths = bucket.paths.filter((path: any) =>\n flags.file!.find((file) => path.pathPattern?.includes(file)),\n );\n return { ...bucket, paths };\n })\n .filter((bucket: any) => bucket.paths.length > 0);\n if (buckets.length === 0) {\n ora.fail(\n \"No buckets found. All buckets were filtered out by --file option.\",\n );\n process.exit(1);\n } else {\n ora.info(`\\x1b[36mProcessing only filtered buckets:\\x1b[0m`);\n buckets.map((bucket: any) => {\n ora.info(` ${bucket.type}:`);\n bucket.paths.forEach((path: any) => {\n ora.info(` - ${path.pathPattern}`);\n });\n });\n }\n }\n\n const targetLocales = flags.locale?.length\n ? flags.locale\n : i18nConfig!.locale.targets;\n\n // Ensure the lockfile exists\n ora.start(\"Setting up localization cache...\");\n const checkLockfileProcessor = createDeltaProcessor(\"\");\n const lockfileExists = await checkLockfileProcessor.checkIfLockExists();\n if (!lockfileExists) {\n ora.start(\"Creating i18n.lock...\");\n for (const bucket of buckets) {\n for (const bucketPath of bucket.paths) {\n const sourceLocale = resolveOverriddenLocale(\n i18nConfig!.locale.source,\n bucketPath.delimiter,\n );\n const bucketLoader = createBucketLoader(\n bucket.type,\n bucketPath.pathPattern,\n {\n isCacheRestore: false,\n defaultLocale: sourceLocale,\n injectLocale: bucket.injectLocale,\n },\n bucket.lockedKeys,\n bucket.lockedPatterns,\n bucket.ignoredKeys,\n );\n bucketLoader.setDefaultLocale(sourceLocale);\n await bucketLoader.init();\n\n const sourceData = await bucketLoader.pull(\n i18nConfig!.locale.source,\n );\n\n const deltaProcessor = createDeltaProcessor(bucketPath.pathPattern);\n const checksums = await deltaProcessor.createChecksums(sourceData);\n await deltaProcessor.saveChecksums(checksums);\n }\n }\n ora.succeed(\"Localization cache initialized\");\n } else {\n ora.succeed(\"Localization cache loaded\");\n }\n\n if (flags.frozen) {\n ora.start(\"Checking for lockfile updates...\");\n let requiresUpdate: string | null = null;\n bucketLoop: for (const bucket of buckets) {\n for (const bucketPath of bucket.paths) {\n const sourceLocale = resolveOverriddenLocale(\n i18nConfig!.locale.source,\n bucketPath.delimiter,\n );\n\n const bucketLoader = createBucketLoader(\n bucket.type,\n bucketPath.pathPattern,\n {\n isCacheRestore: false,\n defaultLocale: sourceLocale,\n returnUnlocalizedKeys: true,\n injectLocale: bucket.injectLocale,\n },\n bucket.lockedKeys,\n );\n bucketLoader.setDefaultLocale(sourceLocale);\n await bucketLoader.init();\n\n const { unlocalizable: sourceUnlocalizable, ...sourceData } =\n await bucketLoader.pull(i18nConfig!.locale.source);\n const deltaProcessor = createDeltaProcessor(bucketPath.pathPattern);\n const sourceChecksums =\n await deltaProcessor.createChecksums(sourceData);\n const savedChecksums = await deltaProcessor.loadChecksums();\n\n // Get updated data by comparing current checksums with saved checksums\n const updatedSourceData = _.pickBy(\n sourceData,\n (value, key) => sourceChecksums[key] !== savedChecksums[key],\n );\n\n // translation was updated in the source file\n if (Object.keys(updatedSourceData).length > 0) {\n requiresUpdate = \"updated\";\n break bucketLoop;\n }\n\n for (const _targetLocale of targetLocales) {\n const targetLocale = resolveOverriddenLocale(\n _targetLocale,\n bucketPath.delimiter,\n );\n const { unlocalizable: targetUnlocalizable, ...targetData } =\n await bucketLoader.pull(targetLocale);\n\n const missingKeys = _.difference(\n Object.keys(sourceData),\n Object.keys(targetData),\n );\n const extraKeys = _.difference(\n Object.keys(targetData),\n Object.keys(sourceData),\n );\n const unlocalizableDataDiff = !_.isEqual(\n sourceUnlocalizable,\n targetUnlocalizable,\n );\n\n // translation is missing in the target file\n if (missingKeys.length > 0) {\n requiresUpdate = \"missing\";\n break bucketLoop;\n }\n\n // target file has extra translations\n if (extraKeys.length > 0) {\n requiresUpdate = \"extra\";\n break bucketLoop;\n }\n\n // unlocalizable keys do not match\n if (unlocalizableDataDiff) {\n requiresUpdate = \"unlocalizable\";\n break bucketLoop;\n }\n }\n }\n }\n\n if (requiresUpdate) {\n const message = {\n updated: \"Source file has been updated.\",\n missing: \"Target file is missing translations.\",\n extra:\n \"Target file has extra translations not present in the source file.\",\n unlocalizable:\n \"Unlocalizable data (such as booleans, dates, URLs, etc.) do not match.\",\n }[requiresUpdate];\n ora.fail(\n `Localization data has changed; please update i18n.lock or run without --frozen.`,\n );\n ora.fail(` Details: ${message}`);\n process.exit(1);\n } else {\n ora.succeed(\"No lockfile updates required.\");\n }\n }\n\n // Process each bucket\n for (const bucket of buckets) {\n try {\n console.log();\n ora.info(`Processing bucket: ${bucket.type}`);\n for (const bucketPath of bucket.paths) {\n const bucketOra = Ora({ indent: 2 }).info(\n `Processing path: ${bucketPath.pathPattern}`,\n );\n\n const sourceLocale = resolveOverriddenLocale(\n i18nConfig!.locale.source,\n bucketPath.delimiter,\n );\n\n const bucketLoader = createBucketLoader(\n bucket.type,\n bucketPath.pathPattern,\n {\n isCacheRestore: false,\n defaultLocale: sourceLocale,\n injectLocale: bucket.injectLocale,\n },\n bucket.lockedKeys,\n bucket.lockedPatterns,\n bucket.ignoredKeys,\n );\n bucketLoader.setDefaultLocale(sourceLocale);\n await bucketLoader.init();\n let sourceData = await bucketLoader.pull(sourceLocale);\n\n for (const _targetLocale of targetLocales) {\n const targetLocale = resolveOverriddenLocale(\n _targetLocale,\n bucketPath.delimiter,\n );\n try {\n bucketOra.start(\n `[${sourceLocale} -> ${targetLocale}] (0%) Localization in progress...`,\n );\n\n sourceData = await bucketLoader.pull(sourceLocale);\n\n const targetData = await bucketLoader.pull(targetLocale);\n const deltaProcessor = createDeltaProcessor(\n bucketPath.pathPattern,\n );\n const checksums = await deltaProcessor.loadChecksums();\n const delta = await deltaProcessor.calculateDelta({\n sourceData,\n targetData,\n checksums,\n });\n let processableData = _.chain(sourceData)\n .entries()\n .filter(\n ([key, value]) =>\n delta.added.includes(key) ||\n delta.updated.includes(key) ||\n !!flags.force,\n )\n .fromPairs()\n .value();\n\n if (flags.key) {\n processableData = _.pickBy(\n processableData,\n (_, key) => key === flags.key,\n );\n }\n if (flags.verbose) {\n bucketOra.info(JSON.stringify(processableData, null, 2));\n }\n\n bucketOra.start(\n `[${sourceLocale} -> ${targetLocale}] [${Object.keys(processableData).length} entries] (0%) AI localization in progress...`,\n );\n let processPayload = createProcessor(i18nConfig!.provider, {\n apiKey: settings.auth.apiKey,\n apiUrl: settings.auth.apiUrl,\n });\n processPayload = withExponentialBackoff(\n processPayload,\n 3,\n 1000,\n );\n\n const processedTargetData = await processPayload(\n {\n sourceLocale,\n sourceData,\n processableData,\n targetLocale,\n targetData,\n },\n (progress, sourceChunk, processedChunk) => {\n bucketOra.text = `[${sourceLocale} -> ${targetLocale}] [${Object.keys(processableData).length} entries] (${progress}%) AI localization in progress...`;\n },\n );\n\n if (flags.verbose) {\n bucketOra.info(JSON.stringify(processedTargetData, null, 2));\n }\n\n let finalTargetData = _.merge(\n {},\n sourceData,\n targetData,\n processedTargetData,\n );\n\n // rename keys\n finalTargetData = _.chain(finalTargetData)\n .entries()\n .map(([key, value]) => {\n const renaming = delta.renamed.find(\n ([oldKey, newKey]) => oldKey === key,\n );\n if (!renaming) {\n return [key, value];\n }\n return [renaming[1], value];\n })\n .fromPairs()\n .value();\n\n if (flags.interactive) {\n bucketOra.stop();\n const reviewedData = await reviewChanges({\n pathPattern: bucketPath.pathPattern,\n targetLocale,\n currentData: targetData,\n proposedData: finalTargetData,\n sourceData,\n force: flags.force!,\n });\n\n finalTargetData = reviewedData;\n bucketOra.start(\n `Applying changes to ${bucketPath} (${targetLocale})`,\n );\n }\n\n const finalDiffSize = _.chain(finalTargetData)\n .omitBy((value, key) => value === targetData[key])\n .size()\n .value();\n\n // Push to bucket all the time as there might be changes to unlocalizable keys\n await bucketLoader.push(targetLocale, finalTargetData);\n\n if (finalDiffSize > 0 || flags.force) {\n bucketOra.succeed(\n `[${sourceLocale} -> ${targetLocale}] Localization completed`,\n );\n } else {\n bucketOra.succeed(\n `[${sourceLocale} -> ${targetLocale}] Localization completed (no changes).`,\n );\n }\n } catch (_error: any) {\n const error = new Error(\n `[${sourceLocale} -> ${targetLocale}] Localization failed: ${_error.message}`,\n );\n if (flags.strict) {\n throw error;\n } else {\n bucketOra.fail(error.message);\n hasErrors = true;\n }\n }\n }\n\n const deltaProcessor = createDeltaProcessor(bucketPath.pathPattern);\n const checksums = await deltaProcessor.createChecksums(sourceData);\n await deltaProcessor.saveChecksums(checksums);\n }\n } catch (_error: any) {\n const error = new Error(\n `Failed to process bucket ${bucket.type}: ${_error.message}`,\n );\n if (flags.strict) {\n throw error;\n } else {\n ora.fail(error.message);\n hasErrors = true;\n }\n }\n }\n console.log();\n if (!hasErrors) {\n ora.succeed(\"Localization completed.\");\n trackEvent(authId, \"cmd.i18n.success\", {\n i18nConfig,\n flags,\n });\n } else {\n ora.warn(\"Localization completed with errors.\");\n trackEvent(authId || \"unknown\", \"cmd.i18n.error\", {\n flags,\n });\n }\n } catch (error: any) {\n ora.fail(error.message);\n\n trackEvent(authId || \"unknown\", \"cmd.i18n.error\", {\n flags,\n error,\n });\n process.exit(1);\n }\n });\n\nfunction parseFlags(options: any) {\n return Z.object({\n apiKey: Z.string().optional(),\n locale: Z.array(localeCodeSchema).optional(),\n bucket: Z.array(bucketTypeSchema).optional(),\n force: Z.boolean().optional(),\n frozen: Z.boolean().optional(),\n verbose: Z.boolean().optional(),\n strict: Z.boolean().optional(),\n key: Z.string().optional(),\n file: Z.array(Z.string()).optional(),\n interactive: Z.boolean().default(false),\n debug: Z.boolean().default(false),\n }).parse(options);\n}\n\n// Export validateAuth for use in other commands\nexport async function validateAuth(settings: ReturnType<typeof getSettings>) {\n if (!settings.auth.apiKey) {\n throw new CLIError({\n message:\n \"Not authenticated. Please run `lingo.dev auth --login` to authenticate.\",\n docUrl: \"authError\",\n });\n }\n\n const authenticator = createAuthenticator({\n apiKey: settings.auth.apiKey,\n apiUrl: settings.auth.apiUrl,\n });\n const user = await authenticator.whoami();\n if (!user) {\n throw new CLIError({\n message:\n \"Invalid API key. Please run `lingo.dev auth --login` to authenticate.\",\n docUrl: \"authError\",\n });\n }\n\n return user;\n}\n\nfunction validateParams(\n i18nConfig: I18nConfig | null,\n flags: ReturnType<typeof parseFlags>,\n) {\n if (!i18nConfig) {\n throw new CLIError({\n message:\n \"i18n.json not found. Please run `lingo.dev init` to initialize the project.\",\n docUrl: \"i18nNotFound\",\n });\n } else if (!i18nConfig.buckets || !Object.keys(i18nConfig.buckets).length) {\n throw new CLIError({\n message:\n \"No buckets found in i18n.json. Please add at least one bucket containing i18n content.\",\n docUrl: \"bucketNotFound\",\n });\n } else if (\n flags.locale?.some((locale) => !i18nConfig.locale.targets.includes(locale))\n ) {\n throw new CLIError({\n message: `One or more specified locales do not exist in i18n.json locale.targets. Please add them to the list and try again.`,\n docUrl: \"localeTargetNotFound\",\n });\n } else if (\n flags.bucket?.some(\n (bucket) =>\n !i18nConfig.buckets[bucket as keyof typeof i18nConfig.buckets],\n )\n ) {\n throw new CLIError({\n message: `One or more specified buckets do not exist in i18n.json. Please add them to the list and try again.`,\n docUrl: \"bucketNotFound\",\n });\n }\n}\n\nasync function reviewChanges(args: {\n pathPattern: string;\n targetLocale: string;\n currentData: Record<string, any>;\n proposedData: Record<string, any>;\n sourceData: Record<string, any>;\n force: boolean;\n}): Promise<Record<string, any>> {\n const currentStr = JSON.stringify(args.currentData, null, 2);\n const proposedStr = JSON.stringify(args.proposedData, null, 2);\n\n // Early return if no changes\n if (currentStr === proposedStr && !args.force) {\n console.log(\n `\\n${chalk.blue(args.pathPattern)} (${chalk.yellow(args.targetLocale)}): ${chalk.gray(\"No changes to review\")}`,\n );\n return args.proposedData;\n }\n\n const patch = createTwoFilesPatch(\n `${args.pathPattern} (current)`,\n `${args.pathPattern} (proposed)`,\n currentStr,\n proposedStr,\n undefined,\n undefined,\n { context: 3 },\n );\n\n // Color the diff output\n const coloredDiff = patch\n .split(\"\\n\")\n .map((line) => {\n if (line.startsWith(\"+\")) return chalk.green(line);\n if (line.startsWith(\"-\")) return chalk.red(line);\n if (line.startsWith(\"@\")) return chalk.cyan(line);\n return line;\n })\n .join(\"\\n\");\n\n console.log(\n `\\nReviewing changes for ${chalk.blue(args.pathPattern)} (${chalk.yellow(args.targetLocale)}):`,\n );\n console.log(coloredDiff);\n\n const { action } = await inquirer.prompt([\n {\n type: \"list\",\n name: \"action\",\n message: \"Choose action:\",\n choices: [\n { name: \"Approve changes\", value: \"approve\" },\n { name: \"Skip changes\", value: \"skip\" },\n { name: \"Edit individually\", value: \"edit\" },\n ],\n default: \"approve\",\n },\n ]);\n\n if (action === \"approve\") {\n return args.proposedData;\n }\n\n if (action === \"skip\") {\n return args.currentData;\n }\n\n // If edit was chosen, prompt for each changed value\n const customData = { ...args.currentData };\n const changes = _.reduce(\n args.proposedData,\n (result: string[], value: string, key: string) => {\n if (args.currentData[key] !== value) {\n result.push(key);\n }\n return result;\n },\n [],\n );\n\n for (const key of changes) {\n console.log(`\\nEditing value for: ${chalk.cyan(key)}`);\n console.log(chalk.gray(\"Source text:\"), chalk.blue(args.sourceData[key]));\n console.log(\n chalk.gray(\"Current value:\"),\n chalk.red(args.currentData[key] || \"(empty)\"),\n );\n console.log(\n chalk.gray(\"Suggested value:\"),\n chalk.green(args.proposedData[key]),\n );\n console.log(\n chalk.gray(\n \"\\nYour editor will open. Edit the text and save to continue.\",\n ),\n );\n console.log(chalk.gray(\"------------\"));\n\n try {\n // Prepare the editor content with a header comment and the suggested value\n const editorContent = [\n \"# Edit the translation below.\",\n \"# Lines starting with # will be ignored.\",\n \"# Save and exit the editor to continue.\",\n \"#\",\n `# Source text (${chalk.blue(\"English\")}):`,\n `# ${args.sourceData[key]}`,\n \"#\",\n `# Current value (${chalk.red(args.targetLocale)}):`,\n `# ${args.currentData[key] || \"(empty)\"}`,\n \"#\",\n args.proposedData[key],\n ].join(\"\\n\");\n\n const result = externalEditor.edit(editorContent);\n\n // Clean up the result by removing comments and trimming\n const customValue = result\n .split(\"\\n\")\n .filter((line) => !line.startsWith(\"#\"))\n .join(\"\\n\")\n .trim();\n\n if (customValue) {\n customData[key] = customValue;\n } else {\n console.log(\n chalk.yellow(\"Empty value provided, keeping the current value.\"),\n );\n customData[key] = args.currentData[key] || args.proposedData[key];\n }\n } catch (error) {\n console.log(\n chalk.red(\"Error while editing, keeping the suggested value.\"),\n );\n customData[key] = args.proposedData[key];\n }\n }\n\n return customData;\n}\n","import { ILoader, ILoaderDefinition } from \"./_types\";\n\nexport function composeLoaders(\n ...loaders: ILoader<any, any, any>[]\n): ILoader<any, any> {\n return {\n init: async () => {\n for (const loader of loaders) {\n await loader.init?.();\n }\n },\n setDefaultLocale(locale: string) {\n for (const loader of loaders) {\n loader.setDefaultLocale?.(locale);\n }\n return this;\n },\n pull: async (locale, input) => {\n let result: any = input;\n for (let i = 0; i < loaders.length; i++) {\n result = await loaders[i].pull(locale, result);\n }\n return result;\n },\n push: async (locale, data) => {\n let result: any = data;\n for (let i = loaders.length - 1; i >= 0; i--) {\n result = await loaders[i].push(locale, result);\n }\n return result;\n },\n };\n}\n\nexport function createLoader<I, O, C>(\n lDefinition: ILoaderDefinition<I, O, C>,\n): ILoader<I, O, C> {\n const state = {\n defaultLocale: undefined as string | undefined,\n originalInput: undefined as I | undefined | null,\n pullInput: undefined as I | undefined | null,\n pullOutput: undefined as O | undefined | null,\n initCtx: undefined as C | undefined,\n };\n return {\n async init() {\n if (state.initCtx) {\n return state.initCtx;\n }\n state.initCtx = await lDefinition.init?.();\n return state.initCtx as C;\n },\n setDefaultLocale(locale) {\n if (state.defaultLocale) {\n throw new Error(\"Default locale already set\");\n }\n state.defaultLocale = locale;\n return this;\n },\n async pull(locale, input) {\n if (!state.defaultLocale) {\n throw new Error(\"Default locale not set\");\n }\n if (state.originalInput === undefined && locale !== state.defaultLocale) {\n throw new Error(\"The first pull must be for the default locale\");\n }\n if (locale === state.defaultLocale) {\n state.originalInput = input || null;\n }\n\n state.pullInput = input;\n const result = await lDefinition.pull(\n locale,\n input,\n state.initCtx!,\n state.defaultLocale,\n state.originalInput!,\n );\n state.pullOutput = result;\n\n return result;\n },\n async push(locale, data) {\n if (!state.defaultLocale) {\n throw new Error(\"Default locale not set\");\n }\n if (state.originalInput === undefined) {\n throw new Error(\"Cannot push data without pulling first\");\n }\n\n const pushResult = await lDefinition.push(\n locale,\n data,\n state.originalInput,\n state.defaultLocale,\n state.pullInput!,\n state.pullOutput!,\n );\n return pushResult;\n },\n };\n}\n","import { jsonrepair } from \"jsonrepair\";\nimport { ILoader } from \"./_types\";\nimport { createLoader } from \"./_utils\";\n\nexport default function createJsonLoader(): ILoader<string, Record<string, any>> {\n return createLoader({\n pull: async (locale, input) => {\n const jsonString = input || \"{}\";\n let result: Record<string, any>;\n try {\n result = JSON.parse(jsonString);\n } catch (error) {\n result = JSON.parse(jsonrepair(jsonString));\n }\n return result;\n },\n push: async (locale, data) => {\n const serializedData = JSON.stringify(data, null, 2);\n return serializedData;\n },\n });\n}\n","import { flatten, unflatten } from \"flat\";\nimport { ILoader } from \"./_types\";\nimport { composeLoaders, createLoader } from \"./_utils\";\nimport _ from \"lodash\";\n\nexport const OBJECT_NUMERIC_KEY_PREFIX = \"__lingodotdev__obj__\";\n\nexport default function createFlatLoader() {\n return composeLoaders(createDenormalizeLoader(), createNormalizeLoader());\n}\n\ntype DenormalizeResult = {\n denormalized: Record<string, string>;\n keysMap: Record<string, string>;\n};\n\nfunction createDenormalizeLoader(): ILoader<\n Record<string, any>,\n DenormalizeResult\n> {\n return createLoader({\n pull: async (locale, input) => {\n const inputDenormalized = denormalizeObjectKeys(input || {});\n const denormalized: Record<string, string> = flatten(inputDenormalized, {\n delimiter: \"/\",\n transformKey(key) {\n return encodeURIComponent(String(key));\n },\n });\n const keysMap = buildDenormalizedKeysMap(denormalized);\n return { denormalized, keysMap };\n },\n push: async (locale, { denormalized }) => {\n const normalized = normalizeObjectKeys(denormalized);\n return normalized;\n },\n });\n}\n\nfunction createNormalizeLoader(): ILoader<\n DenormalizeResult,\n Record<string, string>\n> {\n return createLoader({\n pull: async (locale, input) => {\n const normalized = normalizeObjectKeys(input.denormalized);\n return normalized;\n },\n push: async (locale, data, originalInput) => {\n const keysMap = originalInput?.keysMap ?? {};\n const input = mapDenormalizedKeys(data, keysMap);\n const denormalized: Record<string, any> = unflatten(input, {\n delimiter: \"/\",\n transformKey(key) {\n return decodeURIComponent(String(key));\n },\n });\n return { denormalized, keysMap: keysMap || {} };\n },\n });\n}\n\nexport function buildDenormalizedKeysMap(obj: Record<string, string>) {\n if (!obj) return {};\n\n return Object.keys(obj).reduce(\n (acc, key) => {\n if (key) {\n const normalizedKey = `${key}`.replace(OBJECT_NUMERIC_KEY_PREFIX, \"\");\n acc[normalizedKey] = key;\n }\n return acc;\n },\n {} as Record<string, string>,\n );\n}\n\nexport function mapDenormalizedKeys(\n obj: Record<string, any>,\n denormalizedKeysMap: Record<string, string>,\n) {\n return Object.keys(obj).reduce(\n (acc, key) => {\n const denormalizedKey = denormalizedKeysMap[key] ?? key;\n acc[denormalizedKey] = obj[key];\n return acc;\n },\n {} as Record<string, string>,\n );\n}\n\nexport function denormalizeObjectKeys(\n obj: Record<string, any>,\n): Record<string, any> {\n if (_.isObject(obj) && !_.isArray(obj)) {\n return _.transform(\n obj,\n (result, value, key) => {\n const newKey = !isNaN(Number(key))\n ? `${OBJECT_NUMERIC_KEY_PREFIX}${key}`\n : key;\n result[newKey] =\n _.isObject(value) && !_.isDate(value)\n ? denormalizeObjectKeys(value)\n : value;\n },\n {} as Record<string, any>,\n );\n } else {\n return obj;\n }\n}\n\nexport function normalizeObjectKeys(\n obj: Record<string, any>,\n): Record<string, any> {\n if (_.isObject(obj) && !_.isArray(obj)) {\n return _.transform(\n obj,\n (result, value, key) => {\n const newKey = `${key}`.replace(OBJECT_NUMERIC_KEY_PREFIX, \"\");\n result[newKey] =\n _.isObject(value) && !_.isDate(value)\n ? normalizeObjectKeys(value)\n : value;\n },\n {} as Record<string, any>,\n );\n } else {\n return obj;\n }\n}\n","import fs from \"fs/promises\";\nimport path from \"path\";\nimport { ILoader } from \"./_types\";\nimport { createLoader } from \"./_utils\";\n\nexport default function createTextFileLoader(pathPattern: string): ILoader<void, string> {\n return createLoader({\n async pull(locale) {\n const result = await readFileForLocale(pathPattern, locale);\n const trimmedResult = result.trim();\n return trimmedResult;\n },\n async push(locale, data, _, originalLocale) {\n const draftPath = pathPattern.replaceAll(\"[locale]\", locale);\n const finalPath = path.resolve(draftPath);\n\n // Create parent directories if needed\n const dirPath = path.dirname(finalPath);\n await fs.mkdir(dirPath, { recursive: true });\n\n const trimmedPayload = data.trim();\n\n // Add trailing new line if needed\n const trailingNewLine = await getTrailingNewLine(pathPattern, locale, originalLocale);\n let finalPayload = trimmedPayload + trailingNewLine;\n\n await fs.writeFile(finalPath, finalPayload, {\n encoding: \"utf-8\",\n flag: \"w\",\n });\n },\n });\n}\n\nasync function readFileForLocale(pathPattern: string, locale: string) {\n const draftPath = pathPattern.replaceAll(\"[locale]\", locale);\n const finalPath = path.resolve(draftPath);\n const exists = await fs\n .access(finalPath)\n .then(() => true)\n .catch(() => false);\n if (!exists) {\n return \"\";\n }\n return fs.readFile(finalPath, \"utf-8\");\n}\n\nasync function getTrailingNewLine(pathPattern: string, locale: string, originalLocale: string) {\n let templateData = await readFileForLocale(pathPattern, locale);\n if (!templateData) {\n templateData = await readFileForLocale(pathPattern, originalLocale);\n }\n\n if (templateData?.match(/[\\r\\n]$/)) {\n const ending = templateData?.includes(\"\\r\\n\") ? \"\\r\\n\" : templateData?.includes(\"\\r\") ? \"\\r\" : \"\\n\";\n return ending;\n }\n return \"\";\n}\n","import YAML, { ToStringOptions } from \"yaml\";\nimport { ILoader } from \"./_types\";\nimport { createLoader } from \"./_utils\";\n\nexport default function createYamlLoader(): ILoader<string, Record<string, any>> {\n return createLoader({\n async pull(locale, input) {\n return YAML.parse(input) || {};\n },\n async push(locale, payload, originalInput) {\n return YAML.stringify(payload, {\n lineWidth: -1,\n defaultKeyType: getKeyType(originalInput),\n defaultStringType: getStringType(originalInput),\n });\n },\n });\n}\n\n// check if the yaml keys are using double quotes or single quotes\nfunction getKeyType(yamlString: string | null): ToStringOptions[\"defaultKeyType\"] {\n if (yamlString) {\n const lines = yamlString.split(\"\\n\");\n const hasDoubleQuotes = lines.find((line) => {\n return line.trim().startsWith('\"') && line.trim().match('\":');\n });\n if (hasDoubleQuotes) {\n return \"QUOTE_DOUBLE\";\n }\n }\n return \"PLAIN\";\n}\n\n// check if the yaml string values are using double quotes or single quotes\nfunction getStringType(yamlString: string | null): ToStringOptions[\"defaultStringType\"] {\n if (yamlString) {\n const lines = yamlString.split(\"\\n\");\n const hasDoubleQuotes = lines.find((line) => {\n const trimmedLine = line.trim();\n return (\n (trimmedLine.startsWith('\"') || trimmedLine.match(/:\\s*\"/)) &&\n (trimmedLine.endsWith('\"') || trimmedLine.endsWith('\",'))\n );\n });\n if (hasDoubleQuotes) {\n return \"QUOTE_DOUBLE\";\n }\n }\n return \"PLAIN\";\n}\n","import { ILoader } from \"./_types\";\nimport { createLoader } from \"./_utils\";\n\nexport default function createRootKeyLoader(replaceAll = false): ILoader<Record<string, any>, Record<string, any>> {\n return createLoader({\n async pull(locale, input) {\n const result = input[locale];\n return result;\n },\n async push(locale, data, originalInput) {\n const result = {\n ...(replaceAll ? {} : originalInput),\n [locale]: data,\n };\n return result;\n },\n });\n}\n","import _ from \"lodash\";\nimport { ILoader } from \"./_types\";\nimport { createLoader } from \"./_utils\";\n\nexport default function createFlutterLoader(): ILoader<Record<string, any>, Record<string, any>> {\n return createLoader({\n async pull(locale, input) {\n // skip all metadata (keys starting with @)\n const result = _.pickBy(input, (value, key) => !key.startsWith(\"@\"));\n return result;\n },\n async push(locale, data, originalInput) {\n const result = _.merge({}, originalInput, { \"@@locale\": locale }, data);\n return result;\n },\n });\n}\n","import { parseStringPromise, Builder } from \"xml2js\";\nimport { ILoader } from \"./_types\";\nimport { CLIError } from \"../utils/errors\";\nimport { createLoader } from \"./_utils\";\n\nexport default function createAndroidLoader(): ILoader<\n string,\n Record<string, any>\n> {\n return createLoader({\n async pull(locale, input) {\n try {\n if (!input) {\n return {};\n }\n\n const result: Record<string, any> = {};\n\n const stringRegex =\n /<string\\s+name=\"([^\"]+)\"(?:\\s+translatable=\"([^\"]+)\")?[^>]*>([\\s\\S]*?)<\\/string>/gi;\n let stringMatch;\n while ((stringMatch = stringRegex.exec(input)) !== null) {\n const name = stringMatch[1];\n const translatable = stringMatch[2];\n let value = stringMatch[3];\n\n if (translatable === \"false\") {\n continue;\n }\n\n const cdataRegex = /<!\\[CDATA\\[([\\s\\S]*?)\\]\\]>/g;\n value = value.replace(cdataRegex, (match, content) => content);\n\n value = value\n .replace(/&lt;/g, \"<\")\n .replace(/&gt;/g, \">\")\n .replace(/&amp;/g, \"&\")\n .replace(/&quot;/g, '\"')\n .replace(/&apos;/g, \"'\")\n .replace(/\\\\'/g, \"'\");\n\n result[name] = value;\n }\n\n const parsed = await parseStringPromise(input, {\n explicitArray: true,\n mergeAttrs: false,\n normalize: true,\n normalizeTags: false,\n trim: true,\n attrkey: \"$\",\n charkey: \"_\",\n });\n\n if (!parsed || !parsed.resources) {\n return result;\n }\n\n if (parsed.resources[\"string-array\"]) {\n parsed.resources[\"string-array\"].forEach((arrayItem: any) => {\n if (arrayItem.$ && arrayItem.$.translatable === \"false\") {\n return;\n }\n\n const name = arrayItem.$.name;\n const items: string[] = [];\n\n if (arrayItem.item) {\n arrayItem.item.forEach((item: any) => {\n let itemValue = \"\";\n if (typeof item === \"string\") {\n itemValue = item;\n } else if (item._) {\n itemValue = item._;\n } else if (item._ === \"\") {\n itemValue = \"\";\n }\n items.push(\n itemValue === \"\" || /^\\s+$/.test(itemValue)\n ? itemValue\n : itemValue.trim(),\n );\n });\n }\n\n result[name] = items;\n });\n }\n\n if (parsed.resources.plurals) {\n parsed.resources.plurals.forEach((pluralItem: any) => {\n if (pluralItem.$ && pluralItem.$.translatable === \"false\") {\n return;\n }\n\n const name = pluralItem.$.name;\n const pluralObj: Record<string, string> = {};\n\n if (pluralItem.item) {\n pluralItem.item.forEach((item: any) => {\n if (item.$ && item.$.quantity) {\n let value = \"\";\n if (item._) {\n value = item._;\n } else if (item._ === \"\") {\n value = \"\";\n }\n pluralObj[item.$.quantity] =\n value === \"\" || /^\\s+$/.test(value) ? value : value.trim();\n }\n });\n }\n\n result[name] = pluralObj;\n });\n }\n\n if (parsed.resources.bool) {\n parsed.resources.bool.forEach((boolItem: any) => {\n if (boolItem.$ && boolItem.$.translatable === \"false\") {\n return;\n }\n\n const name = boolItem.$.name;\n result[name] = boolItem._ === \"true\";\n });\n }\n\n if (parsed.resources.integer) {\n parsed.resources.integer.forEach((intItem: any) => {\n if (intItem.$ && intItem.$.translatable === \"false\") {\n return;\n }\n\n const name = intItem.$.name;\n result[name] = parseInt(intItem._ || \"0\", 10);\n });\n }\n\n return result;\n } catch (error) {\n console.error(\"Error parsing Android resource file:\", error);\n throw new CLIError({\n message: \"Failed to parse Android resource file\",\n docUrl: \"androidResouceError\",\n });\n }\n },\n async push(locale, payload) {\n try {\n const xmlObj: AndroidResources = {\n resources: {\n string: [],\n \"string-array\": [],\n plurals: [],\n bool: [],\n integer: [],\n },\n };\n\n const processHtmlContent = (str: string): { _: string } => {\n if (typeof str !== \"string\") return { _: String(str) };\n\n const processedStr = str.replace(/(?<!\\\\)'/g, \"\\\\'\");\n\n return { _: processedStr };\n };\n\n for (const [key, value] of Object.entries(payload)) {\n if (typeof value === \"string\") {\n xmlObj.resources.string.push({\n $: { name: key },\n ...processHtmlContent(value),\n });\n } else if (Array.isArray(value)) {\n xmlObj.resources[\"string-array\"].push({\n $: { name: key },\n item: value.map((item) => processHtmlContent(item)),\n });\n } else if (typeof value === \"object\") {\n xmlObj.resources.plurals.push({\n $: { name: key },\n item: Object.entries(value).map(([quantity, text]) => ({\n $: { quantity },\n ...processHtmlContent(text as string),\n })),\n });\n } else if (typeof value === \"boolean\") {\n xmlObj.resources.bool.push({\n $: { name: key },\n _: value.toString(),\n });\n } else if (typeof value === \"number\") {\n xmlObj.resources.integer.push({\n $: { name: key },\n _: value.toString(),\n });\n }\n }\n\n const builder = new Builder({\n headless: true,\n renderOpts: {\n pretty: true,\n indent: \" \",\n newline: \"\\n\",\n },\n });\n\n return builder.buildObject(xmlObj);\n } catch (error) {\n console.error(\"Error generating Android resource file:\", error);\n throw new CLIError({\n message: \"Failed to generate Android resource file\",\n docUrl: \"androidResouceError\",\n });\n }\n },\n });\n}\n\ninterface AndroidResource {\n $: {\n name: string;\n translatable?: string;\n [key: string]: string | undefined;\n };\n _?: string;\n item?: Array<{\n $?: { quantity?: string };\n _?: string;\n }>;\n}\n\ninterface AndroidResources {\n resources: {\n string: AndroidResource[];\n \"string-array\": AndroidResource[];\n plurals: AndroidResource[];\n bool: AndroidResource[];\n integer: AndroidResource[];\n };\n}\n","import { parse } from \"csv-parse/sync\";\nimport { stringify } from \"csv-stringify/sync\";\nimport _ from \"lodash\";\nimport { ILoader } from \"./_types\";\nimport { composeLoaders, createLoader } from \"./_utils\";\n\n/**\n * Tries to detect the key column name from a csvString.\n * \n * Current logic: get first cell > 'KEY' fallback if empty\n */\nexport function detectKeyColumnName(csvString: string) {\n const row: string[] | undefined = parse(csvString)[0];\n const firstColumn = row?.[0]?.trim();\n return firstColumn || \"KEY\";\n}\n\nexport default function createCsvLoader() {\n return composeLoaders(_createCsvLoader(), createPullOutputCleaner())\n}\n\ntype InternalTransferState = {\n keyColumnName: string;\n inputParsed: Record<string, any>[];\n items: Record<string, string>;\n}\n\nfunction _createCsvLoader(): ILoader<\n string,\n InternalTransferState\n> {\n return createLoader({\n async pull(locale, input) {\n const keyColumnName = detectKeyColumnName(input.split('\\n').find(l => l.length)!);\n const inputParsed = parse(input, {\n columns: true,\n skip_empty_lines: true,\n relax_column_count_less: true,\n }) as Record<string, any>[];\n\n const items: Record<string, string> = {};\n\n // Assign keys that already have translation so AI doesn't re-generate it.\n _.forEach(inputParsed, (row) => {\n const key = row[keyColumnName];\n if (key && row[locale] && row[locale].trim() !== \"\") {\n items[key] = row[locale];\n }\n });\n\n return {\n inputParsed,\n keyColumnName,\n items\n };\n },\n async push(locale, { inputParsed, keyColumnName, items }) {\n const columns = inputParsed.length > 0 ? Object.keys(inputParsed[0]) : [keyColumnName, locale];\n if (!columns.includes(locale)) {\n columns.push(locale);\n }\n\n const updatedRows = inputParsed.map((row) => ({\n ...row,\n [locale]: items[row[keyColumnName]] || row[locale] || \"\",\n }));\n const existingKeys = new Set(inputParsed.map((row) => row[keyColumnName]));\n\n Object.entries(items).forEach(([key, value]) => {\n if (!existingKeys.has(key)) {\n const newRow: Record<string, string> = {\n [keyColumnName]: key,\n ...Object.fromEntries(columns.map((column) => [column, \"\"])),\n };\n newRow[locale] = value;\n updatedRows.push(newRow);\n }\n });\n\n return stringify(updatedRows, {\n header: true,\n columns,\n });\n },\n });\n}\n\n/**\n * This is a simple extra loader that is used to clean the data written to lockfile\n */\nfunction createPullOutputCleaner(): ILoader<\n InternalTransferState,\n Record<string, string>\n> {\n return createLoader({\n async pull(_locale, input) {\n return input.items;\n },\n async push(_locale, data, _oI, _oL, pullInput) {\n return { ...pullInput!, items: data };\n },\n });\n}\n","import { JSDOM } from \"jsdom\";\nimport { ILoader } from \"./_types\";\nimport { createLoader } from \"./_utils\";\n\nfunction normalizeTextContent(text: string, isStandalone: boolean): string {\n // Remove any leading/trailing whitespace for initial comparison\n const trimmed = text.trim();\n if (!trimmed) return \"\";\n\n // For all text nodes, just return the trimmed content\n return trimmed;\n}\n\nexport default function createHtmlLoader(): ILoader<string, Record<string, any>> {\n const LOCALIZABLE_ATTRIBUTES: Record<string, string[]> = {\n meta: [\"content\"],\n img: [\"alt\"],\n input: [\"placeholder\"],\n a: [\"title\"],\n };\n const UNLOCALIZABLE_TAGS = [\"script\", \"style\"];\n\n return createLoader({\n async pull(locale, input) {\n const result: Record<string, any> = {};\n const dom = new JSDOM(input);\n const document = dom.window.document;\n\n const getPath = (node: Node, attribute?: string): string => {\n const indices: number[] = [];\n let current = node as ChildNode;\n let rootParent = \"\";\n\n while (current) {\n const parent = current.parentElement as Element;\n if (!parent) break;\n\n if (parent === document.documentElement) {\n rootParent = current.nodeName.toLowerCase();\n break;\n }\n\n // Get index among significant siblings (non-empty text nodes and elements)\n const siblings = Array.from(parent.childNodes).filter(\n (n) => n.nodeType === 1 || (n.nodeType === 3 && n.textContent?.trim()),\n );\n const index = siblings.indexOf(current);\n if (index !== -1) {\n indices.unshift(index);\n }\n current = parent;\n }\n\n const basePath = rootParent ? `${rootParent}/${indices.join(\"/\")}` : indices.join(\"/\");\n return attribute ? `${basePath}#${attribute}` : basePath;\n };\n\n const processNode = (node: Node) => {\n // Check if node is inside an unlocalizable tag\n let parent = node.parentElement;\n while (parent) {\n if (UNLOCALIZABLE_TAGS.includes(parent.tagName.toLowerCase())) {\n return; // Skip processing this node and its children\n }\n parent = parent.parentElement;\n }\n\n if (node.nodeType === 3) {\n // Text node\n const text = node.textContent || \"\";\n const normalizedText = normalizeTextContent(text, true);\n if (normalizedText) {\n result[getPath(node)] = normalizedText;\n }\n } else if (node.nodeType === 1) {\n // Element node\n const element = node as Element;\n\n // Handle localizable attributes\n const tagName = element.tagName.toLowerCase();\n const attributes = LOCALIZABLE_ATTRIBUTES[tagName] || [];\n attributes.forEach((attr) => {\n const value = element.getAttribute(attr);\n if (value) {\n result[getPath(element, attr)] = value;\n }\n });\n\n // Process all child nodes\n Array.from(element.childNodes)\n .filter((n) => n.nodeType === 1 || (n.nodeType === 3 && n.textContent?.trim()))\n .forEach(processNode);\n }\n };\n\n // Process head and body\n Array.from(document.head.childNodes)\n .filter((n) => n.nodeType === 1 || (n.nodeType === 3 && n.textContent?.trim()))\n .forEach(processNode);\n Array.from(document.body.childNodes)\n .filter((n) => n.nodeType === 1 || (n.nodeType === 3 && n.textContent?.trim()))\n .forEach(processNode);\n\n return result;\n },\n\n async push(locale, data, originalInput) {\n const dom = new JSDOM(originalInput ?? \"<!DOCTYPE html><html><head></head><body></body></html>\");\n const document = dom.window.document;\n\n // Set the HTML lang attribute to the current locale\n const htmlElement = document.documentElement;\n htmlElement.setAttribute(\"lang\", locale);\n\n // Sort paths to ensure proper order of creation\n const paths = Object.keys(data).sort((a, b) => {\n const aDepth = a.split(\"/\").length;\n const bDepth = b.split(\"/\").length;\n return aDepth - bDepth;\n });\n\n paths.forEach((path) => {\n const value = data[path];\n const [nodePath, attribute] = path.split(\"#\");\n const [rootTag, ...indices] = nodePath.split(\"/\");\n\n let parent: Element = rootTag === \"head\" ? document.head : document.body;\n let current: Node | null = parent;\n\n // Navigate to the target node\n for (let i = 0; i < indices.length; i++) {\n const index = parseInt(indices[i]);\n const siblings = Array.from(parent.childNodes).filter(\n (n) => n.nodeType === 1 || (n.nodeType === 3 && n.textContent?.trim()),\n );\n\n if (index >= siblings.length) {\n // Create missing nodes\n if (i === indices.length - 1) {\n // Last index - create text node\n const textNode = document.createTextNode(\"\");\n parent.appendChild(textNode);\n current = textNode;\n } else {\n // Create intermediate element\n const element = document.createElement(\"div\");\n parent.appendChild(element);\n current = element;\n parent = element;\n }\n } else {\n current = siblings[index];\n if (current.nodeType === 1) {\n parent = current as Element;\n }\n }\n }\n\n // Set content\n if (current) {\n if (attribute) {\n (current as Element).setAttribute(attribute, value);\n } else {\n current.textContent = value;\n }\n }\n });\n\n // Preserve formatting by using serialize() with pretty print\n return dom.serialize();\n },\n });\n}\n","import matter from \"gray-matter\";\nimport YAML from \"yaml\";\nimport { ILoader } from \"./_types\";\nimport { createLoader } from \"./_utils\";\n\nconst SECTION_REGEX = /^(#{1,6}\\s.*$|[-=*]{3,}$|!\\[.*\\]\\(.*\\)$|\\[.*\\]\\(.*\\)$)/gm;\nconst MD_SECTION_PREFIX = \"md-section-\";\nconst FM_ATTR_PREFIX = \"fm-attr-\";\n\nconst yamlEngine = {\n parse: (str: string) => YAML.parse(str),\n stringify: (obj: any) => YAML.stringify(obj, { defaultStringType: \"PLAIN\" }),\n};\n\nexport default function createMarkdownLoader(): ILoader<string, Record<string, string>> {\n return createLoader({\n async pull(locale, input) {\n const { data: frontmatter, content } = matter(input, {\n engines: {\n yaml: yamlEngine,\n },\n });\n\n const sections = content\n .split(SECTION_REGEX)\n .map((section) => section?.trim() ?? \"\")\n .filter(Boolean);\n\n return {\n ...Object.fromEntries(\n sections\n .map((section, index) => [`${MD_SECTION_PREFIX}${index}`, section])\n .filter(([, section]) => Boolean(section)),\n ),\n ...Object.fromEntries(Object.entries(frontmatter).map(([key, value]) => [`${FM_ATTR_PREFIX}${key}`, value])),\n };\n },\n async push(locale, data: Record<string, string>) {\n const frontmatter = Object.fromEntries(\n Object.entries(data)\n .filter(([key]) => key.startsWith(FM_ATTR_PREFIX))\n .map(([key, value]) => [key.replace(FM_ATTR_PREFIX, \"\"), value]),\n );\n\n let content = Object.entries(data)\n .filter(([key]) => key.startsWith(MD_SECTION_PREFIX))\n .sort(([a], [b]) => Number(a.split(\"-\").pop()) - Number(b.split(\"-\").pop()))\n .map(([, value]) => value?.trim() ?? \"\")\n .filter(Boolean)\n .join(\"\\n\\n\");\n\n if (Object.keys(frontmatter).length > 0) {\n content = `\\n${content}`;\n }\n\n return matter.stringify(content, frontmatter, {\n engines: {\n yaml: yamlEngine,\n },\n });\n },\n });\n}\n","import { ILoader } from \"./_types\";\nimport { createLoader } from \"./_utils\";\n\nexport default function createPropertiesLoader(): ILoader<string, Record<string, any>> {\n return createLoader({\n async pull(locale, text) {\n const result: Record<string, string> = {};\n const lines = text.split(\"\\n\");\n\n for (const line of lines) {\n const trimmed = line.trim();\n\n // Skip empty lines and comments\n if (isSkippableLine(trimmed)) {\n continue;\n }\n\n const { key, value } = parsePropertyLine(trimmed);\n if (key) {\n result[key] = value;\n }\n }\n\n return result;\n },\n async push(locale, payload) {\n const result = Object.entries(payload)\n .filter(([_, value]) => value != null)\n .map(([key, value]) => `${key}=${value}`)\n .join(\"\\n\");\n\n return result;\n },\n });\n}\n\nfunction isSkippableLine(line: string): boolean {\n return !line || line.startsWith(\"#\");\n}\n\nfunction parsePropertyLine(line: string): { key: string; value: string } {\n const [key, ...valueParts] = line.split(\"=\");\n return {\n key: key?.trim() || \"\",\n value: valueParts.join(\"=\").trim(),\n };\n}\n","import { ILoader } from \"./_types\";\nimport { createLoader } from \"./_utils\";\n\nexport default function createXcodeStringsLoader(): ILoader<string, Record<string, any>> {\n return createLoader({\n async pull(locale, input) {\n const lines = input.split(\"\\n\");\n const result: Record<string, string> = {};\n\n for (const line of lines) {\n const trimmedLine = line.trim();\n if (trimmedLine && !trimmedLine.startsWith(\"//\")) {\n const match = trimmedLine.match(/^\"(.+)\"\\s*=\\s*\"(.+)\";$/);\n if (match) {\n const [, key, value] = match;\n result[key] = unescapeXcodeString(value);\n }\n }\n }\n\n return result;\n },\n async push(locale, payload) {\n const lines = Object.entries(payload).map(([key, value]) => {\n const escapedValue = escapeXcodeString(value);\n return `\"${key}\" = \"${escapedValue}\";`;\n });\n return lines.join(\"\\n\");\n },\n });\n}\n\nfunction unescapeXcodeString(str: string): string {\n return str.replace(/\\\\\"/g, '\"').replace(/\\\\n/g, \"\\n\").replace(/\\\\\\\\/g, \"\\\\\");\n}\n\nfunction escapeXcodeString(str: string): string {\n return str.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"').replace(/\\n/g, \"\\\\n\");\n}\n","import plist from \"plist\";\nimport { ILoader } from \"./_types\";\nimport { createLoader } from \"./_utils\";\nimport { CLIError } from \"../utils/errors\";\n\nconst emptyData = [\n '<?xml version=\"1.0\" encoding=\"UTF-8\"?>',\n '<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">',\n '<plist version=\"1.0\">',\n \"<dict/>\",\n \"</plist>\",\n].join(\"\\n\");\n\nexport default function createXcodeStringsdictLoader(): ILoader<string, Record<string, any>> {\n return createLoader({\n async pull(locale, input) {\n try {\n const parsed = plist.parse(input || emptyData);\n if (typeof parsed !== \"object\" || parsed === null) {\n throw new CLIError({\n message: \"Invalid .stringsdict format\",\n docUrl: \"invalidStringDict\",\n });\n }\n return parsed as Record<string, any>;\n } catch (error: any) {\n throw new CLIError({\n message: `Invalid .stringsdict format: ${error.message}`,\n docUrl: \"invalidStringDict\",\n });\n }\n },\n async push(locale, payload) {\n const plistContent = plist.build(payload);\n return plistContent;\n },\n });\n}\n","import { ILoader } from \"./_types\";\nimport { createLoader } from \"./_utils\";\nimport _ from \"lodash\";\n\nexport default function createXcodeXcstringsLoader(\n defaultLocale: string,\n): ILoader<Record<string, any>, Record<string, any>> {\n return createLoader({\n async pull(locale, input, initCtx) {\n const resultData: Record<string, any> = {};\n const isSourceLanguage = locale === defaultLocale;\n\n for (const [translationKey, _translationEntity] of Object.entries((input as any).strings)) {\n const rootTranslationEntity = _translationEntity as any;\n\n if (rootTranslationEntity.shouldTranslate === false) {\n continue;\n }\n\n const langTranslationEntity = rootTranslationEntity?.localizations?.[locale];\n\n if (langTranslationEntity) {\n if (\"stringUnit\" in langTranslationEntity) {\n resultData[translationKey] = langTranslationEntity.stringUnit.value;\n } else if (\"variations\" in langTranslationEntity) {\n if (\"plural\" in langTranslationEntity.variations) {\n resultData[translationKey] = {};\n const pluralForms = langTranslationEntity.variations.plural;\n for (const form in pluralForms) {\n if (pluralForms[form]?.stringUnit?.value) {\n resultData[translationKey][form] = pluralForms[form].stringUnit.value;\n }\n }\n }\n }\n } else if (isSourceLanguage) {\n resultData[translationKey] = translationKey;\n }\n }\n\n return resultData;\n },\n async push(locale, payload, originalInput) {\n const langDataToMerge: any = {};\n langDataToMerge.strings = {};\n\n const input = _.cloneDeep(originalInput) || { sourceLanguage: locale, strings: {} };\n\n for (const [key, value] of Object.entries(payload)) {\n if (value === null || value === undefined) {\n continue;\n }\n\n const hasDoNotTranslateFlag =\n originalInput &&\n (originalInput as any).strings &&\n (originalInput as any).strings[key] &&\n (originalInput as any).strings[key].shouldTranslate === false;\n\n if (typeof value === \"string\") {\n langDataToMerge.strings[key] = {\n extractionState: originalInput?.strings?.[key]?.extractionState,\n localizations: {\n [locale]: {\n stringUnit: {\n state: \"translated\",\n value,\n },\n },\n },\n };\n\n if (hasDoNotTranslateFlag) {\n langDataToMerge.strings[key].shouldTranslate = false;\n }\n } else {\n const updatedVariations: any = {};\n\n for (const form in value) {\n updatedVariations[form] = {\n stringUnit: {\n state: \"translated\",\n value: value[form],\n },\n };\n }\n\n langDataToMerge.strings[key] = {\n extractionState: \"manual\",\n localizations: {\n [locale]: {\n variations: {\n plural: updatedVariations,\n },\n },\n },\n };\n\n if (hasDoNotTranslateFlag) {\n langDataToMerge.strings[key].shouldTranslate = false;\n }\n }\n }\n\n const result = _.merge({}, originalInput, langDataToMerge);\n return result;\n },\n });\n}\n","import path from \"path\";\nimport prettier, { Options } from \"prettier\";\nimport { ILoader } from \"./_types\";\nimport { createLoader } from \"./_utils\";\n\nexport type PrettierLoaderOptions = {\n parser: Options[\"parser\"];\n bucketPathPattern: string;\n stage?: \"pull\" | \"push\" | \"both\";\n alwaysFormat?: boolean;\n};\n\nexport default function createPrettierLoader(\n options: PrettierLoaderOptions,\n): ILoader<string, string> {\n const stage = options.stage || \"both\";\n return createLoader({\n async pull(locale, data) {\n if (![\"pull\", \"both\"].includes(stage)) {\n return data;\n }\n\n const draftPath = options.bucketPathPattern.replaceAll(\n \"[locale]\",\n locale,\n );\n const finalPath = path.resolve(draftPath);\n\n return await formatDataWithPrettier(data, finalPath, options);\n },\n async push(locale, data) {\n if (![\"push\", \"both\"].includes(stage)) {\n return data;\n }\n\n const draftPath = options.bucketPathPattern.replaceAll(\n \"[locale]\",\n locale,\n );\n const finalPath = path.resolve(draftPath);\n\n return await formatDataWithPrettier(data, finalPath, options);\n },\n });\n}\n\nasync function loadPrettierConfig(filePath: string) {\n try {\n const config = await prettier.resolveConfig(filePath);\n return config;\n } catch (error) {\n return {};\n }\n}\n\nasync function formatDataWithPrettier(\n data: string,\n filePath: string,\n options: PrettierLoaderOptions,\n): Promise<string> {\n const prettierConfig = await loadPrettierConfig(filePath);\n\n // Skip formatting if no config found and alwaysFormat is not enabled\n if (!prettierConfig && !options.alwaysFormat) {\n return data;\n }\n\n const config: Options = {\n ...(prettierConfig || { printWidth: 2500, bracketSameLine: false }),\n parser: options.parser,\n // For HTML parser, preserve comments and quotes\n ...(options.parser === \"html\"\n ? {\n htmlWhitespaceSensitivity: \"ignore\",\n singleQuote: false,\n embeddedLanguageFormatting: \"off\",\n }\n : {}),\n };\n\n try {\n // format with prettier\n return await prettier.format(data, config);\n } catch (error) {\n if (\n error instanceof Error &&\n error.message.startsWith(\"Cannot find package\")\n ) {\n console.log();\n console.log(\n \"⚠️ Prettier plugins are not installed. Formatting without plugins.\",\n );\n console.log(\n \"⚠️ To use prettier plugins install project dependencies before running Lingo.dev.\",\n );\n\n config.plugins = [];\n\n // clear file system structure cache\n await prettier.clearConfigCache();\n\n // format again without plugins\n return await prettier.format(data, config);\n }\n\n throw error;\n }\n}\n","import _ from \"lodash\";\nimport _isUrl from \"is-url\";\nimport { isValid, parseISO } from \"date-fns\";\n\nimport { ILoader } from \"./_types\";\nimport { createLoader } from \"./_utils\";\n\nexport default function createUnlocalizableLoader(\n isCacheRestore: boolean = false,\n returnUnlocalizedKeys: boolean = false,\n): ILoader<Record<string, any>, Record<string, any>> {\n const rules = {\n isEmpty: (v: any) => _.isEmpty(v),\n isNumber: (v: any) => typeof v === \"number\" || /^[0-9]+$/.test(v),\n isBoolean: (v: any) => _.isBoolean(v),\n isIsoDate: (v: any) => _.isString(v) && _isIsoDate(v),\n isSystemId: (v: any) => _.isString(v) && _isSystemId(v),\n isUrl: (v: any) => _.isString(v) && _isUrl(v),\n };\n return createLoader({\n async pull(locale, input) {\n const passthroughKeys = Object.entries(input)\n .filter(([key, value]) => {\n // Check each rule individually for better debugging\n for (const [ruleName, rule] of Object.entries(rules)) {\n if (rule(value)) {\n return true;\n }\n }\n return false;\n })\n .map(([key, _]) => key);\n\n const result = _.omitBy(input, (_, key) => passthroughKeys.includes(key));\n\n if (returnUnlocalizedKeys) {\n result.unlocalizable = _.omitBy(input, (_, key) => !passthroughKeys.includes(key));\n }\n\n return result;\n },\n async push(locale, data, originalInput) {\n if (isCacheRestore) {\n return _.merge({}, data);\n }\n\n const result = _.merge({}, originalInput, data);\n return result;\n },\n });\n}\n\nfunction _isSystemId(v: string) {\n return /^(?=.*[A-Z])(?=.*[a-z])(?=.*\\d)[A-Za-z0-9]{22}$/.test(v);\n}\n\nfunction _isIsoDate(v: string) {\n return isValid(parseISO(v));\n}\n","import _ from \"lodash\";\nimport gettextParser from \"gettext-parser\";\nimport { GetTextTranslations } from \"gettext-parser\";\nimport { ILoader } from \"../_types\";\nimport { composeLoaders, createLoader } from \"../_utils\";\n\nexport type PoTranslationEntry = GetTextTranslations[\"translations\"][\"\"];\nexport type PoTranslationValue = { singular: string; plural: string | null };\n\nexport type PoLoaderParams = {\n multiline: boolean;\n};\n\nexport default function createPoLoader(\n params: PoLoaderParams = { multiline: false },\n): ILoader<string, Record<string, PoTranslationValue>> {\n return composeLoaders(createPoDataLoader(params), createPoContentLoader());\n}\n\nexport function createPoDataLoader(\n params: PoLoaderParams,\n): ILoader<string, PoTranslationEntry> {\n return createLoader({\n async pull(locale, input) {\n const parsedPo = gettextParser.po.parse(input);\n const result: PoTranslationEntry = {};\n const sections = input.split(\"\\n\\n\").filter(Boolean);\n for (const section of sections) {\n const sectionPo = gettextParser.po.parse(section);\n // skip section with no translations (some sections might have only obsolete entries)\n if (Object.keys(sectionPo.translations).length === 0) {\n continue;\n }\n\n const contextKey = _.keys(sectionPo.translations)[0];\n const entries = sectionPo.translations[contextKey];\n Object.entries(entries).forEach(([msgid, entry]) => {\n if (msgid && entry.msgid) {\n const context = entry.msgctxt || \"\";\n const fullEntry = parsedPo.translations[context]?.[msgid];\n if (fullEntry) {\n result[msgid] = fullEntry;\n }\n }\n });\n }\n return result;\n },\n\n async push(locale, data, originalInput, originalLocale, pullInput) {\n // Parse each section to maintain structure\n const currentSections = pullInput?.split(\"\\n\\n\").filter(Boolean) || [];\n const originalSections =\n originalInput?.split(\"\\n\\n\").filter(Boolean) || [];\n const result = originalSections\n .map((section) => {\n const sectionPo = gettextParser.po.parse(section);\n // skip section with no translations (some sections might have only obsolete entries)\n if (Object.keys(sectionPo.translations).length === 0) {\n return null;\n }\n\n const contextKey = _.keys(sectionPo.translations)[0];\n const entries = sectionPo.translations[contextKey];\n const msgid = Object.keys(entries).find((key) => entries[key].msgid);\n if (!msgid) {\n // If the section is empty, try to find it in the current sections\n const currentSection = currentSections.find((cs) => {\n const csPo = gettextParser.po.parse(cs);\n const csContextKey = _.keys(csPo.translations)[0];\n const csEntries = csPo.translations[csContextKey];\n const csMsgid = Object.keys(csEntries).find(\n (key) => csEntries[key].msgid,\n );\n return csMsgid === msgid;\n });\n\n if (currentSection) {\n return currentSection;\n }\n return section;\n }\n if (data[msgid]) {\n const updatedPo = _.merge({}, sectionPo, {\n translations: {\n [contextKey]: {\n [msgid]: {\n msgstr: data[msgid].msgstr,\n },\n },\n },\n });\n const updatedSection = gettextParser.po\n .compile(updatedPo, { foldLength: params.multiline ? 76 : false })\n .toString()\n .replace(\n [`msgid \"\"`, `msgstr \"Content-Type: text/plain\\\\n\"`].join(\"\\n\"),\n \"\",\n )\n .trim();\n return preserveCommentOrder(updatedSection, section);\n }\n return section.trim();\n })\n .filter(Boolean)\n .join(\"\\n\\n\");\n return result;\n },\n });\n}\n\nexport function createPoContentLoader(): ILoader<\n PoTranslationEntry,\n Record<string, PoTranslationEntry>\n> {\n return createLoader({\n async pull(locale, input, initCtx, originalLocale) {\n const result = _.chain(input)\n .entries()\n .filter(([, entry]) => !!entry.msgid)\n .map(([, entry]) => {\n const singularFallback =\n locale === originalLocale ? entry.msgid : null;\n const pluralFallback =\n locale === originalLocale\n ? entry.msgid_plural || entry.msgid\n : null;\n const hasPlural = entry.msgstr.length > 1;\n return [\n entry.msgid,\n {\n singular: entry.msgstr[0] || singularFallback,\n plural: hasPlural\n ? ((entry.msgstr[1] || pluralFallback) as string | null)\n : null,\n },\n ];\n })\n .fromPairs()\n .value();\n return result;\n },\n async push(locale, data, originalInput) {\n const result = _.chain(originalInput)\n .entries()\n .map(([, entry]) => [\n entry.msgid,\n {\n ...entry,\n msgstr: [\n data[entry.msgid]?.singular,\n data[entry.msgid]?.plural || null,\n ].filter(Boolean),\n },\n ])\n .fromPairs()\n .value();\n\n return result;\n },\n });\n}\n\nfunction preserveCommentOrder(section: string, originalSection: string) {\n // Split both sections into lines\n const sectionLines = section.split(/\\r?\\n/);\n const originalLines = originalSection.split(/\\r?\\n/);\n\n // Helper: is a comment line\n const isComment = (line: string) => line.trim().startsWith(\"#\");\n\n // Extract comment lines and their indices\n const sectionComments = sectionLines.filter(isComment);\n const nonCommentLines = sectionLines.filter((line) => !isComment(line));\n\n // If there are no comments in the section, return the section as is\n if (sectionComments.length <= 1) {\n return section;\n }\n\n // Extract the order of comment lines from the original section\n const originalCommentOrder = originalLines.filter(isComment);\n\n // Build a map from comment content (trimmed) to the actual comment line in the new section\n const commentMap = new Map<string, string>();\n for (const line of sectionComments) {\n commentMap.set(line.trim(), line);\n }\n\n // Reorder comments to match the original order, using the new section's comment lines\n const reorderedComments: string[] = [];\n for (const orig of originalCommentOrder) {\n const trimmed = orig.trim();\n if (commentMap.has(trimmed)) {\n reorderedComments.push(commentMap.get(trimmed)!);\n commentMap.delete(trimmed);\n }\n }\n // Add any new comments from the new section that weren't in the original, preserving their order\n for (const line of sectionComments) {\n if (!originalCommentOrder.some((orig) => orig.trim() === line.trim())) {\n reorderedComments.push(line);\n }\n }\n\n // Reconstruct the section: comments (in order) + non-comment lines (in order)\n return [...reorderedComments, ...nonCommentLines]\n .join(\"\\n\")\n .replace(/\\n{3,}/g, \"\\n\\n\")\n .trim();\n}\n","import xliff from \"xliff\";\nimport { ILoader } from \"./_types\";\nimport { createLoader } from \"./_utils\";\n\nexport default function createXliffLoader(): ILoader<string, Record<string, any>> {\n return createLoader({\n async pull(locale, input) {\n const js = await xliff.xliff2js(input);\n return js || {};\n },\n async push(locale, payload) {\n const res = await xliff.js2xliff(payload);\n return res.trim();\n },\n });\n}\n","import { parseStringPromise, Builder } from \"xml2js\";\nimport { ILoader } from \"./_types\";\nimport { createLoader } from \"./_utils\";\n\nfunction normalizeXMLString(xmlString: string): string {\n return xmlString.replace(/\\s+/g, \" \").replace(/>\\s+</g, \"><\").replace(\"\\n\", \"\").trim();\n}\n\nexport default function createXmlLoader(): ILoader<string, Record<string, any>> {\n return createLoader({\n async pull(locale, input) {\n let result: Record<string, any> = {};\n\n try {\n const parsed = await parseStringPromise(input, {\n explicitArray: false,\n mergeAttrs: false,\n normalize: true,\n preserveChildrenOrder: true,\n normalizeTags: true,\n includeWhiteChars: true,\n trim: true,\n });\n result = parsed;\n } catch (error) {\n console.error(\"Failed to parse XML:\", error);\n result = {};\n }\n\n return result;\n },\n\n async push(locale, data) {\n try {\n const builder = new Builder({ headless: true });\n const xmlOutput = builder.buildObject(data);\n const expectedOutput = normalizeXMLString(xmlOutput);\n return expectedOutput;\n } catch (error) {\n console.error(\"Failed to build XML:\", error);\n return \"\";\n }\n },\n });\n}\n","import { ILoader } from \"./_types\";\nimport { createLoader } from \"./_utils\";\nimport srtParser from \"srt-parser-2\";\n\nexport default function createSrtLoader(): ILoader<string, Record<string, any>> {\n const parser = new srtParser();\n return createLoader({\n async pull(locale, input) {\n const parsed = parser.fromSrt(input) || [];\n const result: Record<string, string> = {};\n\n parsed.forEach((entry) => {\n const key = `${entry.id}#${entry.startTime}-${entry.endTime}`;\n result[key] = entry.text;\n });\n\n return result;\n },\n\n async push(locale, payload) {\n const output = Object.entries(payload).map(([key, text]) => {\n const [id, timeRange] = key.split(\"#\");\n const [startTime, endTime] = timeRange.split(\"-\");\n\n return {\n id: id,\n startTime: startTime,\n startSeconds: 0,\n endTime: endTime,\n endSeconds: 0,\n text: text,\n };\n });\n\n const srtContent = parser.toSrt(output).trim().replace(/\\r?\\n/g, \"\\n\");\n return srtContent;\n },\n });\n}\n","import fs from \"fs\";\nimport JSON5 from \"json5\";\nimport { composeLoaders } from \"../_utils\";\nimport { datoConfigSchema } from \"./_base\";\nimport createDatoFilterLoader from \"./filter\";\nimport createDatoApiLoader from \"./api\";\nimport createDatoExtractLoader from \"./extract\";\n\nexport default function createDatoLoader(configFilePath: string) {\n try {\n const configContent = fs.readFileSync(configFilePath, \"utf-8\");\n const datoConfig = datoConfigSchema.parse(JSON5.parse(configContent));\n\n return composeLoaders(\n createDatoApiLoader(datoConfig, (updatedConfig) =>\n fs.writeFileSync(configFilePath, JSON5.stringify(updatedConfig, null, 2)),\n ),\n createDatoFilterLoader(),\n createDatoExtractLoader(),\n );\n } catch (error: any) {\n throw new Error([`Failed to parse DatoCMS config file.`, `Error: ${error.message}`].join(\"\\n\\n\"));\n }\n}\n","import Z from \"zod\";\n\n// DatoCMS config\nexport const datoConfigSchema = Z.object({\n project: Z.string(),\n models: Z.record(\n Z.string(),\n Z.object({\n records: Z.array(Z.string()).optional(),\n fields: Z.array(Z.string()).optional(),\n }),\n ),\n});\n\nexport type DatoConfig = Z.infer<typeof datoConfigSchema>;\n\n// DatoCMS settings\nexport const datoSettingsSchema = Z.object({\n auth: Z.object({\n apiKey: Z.string(),\n }),\n});\n\nexport type DatoSettings = Z.infer<typeof datoSettingsSchema>;\n\nexport const DEFAULT_LOCALE = \"en\";\n\n//\n\nexport type DatoRecordPayload = {\n [field: string]: {\n [locale: string]: DatoValue;\n };\n};\n\nexport type DatoValue = DatoSimpleValue | DatoComplexValue;\nexport type DatoSimpleValue = DatoPrimitive | DastDocument;\nexport type DatoComplexValue = DatoBlock | DatoBlock[];\n\nexport type DatoPrimitive = null | string | boolean | number;\n\nexport type DastDocument = {\n schema: \"dast\";\n document: DastDocumentNode;\n};\n\nexport type DastDocumentNode = {\n type: \"root\" | \"span\" | \"paragraph\";\n value?: DatoPrimitive;\n children?: DastDocumentNode[];\n};\n\nexport type DatoBlock = {\n id?: string;\n type: \"item\";\n attributes: Record<string, DatoSimpleValue>;\n relationships: any;\n};\n","import _ from \"lodash\";\nimport fs from \"fs\";\nimport { ILoader } from \"../_types\";\nimport { createLoader } from \"../_utils\";\nimport { DatoApiLoaderOutput } from \"./api\";\n\nexport type DatoFilterLoaderOutput = {\n [modelId: string]: {\n [recordId: string]: {\n [fieldName: string]: any;\n };\n };\n};\n\nexport default function createDatoFilterLoader(): ILoader<DatoApiLoaderOutput, DatoFilterLoaderOutput> {\n return createLoader({\n async pull(locale, input) {\n const result: DatoFilterLoaderOutput = {};\n\n for (const [modelId, modelInfo] of _.entries(input)) {\n result[modelId] = {};\n for (const record of modelInfo.records) {\n result[modelId][record.id] = _.chain(modelInfo.fields)\n .mapKeys((field) => field.api_key)\n .mapValues((field) => _.get(record, [field.api_key, locale]))\n .value();\n }\n }\n\n return result;\n },\n async push(locale, data, originalInput, originalLocale) {\n const result = _.cloneDeep(originalInput || {});\n\n for (const [modelId, modelInfo] of _.entries(result)) {\n for (const record of modelInfo.records) {\n for (const [fieldId, fieldValue] of _.entries(record)) {\n const fieldInfo = modelInfo.fields.find((field) => field.api_key === fieldId);\n if (fieldInfo) {\n const sourceFieldValue = _.get(fieldValue, [originalLocale]);\n const targetFieldValue = _.get(data, [modelId, record.id, fieldId]);\n if (targetFieldValue) {\n _.set(record, [fieldId, locale], targetFieldValue);\n } else {\n _.set(record, [fieldId, locale], sourceFieldValue);\n }\n\n _.chain(fieldValue)\n .keys()\n .reject((loc) => loc === locale || loc === originalLocale)\n .filter((loc) => _.isEmpty(_.get(fieldValue, [loc])))\n .forEach((loc) => _.set(record, [fieldId, loc], sourceFieldValue))\n .value();\n }\n }\n }\n }\n\n return result;\n },\n });\n}\n","import _ from \"lodash\";\nimport { ILoader } from \"../_types\";\nimport { createLoader } from \"../_utils\";\nimport createDatoClient, { DatoClient } from \"./_utils\";\nimport { SimpleSchemaTypes } from \"@datocms/cma-client-node\";\nimport { DatoConfig } from \"./_base\";\nimport inquirer from \"inquirer\";\n\nexport type DatoApiLoaderOutput = {\n [modelId: string]: {\n fields: SimpleSchemaTypes.Field[];\n records: SimpleSchemaTypes.Item[];\n };\n};\n\nexport type DatoApiLoaderCtx = {\n models: {\n [modelId: string]: {\n fields: SimpleSchemaTypes.Field[];\n records: SimpleSchemaTypes.Item[];\n };\n };\n};\n\nexport default function createDatoApiLoader(\n config: DatoConfig,\n onConfigUpdate: (config: DatoConfig) => void,\n): ILoader<void, DatoApiLoaderOutput, DatoApiLoaderCtx> {\n const dato = createDatoClient({\n apiKey: process.env.DATO_API_TOKEN || \"\",\n projectId: config.project,\n });\n return createLoader({\n init: async () => {\n const result: DatoApiLoaderCtx = {\n models: {},\n };\n const updatedConfig = _.cloneDeep(config);\n console.log(`Initializing DatoCMS loader...`);\n\n const project = await dato.findProject();\n const modelChoices = await getModelChoices(dato, config);\n const selectedModels = await promptModelSelection(modelChoices);\n\n for (const modelId of selectedModels) {\n if (!updatedConfig.models[modelId]) {\n updatedConfig.models[modelId] = {\n fields: [],\n records: [],\n };\n }\n }\n\n for (const modelId of Object.keys(updatedConfig.models)) {\n if (!selectedModels.includes(modelId)) {\n delete updatedConfig.models[modelId];\n }\n }\n\n for (const modelId of _.keys(updatedConfig.models)) {\n const { modelName, fields } = await getModelFields(dato, modelId);\n\n if (fields.length > 0) {\n result.models[modelId] = { fields: [], records: [] };\n\n const fieldInfos = await getFieldDetails(dato, fields);\n const fieldChoices = createFieldChoices(fieldInfos);\n const selectedFields = await promptFieldSelection(modelName, fieldChoices);\n\n for (const fieldInfo of fieldInfos) {\n const isLocalized = await updateFieldLocalization(dato, fieldInfo, selectedFields.includes(fieldInfo.id));\n if (isLocalized) {\n result.models[modelId].fields.push(fieldInfo);\n updatedConfig.models[modelId].fields = _.uniq([\n ...(updatedConfig.models[modelId].fields || []),\n fieldInfo.api_key,\n ]);\n }\n }\n\n const records = await dato.findRecordsForModel(modelId);\n const recordChoices = createRecordChoices(records, config.models[modelId]?.records || [], project);\n const selectedRecords = await promptRecordSelection(modelName, recordChoices);\n\n result.models[modelId].records = records.filter((record) => selectedRecords.includes(record.id));\n updatedConfig.models[modelId].records = selectedRecords;\n }\n }\n console.log(`DatoCMS loader initialized.`);\n onConfigUpdate(updatedConfig);\n return result;\n },\n async pull(locale, input, initCtx) {\n const result: DatoApiLoaderOutput = {};\n\n for (const modelId of _.keys(initCtx?.models || {})) {\n let records = initCtx?.models[modelId].records || [];\n const recordIds = records.map((record) => record.id);\n records = await dato.findRecords(recordIds);\n console.log(`Fetched ${records.length} records for model ${modelId}`);\n\n if (records.length > 0) {\n result[modelId] = {\n fields: initCtx?.models?.[modelId]?.fields || [],\n records: records,\n };\n }\n }\n return result;\n },\n async push(locale, data, originalInput) {\n for (const modelId of _.keys(data)) {\n for (let i = 0; i < data[modelId].records.length; i++) {\n const record = data[modelId].records[i];\n console.log(`Updating record ${i + 1}/${data[modelId].records.length} for model ${modelId}...`);\n await dato.updateRecord(record.id, record);\n }\n }\n },\n });\n}\n\nexport async function getModelFields(dato: any, modelId: string) {\n const modelInfo = await dato.findModel(modelId);\n return {\n modelName: modelInfo.name,\n fields: _.filter(modelInfo.fields, (field) => field.type === \"field\"),\n };\n}\n\nexport async function getFieldDetails(dato: DatoClient, fields: SimpleSchemaTypes.Field[]) {\n return Promise.all(fields.map((field) => dato.findField(field.id)));\n}\n\nexport function createFieldChoices(fieldInfos: SimpleSchemaTypes.Field[]) {\n return fieldInfos.map((field) => ({\n name: field.label,\n value: field.id,\n checked: field.localized,\n }));\n}\n\nexport async function promptFieldSelection(modelName: string, choices: any[]) {\n const { selectedFields } = await inquirer.prompt([\n {\n type: \"checkbox\",\n name: \"selectedFields\",\n message: `Select fields to enable localization for model \"${modelName}\":`,\n choices,\n pageSize: process.stdout.rows - 4, // Subtract some rows for prompt text and margins\n },\n ]);\n return selectedFields;\n}\n\nexport async function updateFieldLocalization(\n dato: any,\n fieldInfo: SimpleSchemaTypes.Field,\n shouldBeLocalized: boolean,\n) {\n if (shouldBeLocalized !== fieldInfo.localized) {\n console.log(`${shouldBeLocalized ? \"Enabling\" : \"Disabling\"} localization for ${fieldInfo.label}...`);\n await dato.updateField(fieldInfo.id, { localized: shouldBeLocalized });\n }\n return shouldBeLocalized;\n}\n\nexport function createRecordChoices(\n records: SimpleSchemaTypes.Item[],\n selectedIds: string[] = [],\n project: SimpleSchemaTypes.Site,\n) {\n return records.map((record) => ({\n name: `${record.id} - https://${project.internal_domain}/editor/item_types/${record.item_type.id}/items/${record.id}`,\n value: record.id,\n checked: selectedIds?.includes(record.id),\n }));\n}\n\nexport async function promptRecordSelection(modelName: string, choices: any[]) {\n const { selectedRecords } = await inquirer.prompt([\n {\n type: \"checkbox\",\n name: \"selectedRecords\",\n message: `Select records to include for model \"${modelName}\":`,\n choices,\n pageSize: process.stdout.rows - 4, // Subtract some rows for prompt text and margins\n },\n ]);\n return selectedRecords;\n}\n\nexport async function getModelChoices(dato: DatoClient, config: DatoConfig) {\n const models = await dato.findModels();\n return models.map((model) => ({\n name: `${model.name} (${model.api_key})`,\n value: model.id,\n checked: config.models[model.id] !== undefined,\n pageSize: process.stdout.rows - 4, // Subtract some rows for prompt text and margins\n }));\n}\n\nexport async function promptModelSelection(choices: any[]) {\n const { selectedModels } = await inquirer.prompt([\n {\n type: \"checkbox\",\n name: \"selectedModels\",\n message: \"Select models to include:\",\n choices,\n pageSize: process.stdout.rows - 4, // Subtract some rows for prompt text and margins\n },\n ]);\n return selectedModels;\n}\n","import _ from \"lodash\";\nimport { buildClient, SimpleSchemaTypes } from \"@datocms/cma-client-node\";\nimport { DastDocument, DatoBlock, DatoSimpleValue, DatoValue } from \"./_base\";\nimport { DastDocumentNode } from \"./_base\";\n\ntype DatoClientParams = {\n apiKey: string;\n projectId: string;\n};\n\nexport type DatoClient = ReturnType<typeof createDatoClient>;\n\nexport default function createDatoClient(params: DatoClientParams) {\n if (!params.apiKey) {\n throw new Error(\"Missing required environment variable: DATO_API_TOKEN. Please set this variable and try again.\");\n }\n const dato = buildClient({\n apiToken: params.apiKey,\n extraHeaders: {\n \"X-Exclude-Invalid\": \"true\",\n },\n });\n\n return {\n findProject: async (): Promise<SimpleSchemaTypes.Site> => {\n const project = await dato.site.find();\n return project;\n },\n updateField: async (fieldId: string, payload: SimpleSchemaTypes.FieldUpdateSchema): Promise<void> => {\n try {\n await dato.fields.update(fieldId, payload);\n } catch (_error: any) {\n throw new Error(\n [\n `Failed to update field in DatoCMS.`,\n `Field ID: ${fieldId}`,\n `Payload: ${JSON.stringify(payload, null, 2)}`,\n `Error: ${JSON.stringify(_error, null, 2)}`,\n ].join(\"\\n\\n\"),\n );\n }\n },\n findField: async (fieldId: string): Promise<SimpleSchemaTypes.Field> => {\n try {\n const field = await dato.fields.find(fieldId);\n if (!field) {\n throw new Error(`Field ${fieldId} not found`);\n }\n return field;\n } catch (_error: any) {\n throw new Error(\n [\n `Failed to find field in DatoCMS.`,\n `Field ID: ${fieldId}`,\n `Error: ${JSON.stringify(_error, null, 2)}`,\n ].join(\"\\n\\n\"),\n );\n }\n },\n findModels: async (): Promise<SimpleSchemaTypes.ItemType[]> => {\n try {\n const models = await dato.itemTypes.list();\n const modelsWithoutBlocks = models.filter((model) => !model.modular_block);\n return modelsWithoutBlocks;\n } catch (_error: any) {\n throw new Error(\n [`Failed to find models in DatoCMS.`, `Error: ${JSON.stringify(_error, null, 2)}`].join(\"\\n\\n\"),\n );\n }\n },\n findModel: async (modelId: string): Promise<SimpleSchemaTypes.ItemType> => {\n try {\n const model = await dato.itemTypes.find(modelId);\n if (!model) {\n throw new Error(`Model ${modelId} not found`);\n }\n return model;\n } catch (_error: any) {\n throw new Error(\n [\n `Failed to find model in DatoCMS.`,\n `Model ID: ${modelId}`,\n `Error: ${JSON.stringify(_error, null, 2)}`,\n ].join(\"\\n\\n\"),\n );\n }\n },\n findRecords: async (records: string[], limit: number = 100): Promise<SimpleSchemaTypes.Item[]> => {\n return dato.items\n .list({\n nested: true,\n version: \"current\",\n limit,\n filter: {\n projectId: params.projectId,\n only_valid: \"true\",\n ids: !records.length ? undefined : records.join(\",\"),\n },\n })\n .catch((error: any) => Promise.reject(error?.response?.body?.data?.[0] || error));\n },\n findRecordsForModel: async (modelId: string, records?: string[]): Promise<SimpleSchemaTypes.Item[]> => {\n try {\n const result = await dato.items\n .list({\n nested: true,\n version: \"current\",\n filter: {\n type: modelId,\n only_valid: \"true\",\n ids: !records?.length ? undefined : records.join(\",\"),\n },\n })\n .catch((error: any) => Promise.reject(error?.response?.body?.data?.[0] || error));\n return result;\n } catch (_error: any) {\n throw new Error(\n [\n `Failed to find records for model in DatoCMS.`,\n `Model ID: ${modelId}`,\n `Error: ${JSON.stringify(_error, null, 2)}`,\n ].join(\"\\n\\n\"),\n );\n }\n },\n updateRecord: async (id: string, payload: any): Promise<void> => {\n try {\n await dato.items\n .update(id, payload)\n .catch((error: any) => Promise.reject(error?.response?.body?.data?.[0] || error));\n } catch (_error: any) {\n if (_error?.attributes?.details?.message) {\n throw new Error(\n [\n `${_error.attributes.details.message}`,\n `Payload: ${JSON.stringify(payload, null, 2)}`,\n `Error: ${JSON.stringify(_error, null, 2)}`,\n ].join(\"\\n\\n\"),\n );\n }\n\n throw new Error(\n [\n `Failed to update record in DatoCMS.`,\n `Record ID: ${id}`,\n `Payload: ${JSON.stringify(payload, null, 2)}`,\n `Error: ${JSON.stringify(_error, null, 2)}`,\n ].join(\"\\n\\n\"),\n );\n }\n },\n enableFieldLocalization: async (args: { modelId: string; fieldId: string }): Promise<void> => {\n try {\n await dato.fields\n .update(`${args.modelId}::${args.fieldId}`, { localized: true })\n .catch((error: any) => Promise.reject(error?.response?.body?.data?.[0] || error));\n } catch (_error: any) {\n if (_error?.attributes?.code === \"NOT_FOUND\") {\n throw new Error(\n [\n `Field \"${args.fieldId}\" not found in model \"${args.modelId}\".`,\n `Error: ${JSON.stringify(_error, null, 2)}`,\n ].join(\"\\n\\n\"),\n );\n }\n\n if (_error?.attributes?.details?.message) {\n throw new Error(\n [`${_error.attributes.details.message}`, `Error: ${JSON.stringify(_error, null, 2)}`].join(\"\\n\\n\"),\n );\n }\n\n throw new Error(\n [\n `Failed to enable field localization in DatoCMS.`,\n `Field ID: ${args.fieldId}`,\n `Model ID: ${args.modelId}`,\n `Error: ${JSON.stringify(_error, null, 2)}`,\n ].join(\"\\n\\n\"),\n );\n }\n },\n };\n}\n\ntype TraverseDatoCallbackMap = {\n onValue?: (path: string[], value: DatoSimpleValue, setValue: (value: DatoSimpleValue) => void) => void;\n onBlock?: (path: string[], value: DatoBlock) => void;\n};\n\nexport function traverseDatoPayload(\n payload: Record<string, DatoValue>,\n callbackMap: TraverseDatoCallbackMap,\n path: string[] = [],\n) {\n for (const fieldName of Object.keys(payload)) {\n const fieldValue = payload[fieldName];\n traverseDatoValue(payload, fieldValue, callbackMap, [...path, fieldName]);\n }\n}\n\nexport function traverseDatoValue(\n parent: Record<string, DatoValue>,\n value: DatoValue,\n callbackMap: TraverseDatoCallbackMap,\n path: string[] = [],\n) {\n if (_.isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n traverseDatoValue(parent, value[i], callbackMap, [...path, i.toString()]);\n }\n } else if (_.isObject(value)) {\n if (\"schema\" in value && value.schema === \"dast\") {\n traverseDastDocument(value, callbackMap, [...path]);\n } else if (\"type\" in value && value.type === \"item\") {\n traverseDatoBlock(value, callbackMap, [...path]);\n } else {\n throw new Error([\"Unsupported dato object value type:\", JSON.stringify(value, null, 2)].join(\"\\n\\n\"));\n }\n } else {\n callbackMap.onValue?.(path, value, (value) => {\n _.set(parent, path[path.length - 1], value);\n });\n }\n}\n\nexport function traverseDastDocument(dast: DastDocument, callbackMap: TraverseDatoCallbackMap, path: string[] = []) {\n traverseDastNode(dast.document, callbackMap, [...path, \"document\"]);\n}\n\nexport function traverseDatoBlock(block: DatoBlock, callbackMap: TraverseDatoCallbackMap, path: string[] = []) {\n callbackMap.onBlock?.(path, block);\n traverseDatoPayload(block.attributes, callbackMap, [...path, \"attributes\"]);\n}\n\nexport function traverseDastNode(node: DastDocumentNode, callbackMap: TraverseDatoCallbackMap, path: string[] = []) {\n if (node.value) {\n callbackMap.onValue?.(path, node.value, (value) => {\n _.set(node, \"value\", value);\n });\n }\n if (node.children?.length) {\n for (let i = 0; i < node.children.length; i++) {\n traverseDastNode(node.children[i], callbackMap, [...path, i.toString()]);\n }\n }\n}\n","import _ from \"lodash\";\nimport { ILoader } from \"../_types\";\nimport { createLoader } from \"../_utils\";\nimport { DatoFilterLoaderOutput } from \"./filter\";\nimport fs from \"fs\";\nimport Z from \"zod\";\n\nexport type DatoExtractLoaderOutput = {\n [modelId: string]: {\n [recordId: string]: {\n [fieldName: string]: string | Record<string, object>;\n };\n };\n};\n\nexport default function createDatoExtractLoader(): ILoader<DatoFilterLoaderOutput, DatoExtractLoaderOutput> {\n return createLoader({\n async pull(locale, input) {\n const result: DatoExtractLoaderOutput = {};\n\n for (const [modelId, modelInfo] of _.entries(input)) {\n for (const [recordId, record] of _.entries(modelInfo)) {\n for (const [fieldName, fieldValue] of _.entries(record)) {\n const parsedValue = createParsedDatoValue(fieldValue);\n if (parsedValue) {\n _.set(result, [modelId, `_${recordId}`, fieldName], parsedValue);\n }\n }\n }\n }\n\n return result;\n },\n async push(locale, data, originalInput) {\n const result = _.cloneDeep(originalInput || {});\n\n for (const [modelId, modelInfo] of _.entries(data)) {\n for (const [virtualRecordId, record] of _.entries(modelInfo)) {\n for (const [fieldName, fieldValue] of _.entries(record)) {\n const [, recordId] = virtualRecordId.split(\"_\");\n const originalFieldValue = _.get(originalInput, [modelId, recordId, fieldName]);\n const rawValue = createRawDatoValue(fieldValue, originalFieldValue, true);\n _.set(result, [modelId, recordId, fieldName], rawValue || originalFieldValue);\n }\n }\n }\n\n return result;\n },\n });\n}\n\nexport type DatoValueRaw = any;\nexport type DatoValueParsed = any;\n\nexport function detectDatoFieldType(rawDatoValue: DatoValueRaw): string | null {\n if (_.has(rawDatoValue, \"document\") && _.get(rawDatoValue, \"schema\") === \"dast\") {\n return \"structured_text\";\n } else if (_.has(rawDatoValue, \"no_index\") || _.has(rawDatoValue, \"twitter_card\")) {\n return \"seo\";\n } else if (_.get(rawDatoValue, \"type\") === \"item\") {\n return \"single_block\";\n } else if (_.isArray(rawDatoValue) && _.every(rawDatoValue, (item) => _.get(item, \"type\") === \"item\")) {\n return \"rich_text\";\n } else if (_isFile(rawDatoValue)) {\n return \"file\";\n } else if (_.isArray(rawDatoValue) && _.every(rawDatoValue, (item) => _isFile(item))) {\n return \"gallery\";\n } else if (_isJson(rawDatoValue)) {\n return \"json\";\n } else if (_.isString(rawDatoValue)) {\n return \"string\";\n } else if (_isVideo(rawDatoValue)) {\n return \"video\";\n } else if (_.isArray(rawDatoValue) && _.every(rawDatoValue, (item) => _.isString(item))) {\n return \"ref_list\";\n } else {\n return null;\n }\n}\n\nexport function createParsedDatoValue(rawDatoValue: DatoValueRaw): DatoValueParsed {\n const fieldType = detectDatoFieldType(rawDatoValue);\n switch (fieldType) {\n default:\n return rawDatoValue;\n case \"structured_text\":\n return serializeStructuredText(rawDatoValue);\n case \"seo\":\n return serializeSeo(rawDatoValue);\n case \"single_block\":\n return serializeBlock(rawDatoValue);\n case \"rich_text\":\n return serializeBlockList(rawDatoValue);\n case \"json\":\n return JSON.parse(rawDatoValue);\n case \"video\":\n return serializeVideo(rawDatoValue);\n case \"file\":\n return serializeFile(rawDatoValue);\n case \"gallery\":\n return serializeGallery(rawDatoValue);\n case \"ref_list\":\n return null;\n }\n}\n\nexport function createRawDatoValue(\n parsedDatoValue: DatoValueParsed,\n originalRawDatoValue: any,\n isClean = false,\n): DatoValueRaw {\n const fieldType = detectDatoFieldType(originalRawDatoValue);\n switch (fieldType) {\n default:\n return parsedDatoValue;\n case \"structured_text\":\n return deserializeStructuredText(parsedDatoValue, originalRawDatoValue);\n case \"seo\":\n return deserializeSeo(parsedDatoValue, originalRawDatoValue);\n case \"single_block\":\n return deserializeBlock(parsedDatoValue, originalRawDatoValue, isClean);\n case \"rich_text\":\n return deserializeBlockList(parsedDatoValue, originalRawDatoValue, isClean);\n case \"json\":\n return JSON.stringify(parsedDatoValue, null, 2);\n case \"video\":\n return deserializeVideo(parsedDatoValue, originalRawDatoValue);\n case \"file\":\n return deserializeFile(parsedDatoValue, originalRawDatoValue);\n case \"gallery\":\n return deserializeGallery(parsedDatoValue, originalRawDatoValue);\n case \"ref_list\":\n return originalRawDatoValue;\n }\n}\n\nfunction serializeStructuredText(rawStructuredText: any) {\n return serializeStructuredTextNode(rawStructuredText);\n // Encapsulates helper function args\n function serializeStructuredTextNode(node: any, path: string[] = [], acc: Record<string, any> = {}) {\n if (\"document\" in node) {\n return serializeStructuredTextNode(node.document, [...path, \"document\"], acc);\n }\n\n if (!_.isNil(node.value)) {\n acc[[...path, \"value\"].join(\".\")] = node.value;\n } else if (_.get(node, \"type\") === \"block\") {\n acc[[...path, \"item\"].join(\".\")] = serializeBlock(node.item);\n }\n\n if (node.children) {\n for (let i = 0; i < node.children.length; i++) {\n serializeStructuredTextNode(node.children[i], [...path, i.toString()], acc);\n }\n }\n\n return acc;\n }\n}\n\nfunction serializeSeo(rawSeo: any) {\n return _.chain(rawSeo).pick([\"title\", \"description\"]).value();\n}\n\nfunction serializeBlock(rawBlock: any) {\n if (_.get(rawBlock, \"type\") === \"item\" && _.has(rawBlock, \"id\")) {\n return serializeBlock(rawBlock.attributes);\n }\n\n const result: Record<string, any> = {};\n for (const [attributeName, attributeValue] of _.entries(rawBlock)) {\n result[attributeName] = createParsedDatoValue(attributeValue);\n }\n\n return result;\n}\n\nfunction serializeBlockList(rawBlockList: any) {\n return _.chain(rawBlockList)\n .map((block) => serializeBlock(block))\n .value();\n}\n\nfunction serializeVideo(rawVideo: any) {\n return _.chain(rawVideo).pick([\"title\"]).value();\n}\n\nfunction serializeFile(rawFile: any) {\n return _.chain(rawFile).pick([\"alt\", \"title\"]).value();\n}\n\nfunction serializeGallery(rawGallery: any) {\n return _.chain(rawGallery)\n .map((item) => serializeFile(item))\n .value();\n}\n\nfunction deserializeFile(parsedFile: any, originalRawFile: any) {\n return _.chain(parsedFile).defaults(originalRawFile).value();\n}\n\nfunction deserializeGallery(parsedGallery: any, originalRawGallery: any) {\n return _.chain(parsedGallery)\n .map((item, i) => deserializeFile(item, originalRawGallery[i]))\n .value();\n}\n\nfunction deserializeVideo(parsedVideo: any, originalRawVideo: any) {\n return _.chain(parsedVideo).defaults(originalRawVideo).value();\n}\n\nfunction deserializeBlock(payload: any, rawNode: any, isClean = false) {\n const result = _.cloneDeep(rawNode);\n\n for (const [attributeName, attributeValue] of _.entries(rawNode.attributes)) {\n const rawValue = createRawDatoValue(payload[attributeName], attributeValue, isClean);\n _.set(result, [\"attributes\", attributeName], rawValue);\n }\n\n if (isClean) {\n delete result[\"id\"];\n }\n\n return result;\n}\n\nfunction deserializeSeo(parsedSeo: any, originalRawSeo: any) {\n return _.chain(parsedSeo).pick([\"title\", \"description\"]).defaults(originalRawSeo).value();\n}\n\nfunction deserializeBlockList(parsedBlockList: any, originalRawBlockList: any, isClean = false) {\n return _.chain(parsedBlockList)\n .map((block, i) => deserializeBlock(block, originalRawBlockList[i], isClean))\n .value();\n}\n\nfunction deserializeStructuredText(parsedStructuredText: Record<string, string>, originalRawStructuredText: any) {\n const result = _.cloneDeep(originalRawStructuredText);\n\n for (const [path, value] of _.entries(parsedStructuredText)) {\n const realPath = _.chain(path.split(\".\"))\n .flatMap((s) => (!_.isNaN(_.toNumber(s)) ? [\"children\", s] : s))\n .value();\n const deserializedValue = createRawDatoValue(value, _.get(originalRawStructuredText, realPath), true);\n _.set(result, realPath, deserializedValue);\n }\n\n return result;\n}\n\nfunction _isJson(rawDatoValue: DatoValueRaw): boolean {\n try {\n return (\n _.isString(rawDatoValue) &&\n rawDatoValue.startsWith(\"{\") &&\n rawDatoValue.endsWith(\"}\") &&\n !!JSON.parse(rawDatoValue)\n );\n } catch (e) {\n return false;\n }\n}\n\nfunction _isFile(rawDatoValue: DatoValueRaw): boolean {\n return (\n _.isObject(rawDatoValue) &&\n [\"alt\", \"title\", \"custom_data\", \"focal_point\", \"upload_id\"].every((key) => _.has(rawDatoValue, key))\n );\n}\n\nfunction _isVideo(rawDatoValue: DatoValueRaw): boolean {\n return (\n _.isObject(rawDatoValue) &&\n [\"url\", \"title\", \"width\", \"height\", \"provider\", \"provider_uid\", \"thumbnail_url\"].every((key) =>\n _.has(rawDatoValue, key),\n )\n );\n}\n","import webvtt from \"node-webvtt\";\nimport { ILoader } from \"./_types\";\nimport { createLoader } from \"./_utils\";\n\nexport default function createVttLoader(): ILoader<\n string,\n Record<string, any>\n> {\n return createLoader({\n async pull(locale, input) {\n if (!input) {\n return \"\"; // if VTT file does not exist yet we can not parse it - return empty string\n }\n const vtt = webvtt.parse(input)?.cues;\n if (Object.keys(vtt).length === 0) {\n return {};\n } else {\n return vtt.reduce((result: any, cue: any, index: number) => {\n const key = `${index}#${cue.start}-${cue.end}#${cue.identifier}`;\n result[key] = cue.text;\n return result;\n }, {});\n }\n },\n async push(locale, payload) {\n const output = Object.entries(payload).map(([key, text]) => {\n const [id, timeRange, identifier] = key.split(\"#\");\n const [startTime, endTime] = timeRange.split(\"-\");\n\n return {\n end: Number(endTime),\n identifier: identifier,\n start: Number(startTime),\n styles: \"\",\n text: text,\n };\n });\n\n const input = {\n valid: true,\n strict: true,\n cues: output,\n };\n\n return webvtt.compile(input);\n },\n });\n}\n","import _ from \"lodash\";\nimport { ILoader } from \"../_types\";\nimport { composeLoaders, createLoader } from \"../_utils\";\n\nexport type VariableLoaderParams = {\n type: \"ieee\" | \"python\";\n};\n\nexport default function createVariableLoader(\n params: VariableLoaderParams,\n): ILoader<Record<string, any>, Record<string, string>> {\n return composeLoaders(variableExtractLoader(params), variableContentLoader());\n}\n\ntype VariableExtractionPayload = {\n variables: string[];\n value: string;\n};\n\nfunction variableExtractLoader(\n params: VariableLoaderParams,\n): ILoader<Record<string, string>, Record<string, VariableExtractionPayload>> {\n const specifierPattern = getFormatSpecifierPattern(params.type);\n return createLoader({\n pull: async (locale, input, initXtx, originalLocale, originalInput) => {\n const result: Record<string, VariableExtractionPayload> = {};\n const inputValues = _.omitBy(input, _.isEmpty);\n for (const [key, value] of Object.entries(inputValues)) {\n const originalValue = originalInput[key];\n const matches = originalValue.match(specifierPattern) || [];\n result[key] = result[key] || {\n value,\n variables: [],\n };\n for (let i = 0; i < matches.length; i++) {\n const match = matches[i];\n const currentValue = result[key].value;\n const newValue = currentValue?.replace(match, `{variable:${i}}`);\n\n result[key].value = newValue;\n result[key].variables[i] = match;\n }\n }\n return result;\n },\n push: async (\n locale,\n data,\n originalInput,\n originalDefaultLocale,\n pullInput,\n pullOutput,\n ) => {\n const result: Record<string, string> = {};\n for (const [key, valueObj] of Object.entries(data)) {\n result[key] = valueObj.value;\n for (let i = 0; i < valueObj.variables.length; i++) {\n const variable = valueObj.variables[i];\n const currentValue = result[key];\n const newValue = currentValue?.replace(`{variable:${i}}`, variable);\n result[key] = newValue;\n }\n }\n return result;\n },\n });\n}\n\nfunction variableContentLoader(): ILoader<\n Record<string, VariableExtractionPayload>,\n Record<string, string>\n> {\n return createLoader({\n pull: async (locale, input) => {\n const result = _.mapValues(input, (payload) => payload.value);\n return result;\n },\n push: async (locale, data, originalInput, defaultLocale, pullInput) => {\n const result: Record<string, VariableExtractionPayload> = _.cloneDeep(\n originalInput || {},\n );\n for (const [key, originalValueObj] of Object.entries(result)) {\n result[key] = {\n ...originalValueObj,\n value: data[key],\n };\n }\n return result;\n },\n });\n}\n\nfunction getFormatSpecifierPattern(type: VariableLoaderParams[\"type\"]): RegExp {\n switch (type) {\n case \"ieee\":\n return /%(?:\\d+\\$)?[+-]?(?:[ 0]|'.)?-?\\d*(?:\\.\\d+)?(?:[hljztL]|ll|hh)?[@diuoxXfFeEgGaAcspn%]/g;\n case \"python\":\n return /%\\([^)]+\\)[diouxXeEfFgGcrs%]/g;\n default:\n throw new Error(`Unsupported variable format type: ${type}`);\n }\n}\n","import _ from \"lodash\";\n\nimport { ILoader } from \"./_types\";\nimport { createLoader } from \"./_utils\";\n\nexport default function createSyncLoader(): ILoader<\n Record<string, string>,\n Record<string, string>\n> {\n return createLoader({\n async pull(locale, input, initCtx, originalLocale, originalInput) {\n if (!originalInput) {\n return input;\n }\n\n return _.chain(originalInput)\n .mapValues((value, key) => input[key])\n .value() as Record<string, string>;\n },\n async push(locale, data, originalInput) {\n if (!originalInput) {\n return data;\n }\n\n return _.chain(originalInput || {})\n .mapValues((value, key) => data[key])\n .value();\n },\n });\n}\n","export function formatPlutilStyle(jsonData: any, existingJson?: string): string {\n // Detect indentation from existing JSON if provided\n const indent = existingJson ? detectIndentation(existingJson) : \" \";\n\n function format(data: any, level = 0): string {\n const currentIndent = indent.repeat(level);\n const nextIndent = indent.repeat(level + 1);\n\n if (typeof data !== \"object\" || data === null) {\n return JSON.stringify(data);\n }\n\n if (Array.isArray(data)) {\n if (data.length === 0) return \"[]\";\n const items = data.map((item) => `${nextIndent}${format(item, level + 1)}`);\n return `[\\n${items.join(\",\\n\")}\\n${currentIndent}]`;\n }\n\n const keys = Object.keys(data);\n if (keys.length === 0) {\n return `{\\n\\n${currentIndent}}`; // Empty object with proper indentation\n }\n\n // Sort keys to ensure whitespace keys come first\n const sortedKeys = keys.sort((a, b) => {\n // If both keys are whitespace or both are non-whitespace, maintain stable order\n const aIsWhitespace = /^\\s*$/.test(a);\n const bIsWhitespace = /^\\s*$/.test(b);\n\n if (aIsWhitespace && !bIsWhitespace) return -1;\n if (!aIsWhitespace && bIsWhitespace) return 1;\n return a.localeCompare(b, undefined, { numeric: true });\n });\n\n const items = sortedKeys.map((key) => {\n const value = data[key];\n return `${nextIndent}${JSON.stringify(key)} : ${format(value, level + 1)}`;\n });\n\n return `{\\n${items.join(\",\\n\")}\\n${currentIndent}}`;\n }\n\n const result = format(jsonData);\n return result;\n}\n\nfunction detectIndentation(jsonStr: string): string {\n // Find the first indented line\n const match = jsonStr.match(/\\n(\\s+)/);\n return match ? match[1] : \" \"; // fallback to 4 spaces if no indentation found\n}\n","import { formatPlutilStyle } from \"../utils/plutil-formatter\";\nimport { ILoader } from \"./_types\";\nimport { createLoader } from \"./_utils\";\n\nexport default function createPlutilJsonTextLoader(): ILoader<string, string> {\n return createLoader({\n async pull(locale, data) {\n return data;\n },\n async push(locale, data, originalInput) {\n const jsonData = JSON.parse(data);\n const result = formatPlutilStyle(jsonData, originalInput || \"\");\n\n return result;\n },\n });\n}\n","import { ILoader } from \"./_types\";\nimport { createLoader } from \"./_utils\";\nimport { fromString } from \"php-array-reader\";\n\nexport default function createPhpLoader(): ILoader<string, Record<string, any>> {\n return createLoader({\n pull: async (locale, input) => {\n try {\n const output = fromString(input);\n return output;\n } catch (error) {\n throw new Error(`Error parsing PHP file for locale ${locale}`);\n }\n },\n push: async (locale, data, originalInput) => {\n const output = toPhpString(data, originalInput);\n return output;\n },\n });\n}\n\nfunction toPhpString(data: Record<string, any>, originalPhpString: string | null) {\n const defaultFilePrefix = \"<?php\\n\\n\";\n if (originalPhpString) {\n const [filePrefix = defaultFilePrefix] = originalPhpString.split(\"return \");\n const shortArraySyntax = !originalPhpString.includes(\"array(\");\n const output = `${filePrefix}return ${toPhpArray(data, shortArraySyntax)};`;\n return output;\n }\n return `${defaultFilePrefix}return ${toPhpArray(data)};`;\n}\n\nfunction toPhpArray(data: any, shortSyntax = true, indentLevel = 1): string {\n if (data === null || data === undefined) {\n return \"null\";\n }\n if (typeof data === \"string\") {\n return `'${escapePhpString(data)}'`;\n }\n if (typeof data === \"number\") {\n return data.toString();\n }\n if (typeof data === \"boolean\") {\n return data ? \"true\" : \"false\";\n }\n\n const arrayStart = shortSyntax ? \"[\" : \"array(\";\n const arrayEnd = shortSyntax ? \"]\" : \")\";\n\n if (Array.isArray(data)) {\n return `${arrayStart}\\n${data\n .map((value) => `${indent(indentLevel)}${toPhpArray(value, shortSyntax, indentLevel + 1)}`)\n .join(\",\\n\")}\\n${indent(indentLevel - 1)}${arrayEnd}`;\n }\n\n const output = `${arrayStart}\\n${Object.entries(data)\n .map(([key, value]) => `${indent(indentLevel)}'${key}' => ${toPhpArray(value, shortSyntax, indentLevel + 1)}`)\n .join(\",\\n\")}\\n${indent(indentLevel - 1)}${arrayEnd}`;\n return output;\n}\n\nfunction indent(level: number) {\n return \" \".repeat(level);\n}\n\nfunction escapePhpString(str: string) {\n return str\n .replaceAll(\"\\\\\", \"\\\\\\\\\")\n .replaceAll(\"'\", \"\\\\'\")\n .replaceAll(\"\\r\", \"\\\\r\")\n .replaceAll(\"\\n\", \"\\\\n\")\n .replaceAll(\"\\t\", \"\\\\t\");\n}\n","import { jsonrepair } from \"jsonrepair\";\nimport { ILoader } from \"./_types\";\nimport { createLoader } from \"./_utils\";\n\nexport default function createVueJsonLoader(): ILoader<string, Record<string, any>> {\n return createLoader({\n pull: async (locale, input, ctx) => {\n const parsed = parseVueFile(input);\n return parsed?.i18n?.[locale] ?? {};\n },\n push: async (locale, data, originalInput) => {\n const parsed = parseVueFile(originalInput ?? \"\");\n if (!parsed) {\n return originalInput ?? \"\";\n }\n\n parsed.i18n[locale] = data;\n return `${parsed.before}<i18n>\\n${JSON.stringify(parsed.i18n, null, 2)}\\n</i18n>${parsed.after}`;\n },\n });\n}\n\nfunction parseVueFile(input: string) {\n const match = input.match(/^([\\s\\S]*)<i18n>([\\s\\S]*)<\\/i18n>([\\s\\S]*)$/);\n\n if (!match) {\n return null;\n }\n\n const [, before, jsonString = \"{}\", after] = match;\n let i18n: Record<string, any>;\n try {\n i18n = JSON.parse(jsonString);\n } catch (error) {\n i18n = JSON.parse(jsonrepair(jsonString));\n }\n\n return { before, after, i18n };\n}\n","import { parse } from \"@babel/parser\";\nimport _ from \"lodash\";\nimport babelTraverseModule from \"@babel/traverse\";\nimport type { NodePath } from \"@babel/traverse\";\nimport * as t from \"@babel/types\";\nimport babelGenerateModule from \"@babel/generator\";\nimport { ILoader } from \"../_types\";\nimport { createLoader } from \"../_utils\";\nimport { resolveCjsExport } from \"./cjs-interop\";\n\nconst traverse = resolveCjsExport(babelTraverseModule, \"@babel/traverse\");\nconst generate = resolveCjsExport(babelGenerateModule, \"@babel/generator\");\n\nexport default function createTypescriptLoader(): ILoader<\n string,\n Record<string, any>\n> {\n return createLoader({\n pull: async (locale, input) => {\n if (!input) {\n return {};\n }\n\n const ast = parseTypeScript(input);\n const extractedStrings = extractStringsFromDefaultExport(ast);\n return extractedStrings;\n },\n push: async (\n locale,\n data,\n originalInput,\n defaultLocale,\n pullInput,\n pullOutput,\n ) => {\n const ast = parseTypeScript(originalInput || \"\");\n const finalData = _.merge({}, pullOutput, data);\n updateStringsInDefaultExport(ast, finalData);\n\n const { code } = generate(ast, {\n jsescOption: {\n minimal: true,\n },\n });\n return code;\n },\n });\n}\n\n/**\n * Parse TypeScript code into an AST\n */\nfunction parseTypeScript(input: string) {\n return parse(input, {\n sourceType: \"module\",\n plugins: [\"typescript\"],\n });\n}\n\n/**\n * Extract the localizable (string literal) content from the default export\n * and return it as a nested object that mirrors the original structure.\n */\nfunction extractStringsFromDefaultExport(ast: t.File): Record<string, any> {\n let extracted: Record<string, any> = {};\n\n traverse(ast, {\n ExportDefaultDeclaration(path: NodePath<t.ExportDefaultDeclaration>) {\n const { declaration } = path.node;\n\n const decl = unwrapTSAsExpression(declaration);\n\n if (t.isObjectExpression(decl)) {\n extracted = objectExpressionToObject(decl);\n } else if (t.isArrayExpression(decl)) {\n extracted = arrayExpressionToArray(decl) as unknown as Record<\n string,\n any\n >;\n } else if (t.isIdentifier(decl)) {\n // Handle: const foo = {...}; export default foo;\n const binding = path.scope.bindings[decl.name];\n if (\n binding &&\n t.isVariableDeclarator(binding.path.node) &&\n binding.path.node.init\n ) {\n const initRaw = binding.path.node.init;\n const init = initRaw ? unwrapTSAsExpression(initRaw) : initRaw;\n if (t.isObjectExpression(init)) {\n extracted = objectExpressionToObject(init);\n } else if (t.isArrayExpression(init)) {\n extracted = arrayExpressionToArray(init) as unknown as Record<\n string,\n any\n >;\n }\n }\n }\n },\n });\n\n return extracted;\n}\n\n/**\n * Helper: unwraps nested TSAsExpression nodes (e.g. `obj as const`)\n * to get to the underlying expression/node we care about.\n */\nfunction unwrapTSAsExpression<T extends t.Node>(node: T): t.Node {\n let current: t.Node = node;\n // TSAsExpression is produced for `expr as const` assertions.\n // We want to get to the underlying expression so that the rest of the\n // loader logic can work unchanged.\n // There could theoretically be multiple nested `as const` assertions, so we\n // unwrap in a loop.\n // eslint-disable-next-line no-constant-condition\n while (t.isTSAsExpression(current)) {\n current = current.expression;\n }\n return current;\n}\n\n/**\n * Recursively converts an `ObjectExpression` into a plain JavaScript object that\n * only contains the string-literal values we care about. Non-string primitives\n * (numbers, booleans, etc.) are ignored.\n */\nfunction objectExpressionToObject(\n objectExpression: t.ObjectExpression,\n): Record<string, any> {\n const obj: Record<string, any> = {};\n\n objectExpression.properties.forEach((prop) => {\n if (!t.isObjectProperty(prop)) return;\n\n const key = getPropertyKey(prop);\n\n if (t.isStringLiteral(prop.value)) {\n obj[key] = prop.value.value;\n } else if (\n t.isTemplateLiteral(prop.value) &&\n prop.value.expressions.length === 0\n ) {\n // Handle template literals without expressions as plain strings\n obj[key] = prop.value.quasis[0].value.cooked ?? \"\";\n } else if (t.isObjectExpression(prop.value)) {\n const nested = objectExpressionToObject(prop.value);\n if (Object.keys(nested).length > 0) {\n obj[key] = nested;\n }\n } else if (t.isArrayExpression(prop.value)) {\n const arr = arrayExpressionToArray(prop.value);\n if (arr.length > 0) {\n obj[key] = arr;\n }\n }\n });\n\n return obj;\n}\n\n/**\n * Recursively converts an `ArrayExpression` into a JavaScript array that\n * contains string literals and nested objects/arrays when relevant.\n */\nfunction arrayExpressionToArray(arrayExpression: t.ArrayExpression): any[] {\n const arr: any[] = [];\n\n arrayExpression.elements.forEach((element) => {\n if (!element) return; // holes in the array\n\n if (t.isStringLiteral(element)) {\n arr.push(element.value);\n } else if (\n t.isTemplateLiteral(element) &&\n element.expressions.length === 0\n ) {\n arr.push(element.quasis[0].value.cooked ?? \"\");\n } else if (t.isObjectExpression(element)) {\n const nestedObj = objectExpressionToObject(element);\n arr.push(nestedObj);\n } else if (t.isArrayExpression(element)) {\n arr.push(arrayExpressionToArray(element));\n }\n });\n\n return arr;\n}\n\n// ------------------ updating helpers (nested data) ------------------------\n\nfunction updateStringsInDefaultExport(\n ast: t.File,\n data: Record<string, any>,\n): boolean {\n let modified = false;\n\n traverse(ast, {\n ExportDefaultDeclaration(path: NodePath<t.ExportDefaultDeclaration>) {\n const { declaration } = path.node;\n\n const decl = unwrapTSAsExpression(declaration);\n\n if (t.isObjectExpression(decl)) {\n modified = updateStringsInObjectExpression(decl, data) || modified;\n } else if (t.isArrayExpression(decl)) {\n if (Array.isArray(data)) {\n modified = updateStringsInArrayExpression(decl, data) || modified;\n }\n } else if (t.isIdentifier(decl)) {\n modified = updateStringsInExportedIdentifier(path, data) || modified;\n }\n },\n });\n\n return modified;\n}\n\nfunction updateStringsInObjectExpression(\n objectExpression: t.ObjectExpression,\n data: Record<string, any>,\n): boolean {\n let modified = false;\n\n objectExpression.properties.forEach((prop) => {\n if (!t.isObjectProperty(prop)) return;\n\n const key = getPropertyKey(prop);\n const incomingVal = data?.[key];\n\n if (incomingVal === undefined) {\n // nothing to update for this key\n return;\n }\n\n if (t.isStringLiteral(prop.value) && typeof incomingVal === \"string\") {\n if (prop.value.value !== incomingVal) {\n prop.value.value = incomingVal;\n modified = true;\n }\n } else if (\n t.isTemplateLiteral(prop.value) &&\n prop.value.expressions.length === 0 &&\n typeof incomingVal === \"string\"\n ) {\n const currentVal = prop.value.quasis[0].value.cooked ?? \"\";\n if (currentVal !== incomingVal) {\n // Replace the existing template literal with an updated one\n prop.value.quasis[0].value.raw = incomingVal;\n prop.value.quasis[0].value.cooked = incomingVal;\n modified = true;\n }\n } else if (\n t.isObjectExpression(prop.value) &&\n typeof incomingVal === \"object\" &&\n !Array.isArray(incomingVal)\n ) {\n const subModified = updateStringsInObjectExpression(\n prop.value,\n incomingVal,\n );\n modified = subModified || modified;\n } else if (t.isArrayExpression(prop.value) && Array.isArray(incomingVal)) {\n const subModified = updateStringsInArrayExpression(\n prop.value,\n incomingVal,\n );\n modified = subModified || modified;\n }\n });\n\n return modified;\n}\n\nfunction updateStringsInArrayExpression(\n arrayExpression: t.ArrayExpression,\n incoming: any[],\n): boolean {\n let modified = false;\n\n arrayExpression.elements.forEach((element, index) => {\n if (!element) return;\n\n const incomingVal = incoming?.[index];\n if (incomingVal === undefined) return;\n\n if (t.isStringLiteral(element) && typeof incomingVal === \"string\") {\n if (element.value !== incomingVal) {\n element.value = incomingVal;\n modified = true;\n }\n } else if (\n t.isTemplateLiteral(element) &&\n element.expressions.length === 0 &&\n typeof incomingVal === \"string\"\n ) {\n const currentVal = element.quasis[0].value.cooked ?? \"\";\n if (currentVal !== incomingVal) {\n element.quasis[0].value.raw = incomingVal;\n element.quasis[0].value.cooked = incomingVal;\n modified = true;\n }\n } else if (\n t.isObjectExpression(element) &&\n typeof incomingVal === \"object\" &&\n !Array.isArray(incomingVal)\n ) {\n const subModified = updateStringsInObjectExpression(element, incomingVal);\n modified = subModified || modified;\n } else if (t.isArrayExpression(element) && Array.isArray(incomingVal)) {\n const subModified = updateStringsInArrayExpression(element, incomingVal);\n modified = subModified || modified;\n }\n });\n\n return modified;\n}\n\nfunction updateStringsInExportedIdentifier(\n path: NodePath<t.ExportDefaultDeclaration>,\n data: Record<string, any>,\n): boolean {\n const exportName = (path.node.declaration as t.Identifier).name;\n const binding = path.scope.bindings[exportName];\n\n if (!binding || !binding.path.node) return false;\n\n if (t.isVariableDeclarator(binding.path.node) && binding.path.node.init) {\n const initRaw = binding.path.node.init;\n const init = initRaw ? unwrapTSAsExpression(initRaw) : initRaw;\n if (t.isObjectExpression(init)) {\n return updateStringsInObjectExpression(init, data);\n } else if (t.isArrayExpression(init)) {\n return updateStringsInArrayExpression(init, data as any[]);\n }\n }\n\n return false;\n}\n\n/**\n * Get the string key from an object property\n */\nfunction getPropertyKey(prop: t.ObjectProperty): string {\n if (t.isIdentifier(prop.key)) {\n return prop.key.name;\n } else if (t.isStringLiteral(prop.key)) {\n return prop.key.value;\n } else if (t.isNumericLiteral(prop.key)) {\n return String(prop.key.value);\n }\n return String(prop.key);\n}\n","/**\n * @fileoverview Helpers for CommonJS ⇆ ES Module inter-op quirks.\n */\n\n/**\n * Resolve the actual default export value of a CommonJS module that has been\n * imported via an ES-module `import` statement.\n *\n * Why is this needed?\n * -------------------\n * When a package that is published as **CommonJS** (for example, `@babel/traverse`)\n * is imported inside native **ESM** code (or via a bundler in ESM mode) the\n * runtime value you receive is not consistent across environments:\n *\n * • **Node.js** (native ESM) wraps the CJS module in an object like\n * `{ default: moduleExports, …namedReExports }`.\n * • **esbuild / Vite / Vitest** may decide to mimic TypeScript's\n * `esModuleInterop` behaviour and give you `moduleExports` directly.\n * • Other tools can produce yet different shapes.\n *\n * If you blindly assume one shape, you will hit runtime errors such as\n * `TypeError: traverse is not a function` when the actual function lives on the\n * `.default` property — or the opposite, depending on the environment.\n *\n * This helper inspects the imported value at runtime and returns what looks like\n * the real default export regardless of how it was wrapped. It hides the ugly\n * `typeof mod === \"function\" ? … : mod.default` branching behind a single call\n * site.\n *\n * Example\n * -------\n * ```ts\n * import traverseModule from \"@babel/traverse\";\n * import { resolveCjsExport } from \"../utils/cjs-interop\";\n *\n * const traverse = resolveCjsExport<typeof traverseModule>(\n * traverseModule,\n * \"@babel/traverse\",\n * );\n * ```\n *\n * @template T Expected type of the resolved export.\n * @param mod The runtime value returned by the `import` statement.\n * @param name Friendly name of the module (for error messages).\n * @returns The resolved default export value.\n */\nexport function resolveCjsExport<T = any>(mod: T, name: string = \"module\"): T {\n // If the module value itself is callable or clearly not an object, assume it's\n // already the export we want (covers most bundler scenarios).\n if (typeof mod === \"function\" || typeof mod !== \"object\" || mod === null) {\n return mod as T;\n }\n\n // Otherwise, look for a `.default` property which is common in Node's CJS->ESM\n // wrapper as well as in Babel's `interopRequireDefault` helpers.\n if (\"default\" in mod && typeof mod.default !== \"undefined\") {\n return mod.default as T;\n }\n\n // Give up: log the mysterious shape and throw to fail fast.\n /* eslint-disable no-console */\n console.error(\n `[resolveCjsExport] Unable to determine default export for ${name}.`,\n \"Received value:\",\n mod,\n );\n throw new Error(`Failed to resolve default export for ${name}.`);\n}\n","import _ from \"lodash\";\nimport { ILoader } from \"./_types\";\nimport { createLoader } from \"./_utils\";\n\nexport default function createInjectLocaleLoader(\n injectLocaleKeys?: string[],\n): ILoader<Record<string, any>, Record<string, any>> {\n return createLoader({\n async pull(locale, data) {\n if (!injectLocaleKeys) {\n return data;\n }\n const omitKeys = injectLocaleKeys.filter((key) => {\n return _.get(data, key) === locale;\n });\n const result = _.omit(data, omitKeys);\n return result;\n },\n async push(locale, data, originalInput, originalLocale) {\n if (!injectLocaleKeys) {\n return data;\n }\n\n // ensures locale keys are in correct position\n const mergedData = _.merge({}, originalInput, data);\n\n injectLocaleKeys.forEach((key) => {\n if (_.get(mergedData, key) === originalLocale) {\n _.set(mergedData, key, locale);\n }\n });\n\n return mergedData;\n },\n });\n}\n","import { ILoader } from \"./_types\";\nimport { createLoader } from \"./_utils\";\nimport _ from \"lodash\";\n\nexport default function createLockedKeysLoader(\n lockedKeys: string[],\n isCacheRestore: boolean = false,\n): ILoader<Record<string, any>, Record<string, any>> {\n return createLoader({\n pull: async (locale, data) =>\n _.chain(data)\n .pickBy((value, key) => !lockedKeys.some((lockedKey) => key.startsWith(lockedKey)))\n .value(),\n push: async (locale, data, originalInput) => {\n const lockedSubObject = _.chain(originalInput)\n .pickBy((value, key) => lockedKeys.some((lockedKey) => key.startsWith(lockedKey)))\n .value();\n\n if (isCacheRestore) {\n return _.merge({}, data, lockedSubObject);\n } else {\n return _.merge({}, originalInput, data, lockedSubObject);\n }\n },\n });\n}\n","import matter from \"gray-matter\";\nimport YAML from \"yaml\";\nimport { ILoader } from \"../_types\";\nimport { createLoader } from \"../_utils\";\nimport { RawMdx } from \"./_types\";\n\nexport default function createMdxFrontmatterSplitLoader(): ILoader<\n string,\n RawMdx\n> {\n const fmEngine = createFmEngine();\n\n return createLoader({\n async pull(locale, input) {\n const source = input || \"\";\n const { data: frontmatter, content } = fmEngine.parse(source);\n\n return {\n frontmatter: frontmatter as Record<string, any>,\n content,\n };\n },\n\n async push(locale, data) {\n const { frontmatter = {}, content = \"\" } = data || ({} as RawMdx);\n\n const result = fmEngine.stringify(content, frontmatter).trim();\n\n return result;\n },\n });\n}\n\nfunction createFmEngine() {\n const yamlEngine = {\n parse: (str: string) => YAML.parse(str),\n stringify: (obj: any) =>\n YAML.stringify(obj, { defaultStringType: \"PLAIN\" }),\n };\n\n return {\n parse: (input: string) =>\n matter(input, {\n engines: {\n yaml: yamlEngine,\n },\n }),\n stringify: (content: string, frontmatter: Record<string, any>) =>\n matter.stringify(content, frontmatter, {\n engines: {\n yaml: yamlEngine,\n },\n }),\n };\n}\n","import { MD5 } from \"object-hash\";\n\nexport function md5(input: any) {\n return MD5(input);\n}\n","import { ILoader } from \"../_types\";\nimport { createLoader } from \"../_utils\";\nimport { md5 } from \"../../utils/md5\";\nimport _ from \"lodash\";\n\nconst fenceRegex = /([ \\t]*)(^>\\s*)?```([\\s\\S]*?)```/gm;\nconst inlineCodeRegex = /(?<!`)`([^`\\r\\n]+?)`(?!`)/g;\n\n// Matches markdown image tags, with optional alt text & parenthesis URL, possibly inside blockquotes\n// Captures patterns like ![](url) or ![alt](url), with optional leading '> ' for blockquotes\nconst imageRegex = /([ \\t]*)(^>\\s*)?!\\[[^\\]]*?\\]\\(([^()]*(\\([^()]*\\)[^()]*)*)\\)/gm;\n\n/**\n * Ensures that markdown image tags are surrounded by blank lines (\\n\\n) so that they are properly\n * treated as separate blocks during subsequent processing and serialization.\n *\n * Behaviour mirrors `ensureTrailingFenceNewline` logic for code fences:\n * • If an image tag is already inside a blockquote (starts with `>` after trimming) we leave it untouched.\n * • Otherwise we add two newlines before and after the image tag, then later collapse multiple\n * consecutive blank lines back to exactly one separation using lodash chain logic.\n */\nfunction ensureSurroundingImageNewlines(_content: string) {\n let found = false;\n let content = _content;\n let workingContent = content;\n\n do {\n found = false;\n const matches = workingContent.match(imageRegex);\n if (matches) {\n const match = matches[0];\n\n const replacement = match.trim().startsWith(\">\")\n ? match\n : `\\n\\n${match}\\n\\n`;\n\n content = content.replaceAll(match, replacement);\n workingContent = workingContent.replaceAll(match, \"\");\n found = true;\n }\n } while (found);\n\n content = _.chain(content)\n .split(\"\\n\\n\")\n .map((section) => _.trim(section, \"\\n\"))\n .filter(Boolean)\n .join(\"\\n\\n\")\n .value();\n\n return content;\n}\n\nfunction ensureTrailingFenceNewline(_content: string) {\n let found = false;\n let content = _content;\n let workingContent = content;\n\n do {\n found = false;\n const matches = workingContent.match(fenceRegex);\n if (matches) {\n const match = matches[0];\n\n const replacement = match.trim().startsWith(\">\")\n ? match\n : `\\n\\n${match}\\n\\n`;\n content = content.replaceAll(match, replacement);\n workingContent = workingContent.replaceAll(match, \"\");\n found = true;\n }\n } while (found);\n\n content = _.chain(content)\n .split(\"\\n\\n\")\n .map((section) => _.trim(section, \"\\n\"))\n .filter(Boolean)\n .join(\"\\n\\n\")\n .value();\n\n return content;\n}\n\n// Helper that replaces code (block & inline) with stable placeholders and returns\n// both the transformed content and the placeholder → original mapping so it can\n// later be restored. Extracted so that we can reuse the exact same logic in both\n// `pull` and `push` phases (e.g. to recreate the mapping from `originalInput`).\nfunction extractCodePlaceholders(content: string): {\n content: string;\n codePlaceholders: Record<string, string>;\n} {\n let finalContent = content;\n finalContent = ensureTrailingFenceNewline(finalContent);\n finalContent = ensureSurroundingImageNewlines(finalContent);\n\n const codePlaceholders: Record<string, string> = {};\n\n const codeBlockMatches = finalContent.matchAll(fenceRegex);\n for (const match of codeBlockMatches) {\n const codeBlock = match[0];\n const codeBlockHash = md5(codeBlock);\n const placeholder = `---CODE-PLACEHOLDER-${codeBlockHash}---`;\n\n codePlaceholders[placeholder] = codeBlock;\n\n const replacement = codeBlock.trim().startsWith(\">\")\n ? `> ${placeholder}`\n : `${placeholder}`;\n finalContent = finalContent.replace(codeBlock, replacement);\n }\n\n const inlineCodeMatches = finalContent.matchAll(inlineCodeRegex);\n for (const match of inlineCodeMatches) {\n const inlineCode = match[0];\n const inlineCodeHash = md5(inlineCode);\n const placeholder = `---INLINE-CODE-PLACEHOLDER-${inlineCodeHash}---`;\n\n codePlaceholders[placeholder] = inlineCode;\n\n const replacement = placeholder;\n finalContent = finalContent.replace(inlineCode, replacement);\n }\n\n return {\n content: finalContent,\n codePlaceholders,\n };\n}\n\nexport default function createMdxCodePlaceholderLoader(): ILoader<\n string,\n string\n> {\n return createLoader({\n async pull(locale, input) {\n const response = extractCodePlaceholders(input);\n return response.content;\n },\n\n async push(locale, data, originalInput, originalLocale, pullInput) {\n const sourceInfo = extractCodePlaceholders(originalInput ?? \"\");\n const currentInfo = extractCodePlaceholders(pullInput ?? \"\");\n\n const codePlaceholders = _.merge(\n sourceInfo.codePlaceholders,\n currentInfo.codePlaceholders,\n );\n\n let result = data;\n for (const [placeholder, original] of Object.entries(codePlaceholders)) {\n const replacement = original.startsWith(\">\")\n ? _.trimStart(original, \"> \")\n : original;\n result = result.replaceAll(placeholder, replacement);\n }\n\n return result;\n },\n });\n}\n","import { ILoader } from \"../_types\";\nimport { createLoader } from \"../_utils\";\nimport { LocalizableMdxDocument, SectionedMdx } from \"./_types\";\n\nexport default function createLocalizableMdxDocumentLoader(): ILoader<SectionedMdx, LocalizableMdxDocument> {\n return createLoader({\n async pull(_locale, input) {\n return {\n meta: input.frontmatter,\n content: input.sections,\n };\n },\n\n async push(_locale, data, originalInput, _originalLocale, pullInput) {\n const result: SectionedMdx = {\n frontmatter: data.meta || {},\n sections: data.content || {},\n };\n\n return result;\n },\n });\n}\n","import { ILoader } from \"../_types\";\nimport { createLoader } from \"../_utils\";\nimport { PlaceholderedMdx, SectionedMdx } from \"./_types\";\nimport _ from \"lodash\";\n\nexport default function createMdxSectionsSplit2Loader(): ILoader<\n PlaceholderedMdx,\n SectionedMdx\n> {\n return createLoader({\n async pull(locale, input) {\n const sections = _.chain(input.content)\n .split(\"\\n\\n\")\n .filter(Boolean)\n .map((section, index) => [index, section])\n .fromPairs()\n .value();\n\n const result: SectionedMdx = {\n frontmatter: input.frontmatter,\n sections,\n };\n\n return result;\n },\n\n async push(locale, data, originalInput, _originalLocale, pullInput) {\n const content = _.chain(data.sections).values().join(\"\\n\\n\").value();\n\n const result: PlaceholderedMdx = {\n frontmatter: data.frontmatter,\n codePlaceholders: pullInput?.codePlaceholders || {},\n content,\n };\n\n return result;\n },\n });\n}\n","import { ILoader } from \"../_types\";\nimport { createLoader } from \"../_utils\";\nimport { md5 } from \"../../utils/md5\";\nimport _ from \"lodash\";\nimport { I18nConfig } from \"@lingo.dev/_spec\";\n\n/**\n * Extracts content matching regex patterns and replaces it with placeholders.\n * Returns the transformed content and a mapping of placeholders to original content.\n */\nfunction extractLockedPatterns(\n content: string,\n patterns: string[] = []\n): {\n content: string;\n lockedPlaceholders: Record<string, string>;\n} {\n let finalContent = content;\n const lockedPlaceholders: Record<string, string> = {};\n\n if (!patterns || patterns.length === 0) {\n return { content: finalContent, lockedPlaceholders };\n }\n\n for (const patternStr of patterns) {\n try {\n const pattern = new RegExp(patternStr, \"gm\");\n const matches = Array.from(finalContent.matchAll(pattern));\n \n for (const match of matches) {\n const matchedText = match[0];\n const matchHash = md5(matchedText);\n const placeholder = `---LOCKED-PATTERN-${matchHash}---`;\n \n lockedPlaceholders[placeholder] = matchedText;\n finalContent = finalContent.replace(matchedText, placeholder);\n }\n } catch (error) {\n console.warn(`Invalid regex pattern: ${patternStr}`);\n }\n }\n\n return {\n content: finalContent,\n lockedPlaceholders,\n };\n}\n\nexport default function createMdxLockedPatternsLoader(defaultPatterns?: string[]): ILoader<\n string,\n string\n> {\n return createLoader({\n async pull(locale, input, initCtx, originalLocale) {\n const patterns = defaultPatterns || [];\n \n const { content } = extractLockedPatterns(input || \"\", patterns);\n \n return content;\n },\n\n async push(locale, data, originalInput, originalLocale, pullInput, pullOutput) {\n const patterns = defaultPatterns || [];\n \n if (!pullInput) {\n return data;\n }\n \n const { lockedPlaceholders } = extractLockedPatterns(pullInput as string, patterns);\n \n let result = data;\n for (const [placeholder, original] of Object.entries(lockedPlaceholders)) {\n result = result.replaceAll(placeholder, original);\n }\n \n return result;\n },\n });\n}\n","import { ILoader } from \"./_types\";\nimport { createLoader } from \"./_utils\";\nimport _ from \"lodash\";\n\nexport default function createIgnoredKeysLoader(\n ignoredKeys: string[],\n): ILoader<Record<string, any>, Record<string, any>> {\n return createLoader({\n pull: async (locale, data) => {\n const result = _.chain(data).omit(ignoredKeys).value();\n return result;\n },\n push: async (locale, data, originalInput, originalLocale, pullInput) => {\n const result = _.merge({}, data, _.pick(pullInput, ignoredKeys));\n return result;\n },\n });\n}\n","import Z from \"zod\";\nimport jsdom from \"jsdom\";\nimport { bucketTypeSchema } from \"@lingo.dev/_spec\";\nimport { composeLoaders } from \"./_utils\";\nimport createJsonLoader from \"./json\";\nimport createFlatLoader from \"./flat\";\nimport createTextFileLoader from \"./text-file\";\nimport createYamlLoader from \"./yaml\";\nimport createRootKeyLoader from \"./root-key\";\nimport createFlutterLoader from \"./flutter\";\nimport { ILoader } from \"./_types\";\nimport createAndroidLoader from \"./android\";\nimport createCsvLoader from \"./csv\";\nimport createHtmlLoader from \"./html\";\nimport createMarkdownLoader from \"./markdown\";\nimport createPropertiesLoader from \"./properties\";\nimport createXcodeStringsLoader from \"./xcode-strings\";\nimport createXcodeStringsdictLoader from \"./xcode-stringsdict\";\nimport createXcodeXcstringsLoader from \"./xcode-xcstrings\";\nimport createPrettierLoader from \"./prettier\";\nimport createUnlocalizableLoader from \"./unlocalizable\";\nimport createPoLoader from \"./po\";\nimport createXliffLoader from \"./xliff\";\nimport createXmlLoader from \"./xml\";\nimport createSrtLoader from \"./srt\";\nimport createDatoLoader from \"./dato\";\nimport createVttLoader from \"./vtt\";\nimport createVariableLoader from \"./variable\";\nimport createSyncLoader from \"./sync\";\nimport createPlutilJsonTextLoader from \"./plutil-json-loader\";\nimport createPhpLoader from \"./php\";\nimport createVueJsonLoader from \"./vue-json\";\nimport createTypescriptLoader from \"./typescript\";\nimport createInjectLocaleLoader from \"./inject-locale\";\nimport createLockedKeysLoader from \"./locked-keys\";\nimport createMdxFrontmatterSplitLoader from \"./mdx2/frontmatter-split\";\nimport createMdxCodePlaceholderLoader from \"./mdx2/code-placeholder\";\nimport createLocalizableMdxDocumentLoader from \"./mdx2/localizable-document\";\nimport createMdxSectionsSplit2Loader from \"./mdx2/sections-split-2\";\nimport createMdxLockedPatternsLoader from \"./mdx2/locked-patterns\";\nimport createIgnoredKeysLoader from \"./ignored-keys\";\n\ntype BucketLoaderOptions = {\n isCacheRestore: boolean;\n returnUnlocalizedKeys?: boolean;\n defaultLocale: string;\n injectLocale?: string[];\n};\n\nexport default function createBucketLoader(\n bucketType: Z.infer<typeof bucketTypeSchema>,\n bucketPathPattern: string,\n options: BucketLoaderOptions,\n lockedKeys?: string[],\n lockedPatterns?: string[],\n ignoredKeys?: string[],\n): ILoader<void, Record<string, string>> {\n switch (bucketType) {\n default:\n throw new Error(`Unsupported bucket type: ${bucketType}`);\n case \"android\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createAndroidLoader(),\n createFlatLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(\n options.isCacheRestore,\n options.returnUnlocalizedKeys,\n ),\n );\n case \"csv\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createCsvLoader(),\n createFlatLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(\n options.isCacheRestore,\n options.returnUnlocalizedKeys,\n ),\n );\n case \"html\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createPrettierLoader({ parser: \"html\", bucketPathPattern }),\n createHtmlLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(\n options.isCacheRestore,\n options.returnUnlocalizedKeys,\n ),\n );\n case \"json\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createPrettierLoader({ parser: \"json\", bucketPathPattern }),\n createJsonLoader(),\n createInjectLocaleLoader(options.injectLocale),\n createFlatLoader(),\n createLockedKeysLoader(lockedKeys || [], options.isCacheRestore),\n createSyncLoader(),\n createUnlocalizableLoader(\n options.isCacheRestore,\n options.returnUnlocalizedKeys,\n ),\n );\n case \"markdown\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createPrettierLoader({ parser: \"markdown\", bucketPathPattern }),\n createMarkdownLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(\n options.isCacheRestore,\n options.returnUnlocalizedKeys,\n ),\n );\n case \"mdx\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createPrettierLoader({\n parser: \"mdx\",\n bucketPathPattern,\n }),\n createMdxCodePlaceholderLoader(),\n createMdxLockedPatternsLoader(lockedPatterns),\n createMdxFrontmatterSplitLoader(),\n createMdxSectionsSplit2Loader(),\n createLocalizableMdxDocumentLoader(),\n createFlatLoader(),\n createLockedKeysLoader(lockedKeys || [], options.isCacheRestore),\n createSyncLoader(),\n createUnlocalizableLoader(\n options.isCacheRestore,\n options.returnUnlocalizedKeys,\n ),\n );\n case \"po\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createPoLoader(),\n createFlatLoader(),\n createSyncLoader(),\n createVariableLoader({ type: \"python\" }),\n createUnlocalizableLoader(\n options.isCacheRestore,\n options.returnUnlocalizedKeys,\n ),\n );\n case \"properties\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createPropertiesLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(\n options.isCacheRestore,\n options.returnUnlocalizedKeys,\n ),\n );\n case \"xcode-strings\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createXcodeStringsLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(\n options.isCacheRestore,\n options.returnUnlocalizedKeys,\n ),\n );\n case \"xcode-stringsdict\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createXcodeStringsdictLoader(),\n createFlatLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(\n options.isCacheRestore,\n options.returnUnlocalizedKeys,\n ),\n );\n case \"xcode-xcstrings\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createPlutilJsonTextLoader(),\n createJsonLoader(),\n createXcodeXcstringsLoader(options.defaultLocale),\n createFlatLoader(),\n createSyncLoader(),\n createVariableLoader({ type: \"ieee\" }),\n createUnlocalizableLoader(\n options.isCacheRestore,\n options.returnUnlocalizedKeys,\n ),\n );\n case \"yaml\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createPrettierLoader({ parser: \"yaml\", bucketPathPattern }),\n createYamlLoader(),\n createFlatLoader(),\n createLockedKeysLoader(lockedKeys || [], options.isCacheRestore),\n createSyncLoader(),\n createUnlocalizableLoader(\n options.isCacheRestore,\n options.returnUnlocalizedKeys,\n ),\n );\n case \"yaml-root-key\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createPrettierLoader({ parser: \"yaml\", bucketPathPattern }),\n createYamlLoader(),\n createRootKeyLoader(true),\n createFlatLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(\n options.isCacheRestore,\n options.returnUnlocalizedKeys,\n ),\n );\n case \"flutter\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createPrettierLoader({ parser: \"json\", bucketPathPattern }),\n createJsonLoader(),\n createFlutterLoader(),\n createFlatLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(\n options.isCacheRestore,\n options.returnUnlocalizedKeys,\n ),\n );\n case \"xliff\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createXliffLoader(),\n createFlatLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(\n options.isCacheRestore,\n options.returnUnlocalizedKeys,\n ),\n );\n case \"xml\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createXmlLoader(),\n createFlatLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(\n options.isCacheRestore,\n options.returnUnlocalizedKeys,\n ),\n );\n case \"srt\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createSrtLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(\n options.isCacheRestore,\n options.returnUnlocalizedKeys,\n ),\n );\n case \"dato\":\n return composeLoaders(\n createDatoLoader(bucketPathPattern),\n createSyncLoader(),\n createFlatLoader(),\n createUnlocalizableLoader(\n options.isCacheRestore,\n options.returnUnlocalizedKeys,\n ),\n );\n case \"vtt\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createVttLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(\n options.isCacheRestore,\n options.returnUnlocalizedKeys,\n ),\n );\n case \"php\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createPhpLoader(),\n createSyncLoader(),\n createFlatLoader(),\n createUnlocalizableLoader(\n options.isCacheRestore,\n options.returnUnlocalizedKeys,\n ),\n );\n case \"vue-json\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createVueJsonLoader(),\n createSyncLoader(),\n createFlatLoader(),\n createUnlocalizableLoader(\n options.isCacheRestore,\n options.returnUnlocalizedKeys,\n ),\n );\n case \"typescript\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createPrettierLoader({ parser: \"typescript\", bucketPathPattern }),\n createTypescriptLoader(),\n createFlatLoader(),\n createSyncLoader(),\n createLockedKeysLoader(lockedKeys || [], options.isCacheRestore),\n createIgnoredKeysLoader(ignoredKeys || []),\n createUnlocalizableLoader(\n options.isCacheRestore,\n options.returnUnlocalizedKeys,\n ),\n );\n }\n}\n","import { I18nConfig } from \"@lingo.dev/_spec\";\nimport chalk from \"chalk\";\nimport dedent from \"dedent\";\nimport { LocalizerFn } from \"./_base\";\nimport { createLingoLocalizer } from \"./lingo\";\nimport { createBasicTranslator } from \"./basic\";\nimport { createOpenAI } from \"@ai-sdk/openai\";\nimport { colors } from \"../constants\";\nimport { createAnthropic } from \"@ai-sdk/anthropic\";\nimport { createGoogleGenerativeAI } from \"@ai-sdk/google\";\nimport { createOpenRouter } from \"@openrouter/ai-sdk-provider\";\nimport { createOllama } from \"ollama-ai-provider\";\n\nexport default function createProcessor(\n provider: I18nConfig[\"provider\"],\n params: { apiKey?: string; apiUrl: string },\n): LocalizerFn {\n if (!provider) {\n const result = createLingoLocalizer(params);\n return result;\n } else {\n const model = getPureModelProvider(provider);\n const result = createBasicTranslator(model, provider.prompt);\n return result;\n }\n}\n\nfunction getPureModelProvider(provider: I18nConfig[\"provider\"]) {\n const createMissingKeyErrorMessage = (\n providerId: string,\n envVar?: string,\n ) => dedent`\n You're trying to use raw ${chalk.dim(providerId)} API for translation. ${envVar ? `However, ${chalk.dim(envVar)} environment variable is not set.` : \"However, that provider is unavailable.\"}\n\n To fix this issue:\n 1. ${envVar ? `Set ${chalk.dim(envVar)} in your environment variables` : \"Set the environment variable for your provider (if required)\"}, or\n 2. Remove the ${chalk.italic(\"provider\")} node from your i18n.json configuration to switch to ${chalk.hex(colors.green)(\"Lingo.dev\")}\n\n ${chalk.hex(colors.blue)(\"Docs: https://lingo.dev/go/docs\")}\n`;\n\n const createUnsupportedProviderErrorMessage = (providerId?: string) =>\n dedent`\n You're trying to use unsupported provider: ${chalk.dim(providerId)}.\n\n To fix this issue:\n 1. Switch to one of the supported providers, or\n 2. Remove the ${chalk.italic(\"provider\")} node from your i18n.json configuration to switch to ${chalk.hex(colors.green)(\"Lingo.dev\")}\n\n ${chalk.hex(colors.blue)(\"Docs: https://lingo.dev/go/docs\")}\n `;\n\n switch (provider?.id) {\n case \"openai\": {\n if (!process.env.OPENAI_API_KEY) {\n throw new Error(\n createMissingKeyErrorMessage(\"OpenAI\", \"OPENAI_API_KEY\"),\n );\n }\n return createOpenAI({\n apiKey: process.env.OPENAI_API_KEY,\n baseURL: provider.baseUrl,\n })(provider.model);\n }\n case \"anthropic\": {\n if (!process.env.ANTHROPIC_API_KEY) {\n throw new Error(\n createMissingKeyErrorMessage(\"Anthropic\", \"ANTHROPIC_API_KEY\"),\n );\n }\n return createAnthropic({\n apiKey: process.env.ANTHROPIC_API_KEY,\n })(provider.model);\n }\n case \"google\": {\n if (!process.env.GOOGLE_API_KEY) {\n throw new Error(\n createMissingKeyErrorMessage(\"Google\", \"GOOGLE_API_KEY\"),\n );\n }\n return createGoogleGenerativeAI({\n apiKey: process.env.GOOGLE_API_KEY,\n })(provider.model);\n }\n case \"openrouter\": {\n if (!process.env.OPENROUTER_API_KEY) {\n throw new Error(\n createMissingKeyErrorMessage(\"OpenRouter\", \"OPENROUTER_API_KEY\"),\n );\n }\n return createOpenRouter({\n apiKey: process.env.OPENROUTER_API_KEY,\n baseURL: provider.baseUrl,\n })(provider.model);\n }\n case \"ollama\": {\n // No API key check needed for Ollama\n return createOllama()(provider.model);\n }\n default: {\n throw new Error(createUnsupportedProviderErrorMessage(provider?.id));\n }\n }\n}\n","import { LingoDotDevEngine } from \"@lingo.dev/_sdk\";\nimport { LocalizerInput, LocalizerProgressFn } from \"./_base\";\n\nexport function createLingoLocalizer(params: {\n apiKey?: string;\n apiUrl: string;\n}) {\n return async (input: LocalizerInput, onProgress: LocalizerProgressFn) => {\n if (!Object.keys(input.processableData).length) {\n return input.processableData;\n }\n\n const lingo = new LingoDotDevEngine({\n apiKey: params.apiKey,\n apiUrl: params.apiUrl,\n });\n\n const result = await lingo.localizeObject(\n input.processableData,\n {\n sourceLocale: input.sourceLocale,\n targetLocale: input.targetLocale,\n reference: {\n [input.sourceLocale]: input.sourceData,\n [input.targetLocale]: input.targetData,\n },\n },\n onProgress,\n );\n\n return result;\n };\n}\n","import { generateText, LanguageModelV1 } from \"ai\";\nimport { LocalizerInput, LocalizerProgressFn } from \"./_base\";\nimport _ from \"lodash\";\n\nexport function createBasicTranslator(\n model: LanguageModelV1,\n systemPrompt: string,\n) {\n return async (input: LocalizerInput, onProgress: LocalizerProgressFn) => {\n const chunks = extractPayloadChunks(input.processableData);\n\n const subResults: Record<string, any>[] = [];\n for (let i = 0; i < chunks.length; i++) {\n const chunk = chunks[i];\n const result = await doJob({\n ...input,\n processableData: chunk,\n });\n subResults.push(result);\n onProgress((i / chunks.length) * 100, chunk, result);\n }\n\n const result = _.merge({}, ...subResults);\n\n return result;\n };\n\n async function doJob(input: LocalizerInput) {\n if (!Object.keys(input.processableData).length) {\n return input.processableData;\n }\n\n const response = await generateText({\n model,\n messages: [\n {\n role: \"system\",\n content: JSON.stringify({\n role: \"system\",\n content: systemPrompt\n .replaceAll(\"{source}\", input.sourceLocale)\n .replaceAll(\"{target}\", input.targetLocale),\n }),\n },\n {\n role: \"user\",\n content: JSON.stringify({\n sourceLocale: \"en\",\n targetLocale: \"es\",\n data: {\n message: \"Hello, world!\",\n },\n }),\n },\n {\n role: \"assistant\",\n content: JSON.stringify({\n sourceLocale: \"en\",\n targetLocale: \"es\",\n data: {\n message: \"Hola, mundo!\",\n },\n }),\n },\n {\n role: \"user\",\n content: JSON.stringify({\n sourceLocale: input.sourceLocale,\n targetLocale: input.targetLocale,\n data: input.processableData,\n }),\n },\n ],\n });\n\n const result = JSON.parse(response.text);\n\n return result?.data || {};\n }\n}\n\n/**\n * Extract payload chunks based on the ideal chunk size\n * @param payload - The payload to be chunked\n * @returns An array of payload chunks\n */\nfunction extractPayloadChunks(\n payload: Record<string, string>,\n): Record<string, string>[] {\n const idealBatchItemSize = 250;\n const batchSize = 25;\n const result: Record<string, string>[] = [];\n let currentChunk: Record<string, string> = {};\n let currentChunkItemCount = 0;\n\n const payloadEntries = Object.entries(payload);\n for (let i = 0; i < payloadEntries.length; i++) {\n const [key, value] = payloadEntries[i];\n currentChunk[key] = value;\n currentChunkItemCount++;\n\n const currentChunkSize = countWordsInRecord(currentChunk);\n if (\n currentChunkSize > idealBatchItemSize ||\n currentChunkItemCount >= batchSize ||\n i === payloadEntries.length - 1\n ) {\n result.push(currentChunk);\n currentChunk = {};\n currentChunkItemCount = 0;\n }\n }\n\n return result;\n}\n\n/**\n * Count words in a record or array\n * @param payload - The payload to count words in\n * @returns The total number of words\n */\nfunction countWordsInRecord(\n payload: any | Record<string, any> | Array<any>,\n): number {\n if (Array.isArray(payload)) {\n return payload.reduce((acc, item) => acc + countWordsInRecord(item), 0);\n } else if (typeof payload === \"object\" && payload !== null) {\n return Object.values(payload).reduce(\n (acc: number, item) => acc + countWordsInRecord(item),\n 0,\n );\n } else if (typeof payload === \"string\") {\n return payload.trim().split(/\\s+/).filter(Boolean).length;\n } else {\n return 0;\n }\n}\n","export function withExponentialBackoff<T, Args extends any[]>(\n fn: (...args: Args) => Promise<T>,\n maxAttempts: number = 3,\n baseDelay: number = 1000,\n): (...args: Args) => Promise<T> {\n return async (...args: Args): Promise<T> => {\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n try {\n return await fn(...args);\n } catch (error) {\n if (attempt === maxAttempts - 1) throw error;\n\n const delay = baseDelay * Math.pow(2, attempt);\n await new Promise((resolve) => setTimeout(resolve, delay));\n }\n }\n throw new Error(\"Unreachable code\");\n };\n}\n","import pkg from \"node-machine-id\";\nconst { machineIdSync } = pkg;\n\nexport default async function trackEvent(\n distinctId: string | null | undefined,\n event: string,\n properties?: Record<string, any>,\n) {\n if (process.env.DO_NOT_TRACK) {\n return;\n }\n\n try {\n const actualId = distinctId || `device-${machineIdSync()}`;\n\n const { PostHog } = await import(\"posthog-node\");\n const posthog = new PostHog(\n \"phc_eR0iSoQufBxNY36k0f0T15UvHJdTfHlh8rJcxsfhfXk\",\n {\n host: \"https://eu.i.posthog.com\",\n flushAt: 1,\n flushInterval: 0,\n },\n );\n\n await posthog.capture({\n distinctId: actualId,\n event,\n properties: {\n ...properties,\n meta: {\n version: process.env.npm_package_version,\n isCi: process.env.CI === \"true\",\n },\n },\n });\n\n await posthog.shutdown();\n } catch (error) {\n if (process.env.DEBUG) {\n console.error(error);\n }\n }\n}\n","import _ from \"lodash\";\nimport z from \"zod\";\nimport { md5 } from \"./md5\";\nimport { tryReadFile, writeFile, checkIfFileExists } from \"../utils/fs\";\nimport * as path from \"path\";\nimport YAML from \"yaml\";\n\nconst LockSchema = z.object({\n version: z.literal(1).default(1),\n checksums: z\n .record(\n z.string(), // localizable files' keys\n // checksums hashmap\n z\n .record(\n // key\n z.string(),\n // checksum of the key's value in the source locale\n z.string(),\n )\n .default({}),\n )\n .default({}),\n});\nexport type LockData = z.infer<typeof LockSchema>;\n\nexport function createDeltaProcessor(fileKey: string) {\n const lockfilePath = path.join(process.cwd(), \"i18n.lock\");\n return {\n async checkIfLockExists() {\n return checkIfFileExists(lockfilePath);\n },\n async calculateDelta(params: {\n sourceData: Record<string, any>;\n targetData: Record<string, any>;\n checksums: Record<string, string>;\n }) {\n let added = _.difference(Object.keys(params.sourceData), Object.keys(params.targetData));\n let removed = _.difference(Object.keys(params.targetData), Object.keys(params.sourceData));\n const updated = _.filter(Object.keys(params.sourceData), (key) => {\n return md5(params.sourceData[key]) !== params.checksums[key] && params.checksums[key];\n });\n\n const renamed: [string, string][] = [];\n for (const addedKey of added) {\n const addedHash = md5(params.sourceData[addedKey]);\n for (const removedKey of removed) {\n if (params.checksums[removedKey] === addedHash) {\n renamed.push([removedKey, addedKey]);\n break;\n }\n }\n }\n added = added.filter((key) => !renamed.some(([oldKey, newKey]) => newKey === key));\n removed = removed.filter((key) => !renamed.some(([oldKey, newKey]) => oldKey === key));\n\n const hasChanges = [added.length > 0, removed.length > 0, updated.length > 0, renamed.length > 0].some((v) => v);\n\n return {\n added,\n removed,\n updated,\n renamed,\n hasChanges,\n };\n },\n async loadLock() {\n const lockfileContent = tryReadFile(lockfilePath, null);\n const lockfileYaml = lockfileContent ? YAML.parse(lockfileContent) : null;\n const lockfileData: z.infer<typeof LockSchema> = lockfileYaml\n ? LockSchema.parse(lockfileYaml)\n : {\n version: 1,\n checksums: {},\n };\n return lockfileData;\n },\n async saveLock(lockData: LockData) {\n const lockfileYaml = YAML.stringify(lockData);\n writeFile(lockfilePath, lockfileYaml);\n },\n async loadChecksums() {\n const id = md5(fileKey);\n const lockfileData = await this.loadLock();\n return lockfileData.checksums[id] || {};\n },\n async saveChecksums(checksums: Record<string, string>) {\n const id = md5(fileKey);\n const lockfileData = await this.loadLock();\n lockfileData.checksums[id] = checksums;\n await this.saveLock(lockfileData);\n },\n async createChecksums(sourceData: Record<string, any>) {\n const checksums = _.mapValues(sourceData, (value) => md5(value));\n return checksums;\n },\n };\n}\n","import * as fs from \"fs\";\nimport * as path from \"path\";\n\nexport function tryReadFile(filePath: string, defaultValue: string | null = null): string | null {\n try {\n const content = fs.readFileSync(filePath, \"utf-8\");\n return content;\n } catch (error) {\n return defaultValue;\n }\n}\n\nexport function writeFile(filePath: string, content: string) {\n // create dirs\n const dir = path.dirname(filePath);\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true });\n }\n fs.writeFileSync(filePath, content);\n}\n\nexport function checkIfFileExists(filePath: string) {\n return fs.existsSync(filePath);\n}\n","import { Command } from \"interactive-commander\";\nimport Z from \"zod\";\nimport Ora from \"ora\";\nimport { createLockfileHelper } from \"../utils/lockfile\";\nimport { bucketTypeSchema, resolveOverriddenLocale } from \"@lingo.dev/_spec\";\nimport { getConfig } from \"../utils/config\";\nimport createBucketLoader from \"../loaders\";\nimport { getBuckets } from \"../utils/buckets\";\n\nexport default new Command()\n .command(\"lockfile\")\n .description(\"Create a lockfile if it does not exist\")\n .helpOption(\"-h, --help\", \"Show help\")\n .option(\"-f, --force\", \"Force create a lockfile\")\n .action(async (options) => {\n const flags = flagsSchema.parse(options);\n const ora = Ora();\n\n const lockfileHelper = createLockfileHelper();\n if (lockfileHelper.isLockfileExists() && !flags.force) {\n ora.warn(`Lockfile won't be created because it already exists. Use --force to overwrite.`);\n } else {\n const i18nConfig = getConfig();\n const buckets = getBuckets(i18nConfig!);\n\n for (const bucket of buckets) {\n for (const bucketConfig of bucket.paths) {\n const sourceLocale = resolveOverriddenLocale(i18nConfig!.locale.source, bucketConfig.delimiter);\n const bucketLoader = createBucketLoader(bucket.type, bucketConfig.pathPattern, {\n isCacheRestore: false,\n defaultLocale: sourceLocale,\n });\n bucketLoader.setDefaultLocale(sourceLocale);\n\n const sourceData = await bucketLoader.pull(sourceLocale);\n lockfileHelper.registerSourceData(bucketConfig.pathPattern, sourceData);\n }\n }\n ora.succeed(\"Lockfile created\");\n }\n });\n\nconst flagsSchema = Z.object({\n force: Z.boolean().default(false),\n});\n","import fs from \"fs\";\nimport path from \"path\";\nimport Z from \"zod\";\nimport YAML from \"yaml\";\nimport { MD5 } from \"object-hash\";\nimport _ from \"lodash\";\n\nexport function createLockfileHelper() {\n return {\n isLockfileExists: () => {\n const lockfilePath = _getLockfilePath();\n return fs.existsSync(lockfilePath);\n },\n registerSourceData: (pathPattern: string, sourceData: Record<string, any>) => {\n const lockfile = _loadLockfile();\n\n const sectionKey = MD5(pathPattern);\n const sectionChecksums = _.mapValues(sourceData, (value) => MD5(value));\n\n lockfile.checksums[sectionKey] = sectionChecksums;\n\n _saveLockfile(lockfile);\n },\n registerPartialSourceData: (pathPattern: string, partialSourceData: Record<string, any>) => {\n const lockfile = _loadLockfile();\n\n const sectionKey = MD5(pathPattern);\n const sectionChecksums = _.mapValues(partialSourceData, (value) => MD5(value));\n\n lockfile.checksums[sectionKey] = _.merge({}, lockfile.checksums[sectionKey] ?? {}, sectionChecksums);\n\n _saveLockfile(lockfile);\n },\n extractUpdatedData: (pathPattern: string, sourceData: Record<string, any>) => {\n const lockfile = _loadLockfile();\n\n const sectionKey = MD5(pathPattern);\n const currentChecksums = _.mapValues(sourceData, (value) => MD5(value));\n\n const savedChecksums = lockfile.checksums[sectionKey] || {};\n const updatedData = _.pickBy(sourceData, (value, key) => savedChecksums[key] !== currentChecksums[key]);\n\n return updatedData;\n },\n };\n\n function _loadLockfile() {\n const lockfilePath = _getLockfilePath();\n if (!fs.existsSync(lockfilePath)) {\n return LockfileSchema.parse({});\n }\n const content = fs.readFileSync(lockfilePath, \"utf-8\");\n const result = LockfileSchema.parse(YAML.parse(content));\n return result;\n }\n\n function _saveLockfile(lockfile: Z.infer<typeof LockfileSchema>) {\n const lockfilePath = _getLockfilePath();\n const content = YAML.stringify(lockfile);\n fs.writeFileSync(lockfilePath, content);\n }\n\n function _getLockfilePath() {\n return path.join(process.cwd(), \"i18n.lock\");\n }\n}\n\nconst LockfileSchema = Z.object({\n version: Z.literal(1).default(1),\n checksums: Z.record(\n Z.string(), // localizable files' keys\n Z.record(\n // checksums hashmap\n Z.string(), // key\n Z.string(), // checksum of the key's value in the source locale\n ).default({}),\n ).default({}),\n});\n","import { I18nConfig, resolveOverriddenLocale } from \"@lingo.dev/_spec\";\nimport { Command } from \"interactive-commander\";\nimport _ from \"lodash\";\nimport { getConfig } from \"../utils/config\";\nimport { CLIError } from \"../utils/errors\";\nimport Ora from \"ora\";\nimport createBucketLoader from \"../loaders\";\nimport { getBuckets } from \"../utils/buckets\";\n\nexport default new Command()\n .command(\"cleanup\")\n .description(\"Remove keys from target files that do not exist in the source file\")\n .helpOption(\"-h, --help\", \"Show help\")\n .option(\"--locale <locale>\", \"Specific locale to cleanup\")\n .option(\"--bucket <bucket>\", \"Specific bucket to cleanup\")\n .option(\"--dry-run\", \"Show what would be removed without making changes\")\n .option(\n \"--verbose\",\n \"Show detailed output including:\\n\" + \" - List of keys that would be removed.\\n\" + \" - Processing steps.\",\n )\n .action(async function (options) {\n const ora = Ora();\n const results: any = [];\n\n try {\n ora.start(\"Loading configuration...\");\n const i18nConfig = getConfig();\n validateConfig(i18nConfig);\n ora.succeed(\"Configuration loaded\");\n\n let buckets = getBuckets(i18nConfig!);\n if (options.bucket) {\n buckets = buckets.filter((bucket: any) => bucket.type === options.bucket);\n }\n\n const targetLocales = options.locale ? [options.locale] : i18nConfig!.locale.targets;\n\n // Process each bucket\n for (const bucket of buckets) {\n console.log();\n ora.info(`Processing bucket: ${bucket.type}`);\n\n for (const bucketConfig of bucket.paths) {\n const sourceLocale = resolveOverriddenLocale(i18nConfig!.locale.source, bucketConfig.delimiter);\n const bucketOra = Ora({ indent: 2 }).info(`Processing path: ${bucketConfig.pathPattern}`);\n const bucketLoader = createBucketLoader(bucket.type, bucketConfig.pathPattern, {\n isCacheRestore: false,\n defaultLocale: sourceLocale,\n });\n bucketLoader.setDefaultLocale(sourceLocale);\n\n // Load source data\n const sourceData = await bucketLoader.pull(sourceLocale);\n const sourceKeys = Object.keys(sourceData);\n\n for (const _targetLocale of targetLocales) {\n const targetLocale = resolveOverriddenLocale(_targetLocale, bucketConfig.delimiter);\n try {\n const targetData = await bucketLoader.pull(targetLocale);\n const targetKeys = Object.keys(targetData);\n const keysToRemove = _.difference(targetKeys, sourceKeys);\n\n if (keysToRemove.length === 0) {\n bucketOra.succeed(`[${targetLocale}] No keys to remove`);\n continue;\n }\n\n if (options.verbose) {\n bucketOra.info(`[${targetLocale}] Keys to remove: ${JSON.stringify(keysToRemove, null, 2)}`);\n }\n\n if (!options.dryRun) {\n const cleanedData = _.pick(targetData, sourceKeys);\n await bucketLoader.push(targetLocale, cleanedData);\n bucketOra.succeed(`[${targetLocale}] Removed ${keysToRemove.length} keys`);\n } else {\n bucketOra.succeed(`[${targetLocale}] Would remove ${keysToRemove.length} keys (dry run)`);\n }\n } catch (error: any) {\n bucketOra.fail(`[${targetLocale}] Failed to cleanup: ${error.message}`);\n results.push({\n step: `Cleanup ${bucket.type}/${bucketConfig} for ${targetLocale}`,\n status: \"Failed\",\n error: error.message,\n });\n }\n }\n }\n }\n\n console.log();\n ora.succeed(\"Cleanup completed!\");\n } catch (error: any) {\n ora.fail(error.message);\n process.exit(1);\n } finally {\n displaySummary(results);\n }\n });\n\nfunction validateConfig(i18nConfig: I18nConfig | null) {\n if (!i18nConfig) {\n throw new CLIError({\n message: \"i18n.json not found. Please run `lingo.dev init` to initialize the project.\",\n docUrl: \"i18nNotFound\",\n });\n }\n if (!i18nConfig.buckets || !Object.keys(i18nConfig.buckets).length) {\n throw new CLIError({\n message: \"No buckets found in i18n.json. Please add at least one bucket containing i18n content.\",\n docUrl: \"bucketNotFound\",\n });\n }\n}\n\nfunction displaySummary(results: any[]) {\n if (results.length === 0) return;\n\n console.log(\"\\nProcess Summary:\");\n results.forEach((result) => {\n console.log(`${result.step}: ${result.status}`);\n if (result.error) console.log(` - Error: ${result.error}`);\n });\n}\n","import { Command } from \"interactive-commander\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport { McpServer } from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport Z from \"zod\";\nimport { ReplexicaEngine } from \"@lingo.dev/_sdk\";\nimport { getSettings } from \"../utils/settings\";\nimport { createAuthenticator } from \"../utils/auth\";\n\nexport default new Command()\n .command(\"mcp\")\n .description(\"Use Lingo.dev model context provider with your AI agent\")\n .helpOption(\"-h, --help\", \"Show help\")\n .action(async (_, program) => {\n const apiKey = program.args[0];\n const settings = getSettings(apiKey);\n\n if (!settings.auth.apiKey) {\n console.error(\"No API key provided\");\n return;\n }\n\n const authenticator = createAuthenticator({\n apiUrl: settings.auth.apiUrl,\n apiKey: settings.auth.apiKey!,\n });\n const auth = await authenticator.whoami();\n\n if (!auth) {\n console.error(\"Not authenticated\");\n return;\n } else {\n console.log(`Authenticated as ${auth.email}`);\n }\n\n const replexicaEngine = new ReplexicaEngine({\n apiKey: settings.auth.apiKey,\n apiUrl: settings.auth.apiUrl,\n });\n\n const server = new McpServer({\n name: \"Lingo.dev\",\n version: \"1.0.0\",\n });\n\n server.tool(\n \"translate\",\n \"Detect language and translate text with Lingo.dev.\",\n {\n text: Z.string(),\n targetLocale: Z.string().regex(/^[a-z]{2}(-[A-Z]{2})?$/),\n },\n async ({ text, targetLocale }) => {\n const sourceLocale = await replexicaEngine.recognizeLocale(text);\n const data = await replexicaEngine.localizeText(text, {\n sourceLocale,\n targetLocale,\n });\n return { content: [{ type: \"text\", text: data }] };\n },\n );\n\n const transport = new StdioServerTransport();\n await server.connect(transport);\n console.log(\"Lingo.dev MCP Server running on stdio\");\n });\n","import { Command } from \"interactive-commander\";\nimport createOra from \"ora\";\nimport { getSettings } from \"../../utils/settings\";\nimport { createAuthenticator } from \"../../utils/auth\";\nimport { IIntegrationFlow } from \"./flows/_base\";\nimport { PullRequestFlow } from \"./flows/pull-request\";\nimport { InBranchFlow } from \"./flows/in-branch\";\nimport { getPlatformKit } from \"./platforms\";\n\ninterface CIOptions {\n parallel?: boolean;\n apiKey?: string;\n debug?: boolean;\n pullRequest?: boolean;\n commitMessage?: string;\n pullRequestTitle?: string;\n workingDirectory?: string;\n processOwnCommits?: boolean;\n}\n\nexport default new Command()\n .command(\"ci\")\n .description(\"Run Lingo.dev CI/CD action\")\n .helpOption(\"-h, --help\", \"Show help\")\n .option(\"--parallel [boolean]\", \"Run in parallel mode\", parseBooleanArg)\n .option(\"--api-key <key>\", \"API key\")\n .option(\n \"--pull-request [boolean]\",\n \"Create a pull request with the changes\",\n parseBooleanArg,\n )\n .option(\"--commit-message <message>\", \"Commit message\")\n .option(\"--pull-request-title <title>\", \"Pull request title\")\n .option(\"--working-directory <dir>\", \"Working directory\")\n .option(\n \"--process-own-commits [boolean]\",\n \"Process commits made by this action\",\n parseBooleanArg,\n )\n .action(async (options: CIOptions) => {\n const settings = getSettings(options.apiKey);\n\n console.log(options);\n\n if (!settings.auth.apiKey) {\n console.error(\"No API key provided\");\n return;\n }\n\n const authenticator = createAuthenticator({\n apiUrl: settings.auth.apiUrl,\n apiKey: settings.auth.apiKey,\n });\n const auth = await authenticator.whoami();\n\n if (!auth) {\n console.error(\"Not authenticated\");\n return;\n }\n\n const env = {\n LINGODOTDEV_API_KEY: settings.auth.apiKey,\n LINGODOTDEV_PULL_REQUEST: options.pullRequest?.toString() || \"false\",\n ...(options.commitMessage && {\n LINGODOTDEV_COMMIT_MESSAGE: options.commitMessage,\n }),\n ...(options.pullRequestTitle && {\n LINGODOTDEV_PULL_REQUEST_TITLE: options.pullRequestTitle,\n }),\n ...(options.workingDirectory && {\n LINGODOTDEV_WORKING_DIRECTORY: options.workingDirectory,\n }),\n ...(options.processOwnCommits && {\n LINGODOTDEV_PROCESS_OWN_COMMITS: options.processOwnCommits.toString(),\n }),\n };\n\n process.env = { ...process.env, ...env };\n\n const ora = createOra();\n const platformKit = getPlatformKit();\n const { isPullRequestMode } = platformKit.config;\n\n ora.info(`Pull request mode: ${isPullRequestMode ? \"on\" : \"off\"}`);\n\n const flow: IIntegrationFlow = isPullRequestMode\n ? new PullRequestFlow(ora, platformKit)\n : new InBranchFlow(ora, platformKit);\n\n const canRun = await flow.preRun?.();\n if (canRun === false) {\n return;\n }\n\n const hasChanges = await flow.run({\n parallel: options.parallel,\n });\n if (!hasChanges) {\n return;\n }\n\n await flow.postRun?.();\n });\n\nfunction parseBooleanArg(val: string | boolean | undefined): boolean {\n if (val === true) return true;\n if (typeof val === \"string\") {\n return val.toLowerCase() === \"true\";\n }\n return false;\n}\n","import { execSync } from \"child_process\";\nimport { InBranchFlow } from \"./in-branch\";\nimport { IIntegrationFlowOptions } from \"./_base\";\n\nexport class PullRequestFlow extends InBranchFlow {\n async preRun() {\n const canContinue = await super.preRun?.();\n if (!canContinue) {\n return false;\n }\n\n this.ora.start(\"Calculating automated branch name\");\n this.i18nBranchName = this.calculatePrBranchName();\n this.ora.succeed(\n `Automated branch name calculated: ${this.i18nBranchName}`,\n );\n\n this.ora.start(\"Checking if branch exists\");\n const branchExists = await this.checkBranchExistance(this.i18nBranchName);\n this.ora.succeed(branchExists ? \"Branch exists\" : \"Branch does not exist\");\n\n if (branchExists) {\n this.ora.start(`Checking out branch ${this.i18nBranchName}`);\n this.checkoutI18nBranch(this.i18nBranchName);\n this.ora.succeed(`Checked out branch ${this.i18nBranchName}`);\n\n this.ora.start(\n `Syncing with ${this.platformKit.platformConfig.baseBranchName}`,\n );\n this.syncI18nBranch();\n this.ora.succeed(`Checked out and synced branch ${this.i18nBranchName}`);\n } else {\n this.ora.start(`Creating branch ${this.i18nBranchName}`);\n this.createI18nBranch(this.i18nBranchName);\n this.ora.succeed(`Created branch ${this.i18nBranchName}`);\n }\n\n return true;\n }\n\n override async run(options: IIntegrationFlowOptions) {\n return super.run({\n force: true,\n ...options,\n });\n }\n\n async postRun() {\n if (!this.i18nBranchName) {\n throw new Error(\n \"i18nBranchName is not set. Did you forget to call preRun?\",\n );\n }\n\n this.ora.start(\"Checking if PR already exists\");\n const pullRequestNumber = await this.ensureFreshPr(this.i18nBranchName);\n // await this.createLabelIfNotExists(pullRequestNumber, 'lingo.dev/i18n', false);\n this.ora.succeed(\n `Pull request ready: ${this.platformKit.buildPullRequestUrl(pullRequestNumber)}`,\n );\n }\n\n private calculatePrBranchName(): string {\n return `lingo.dev/${this.platformKit.platformConfig.baseBranchName}`;\n }\n\n private async checkBranchExistance(prBranchName: string) {\n return this.platformKit.branchExists({\n branch: prBranchName,\n });\n }\n\n private async ensureFreshPr(i18nBranchName: string) {\n // Check if PR exists\n this.ora.start(\n `Checking for existing PR with head ${i18nBranchName} and base ${this.platformKit.platformConfig.baseBranchName}`,\n );\n let prNumber = await this.platformKit.getOpenPullRequestNumber({\n branch: i18nBranchName,\n });\n\n if (prNumber) {\n this.ora.succeed(`Existing PR found: #${prNumber}`);\n } else {\n // Create new PR\n this.ora.start(`Creating new PR`);\n prNumber = await this.platformKit.createPullRequest({\n head: i18nBranchName,\n title: this.platformKit.config.pullRequestTitle,\n body: this.getPrBodyContent(),\n });\n this.ora.succeed(`Created new PR: #${prNumber}`);\n }\n\n return prNumber;\n }\n\n private checkoutI18nBranch(i18nBranchName: string) {\n execSync(`git fetch origin ${i18nBranchName}`, { stdio: \"inherit\" });\n execSync(`git checkout -b ${i18nBranchName}`, {\n stdio: \"inherit\",\n });\n }\n\n private createI18nBranch(i18nBranchName: string) {\n try {\n execSync(\n `git fetch origin ${this.platformKit.platformConfig.baseBranchName}`,\n { stdio: \"inherit\" },\n );\n execSync(\n `git checkout -b ${i18nBranchName} origin/${this.platformKit.platformConfig.baseBranchName}`,\n {\n stdio: \"inherit\",\n },\n );\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : \"Unknown error occurred\";\n this.ora.fail(`Failed to create branch: ${errorMessage}`);\n this.ora.info(`\n Troubleshooting tips:\n 1. Make sure you have permission to create branches\n 2. Check if the branch already exists locally (try 'git branch -a')\n 3. Verify connectivity to remote repository\n `);\n throw new Error(`Branch creation failed: ${errorMessage}`);\n }\n }\n\n private syncI18nBranch() {\n if (!this.i18nBranchName) {\n throw new Error(\"i18nBranchName is not set\");\n }\n\n this.ora.start(\n `Fetching latest changes from ${this.platformKit.platformConfig.baseBranchName}`,\n );\n execSync(\n `git fetch origin ${this.platformKit.platformConfig.baseBranchName}`,\n { stdio: \"inherit\" },\n );\n this.ora.succeed(\n `Fetched latest changes from ${this.platformKit.platformConfig.baseBranchName}`,\n );\n\n try {\n this.ora.start(\"Attempting to rebase branch\");\n execSync(\n `git rebase origin/${this.platformKit.platformConfig.baseBranchName}`,\n { stdio: \"inherit\" },\n );\n this.ora.succeed(\"Successfully rebased branch\");\n } catch (error) {\n this.ora.warn(\"Rebase failed, falling back to alternative sync method\");\n\n this.ora.start(\"Aborting failed rebase\");\n execSync(\"git rebase --abort\", { stdio: \"inherit\" });\n this.ora.succeed(\"Aborted failed rebase\");\n\n this.ora.start(\n `Resetting to ${this.platformKit.platformConfig.baseBranchName}`,\n );\n execSync(\n `git reset --hard origin/${this.platformKit.platformConfig.baseBranchName}`,\n { stdio: \"inherit\" },\n );\n this.ora.succeed(\n `Reset to ${this.platformKit.platformConfig.baseBranchName}`,\n );\n\n this.ora.start(\"Restoring target files\");\n const targetFiles = [\"i18n.lock\"];\n const targetFileNames = execSync(\n `npx lingo.dev@latest show files --target ${this.platformKit.platformConfig.baseBranchName}`,\n { encoding: \"utf8\" },\n )\n .split(\"\\n\")\n .filter(Boolean);\n targetFiles.push(...targetFileNames);\n execSync(`git fetch origin ${this.i18nBranchName}`, { stdio: \"inherit\" });\n for (const file of targetFiles) {\n try {\n // bring all files to the i18n branch's state\n execSync(`git checkout FETCH_HEAD -- ${file}`, { stdio: \"inherit\" });\n } catch (error) {\n // If file doesn't exist in FETCH_HEAD, that's okay - just skip it\n this.ora.warn(`Skipping non-existent file: ${file}`);\n continue;\n }\n }\n this.ora.succeed(\"Restored target files\");\n }\n\n this.ora.start(\"Checking for changes to commit\");\n const hasChanges = this.checkCommitableChanges();\n if (hasChanges) {\n execSync(\"git add .\", { stdio: \"inherit\" });\n execSync(\n `git commit -m \"chore: sync with ${this.platformKit.platformConfig.baseBranchName}\" --no-verify`,\n {\n stdio: \"inherit\",\n },\n );\n this.ora.succeed(\"Committed additional changes\");\n } else {\n this.ora.succeed(\"No changes to commit\");\n }\n }\n\n private getPrBodyContent(): string {\n return `\nHey team,\n\n[**Lingo.dev**](https://lingo.dev) here with fresh translations!\n\n### In this update\n\n- Added missing translations\n- Performed brand voice, context and glossary checks\n- Enhanced translations using Lingo.dev Localization Engine\n\n### Next Steps\n\n- [ ] Review the changes\n- [ ] Merge when ready\n `.trim();\n }\n}\n","import { execSync } from \"child_process\";\nimport path from \"path\";\nimport {\n gitConfig,\n IntegrationFlow,\n escapeShellArg,\n IIntegrationFlowOptions,\n} from \"./_base\";\nimport i18nCmd from \"../../i18n\";\nimport runCmd from \"../../run\";\n\nexport class InBranchFlow extends IntegrationFlow {\n async preRun() {\n this.ora.start(\"Configuring git\");\n const canContinue = this.configureGit();\n this.ora.succeed(\"Git configured\");\n\n return canContinue;\n }\n\n async run(options: IIntegrationFlowOptions) {\n this.ora.start(\"Running Lingo.dev\");\n await this.runLingoDotDev(options.parallel);\n this.ora.succeed(\"Done running Lingo.dev\");\n\n execSync(`rm -f i18n.cache`, { stdio: \"inherit\" }); // do not commit cache file if it exists\n\n this.ora.start(\"Checking for changes\");\n const hasChanges = this.checkCommitableChanges();\n this.ora.succeed(hasChanges ? \"Changes detected\" : \"No changes detected\");\n\n if (hasChanges) {\n this.ora.start(\"Committing changes\");\n execSync(`git add .`, { stdio: \"inherit\" });\n execSync(`git status --porcelain`, { stdio: \"inherit\" });\n execSync(\n `git commit -m ${escapeShellArg(this.platformKit.config.commitMessage)} --no-verify`,\n {\n stdio: \"inherit\",\n },\n );\n this.ora.succeed(\"Changes committed\");\n\n this.ora.start(\"Pushing changes to remote\");\n const currentBranch =\n this.i18nBranchName ?? this.platformKit.platformConfig.baseBranchName;\n execSync(\n `git push origin ${currentBranch} ${options.force ? \"--force\" : \"\"}`,\n {\n stdio: \"inherit\",\n },\n );\n this.ora.succeed(\"Changes pushed to remote\");\n }\n\n return hasChanges;\n }\n\n protected checkCommitableChanges() {\n return (\n execSync('git status --porcelain || echo \"has_changes\"', {\n encoding: \"utf8\",\n }).length > 0\n );\n }\n\n private async runLingoDotDev(isParallel?: boolean) {\n try {\n if (!isParallel) {\n await i18nCmd\n .exitOverride()\n .parseAsync([\"--api-key\", this.platformKit.config.replexicaApiKey], {\n from: \"user\",\n });\n } else {\n await runCmd\n .exitOverride()\n .parseAsync([\"--api-key\", this.platformKit.config.replexicaApiKey], {\n from: \"user\",\n });\n }\n } catch (err: any) {\n if (err.code === \"commander.helpDisplayed\") return;\n throw err;\n }\n }\n\n private configureGit() {\n const { processOwnCommits } = this.platformKit.config;\n const { baseBranchName } = this.platformKit.platformConfig;\n\n this.ora.info(`Current working directory:`);\n execSync(`pwd`, { stdio: \"inherit\" });\n execSync(`ls -la`, { stdio: \"inherit\" });\n\n execSync(`git config --global safe.directory ${process.cwd()}`);\n\n execSync(`git config user.name \"${gitConfig.userName}\"`);\n execSync(`git config user.email \"${gitConfig.userEmail}\"`);\n\n // perform platform-specific configuration before fetching or pushing to the remote\n this.platformKit?.gitConfig();\n\n execSync(`git fetch origin ${baseBranchName}`, { stdio: \"inherit\" });\n execSync(`git checkout ${baseBranchName} --`, { stdio: \"inherit\" });\n\n if (!processOwnCommits) {\n const currentAuthor = `${gitConfig.userName} <${gitConfig.userEmail}>`;\n const authorOfLastCommit = execSync(\n `git log -1 --pretty=format:'%an <%ae>'`,\n ).toString();\n if (authorOfLastCommit === currentAuthor) {\n this.ora.warn(\n `The last commit was already made by ${currentAuthor}, so this run will be skipped, as running again would have no effect. See docs: https://docs.lingo.dev/ci-action/overview`,\n );\n return false;\n }\n }\n\n const workingDir = path.resolve(\n process.cwd(),\n this.platformKit.config.workingDir,\n );\n if (workingDir !== process.cwd()) {\n this.ora.info(\n `Changing to working directory: ${this.platformKit.config.workingDir}`,\n );\n process.chdir(workingDir);\n }\n\n return true;\n }\n}\n","import { Ora } from \"ora\";\nimport { PlatformKit } from \"../platforms/_base\";\n\nexport type IIntegrationFlowOptions = {\n parallel?: boolean;\n force?: boolean;\n};\n\nexport interface IIntegrationFlow {\n preRun?(): Promise<boolean>;\n run(options: IIntegrationFlowOptions): Promise<boolean>;\n postRun?(): Promise<void>;\n}\n\nexport abstract class IntegrationFlow implements IIntegrationFlow {\n protected i18nBranchName?: string;\n\n constructor(\n protected ora: Ora,\n protected platformKit: PlatformKit,\n ) {}\n\n abstract run(options: IIntegrationFlowOptions): Promise<boolean>;\n}\n\nexport const gitConfig = {\n userName: \"Lingo.dev\",\n userEmail: \"support@lingo.dev\",\n};\n\nexport function escapeShellArg(arg: string): string {\n return `'${arg.replace(/'/g, \"'\\\\''\")}'`;\n}\n","import { Command } from \"interactive-commander\";\nimport setup from \"./setup\";\nimport plan from \"./plan\";\nimport execute from \"./execute\";\nimport { CmdRunContext, flagsSchema } from \"./_types\";\nimport {\n renderClear,\n renderSpacer,\n renderBanner,\n renderHero,\n pauseIfDebug,\n renderSummary,\n} from \"../../utils/ui\";\nimport chalk from \"chalk\";\nimport trackEvent from \"../../utils/observability\";\nimport { determineAuthId } from \"./_utils\";\n\nexport default new Command()\n .command(\"run\")\n .description(\"Run Lingo.dev localization engine\")\n .helpOption(\"-h, --help\", \"Show help\")\n .option(\n \"--source-locale <source-locale>\",\n \"Locale to use as source locale. Defaults to i18n.json locale.source\",\n )\n .option(\n \"--target-locale <target-locale>\",\n \"Locale to use as target locale. Defaults to i18n.json locale.targets\",\n (val: string, prev: string[]) => (prev ? [...prev, val] : [val]),\n )\n .option(\n \"--bucket <bucket>\",\n \"Bucket to process\",\n (val: string, prev: string[]) => (prev ? [...prev, val] : [val]),\n )\n .option(\n \"--file <file>\",\n \"File to process. Process only files that include this string in their path. Useful if you have a lot of files and want to focus on a specific one. Specify more files separated by commas or spaces.\",\n (val: string, prev: string[]) => (prev ? [...prev, val] : [val]),\n )\n .option(\n \"--key <key>\",\n \"Key to process. Process only a specific translation key, useful for updating a single entry\",\n (val: string, prev: string[]) => (prev ? [...prev, val] : [val]),\n )\n .option(\n \"--force\",\n \"Ignore lockfile and process all keys, useful for full re-translation\",\n )\n .option(\n \"--api-key <api-key>\",\n \"Explicitly set the API key to use, override the default API key from settings\",\n )\n .option(\n \"--debug\",\n \"Pause execution at start for debugging purposes, waits for user confirmation before proceeding\",\n )\n .option(\n \"--concurrency <concurrency>\",\n \"Number of concurrent tasks to run\",\n (val: string) => parseInt(val),\n )\n .action(async (args) => {\n let authId: string | null = null;\n try {\n const ctx: CmdRunContext = {\n flags: flagsSchema.parse(args),\n config: null,\n results: new Map(),\n tasks: [],\n localizer: null,\n };\n\n await pauseIfDebug(ctx.flags.debug);\n await renderClear();\n await renderSpacer();\n await renderBanner();\n await renderHero();\n await renderSpacer();\n\n await setup(ctx);\n\n authId = await determineAuthId(ctx);\n\n trackEvent(authId, \"cmd.run.start\", {\n config: ctx.config,\n flags: ctx.flags,\n });\n\n await renderSpacer();\n\n await plan(ctx);\n await renderSpacer();\n\n await execute(ctx);\n await renderSpacer();\n\n await renderSummary(ctx.results);\n await renderSpacer();\n\n trackEvent(authId, \"cmd.run.success\", {\n config: ctx.config,\n flags: ctx.flags,\n });\n } catch (error: any) {\n trackEvent(authId || \"unknown\", \"cmd.run.error\", {});\n process.exit(1);\n }\n });\n","import chalk from \"chalk\";\nimport { Listr } from \"listr2\";\nimport { colors } from \"../../constants\";\nimport { CmdRunContext, flagsSchema } from \"./_types\";\nimport { commonTaskRendererOptions } from \"./_const\";\nimport { getConfig } from \"../../utils/config\";\nimport createLocalizer from \"../../localizer\";\n\nexport default async function setup(input: CmdRunContext) {\n console.log(chalk.hex(colors.orange)(\"[Setup]\"));\n\n return new Listr<CmdRunContext>(\n [\n {\n title: \"Setting up the environment\",\n task: async (ctx, task) => {\n // setup gitignore, etc here\n task.title = `Environment setup completed`;\n },\n },\n {\n title: \"Loading i18n configuration\",\n task: async (ctx, task) => {\n ctx.config = getConfig(true);\n\n if (!ctx.config) {\n throw new Error(\n \"i18n.json not found. Please run `lingo.dev init` to initialize the project.\",\n );\n } else if (\n !ctx.config.buckets ||\n !Object.keys(ctx.config.buckets).length\n ) {\n throw new Error(\n \"No buckets found in i18n.json. Please add at least one bucket containing i18n content.\",\n );\n } else if (\n ctx.flags.bucket?.some(\n (bucket) =>\n !ctx.config?.buckets[bucket as keyof typeof ctx.config.buckets],\n )\n ) {\n throw new Error(\n `One or more specified buckets do not exist in i18n.json. Please add them to the list first and try again.`,\n );\n }\n task.title = `Loaded i18n configuration`;\n },\n },\n {\n title: \"Selecting localization provider\",\n task: async (ctx, task) => {\n ctx.localizer = createLocalizer(\n ctx.config?.provider,\n ctx.flags.apiKey,\n );\n if (!ctx.localizer) {\n throw new Error(\n \"Could not create localization provider. Please check your i18n.json configuration.\",\n );\n }\n task.title =\n ctx.localizer.id === \"Lingo.dev\"\n ? `Using ${chalk.hex(colors.green)(ctx.localizer.id)} provider`\n : `Using raw ${chalk.hex(colors.yellow)(ctx.localizer.id)} API`;\n },\n },\n {\n title: \"Checking authentication\",\n task: async (ctx, task) => {\n const authStatus = await ctx.localizer!.checkAuth();\n if (!authStatus.authenticated) {\n throw new Error(\n `Failed to authenticate with ${chalk.hex(colors.yellow)(ctx.localizer!.id)} provider. Please check your API key and try again.`,\n );\n }\n task.title = `Authenticated as ${chalk.hex(colors.yellow)(authStatus.username)}`;\n },\n },\n {\n title: \"Initializing localization provider\",\n async task(ctx, task) {\n const isLingoDotDev = ctx.localizer!.id === \"Lingo.dev\";\n\n const subTasks = isLingoDotDev\n ? [\n \"Brand voice enabled\",\n \"Translation memory connected\",\n \"Glossary enabled\",\n \"Quality assurance enabled\",\n ].map((title) => ({ title, task: () => {} }))\n : [\n \"Skipping brand voice\",\n \"Skipping glossary\",\n \"Skipping translation memory\",\n \"Skipping quality assurance\",\n ].map((title) => ({ title, task: () => {}, skip: true }));\n\n return task.newListr(subTasks, {\n concurrent: true,\n rendererOptions: { collapseSubtasks: false },\n });\n },\n },\n ],\n {\n rendererOptions: commonTaskRendererOptions,\n },\n ).run(input);\n}\n","import chalk from \"chalk\";\nimport { ListrDefaultRendererLogLevels } from \"listr2\";\nimport { colors } from \"../../constants\";\n\nexport const commonTaskRendererOptions = {\n color: {\n [ListrDefaultRendererLogLevels.COMPLETED]: (msg?: string) =>\n msg ? chalk.hex(colors.green)(msg) : chalk.hex(colors.green)(\"\"),\n },\n icon: {\n [ListrDefaultRendererLogLevels.COMPLETED]: chalk.hex(colors.green)(\"✓\"),\n },\n};\n","import dedent from \"dedent\";\nimport { ILocalizer, LocalizerData } from \"./_types\";\nimport chalk from \"chalk\";\nimport { colors } from \"../constants\";\nimport { LingoDotDevEngine } from \"@lingo.dev/_sdk\";\nimport { getSettings } from \"../utils/settings\";\n\nexport default function createLingoDotDevLocalizer(\n explicitApiKey?: string,\n): ILocalizer {\n const { auth } = getSettings(explicitApiKey);\n\n if (!auth) {\n throw new Error(\n dedent`\n You're trying to use ${chalk.hex(colors.green)(\"Lingo.dev\")} provider, however, you are not authenticated.\n\n To fix this issue:\n 1. Run ${chalk.dim(\"lingo.dev login\")} to authenticate, or\n 2. Use the ${chalk.dim(\"--api-key\")} flag to provide an API key.\n 3. Set ${chalk.dim(\"LINGODOTDEV_API_KEY\")} environment variable.\n `,\n );\n }\n\n const engine = new LingoDotDevEngine({\n apiKey: auth.apiKey,\n apiUrl: auth.apiUrl,\n });\n\n return {\n id: \"Lingo.dev\",\n checkAuth: async () => {\n try {\n const response = await engine.whoami();\n return {\n authenticated: !!response,\n username: response?.email,\n };\n } catch {\n return { authenticated: false };\n }\n },\n localize: async (input: LocalizerData, onProgress) => {\n // Nothing to translate – return the input as-is.\n if (!Object.keys(input.processableData).length) {\n return input;\n }\n\n const processedData = await engine.localizeObject(\n input.processableData,\n {\n sourceLocale: input.sourceLocale,\n targetLocale: input.targetLocale,\n reference: {\n [input.sourceLocale]: input.sourceData,\n [input.targetLocale]: input.targetData,\n },\n },\n onProgress,\n );\n\n return processedData;\n },\n };\n}\n","import { createAnthropic } from \"@ai-sdk/anthropic\";\nimport { createGoogleGenerativeAI } from \"@ai-sdk/google\";\nimport { createOpenAI } from \"@ai-sdk/openai\";\nimport { createOpenRouter } from \"@openrouter/ai-sdk-provider\";\nimport { I18nConfig } from \"@lingo.dev/_spec\";\nimport chalk from \"chalk\";\nimport dedent from \"dedent\";\nimport { ILocalizer, LocalizerData } from \"./_types\";\nimport { LanguageModel, Message, generateText } from \"ai\";\nimport { colors } from \"../constants\";\nimport { jsonrepair } from \"jsonrepair\";\nimport { createOllama } from \"ollama-ai-provider\";\n\nexport default function createExplicitLocalizer(\n provider: NonNullable<I18nConfig[\"provider\"]>,\n): ILocalizer {\n switch (provider.id) {\n default:\n throw new Error(\n dedent`\n You're trying to use unsupported provider: ${chalk.dim(provider.id)}.\n\n To fix this issue:\n 1. Switch to one of the supported providers, or\n 2. Remove the ${chalk.italic(\"provider\")} node from your i18n.json configuration to switch to ${chalk.hex(colors.green)(\"Lingo.dev\")}\n\n ${chalk.hex(colors.blue)(\"Docs: https://lingo.dev/go/docs\")}\n `,\n );\n case \"openai\":\n return createAiSdkLocalizer({\n factory: (params) => createOpenAI(params).languageModel(provider.model),\n id: provider.id,\n prompt: provider.prompt,\n apiKeyName: \"OPENAI_API_KEY\",\n baseUrl: provider.baseUrl,\n });\n case \"anthropic\":\n return createAiSdkLocalizer({\n factory: (params) =>\n createAnthropic(params).languageModel(provider.model),\n id: provider.id,\n prompt: provider.prompt,\n apiKeyName: \"ANTHROPIC_API_KEY\",\n baseUrl: provider.baseUrl,\n });\n case \"google\":\n return createAiSdkLocalizer({\n factory: (params) =>\n createGoogleGenerativeAI(params).languageModel(provider.model),\n id: provider.id,\n prompt: provider.prompt,\n apiKeyName: \"GOOGLE_API_KEY\",\n baseUrl: provider.baseUrl,\n });\n case \"openrouter\":\n return createAiSdkLocalizer({\n factory: (params) =>\n createOpenRouter(params).languageModel(provider.model),\n id: provider.id,\n prompt: provider.prompt,\n apiKeyName: \"OPENROUTER_API_KEY\",\n baseUrl: provider.baseUrl,\n });\n case \"ollama\":\n return createAiSdkLocalizer({\n factory: (_params) => createOllama().languageModel(provider.model),\n id: provider.id,\n prompt: provider.prompt,\n skipAuth: true,\n });\n }\n}\n\nfunction createAiSdkLocalizer(params: {\n factory: (params: { apiKey?: string; baseUrl?: string }) => LanguageModel;\n id: NonNullable<I18nConfig[\"provider\"]>[\"id\"];\n prompt: string;\n apiKeyName?: string;\n baseUrl?: string;\n skipAuth?: boolean;\n}): ILocalizer {\n const skipAuth = params.skipAuth === true;\n\n const apiKey = process.env[params?.apiKeyName ?? \"\"];\n if ((!skipAuth && !apiKey) || !params.apiKeyName) {\n throw new Error(\n dedent`\n You're trying to use raw ${chalk.dim(params.id)} API for translation. ${params.apiKeyName ? `However, ${chalk.dim(params.apiKeyName)} environment variable is not set.` : \"However, that provider is unavailable.\"}\n\n To fix this issue:\n 1. ${params.apiKeyName ? `Set ${chalk.dim(params.apiKeyName)} in your environment variables` : \"Set the environment variable for your provider (if required)\"}, or\n 2. Remove the ${chalk.italic(\"provider\")} node from your i18n.json configuration to switch to ${chalk.hex(colors.green)(\"Lingo.dev\")}\n\n ${chalk.hex(colors.blue)(\"Docs: https://lingo.dev/go/docs\")}\n `,\n );\n }\n\n const model = params.factory(\n skipAuth ? {} : { apiKey, baseUrl: params.baseUrl },\n );\n\n return {\n id: params.id,\n checkAuth: async () => {\n try {\n await generateText({\n model,\n messages: [\n { role: \"system\", content: \"You are an echo server\" },\n { role: \"user\", content: \"OK\" },\n { role: \"assistant\", content: \"OK\" },\n { role: \"user\", content: \"OK\" },\n ],\n });\n\n return { authenticated: true, username: \"anonymous\" };\n } catch (error) {\n return { authenticated: false };\n }\n },\n localize: async (input: LocalizerData) => {\n const systemPrompt = params.prompt\n .replaceAll(\"{source}\", input.sourceLocale)\n .replaceAll(\"{target}\", input.targetLocale);\n const shots = [\n [\n {\n sourceLocale: \"en\",\n targetLocale: \"es\",\n data: {\n message: \"Hello, world!\",\n },\n },\n {\n sourceLocale: \"en\",\n targetLocale: \"es\",\n data: {\n message: \"Hola, mundo!\",\n },\n },\n ],\n ];\n\n const payload = {\n sourceLocale: input.sourceLocale,\n targetLocale: input.targetLocale,\n data: input.processableData,\n };\n\n const response = await generateText({\n model,\n messages: [\n { role: \"system\", content: systemPrompt },\n { role: \"user\", content: \"OK\" },\n ...shots.flatMap(\n ([userShot, assistantShot]) =>\n [\n { role: \"user\", content: JSON.stringify(userShot) },\n { role: \"assistant\", content: JSON.stringify(assistantShot) },\n ] as Message[],\n ),\n { role: \"user\", content: JSON.stringify(payload) },\n ],\n });\n\n const result = JSON.parse(response.text);\n const index = result.data.indexOf(\"{\");\n const lastIndex = result.data.lastIndexOf(\"}\");\n const trimmed = result.data.slice(index, lastIndex + 1);\n const repaired = jsonrepair(trimmed);\n const finalResult = JSON.parse(repaired);\n\n return finalResult.data;\n },\n };\n}\n","import { I18nConfig } from \"@lingo.dev/_spec\";\n\nimport createLingoDotDevLocalizer from \"./lingodotdev\";\nimport createExplicitLocalizer from \"./explicit\";\nimport { ILocalizer } from \"./_types\";\n\nexport default function createLocalizer(\n provider: I18nConfig[\"provider\"],\n apiKey?: string,\n): ILocalizer {\n if (!provider) {\n return createLingoDotDevLocalizer(apiKey);\n } else {\n return createExplicitLocalizer(provider);\n }\n}\n","import chalk from \"chalk\";\nimport { Listr } from \"listr2\";\n\nimport { colors } from \"../../constants\";\nimport { resolveOverriddenLocale } from \"@lingo.dev/_spec\";\nimport { getBuckets } from \"../../utils/buckets\";\nimport { commonTaskRendererOptions } from \"./_const\";\nimport { CmdRunContext } from \"./_types\";\n\nexport default async function plan(\n input: CmdRunContext,\n): Promise<CmdRunContext> {\n console.log(chalk.hex(colors.orange)(\"[Planning]\"));\n\n let buckets = getBuckets(input.config!);\n if (input.flags.bucket) {\n buckets = buckets.filter((b) => input.flags.bucket!.includes(b.type));\n }\n\n const _sourceLocale = input.flags.sourceLocale || input.config!.locale.source;\n if (!_sourceLocale) {\n throw new Error(\n `No source locale provided. Use --source-locale to specify the source locale or add it to i18n.json (locale.source)`,\n );\n }\n const _targetLocales =\n input.flags.targetLocale || input.config!.locale.targets;\n if (!_targetLocales.length) {\n throw new Error(\n `No target locales provided. Use --target-locale to specify the target locales or add them to i18n.json (locale.targets)`,\n );\n }\n\n return new Listr<CmdRunContext>(\n [\n {\n title: \"Locating content buckets\",\n task: async (ctx, task) => {\n const bucketCount = buckets.length;\n const bucketFilter = input.flags.bucket\n ? ` ${chalk.dim(`(filtered by: ${chalk.hex(colors.yellow)(input.flags.bucket!.join(\", \"))})`)}`\n : \"\";\n task.title = `Found ${chalk.hex(colors.yellow)(bucketCount.toString())} bucket(s)${bucketFilter}`;\n },\n },\n {\n title: \"Detecting locales\",\n task: async (ctx, task) => {\n task.title = `Found ${chalk.hex(colors.yellow)(_targetLocales.length.toString())} target locale(s)`;\n },\n },\n {\n title: \"Locating localizable files\",\n task: async (ctx, task) => {\n const patterns: string[] = [];\n\n for (const bucket of buckets) {\n for (const bucketPath of bucket.paths) {\n if (input.flags.file) {\n if (\n !input.flags.file.some((f) =>\n bucketPath.pathPattern.includes(f),\n )\n ) {\n continue;\n }\n }\n\n patterns.push(bucketPath.pathPattern);\n }\n }\n\n const fileFilter = input.flags.file\n ? ` ${chalk.dim(`(filtered by: ${chalk.hex(colors.yellow)(input.flags.file.join(\", \"))})`)}`\n : \"\";\n task.title = `Found ${chalk.hex(colors.yellow)(patterns.length.toString())} path pattern(s)${fileFilter}`;\n },\n },\n {\n title: \"Computing translation tasks\",\n task: async (ctx, task) => {\n for (const bucket of buckets) {\n for (const bucketPath of bucket.paths) {\n if (input.flags.file) {\n if (\n !input.flags.file.some((f) =>\n bucketPath.pathPattern.includes(f),\n )\n ) {\n continue;\n }\n }\n\n const sourceLocale = resolveOverriddenLocale(\n _sourceLocale,\n bucketPath.delimiter,\n );\n\n for (const _targetLocale of _targetLocales) {\n const targetLocale = resolveOverriddenLocale(\n _targetLocale,\n bucketPath.delimiter,\n );\n\n // Skip if source and target are identical (shouldn't happen but guard)\n if (sourceLocale === targetLocale) continue;\n\n ctx.tasks.push({\n sourceLocale,\n targetLocale,\n bucketType: bucket.type,\n bucketPathPattern: bucketPath.pathPattern,\n injectLocale: bucket.injectLocale || [],\n lockedKeys: bucket.lockedKeys || [],\n lockedPatterns: bucket.lockedPatterns || [],\n onlyKeys: input.flags.key || [],\n });\n }\n }\n }\n\n task.title = `Prepared ${chalk.hex(colors.green)(ctx.tasks.length.toString())} translation task(s)`;\n },\n },\n ],\n {\n rendererOptions: commonTaskRendererOptions,\n },\n ).run(input);\n}\n","import chalk from \"chalk\";\nimport { Listr, ListrTask } from \"listr2\";\nimport pLimit, { LimitFunction } from \"p-limit\";\nimport _ from \"lodash\";\n\nimport { colors } from \"../../constants\";\nimport { CmdRunContext, CmdRunTask, CmdRunTaskResult } from \"./_types\";\nimport { commonTaskRendererOptions } from \"./_const\";\nimport createBucketLoader from \"../../loaders\";\nimport { createDeltaProcessor } from \"../../utils/delta\";\n\nconst MAX_WORKER_COUNT = 10;\n\nexport default async function execute(input: CmdRunContext) {\n const effectiveConcurrency = Math.min(\n input.flags.concurrency,\n input.tasks.length,\n MAX_WORKER_COUNT,\n );\n console.log(chalk.hex(colors.orange)(`[Localization]`));\n\n return new Listr<CmdRunContext>(\n [\n {\n title: \"Initializing localization engine\",\n task: async (ctx, task) => {\n task.title = `Localization engine ${chalk.hex(colors.green)(\"ready\")} (${ctx.localizer!.id})`;\n },\n },\n {\n title: `Processing localization tasks ${chalk.dim(`(tasks: ${input.tasks.length}, concurrency: ${effectiveConcurrency})`)}`,\n task: (ctx, task) => {\n if (input.tasks.length < 1) {\n task.title = `Skipping, nothing to localize.`;\n task.skip();\n return;\n }\n\n const i18nLimiter = pLimit(effectiveConcurrency);\n const ioLimiter = pLimit(1);\n const workersCount = effectiveConcurrency;\n\n const workerTasks: ListrTask[] = [];\n for (let i = 0; i < workersCount; i++) {\n const assignedTasks = ctx.tasks.filter(\n (_, idx) => idx % workersCount === i,\n );\n workerTasks.push(\n createWorkerTask({\n ctx,\n assignedTasks,\n ioLimiter,\n i18nLimiter,\n onDone() {\n task.title = createExecutionProgressMessage(ctx);\n },\n }),\n );\n }\n\n return task.newListr(workerTasks, {\n concurrent: true,\n exitOnError: false,\n rendererOptions: {\n ...commonTaskRendererOptions,\n collapseSubtasks: true,\n },\n });\n },\n },\n ],\n {\n exitOnError: false,\n rendererOptions: commonTaskRendererOptions,\n },\n ).run(input);\n}\n\nfunction createWorkerStatusMessage(args: {\n assignedTask: CmdRunTask;\n percentage: number;\n}) {\n const displayPath = args.assignedTask.bucketPathPattern.replace(\n \"[locale]\",\n args.assignedTask.targetLocale,\n );\n return `[${chalk.hex(colors.yellow)(`${args.percentage}%`)}] Processing: ${chalk.dim(\n displayPath,\n )} (${chalk.hex(colors.yellow)(args.assignedTask.sourceLocale)} -> ${chalk.hex(\n colors.yellow,\n )(args.assignedTask.targetLocale)})`;\n}\n\nfunction createExecutionProgressMessage(ctx: CmdRunContext) {\n const succeededTasksCount = countTasks(\n ctx,\n (_t, result) => result.status === \"success\",\n );\n const failedTasksCount = countTasks(\n ctx,\n (_t, result) => result.status === \"error\",\n );\n const skippedTasksCount = countTasks(\n ctx,\n (_t, result) => result.status === \"skipped\",\n );\n\n return `Processed ${chalk.green(succeededTasksCount)}/${ctx.tasks.length}, Failed ${chalk.red(failedTasksCount)}, Skipped ${chalk.dim(skippedTasksCount)}`;\n}\n\nfunction createLoaderForTask(assignedTask: CmdRunTask) {\n const bucketLoader = createBucketLoader(\n assignedTask.bucketType,\n assignedTask.bucketPathPattern,\n {\n defaultLocale: assignedTask.sourceLocale,\n isCacheRestore: false,\n injectLocale: assignedTask.injectLocale,\n },\n assignedTask.lockedKeys,\n assignedTask.lockedPatterns,\n );\n bucketLoader.setDefaultLocale(assignedTask.sourceLocale);\n\n return bucketLoader;\n}\n\nfunction createWorkerTask(args: {\n ctx: CmdRunContext;\n assignedTasks: CmdRunTask[];\n ioLimiter: LimitFunction;\n i18nLimiter: LimitFunction;\n onDone: () => void;\n}): ListrTask {\n return {\n title: \"Initializing...\",\n task: async (_subCtx: any, subTask: any) => {\n for (const assignedTask of args.assignedTasks) {\n subTask.title = createWorkerStatusMessage({\n assignedTask,\n percentage: 0,\n });\n const bucketLoader = createLoaderForTask(assignedTask);\n const deltaProcessor = createDeltaProcessor(\n assignedTask.bucketPathPattern,\n );\n\n const taskResult = await args.i18nLimiter(async () => {\n try {\n const sourceData = await bucketLoader.pull(\n assignedTask.sourceLocale,\n );\n const targetData = await bucketLoader.pull(\n assignedTask.targetLocale,\n );\n const checksums = await deltaProcessor.loadChecksums();\n const delta = await deltaProcessor.calculateDelta({\n sourceData,\n targetData,\n checksums,\n });\n\n const processableData = _.chain(sourceData)\n .entries()\n .filter(\n ([key, value]) =>\n delta.added.includes(key) ||\n delta.updated.includes(key) ||\n !!args.ctx.flags.force,\n )\n .filter(\n ([key]) =>\n !assignedTask.onlyKeys.length ||\n assignedTask.onlyKeys.includes(key),\n )\n .fromPairs()\n .value();\n\n if (!Object.keys(processableData).length) {\n return { status: \"skipped\" } satisfies CmdRunTaskResult;\n }\n\n const processedTargetData = await args.ctx.localizer!.localize(\n {\n sourceLocale: assignedTask.sourceLocale,\n targetLocale: assignedTask.targetLocale,\n sourceData,\n targetData,\n processableData,\n },\n (progress) => {\n subTask.title = createWorkerStatusMessage({\n assignedTask,\n percentage: progress,\n });\n },\n );\n\n let finalTargetData = _.merge(\n {},\n sourceData,\n targetData,\n processedTargetData,\n );\n\n finalTargetData = _.chain(finalTargetData)\n .entries()\n .map(([key, value]) => {\n const renaming = delta.renamed.find(\n ([oldKey]) => oldKey === key,\n );\n if (!renaming) {\n return [key, value];\n }\n return [renaming[1], value];\n })\n .fromPairs()\n .value();\n\n await args.ioLimiter(async () => {\n await bucketLoader.pull(assignedTask.sourceLocale);\n await bucketLoader.push(\n assignedTask.targetLocale,\n finalTargetData,\n );\n\n const checksums =\n await deltaProcessor.createChecksums(sourceData);\n await deltaProcessor.saveChecksums(checksums);\n });\n\n return { status: \"success\" } satisfies CmdRunTaskResult;\n } catch (error) {\n return {\n status: \"error\",\n error: error as Error,\n } satisfies CmdRunTaskResult;\n }\n });\n\n args.ctx.results.set(assignedTask, taskResult);\n }\n\n subTask.title = \"Done\";\n },\n };\n}\n\nfunction countTasks(\n ctx: CmdRunContext,\n predicate: (task: CmdRunTask, result: CmdRunTaskResult) => boolean,\n) {\n return Array.from(ctx.results.entries()).filter(([task, result]) =>\n predicate(task, result),\n ).length;\n}\n","import {\n bucketTypeSchema,\n I18nConfig,\n localeCodeSchema,\n bucketTypes,\n} from \"@lingo.dev/_spec\";\nimport { z } from \"zod\";\nimport { ILocalizer } from \"../../localizer/_types\";\n\nexport type CmdRunContext = {\n flags: CmdRunFlags;\n config: I18nConfig | null;\n localizer: ILocalizer | null;\n tasks: CmdRunTask[];\n results: Map<CmdRunTask, CmdRunTaskResult>;\n};\n\nexport type CmdRunTaskResult = {\n status: \"success\" | \"error\" | \"skipped\";\n error?: Error;\n};\n\nexport type CmdRunTask = {\n sourceLocale: string;\n targetLocale: string;\n bucketType: (typeof bucketTypes)[number];\n bucketPathPattern: string;\n injectLocale: string[];\n lockedKeys: string[];\n lockedPatterns: string[];\n onlyKeys: string[];\n};\n\nexport const flagsSchema = z.object({\n bucket: z.array(bucketTypeSchema).optional(),\n key: z.array(z.string()).optional(),\n file: z.array(z.string()).optional(),\n apiKey: z.string().optional(),\n force: z.boolean().optional(),\n frozen: z.boolean().optional(),\n verbose: z.boolean().optional(),\n strict: z.boolean().optional(),\n interactive: z.boolean().default(false),\n concurrency: z.number().positive().default(10),\n debug: z.boolean().default(false),\n sourceLocale: z.string().optional(),\n targetLocale: z.array(z.string()).optional(),\n});\nexport type CmdRunFlags = z.infer<typeof flagsSchema>;\n","import { CmdRunContext } from \"./_types\";\n\n/**\n * Determines the authentication ID for tracking purposes\n */\nexport async function determineAuthId(\n ctx: CmdRunContext,\n): Promise<string | null> {\n const isByokMode = !!ctx.config?.provider;\n\n if (isByokMode) {\n return null;\n } else {\n try {\n const authStatus = await ctx.localizer?.checkAuth();\n return authStatus?.username || null;\n } catch {\n return null;\n }\n }\n}\n","import { execSync } from \"child_process\";\nimport bbLib from \"bitbucket\";\nimport Z from \"zod\";\nimport { PlatformKit } from \"./_base\";\n\nconst { Bitbucket } = bbLib;\n\ninterface BitbucketConfig {\n baseBranchName: string;\n repositoryOwner: string;\n repositoryName: string;\n bbToken?: string;\n}\n\nexport class BitbucketPlatformKit extends PlatformKit<BitbucketConfig> {\n private _bb?: ReturnType<typeof Bitbucket>;\n\n private get bb() {\n if (!this._bb) {\n this._bb = new Bitbucket({\n auth: { token: this.platformConfig.bbToken || \"\" },\n });\n }\n return this._bb;\n }\n\n async branchExists({ branch }: { branch: string }) {\n return await this.bb.repositories\n .getBranch({\n workspace: this.platformConfig.repositoryOwner,\n repo_slug: this.platformConfig.repositoryName,\n name: branch,\n })\n .then((r) => r.data)\n .then((v) => !!v)\n .catch((r) => (r.status === 404 ? false : Promise.reject(r)));\n }\n\n async getOpenPullRequestNumber({ branch }: { branch: string }) {\n return await this.bb.repositories\n .listPullRequests({\n workspace: this.platformConfig.repositoryOwner,\n repo_slug: this.platformConfig.repositoryName,\n state: \"OPEN\",\n })\n .then(({ data: { values } }) => {\n // TODO: we might need to handle pagination in future\n // bitbucket API does not support filtering pull requests\n // https://developer.atlassian.com/cloud/bitbucket/rest/api-group-pullrequests/#api-repositories-workspace-repo-slug-pullrequests-get\n return values?.find(\n ({ source, destination }) =>\n source?.branch?.name === branch &&\n destination?.branch?.name === this.platformConfig.baseBranchName,\n );\n })\n .then((pr) => pr?.id);\n }\n\n async closePullRequest({ pullRequestNumber }: { pullRequestNumber: number }) {\n await this.bb.repositories.declinePullRequest({\n workspace: this.platformConfig.repositoryOwner,\n repo_slug: this.platformConfig.repositoryName,\n pull_request_id: pullRequestNumber,\n });\n }\n\n async createPullRequest({\n title,\n body,\n head,\n }: {\n title: string;\n body?: string;\n head: string;\n }) {\n return await this.bb.repositories\n .createPullRequest({\n workspace: this.platformConfig.repositoryOwner,\n repo_slug: this.platformConfig.repositoryName,\n _body: {\n title,\n description: body,\n source: { branch: { name: head } },\n destination: { branch: { name: this.platformConfig.baseBranchName } },\n } as any,\n })\n .then(({ data }) => data.id ?? 0);\n }\n\n async commentOnPullRequest({\n pullRequestNumber,\n body,\n }: {\n pullRequestNumber: number;\n body: string;\n }) {\n await this.bb.repositories.createPullRequestComment({\n workspace: this.platformConfig.repositoryOwner,\n repo_slug: this.platformConfig.repositoryName,\n pull_request_id: pullRequestNumber,\n _body: {\n content: {\n raw: body,\n },\n } as any,\n });\n }\n\n async gitConfig() {\n execSync(\"git config --unset http.${BITBUCKET_GIT_HTTP_ORIGIN}.proxy\", {\n stdio: \"inherit\",\n });\n execSync(\n \"git config http.${BITBUCKET_GIT_HTTP_ORIGIN}.proxy http://host.docker.internal:29418/\",\n {\n stdio: \"inherit\",\n },\n );\n }\n\n get platformConfig() {\n const env = Z.object({\n BITBUCKET_BRANCH: Z.string(),\n BITBUCKET_REPO_FULL_NAME: Z.string(),\n BB_TOKEN: Z.string().optional(),\n }).parse(process.env);\n\n const [repositoryOwner, repositoryName] =\n env.BITBUCKET_REPO_FULL_NAME.split(\"/\");\n\n return {\n baseBranchName: env.BITBUCKET_BRANCH,\n repositoryOwner,\n repositoryName,\n bbToken: env.BB_TOKEN,\n };\n }\n\n buildPullRequestUrl(pullRequestNumber: number) {\n const { repositoryOwner, repositoryName } = this.platformConfig;\n return `https://bitbucket.org/${repositoryOwner}/${repositoryName}/pull-requests/${pullRequestNumber}`;\n }\n}\n","import { execSync } from \"child_process\";\nimport Z from \"zod\";\n\nconst defaultMessage = \"feat: update translations via @lingodotdev\";\n\ninterface BasePlatformConfig {\n baseBranchName: string;\n repositoryOwner: string;\n repositoryName: string;\n}\n\nexport abstract class PlatformKit<PlatformConfig extends BasePlatformConfig = BasePlatformConfig> {\n abstract branchExists(props: { branch: string }): Promise<boolean>;\n\n abstract getOpenPullRequestNumber(props: { branch: string }): Promise<number | undefined>;\n\n abstract closePullRequest(props: { pullRequestNumber: number }): Promise<void>;\n\n abstract createPullRequest(props: { head: string; title: string; body?: string }): Promise<number>;\n\n abstract commentOnPullRequest(props: { pullRequestNumber: number; body: string }): Promise<void>;\n\n abstract get platformConfig(): PlatformConfig;\n\n abstract buildPullRequestUrl(pullRequestNumber: number): string;\n\n gitConfig(token?: string, repoUrl?: string) {\n if (token && repoUrl) {\n execSync(`git remote set-url origin ${repoUrl}`, {\n stdio: \"inherit\",\n });\n }\n }\n\n get config() {\n const env = Z.object({\n LINGODOTDEV_API_KEY: Z.string(),\n LINGODOTDEV_PULL_REQUEST: Z.preprocess((val) => val === \"true\" || val === true, Z.boolean()),\n LINGODOTDEV_COMMIT_MESSAGE: Z.string().optional(),\n LINGODOTDEV_PULL_REQUEST_TITLE: Z.string().optional(),\n LINGODOTDEV_WORKING_DIRECTORY: Z.string().optional(),\n LINGODOTDEV_PROCESS_OWN_COMMITS: Z.preprocess((val) => val === \"true\" || val === true, Z.boolean()).optional(),\n }).parse(process.env);\n\n return {\n replexicaApiKey: env.LINGODOTDEV_API_KEY,\n isPullRequestMode: env.LINGODOTDEV_PULL_REQUEST,\n commitMessage: env.LINGODOTDEV_COMMIT_MESSAGE || defaultMessage,\n pullRequestTitle: env.LINGODOTDEV_PULL_REQUEST_TITLE || defaultMessage,\n workingDir: env.LINGODOTDEV_WORKING_DIRECTORY || \".\",\n processOwnCommits: env.LINGODOTDEV_PROCESS_OWN_COMMITS || false,\n };\n }\n}\n\nexport interface IConfig {\n replexicaApiKey: string;\n isPullRequestMode: boolean;\n commitMessage: string;\n pullRequestTitle: string;\n}\n","import { Octokit } from \"octokit\";\nimport { PlatformKit } from \"./_base\";\nimport Z from \"zod\";\n\nexport class GitHubPlatformKit extends PlatformKit {\n private _octokit?: Octokit;\n\n private get octokit(): Octokit {\n if (!this._octokit) {\n this._octokit = new Octokit({ auth: this.platformConfig.ghToken });\n }\n return this._octokit;\n }\n\n async branchExists({ branch }: { branch: string }) {\n return await this.octokit.rest.repos\n .getBranch({\n branch,\n owner: this.platformConfig.repositoryOwner,\n repo: this.platformConfig.repositoryName,\n })\n .then((r) => r.data)\n .then((v) => !!v)\n .catch((r) => (r.status === 404 ? false : Promise.reject(r)));\n }\n\n async getOpenPullRequestNumber({ branch }: { branch: string }) {\n return await this.octokit.rest.pulls\n .list({\n head: `${this.platformConfig.repositoryOwner}:${branch}`,\n owner: this.platformConfig.repositoryOwner,\n repo: this.platformConfig.repositoryName,\n base: this.platformConfig.baseBranchName,\n state: \"open\",\n })\n .then(({ data }) => data[0])\n .then((pr) => pr?.number);\n }\n\n async closePullRequest({ pullRequestNumber }: { pullRequestNumber: number }) {\n await this.octokit.rest.pulls.update({\n pull_number: pullRequestNumber,\n owner: this.platformConfig.repositoryOwner,\n repo: this.platformConfig.repositoryName,\n state: \"closed\",\n });\n }\n\n async createPullRequest({\n head,\n title,\n body,\n }: {\n head: string;\n title: string;\n body?: string;\n }) {\n return await this.octokit.rest.pulls\n .create({\n head,\n title,\n body,\n owner: this.platformConfig.repositoryOwner,\n repo: this.platformConfig.repositoryName,\n base: this.platformConfig.baseBranchName,\n })\n .then(({ data }) => data.number);\n }\n\n async commentOnPullRequest({\n pullRequestNumber,\n body,\n }: {\n pullRequestNumber: number;\n body: string;\n }) {\n await this.octokit.rest.issues.createComment({\n issue_number: pullRequestNumber,\n body,\n owner: this.platformConfig.repositoryOwner,\n repo: this.platformConfig.repositoryName,\n });\n }\n\n async gitConfig() {\n const { ghToken, repositoryOwner, repositoryName } = this.platformConfig;\n const { processOwnCommits } = this.config;\n\n if (ghToken && processOwnCommits) {\n console.log(\n \"Using provided GH_TOKEN. This will trigger your CI/CD pipeline to run again.\",\n );\n\n const url = `https://${ghToken}@github.com/${repositoryOwner}/${repositoryName}.git`;\n\n super.gitConfig(ghToken, url);\n }\n }\n\n get platformConfig() {\n const env = Z.object({\n GITHUB_REPOSITORY: Z.string(),\n GITHUB_REPOSITORY_OWNER: Z.string(),\n GITHUB_REF_NAME: Z.string(),\n GITHUB_HEAD_REF: Z.string(),\n GH_TOKEN: Z.string().optional(),\n }).parse(process.env);\n\n const baseBranchName = !env.GITHUB_REF_NAME.endsWith(\"/merge\")\n ? env.GITHUB_REF_NAME\n : env.GITHUB_HEAD_REF;\n\n return {\n ghToken: env.GH_TOKEN,\n baseBranchName,\n repositoryOwner: env.GITHUB_REPOSITORY_OWNER,\n repositoryName: env.GITHUB_REPOSITORY.split(\"/\")[1],\n };\n }\n\n buildPullRequestUrl(pullRequestNumber: number) {\n const { repositoryOwner, repositoryName } = this.platformConfig;\n return `https://github.com/${repositoryOwner}/${repositoryName}/pull/${pullRequestNumber}`;\n }\n}\n","import { Gitlab } from \"@gitbeaker/rest\";\nimport Z from \"zod\";\nimport { PlatformKit } from \"./_base\";\n\nconst gl = new Gitlab({ token: \"\" });\n\nexport class GitlabPlatformKit extends PlatformKit {\n private _gitlab?: InstanceType<typeof Gitlab>;\n\n constructor() {\n super();\n\n // change directory to current repository before executing replexica\n process.chdir(this.platformConfig.projectDir);\n }\n\n private get gitlab(): InstanceType<typeof Gitlab> {\n if (!this._gitlab) {\n this._gitlab = new Gitlab({\n token: this.platformConfig.glToken || \"\",\n });\n }\n return this._gitlab;\n }\n\n get platformConfig() {\n const env = Z.object({\n GL_TOKEN: Z.string().optional(),\n CI_COMMIT_BRANCH: Z.string(),\n CI_MERGE_REQUEST_SOURCE_BRANCH_NAME: Z.string().optional(),\n CI_PROJECT_NAMESPACE: Z.string(),\n CI_PROJECT_NAME: Z.string(),\n CI_PROJECT_ID: Z.string(),\n CI_PROJECT_DIR: Z.string(),\n CI_REPOSITORY_URL: Z.string(),\n }).parse(process.env);\n\n const config = {\n glToken: env.GL_TOKEN,\n baseBranchName:\n env.CI_MERGE_REQUEST_SOURCE_BRANCH_NAME ?? env.CI_COMMIT_BRANCH,\n repositoryOwner: env.CI_PROJECT_NAMESPACE,\n repositoryName: env.CI_PROJECT_NAME,\n gitlabProjectId: env.CI_PROJECT_ID,\n projectDir: env.CI_PROJECT_DIR,\n reporitoryUrl: env.CI_REPOSITORY_URL,\n };\n\n return config;\n }\n\n async branchExists({ branch }: { branch: string }): Promise<boolean> {\n try {\n await this.gitlab.Branches.show(\n this.platformConfig.gitlabProjectId,\n branch,\n );\n return true;\n } catch {\n return false;\n }\n }\n\n async getOpenPullRequestNumber({\n branch,\n }: {\n branch: string;\n }): Promise<number | undefined> {\n const mergeRequests = await this.gitlab.MergeRequests.all({\n projectId: this.platformConfig.gitlabProjectId,\n sourceBranch: branch,\n state: \"opened\",\n });\n return mergeRequests[0]?.iid;\n }\n\n async closePullRequest({\n pullRequestNumber,\n }: {\n pullRequestNumber: number;\n }): Promise<void> {\n await this.gitlab.MergeRequests.edit(\n this.platformConfig.gitlabProjectId,\n pullRequestNumber,\n {\n stateEvent: \"close\",\n },\n );\n }\n\n async createPullRequest({\n head,\n title,\n body,\n }: {\n head: string;\n title: string;\n body?: string;\n }): Promise<number> {\n const mr = await this.gitlab.MergeRequests.create(\n this.platformConfig.gitlabProjectId,\n head,\n this.platformConfig.baseBranchName,\n title,\n {\n description: body,\n },\n );\n return mr.iid;\n }\n\n async commentOnPullRequest({\n pullRequestNumber,\n body,\n }: {\n pullRequestNumber: number;\n body: string;\n }): Promise<void> {\n await this.gitlab.MergeRequestNotes.create(\n this.platformConfig.gitlabProjectId,\n pullRequestNumber,\n body,\n );\n }\n\n gitConfig(): Promise<void> | void {\n const glToken = this.platformConfig.glToken;\n const url = `https://oauth2:${glToken}@gitlab.com/${this.platformConfig.repositoryOwner}/${this.platformConfig.repositoryName}.git`;\n\n super.gitConfig(glToken, url);\n }\n\n buildPullRequestUrl(pullRequestNumber: number): string {\n return `https://gitlab.com/${this.platformConfig.repositoryOwner}/${this.platformConfig.repositoryName}/-/merge_requests/${pullRequestNumber}`;\n }\n}\n","import { BitbucketPlatformKit } from \"./bitbucket\";\nimport { GitHubPlatformKit } from \"./github\";\nimport { GitlabPlatformKit } from \"./gitlab\";\n\nexport const getPlatformKit = () => {\n if (process.env.BITBUCKET_PIPELINE_UUID) {\n return new BitbucketPlatformKit();\n }\n\n if (process.env.GITHUB_ACTION) {\n return new GitHubPlatformKit();\n }\n\n if (process.env.GITLAB_CI) {\n return new GitlabPlatformKit();\n }\n\n throw new Error(\"This platform is not supported\");\n};\n","import { bucketTypeSchema, I18nConfig, localeCodeSchema, resolveOverriddenLocale } from \"@lingo.dev/_spec\";\nimport { Command } from \"interactive-commander\";\nimport Z from \"zod\";\nimport _ from \"lodash\";\nimport * as path from \"path\";\nimport { getConfig } from \"../utils/config\";\nimport { getSettings } from \"../utils/settings\";\nimport { CLIError } from \"../utils/errors\";\nimport Ora from \"ora\";\nimport createBucketLoader from \"../loaders\";\nimport { createAuthenticator } from \"../utils/auth\";\nimport { getBuckets } from \"../utils/buckets\";\nimport chalk from \"chalk\";\nimport Table from \"cli-table3\";\nimport { createDeltaProcessor } from \"../utils/delta\";\nimport trackEvent from \"../utils/observability\";\n\n// Define types for our language stats\ninterface LanguageStats {\n complete: number;\n missing: number;\n updated: number;\n words: number;\n}\n\nexport default new Command()\n .command(\"status\")\n .description(\"Show the status of the localization process\")\n .helpOption(\"-h, --help\", \"Show help\")\n .option(\"--locale <locale>\", \"Locale to process\", (val: string, prev: string[]) => (prev ? [...prev, val] : [val]))\n .option(\"--bucket <bucket>\", \"Bucket to process\", (val: string, prev: string[]) => (prev ? [...prev, val] : [val]))\n .option(\n \"--file [files...]\",\n \"File to process. Process only a specific path, may contain asterisk * to match multiple files.\",\n )\n .option(\"--force\", \"Ignore lockfile and process all keys, useful for estimating full re-translation\")\n .option(\"--verbose\", \"Show detailed output including key-level word counts\")\n .option(\"--api-key <api-key>\", \"Explicitly set the API key to use, override the default API key from settings\")\n .action(async function (options) {\n const ora = Ora();\n const flags = parseFlags(options);\n let authId: string | null = null;\n\n try {\n ora.start(\"Loading configuration...\");\n const i18nConfig = getConfig();\n const settings = getSettings(flags.apiKey);\n ora.succeed(\"Configuration loaded\");\n\n // Try to authenticate, but continue even if not authenticated\n try {\n ora.start(\"Checking authentication status...\");\n const auth = await tryAuthenticate(settings);\n if (auth) {\n authId = auth.id;\n ora.succeed(`Authenticated as ${auth.email}`);\n } else {\n ora.info(\n \"Not authenticated. Continuing without authentication. (Run `lingo.dev auth --login` to authenticate)\",\n );\n }\n } catch (error) {\n ora.info(\"Authentication failed. Continuing without authentication.\");\n }\n\n ora.start(\"Validating localization configuration...\");\n validateParams(i18nConfig, flags);\n ora.succeed(\"Localization configuration is valid\");\n\n // Track event with or without authentication\n trackEvent(authId || \"status\", \"cmd.status.start\", {\n i18nConfig,\n flags,\n });\n\n let buckets = getBuckets(i18nConfig!);\n if (flags.bucket?.length) {\n buckets = buckets.filter((bucket: any) => flags.bucket!.includes(bucket.type));\n }\n ora.succeed(\"Buckets retrieved\");\n\n if (flags.file?.length) {\n buckets = buckets\n .map((bucket: any) => {\n const paths = bucket.paths.filter((path: any) => flags.file!.find((file) => path.pathPattern?.match(file)));\n return { ...bucket, paths };\n })\n .filter((bucket: any) => bucket.paths.length > 0);\n if (buckets.length === 0) {\n ora.fail(\"No buckets found. All buckets were filtered out by --file option.\");\n process.exit(1);\n } else {\n ora.info(`\\x1b[36mProcessing only filtered buckets:\\x1b[0m`);\n buckets.map((bucket: any) => {\n ora.info(` ${bucket.type}:`);\n bucket.paths.forEach((path: any) => {\n ora.info(` - ${path.pathPattern}`);\n });\n });\n }\n }\n\n const targetLocales = flags.locale?.length ? flags.locale : i18nConfig!.locale.targets;\n\n // Global stats\n let totalSourceKeyCount = 0;\n let uniqueKeysToTranslate = 0;\n let totalExistingTranslations = 0;\n const totalWordCount = new Map<string, number>(); // Words per language\n const languageStats: Record<string, LanguageStats> = {};\n\n // Initialize per-language stats\n for (const locale of targetLocales) {\n languageStats[locale] = {\n complete: 0,\n missing: 0,\n updated: 0,\n words: 0,\n };\n totalWordCount.set(locale, 0);\n }\n\n // Per-file stats\n const fileStats: Record<\n string,\n {\n path: string;\n sourceKeys: number;\n wordCount: number;\n languageStats: Record<\n string,\n {\n complete: number;\n missing: number;\n updated: number;\n words: number;\n }\n >;\n }\n > = {};\n\n // Process each bucket\n for (const bucket of buckets) {\n try {\n console.log();\n ora.info(`Analyzing bucket: ${bucket.type}`);\n\n for (const bucketPath of bucket.paths) {\n const bucketOra = Ora({ indent: 2 }).info(`Analyzing path: ${bucketPath.pathPattern}`);\n\n const sourceLocale = resolveOverriddenLocale(i18nConfig!.locale.source, bucketPath.delimiter);\n const bucketLoader = createBucketLoader(\n bucket.type,\n bucketPath.pathPattern,\n {\n isCacheRestore: false,\n defaultLocale: sourceLocale,\n injectLocale: bucket.injectLocale,\n },\n bucket.lockedKeys,\n );\n\n bucketLoader.setDefaultLocale(sourceLocale);\n await bucketLoader.init();\n\n // Initialize file stats\n const filePath = bucketPath.pathPattern;\n if (!fileStats[filePath]) {\n fileStats[filePath] = {\n path: filePath,\n sourceKeys: 0,\n wordCount: 0,\n languageStats: {},\n };\n\n for (const locale of targetLocales) {\n fileStats[filePath].languageStats[locale] = {\n complete: 0,\n missing: 0,\n updated: 0,\n words: 0,\n };\n }\n }\n\n // Get source data and count source keys\n const sourceData = await bucketLoader.pull(sourceLocale);\n const sourceKeys = Object.keys(sourceData);\n fileStats[filePath].sourceKeys = sourceKeys.length;\n totalSourceKeyCount += sourceKeys.length;\n\n // Calculate source word count\n let sourceWordCount = 0;\n for (const key of sourceKeys) {\n const value = sourceData[key];\n if (typeof value === \"string\") {\n const words = value.trim().split(/\\s+/).length;\n sourceWordCount += words;\n }\n }\n fileStats[filePath].wordCount = sourceWordCount;\n\n // Process each target locale\n for (const _targetLocale of targetLocales) {\n const targetLocale = resolveOverriddenLocale(_targetLocale, bucketPath.delimiter);\n bucketOra.start(`[${sourceLocale} -> ${targetLocale}] Analyzing translation status...`);\n\n let targetData = {};\n let fileExists = true;\n\n try {\n targetData = await bucketLoader.pull(targetLocale);\n } catch (error) {\n fileExists = false;\n bucketOra.info(\n `[${sourceLocale} -> ${targetLocale}] Target file not found, assuming all keys need translation.`,\n );\n }\n\n if (!fileExists) {\n // All keys are missing for this locale\n fileStats[filePath].languageStats[targetLocale].missing = sourceKeys.length;\n fileStats[filePath].languageStats[targetLocale].words = sourceWordCount;\n languageStats[targetLocale].missing += sourceKeys.length;\n languageStats[targetLocale].words += sourceWordCount;\n totalWordCount.set(targetLocale, (totalWordCount.get(targetLocale) || 0) + sourceWordCount);\n\n bucketOra.succeed(\n `[${sourceLocale} -> ${targetLocale}] ${chalk.red(`0% complete`)} (0/${sourceKeys.length} keys) - file not found`,\n );\n continue;\n }\n\n // Calculate delta for existing file\n const deltaProcessor = createDeltaProcessor(bucketPath.pathPattern);\n const checksums = await deltaProcessor.loadChecksums();\n const delta = await deltaProcessor.calculateDelta({\n sourceData,\n targetData,\n checksums,\n });\n\n const missingKeys = delta.added;\n const updatedKeys = delta.updated;\n const completeKeys = sourceKeys.filter((key) => !missingKeys.includes(key) && !updatedKeys.includes(key));\n\n // Count words that need translation\n let wordsToTranslate = 0;\n const keysToProcess = flags.force ? sourceKeys : [...missingKeys, ...updatedKeys];\n\n for (const key of keysToProcess) {\n const value = sourceData[String(key)];\n if (typeof value === \"string\") {\n const words = value.trim().split(/\\s+/).length;\n wordsToTranslate += words;\n }\n }\n\n // Update file stats\n fileStats[filePath].languageStats[targetLocale].missing = missingKeys.length;\n fileStats[filePath].languageStats[targetLocale].updated = updatedKeys.length;\n fileStats[filePath].languageStats[targetLocale].complete = completeKeys.length;\n fileStats[filePath].languageStats[targetLocale].words = wordsToTranslate;\n\n // Update global stats\n languageStats[targetLocale].missing += missingKeys.length;\n languageStats[targetLocale].updated += updatedKeys.length;\n languageStats[targetLocale].complete += completeKeys.length;\n languageStats[targetLocale].words += wordsToTranslate;\n totalWordCount.set(targetLocale, (totalWordCount.get(targetLocale) || 0) + wordsToTranslate);\n\n // Display progress\n const totalKeysInFile = sourceKeys.length;\n const completionPercent = ((completeKeys.length / totalKeysInFile) * 100).toFixed(1);\n\n if (missingKeys.length === 0 && updatedKeys.length === 0) {\n bucketOra.succeed(\n `[${sourceLocale} -> ${targetLocale}] ${chalk.green(`100% complete`)} (${completeKeys.length}/${totalKeysInFile} keys)`,\n );\n } else {\n const message = `[${sourceLocale} -> ${targetLocale}] ${\n parseFloat(completionPercent) > 50\n ? chalk.yellow(`${completionPercent}% complete`)\n : chalk.red(`${completionPercent}% complete`)\n } (${completeKeys.length}/${totalKeysInFile} keys)`;\n\n bucketOra.succeed(message);\n\n if (flags.verbose) {\n if (missingKeys.length > 0) {\n console.log(` ${chalk.red(`Missing:`)} ${missingKeys.length} keys, ~${wordsToTranslate} words`);\n console.log(\n ` ${chalk.dim(`Example missing: ${missingKeys.slice(0, 2).join(\", \")}${missingKeys.length > 2 ? \"...\" : \"\"}`)}`,\n );\n }\n if (updatedKeys.length > 0) {\n console.log(` ${chalk.yellow(`Updated:`)} ${updatedKeys.length} keys that changed in source`);\n }\n }\n }\n }\n }\n } catch (error: any) {\n ora.fail(`Failed to analyze bucket ${bucket.type}: ${error.message}`);\n }\n }\n\n // Calculate unique keys needing translation and keys fully translated\n // Count unique keys that need translation\n const totalKeysNeedingTranslation = Object.values(languageStats).reduce((sum, stats) => {\n return sum + stats.missing + stats.updated;\n }, 0);\n\n // Calculate keys that are completely translated\n const totalCompletedKeys = totalSourceKeyCount - totalKeysNeedingTranslation / targetLocales.length;\n\n // Summary output\n console.log();\n ora.succeed(chalk.green(`Localization status completed.`));\n\n // Create a visually impactful main header\n console.log(chalk.bold.cyan(`\\n╔════════════════════════════════════╗`));\n console.log(chalk.bold.cyan(`║ LOCALIZATION STATUS REPORT ║`));\n console.log(chalk.bold.cyan(`╚════════════════════════════════════╝`));\n\n // Source content overview\n console.log(chalk.bold(`\\n📝 SOURCE CONTENT:`));\n console.log(`• Source language: ${chalk.green(i18nConfig!.locale.source)}`);\n console.log(`• Source keys: ${chalk.yellow(totalSourceKeyCount.toString())} keys across all files`);\n\n // Create a language-by-language breakdown table\n console.log(chalk.bold(`\\n🌐 LANGUAGE BY LANGUAGE BREAKDOWN:`));\n\n // Create a new table instance with cli-table3\n const table = new Table({\n head: [\"Language\", \"Status\", \"Complete\", \"Missing\", \"Updated\", \"Total Keys\", \"Words to Translate\"],\n style: {\n head: [\"white\"], // White color for headers\n border: [], // No color for borders\n },\n colWidths: [12, 20, 18, 12, 12, 12, 15], // Explicit column widths, making Status column wider\n });\n\n // Data rows\n let totalWordsToTranslate = 0;\n for (const locale of targetLocales) {\n const stats = languageStats[locale];\n const percentComplete = ((stats.complete / totalSourceKeyCount) * 100).toFixed(1);\n const totalNeeded = stats.missing + stats.updated;\n\n // Determine status text and color\n let statusText;\n let statusColor;\n if (stats.missing === totalSourceKeyCount) {\n statusText = \"🔴 Not started\";\n statusColor = chalk.red;\n } else if (stats.missing === 0 && stats.updated === 0) {\n statusText = \"✅ Complete\";\n statusColor = chalk.green;\n } else if (parseFloat(percentComplete) > 80) {\n statusText = \"🟡 Almost done\";\n statusColor = chalk.yellow;\n } else if (parseFloat(percentComplete) > 0) {\n statusText = \"🟠 In progress\";\n statusColor = chalk.yellow;\n } else {\n statusText = \"🔴 Not started\";\n statusColor = chalk.red;\n }\n\n // Create row data\n const words = totalWordCount.get(locale) || 0;\n totalWordsToTranslate += words;\n\n // Add row to the table\n table.push([\n locale,\n statusColor(statusText),\n `${stats.complete}/${totalSourceKeyCount} (${percentComplete}%)`,\n stats.missing > 0 ? chalk.red(stats.missing.toString()) : \"0\",\n stats.updated > 0 ? chalk.yellow(stats.updated.toString()) : \"0\",\n totalNeeded > 0 ? chalk.magenta(totalNeeded.toString()) : \"0\",\n words > 0 ? `~${words.toLocaleString()}` : \"0\",\n ]);\n }\n\n // Display the table\n console.log(table.toString());\n\n // Total usage summary\n console.log(chalk.bold(`\\n📊 USAGE ESTIMATE:`));\n console.log(\n `• WORDS TO BE CONSUMED: ~${chalk.yellow.bold(totalWordsToTranslate.toLocaleString())} words across all languages`,\n );\n console.log(` (Words are counted from source language for keys that need translation in target languages)`);\n\n // Breakdown by language if we have multiple languages\n if (targetLocales.length > 1) {\n console.log(`• Per-language breakdown:`);\n for (const locale of targetLocales) {\n const words = totalWordCount.get(locale) || 0;\n const percent = ((words / totalWordsToTranslate) * 100).toFixed(1);\n console.log(` - ${locale}: ~${words.toLocaleString()} words (${percent}% of total)`);\n }\n }\n\n // Detailed stats if flags.confirm is specified\n if (flags.confirm && Object.keys(fileStats).length > 0) {\n console.log(chalk.bold(`\\n📑 BREAKDOWN BY FILE:`));\n\n Object.entries(fileStats)\n .sort((a, b) => b[1].wordCount - a[1].wordCount) // Sort by word count\n .forEach(([path, stats]) => {\n // Skip files with no source keys\n if (stats.sourceKeys === 0) return;\n\n console.log(chalk.bold(`\\n• ${path}:`));\n console.log(` ${stats.sourceKeys} source keys, ~${stats.wordCount.toLocaleString()} source words`);\n\n // Create file detail table\n const fileTable = new Table({\n head: [\"Language\", \"Status\", \"Details\"],\n style: {\n head: [\"white\"],\n border: [],\n },\n colWidths: [12, 20, 50], // Explicit column widths for file detail table\n });\n\n for (const locale of targetLocales) {\n const langStats = stats.languageStats[locale];\n const complete = langStats.complete;\n const total = stats.sourceKeys;\n const completion = ((complete / total) * 100).toFixed(1);\n\n let status = \"✅ Complete\";\n let statusColor = chalk.green;\n\n if (langStats.missing === total) {\n status = \"❌ Not started\";\n statusColor = chalk.red;\n } else if (langStats.missing > 0 || langStats.updated > 0) {\n status = `⚠️ ${completion}% complete`;\n statusColor = chalk.yellow;\n }\n\n // Show counts only if there's something missing or updated\n let details = \"\";\n if (langStats.missing > 0 || langStats.updated > 0) {\n const parts = [];\n if (langStats.missing > 0) parts.push(`${langStats.missing} missing`);\n if (langStats.updated > 0) parts.push(`${langStats.updated} changed`);\n details = `${parts.join(\", \")}, ~${langStats.words} words`;\n } else {\n details = \"All keys translated\";\n }\n\n fileTable.push([locale, statusColor(status), details]);\n }\n\n console.log(fileTable.toString());\n });\n }\n\n // Find fully translated and missing languages\n const completeLanguages = targetLocales.filter(\n (locale) => languageStats[locale].missing === 0 && languageStats[locale].updated === 0,\n );\n\n const missingLanguages = targetLocales.filter((locale) => languageStats[locale].complete === 0);\n\n // Add optimization tips\n console.log(chalk.bold.green(`\\n💡 OPTIMIZATION TIPS:`));\n\n if (missingLanguages.length > 0) {\n console.log(\n `• ${chalk.yellow(missingLanguages.join(\", \"))} ${missingLanguages.length === 1 ? \"has\" : \"have\"} no translations yet`,\n );\n }\n\n if (completeLanguages.length > 0) {\n console.log(\n `• ${chalk.green(completeLanguages.join(\", \"))} ${completeLanguages.length === 1 ? \"is\" : \"are\"} completely translated`,\n );\n }\n\n // Other tips\n if (targetLocales.length > 1) {\n console.log(`• Translating one language at a time reduces complexity`);\n console.log(`• Try 'lingo.dev@latest i18n --locale ${targetLocales[0]}' to process just one language`);\n }\n\n // Track successful completion\n trackEvent(authId || \"status\", \"cmd.status.success\", {\n i18nConfig,\n flags,\n totalSourceKeyCount,\n languageStats,\n totalWordsToTranslate,\n authenticated: !!authId,\n });\n } catch (error: any) {\n ora.fail(error.message);\n trackEvent(authId || \"status\", \"cmd.status.error\", {\n flags,\n error: error.message,\n authenticated: !!authId,\n });\n process.exit(1);\n }\n });\n\nfunction parseFlags(options: any) {\n return Z.object({\n locale: Z.array(localeCodeSchema).optional(),\n bucket: Z.array(bucketTypeSchema).optional(),\n force: Z.boolean().optional(),\n confirm: Z.boolean().optional(),\n verbose: Z.boolean().optional(),\n file: Z.array(Z.string()).optional(),\n apiKey: Z.string().optional(),\n }).parse(options);\n}\n\nasync function tryAuthenticate(settings: ReturnType<typeof getSettings>) {\n if (!settings.auth.apiKey) {\n return null;\n }\n\n try {\n const authenticator = createAuthenticator({\n apiKey: settings.auth.apiKey,\n apiUrl: settings.auth.apiUrl,\n });\n const user = await authenticator.whoami();\n return user;\n } catch (error) {\n return null;\n }\n}\n\nfunction validateParams(i18nConfig: I18nConfig | null, flags: ReturnType<typeof parseFlags>) {\n if (!i18nConfig) {\n throw new CLIError({\n message: \"i18n.json not found. Please run `lingo.dev init` to initialize the project.\",\n docUrl: \"i18nNotFound\",\n });\n } else if (!i18nConfig.buckets || !Object.keys(i18nConfig.buckets).length) {\n throw new CLIError({\n message: \"No buckets found in i18n.json. Please add at least one bucket containing i18n content.\",\n docUrl: \"bucketNotFound\",\n });\n } else if (flags.locale?.some((locale) => !i18nConfig.locale.targets.includes(locale))) {\n throw new CLIError({\n message: `One or more specified locales do not exist in i18n.json locale.targets. Please add them to the list and try again.`,\n docUrl: \"localeTargetNotFound\",\n });\n } else if (flags.bucket?.some((bucket) => !i18nConfig.buckets[bucket as keyof typeof i18nConfig.buckets])) {\n throw new CLIError({\n message: `One or more specified buckets do not exist in i18n.json. Please add them to the list and try again.`,\n docUrl: \"bucketNotFound\",\n });\n }\n}\n","import { Command } from \"interactive-commander\";\nimport * as cp from \"node:child_process\";\nimport figlet from \"figlet\";\nimport chalk from \"chalk\";\nimport { vice } from \"gradient-string\";\nimport { setTimeout } from \"node:timers/promises\";\n\nexport const colors = {\n orange: \"#ff6600\",\n green: \"#6ae300\",\n blue: \"#0090ff\",\n yellow: \"#ffcc00\",\n grey: \"#808080\",\n red: \"#ff0000\",\n};\n\nexport default new Command()\n .command(\"may-the-fourth\")\n .description(\"May the Fourth be with you\")\n .helpOption(\"-h, --help\", \"Show help\")\n .action(async () => {\n await renderClear();\n await renderBanner();\n await renderSpacer();\n\n console.log(chalk.hex(colors.yellow)(\"Loading the Star Wars movie...\"));\n await renderSpacer();\n\n await new Promise<void>((resolve, reject) => {\n const ssh = cp.spawn(\"ssh\", [\"starwarstel.net\"], {\n stdio: \"inherit\",\n });\n\n ssh.on(\"close\", (code) => {\n if (code !== 0) {\n console.error(`SSH process exited with code ${code}`);\n // Optionally reject the promise if the exit code is non-zero\n // reject(new Error(`SSH process exited with code ${code}`));\n }\n resolve(); // Resolve the promise when SSH closes\n });\n\n ssh.on(\"error\", (err) => {\n console.error(\"Failed to start SSH process:\", err);\n reject(err); // Reject the promise on error\n });\n });\n\n // This code now runs after the SSH process has finished\n await renderSpacer();\n console.log(\n `${chalk.hex(colors.green)(\"We hope you enjoyed it! :)\")} ${chalk.hex(colors.blue)(\"May the Fourth be with you! 🚀\")}`,\n );\n await renderSpacer();\n console.log(chalk.dim(`---`));\n await renderSpacer();\n await renderHero();\n });\n\nasync function renderClear() {\n console.log(\"\\x1Bc\");\n}\n\nasync function renderSpacer() {\n console.log(\" \");\n}\n\nasync function renderBanner() {\n console.log(\n vice(\n figlet.textSync(\"LINGO.DEV\", {\n font: \"ANSI Shadow\",\n horizontalLayout: \"default\",\n verticalLayout: \"default\",\n }),\n ),\n );\n}\n\nasync function renderHero() {\n console.log(\n `⚡️ ${chalk.hex(colors.green)(\"Lingo.dev\")} - open-source, AI-powered i18n CLI for web & mobile localization.`,\n );\n console.log(\" \");\n console.log(\n chalk.hex(colors.blue)(\"⭐ GitHub Repo: https://lingo.dev/go/gh\"),\n );\n console.log(chalk.hex(colors.blue)(\"💬 24/7 Support: hi@lingo.dev\"));\n}\n","{\n \"name\": \"lingo.dev\",\n \"version\": \"0.99.2\",\n \"description\": \"Lingo.dev CLI\",\n \"private\": false,\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"type\": \"module\",\n \"sideEffects\": false,\n \"exports\": {\n \"./cli\": {\n \"types\": \"./build/cli.d.ts\",\n \"import\": \"./build/cli.mjs\",\n \"require\": \"./build/cli.cjs\"\n },\n \"./sdk\": {\n \"types\": \"./build/sdk.d.ts\",\n \"import\": \"./build/sdk.mjs\",\n \"require\": \"./build/sdk.cjs\"\n },\n \"./spec\": {\n \"types\": \"./build/spec.d.ts\",\n \"import\": \"./build/spec.mjs\",\n \"require\": \"./build/spec.cjs\"\n },\n \"./compiler\": {\n \"types\": \"./build/compiler.d.ts\",\n \"import\": \"./build/compiler.mjs\",\n \"require\": \"./build/compiler.cjs\"\n },\n \"./react\": {\n \"types\": \"./build/react.d.ts\",\n \"import\": \"./build/react.mjs\",\n \"require\": \"./build/react.cjs\"\n },\n \"./react-client\": {\n \"types\": \"./build/react/client.d.ts\",\n \"import\": \"./build/react/client.mjs\",\n \"require\": \"./build/react/client.cjs\"\n },\n \"./react/client\": {\n \"types\": \"./build/react/client.d.ts\",\n \"import\": \"./build/react/client.mjs\",\n \"require\": \"./build/react/client.cjs\"\n },\n \"./react-rsc\": {\n \"types\": \"./build/react/rsc.d.ts\",\n \"import\": \"./build/react/rsc.mjs\",\n \"require\": \"./build/react/rsc.cjs\"\n },\n \"./react/rsc\": {\n \"types\": \"./build/react/rsc.d.ts\",\n \"import\": \"./build/react/rsc.mjs\",\n \"require\": \"./build/react/rsc.cjs\"\n },\n \"./react-router\": {\n \"types\": \"./build/react/react-router.d.ts\",\n \"import\": \"./build/react/react-router.mjs\",\n \"require\": \"./build/react/react-router.cjs\"\n },\n \"./react/react-router\": {\n \"types\": \"./build/react/react-router.d.ts\",\n \"import\": \"./build/react/react-router.mjs\",\n \"require\": \"./build/react/react-router.cjs\"\n }\n },\n \"typesVersions\": {\n \"*\": {\n \"sdk\": [\n \"./build/sdk.d.ts\"\n ],\n \"cli\": [\n \"./build/cli.d.ts\"\n ],\n \"spec\": [\n \"./build/spec.d.ts\"\n ],\n \"compiler\": [\n \"./build/compiler.d.ts\"\n ],\n \"react\": [\n \"./build/react.d.ts\"\n ],\n \"react/client\": [\n \"./build/react/client.d.ts\"\n ],\n \"react/rsc\": [\n \"./build/react/rsc.d.ts\"\n ],\n \"react/react-router\": [\n \"./build/react/react-router.d.ts\"\n ]\n }\n },\n \"bin\": {\n \"lingo.dev\": \"./bin/cli.mjs\"\n },\n \"files\": [\n \"bin\",\n \"build\"\n ],\n \"scripts\": {\n \"lingo.dev\": \"node --inspect=9229 ./bin/cli.mjs\",\n \"dev\": \"tsup --watch\",\n \"build\": \"tsc --noEmit && tsup\",\n \"test\": \"vitest run\",\n \"test:watch\": \"vitest\",\n \"clean\": \"rm -rf build\"\n },\n \"keywords\": [],\n \"author\": \"\",\n \"license\": \"Apache-2.0\",\n \"dependencies\": {\n \"@ai-sdk/anthropic\": \"^1.2.11\",\n \"@ai-sdk/google\": \"^1.2.19\",\n \"@ai-sdk/openai\": \"^1.3.22\",\n \"@babel/generator\": \"^7.27.1\",\n \"@babel/parser\": \"^7.27.1\",\n \"@babel/traverse\": \"^7.27.4\",\n \"@babel/types\": \"^7.27.1\",\n \"@datocms/cma-client-node\": \"^4.0.1\",\n \"@gitbeaker/rest\": \"^39.34.3\",\n \"@inkjs/ui\": \"^2.0.0\",\n \"@inquirer/prompts\": \"^7.4.1\",\n \"@lingo.dev/_compiler\": \"workspace:*\",\n \"@lingo.dev/_react\": \"workspace:*\",\n \"@lingo.dev/_sdk\": \"workspace:*\",\n \"@lingo.dev/_spec\": \"workspace:*\",\n \"@modelcontextprotocol/sdk\": \"^1.5.0\",\n \"@openrouter/ai-sdk-provider\": \"^0.7.1\",\n \"@paralleldrive/cuid2\": \"^2.2.2\",\n \"ai\": \"^4.3.15\",\n \"bitbucket\": \"^2.12.0\",\n \"chalk\": \"^5.4.1\",\n \"cli-progress\": \"^3.12.0\",\n \"cli-table3\": \"^0.6.5\",\n \"cors\": \"^2.8.5\",\n \"csv-parse\": \"^5.6.0\",\n \"csv-stringify\": \"^6.5.2\",\n \"date-fns\": \"^4.1.0\",\n \"dedent\": \"^1.5.3\",\n \"diff\": \"^7.0.0\",\n \"dotenv\": \"^16.4.7\",\n \"express\": \"^5.1.0\",\n \"external-editor\": \"^3.1.0\",\n \"figlet\": \"^1.8.0\",\n \"flat\": \"^6.0.1\",\n \"gettext-parser\": \"^8.0.0\",\n \"glob\": \"<11.0.0\",\n \"gradient-string\": \"^3.0.0\",\n \"gray-matter\": \"^4.0.3\",\n \"ini\": \"^5.0.0\",\n \"ink\": \"^4.2.0\",\n \"ink-progress-bar\": \"^3.0.0\",\n \"ink-spinner\": \"^5.0.0\",\n \"inquirer\": \"^12.6.0\",\n \"interactive-commander\": \"^0.5.194\",\n \"is-url\": \"^1.2.4\",\n \"jsdom\": \"^25.0.1\",\n \"json5\": \"^2.2.3\",\n \"jsonrepair\": \"^3.11.2\",\n \"listr2\": \"^8.3.2\",\n \"lodash\": \"^4.17.21\",\n \"marked\": \"^15.0.6\",\n \"mdast-util-from-markdown\": \"^2.0.2\",\n \"mdast-util-gfm\": \"^3.1.0\",\n \"micromark-extension-gfm\": \"^3.0.0\",\n \"node-machine-id\": \"^1.1.12\",\n \"node-webvtt\": \"^1.9.4\",\n \"object-hash\": \"^3.0.0\",\n \"octokit\": \"^4.0.2\",\n \"ollama-ai-provider\": \"^1.2.0\",\n \"open\": \"^10.1.2\",\n \"ora\": \"^8.1.1\",\n \"p-limit\": \"^6.2.0\",\n \"php-array-reader\": \"^2.1.2\",\n \"plist\": \"^3.1.0\",\n \"posthog-node\": \"^4.17.0\",\n \"prettier\": \"^3.4.2\",\n \"react\": \"^18.3.1\",\n \"rehype-stringify\": \"^10.0.1\",\n \"remark-disable-tokenizers\": \"^1.1.1\",\n \"remark-frontmatter\": \"^5.0.0\",\n \"remark-gfm\": \"^4.0.1\",\n \"remark-mdx\": \"^3.1.0\",\n \"remark-mdx-frontmatter\": \"^5.1.0\",\n \"remark-parse\": \"^11.0.0\",\n \"remark-rehype\": \"^11.1.2\",\n \"remark-stringify\": \"^11.0.0\",\n \"srt-parser-2\": \"^1.2.3\",\n \"unified\": \"^11.0.5\",\n \"unist-util-visit\": \"^5.0.0\",\n \"vfile\": \"^6.0.3\",\n \"xliff\": \"^6.2.1\",\n \"xml2js\": \"^0.6.2\",\n \"xpath\": \"^0.0.34\",\n \"yaml\": \"^2.7.0\",\n \"zod\": \"^3.24.1\"\n },\n \"devDependencies\": {\n \"@types/babel__generator\": \"^7.27.0\",\n \"@types/cli-progress\": \"^3.11.6\",\n \"@types/cors\": \"^2.8.17\",\n \"@types/diff\": \"^7.0.0\",\n \"@types/express\": \"^5.0.1\",\n \"@types/figlet\": \"^1.7.0\",\n \"@types/gettext-parser\": \"^4.0.4\",\n \"@types/glob\": \"^8.1.0\",\n \"@types/ini\": \"^4.1.1\",\n \"@types/is-url\": \"^1.2.32\",\n \"@types/jsdom\": \"^21.1.7\",\n \"@types/lodash\": \"^4.17.16\",\n \"@types/mdast\": \"^4.0.4\",\n \"@types/node\": \"^22.10.2\",\n \"@types/node-gettext\": \"^3.0.6\",\n \"@types/object-hash\": \"^3.0.6\",\n \"@types/plist\": \"^3.0.5\",\n \"@types/react\": \"^18.3.20\",\n \"@types/xml2js\": \"^0.4.14\",\n \"tsup\": \"^8.3.5\",\n \"typescript\": \"^5.8.3\",\n \"vitest\": \"^3.1.2\"\n },\n \"engines\": {\n \"node\": \">=18\"\n },\n \"packageManager\": \"pnpm@9.12.3\"\n}\n"],"mappings":"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","names":["InteractiveCommand","figlet","vice","Command","Ora","readline","Command","Ora","readline","Command","Ora","Command","Ora","Ora","fs","path","resolveLocaleCode","fs","path","_","checkbox","confirm","path","_","fs","path","fs","path","fs","path","open","path","resolveLocaleCode","value","fs","Ora","_","checkbox","confirm","auth","Command","Command","_","fs","path","defaultConfig","Command","Ora","Command","Ora","Command","Ora","_","path","glob","_","path","glob","resolveOverriddenLocale","Command","Ora","path","Command","Command","Command","chalk","_","Command","chalk","_","Command","chalk","dedent","_","Command","dedent","chalk","_","Command","chalk","_","dedent","Command","chalk","_","config_default","Command","resolveOverriddenLocale","Command","Z","_","Ora","input","input","_","input","fs","path","_","path","fs","input","input","_","input","_","input","_","input","_","input","path","YAML","YAML","input","_","input","input","_","input","path","path","_","_","input","_","input","_","input","parseStringPromise","Builder","input","parseStringPromise","Builder","input","fs","Z","_","input","_","_","_","_","input","_","input","_","path","fs","input","_","input","_","_","input","_","indent","items","input","jsonrepair","input","jsonrepair","parse","_","input","_","parse","path","_","_","_","matter","YAML","input","yamlEngine","YAML","matter","input","_","input","input","_","input","input","_","chalk","inquirer","chalk","dedent","input","_","input","result","dedent","chalk","_","fs","path","path","YAML","_","Command","Ora","inquirer","path","resolveOverriddenLocale","_","deltaProcessor","checksums","Z","chalk","Command","Z","Ora","fs","path","Z","YAML","MD5","_","resolveOverriddenLocale","Command","Ora","resolveOverriddenLocale","Z","resolveOverriddenLocale","Command","_","Ora","Command","Ora","resolveOverriddenLocale","_","Command","Z","Command","_","Z","Command","execSync","path","Command","chalk","chalk","chalk","dedent","chalk","LingoDotDevEngine","dedent","chalk","LingoDotDevEngine","input","createAnthropic","createGoogleGenerativeAI","createOpenAI","createOpenRouter","chalk","dedent","generateText","jsonrepair","createOllama","dedent","chalk","createOpenAI","createAnthropic","createGoogleGenerativeAI","createOpenRouter","generateText","input","input","chalk","chalk","Listr","resolveOverriddenLocale","input","chalk","Listr","resolveOverriddenLocale","chalk","Listr","_","input","chalk","Listr","_","checksums","bucketTypeSchema","z","flagsSchema","Command","flagsSchema","path","execSync","error","execSync","Z","execSync","Z","execSync","Z","Z","Z","Z","Command","bucketTypeSchema","localeCodeSchema","resolveOverriddenLocale","Command","Z","Ora","chalk","Command","Ora","parseFlags","validateParams","path","resolveOverriddenLocale","chalk","Z","localeCodeSchema","bucketTypeSchema","Command","figlet","chalk","vice","colors","renderClear","renderBanner","renderSpacer","renderHero","InteractiveCommand","vice","figlet","config_default"]}