{"version":3,"file":"base64-YBGAXkqy.cjs","names":[],"sources":["../src/settings/settings.ts","../src/logging/diagnostics.ts","../src/settings/settingsUrls.ts","../src/utils/isSupportedFileFormatTransform.ts","../src/translate/utils/validateFileFormatTransform.ts","../src/utils/base64.ts"],"sourcesContent":["export const libraryDefaultLocale = 'en' as const;\nexport const defaultTimeout = 60000;\n","export type DiagnosticSeverity = 'Error' | 'Warning';\n\n/**\n * Text slots follow the five-part error message model:\n * what happened, reassurance, why it happened, how to fix it, and a way out.\n */\nexport type DiagnosticMessageInput = {\n  source?: string;\n  severity?: DiagnosticSeverity;\n  whatHappened: string;\n  reassurance?: string;\n  why?: string;\n  fix?: string;\n  wayOut?: string;\n  details?: string | string[];\n  docsUrl?: string;\n};\n\nfunction ensureSentence(text: string): string {\n  const trimmed = text.trim();\n  if (!trimmed) return '';\n  return /[.!?)]$/.test(trimmed) ? trimmed : `${trimmed}.`;\n}\n\nfunction stripSentence(text: string): string {\n  const trimmed = text.trim();\n  let end = trimmed.length;\n  while (end > 0) {\n    const char = trimmed[end - 1];\n    if (char !== '.' && char !== '!' && char !== '?') break;\n    end -= 1;\n  }\n  return trimmed.slice(0, end);\n}\n\nfunction lowercaseFirstWord(text: string): string {\n  return text.replace(/^[A-Z][a-z]/, (match) => match.toLowerCase());\n}\n\nfunction formatDetails(details: string | string[] | undefined): string {\n  if (!details) return '';\n  const detailText = Array.isArray(details) ? details.join(', ') : details;\n  if (!detailText.trim()) return '';\n  return ensureSentence(`Details: ${detailText}`);\n}\n\nexport function formatDiagnosticErrorDetails(\n  error: unknown\n): string | undefined {\n  if (error == null) return undefined;\n  return String(error);\n}\n\nexport function createDiagnosticMessage({\n  source,\n  severity,\n  whatHappened,\n  reassurance,\n  why,\n  fix,\n  wayOut,\n  details,\n  docsUrl,\n}: DiagnosticMessageInput): string {\n  const prefix = source\n    ? severity\n      ? `${source} ${severity}:`\n      : `${source}:`\n    : severity\n      ? `${severity}:`\n      : '';\n  const whatAndWhy = why\n    ? `${stripSentence(whatHappened)} because ${lowercaseFirstWord(stripSentence(why))}`\n    : whatHappened;\n  const shouldCombineWayOut =\n    !!fix && !!wayOut && /^[a-z]/.test(stripSentence(wayOut));\n  const fixAndWayOut = shouldCombineWayOut\n    ? `${stripSentence(fix)}, or ${lowercaseFirstWord(stripSentence(wayOut))}`\n    : fix;\n  const messageParts = [\n    whatAndWhy,\n    reassurance,\n    fixAndWayOut,\n    shouldCombineWayOut ? undefined : wayOut,\n    formatDetails(details),\n  ]\n    .filter((part): part is string => !!part)\n    .map(ensureSentence);\n\n  if (docsUrl) {\n    messageParts.push(`Learn more: ${docsUrl}`);\n  }\n\n  const message = messageParts.join(' ');\n  return prefix ? `${prefix} ${message}` : message;\n}\n","export const defaultCacheUrl = 'https://cdn.gtx.dev' as const;\nexport const defaultBaseUrl = 'https://api2.gtx.dev' as const;\nexport const defaultRuntimeApiUrl = 'https://runtime2.gtx.dev' as const;\n","import type { FileFormat } from '../types-dir/api/file';\n\nconst SUPPORTED_TRANSFORMATIONS = {\n  GTJSON: ['GTJSON'],\n  JSON: ['JSON'],\n  PO: ['PO'],\n  // POT templates can produce translated PO catalog files.\n  POT: ['POT', 'PO'],\n  YAML: ['YAML'],\n  MDX: ['MDX'],\n  MD: ['MD'],\n  TS: ['TS'],\n  JS: ['JS'],\n  HTML: ['HTML'],\n  TXT: ['TXT'],\n  TWILIO_CONTENT_JSON: ['TWILIO_CONTENT_JSON'],\n} as const satisfies Record<FileFormat, FileFormat[]>;\n\n/**\n * This function checks if a file format transformation is supported during translation\n * @param from - The source file format.\n * @param to - The target file format.\n * @returns True if the transformation is supported, false otherwise\n */\nexport function isSupportedFileFormatTransform(\n  from: FileFormat,\n  to: FileFormat\n): boolean {\n  const toFormats: FileFormat[] | undefined = SUPPORTED_TRANSFORMATIONS[from];\n  return toFormats?.includes(to) ?? false;\n}\n","import type { FileFormat } from '../../types-dir/api/file';\nimport { isSupportedFileFormatTransform } from '../../utils/isSupportedFileFormatTransform';\n\nexport type FileFormatTransformInput = {\n  fileFormat?: FileFormat;\n  transformFormat?: FileFormat;\n  fileName?: string;\n  fileId?: string;\n};\n\n/**\n * Returns a user-facing validation error when a requested file format transform\n * is missing source format context or is not currently supported.\n */\nexport function getFileFormatTransformError(\n  file: FileFormatTransformInput\n): string | undefined {\n  if (!file.transformFormat) return undefined;\n  const fileLabel = file.fileName ?? file.fileId ?? 'unknown file';\n  if (!file.fileFormat) {\n    return `fileFormat is required when transformFormat is provided for ${fileLabel}`;\n  }\n  if (!isSupportedFileFormatTransform(file.fileFormat, file.transformFormat)) {\n    return `Unsupported file format transform: ${file.fileFormat} -> ${file.transformFormat}`;\n  }\n  return undefined;\n}\n\n/**\n * Validates file format transforms before sending upload/enqueue requests.\n */\nexport function validateFileFormatTransforms(\n  files: FileFormatTransformInput[]\n): void {\n  for (const file of files) {\n    const error = getFileFormatTransformError(file);\n    if (error) throw new Error(error);\n  }\n}\n","// Encode a string to base64\nexport function encode(data: string): string {\n  if (typeof Buffer !== 'undefined') {\n    // Node.js path.\n    return Buffer.from(data, 'utf8').toString('base64');\n  }\n  // Browser path.\n  const bytes = new TextEncoder().encode(data);\n  let binary = '';\n  for (let i = 0; i < bytes.length; i++) {\n    binary += String.fromCharCode(bytes[i]);\n  }\n  return btoa(binary);\n}\n\n// Decode a base64 string to a string\nexport function decode(base64: string): string {\n  if (typeof Buffer !== 'undefined') {\n    // Node.js path.\n    return Buffer.from(base64, 'base64').toString('utf8');\n  }\n  // Browser path.\n  const binary = atob(base64);\n  const bytes = new Uint8Array(binary.length);\n  for (let i = 0; i < binary.length; i++) {\n    bytes[i] = binary.charCodeAt(i);\n  }\n  return new TextDecoder().decode(bytes);\n}\n"],"mappings":";AAAA,MAAa,uBAAuB;AACpC,MAAa,iBAAiB;;;ACiB9B,SAAS,eAAe,MAAsB;CAC5C,MAAM,UAAU,KAAK,MAAM;AAC3B,KAAI,CAAC,QAAS,QAAO;AACrB,QAAO,UAAU,KAAK,QAAQ,GAAG,UAAU,GAAG,QAAQ;;AAGxD,SAAS,cAAc,MAAsB;CAC3C,MAAM,UAAU,KAAK,MAAM;CAC3B,IAAI,MAAM,QAAQ;AAClB,QAAO,MAAM,GAAG;EACd,MAAM,OAAO,QAAQ,MAAM;AAC3B,MAAI,SAAS,OAAO,SAAS,OAAO,SAAS,IAAK;AAClD,SAAO;;AAET,QAAO,QAAQ,MAAM,GAAG,IAAI;;AAG9B,SAAS,mBAAmB,MAAsB;AAChD,QAAO,KAAK,QAAQ,gBAAgB,UAAU,MAAM,aAAa,CAAC;;AAGpE,SAAS,cAAc,SAAgD;AACrE,KAAI,CAAC,QAAS,QAAO;CACrB,MAAM,aAAa,MAAM,QAAQ,QAAQ,GAAG,QAAQ,KAAK,KAAK,GAAG;AACjE,KAAI,CAAC,WAAW,MAAM,CAAE,QAAO;AAC/B,QAAO,eAAe,YAAY,aAAa;;AAGjD,SAAgB,6BACd,OACoB;AACpB,KAAI,SAAS,KAAM,QAAO,KAAA;AAC1B,QAAO,OAAO,MAAM;;AAGtB,SAAgB,wBAAwB,EACtC,QACA,UACA,cACA,aACA,KACA,KACA,QACA,SACA,WACiC;CACjC,MAAM,SAAS,SACX,WACE,GAAG,OAAO,GAAG,SAAS,KACtB,GAAG,OAAO,KACZ,WACE,GAAG,SAAS,KACZ;CACN,MAAM,aAAa,MACf,GAAG,cAAc,aAAa,CAAC,WAAW,mBAAmB,cAAc,IAAI,CAAC,KAChF;CACJ,MAAM,sBACJ,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,SAAS,KAAK,cAAc,OAAO,CAAC;CAI3D,MAAM,eAAe;EACnB;EACA;EALmB,sBACjB,GAAG,cAAc,IAAI,CAAC,OAAO,mBAAmB,cAAc,OAAO,CAAC,KACtE;EAKF,sBAAsB,KAAA,IAAY;EAClC,cAAc,QAAQ;EACvB,CACE,QAAQ,SAAyB,CAAC,CAAC,KAAK,CACxC,IAAI,eAAe;AAEtB,KAAI,QACF,cAAa,KAAK,eAAe,UAAU;CAG7C,MAAM,UAAU,aAAa,KAAK,IAAI;AACtC,QAAO,SAAS,GAAG,OAAO,GAAG,YAAY;;;;AC9F3C,MAAa,kBAAkB;AAC/B,MAAa,iBAAiB;AAC9B,MAAa,uBAAuB;;;ACApC,MAAM,4BAA4B;CAChC,QAAQ,CAAC,SAAS;CAClB,MAAM,CAAC,OAAO;CACd,IAAI,CAAC,KAAK;CAEV,KAAK,CAAC,OAAO,KAAK;CAClB,MAAM,CAAC,OAAO;CACd,KAAK,CAAC,MAAM;CACZ,IAAI,CAAC,KAAK;CACV,IAAI,CAAC,KAAK;CACV,IAAI,CAAC,KAAK;CACV,MAAM,CAAC,OAAO;CACd,KAAK,CAAC,MAAM;CACZ,qBAAqB,CAAC,sBAAsB;CAC7C;;;;;;;AAQD,SAAgB,+BACd,MACA,IACS;AAET,QAD4C,0BAA0B,OACpD,SAAS,GAAG,IAAI;;;;;;;;ACfpC,SAAgB,4BACd,MACoB;AACpB,KAAI,CAAC,KAAK,gBAAiB,QAAO,KAAA;CAClC,MAAM,YAAY,KAAK,YAAY,KAAK,UAAU;AAClD,KAAI,CAAC,KAAK,WACR,QAAO,+DAA+D;AAExE,KAAI,CAAC,+BAA+B,KAAK,YAAY,KAAK,gBAAgB,CACxE,QAAO,sCAAsC,KAAK,WAAW,MAAM,KAAK;;;;;AAQ5E,SAAgB,6BACd,OACM;AACN,MAAK,MAAM,QAAQ,OAAO;EACxB,MAAM,QAAQ,4BAA4B,KAAK;AAC/C,MAAI,MAAO,OAAM,IAAI,MAAM,MAAM;;;;;ACnCrC,SAAgB,OAAO,MAAsB;AAC3C,KAAI,OAAO,WAAW,YAEpB,QAAO,OAAO,KAAK,MAAM,OAAO,CAAC,SAAS,SAAS;CAGrD,MAAM,QAAQ,IAAI,aAAa,CAAC,OAAO,KAAK;CAC5C,IAAI,SAAS;AACb,MAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,IAChC,WAAU,OAAO,aAAa,MAAM,GAAG;AAEzC,QAAO,KAAK,OAAO;;AAIrB,SAAgB,OAAO,QAAwB;AAC7C,KAAI,OAAO,WAAW,YAEpB,QAAO,OAAO,KAAK,QAAQ,SAAS,CAAC,SAAS,OAAO;CAGvD,MAAM,SAAS,KAAK,OAAO;CAC3B,MAAM,QAAQ,IAAI,WAAW,OAAO,OAAO;AAC3C,MAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,IACjC,OAAM,KAAK,OAAO,WAAW,EAAE;AAEjC,QAAO,IAAI,aAAa,CAAC,OAAO,MAAM"}