lingo.dev 0.77.5 → 0.77.6
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.cjs +2 -2
- package/build/cli.cjs.map +1 -1
- package/build/cli.mjs +2 -2
- package/build/cli.mjs.map +1 -1
- package/package.json +1 -1
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/auth.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/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/index.ts","../src/cli/utils/lockfile.ts","../src/cli/utils/cache.ts","../src/cli/cmd/lockfile.ts","../src/cli/cmd/cleanup.ts","../src/cli/cmd/mcp.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\";\n\nimport authCmd from \"./cmd/auth\";\nimport initCmd from \"./cmd/init\";\nimport configCmd from \"./cmd/show\";\nimport i18nCmd from \"./cmd/i18n\";\nimport lockfileCmd from \"./cmd/lockfile\";\nimport cleanupCmd from \"./cmd/cleanup\";\nimport mcpCmd from \"./cmd/mcp\";\n\nimport packageJson from \"../../package.json\";\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\nWebsite: https://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(configCmd)\n .addCommand(lockfileCmd)\n .addCommand(cleanupCmd)\n .addCommand(mcpCmd)\n .exitOverride((err) => {\n // Exit with code 0 when help or version is displayed\n if (err.code === \"commander.helpDisplayed\" || err.code === \"commander.version\" || err.code === \"commander.help\") {\n process.exit(0);\n }\n throw err;\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 { createAuthenticator } from \"../utils/auth\";\n\nexport default new Command()\n .command(\"auth\")\n .description(\"Authenticate with Lingo.dev API\")\n .helpOption(\"-h, --help\", \"Show help\")\n .option(\"--logout\", \"Delete existing authentication\")\n .option(\"--login\", \"Authenticate with Lingo.dev API\")\n .action(async (options) => {\n try {\n let settings = await getSettings(undefined);\n\n if (options.logout) {\n settings.auth.apiKey = \"\";\n await saveSettings(settings);\n }\n if (options.login) {\n const apiKey = await login(settings.auth.webUrl);\n settings.auth.apiKey = apiKey;\n await saveSettings(settings);\n settings = await getSettings(undefined);\n }\n\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\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 // start a sever on an ephemeral port and return the port number\n // from the function\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 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 return {\n auth: {\n apiKey: explicitApiKey || env.LINGODOTDEV_API_KEY || systemFile.auth?.apiKey || defaults.auth.apiKey,\n apiUrl: env.LINGODOTDEV_API_URL || systemFile.auth?.apiUrl || defaults.auth.apiUrl,\n webUrl: env.LINGODOTDEV_WEB_URL || systemFile.auth?.webUrl || defaults.auth.webUrl,\n },\n };\n}\n\nexport function saveSettings(settings: CliSettings): void {\n _saveSystemFile(settings);\n}\n\nconst SettingsSchema = Z.object({\n auth: Z.object({\n apiKey: Z.string(),\n apiUrl: Z.string(),\n webUrl: Z.string(),\n }),\n});\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 };\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 })\n .passthrough()\n .parse(process.env);\n}\n\nfunction _loadSystemFile() {\n const settingsFilePath = _getSettingsFilePath();\n const content = fs.existsSync(settingsFilePath) ? fs.readFileSync(settingsFilePath, \"utf-8\") : \"\";\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 })\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","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","import { CLIError } from \"./errors\";\n\nexport type AuthenticatorParams = {\n apiUrl: string;\n apiKey: string;\n};\n\nexport type AuthPayload = {\n email: 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 };\n }\n\n return null;\n } catch (error) {\n const isNetworkError = 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 { 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 { spawn } from \"child_process\";\nimport _ from \"lodash\";\nimport { checkbox, confirm, input } from \"@inquirer/prompts\";\nimport { login } from \"./auth\";\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\";\n\nconst openUrl = (path: string) => {\n const settings = getSettings(undefined);\n spawn(\"open\", [`${settings.auth.webUrl}${path}`]);\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 { patterns, defaultPatterns } = findLocaleFiles(options.bucket);\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 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 throw new Error(`Unsupported bucket type: ${bucket}`);\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 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 if (fs.existsSync(gitignorePath)) {\n content = fs.readFileSync(gitignorePath, \"utf8\");\n if (content !== \"\" && !content.endsWith(\"\\n\")) {\n content += \"\\n\";\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 { resolveOverridenLocale } 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\")\n .option(\"--target\", \"Only show target files\")\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.config) {\n const sourceLocale = resolveOverridenLocale(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 = resolveOverridenLocale(_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 { I18nConfig, resolveOverridenLocale, BucketItem } from \"@lingo.dev/_spec\";\nimport { bucketTypeSchema } from \"@lingo.dev/_spec\";\nimport Z from \"zod\";\n\nexport function getBuckets(i18nConfig: I18nConfig) {\n const result = Object.entries(i18nConfig.buckets).map(([bucketType, bucketEntry]) => {\n const includeItems = bucketEntry.include.map((item) => resolveBucketItem(item));\n const excludeItems = bucketEntry.exclude?.map((item) => resolveBucketItem(item));\n return {\n type: bucketType as Z.infer<typeof bucketTypeSchema>,\n config: extractPathPatterns(i18nConfig.locale.source, includeItems, excludeItems),\n };\n });\n\n return result;\n}\n\nfunction extractPathPatterns(sourceLocale: string, include: BucketItem[], exclude?: BucketItem[]) {\n const includedPatterns = include.flatMap((pattern) =>\n expandPlaceholderedGlob(pattern.path, resolveOverridenLocale(sourceLocale, pattern.delimiter)).map(\n (pathPattern) => ({\n pathPattern,\n delimiter: pattern.delimiter,\n }),\n ),\n );\n const excludedPatterns = exclude?.flatMap((pattern) =>\n expandPlaceholderedGlob(pattern.path, resolveOverridenLocale(sourceLocale, pattern.delimiter)).map(\n (pathPattern) => ({\n pathPattern,\n delimiter: pattern.delimiter,\n }),\n ),\n );\n const result = _.differenceBy(includedPatterns, excludedPatterns ?? [], (item) => item.pathPattern);\n return result;\n}\n\n// Path expansion\nfunction expandPlaceholderedGlob(_pathPattern: string, sourceLocale: string): 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((indexes, segment, index) => {\n if (segment.includes(\"[locale]\")) {\n indexes.push(index);\n }\n return indexes;\n }, [] as number[]);\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.replaceAll(\".\", \"\\\\.\").replaceAll(\"*\", \".*\").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 { bucketTypeSchema, I18nConfig, localeCodeSchema, resolveOverridenLocale } from \"@lingo.dev/_spec\";\nimport { LingoDotDevEngine } from \"@lingo.dev/_sdk\";\nimport { Command } from \"interactive-commander\";\nimport Z from \"zod\";\nimport _ from \"lodash\";\nimport { getConfig } from \"../utils/config\";\nimport { getSettings } from \"../utils/settings\";\nimport { CLIError } from \"../utils/errors\";\nimport Ora from \"ora\";\nimport createBucketLoader from \"../loaders\";\nimport { createLockfileHelper } from \"../utils/lockfile\";\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 { cacheChunk, deleteCache, getNormalizedCache } from \"../utils/cache\";\nimport updateGitignore from \"../utils/update-gitignore\";\n\nexport default new Command()\n .command(\"i18n\")\n .description(\"Run Localization engine\")\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(\"--key <key>\", \"Key to process\")\n .option(\"--frozen\", `Don't update the translations and fail if an update is needed`)\n .option(\"--force\", \"Ignore lockfile and process all keys\")\n .option(\"--verbose\", \"Show verbose output\")\n .option(\"--interactive\", \"Interactive mode\")\n .option(\"--api-key <api-key>\", \"Explicitly set the API key to use\")\n .option(\"--debug\", \"Debug mode\")\n .option(\"--strict\", \"Stop on first error\")\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 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 Replexica Localization Engine...\");\n const auth = await validateAuth(settings);\n ora.succeed(`Authenticated as ${auth.email}`);\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 const targetLocales = flags.locale?.length ? flags.locale : i18nConfig!.locale.targets;\n const lockfileHelper = createLockfileHelper();\n\n // Ensure the lockfile exists\n ora.start(\"Ensuring i18n.lock exists...\");\n if (!lockfileHelper.isLockfileExists()) {\n ora.start(\"Creating i18n.lock...\");\n for (const bucket of buckets) {\n for (const bucketConfig of bucket.config) {\n const sourceLocale = resolveOverridenLocale(i18nConfig!.locale.source, bucketConfig.delimiter);\n\n const bucketLoader = createBucketLoader(bucket.type, bucketConfig.pathPattern);\n bucketLoader.setDefaultLocale(sourceLocale);\n await bucketLoader.init();\n\n const sourceData = await bucketLoader.pull(i18nConfig!.locale.source);\n lockfileHelper.registerSourceData(bucketConfig.pathPattern, sourceData);\n }\n }\n ora.succeed(\"i18n.lock created\");\n } else {\n ora.succeed(\"i18n.lock loaded\");\n }\n\n // recover cache if exists\n const cache = getNormalizedCache();\n if (cache) {\n console.log();\n ora.succeed(`Cache loaded. Attempting recovery...`);\n const cacheOra = Ora({ indent: 2 });\n\n for (const bucket of buckets) {\n cacheOra.info(`Processing bucket: ${bucket.type}`);\n for (const bucketConfig of bucket.config) {\n const bucketOra = Ora({ indent: 4 });\n bucketOra.info(`Processing path: ${bucketConfig.pathPattern}`);\n\n const sourceLocale = resolveOverridenLocale(i18nConfig!.locale.source, bucketConfig.delimiter);\n const bucketLoader = createBucketLoader(bucket.type, bucketConfig.pathPattern, { isCacheRestore: true });\n bucketLoader.setDefaultLocale(sourceLocale);\n await bucketLoader.init();\n const sourceData = await bucketLoader.pull(sourceLocale);\n const cachedSourceData: Record<string, string> = {};\n\n for (const targetLocale in cache) {\n const targetData = await bucketLoader.pull(targetLocale);\n\n for (const key in cache[targetLocale]) {\n const { source, result } = cache[targetLocale][key];\n\n if (sourceData[key] === source && targetData[key] !== result) {\n targetData[key] = result;\n cachedSourceData[key] = source;\n }\n }\n\n await bucketLoader.push(targetLocale, targetData);\n lockfileHelper.registerPartialSourceData(bucketConfig.pathPattern, cachedSourceData);\n\n bucketOra.succeed(\n `[${sourceLocale} -> ${targetLocale}] Recovered ${Object.keys(cachedSourceData).length} entries from cache`,\n );\n }\n }\n }\n deleteCache();\n if (flags.verbose) {\n cacheOra.info(\"Cache file deleted.\");\n }\n } else if (flags.verbose) {\n ora.info(\"Cache file not found. Skipping recovery.\");\n }\n\n if (flags.frozen) {\n ora.start(\"Checking for lockfile updates...\");\n let requiresUpdate = false;\n for (const bucket of buckets) {\n for (const bucketConfig of bucket.config) {\n const sourceLocale = resolveOverridenLocale(i18nConfig!.locale.source, bucketConfig.delimiter);\n\n const bucketLoader = createBucketLoader(bucket.type, bucketConfig.pathPattern);\n bucketLoader.setDefaultLocale(sourceLocale);\n await bucketLoader.init();\n\n const sourceData = await bucketLoader.pull(i18nConfig!.locale.source);\n const updatedSourceData = lockfileHelper.extractUpdatedData(bucketConfig.pathPattern, sourceData);\n\n if (Object.keys(updatedSourceData).length > 0) {\n requiresUpdate = true;\n break;\n }\n }\n if (requiresUpdate) break;\n }\n\n if (requiresUpdate) {\n ora.fail(\"Localization data has changed; please update i18n.lock or run without --frozen.\");\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 bucketConfig of bucket.config) {\n const bucketOra = Ora({ indent: 2 }).info(`Processing path: ${bucketConfig.pathPattern}`);\n\n const sourceLocale = resolveOverridenLocale(i18nConfig!.locale.source, bucketConfig.delimiter);\n\n const bucketLoader = createBucketLoader(bucket.type, bucketConfig.pathPattern);\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 = resolveOverridenLocale(_targetLocale, bucketConfig.delimiter);\n try {\n bucketOra.start(`[${sourceLocale} -> ${targetLocale}] (0%) Localization in progress...`);\n\n sourceData = await bucketLoader.pull(sourceLocale);\n\n const updatedSourceData = flags.force\n ? sourceData\n : lockfileHelper.extractUpdatedData(bucketConfig.pathPattern, sourceData);\n\n const targetData = await bucketLoader.pull(targetLocale);\n let processableData = calculateDataDelta({\n sourceData,\n updatedSourceData,\n targetData,\n });\n if (flags.key) {\n processableData = _.pickBy(processableData, (_, key) => key === flags.key);\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 const localizationEngine = createLocalizationEngineConnection({\n apiKey: settings.auth.apiKey,\n apiUrl: settings.auth.apiUrl,\n });\n const processedTargetData = await localizationEngine.process(\n {\n sourceLocale,\n sourceData,\n processableData,\n targetLocale,\n targetData,\n },\n (progress, sourceChunk, processedChunk) => {\n cacheChunk(targetLocale, sourceChunk, processedChunk);\n\n const progressLog = `[${sourceLocale} -> ${targetLocale}] [${Object.keys(processableData).length} entries] (${progress}%) AI localization in progress...`;\n if (flags.verbose) {\n bucketOra.info(progressLog);\n bucketOra.info(\n `(${progress}%) Caching chunk ${JSON.stringify(sourceChunk, null, 2)} -> ${JSON.stringify(processedChunk, null, 2)}`,\n );\n } else {\n bucketOra.text = progressLog;\n }\n },\n );\n\n if (flags.verbose) {\n bucketOra.info(JSON.stringify(processedTargetData, null, 2));\n }\n\n let finalTargetData = _.merge({}, sourceData, targetData, processedTargetData);\n\n if (flags.interactive) {\n bucketOra.stop();\n const reviewedData = await reviewChanges({\n pathPattern: bucketConfig.pathPattern,\n targetLocale,\n currentData: targetData,\n proposedData: finalTargetData,\n sourceData,\n force: flags.force!,\n });\n\n finalTargetData = reviewedData;\n bucketOra.start(`Applying changes to ${bucketConfig} (${targetLocale})`);\n }\n\n const finalDiffSize = _.chain(finalTargetData)\n .omitBy((value, key) => value === targetData[key])\n .size()\n .value();\n if (finalDiffSize > 0 || flags.force) {\n await bucketLoader.push(targetLocale, finalTargetData);\n bucketOra.succeed(`[${sourceLocale} -> ${targetLocale}] Localization completed`);\n } else {\n bucketOra.succeed(`[${sourceLocale} -> ${targetLocale}] Localization completed (no changes).`);\n }\n } catch (_error: any) {\n const error = new Error(`[${sourceLocale} -> ${targetLocale}] Localization failed: ${_error.message}`);\n if (flags.strict) {\n throw error;\n } else {\n bucketOra.fail(error.message);\n hasErrors = true;\n }\n }\n }\n\n lockfileHelper.registerSourceData(bucketConfig.pathPattern, sourceData);\n }\n } catch (_error: any) {\n const error = new Error(`Failed to process bucket ${bucket.type}: ${_error.message}`);\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 deleteCache();\n if (flags.verbose) {\n ora.info(\"Cache file deleted.\");\n }\n } else {\n ora.warn(\"Localization completed with errors.\");\n }\n } catch (error: any) {\n ora.fail(error.message);\n process.exit(1);\n }\n });\n\nfunction calculateDataDelta(args: {\n sourceData: Record<string, any>;\n updatedSourceData: Record<string, any>;\n targetData: Record<string, any>;\n}) {\n // Calculate missing keys\n const newKeys = _.difference(Object.keys(args.sourceData), Object.keys(args.targetData));\n // Calculate updated keys\n const updatedKeys = Object.keys(args.updatedSourceData);\n\n // Calculate delta payload\n const result = _.chain(args.sourceData)\n .pickBy((value, key) => newKeys.includes(key) || updatedKeys.includes(key))\n .value() as Record<string, any>;\n\n return result;\n}\n\nasync function retryWithExponentialBackoff<T>(\n operation: () => Promise<T>,\n maxAttempts: number,\n baseDelay: number = 1000,\n): Promise<T> {\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n try {\n return await operation();\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\nfunction createLocalizationEngineConnection(params: { apiKey: string; apiUrl: string; maxRetries?: number }) {\n const replexicaEngine = new LingoDotDevEngine({\n apiKey: params.apiKey,\n apiUrl: params.apiUrl,\n });\n\n return {\n process: async (\n args: {\n sourceLocale: string;\n sourceData: Record<string, any>;\n processableData: Record<string, any>;\n targetLocale: string;\n targetData: Record<string, any>;\n },\n onProgress: (\n progress: number,\n sourceChunk: Record<string, string>,\n processedChunk: Record<string, string>,\n ) => void,\n ) => {\n return retryWithExponentialBackoff(\n () =>\n replexicaEngine.localizeObject(\n args.processableData,\n {\n sourceLocale: args.sourceLocale,\n targetLocale: args.targetLocale,\n reference: {\n [args.sourceLocale]: args.sourceData,\n [args.targetLocale]: args.targetData,\n },\n },\n onProgress,\n ),\n params.maxRetries ?? 3,\n );\n },\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 interactive: Z.boolean().default(false),\n debug: Z.boolean().default(false),\n }).parse(options);\n}\n\nasync function validateAuth(settings: ReturnType<typeof getSettings>) {\n if (!settings.auth.apiKey) {\n throw new CLIError({\n message: \"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: \"Invalid API key. Please run `lingo.dev auth --login` to authenticate.\",\n docUrl: \"authError\",\n });\n }\n\n return user;\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\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(`\\nReviewing changes for ${chalk.blue(args.pathPattern)} (${chalk.yellow(args.targetLocale)}):`);\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(chalk.gray(\"Current value:\"), chalk.red(args.currentData[key] || \"(empty)\"));\n console.log(chalk.gray(\"Suggested value:\"), chalk.green(args.proposedData[key]));\n console.log(chalk.gray(\"\\nYour editor will open. Edit the text and save to continue.\"));\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(chalk.yellow(\"Empty value provided, keeping the current value.\"));\n customData[key] = args.currentData[key] || args.proposedData[key];\n }\n } catch (error) {\n console.log(chalk.red(\"Error while editing, keeping the suggested value.\"));\n customData[key] = args.proposedData[key];\n }\n }\n\n return customData;\n}\n","import { ILoader, ILoaderDefinition } from \"./_types\";\n\nexport function composeLoaders(...loaders: ILoader<any, any, any>[]): 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>(lDefinition: ILoaderDefinition<I, O, C>): ILoader<I, O, C> {\n const state = {\n defaultLocale: undefined as string | undefined,\n originalInput: undefined as I | 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 return lDefinition.pull(locale, input, state.initCtx);\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(locale, data, state.originalInput, state.defaultLocale);\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<Record<string, any>, DenormalizeResult> {\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<DenormalizeResult, Record<string, string>> {\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(obj: Record<string, any>, denormalizedKeysMap: Record<string, string>) {\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(obj: Record<string, any>): Record<string, any> {\n if (_.isObject(obj) && !_.isArray(obj)) {\n return _.transform(\n obj,\n (result, value, key) => {\n const newKey = !isNaN(Number(key)) ? `${OBJECT_NUMERIC_KEY_PREFIX}${key}` : key;\n result[newKey] = _.isObject(value) ? denormalizeObjectKeys(value) : value;\n },\n {} as Record<string, any>,\n );\n } else {\n return obj;\n }\n}\n\nexport function normalizeObjectKeys(obj: Record<string, any>): 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] = _.isObject(value) ? normalizeObjectKeys(value) : 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 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) {\n return YAML.stringify(payload, {\n lineWidth: -1,\n });\n },\n });\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<string, Record<string, any>> {\n return createLoader({\n async pull(locale, input) {\n try {\n const result: Record<string, any> = {};\n const parsed: AndroidResources = !input\n ? { resources: {} }\n : await parseStringPromise(input, { explicitArray: true });\n\n if (!parsed || !parsed.resources) {\n console.warn(\"No resources found in the Android resource file\");\n return result;\n }\n\n const processResource = (resourceType: string) => {\n const resources = parsed.resources[resourceType as keyof AndroidResources[\"resources\"]];\n if (!resources) return;\n\n resources.forEach((item: AndroidResource) => {\n if (item.$ && item.$.translatable === \"false\") return;\n\n if (resourceType === \"string\") {\n result[item.$.name] = item._ || \"\";\n } else if (resourceType === \"string-array\") {\n result[item.$.name] = (item.item || [])\n .map((subItem: any) => {\n if (typeof subItem === \"string\") return subItem;\n return subItem._ || \"\";\n })\n .filter(Boolean); // Remove any empty strings\n } else if (resourceType === \"plurals\") {\n const pluralObj: Record<string, string> = {};\n if (Array.isArray(item.item)) {\n item.item.forEach((subItem: any) => {\n if (subItem.$ && subItem.$.quantity) {\n pluralObj[subItem.$.quantity] = subItem._ || \"\";\n }\n });\n }\n result[item.$.name] = pluralObj;\n } else if (resourceType === \"bool\") {\n result[item.$.name] = item._ === \"true\";\n } else if (resourceType === \"integer\") {\n result[item.$.name] = parseInt(item._ || \"0\", 10);\n }\n });\n };\n\n [\"string\", \"string-array\", \"plurals\", \"bool\", \"integer\"].forEach(processResource);\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 const builder = new Builder({ headless: true });\n const xmlObj: AndroidResources = { resources: {} };\n\n // Helper function to escape single quotes, avoiding double escaping\n const escapeSingleQuotes = (str: string) => {\n return str.replace(/(?<!\\\\)'/g, \"\\\\'\");\n };\n\n for (const [key, value] of Object.entries(payload)) {\n if (typeof value === \"string\") {\n if (!xmlObj.resources.string) xmlObj.resources.string = [];\n xmlObj.resources.string.push({ $: { name: key }, _: escapeSingleQuotes(value) });\n } else if (Array.isArray(value)) {\n if (!xmlObj.resources[\"string-array\"]) xmlObj.resources[\"string-array\"] = [];\n xmlObj.resources[\"string-array\"].push({\n $: { name: key },\n item: value.map((item) => ({ _: escapeSingleQuotes(item) })),\n });\n } else if (typeof value === \"object\") {\n if (!xmlObj.resources.plurals) xmlObj.resources.plurals = [];\n xmlObj.resources.plurals.push({\n $: { name: key },\n item: Object.entries(value).map(([quantity, text]) => ({\n $: { quantity },\n _: escapeSingleQuotes(text as string),\n })),\n });\n } else if (typeof value === \"boolean\") {\n if (!xmlObj.resources.bool) xmlObj.resources.bool = [];\n xmlObj.resources.bool.push({ $: { name: key }, _: value.toString() });\n } else if (typeof value === \"number\") {\n if (!xmlObj.resources.integer) xmlObj.resources.integer = [];\n xmlObj.resources.integer.push({\n $: { name: key },\n _: value.toString(),\n });\n }\n }\n\n const result = builder.buildObject(xmlObj);\n return result;\n },\n });\n}\n\ninterface AndroidResource {\n $: {\n name: string;\n [key: string]: string;\n };\n _?: string;\n item?: Array<{ $?: { quantity?: string }; _: string } | string>;\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 { createLoader } from \"./_utils\";\n\nexport default function createCsvLoader(): ILoader<string, Record<string, string>> {\n return createLoader({\n async pull(locale, _input) {\n const input = parse(_input, {\n columns: true,\n skip_empty_lines: true,\n });\n\n const result: Record<string, string> = {};\n\n _.forEach(input, (row) => {\n const key = row.id;\n if (key && row[locale] && row[locale].trim() !== \"\") {\n result[key] = row[locale];\n }\n });\n\n return result;\n },\n async push(locale, data, originalInput) {\n const input = parse(originalInput || \"\", {\n columns: true,\n skip_empty_lines: true,\n }) as Record<string, any>[];\n\n const columns = input.length > 0 ? Object.keys(input[0]) : [\"id\", locale];\n\n const updatedRows = input.map((row) => ({\n ...row,\n [locale]: data[row.id] || row[locale] || \"\",\n }));\n const existingKeys = new Set(input.map((row) => row.id));\n\n Object.entries(data).forEach(([key, value]) => {\n if (!existingKeys.has(key)) {\n const newRow: Record<string, string> = {\n id: 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","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.trim()])\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(): ILoader<Record<string, any>, Record<string, any>> {\n return createLoader({\n async pull(locale, input) {\n const resultData: Record<string, any> = {};\n\n for (const [translationKey, _translationEntity] of Object.entries(input.strings)) {\n const rootTranslationEntity = _translationEntity as any;\n const langTranslationEntity = rootTranslationEntity?.localizations?.[locale];\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 }\n }\n\n return resultData;\n },\n async push(locale, payload, originalInput) {\n const langDataToMerge: any = {};\n langDataToMerge.strings = {};\n\n for (const [key, value] of Object.entries(payload)) {\n if (typeof value === \"string\") {\n langDataToMerge.strings[key] = {\n extractionState: \"manual\",\n localizations: {\n [locale]: {\n stringUnit: {\n state: \"translated\",\n value,\n },\n },\n },\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 }\n\n const result = _.merge({}, originalInput, langDataToMerge);\n return result;\n },\n });\n}\n","import prettier, { Options } from \"prettier\";\nimport { ILoader } from \"./_types\";\nimport { createLoader } from \"./_utils\";\n\nexport type PrettierLoaderOptions = {\n parser: Options[\"parser\"];\n alwaysFormat?: boolean;\n};\n\nexport default function createPrettierLoader(options: PrettierLoaderOptions): ILoader<string, string> {\n return createLoader({\n async pull(locale, data) {\n return data;\n },\n async push(locale, data) {\n const prettierConfig = await loadPrettierConfig();\n if (!prettierConfig && !options.alwaysFormat) {\n return data;\n }\n\n const result = prettier.format(data, {\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 return result;\n },\n });\n}\n\nasync function loadPrettierConfig() {\n try {\n const config = await prettier.resolveConfig(process.cwd());\n return config;\n } catch (error) {\n return {};\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): ILoader<Record<string, any>, Record<string, any>> {\n const rules = {\n isEmpty: (v: any) => _.isEmpty(v),\n isNumber: (v: string) => !_.isNaN(_.toNumber(v)),\n isBoolean: (v: string) => _.isBoolean(v),\n isIsoDate: (v: string) => _.isString(v) && _isIsoDate(v),\n isSystemId: (v: string) => _.isString(v) && _isSystemId(v),\n isUrl: (v: string) => _.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 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(params: PoLoaderParams): 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 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) {\n // Parse each section to maintain structure\n const sections = originalInput?.split(\"\\n\\n\").filter(Boolean) || [];\n const result = sections\n .map((section) => {\n const sectionPo = gettextParser.po.parse(section);\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) return section;\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 return gettextParser.po\n .compile(updatedPo, { foldLength: params.multiline ? 76 : false })\n .toString()\n .replace([`msgid \"\"`, `msgstr \"Content-Type: text/plain\\\\n\"`].join(\"\\n\"), \"\")\n .trim();\n }\n return section.trim();\n })\n .join(\"\\n\\n\");\n return result;\n },\n });\n}\n\nexport function createPoContentLoader(): ILoader<PoTranslationEntry, Record<string, PoTranslationEntry>> {\n return createLoader({\n async pull(locale, input) {\n const result = _.chain(input)\n .entries()\n .filter(([, entry]) => !!entry.msgid)\n .map(([, entry]) => [\n entry.msgid,\n {\n singular: entry.msgstr[0] || entry.msgid,\n plural: (entry.msgstr[1] || entry.msgid_plural || null) as string | null,\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: [data[entry.msgid]?.singular, data[entry.msgid]?.plural || null].filter(Boolean),\n },\n ])\n .fromPairs()\n .value();\n\n return result;\n },\n });\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<string, Record<string, any>> {\n return createLoader({\n async pull(locale, input) {\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) => {\n const result: Record<string, VariableExtractionPayload> = {};\n for (const [key, value] of Object.entries(input)) {\n const matches = value.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 (locale, data) => {\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<Record<string, VariableExtractionPayload>, Record<string, string>> {\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) => {\n const result: Record<string, VariableExtractionPayload> = _.cloneDeep(originalInput || {});\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<Record<string, string>, Record<string, string>> {\n return createLoader({\n async pull(locale, input, 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 Z from \"zod\";\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\";\n\ntype BucketLoaderOptions = {\n isCacheRestore?: boolean;\n};\n\nexport default function createBucketLoader(\n bucketType: Z.infer<typeof bucketTypeSchema>,\n bucketPathPattern: string,\n { isCacheRestore = false }: BucketLoaderOptions = {},\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(isCacheRestore),\n );\n case \"csv\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createCsvLoader(),\n createFlatLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(isCacheRestore),\n );\n case \"html\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createPrettierLoader({ parser: \"html\", alwaysFormat: true }),\n createHtmlLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(isCacheRestore),\n );\n case \"json\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createPrettierLoader({ parser: \"json\" }),\n createJsonLoader(),\n createFlatLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(isCacheRestore),\n );\n case \"markdown\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createPrettierLoader({ parser: \"markdown\" }),\n createMarkdownLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(isCacheRestore),\n );\n case \"po\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createPoLoader(),\n createFlatLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(isCacheRestore),\n createVariableLoader({ type: \"python\" }),\n );\n case \"properties\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createPropertiesLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(isCacheRestore),\n );\n case \"xcode-strings\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createXcodeStringsLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(isCacheRestore),\n );\n case \"xcode-stringsdict\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createXcodeStringsdictLoader(),\n createFlatLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(isCacheRestore),\n );\n case \"xcode-xcstrings\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createPlutilJsonTextLoader(),\n createJsonLoader(),\n createXcodeXcstringsLoader(),\n createFlatLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(isCacheRestore),\n createVariableLoader({ type: \"ieee\" }),\n );\n case \"yaml\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createPrettierLoader({ parser: \"yaml\" }),\n createYamlLoader(),\n createFlatLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(isCacheRestore),\n );\n case \"yaml-root-key\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createPrettierLoader({ parser: \"yaml\" }),\n createYamlLoader(),\n createRootKeyLoader(true),\n createFlatLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(isCacheRestore),\n );\n case \"flutter\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createPrettierLoader({ parser: \"json\" }),\n createJsonLoader(),\n createFlutterLoader(),\n createFlatLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(isCacheRestore),\n );\n case \"xliff\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createXliffLoader(),\n createFlatLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(isCacheRestore),\n );\n case \"xml\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createXmlLoader(),\n createFlatLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(isCacheRestore),\n );\n case \"srt\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createSrtLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(isCacheRestore),\n );\n case \"dato\":\n return composeLoaders(\n createDatoLoader(bucketPathPattern),\n createSyncLoader(),\n createFlatLoader(),\n createUnlocalizableLoader(isCacheRestore),\n );\n case \"vtt\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createVttLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(isCacheRestore),\n );\n case \"php\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createPhpLoader(),\n createSyncLoader(),\n createFlatLoader(),\n createUnlocalizableLoader(),\n );\n }\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 path from \"path\";\nimport fs from \"fs\";\n\ninterface CacheRow {\n targetLocale: string;\n key: string;\n source: string;\n processed: string;\n}\n\ninterface NormalizedCacheItem {\n source: string;\n result: string;\n}\n\ntype NormalizedCache = Record<string, NormalizedCacheItem>;\n\ninterface NormalizedLocaleCache {\n [targetLocale: string]: NormalizedCache;\n}\n\nexport const cacheChunk = (\n targetLocale: string,\n sourceChunk: Record<string, string>,\n processedChunk: Record<string, string>,\n) => {\n const rows = Object.entries(sourceChunk).map(([key, source]) => ({\n targetLocale,\n key,\n source,\n processed: processedChunk[key],\n }));\n _appendToCache(rows);\n};\n\nexport function getNormalizedCache() {\n const rows = _loadCache();\n if (!rows.length) {\n return null;\n }\n\n const normalized: NormalizedLocaleCache = {};\n\n for (const row of rows) {\n if (!normalized[row.targetLocale]) {\n normalized[row.targetLocale] = {};\n }\n\n normalized[row.targetLocale][row.key] = {\n source: row.source,\n result: row.processed,\n };\n }\n\n return normalized;\n}\n\nexport function deleteCache() {\n const cacheFilePath = _getCacheFilePath();\n try {\n fs.unlinkSync(cacheFilePath);\n } catch (e) {\n // file might not exist\n }\n}\n\nfunction _loadCache() {\n const cacheFilePath = _getCacheFilePath();\n if (!fs.existsSync(cacheFilePath)) {\n return [];\n }\n const content = fs.readFileSync(cacheFilePath, \"utf-8\");\n const result = _parseJSONLines(content);\n return result;\n}\n\nfunction _appendToCache(rows: CacheRow[]) {\n const cacheFilePath = _getCacheFilePath();\n const lines = _buildJSONLines(rows);\n fs.appendFileSync(cacheFilePath, lines);\n}\n\nfunction _getCacheFilePath() {\n return path.join(process.cwd(), \"i18n.cache\");\n}\n\nfunction _buildJSONLines(rows: CacheRow[]) {\n return rows.map((row) => JSON.stringify(row)).join(\"\\n\") + \"\\n\";\n}\n\nfunction _parseJSONLines(lines: string) {\n return lines\n .split(\"\\n\")\n .map(_tryParseJSON)\n .filter((line) => line !== null);\n}\n\nfunction _tryParseJSON(line: string) {\n try {\n return JSON.parse(line);\n } catch (e) {\n return null;\n }\n}\n","import { Command } from \"interactive-commander\";\nimport Z from \"zod\";\nimport Ora from \"ora\";\nimport { createLockfileHelper } from \"../utils/lockfile\";\nimport { bucketTypeSchema, resolveOverridenLocale } 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.config) {\n const sourceLocale = resolveOverridenLocale(i18nConfig!.locale.source, bucketConfig.delimiter);\n const bucketLoader = createBucketLoader(bucket.type, bucketConfig.pathPattern);\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 { I18nConfig, resolveOverridenLocale } 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(\"--verbose\", \"Show verbose output\")\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.config) {\n const sourceLocale = resolveOverridenLocale(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 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 = resolveOverridenLocale(_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","{\n \"name\": \"lingo.dev\",\n \"version\": \"0.77.5\",\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 },\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 \"@datocms/cma-client-node\": \"^3.4.0\",\n \"@inquirer/prompts\": \"^7.2.3\",\n \"@lingo.dev/_sdk\": \"workspace:*\",\n \"@lingo.dev/_spec\": \"workspace:*\",\n \"@modelcontextprotocol/sdk\": \"^1.5.0\",\n \"@paralleldrive/cuid2\": \"^2.2.2\",\n \"chalk\": \"^5.4.1\",\n \"cors\": \"^2.8.5\",\n \"csv-parse\": \"^5.6.0\",\n \"csv-stringify\": \"^6.5.2\",\n \"date-fns\": \"^4.1.0\",\n \"diff\": \"^7.0.0\",\n \"dotenv\": \"^16.4.7\",\n \"express\": \"^4.21.2\",\n \"external-editor\": \"^3.1.0\",\n \"figlet\": \"^1.8.0\",\n \"figlet-cli\": \"^0.2.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 \"inquirer\": \"^12.3.2\",\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 \"lodash\": \"^4.17.21\",\n \"markdown-it\": \"^14.1.0\",\n \"markdown-it-front-matter\": \"^0.2.4\",\n \"marked\": \"^15.0.6\",\n \"node-webvtt\": \"^1.9.4\",\n \"object-hash\": \"^3.0.0\",\n \"open\": \"^10.1.0\",\n \"ora\": \"^8.1.1\",\n \"p-limit\": \"^6.2.0\",\n \"php-array-reader\": \"^2.1.2\",\n \"plist\": \"^3.1.0\",\n \"prettier\": \"^3.4.2\",\n \"properties-parser\": \"^0.6.0\",\n \"slugify\": \"^1.6.6\",\n \"srt-parser-2\": \"^1.2.3\",\n \"typescript\": \"^5.7.2\",\n \"vitest\": \"^2.1.8\",\n \"xliff\": \"^6.2.1\",\n \"xml2js\": \"^0.6.2\",\n \"xmldom\": \"^0.6.0\",\n \"xpath\": \"^0.0.34\",\n \"yaml\": \"^2.7.0\",\n \"zod\": \"^3.24.1\"\n },\n \"devDependencies\": {\n \"@types/cors\": \"^2.8.17\",\n \"@types/diff\": \"^7.0.0\",\n \"@types/express\": \"^5.0.0\",\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.13\",\n \"@types/markdown-it\": \"^14.1.2\",\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/properties-parser\": \"^0.3.3\",\n \"@types/xml2js\": \"^0.4.14\",\n \"@types/xmldom\": \"^0.1.34\",\n \"tsup\": \"^8.3.5\"\n },\n \"engines\": {\n \"node\": \">=18\"\n }\n}\n"],"mappings":"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","names":["InteractiveCommand","Ora","fs","path","resolveLocaleCode","fs","path","_","checkbox","confirm","path","_","fs","path","fs","path","fs","path","path","resolveLocaleCode","value","fs","Ora","_","checkbox","confirm","auth","Command","Command","_","fs","path","defaultConfig","Command","Ora","Command","Ora","Command","Ora","_","path","glob","_","path","glob","resolveOverridenLocale","Command","Ora","path","Command","resolveOverridenLocale","Command","Z","_","Ora","input","input","_","input","fs","path","_","path","fs","input","input","_","input","_","input","_","input","_","input","path","YAML","YAML","input","_","input","input","_","input","_","_","input","_","input","_","input","parseStringPromise","Builder","input","parseStringPromise","Builder","input","fs","Z","_","input","_","_","_","_","input","_","input","_","path","fs","input","_","input","_","_","input","_","indent","items","input","fs","path","Z","YAML","_","inquirer","path","fs","Command","Ora","inquirer","resolveOverridenLocale","_","Z","Command","Z","Ora","resolveOverridenLocale","Command","Ora","resolveOverridenLocale","Z","resolveOverridenLocale","Command","_","Ora","Command","Ora","resolveOverridenLocale","_","Command","Z","Command","_","Z","InteractiveCommand"]}
|
|
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/auth.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/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/index.ts","../src/cli/utils/lockfile.ts","../src/cli/utils/cache.ts","../src/cli/cmd/lockfile.ts","../src/cli/cmd/cleanup.ts","../src/cli/cmd/mcp.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\";\n\nimport authCmd from \"./cmd/auth\";\nimport initCmd from \"./cmd/init\";\nimport configCmd from \"./cmd/show\";\nimport i18nCmd from \"./cmd/i18n\";\nimport lockfileCmd from \"./cmd/lockfile\";\nimport cleanupCmd from \"./cmd/cleanup\";\nimport mcpCmd from \"./cmd/mcp\";\n\nimport packageJson from \"../../package.json\";\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\nWebsite: https://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(configCmd)\n .addCommand(lockfileCmd)\n .addCommand(cleanupCmd)\n .addCommand(mcpCmd)\n .exitOverride((err) => {\n // Exit with code 0 when help or version is displayed\n if (err.code === \"commander.helpDisplayed\" || err.code === \"commander.version\" || err.code === \"commander.help\") {\n process.exit(0);\n }\n throw err;\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 { createAuthenticator } from \"../utils/auth\";\n\nexport default new Command()\n .command(\"auth\")\n .description(\"Authenticate with Lingo.dev API\")\n .helpOption(\"-h, --help\", \"Show help\")\n .option(\"--logout\", \"Delete existing authentication\")\n .option(\"--login\", \"Authenticate with Lingo.dev API\")\n .action(async (options) => {\n try {\n let settings = await getSettings(undefined);\n\n if (options.logout) {\n settings.auth.apiKey = \"\";\n await saveSettings(settings);\n }\n if (options.login) {\n const apiKey = await login(settings.auth.webUrl);\n settings.auth.apiKey = apiKey;\n await saveSettings(settings);\n settings = await getSettings(undefined);\n }\n\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\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 // start a sever on an ephemeral port and return the port number\n // from the function\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 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 return {\n auth: {\n apiKey: explicitApiKey || env.LINGODOTDEV_API_KEY || systemFile.auth?.apiKey || defaults.auth.apiKey,\n apiUrl: env.LINGODOTDEV_API_URL || systemFile.auth?.apiUrl || defaults.auth.apiUrl,\n webUrl: env.LINGODOTDEV_WEB_URL || systemFile.auth?.webUrl || defaults.auth.webUrl,\n },\n };\n}\n\nexport function saveSettings(settings: CliSettings): void {\n _saveSystemFile(settings);\n}\n\nconst SettingsSchema = Z.object({\n auth: Z.object({\n apiKey: Z.string(),\n apiUrl: Z.string(),\n webUrl: Z.string(),\n }),\n});\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 };\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 })\n .passthrough()\n .parse(process.env);\n}\n\nfunction _loadSystemFile() {\n const settingsFilePath = _getSettingsFilePath();\n const content = fs.existsSync(settingsFilePath) ? fs.readFileSync(settingsFilePath, \"utf-8\") : \"\";\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 })\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","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","import { CLIError } from \"./errors\";\n\nexport type AuthenticatorParams = {\n apiUrl: string;\n apiKey: string;\n};\n\nexport type AuthPayload = {\n email: 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 };\n }\n\n return null;\n } catch (error) {\n const isNetworkError = 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 { 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 { spawn } from \"child_process\";\nimport _ from \"lodash\";\nimport { checkbox, confirm, input } from \"@inquirer/prompts\";\nimport { login } from \"./auth\";\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\";\n\nconst openUrl = (path: string) => {\n const settings = getSettings(undefined);\n spawn(\"open\", [`${settings.auth.webUrl}${path}`]);\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 { patterns, defaultPatterns } = findLocaleFiles(options.bucket);\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 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 throw new Error(`Unsupported bucket type: ${bucket}`);\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 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 if (fs.existsSync(gitignorePath)) {\n content = fs.readFileSync(gitignorePath, \"utf8\");\n if (content !== \"\" && !content.endsWith(\"\\n\")) {\n content += \"\\n\";\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 { resolveOverridenLocale } 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\")\n .option(\"--target\", \"Only show target files\")\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.config) {\n const sourceLocale = resolveOverridenLocale(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 = resolveOverridenLocale(_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 { I18nConfig, resolveOverridenLocale, BucketItem } from \"@lingo.dev/_spec\";\nimport { bucketTypeSchema } from \"@lingo.dev/_spec\";\nimport Z from \"zod\";\n\nexport function getBuckets(i18nConfig: I18nConfig) {\n const result = Object.entries(i18nConfig.buckets).map(([bucketType, bucketEntry]) => {\n const includeItems = bucketEntry.include.map((item) => resolveBucketItem(item));\n const excludeItems = bucketEntry.exclude?.map((item) => resolveBucketItem(item));\n return {\n type: bucketType as Z.infer<typeof bucketTypeSchema>,\n config: extractPathPatterns(i18nConfig.locale.source, includeItems, excludeItems),\n };\n });\n\n return result;\n}\n\nfunction extractPathPatterns(sourceLocale: string, include: BucketItem[], exclude?: BucketItem[]) {\n const includedPatterns = include.flatMap((pattern) =>\n expandPlaceholderedGlob(pattern.path, resolveOverridenLocale(sourceLocale, pattern.delimiter)).map(\n (pathPattern) => ({\n pathPattern,\n delimiter: pattern.delimiter,\n }),\n ),\n );\n const excludedPatterns = exclude?.flatMap((pattern) =>\n expandPlaceholderedGlob(pattern.path, resolveOverridenLocale(sourceLocale, pattern.delimiter)).map(\n (pathPattern) => ({\n pathPattern,\n delimiter: pattern.delimiter,\n }),\n ),\n );\n const result = _.differenceBy(includedPatterns, excludedPatterns ?? [], (item) => item.pathPattern);\n return result;\n}\n\n// Path expansion\nfunction expandPlaceholderedGlob(_pathPattern: string, sourceLocale: string): 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((indexes, segment, index) => {\n if (segment.includes(\"[locale]\")) {\n indexes.push(index);\n }\n return indexes;\n }, [] as number[]);\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.replaceAll(\".\", \"\\\\.\").replaceAll(\"*\", \".*\").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 { bucketTypeSchema, I18nConfig, localeCodeSchema, resolveOverridenLocale } from \"@lingo.dev/_spec\";\nimport { LingoDotDevEngine } from \"@lingo.dev/_sdk\";\nimport { Command } from \"interactive-commander\";\nimport Z from \"zod\";\nimport _ from \"lodash\";\nimport { getConfig } from \"../utils/config\";\nimport { getSettings } from \"../utils/settings\";\nimport { CLIError } from \"../utils/errors\";\nimport Ora from \"ora\";\nimport createBucketLoader from \"../loaders\";\nimport { createLockfileHelper } from \"../utils/lockfile\";\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 { cacheChunk, deleteCache, getNormalizedCache } from \"../utils/cache\";\nimport updateGitignore from \"../utils/update-gitignore\";\n\nexport default new Command()\n .command(\"i18n\")\n .description(\"Run Localization engine\")\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(\"--key <key>\", \"Key to process\")\n .option(\"--frozen\", `Don't update the translations and fail if an update is needed`)\n .option(\"--force\", \"Ignore lockfile and process all keys\")\n .option(\"--verbose\", \"Show verbose output\")\n .option(\"--interactive\", \"Interactive mode\")\n .option(\"--api-key <api-key>\", \"Explicitly set the API key to use\")\n .option(\"--debug\", \"Debug mode\")\n .option(\"--strict\", \"Stop on first error\")\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 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 Replexica Localization Engine...\");\n const auth = await validateAuth(settings);\n ora.succeed(`Authenticated as ${auth.email}`);\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 const targetLocales = flags.locale?.length ? flags.locale : i18nConfig!.locale.targets;\n const lockfileHelper = createLockfileHelper();\n\n // Ensure the lockfile exists\n ora.start(\"Ensuring i18n.lock exists...\");\n if (!lockfileHelper.isLockfileExists()) {\n ora.start(\"Creating i18n.lock...\");\n for (const bucket of buckets) {\n for (const bucketConfig of bucket.config) {\n const sourceLocale = resolveOverridenLocale(i18nConfig!.locale.source, bucketConfig.delimiter);\n\n const bucketLoader = createBucketLoader(bucket.type, bucketConfig.pathPattern);\n bucketLoader.setDefaultLocale(sourceLocale);\n await bucketLoader.init();\n\n const sourceData = await bucketLoader.pull(i18nConfig!.locale.source);\n lockfileHelper.registerSourceData(bucketConfig.pathPattern, sourceData);\n }\n }\n ora.succeed(\"i18n.lock created\");\n } else {\n ora.succeed(\"i18n.lock loaded\");\n }\n\n // recover cache if exists\n const cache = getNormalizedCache();\n if (cache) {\n console.log();\n ora.succeed(`Cache loaded. Attempting recovery...`);\n const cacheOra = Ora({ indent: 2 });\n\n for (const bucket of buckets) {\n cacheOra.info(`Processing bucket: ${bucket.type}`);\n for (const bucketConfig of bucket.config) {\n const bucketOra = Ora({ indent: 4 });\n bucketOra.info(`Processing path: ${bucketConfig.pathPattern}`);\n\n const sourceLocale = resolveOverridenLocale(i18nConfig!.locale.source, bucketConfig.delimiter);\n const bucketLoader = createBucketLoader(bucket.type, bucketConfig.pathPattern, { isCacheRestore: true });\n bucketLoader.setDefaultLocale(sourceLocale);\n await bucketLoader.init();\n const sourceData = await bucketLoader.pull(sourceLocale);\n const cachedSourceData: Record<string, string> = {};\n\n for (const targetLocale in cache) {\n const targetData = await bucketLoader.pull(targetLocale);\n\n for (const key in cache[targetLocale]) {\n const { source, result } = cache[targetLocale][key];\n\n if (sourceData[key] === source && targetData[key] !== result) {\n targetData[key] = result;\n cachedSourceData[key] = source;\n }\n }\n\n await bucketLoader.push(targetLocale, targetData);\n lockfileHelper.registerPartialSourceData(bucketConfig.pathPattern, cachedSourceData);\n\n bucketOra.succeed(\n `[${sourceLocale} -> ${targetLocale}] Recovered ${Object.keys(cachedSourceData).length} entries from cache`,\n );\n }\n }\n }\n deleteCache();\n if (flags.verbose) {\n cacheOra.info(\"Cache file deleted.\");\n }\n } else if (flags.verbose) {\n ora.info(\"Cache file not found. Skipping recovery.\");\n }\n\n if (flags.frozen) {\n ora.start(\"Checking for lockfile updates...\");\n let requiresUpdate = false;\n for (const bucket of buckets) {\n for (const bucketConfig of bucket.config) {\n const sourceLocale = resolveOverridenLocale(i18nConfig!.locale.source, bucketConfig.delimiter);\n\n const bucketLoader = createBucketLoader(bucket.type, bucketConfig.pathPattern);\n bucketLoader.setDefaultLocale(sourceLocale);\n await bucketLoader.init();\n\n const sourceData = await bucketLoader.pull(i18nConfig!.locale.source);\n const updatedSourceData = lockfileHelper.extractUpdatedData(bucketConfig.pathPattern, sourceData);\n\n if (Object.keys(updatedSourceData).length > 0) {\n requiresUpdate = true;\n break;\n }\n }\n if (requiresUpdate) break;\n }\n\n if (requiresUpdate) {\n ora.fail(\"Localization data has changed; please update i18n.lock or run without --frozen.\");\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 bucketConfig of bucket.config) {\n const bucketOra = Ora({ indent: 2 }).info(`Processing path: ${bucketConfig.pathPattern}`);\n\n const sourceLocale = resolveOverridenLocale(i18nConfig!.locale.source, bucketConfig.delimiter);\n\n const bucketLoader = createBucketLoader(bucket.type, bucketConfig.pathPattern);\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 = resolveOverridenLocale(_targetLocale, bucketConfig.delimiter);\n try {\n bucketOra.start(`[${sourceLocale} -> ${targetLocale}] (0%) Localization in progress...`);\n\n sourceData = await bucketLoader.pull(sourceLocale);\n\n const updatedSourceData = flags.force\n ? sourceData\n : lockfileHelper.extractUpdatedData(bucketConfig.pathPattern, sourceData);\n\n const targetData = await bucketLoader.pull(targetLocale);\n let processableData = calculateDataDelta({\n sourceData,\n updatedSourceData,\n targetData,\n });\n if (flags.key) {\n processableData = _.pickBy(processableData, (_, key) => key === flags.key);\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 const localizationEngine = createLocalizationEngineConnection({\n apiKey: settings.auth.apiKey,\n apiUrl: settings.auth.apiUrl,\n });\n const processedTargetData = await localizationEngine.process(\n {\n sourceLocale,\n sourceData,\n processableData,\n targetLocale,\n targetData,\n },\n (progress, sourceChunk, processedChunk) => {\n cacheChunk(targetLocale, sourceChunk, processedChunk);\n\n const progressLog = `[${sourceLocale} -> ${targetLocale}] [${Object.keys(processableData).length} entries] (${progress}%) AI localization in progress...`;\n if (flags.verbose) {\n bucketOra.info(progressLog);\n bucketOra.info(\n `(${progress}%) Caching chunk ${JSON.stringify(sourceChunk, null, 2)} -> ${JSON.stringify(processedChunk, null, 2)}`,\n );\n } else {\n bucketOra.text = progressLog;\n }\n },\n );\n\n if (flags.verbose) {\n bucketOra.info(JSON.stringify(processedTargetData, null, 2));\n }\n\n let finalTargetData = _.merge({}, sourceData, targetData, processedTargetData);\n\n if (flags.interactive) {\n bucketOra.stop();\n const reviewedData = await reviewChanges({\n pathPattern: bucketConfig.pathPattern,\n targetLocale,\n currentData: targetData,\n proposedData: finalTargetData,\n sourceData,\n force: flags.force!,\n });\n\n finalTargetData = reviewedData;\n bucketOra.start(`Applying changes to ${bucketConfig} (${targetLocale})`);\n }\n\n const finalDiffSize = _.chain(finalTargetData)\n .omitBy((value, key) => value === targetData[key])\n .size()\n .value();\n if (finalDiffSize > 0 || flags.force) {\n await bucketLoader.push(targetLocale, finalTargetData);\n bucketOra.succeed(`[${sourceLocale} -> ${targetLocale}] Localization completed`);\n } else {\n bucketOra.succeed(`[${sourceLocale} -> ${targetLocale}] Localization completed (no changes).`);\n }\n } catch (_error: any) {\n const error = new Error(`[${sourceLocale} -> ${targetLocale}] Localization failed: ${_error.message}`);\n if (flags.strict) {\n throw error;\n } else {\n bucketOra.fail(error.message);\n hasErrors = true;\n }\n }\n }\n\n lockfileHelper.registerSourceData(bucketConfig.pathPattern, sourceData);\n }\n } catch (_error: any) {\n const error = new Error(`Failed to process bucket ${bucket.type}: ${_error.message}`);\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 deleteCache();\n if (flags.verbose) {\n ora.info(\"Cache file deleted.\");\n }\n } else {\n ora.warn(\"Localization completed with errors.\");\n }\n } catch (error: any) {\n ora.fail(error.message);\n process.exit(1);\n }\n });\n\nfunction calculateDataDelta(args: {\n sourceData: Record<string, any>;\n updatedSourceData: Record<string, any>;\n targetData: Record<string, any>;\n}) {\n // Calculate missing keys\n const newKeys = _.difference(Object.keys(args.sourceData), Object.keys(args.targetData));\n // Calculate updated keys\n const updatedKeys = Object.keys(args.updatedSourceData);\n\n // Calculate delta payload\n const result = _.chain(args.sourceData)\n .pickBy((value, key) => newKeys.includes(key) || updatedKeys.includes(key))\n .value() as Record<string, any>;\n\n return result;\n}\n\nasync function retryWithExponentialBackoff<T>(\n operation: () => Promise<T>,\n maxAttempts: number,\n baseDelay: number = 1000,\n): Promise<T> {\n for (let attempt = 0; attempt < maxAttempts; attempt++) {\n try {\n return await operation();\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\nfunction createLocalizationEngineConnection(params: { apiKey: string; apiUrl: string; maxRetries?: number }) {\n const replexicaEngine = new LingoDotDevEngine({\n apiKey: params.apiKey,\n apiUrl: params.apiUrl,\n });\n\n return {\n process: async (\n args: {\n sourceLocale: string;\n sourceData: Record<string, any>;\n processableData: Record<string, any>;\n targetLocale: string;\n targetData: Record<string, any>;\n },\n onProgress: (\n progress: number,\n sourceChunk: Record<string, string>,\n processedChunk: Record<string, string>,\n ) => void,\n ) => {\n return retryWithExponentialBackoff(\n () =>\n replexicaEngine.localizeObject(\n args.processableData,\n {\n sourceLocale: args.sourceLocale,\n targetLocale: args.targetLocale,\n reference: {\n [args.sourceLocale]: args.sourceData,\n [args.targetLocale]: args.targetData,\n },\n },\n onProgress,\n ),\n params.maxRetries ?? 3,\n );\n },\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 interactive: Z.boolean().default(false),\n debug: Z.boolean().default(false),\n }).parse(options);\n}\n\nasync function validateAuth(settings: ReturnType<typeof getSettings>) {\n if (!settings.auth.apiKey) {\n throw new CLIError({\n message: \"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: \"Invalid API key. Please run `lingo.dev auth --login` to authenticate.\",\n docUrl: \"authError\",\n });\n }\n\n return user;\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\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(`\\nReviewing changes for ${chalk.blue(args.pathPattern)} (${chalk.yellow(args.targetLocale)}):`);\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(chalk.gray(\"Current value:\"), chalk.red(args.currentData[key] || \"(empty)\"));\n console.log(chalk.gray(\"Suggested value:\"), chalk.green(args.proposedData[key]));\n console.log(chalk.gray(\"\\nYour editor will open. Edit the text and save to continue.\"));\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(chalk.yellow(\"Empty value provided, keeping the current value.\"));\n customData[key] = args.currentData[key] || args.proposedData[key];\n }\n } catch (error) {\n console.log(chalk.red(\"Error while editing, keeping the suggested value.\"));\n customData[key] = args.proposedData[key];\n }\n }\n\n return customData;\n}\n","import { ILoader, ILoaderDefinition } from \"./_types\";\n\nexport function composeLoaders(...loaders: ILoader<any, any, any>[]): 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>(lDefinition: ILoaderDefinition<I, O, C>): ILoader<I, O, C> {\n const state = {\n defaultLocale: undefined as string | undefined,\n originalInput: undefined as I | 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 return lDefinition.pull(locale, input, state.initCtx);\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(locale, data, state.originalInput, state.defaultLocale);\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<Record<string, any>, DenormalizeResult> {\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<DenormalizeResult, Record<string, string>> {\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(obj: Record<string, any>, denormalizedKeysMap: Record<string, string>) {\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(obj: Record<string, any>): Record<string, any> {\n if (_.isObject(obj) && !_.isArray(obj)) {\n return _.transform(\n obj,\n (result, value, key) => {\n const newKey = !isNaN(Number(key)) ? `${OBJECT_NUMERIC_KEY_PREFIX}${key}` : key;\n result[newKey] = _.isObject(value) ? denormalizeObjectKeys(value) : value;\n },\n {} as Record<string, any>,\n );\n } else {\n return obj;\n }\n}\n\nexport function normalizeObjectKeys(obj: Record<string, any>): 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] = _.isObject(value) ? normalizeObjectKeys(value) : 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 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) {\n return YAML.stringify(payload, {\n lineWidth: -1,\n });\n },\n });\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<string, Record<string, any>> {\n return createLoader({\n async pull(locale, input) {\n try {\n const result: Record<string, any> = {};\n const parsed: AndroidResources = !input\n ? { resources: {} }\n : await parseStringPromise(input, { explicitArray: true });\n\n if (!parsed || !parsed.resources) {\n console.warn(\"No resources found in the Android resource file\");\n return result;\n }\n\n const processResource = (resourceType: string) => {\n const resources = parsed.resources[resourceType as keyof AndroidResources[\"resources\"]];\n if (!resources) return;\n\n resources.forEach((item: AndroidResource) => {\n if (item.$ && item.$.translatable === \"false\") return;\n\n if (resourceType === \"string\") {\n result[item.$.name] = item._ || \"\";\n } else if (resourceType === \"string-array\") {\n result[item.$.name] = (item.item || [])\n .map((subItem: any) => {\n if (typeof subItem === \"string\") return subItem;\n return subItem._ || \"\";\n })\n .filter(Boolean); // Remove any empty strings\n } else if (resourceType === \"plurals\") {\n const pluralObj: Record<string, string> = {};\n if (Array.isArray(item.item)) {\n item.item.forEach((subItem: any) => {\n if (subItem.$ && subItem.$.quantity) {\n pluralObj[subItem.$.quantity] = subItem._ || \"\";\n }\n });\n }\n result[item.$.name] = pluralObj;\n } else if (resourceType === \"bool\") {\n result[item.$.name] = item._ === \"true\";\n } else if (resourceType === \"integer\") {\n result[item.$.name] = parseInt(item._ || \"0\", 10);\n }\n });\n };\n\n [\"string\", \"string-array\", \"plurals\", \"bool\", \"integer\"].forEach(processResource);\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 const builder = new Builder({ headless: true });\n const xmlObj: AndroidResources = { resources: {} };\n\n // Helper function to escape single quotes, avoiding double escaping\n const escapeSingleQuotes = (str: string) => {\n return str.replace(/(?<!\\\\)'/g, \"\\\\'\");\n };\n\n for (const [key, value] of Object.entries(payload)) {\n if (typeof value === \"string\") {\n if (!xmlObj.resources.string) xmlObj.resources.string = [];\n xmlObj.resources.string.push({ $: { name: key }, _: escapeSingleQuotes(value) });\n } else if (Array.isArray(value)) {\n if (!xmlObj.resources[\"string-array\"]) xmlObj.resources[\"string-array\"] = [];\n xmlObj.resources[\"string-array\"].push({\n $: { name: key },\n item: value.map((item) => ({ _: escapeSingleQuotes(item) })),\n });\n } else if (typeof value === \"object\") {\n if (!xmlObj.resources.plurals) xmlObj.resources.plurals = [];\n xmlObj.resources.plurals.push({\n $: { name: key },\n item: Object.entries(value).map(([quantity, text]) => ({\n $: { quantity },\n _: escapeSingleQuotes(text as string),\n })),\n });\n } else if (typeof value === \"boolean\") {\n if (!xmlObj.resources.bool) xmlObj.resources.bool = [];\n xmlObj.resources.bool.push({ $: { name: key }, _: value.toString() });\n } else if (typeof value === \"number\") {\n if (!xmlObj.resources.integer) xmlObj.resources.integer = [];\n xmlObj.resources.integer.push({\n $: { name: key },\n _: value.toString(),\n });\n }\n }\n\n const result = builder.buildObject(xmlObj);\n return result;\n },\n });\n}\n\ninterface AndroidResource {\n $: {\n name: string;\n [key: string]: string;\n };\n _?: string;\n item?: Array<{ $?: { quantity?: string }; _: string } | string>;\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 { createLoader } from \"./_utils\";\n\nexport default function createCsvLoader(): ILoader<string, Record<string, string>> {\n return createLoader({\n async pull(locale, _input) {\n const input = parse(_input, {\n columns: true,\n skip_empty_lines: true,\n });\n\n const result: Record<string, string> = {};\n\n _.forEach(input, (row) => {\n const key = row.id;\n if (key && row[locale] && row[locale].trim() !== \"\") {\n result[key] = row[locale];\n }\n });\n\n return result;\n },\n async push(locale, data, originalInput) {\n const input = parse(originalInput || \"\", {\n columns: true,\n skip_empty_lines: true,\n }) as Record<string, any>[];\n\n const columns = input.length > 0 ? Object.keys(input[0]) : [\"id\", locale];\n\n const updatedRows = input.map((row) => ({\n ...row,\n [locale]: data[row.id] || row[locale] || \"\",\n }));\n const existingKeys = new Set(input.map((row) => row.id));\n\n Object.entries(data).forEach(([key, value]) => {\n if (!existingKeys.has(key)) {\n const newRow: Record<string, string> = {\n id: 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","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.trim()])\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(): ILoader<Record<string, any>, Record<string, any>> {\n return createLoader({\n async pull(locale, input) {\n const resultData: Record<string, any> = {};\n\n for (const [translationKey, _translationEntity] of Object.entries(input.strings)) {\n const rootTranslationEntity = _translationEntity as any;\n const langTranslationEntity = rootTranslationEntity?.localizations?.[locale];\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 }\n }\n\n return resultData;\n },\n async push(locale, payload, originalInput) {\n const langDataToMerge: any = {};\n langDataToMerge.strings = {};\n\n for (const [key, value] of Object.entries(payload)) {\n if (typeof value === \"string\") {\n langDataToMerge.strings[key] = {\n extractionState: \"manual\",\n localizations: {\n [locale]: {\n stringUnit: {\n state: \"translated\",\n value,\n },\n },\n },\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 }\n\n const result = _.merge({}, originalInput, langDataToMerge);\n return result;\n },\n });\n}\n","import prettier, { Options } from \"prettier\";\nimport { ILoader } from \"./_types\";\nimport { createLoader } from \"./_utils\";\n\nexport type PrettierLoaderOptions = {\n parser: Options[\"parser\"];\n alwaysFormat?: boolean;\n};\n\nexport default function createPrettierLoader(options: PrettierLoaderOptions): ILoader<string, string> {\n return createLoader({\n async pull(locale, data) {\n return data;\n },\n async push(locale, data) {\n const prettierConfig = await loadPrettierConfig();\n if (!prettierConfig && !options.alwaysFormat) {\n return data;\n }\n\n const result = prettier.format(data, {\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 return result;\n },\n });\n}\n\nasync function loadPrettierConfig() {\n try {\n const config = await prettier.resolveConfig(process.cwd());\n return config;\n } catch (error) {\n return {};\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): 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 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(params: PoLoaderParams): 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 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) {\n // Parse each section to maintain structure\n const sections = originalInput?.split(\"\\n\\n\").filter(Boolean) || [];\n const result = sections\n .map((section) => {\n const sectionPo = gettextParser.po.parse(section);\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) return section;\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 return gettextParser.po\n .compile(updatedPo, { foldLength: params.multiline ? 76 : false })\n .toString()\n .replace([`msgid \"\"`, `msgstr \"Content-Type: text/plain\\\\n\"`].join(\"\\n\"), \"\")\n .trim();\n }\n return section.trim();\n })\n .join(\"\\n\\n\");\n return result;\n },\n });\n}\n\nexport function createPoContentLoader(): ILoader<PoTranslationEntry, Record<string, PoTranslationEntry>> {\n return createLoader({\n async pull(locale, input) {\n const result = _.chain(input)\n .entries()\n .filter(([, entry]) => !!entry.msgid)\n .map(([, entry]) => [\n entry.msgid,\n {\n singular: entry.msgstr[0] || entry.msgid,\n plural: (entry.msgstr[1] || entry.msgid_plural || null) as string | null,\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: [data[entry.msgid]?.singular, data[entry.msgid]?.plural || null].filter(Boolean),\n },\n ])\n .fromPairs()\n .value();\n\n return result;\n },\n });\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<string, Record<string, any>> {\n return createLoader({\n async pull(locale, input) {\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) => {\n const result: Record<string, VariableExtractionPayload> = {};\n for (const [key, value] of Object.entries(input)) {\n const matches = value.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 (locale, data) => {\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<Record<string, VariableExtractionPayload>, Record<string, string>> {\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) => {\n const result: Record<string, VariableExtractionPayload> = _.cloneDeep(originalInput || {});\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<Record<string, string>, Record<string, string>> {\n return createLoader({\n async pull(locale, input, 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 Z from \"zod\";\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\";\n\ntype BucketLoaderOptions = {\n isCacheRestore?: boolean;\n};\n\nexport default function createBucketLoader(\n bucketType: Z.infer<typeof bucketTypeSchema>,\n bucketPathPattern: string,\n { isCacheRestore = false }: BucketLoaderOptions = {},\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(isCacheRestore),\n );\n case \"csv\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createCsvLoader(),\n createFlatLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(isCacheRestore),\n );\n case \"html\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createPrettierLoader({ parser: \"html\", alwaysFormat: true }),\n createHtmlLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(isCacheRestore),\n );\n case \"json\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createPrettierLoader({ parser: \"json\" }),\n createJsonLoader(),\n createFlatLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(isCacheRestore),\n );\n case \"markdown\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createPrettierLoader({ parser: \"markdown\" }),\n createMarkdownLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(isCacheRestore),\n );\n case \"po\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createPoLoader(),\n createFlatLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(isCacheRestore),\n createVariableLoader({ type: \"python\" }),\n );\n case \"properties\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createPropertiesLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(isCacheRestore),\n );\n case \"xcode-strings\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createXcodeStringsLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(isCacheRestore),\n );\n case \"xcode-stringsdict\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createXcodeStringsdictLoader(),\n createFlatLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(isCacheRestore),\n );\n case \"xcode-xcstrings\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createPlutilJsonTextLoader(),\n createJsonLoader(),\n createXcodeXcstringsLoader(),\n createFlatLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(isCacheRestore),\n createVariableLoader({ type: \"ieee\" }),\n );\n case \"yaml\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createPrettierLoader({ parser: \"yaml\" }),\n createYamlLoader(),\n createFlatLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(isCacheRestore),\n );\n case \"yaml-root-key\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createPrettierLoader({ parser: \"yaml\" }),\n createYamlLoader(),\n createRootKeyLoader(true),\n createFlatLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(isCacheRestore),\n );\n case \"flutter\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createPrettierLoader({ parser: \"json\" }),\n createJsonLoader(),\n createFlutterLoader(),\n createFlatLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(isCacheRestore),\n );\n case \"xliff\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createXliffLoader(),\n createFlatLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(isCacheRestore),\n );\n case \"xml\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createXmlLoader(),\n createFlatLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(isCacheRestore),\n );\n case \"srt\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createSrtLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(isCacheRestore),\n );\n case \"dato\":\n return composeLoaders(\n createDatoLoader(bucketPathPattern),\n createSyncLoader(),\n createFlatLoader(),\n createUnlocalizableLoader(isCacheRestore),\n );\n case \"vtt\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createVttLoader(),\n createSyncLoader(),\n createUnlocalizableLoader(isCacheRestore),\n );\n case \"php\":\n return composeLoaders(\n createTextFileLoader(bucketPathPattern),\n createPhpLoader(),\n createSyncLoader(),\n createFlatLoader(),\n createUnlocalizableLoader(),\n );\n }\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 path from \"path\";\nimport fs from \"fs\";\n\ninterface CacheRow {\n targetLocale: string;\n key: string;\n source: string;\n processed: string;\n}\n\ninterface NormalizedCacheItem {\n source: string;\n result: string;\n}\n\ntype NormalizedCache = Record<string, NormalizedCacheItem>;\n\ninterface NormalizedLocaleCache {\n [targetLocale: string]: NormalizedCache;\n}\n\nexport const cacheChunk = (\n targetLocale: string,\n sourceChunk: Record<string, string>,\n processedChunk: Record<string, string>,\n) => {\n const rows = Object.entries(sourceChunk).map(([key, source]) => ({\n targetLocale,\n key,\n source,\n processed: processedChunk[key],\n }));\n _appendToCache(rows);\n};\n\nexport function getNormalizedCache() {\n const rows = _loadCache();\n if (!rows.length) {\n return null;\n }\n\n const normalized: NormalizedLocaleCache = {};\n\n for (const row of rows) {\n if (!normalized[row.targetLocale]) {\n normalized[row.targetLocale] = {};\n }\n\n normalized[row.targetLocale][row.key] = {\n source: row.source,\n result: row.processed,\n };\n }\n\n return normalized;\n}\n\nexport function deleteCache() {\n const cacheFilePath = _getCacheFilePath();\n try {\n fs.unlinkSync(cacheFilePath);\n } catch (e) {\n // file might not exist\n }\n}\n\nfunction _loadCache() {\n const cacheFilePath = _getCacheFilePath();\n if (!fs.existsSync(cacheFilePath)) {\n return [];\n }\n const content = fs.readFileSync(cacheFilePath, \"utf-8\");\n const result = _parseJSONLines(content);\n return result;\n}\n\nfunction _appendToCache(rows: CacheRow[]) {\n const cacheFilePath = _getCacheFilePath();\n const lines = _buildJSONLines(rows);\n fs.appendFileSync(cacheFilePath, lines);\n}\n\nfunction _getCacheFilePath() {\n return path.join(process.cwd(), \"i18n.cache\");\n}\n\nfunction _buildJSONLines(rows: CacheRow[]) {\n return rows.map((row) => JSON.stringify(row)).join(\"\\n\") + \"\\n\";\n}\n\nfunction _parseJSONLines(lines: string) {\n return lines\n .split(\"\\n\")\n .map(_tryParseJSON)\n .filter((line) => line !== null);\n}\n\nfunction _tryParseJSON(line: string) {\n try {\n return JSON.parse(line);\n } catch (e) {\n return null;\n }\n}\n","import { Command } from \"interactive-commander\";\nimport Z from \"zod\";\nimport Ora from \"ora\";\nimport { createLockfileHelper } from \"../utils/lockfile\";\nimport { bucketTypeSchema, resolveOverridenLocale } 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.config) {\n const sourceLocale = resolveOverridenLocale(i18nConfig!.locale.source, bucketConfig.delimiter);\n const bucketLoader = createBucketLoader(bucket.type, bucketConfig.pathPattern);\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 { I18nConfig, resolveOverridenLocale } 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(\"--verbose\", \"Show verbose output\")\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.config) {\n const sourceLocale = resolveOverridenLocale(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 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 = resolveOverridenLocale(_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","{\n \"name\": \"lingo.dev\",\n \"version\": \"0.77.6\",\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 },\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 \"@datocms/cma-client-node\": \"^3.4.0\",\n \"@inquirer/prompts\": \"^7.2.3\",\n \"@lingo.dev/_sdk\": \"workspace:*\",\n \"@lingo.dev/_spec\": \"workspace:*\",\n \"@modelcontextprotocol/sdk\": \"^1.5.0\",\n \"@paralleldrive/cuid2\": \"^2.2.2\",\n \"chalk\": \"^5.4.1\",\n \"cors\": \"^2.8.5\",\n \"csv-parse\": \"^5.6.0\",\n \"csv-stringify\": \"^6.5.2\",\n \"date-fns\": \"^4.1.0\",\n \"diff\": \"^7.0.0\",\n \"dotenv\": \"^16.4.7\",\n \"express\": \"^4.21.2\",\n \"external-editor\": \"^3.1.0\",\n \"figlet\": \"^1.8.0\",\n \"figlet-cli\": \"^0.2.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 \"inquirer\": \"^12.3.2\",\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 \"lodash\": \"^4.17.21\",\n \"markdown-it\": \"^14.1.0\",\n \"markdown-it-front-matter\": \"^0.2.4\",\n \"marked\": \"^15.0.6\",\n \"node-webvtt\": \"^1.9.4\",\n \"object-hash\": \"^3.0.0\",\n \"open\": \"^10.1.0\",\n \"ora\": \"^8.1.1\",\n \"p-limit\": \"^6.2.0\",\n \"php-array-reader\": \"^2.1.2\",\n \"plist\": \"^3.1.0\",\n \"prettier\": \"^3.4.2\",\n \"properties-parser\": \"^0.6.0\",\n \"slugify\": \"^1.6.6\",\n \"srt-parser-2\": \"^1.2.3\",\n \"typescript\": \"^5.7.2\",\n \"vitest\": \"^2.1.8\",\n \"xliff\": \"^6.2.1\",\n \"xml2js\": \"^0.6.2\",\n \"xmldom\": \"^0.6.0\",\n \"xpath\": \"^0.0.34\",\n \"yaml\": \"^2.7.0\",\n \"zod\": \"^3.24.1\"\n },\n \"devDependencies\": {\n \"@types/cors\": \"^2.8.17\",\n \"@types/diff\": \"^7.0.0\",\n \"@types/express\": \"^5.0.0\",\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.13\",\n \"@types/markdown-it\": \"^14.1.2\",\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/properties-parser\": \"^0.3.3\",\n \"@types/xml2js\": \"^0.4.14\",\n \"@types/xmldom\": \"^0.1.34\",\n \"tsup\": \"^8.3.5\"\n },\n \"engines\": {\n \"node\": \">=18\"\n }\n}\n"],"mappings":"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","names":["InteractiveCommand","Ora","fs","path","resolveLocaleCode","fs","path","_","checkbox","confirm","path","_","fs","path","fs","path","fs","path","path","resolveLocaleCode","value","fs","Ora","_","checkbox","confirm","auth","Command","Command","_","fs","path","defaultConfig","Command","Ora","Command","Ora","Command","Ora","_","path","glob","_","path","glob","resolveOverridenLocale","Command","Ora","path","Command","resolveOverridenLocale","Command","Z","_","Ora","input","input","_","input","fs","path","_","path","fs","input","input","_","input","_","input","_","input","_","input","path","YAML","YAML","input","_","input","input","_","input","_","_","input","_","input","_","input","parseStringPromise","Builder","input","parseStringPromise","Builder","input","fs","Z","_","input","_","_","_","_","input","_","input","_","path","fs","input","_","input","_","_","input","_","indent","items","input","fs","path","Z","YAML","_","inquirer","path","fs","Command","Ora","inquirer","resolveOverridenLocale","_","Z","Command","Z","Ora","resolveOverridenLocale","Command","Ora","resolveOverridenLocale","Z","resolveOverridenLocale","Command","_","Ora","Command","Ora","resolveOverridenLocale","_","Command","Z","Command","_","Z","InteractiveCommand"]}
|