ai-i18n-tools 1.0.0

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.
Files changed (260) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +157 -0
  3. package/dist/api/openrouter.d.ts +115 -0
  4. package/dist/api/openrouter.d.ts.map +1 -0
  5. package/dist/api/openrouter.js +399 -0
  6. package/dist/api/openrouter.js.map +1 -0
  7. package/dist/cli/doc-translate.d.ts +90 -0
  8. package/dist/cli/doc-translate.d.ts.map +1 -0
  9. package/dist/cli/doc-translate.js +1153 -0
  10. package/dist/cli/doc-translate.js.map +1 -0
  11. package/dist/cli/export-ui-xliff.d.ts +32 -0
  12. package/dist/cli/export-ui-xliff.d.ts.map +1 -0
  13. package/dist/cli/export-ui-xliff.js +153 -0
  14. package/dist/cli/export-ui-xliff.js.map +1 -0
  15. package/dist/cli/extract-strings.d.ts +12 -0
  16. package/dist/cli/extract-strings.d.ts.map +1 -0
  17. package/dist/cli/extract-strings.js +80 -0
  18. package/dist/cli/extract-strings.js.map +1 -0
  19. package/dist/cli/file-utils.d.ts +10 -0
  20. package/dist/cli/file-utils.d.ts.map +1 -0
  21. package/dist/cli/file-utils.js +77 -0
  22. package/dist/cli/file-utils.js.map +1 -0
  23. package/dist/cli/format.d.ts +21 -0
  24. package/dist/cli/format.d.ts.map +1 -0
  25. package/dist/cli/format.js +75 -0
  26. package/dist/cli/format.js.map +1 -0
  27. package/dist/cli/helpers.d.ts +27 -0
  28. package/dist/cli/helpers.d.ts.map +1 -0
  29. package/dist/cli/helpers.js +84 -0
  30. package/dist/cli/helpers.js.map +1 -0
  31. package/dist/cli/index.d.ts +3 -0
  32. package/dist/cli/index.d.ts.map +1 -0
  33. package/dist/cli/index.js +772 -0
  34. package/dist/cli/index.js.map +1 -0
  35. package/dist/cli/log-output.d.ts +13 -0
  36. package/dist/cli/log-output.d.ts.map +1 -0
  37. package/dist/cli/log-output.js +75 -0
  38. package/dist/cli/log-output.js.map +1 -0
  39. package/dist/cli/translate-svg.d.ts +7 -0
  40. package/dist/cli/translate-svg.d.ts.map +1 -0
  41. package/dist/cli/translate-svg.js +167 -0
  42. package/dist/cli/translate-svg.js.map +1 -0
  43. package/dist/cli/translate-ui-strings.d.ts +27 -0
  44. package/dist/cli/translate-ui-strings.d.ts.map +1 -0
  45. package/dist/cli/translate-ui-strings.js +357 -0
  46. package/dist/cli/translate-ui-strings.js.map +1 -0
  47. package/dist/core/cache-tracking-keys.d.ts +12 -0
  48. package/dist/core/cache-tracking-keys.d.ts.map +1 -0
  49. package/dist/core/cache-tracking-keys.js +20 -0
  50. package/dist/core/cache-tracking-keys.js.map +1 -0
  51. package/dist/core/cache.d.ts +153 -0
  52. package/dist/core/cache.d.ts.map +1 -0
  53. package/dist/core/cache.js +546 -0
  54. package/dist/core/cache.js.map +1 -0
  55. package/dist/core/config.d.ts +58 -0
  56. package/dist/core/config.d.ts.map +1 -0
  57. package/dist/core/config.js +392 -0
  58. package/dist/core/config.js.map +1 -0
  59. package/dist/core/doc-file-tracking.d.ts +8 -0
  60. package/dist/core/doc-file-tracking.d.ts.map +1 -0
  61. package/dist/core/doc-file-tracking.js +27 -0
  62. package/dist/core/doc-file-tracking.js.map +1 -0
  63. package/dist/core/errors.d.ts +19 -0
  64. package/dist/core/errors.d.ts.map +1 -0
  65. package/dist/core/errors.js +23 -0
  66. package/dist/core/errors.js.map +1 -0
  67. package/dist/core/locale-utils.d.ts +20 -0
  68. package/dist/core/locale-utils.d.ts.map +1 -0
  69. package/dist/core/locale-utils.js +75 -0
  70. package/dist/core/locale-utils.js.map +1 -0
  71. package/dist/core/output-paths.d.ts +22 -0
  72. package/dist/core/output-paths.d.ts.map +1 -0
  73. package/dist/core/output-paths.js +130 -0
  74. package/dist/core/output-paths.js.map +1 -0
  75. package/dist/core/prompt-builder.d.ts +62 -0
  76. package/dist/core/prompt-builder.d.ts.map +1 -0
  77. package/dist/core/prompt-builder.js +232 -0
  78. package/dist/core/prompt-builder.js.map +1 -0
  79. package/dist/core/prompts.d.ts +27 -0
  80. package/dist/core/prompts.d.ts.map +1 -0
  81. package/dist/core/prompts.js +57 -0
  82. package/dist/core/prompts.js.map +1 -0
  83. package/dist/core/svg-asset-paths.d.ts +40 -0
  84. package/dist/core/svg-asset-paths.d.ts.map +1 -0
  85. package/dist/core/svg-asset-paths.js +107 -0
  86. package/dist/core/svg-asset-paths.js.map +1 -0
  87. package/dist/core/types.d.ts +388 -0
  88. package/dist/core/types.d.ts.map +1 -0
  89. package/dist/core/types.js +265 -0
  90. package/dist/core/types.js.map +1 -0
  91. package/dist/core/ui-languages.d.ts +66 -0
  92. package/dist/core/ui-languages.d.ts.map +1 -0
  93. package/dist/core/ui-languages.js +277 -0
  94. package/dist/core/ui-languages.js.map +1 -0
  95. package/dist/core/user-edited-model.d.ts +3 -0
  96. package/dist/core/user-edited-model.d.ts.map +1 -0
  97. package/dist/core/user-edited-model.js +3 -0
  98. package/dist/core/user-edited-model.js.map +1 -0
  99. package/dist/edit-cache-app/app.js +1326 -0
  100. package/dist/edit-cache-app/index.html +287 -0
  101. package/dist/edit-cache-app/styles.css +664 -0
  102. package/dist/extractors/base-extractor.d.ts +15 -0
  103. package/dist/extractors/base-extractor.d.ts.map +1 -0
  104. package/dist/extractors/base-extractor.js +23 -0
  105. package/dist/extractors/base-extractor.js.map +1 -0
  106. package/dist/extractors/classify-segment.d.ts +6 -0
  107. package/dist/extractors/classify-segment.d.ts.map +1 -0
  108. package/dist/extractors/classify-segment.js +20 -0
  109. package/dist/extractors/classify-segment.js.map +1 -0
  110. package/dist/extractors/json-extractor.d.ts +16 -0
  111. package/dist/extractors/json-extractor.d.ts.map +1 -0
  112. package/dist/extractors/json-extractor.js +128 -0
  113. package/dist/extractors/json-extractor.js.map +1 -0
  114. package/dist/extractors/markdown-extractor.d.ts +15 -0
  115. package/dist/extractors/markdown-extractor.d.ts.map +1 -0
  116. package/dist/extractors/markdown-extractor.js +205 -0
  117. package/dist/extractors/markdown-extractor.js.map +1 -0
  118. package/dist/extractors/svg-extractor.d.ts +19 -0
  119. package/dist/extractors/svg-extractor.d.ts.map +1 -0
  120. package/dist/extractors/svg-extractor.js +132 -0
  121. package/dist/extractors/svg-extractor.js.map +1 -0
  122. package/dist/extractors/ui-string-extractor.d.ts +40 -0
  123. package/dist/extractors/ui-string-extractor.d.ts.map +1 -0
  124. package/dist/extractors/ui-string-extractor.js +146 -0
  125. package/dist/extractors/ui-string-extractor.js.map +1 -0
  126. package/dist/extractors/ui-string-locations.d.ts +23 -0
  127. package/dist/extractors/ui-string-locations.d.ts.map +1 -0
  128. package/dist/extractors/ui-string-locations.js +138 -0
  129. package/dist/extractors/ui-string-locations.js.map +1 -0
  130. package/dist/glossary/glossary.d.ts +34 -0
  131. package/dist/glossary/glossary.d.ts.map +1 -0
  132. package/dist/glossary/glossary.js +260 -0
  133. package/dist/glossary/glossary.js.map +1 -0
  134. package/dist/glossary/matcher.d.ts +10 -0
  135. package/dist/glossary/matcher.d.ts.map +1 -0
  136. package/dist/glossary/matcher.js +12 -0
  137. package/dist/glossary/matcher.js.map +1 -0
  138. package/dist/index.d.ts +44 -0
  139. package/dist/index.d.ts.map +1 -0
  140. package/dist/index.js +44 -0
  141. package/dist/index.js.map +1 -0
  142. package/dist/processors/admonition-placeholders.d.ts +8 -0
  143. package/dist/processors/admonition-placeholders.d.ts.map +1 -0
  144. package/dist/processors/admonition-placeholders.js +59 -0
  145. package/dist/processors/admonition-placeholders.js.map +1 -0
  146. package/dist/processors/anchor-placeholders.d.ts +8 -0
  147. package/dist/processors/anchor-placeholders.d.ts.map +1 -0
  148. package/dist/processors/anchor-placeholders.js +37 -0
  149. package/dist/processors/anchor-placeholders.js.map +1 -0
  150. package/dist/processors/batch-processor.d.ts +10 -0
  151. package/dist/processors/batch-processor.d.ts.map +1 -0
  152. package/dist/processors/batch-processor.js +33 -0
  153. package/dist/processors/batch-processor.js.map +1 -0
  154. package/dist/processors/bold-code-placeholders.d.ts +14 -0
  155. package/dist/processors/bold-code-placeholders.d.ts.map +1 -0
  156. package/dist/processors/bold-code-placeholders.js +116 -0
  157. package/dist/processors/bold-code-placeholders.js.map +1 -0
  158. package/dist/processors/doc-postprocess.d.ts +51 -0
  159. package/dist/processors/doc-postprocess.d.ts.map +1 -0
  160. package/dist/processors/doc-postprocess.js +215 -0
  161. package/dist/processors/doc-postprocess.js.map +1 -0
  162. package/dist/processors/emphasis-placeholders.d.ts +6 -0
  163. package/dist/processors/emphasis-placeholders.d.ts.map +1 -0
  164. package/dist/processors/emphasis-placeholders.js +262 -0
  165. package/dist/processors/emphasis-placeholders.js.map +1 -0
  166. package/dist/processors/flat-link-rewrite.d.ts +32 -0
  167. package/dist/processors/flat-link-rewrite.d.ts.map +1 -0
  168. package/dist/processors/flat-link-rewrite.js +90 -0
  169. package/dist/processors/flat-link-rewrite.js.map +1 -0
  170. package/dist/processors/glossary-force-placeholders.d.ts +12 -0
  171. package/dist/processors/glossary-force-placeholders.d.ts.map +1 -0
  172. package/dist/processors/glossary-force-placeholders.js +58 -0
  173. package/dist/processors/glossary-force-placeholders.js.map +1 -0
  174. package/dist/processors/inline-code-placeholders.d.ts +11 -0
  175. package/dist/processors/inline-code-placeholders.d.ts.map +1 -0
  176. package/dist/processors/inline-code-placeholders.js +87 -0
  177. package/dist/processors/inline-code-placeholders.js.map +1 -0
  178. package/dist/processors/placeholder-handler.d.ts +38 -0
  179. package/dist/processors/placeholder-handler.d.ts.map +1 -0
  180. package/dist/processors/placeholder-handler.js +55 -0
  181. package/dist/processors/placeholder-handler.js.map +1 -0
  182. package/dist/processors/translation-placeholder-leaks.d.ts +2 -0
  183. package/dist/processors/translation-placeholder-leaks.d.ts.map +1 -0
  184. package/dist/processors/translation-placeholder-leaks.js +9 -0
  185. package/dist/processors/translation-placeholder-leaks.js.map +1 -0
  186. package/dist/processors/url-placeholders.d.ts +10 -0
  187. package/dist/processors/url-placeholders.d.ts.map +1 -0
  188. package/dist/processors/url-placeholders.js +29 -0
  189. package/dist/processors/url-placeholders.js.map +1 -0
  190. package/dist/processors/validator.d.ts +23 -0
  191. package/dist/processors/validator.d.ts.map +1 -0
  192. package/dist/processors/validator.js +186 -0
  193. package/dist/processors/validator.js.map +1 -0
  194. package/dist/runtime/i18next-helpers.d.ts +146 -0
  195. package/dist/runtime/i18next-helpers.d.ts.map +1 -0
  196. package/dist/runtime/i18next-helpers.js +192 -0
  197. package/dist/runtime/i18next-helpers.js.map +1 -0
  198. package/dist/runtime/index.d.ts +4 -0
  199. package/dist/runtime/index.d.ts.map +1 -0
  200. package/dist/runtime/index.js +4 -0
  201. package/dist/runtime/index.js.map +1 -0
  202. package/dist/runtime/template.d.ts +21 -0
  203. package/dist/runtime/template.d.ts.map +1 -0
  204. package/dist/runtime/template.js +28 -0
  205. package/dist/runtime/template.js.map +1 -0
  206. package/dist/runtime/ui-language-display.d.ts +16 -0
  207. package/dist/runtime/ui-language-display.d.ts.map +1 -0
  208. package/dist/runtime/ui-language-display.js +26 -0
  209. package/dist/runtime/ui-language-display.js.map +1 -0
  210. package/dist/server/translation-editor.d.ts +25 -0
  211. package/dist/server/translation-editor.d.ts.map +1 -0
  212. package/dist/server/translation-editor.js +583 -0
  213. package/dist/server/translation-editor.js.map +1 -0
  214. package/dist/utils/concurrency.d.ts +31 -0
  215. package/dist/utils/concurrency.d.ts.map +1 -0
  216. package/dist/utils/concurrency.js +103 -0
  217. package/dist/utils/concurrency.js.map +1 -0
  218. package/dist/utils/hash.d.ts +5 -0
  219. package/dist/utils/hash.d.ts.map +1 -0
  220. package/dist/utils/hash.js +9 -0
  221. package/dist/utils/hash.js.map +1 -0
  222. package/dist/utils/ignore-parser.d.ts +7 -0
  223. package/dist/utils/ignore-parser.d.ts.map +1 -0
  224. package/dist/utils/ignore-parser.js +26 -0
  225. package/dist/utils/ignore-parser.js.map +1 -0
  226. package/dist/utils/logger.d.ts +45 -0
  227. package/dist/utils/logger.d.ts.map +1 -0
  228. package/dist/utils/logger.js +158 -0
  229. package/dist/utils/logger.js.map +1 -0
  230. package/docs/GETTING_STARTED.md +697 -0
  231. package/docs/PACKAGE_OVERVIEW.md +427 -0
  232. package/docs/ai-i18n-tools-context.md +481 -0
  233. package/package.json +117 -0
  234. package/translated-docs/README.de.md +157 -0
  235. package/translated-docs/README.es.md +157 -0
  236. package/translated-docs/README.fr.md +157 -0
  237. package/translated-docs/README.hi.md +157 -0
  238. package/translated-docs/README.ja.md +157 -0
  239. package/translated-docs/README.ko.md +157 -0
  240. package/translated-docs/README.pt-BR.md +157 -0
  241. package/translated-docs/README.zh-CN.md +157 -0
  242. package/translated-docs/README.zh-TW.md +157 -0
  243. package/translated-docs/docs/GETTING_STARTED.de.md +682 -0
  244. package/translated-docs/docs/GETTING_STARTED.es.md +682 -0
  245. package/translated-docs/docs/GETTING_STARTED.fr.md +682 -0
  246. package/translated-docs/docs/GETTING_STARTED.hi.md +682 -0
  247. package/translated-docs/docs/GETTING_STARTED.ja.md +682 -0
  248. package/translated-docs/docs/GETTING_STARTED.ko.md +682 -0
  249. package/translated-docs/docs/GETTING_STARTED.pt-BR.md +682 -0
  250. package/translated-docs/docs/GETTING_STARTED.zh-CN.md +682 -0
  251. package/translated-docs/docs/GETTING_STARTED.zh-TW.md +682 -0
  252. package/translated-docs/docs/PACKAGE_OVERVIEW.de.md +428 -0
  253. package/translated-docs/docs/PACKAGE_OVERVIEW.es.md +428 -0
  254. package/translated-docs/docs/PACKAGE_OVERVIEW.fr.md +428 -0
  255. package/translated-docs/docs/PACKAGE_OVERVIEW.hi.md +428 -0
  256. package/translated-docs/docs/PACKAGE_OVERVIEW.ja.md +428 -0
  257. package/translated-docs/docs/PACKAGE_OVERVIEW.ko.md +428 -0
  258. package/translated-docs/docs/PACKAGE_OVERVIEW.pt-BR.md +428 -0
  259. package/translated-docs/docs/PACKAGE_OVERVIEW.zh-CN.md +428 -0
  260. package/translated-docs/docs/PACKAGE_OVERVIEW.zh-TW.md +428 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matcher.d.ts","sourceRoot":"","sources":["../../src/glossary/matcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C;;GAEG;AACH,qBAAa,eAAe;IACd,OAAO,CAAC,QAAQ,CAAC,QAAQ;gBAAR,QAAQ,EAAE,QAAQ;IAE/C,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;CAGxD"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Thin wrapper for prompt integration (plan §3.3 matching API).
3
+ */
4
+ export class GlossaryMatcher {
5
+ constructor(glossary) {
6
+ this.glossary = glossary;
7
+ }
8
+ findTermsInText(text, locale) {
9
+ return this.glossary.findTermsInText(text, locale);
10
+ }
11
+ }
12
+ //# sourceMappingURL=matcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matcher.js","sourceRoot":"","sources":["../../src/glossary/matcher.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,OAAO,eAAe;IAC1B,YAA6B,QAAkB;QAAlB,aAAQ,GAAR,QAAQ,CAAU;IAAG,CAAC;IAEnD,eAAe,CAAC,IAAY,EAAE,MAAc;QAC1C,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC;CACF"}
@@ -0,0 +1,44 @@
1
+ export { I18nToolsError, ConfigValidationError, CacheError } from "./core/errors.js";
2
+ export { type I18nConfig, type OpenRouterConfig, type FeaturesConfig, type GlossaryConfig, type UIStringExtractorConfig, type ReactExtractorConfig, type SvgExtractorConfig, type UiConfig, type DocumentationBlock, type I18nDocTranslateConfig, type MarkdownOutputConfig, type MarkdownPostProcessingConfig, type LanguageListBlockConfig, type RegexAdjustmentConfig, type SvgAssetsConfig, type RawI18nConfigInput, type Segment, type SegmentType, type DocSegmentTranslation, type SegmentTranslationMapValue, segmentTranslationText, translationTextMap, type SvgSegmentMeta, type TranslationResult, type FileTracking, type CacheEntry, type TranslationRow, type CleanupStats, type ContentExtractor, type GlossaryTerm, type BatchTranslationResult, type ChatMessage, type ChatResponse, BatchTranslationError, i18nConfigSchema, } from "./core/types.js";
3
+ export { type DocArtifactKind, resolveDocumentationOutputPath, expandPathTemplate, shouldRewriteFlatMarkdownLinks, toPosix, } from "./core/output-paths.js";
4
+ export { type SvgPathTemplateContext, expandSvgPathTemplate, resolveSvgAssetOutputPath, svgAssetCacheFilepath, svgTranslationFilepathMetadata, relPathUnderSvgSource, } from "./core/svg-asset-paths.js";
5
+ export { resolveTranslationModels, resolveUITranslationModels, coerceTargetLocalesField, englishLanguageNameForLocale, normalizeLocale, parseLocaleList, mergeWithDefaults, parseI18nConfig, applyEnvOverrides, loadI18nConfigFromFile, defaultI18nConfigPartial, validateI18nBusinessRules, assertSvgCommandConfig, DEFAULT_CONFIG_FILENAME, initConfigTemplates, writeInitConfigFile, toDocTranslateConfig, } from "./core/config.js";
6
+ export { TranslationCache } from "./core/cache.js";
7
+ export { USER_EDITED_MODEL } from "./core/user-edited-model.js";
8
+ export { buildDocumentBatchPrompt, buildDocumentSinglePrompt, buildUIPromptMessages, parseBatchTranslationResponse, parseUIJsonArrayResponse, PromptParseError, UIJsonArrayParseError, PROMPTS, MARKDOWN_PRESERVATION_RULES, JSON_SEGMENT_CONTEXT_ADDENDUM, SVG_SEGMENT_CONTEXT_ADDENDUM, type DocumentPromptContentType, type PromptStrings, type DocumentPromptStrings, type UIPromptStrings, } from "./core/prompt-builder.js";
9
+ export { computeSegmentHash } from "./utils/hash.js";
10
+ export { runMapWithConcurrency, AsyncSemaphore, AsyncMutex } from "./utils/concurrency.js";
11
+ export { Logger, type LogLevelName, type LoggerOptions, truncateLogFile, stripAnsi, } from "./utils/logger.js";
12
+ export { loadTranslateIgnore, isIgnored } from "./utils/ignore-parser.js";
13
+ export { BaseExtractor } from "./extractors/base-extractor.js";
14
+ export { classifySegmentType } from "./extractors/classify-segment.js";
15
+ export { MarkdownExtractor, type MarkdownExtractOptions } from "./extractors/markdown-extractor.js";
16
+ export { JsonExtractor } from "./extractors/json-extractor.js";
17
+ export { SvgExtractor, type SvgExtractorOptions } from "./extractors/svg-extractor.js";
18
+ export { UIStringExtractor } from "./extractors/ui-string-extractor.js";
19
+ /** @deprecated Use {@link UIStringExtractor} */
20
+ export { UIStringExtractor as ReactExtractor } from "./extractors/ui-string-extractor.js";
21
+ export { PlaceholderHandler } from "./processors/placeholder-handler.js";
22
+ export { protectBoldWrappedInlineCode, restoreBoldWrappedInlineCode, } from "./processors/bold-code-placeholders.js";
23
+ export { protectInlineCodeSpans, restoreInlineCodeSpans, } from "./processors/inline-code-placeholders.js";
24
+ export { protectMarkdownUrls, restoreMarkdownUrls } from "./processors/url-placeholders.js";
25
+ export { protectAdmonitionSyntax, restoreAdmonitionSyntax, } from "./processors/admonition-placeholders.js";
26
+ export { protectDocAnchors, restoreDocAnchors } from "./processors/anchor-placeholders.js";
27
+ export { splitTranslatableIntoBatches, type BatchConfig } from "./processors/batch-processor.js";
28
+ export { validateTranslation, validateDocTranslatePair, compareMarkdownAST, type ValidationResult, } from "./processors/validator.js";
29
+ export { hasInternalPlaceholderLeak } from "./processors/translation-placeholder-leaks.js";
30
+ export { protectGlossaryForcedTerms, restoreGlossaryForcedTerms, glossaryForcePlaceholderToken, } from "./processors/glossary-force-placeholders.js";
31
+ export { OpenRouterClient, type OpenRouterClientOptions } from "./api/openrouter.js";
32
+ export { runTranslateUI, type TranslateUIOptions, type TranslateUISummary, } from "./cli/translate-ui-strings.js";
33
+ export { type UiLanguageEntry, looksLikeUiLanguagesFileRef, expandTargetLocalesFileReferenceInRawInput, expandDocumentationTargetLocalesInRawInput, getDocumentationTargetLocaleCodes, resolveLocalesForDocumentation, resolveLocalesForSvg, resolveUiLanguagesAbsPath, loadUiLanguageEntries, mergeUiLanguageDisplayNames, resolveUiTranslationTargetCodes, resolveLocalesForUI, augmentConfigWithUiLanguagesFile, } from "./core/ui-languages.js";
34
+ /**
35
+ * Runtime helpers (no React / i18next import required):
36
+ * - Language row display labels for UI menus
37
+ * - `{{var}}` interpolation for non-i18next contexts
38
+ * - RTL direction detection, DOM `dir` helper
39
+ * - i18next setup factories: init options, key-trim wrapper, locale loader
40
+ */
41
+ export { interpolateTemplate, flipUiArrowsForRtl, getUILanguageLabel, getUILanguageLabelNative, type TranslateFn, RTL_LANGS, getTextDirection, applyDirection, defaultI18nInitOptions, wrapI18nWithKeyTrim, makeLoadLocale, type I18nLike, type I18nWithResources, } from "./runtime/index.js";
42
+ export { Glossary } from "./glossary/glossary.js";
43
+ export { GlossaryMatcher } from "./glossary/matcher.js";
44
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,44 @@
1
+ export { I18nToolsError, ConfigValidationError, CacheError } from "./core/errors.js";
2
+ export { segmentTranslationText, translationTextMap, BatchTranslationError, i18nConfigSchema, } from "./core/types.js";
3
+ export { resolveDocumentationOutputPath, expandPathTemplate, shouldRewriteFlatMarkdownLinks, toPosix, } from "./core/output-paths.js";
4
+ export { expandSvgPathTemplate, resolveSvgAssetOutputPath, svgAssetCacheFilepath, svgTranslationFilepathMetadata, relPathUnderSvgSource, } from "./core/svg-asset-paths.js";
5
+ export { resolveTranslationModels, resolveUITranslationModels, coerceTargetLocalesField, englishLanguageNameForLocale, normalizeLocale, parseLocaleList, mergeWithDefaults, parseI18nConfig, applyEnvOverrides, loadI18nConfigFromFile, defaultI18nConfigPartial, validateI18nBusinessRules, assertSvgCommandConfig, DEFAULT_CONFIG_FILENAME, initConfigTemplates, writeInitConfigFile, toDocTranslateConfig, } from "./core/config.js";
6
+ export { TranslationCache } from "./core/cache.js";
7
+ export { USER_EDITED_MODEL } from "./core/user-edited-model.js";
8
+ export { buildDocumentBatchPrompt, buildDocumentSinglePrompt, buildUIPromptMessages, parseBatchTranslationResponse, parseUIJsonArrayResponse, PromptParseError, UIJsonArrayParseError, PROMPTS, MARKDOWN_PRESERVATION_RULES, JSON_SEGMENT_CONTEXT_ADDENDUM, SVG_SEGMENT_CONTEXT_ADDENDUM, } from "./core/prompt-builder.js";
9
+ export { computeSegmentHash } from "./utils/hash.js";
10
+ export { runMapWithConcurrency, AsyncSemaphore, AsyncMutex } from "./utils/concurrency.js";
11
+ export { Logger, truncateLogFile, stripAnsi, } from "./utils/logger.js";
12
+ export { loadTranslateIgnore, isIgnored } from "./utils/ignore-parser.js";
13
+ export { BaseExtractor } from "./extractors/base-extractor.js";
14
+ export { classifySegmentType } from "./extractors/classify-segment.js";
15
+ export { MarkdownExtractor } from "./extractors/markdown-extractor.js";
16
+ export { JsonExtractor } from "./extractors/json-extractor.js";
17
+ export { SvgExtractor } from "./extractors/svg-extractor.js";
18
+ export { UIStringExtractor } from "./extractors/ui-string-extractor.js";
19
+ /** @deprecated Use {@link UIStringExtractor} */
20
+ export { UIStringExtractor as ReactExtractor } from "./extractors/ui-string-extractor.js";
21
+ export { PlaceholderHandler } from "./processors/placeholder-handler.js";
22
+ export { protectBoldWrappedInlineCode, restoreBoldWrappedInlineCode, } from "./processors/bold-code-placeholders.js";
23
+ export { protectInlineCodeSpans, restoreInlineCodeSpans, } from "./processors/inline-code-placeholders.js";
24
+ export { protectMarkdownUrls, restoreMarkdownUrls } from "./processors/url-placeholders.js";
25
+ export { protectAdmonitionSyntax, restoreAdmonitionSyntax, } from "./processors/admonition-placeholders.js";
26
+ export { protectDocAnchors, restoreDocAnchors } from "./processors/anchor-placeholders.js";
27
+ export { splitTranslatableIntoBatches } from "./processors/batch-processor.js";
28
+ export { validateTranslation, validateDocTranslatePair, compareMarkdownAST, } from "./processors/validator.js";
29
+ export { hasInternalPlaceholderLeak } from "./processors/translation-placeholder-leaks.js";
30
+ export { protectGlossaryForcedTerms, restoreGlossaryForcedTerms, glossaryForcePlaceholderToken, } from "./processors/glossary-force-placeholders.js";
31
+ export { OpenRouterClient } from "./api/openrouter.js";
32
+ export { runTranslateUI, } from "./cli/translate-ui-strings.js";
33
+ export { looksLikeUiLanguagesFileRef, expandTargetLocalesFileReferenceInRawInput, expandDocumentationTargetLocalesInRawInput, getDocumentationTargetLocaleCodes, resolveLocalesForDocumentation, resolveLocalesForSvg, resolveUiLanguagesAbsPath, loadUiLanguageEntries, mergeUiLanguageDisplayNames, resolveUiTranslationTargetCodes, resolveLocalesForUI, augmentConfigWithUiLanguagesFile, } from "./core/ui-languages.js";
34
+ /**
35
+ * Runtime helpers (no React / i18next import required):
36
+ * - Language row display labels for UI menus
37
+ * - `{{var}}` interpolation for non-i18next contexts
38
+ * - RTL direction detection, DOM `dir` helper
39
+ * - i18next setup factories: init options, key-trim wrapper, locale loader
40
+ */
41
+ export { interpolateTemplate, flipUiArrowsForRtl, getUILanguageLabel, getUILanguageLabelNative, RTL_LANGS, getTextDirection, applyDirection, defaultI18nInitOptions, wrapI18nWithKeyTrim, makeLoadLocale, } from "./runtime/index.js";
42
+ export { Glossary } from "./glossary/glossary.js";
43
+ export { GlossaryMatcher } from "./glossary/matcher.js";
44
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export interface AdmonitionProtectedResult {
2
+ protected: string;
3
+ openMap: string[];
4
+ endMap: string[];
5
+ }
6
+ export declare function protectAdmonitionSyntax(text: string): AdmonitionProtectedResult;
7
+ export declare function restoreAdmonitionSyntax(text: string, openMap: string[], endMap: string[]): string;
8
+ //# sourceMappingURL=admonition-placeholders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admonition-placeholders.d.ts","sourceRoot":"","sources":["../../src/processors/admonition-placeholders.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,yBAAyB;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,yBAAyB,CA4C/E;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAcjG"}
@@ -0,0 +1,59 @@
1
+ const OPEN_PREFIX = "{{ADM_OPEN_";
2
+ const OPEN_SUFFIX = "}}";
3
+ const END_PREFIX = "{{ADM_END_";
4
+ const END_SUFFIX = "}}";
5
+ const ADMONITION_DIRECTIVES = /^\s*(:::(?:note|tip|info|warning|danger|caution|important)(?:\[[^\]]*\])?(?:\s+[^\n]*)?)\s*$/;
6
+ const ADMONITION_CLOSING = /^\s*(:::+)\s*$/;
7
+ const GITHUB_ALERT_LINE = /^\s*>\s*\[!(?:NOTE|TIP|IMPORTANT|WARNING|CAUTION)\]\s*$/i;
8
+ export function protectAdmonitionSyntax(text) {
9
+ const openMap = [];
10
+ const endMap = [];
11
+ let openIndex = 0;
12
+ let endIndex = 0;
13
+ const lines = text.split("\n");
14
+ const result = [];
15
+ for (const line of lines) {
16
+ const openMatch = line.match(ADMONITION_DIRECTIVES);
17
+ if (openMatch) {
18
+ const placeholder = `${OPEN_PREFIX}${openIndex}${OPEN_SUFFIX}`;
19
+ openMap.push(line);
20
+ openIndex++;
21
+ result.push(placeholder);
22
+ continue;
23
+ }
24
+ if (line.match(GITHUB_ALERT_LINE)) {
25
+ const placeholder = `${OPEN_PREFIX}${openIndex}${OPEN_SUFFIX}`;
26
+ openMap.push(line);
27
+ openIndex++;
28
+ result.push(placeholder);
29
+ continue;
30
+ }
31
+ const endMatch = line.match(ADMONITION_CLOSING);
32
+ if (endMatch) {
33
+ const placeholder = `${END_PREFIX}${endIndex}${END_SUFFIX}`;
34
+ endMap.push(endMatch[1]);
35
+ endIndex++;
36
+ result.push(placeholder);
37
+ continue;
38
+ }
39
+ result.push(line);
40
+ }
41
+ return {
42
+ protected: result.join("\n"),
43
+ openMap,
44
+ endMap,
45
+ };
46
+ }
47
+ export function restoreAdmonitionSyntax(text, openMap, endMap) {
48
+ let restored = text;
49
+ for (let i = 0; i < endMap.length; i++) {
50
+ const flexible = new RegExp(`\\{\\{\\s*ADM_END_${i}\\s*\\}\\}`, "g");
51
+ restored = restored.replace(flexible, endMap[i]);
52
+ }
53
+ for (let i = 0; i < openMap.length; i++) {
54
+ const flexible = new RegExp(`\\{\\{\\s*ADM_OPEN_${i}\\s*\\}\\}`, "g");
55
+ restored = restored.replace(flexible, openMap[i]);
56
+ }
57
+ return restored;
58
+ }
59
+ //# sourceMappingURL=admonition-placeholders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admonition-placeholders.js","sourceRoot":"","sources":["../../src/processors/admonition-placeholders.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,GAAG,aAAa,CAAC;AAClC,MAAM,WAAW,GAAG,IAAI,CAAC;AACzB,MAAM,UAAU,GAAG,YAAY,CAAC;AAChC,MAAM,UAAU,GAAG,IAAI,CAAC;AAExB,MAAM,qBAAqB,GACzB,8FAA8F,CAAC;AAEjG,MAAM,kBAAkB,GAAG,gBAAgB,CAAC;AAE5C,MAAM,iBAAiB,GAAG,0DAA0D,CAAC;AAQrF,MAAM,UAAU,uBAAuB,CAAC,IAAY;IAClD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,QAAQ,GAAG,CAAC,CAAC;IAEjB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACpD,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,WAAW,GAAG,GAAG,WAAW,GAAG,SAAS,GAAG,WAAW,EAAE,CAAC;YAC/D,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnB,SAAS,EAAE,CAAC;YACZ,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACzB,SAAS;QACX,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC;YAClC,MAAM,WAAW,GAAG,GAAG,WAAW,GAAG,SAAS,GAAG,WAAW,EAAE,CAAC;YAC/D,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnB,SAAS,EAAE,CAAC;YACZ,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACzB,SAAS;QACX,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAChD,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,WAAW,GAAG,GAAG,UAAU,GAAG,QAAQ,GAAG,UAAU,EAAE,CAAC;YAC5D,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YACzB,QAAQ,EAAE,CAAC;YACX,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACzB,SAAS;QACX,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IAED,OAAO;QACL,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5B,OAAO;QACP,MAAM;KACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,IAAY,EAAE,OAAiB,EAAE,MAAgB;IACvF,IAAI,QAAQ,GAAG,IAAI,CAAC;IAEpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,qBAAqB,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;QACrE,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,CAAC;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,sBAAsB,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;QACtE,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,8 @@
1
+ export interface DocAnchorProtectedResult {
2
+ protected: string;
3
+ htmlAnchors: string[];
4
+ docusaurusHeadingIds: string[];
5
+ }
6
+ export declare function protectDocAnchors(text: string): DocAnchorProtectedResult;
7
+ export declare function restoreDocAnchors(text: string, htmlAnchors: string[], docusaurusHeadingIds: string[]): string;
8
+ //# sourceMappingURL=anchor-placeholders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anchor-placeholders.d.ts","sourceRoot":"","sources":["../../src/processors/anchor-placeholders.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,oBAAoB,EAAE,MAAM,EAAE,CAAC;CAChC;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,wBAAwB,CAoBxE;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EAAE,EACrB,oBAAoB,EAAE,MAAM,EAAE,GAC7B,MAAM,CAcR"}
@@ -0,0 +1,37 @@
1
+ const HTML_ANCHOR_PREFIX = "{{ANC_";
2
+ const HEADING_ID_PREFIX = "{{HDG_";
3
+ const PLACEHOLDER_SUFFIX = "}}";
4
+ const HTML_ID_ANCHOR_RE = /<a\s+id\s*=\s*(["'])([^"']*)\1[^>]*>\s*<\/a>/gi;
5
+ const DOCUS_HEADING_ID_RE = /\{#[^}]+\}/g;
6
+ export function protectDocAnchors(text) {
7
+ const htmlAnchors = [];
8
+ let s = text.replace(HTML_ID_ANCHOR_RE, (full) => {
9
+ const ph = `${HTML_ANCHOR_PREFIX}${htmlAnchors.length}${PLACEHOLDER_SUFFIX}`;
10
+ htmlAnchors.push(full);
11
+ return ph;
12
+ });
13
+ const docusaurusHeadingIds = [];
14
+ s = s.replace(DOCUS_HEADING_ID_RE, (full) => {
15
+ const ph = `${HEADING_ID_PREFIX}${docusaurusHeadingIds.length}${PLACEHOLDER_SUFFIX}`;
16
+ docusaurusHeadingIds.push(full);
17
+ return ph;
18
+ });
19
+ return {
20
+ protected: s,
21
+ htmlAnchors,
22
+ docusaurusHeadingIds,
23
+ };
24
+ }
25
+ export function restoreDocAnchors(text, htmlAnchors, docusaurusHeadingIds) {
26
+ let restored = text;
27
+ for (let i = 0; i < docusaurusHeadingIds.length; i++) {
28
+ const flexible = new RegExp(`\\{\\{\\s*HDG[-_]${i}\\s*\\}\\}`, "g");
29
+ restored = restored.replace(flexible, docusaurusHeadingIds[i]);
30
+ }
31
+ for (let i = 0; i < htmlAnchors.length; i++) {
32
+ const flexible = new RegExp(`\\{\\{\\s*ANC[-_]${i}\\s*\\}\\}`, "g");
33
+ restored = restored.replace(flexible, htmlAnchors[i]);
34
+ }
35
+ return restored;
36
+ }
37
+ //# sourceMappingURL=anchor-placeholders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anchor-placeholders.js","sourceRoot":"","sources":["../../src/processors/anchor-placeholders.ts"],"names":[],"mappings":"AAAA,MAAM,kBAAkB,GAAG,QAAQ,CAAC;AACpC,MAAM,iBAAiB,GAAG,QAAQ,CAAC;AACnC,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAEhC,MAAM,iBAAiB,GAAG,gDAAgD,CAAC;AAE3E,MAAM,mBAAmB,GAAG,aAAa,CAAC;AAQ1C,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,IAAI,EAAE,EAAE;QAC/C,MAAM,EAAE,GAAG,GAAG,kBAAkB,GAAG,WAAW,CAAC,MAAM,GAAG,kBAAkB,EAAE,CAAC;QAC7E,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvB,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;IAEH,MAAM,oBAAoB,GAAa,EAAE,CAAC;IAC1C,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC,IAAI,EAAE,EAAE;QAC1C,MAAM,EAAE,GAAG,GAAG,iBAAiB,GAAG,oBAAoB,CAAC,MAAM,GAAG,kBAAkB,EAAE,CAAC;QACrF,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,SAAS,EAAE,CAAC;QACZ,WAAW;QACX,oBAAoB;KACrB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,IAAY,EACZ,WAAqB,EACrB,oBAA8B;IAE9B,IAAI,QAAQ,GAAG,IAAI,CAAC;IAEpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,oBAAoB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrD,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,oBAAoB,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;QACpE,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC;IACjE,CAAC;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5C,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,oBAAoB,CAAC,YAAY,EAAE,GAAG,CAAC,CAAC;QACpE,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { Segment } from "../core/types.js";
2
+ export interface BatchConfig {
3
+ batchSize: number;
4
+ maxBatchChars: number;
5
+ }
6
+ /**
7
+ * Group translatable segments into batches: bounded by max count and max total chars.
8
+ */
9
+ export declare function splitTranslatableIntoBatches(segments: Segment[], config?: Partial<BatchConfig>): Segment[][];
10
+ //# sourceMappingURL=batch-processor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch-processor.d.ts","sourceRoot":"","sources":["../../src/processors/batch-processor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAEhD,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;CACvB;AAOD;;GAEG;AACH,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,OAAO,EAAE,EACnB,MAAM,GAAE,OAAO,CAAC,WAAW,CAAM,GAChC,OAAO,EAAE,EAAE,CA4Bb"}
@@ -0,0 +1,33 @@
1
+ const DEFAULT_BATCH = {
2
+ batchSize: 20,
3
+ maxBatchChars: 4096,
4
+ };
5
+ /**
6
+ * Group translatable segments into batches: bounded by max count and max total chars.
7
+ */
8
+ export function splitTranslatableIntoBatches(segments, config = {}) {
9
+ const batchSize = config.batchSize ?? DEFAULT_BATCH.batchSize;
10
+ const maxBatchChars = config.maxBatchChars ?? DEFAULT_BATCH.maxBatchChars;
11
+ const translatable = segments.filter((s) => s.translatable);
12
+ const batches = [];
13
+ let current = [];
14
+ let chars = 0;
15
+ const flush = () => {
16
+ if (current.length > 0) {
17
+ batches.push(current);
18
+ current = [];
19
+ chars = 0;
20
+ }
21
+ };
22
+ for (const s of translatable) {
23
+ const addLen = s.content.length;
24
+ if (current.length >= batchSize || (current.length > 0 && chars + addLen > maxBatchChars)) {
25
+ flush();
26
+ }
27
+ current.push(s);
28
+ chars += addLen;
29
+ }
30
+ flush();
31
+ return batches;
32
+ }
33
+ //# sourceMappingURL=batch-processor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch-processor.js","sourceRoot":"","sources":["../../src/processors/batch-processor.ts"],"names":[],"mappings":"AAOA,MAAM,aAAa,GAAgB;IACjC,SAAS,EAAE,EAAE;IACb,aAAa,EAAE,IAAI;CACpB,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,4BAA4B,CAC1C,QAAmB,EACnB,SAA+B,EAAE;IAEjC,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,aAAa,CAAC,SAAS,CAAC;IAC9D,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,IAAI,aAAa,CAAC,aAAa,CAAC;IAE1E,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;IAC5D,MAAM,OAAO,GAAgB,EAAE,CAAC;IAChC,IAAI,OAAO,GAAc,EAAE,CAAC;IAC5B,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,MAAM,KAAK,GAAG,GAAG,EAAE;QACjB,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACtB,OAAO,GAAG,EAAE,CAAC;YACb,KAAK,GAAG,CAAC,CAAC;QACZ,CAAC;IACH,CAAC,CAAC;IAEF,KAAK,MAAM,CAAC,IAAI,YAAY,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;QAChC,IAAI,OAAO,CAAC,MAAM,IAAI,SAAS,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,GAAG,MAAM,GAAG,aAAa,CAAC,EAAE,CAAC;YAC1F,KAAK,EAAE,CAAC;QACV,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,KAAK,IAAI,MAAM,CAAC;IAClB,CAAC;IACD,KAAK,EAAE,CAAC;IAER,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Replace **`...`** (bold wrapping inline code) with a single opaque placeholder per occurrence.
3
+ * The whole span is non-translatable markup; isolating it avoids models breaking ** / ` pairing (e.g. CJK).
4
+ */
5
+ export interface ProtectedBoldCodeResult {
6
+ protected: string;
7
+ boldCodeMap: string[];
8
+ }
9
+ /**
10
+ * After URLs/anchors: each **`inner`** becomes one placeholder; inner backticks and ** are stored for restore.
11
+ */
12
+ export declare function protectBoldWrappedInlineCode(text: string): ProtectedBoldCodeResult;
13
+ export declare function restoreBoldWrappedInlineCode(text: string, boldCodeMap: string[]): string;
14
+ //# sourceMappingURL=bold-code-placeholders.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bold-code-placeholders.d.ts","sourceRoot":"","sources":["../../src/processors/bold-code-placeholders.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA2CH,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,GAAG,uBAAuB,CAoDlF;AAaD,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,CAaxF"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Replace **`...`** (bold wrapping inline code) with a single opaque placeholder per occurrence.
3
+ * The whole span is non-translatable markup; isolating it avoids models breaking ** / ` pairing (e.g. CJK).
4
+ */
5
+ const PLACEHOLDER_PREFIX = "{{BLD_";
6
+ const PLACEHOLDER_SUFFIX = "}}";
7
+ function readRun(text, start, marker) {
8
+ let i = start;
9
+ while (i < text.length && text[i] === marker) {
10
+ i++;
11
+ }
12
+ return i - start;
13
+ }
14
+ function findPlaceholderEnd(text, start) {
15
+ if (text[start] !== "{" || text[start + 1] !== "{") {
16
+ return -1;
17
+ }
18
+ let i = start + 2;
19
+ while (i < text.length - 1) {
20
+ if (text[i] === "}" && text[i + 1] === "}") {
21
+ return i + 2;
22
+ }
23
+ i++;
24
+ }
25
+ return -1;
26
+ }
27
+ function findCodeSpanEnd(text, tickStart, tickCount) {
28
+ let i = tickStart + tickCount;
29
+ while (i < text.length) {
30
+ if (text[i] !== "`") {
31
+ i++;
32
+ continue;
33
+ }
34
+ const run = readRun(text, i, "`");
35
+ if (run === tickCount) {
36
+ return i + tickCount;
37
+ }
38
+ i += run;
39
+ }
40
+ return -1;
41
+ }
42
+ /**
43
+ * After URLs/anchors: each **`inner`** becomes one placeholder; inner backticks and ** are stored for restore.
44
+ */
45
+ export function protectBoldWrappedInlineCode(text) {
46
+ const boldCodeMap = [];
47
+ const out = [];
48
+ let i = 0;
49
+ while (i < text.length) {
50
+ if (text[i] === "{" && text[i + 1] === "{") {
51
+ const end = findPlaceholderEnd(text, i);
52
+ if (end !== -1) {
53
+ out.push(text.slice(i, end));
54
+ i = end;
55
+ continue;
56
+ }
57
+ }
58
+ if (text[i] === "`") {
59
+ const tickCount = readRun(text, i, "`");
60
+ const end = findCodeSpanEnd(text, i, tickCount);
61
+ if (end !== -1) {
62
+ out.push(text.slice(i, end));
63
+ i = end;
64
+ }
65
+ else {
66
+ out.push(text.slice(i, i + tickCount));
67
+ i += tickCount;
68
+ }
69
+ continue;
70
+ }
71
+ if (text[i] === "*" && text[i + 1] === "*" && i + 2 < text.length && text[i + 2] === "`") {
72
+ const tickStart = i + 2;
73
+ const tickCount = readRun(text, tickStart, "`");
74
+ const codeEnd = findCodeSpanEnd(text, tickStart, tickCount);
75
+ if (codeEnd !== -1 &&
76
+ codeEnd + 2 <= text.length &&
77
+ text[codeEnd] === "*" &&
78
+ text[codeEnd + 1] === "*") {
79
+ const original = text.slice(i, codeEnd + 2);
80
+ const ph = `${PLACEHOLDER_PREFIX}${boldCodeMap.length}${PLACEHOLDER_SUFFIX}`;
81
+ boldCodeMap.push(original);
82
+ out.push(ph);
83
+ i = codeEnd + 2;
84
+ continue;
85
+ }
86
+ }
87
+ out.push(text[i]);
88
+ i++;
89
+ }
90
+ return { protected: out.join(""), boldCodeMap };
91
+ }
92
+ /**
93
+ * CommonMark requires a closing `**` to be a right-flanking delimiter run:
94
+ * the character after it must be Unicode whitespace or punctuation.
95
+ * In CJK/agglutinative languages, particles (Korean 이/가/을, etc.) glue
96
+ * directly to the preceding token, so `**`code`**이` won't parse as bold.
97
+ * We insert a regular space when the next character is a Unicode letter.
98
+ */
99
+ function escapeForRegex(s) {
100
+ return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
101
+ }
102
+ export function restoreBoldWrappedInlineCode(text, boldCodeMap) {
103
+ if (boldCodeMap.length === 0) {
104
+ return text;
105
+ }
106
+ let restored = text;
107
+ for (let j = 0; j < boldCodeMap.length; j++) {
108
+ const placeholder = `${PLACEHOLDER_PREFIX}${j}${PLACEHOLDER_SUFFIX}`;
109
+ const escaped = escapeForRegex(placeholder);
110
+ const re = new RegExp(`${escaped}(?=\\p{L})`, "gu");
111
+ restored = restored.replace(re, boldCodeMap[j] + " ");
112
+ restored = restored.split(placeholder).join(boldCodeMap[j]);
113
+ }
114
+ return restored;
115
+ }
116
+ //# sourceMappingURL=bold-code-placeholders.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bold-code-placeholders.js","sourceRoot":"","sources":["../../src/processors/bold-code-placeholders.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ import type { I18nDocTranslateConfig, LanguageListBlockConfig, RegexAdjustmentConfig } from "../core/types.js";
2
+ /**
3
+ * Plain `pattern` uses flag `g`. Slash form `/pattern/flags` only works when `pattern` contains no `/`
4
+ * (otherwise the last `/` is parsed as the end delimiter and the regex is wrong).
5
+ */
6
+ export declare function parseAdjustmentSearchToRegExp(search: string): RegExp;
7
+ export declare function interpolateAdjustmentTemplate(template: string, vars: Record<string, string>): string;
8
+ /** Variables for `regexAdjustments[].replace` templates (reference transrewrt parity). */
9
+ export declare function buildMarkdownAdjustmentVars(sourceAbs: string, translatedAbs: string, sourceLocaleRaw: string, translatedLocaleRaw: string): Record<string, string>;
10
+ /**
11
+ * Find the language-list block by scanning lines for `cfg.start` then `cfg.end` (no regex across lines).
12
+ */
13
+ export declare function extractLanguageListBlock(body: string, cfg: LanguageListBlockConfig): {
14
+ block: string;
15
+ startLine: number;
16
+ endLine: number;
17
+ } | null;
18
+ export declare function replaceLanguageListBlockInBody(body: string, cfg: LanguageListBlockConfig, replacement: string): {
19
+ body: string;
20
+ replaced: boolean;
21
+ };
22
+ /** Ordered locale rows for the language switcher (manifest order when `ui-languages.json` is available). */
23
+ export declare function buildLanguageSwitcherRows(config: I18nDocTranslateConfig, cwd: string): Array<{
24
+ code: string;
25
+ label: string;
26
+ }>;
27
+ export declare function applyRegexAdjustmentsToBody(body: string, rules: RegexAdjustmentConfig[], vars: Record<string, string>, verbose: boolean, docStem: string): string;
28
+ /**
29
+ * Post-process translated markdown: optional regex replacements, then optional language-list block rewrite.
30
+ * Operates on YAML body only (front matter preserved).
31
+ */
32
+ export declare function applyMarkdownPostProcessing(markdown: string, args: {
33
+ config: I18nDocTranslateConfig;
34
+ cwd: string;
35
+ relPath: string;
36
+ locale: string;
37
+ absSource: string;
38
+ absTranslated: string;
39
+ verbose: boolean;
40
+ docStem: string;
41
+ }): string;
42
+ export declare function applyMarkdownLanguageListPostProcessing(markdown: string, args: {
43
+ config: I18nDocTranslateConfig;
44
+ cwd: string;
45
+ relPath: string;
46
+ absCurrentFile: string;
47
+ verbose: boolean;
48
+ docStem: string;
49
+ missingBlockTarget?: string;
50
+ }): string;
51
+ //# sourceMappingURL=doc-postprocess.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-postprocess.d.ts","sourceRoot":"","sources":["../../src/processors/doc-postprocess.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAEV,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,EACtB,MAAM,kBAAkB,CAAC;AAO1B;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAcpE;AAED,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC3B,MAAM,CAKR;AAED,0FAA0F;AAC1F,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EACrB,eAAe,EAAE,MAAM,EACvB,mBAAmB,EAAE,MAAM,GAC1B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAmBxB;AAUD;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,uBAAuB,GAC3B;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAgB9D;AAED,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,uBAAuB,EAC5B,WAAW,EAAE,MAAM,GAClB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAWrC;AAUD,4GAA4G;AAC5G,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,sBAAsB,EAC9B,GAAG,EAAE,MAAM,GACV,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAsBxC;AAgED,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,qBAAqB,EAAE,EAC9B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC5B,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,MAAM,GACd,MAAM,CAqBR;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE;IACJ,MAAM,EAAE,sBAAsB,CAAC;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB,GACA,MAAM,CAmCR;AAED,wBAAgB,uCAAuC,CACrD,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE;IACJ,MAAM,EAAE,sBAAsB,CAAC;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,GACA,MAAM,CAQR"}