@intlayer/core 8.4.3 → 8.4.5
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/dist/cjs/_virtual/_rolldown/runtime.cjs +29 -0
- package/dist/cjs/deepTransformPlugins/getFilterMissingTranslationsContent.cjs +213 -1
- package/dist/cjs/deepTransformPlugins/getFilterMissingTranslationsContent.cjs.map +1 -1
- package/dist/cjs/deepTransformPlugins/getFilterTranslationsOnlyContent.cjs +95 -1
- package/dist/cjs/deepTransformPlugins/getFilterTranslationsOnlyContent.cjs.map +1 -1
- package/dist/cjs/deepTransformPlugins/getFilteredLocalesContent.cjs +46 -1
- package/dist/cjs/deepTransformPlugins/getFilteredLocalesContent.cjs.map +1 -1
- package/dist/cjs/deepTransformPlugins/getLocalizedContent.cjs +33 -1
- package/dist/cjs/deepTransformPlugins/getLocalizedContent.cjs.map +1 -1
- package/dist/cjs/deepTransformPlugins/getMaskContent.cjs +27 -1
- package/dist/cjs/deepTransformPlugins/getMaskContent.cjs.map +1 -1
- package/dist/cjs/deepTransformPlugins/getMissingLocalesContent.cjs +151 -1
- package/dist/cjs/deepTransformPlugins/getMissingLocalesContent.cjs.map +1 -1
- package/dist/cjs/deepTransformPlugins/getMultilingualDictionary.cjs +87 -1
- package/dist/cjs/deepTransformPlugins/getMultilingualDictionary.cjs.map +1 -1
- package/dist/cjs/deepTransformPlugins/getReplacedValuesContent.cjs +60 -1
- package/dist/cjs/deepTransformPlugins/getReplacedValuesContent.cjs.map +1 -1
- package/dist/cjs/deepTransformPlugins/getSplittedContent.cjs +123 -1
- package/dist/cjs/deepTransformPlugins/getSplittedContent.cjs.map +1 -1
- package/dist/cjs/deepTransformPlugins/index.cjs +32 -1
- package/dist/cjs/deepTransformPlugins/insertContentInDictionary.cjs +107 -1
- package/dist/cjs/deepTransformPlugins/insertContentInDictionary.cjs.map +1 -1
- package/dist/cjs/dictionaryManipulator/editDictionaryByKeyPath.cjs +65 -1
- package/dist/cjs/dictionaryManipulator/editDictionaryByKeyPath.cjs.map +1 -1
- package/dist/cjs/dictionaryManipulator/getContentNodeByKeyPath.cjs +19 -1
- package/dist/cjs/dictionaryManipulator/getContentNodeByKeyPath.cjs.map +1 -1
- package/dist/cjs/dictionaryManipulator/getDefaultNode.cjs +56 -1
- package/dist/cjs/dictionaryManipulator/getDefaultNode.cjs.map +1 -1
- package/dist/cjs/dictionaryManipulator/getEmptyNode.cjs +27 -1
- package/dist/cjs/dictionaryManipulator/getEmptyNode.cjs.map +1 -1
- package/dist/cjs/dictionaryManipulator/getNodeChildren.cjs +24 -1
- package/dist/cjs/dictionaryManipulator/getNodeChildren.cjs.map +1 -1
- package/dist/cjs/dictionaryManipulator/getNodeType.cjs +55 -1
- package/dist/cjs/dictionaryManipulator/getNodeType.cjs.map +1 -1
- package/dist/cjs/dictionaryManipulator/index.cjs +27 -1
- package/dist/cjs/dictionaryManipulator/mergeDictionaries.cjs +69 -1
- package/dist/cjs/dictionaryManipulator/mergeDictionaries.cjs.map +1 -1
- package/dist/cjs/dictionaryManipulator/normalizeDictionary.cjs +30 -1
- package/dist/cjs/dictionaryManipulator/normalizeDictionary.cjs.map +1 -1
- package/dist/cjs/dictionaryManipulator/orderDictionaries.cjs +48 -1
- package/dist/cjs/dictionaryManipulator/orderDictionaries.cjs.map +1 -1
- package/dist/cjs/dictionaryManipulator/removeContentNodeByKeyPath.cjs +32 -1
- package/dist/cjs/dictionaryManipulator/removeContentNodeByKeyPath.cjs.map +1 -1
- package/dist/cjs/dictionaryManipulator/renameContentNodeByKeyPath.cjs +40 -1
- package/dist/cjs/dictionaryManipulator/renameContentNodeByKeyPath.cjs.map +1 -1
- package/dist/cjs/dictionaryManipulator/updateNodeChildren.cjs +39 -1
- package/dist/cjs/dictionaryManipulator/updateNodeChildren.cjs.map +1 -1
- package/dist/cjs/formatters/compact.cjs +25 -1
- package/dist/cjs/formatters/compact.cjs.map +1 -1
- package/dist/cjs/formatters/currency.cjs +29 -1
- package/dist/cjs/formatters/currency.cjs.map +1 -1
- package/dist/cjs/formatters/date.cjs +60 -1
- package/dist/cjs/formatters/date.cjs.map +1 -1
- package/dist/cjs/formatters/index.cjs +23 -1
- package/dist/cjs/formatters/list.cjs +30 -1
- package/dist/cjs/formatters/list.cjs.map +1 -1
- package/dist/cjs/formatters/number.cjs +20 -1
- package/dist/cjs/formatters/number.cjs.map +1 -1
- package/dist/cjs/formatters/percentage.cjs +27 -1
- package/dist/cjs/formatters/percentage.cjs.map +1 -1
- package/dist/cjs/formatters/relativeTime.cjs +43 -1
- package/dist/cjs/formatters/relativeTime.cjs.map +1 -1
- package/dist/cjs/formatters/units.cjs +23 -1
- package/dist/cjs/formatters/units.cjs.map +1 -1
- package/dist/cjs/getStorageAttributes.cjs +134 -1
- package/dist/cjs/getStorageAttributes.cjs.map +1 -1
- package/dist/cjs/index.cjs +315 -1
- package/dist/cjs/interpreter/getCondition.cjs +27 -1
- package/dist/cjs/interpreter/getCondition.cjs.map +1 -1
- package/dist/cjs/interpreter/getContent/deepTransform.cjs +42 -1
- package/dist/cjs/interpreter/getContent/deepTransform.cjs.map +1 -1
- package/dist/cjs/interpreter/getContent/getContent.cjs +32 -1
- package/dist/cjs/interpreter/getContent/getContent.cjs.map +1 -0
- package/dist/cjs/interpreter/getContent/index.cjs +15 -1
- package/dist/cjs/interpreter/getContent/plugins.cjs +163 -1
- package/dist/cjs/interpreter/getContent/plugins.cjs.map +1 -0
- package/dist/cjs/interpreter/getDictionary.cjs +25 -1
- package/dist/cjs/interpreter/getDictionary.cjs.map +1 -0
- package/dist/cjs/interpreter/getEnumeration.cjs +72 -1
- package/dist/cjs/interpreter/getEnumeration.cjs.map +1 -1
- package/dist/cjs/interpreter/getGender.cjs +38 -1
- package/dist/cjs/interpreter/getGender.cjs.map +1 -1
- package/dist/cjs/interpreter/getHTML.cjs +124 -1
- package/dist/cjs/interpreter/getHTML.cjs.map +1 -1
- package/dist/cjs/interpreter/getInsertion.cjs +22 -1
- package/dist/cjs/interpreter/getInsertion.cjs.map +1 -1
- package/dist/cjs/interpreter/getIntlayer.cjs +41 -1
- package/dist/cjs/interpreter/getIntlayer.cjs.map +1 -0
- package/dist/cjs/interpreter/getNesting.cjs +37 -1
- package/dist/cjs/interpreter/getNesting.cjs.map +1 -0
- package/dist/cjs/interpreter/getTranslation.cjs +112 -1
- package/dist/cjs/interpreter/getTranslation.cjs.map +1 -1
- package/dist/cjs/interpreter/index.cjs +32 -1
- package/dist/cjs/interpreter/splitAndJoinInsertion.cjs +55 -1
- package/dist/cjs/interpreter/splitAndJoinInsertion.cjs.map +1 -1
- package/dist/cjs/localization/getBrowserLocale.cjs +143 -1
- package/dist/cjs/localization/getBrowserLocale.cjs.map +1 -1
- package/dist/cjs/localization/getHTMLTextDir.cjs +40 -1
- package/dist/cjs/localization/getHTMLTextDir.cjs.map +1 -1
- package/dist/cjs/localization/getLocale.cjs +27 -1
- package/dist/cjs/localization/getLocale.cjs.map +1 -1
- package/dist/cjs/localization/getLocaleFromPath.cjs +36 -1
- package/dist/cjs/localization/getLocaleFromPath.cjs.map +1 -1
- package/dist/cjs/localization/getLocaleLang.cjs +20 -1
- package/dist/cjs/localization/getLocaleLang.cjs.map +1 -1
- package/dist/cjs/localization/getLocaleName.cjs +10 -1
- package/dist/cjs/localization/getLocaleName.cjs.map +1 -1
- package/dist/cjs/localization/getLocalizedUrl.cjs +73 -1
- package/dist/cjs/localization/getLocalizedUrl.cjs.map +1 -1
- package/dist/cjs/localization/getMultilingualUrls.cjs +46 -1
- package/dist/cjs/localization/getMultilingualUrls.cjs.map +1 -1
- package/dist/cjs/localization/getPathWithoutLocale.cjs +55 -1
- package/dist/cjs/localization/getPathWithoutLocale.cjs.map +1 -1
- package/dist/cjs/localization/getPrefix.cjs +73 -1
- package/dist/cjs/localization/getPrefix.cjs.map +1 -1
- package/dist/cjs/localization/index.cjs +41 -1
- package/dist/cjs/localization/localeDetector.cjs +133 -1
- package/dist/cjs/localization/localeDetector.cjs.map +1 -1
- package/dist/cjs/localization/localeMapper.cjs +124 -1
- package/dist/cjs/localization/localeMapper.cjs.map +1 -1
- package/dist/cjs/localization/localeResolver.cjs +28 -1
- package/dist/cjs/localization/localeResolver.cjs.map +1 -1
- package/dist/cjs/localization/rewriteUtils.cjs +110 -1
- package/dist/cjs/localization/rewriteUtils.cjs.map +1 -1
- package/dist/cjs/localization/validatePrefix.cjs +45 -1
- package/dist/cjs/localization/validatePrefix.cjs.map +1 -1
- package/dist/cjs/markdown/compiler.cjs +810 -10
- package/dist/cjs/markdown/compiler.cjs.map +1 -1
- package/dist/cjs/markdown/constants.cjs +328 -1
- package/dist/cjs/markdown/constants.cjs.map +1 -1
- package/dist/cjs/markdown/index.cjs +126 -1
- package/dist/cjs/markdown/parser.cjs +66 -1
- package/dist/cjs/markdown/parser.cjs.map +1 -1
- package/dist/cjs/markdown/renderer.cjs +61 -1
- package/dist/cjs/markdown/renderer.cjs.map +1 -1
- package/dist/cjs/markdown/utils.cjs +391 -6
- package/dist/cjs/markdown/utils.cjs.map +1 -1
- package/dist/cjs/messageFormat/ICU.cjs +334 -1
- package/dist/cjs/messageFormat/ICU.cjs.map +1 -1
- package/dist/cjs/messageFormat/i18next.cjs +345 -1
- package/dist/cjs/messageFormat/i18next.cjs.map +1 -1
- package/dist/cjs/messageFormat/index.cjs +11 -1
- package/dist/cjs/messageFormat/verify-icu-format.cjs +64 -2
- package/dist/cjs/messageFormat/verify-icu-format.cjs.map +1 -1
- package/dist/cjs/messageFormat/vue-i18n.cjs +181 -1
- package/dist/cjs/messageFormat/vue-i18n.cjs.map +1 -1
- package/dist/cjs/transpiler/condition/condition.cjs +26 -1
- package/dist/cjs/transpiler/condition/condition.cjs.map +1 -1
- package/dist/cjs/transpiler/condition/index.cjs +4 -1
- package/dist/cjs/transpiler/enumeration/enumeration.cjs +28 -1
- package/dist/cjs/transpiler/enumeration/enumeration.cjs.map +1 -1
- package/dist/cjs/transpiler/enumeration/index.cjs +4 -1
- package/dist/cjs/transpiler/file/file.cjs +51 -1
- package/dist/cjs/transpiler/file/file.cjs.map +1 -1
- package/dist/cjs/transpiler/file/fileBrowser.cjs +24 -1
- package/dist/cjs/transpiler/file/fileBrowser.cjs.map +1 -1
- package/dist/cjs/transpiler/file/index.cjs +5 -1
- package/dist/cjs/transpiler/gender/gender.cjs +26 -1
- package/dist/cjs/transpiler/gender/gender.cjs.map +1 -1
- package/dist/cjs/transpiler/gender/index.cjs +4 -1
- package/dist/cjs/transpiler/html/getHTMLCustomComponents.cjs +45 -1
- package/dist/cjs/transpiler/html/getHTMLCustomComponents.cjs.map +1 -0
- package/dist/cjs/transpiler/html/html.cjs +44 -1
- package/dist/cjs/transpiler/html/html.cjs.map +1 -0
- package/dist/cjs/transpiler/html/htmlTags.cjs +116 -1
- package/dist/cjs/transpiler/html/htmlTags.cjs.map +1 -1
- package/dist/cjs/transpiler/html/index.cjs +9 -1
- package/dist/cjs/transpiler/html/validateHTML.cjs +65 -1
- package/dist/cjs/transpiler/html/validateHTML.cjs.map +1 -1
- package/dist/cjs/transpiler/index.cjs +29 -1
- package/dist/cjs/transpiler/insertion/getInsertionValues.cjs +11 -1
- package/dist/cjs/transpiler/insertion/getInsertionValues.cjs.map +1 -1
- package/dist/cjs/transpiler/insertion/index.cjs +6 -1
- package/dist/cjs/transpiler/insertion/insertion.cjs +36 -1
- package/dist/cjs/transpiler/insertion/insertion.cjs.map +1 -1
- package/dist/cjs/transpiler/markdown/getMarkdownMetadata.cjs +23 -2
- package/dist/cjs/transpiler/markdown/getMarkdownMetadata.cjs.map +1 -1
- package/dist/cjs/transpiler/markdown/index.cjs +8 -1
- package/dist/cjs/transpiler/markdown/markdown.cjs +62 -1
- package/dist/cjs/transpiler/markdown/markdown.cjs.map +1 -1
- package/dist/cjs/transpiler/markdown/validateMarkdown.cjs +74 -4
- package/dist/cjs/transpiler/markdown/validateMarkdown.cjs.map +1 -1
- package/dist/cjs/transpiler/nesting/index.cjs +4 -1
- package/dist/cjs/transpiler/nesting/nesting.cjs +27 -1
- package/dist/cjs/transpiler/nesting/nesting.cjs.map +1 -1
- package/dist/cjs/transpiler/translation/index.cjs +4 -1
- package/dist/cjs/transpiler/translation/translation.cjs +29 -1
- package/dist/cjs/transpiler/translation/translation.cjs.map +1 -1
- package/dist/cjs/utils/checkIsURLAbsolute.cjs +7 -1
- package/dist/cjs/utils/checkIsURLAbsolute.cjs.map +1 -1
- package/dist/cjs/utils/getCookie.cjs +32 -1
- package/dist/cjs/utils/getCookie.cjs.map +1 -1
- package/dist/cjs/utils/index.cjs +21 -1
- package/dist/cjs/utils/intl.cjs +91 -1
- package/dist/cjs/utils/intl.cjs.map +1 -1
- package/dist/cjs/utils/isSameKeyPath.cjs +7 -1
- package/dist/cjs/utils/isSameKeyPath.cjs.map +1 -1
- package/dist/cjs/utils/isValidReactElement.cjs +14 -1
- package/dist/cjs/utils/isValidReactElement.cjs.map +1 -1
- package/dist/cjs/utils/localeStorage.cjs +140 -1
- package/dist/cjs/utils/localeStorage.cjs.map +1 -1
- package/dist/cjs/utils/parseYaml.cjs +322 -16
- package/dist/cjs/utils/parseYaml.cjs.map +1 -1
- package/dist/esm/deepTransformPlugins/getFilterMissingTranslationsContent.mjs +207 -1
- package/dist/esm/deepTransformPlugins/getFilterMissingTranslationsContent.mjs.map +1 -1
- package/dist/esm/deepTransformPlugins/getFilterTranslationsOnlyContent.mjs +89 -1
- package/dist/esm/deepTransformPlugins/getFilterTranslationsOnlyContent.mjs.map +1 -1
- package/dist/esm/deepTransformPlugins/getFilteredLocalesContent.mjs +42 -1
- package/dist/esm/deepTransformPlugins/getFilteredLocalesContent.mjs.map +1 -1
- package/dist/esm/deepTransformPlugins/getLocalizedContent.mjs +31 -1
- package/dist/esm/deepTransformPlugins/getLocalizedContent.mjs.map +1 -1
- package/dist/esm/deepTransformPlugins/getMaskContent.mjs +25 -1
- package/dist/esm/deepTransformPlugins/getMaskContent.mjs.map +1 -1
- package/dist/esm/deepTransformPlugins/getMissingLocalesContent.mjs +145 -1
- package/dist/esm/deepTransformPlugins/getMissingLocalesContent.mjs.map +1 -1
- package/dist/esm/deepTransformPlugins/getMultilingualDictionary.mjs +86 -1
- package/dist/esm/deepTransformPlugins/getMultilingualDictionary.mjs.map +1 -1
- package/dist/esm/deepTransformPlugins/getReplacedValuesContent.mjs +59 -1
- package/dist/esm/deepTransformPlugins/getReplacedValuesContent.mjs.map +1 -1
- package/dist/esm/deepTransformPlugins/getSplittedContent.mjs +119 -1
- package/dist/esm/deepTransformPlugins/getSplittedContent.mjs.map +1 -1
- package/dist/esm/deepTransformPlugins/index.mjs +12 -1
- package/dist/esm/deepTransformPlugins/insertContentInDictionary.mjs +104 -1
- package/dist/esm/deepTransformPlugins/insertContentInDictionary.mjs.map +1 -1
- package/dist/esm/dictionaryManipulator/editDictionaryByKeyPath.mjs +62 -1
- package/dist/esm/dictionaryManipulator/editDictionaryByKeyPath.mjs.map +1 -1
- package/dist/esm/dictionaryManipulator/getContentNodeByKeyPath.mjs +16 -1
- package/dist/esm/dictionaryManipulator/getContentNodeByKeyPath.mjs.map +1 -1
- package/dist/esm/dictionaryManipulator/getDefaultNode.mjs +53 -1
- package/dist/esm/dictionaryManipulator/getDefaultNode.mjs.map +1 -1
- package/dist/esm/dictionaryManipulator/getEmptyNode.mjs +24 -1
- package/dist/esm/dictionaryManipulator/getEmptyNode.mjs.map +1 -1
- package/dist/esm/dictionaryManipulator/getNodeChildren.mjs +21 -1
- package/dist/esm/dictionaryManipulator/getNodeChildren.mjs.map +1 -1
- package/dist/esm/dictionaryManipulator/getNodeType.mjs +52 -1
- package/dist/esm/dictionaryManipulator/getNodeType.mjs.map +1 -1
- package/dist/esm/dictionaryManipulator/index.mjs +14 -1
- package/dist/esm/dictionaryManipulator/mergeDictionaries.mjs +66 -1
- package/dist/esm/dictionaryManipulator/mergeDictionaries.mjs.map +1 -1
- package/dist/esm/dictionaryManipulator/normalizeDictionary.mjs +28 -1
- package/dist/esm/dictionaryManipulator/normalizeDictionary.mjs.map +1 -1
- package/dist/esm/dictionaryManipulator/orderDictionaries.mjs +45 -1
- package/dist/esm/dictionaryManipulator/orderDictionaries.mjs.map +1 -1
- package/dist/esm/dictionaryManipulator/removeContentNodeByKeyPath.mjs +29 -1
- package/dist/esm/dictionaryManipulator/removeContentNodeByKeyPath.mjs.map +1 -1
- package/dist/esm/dictionaryManipulator/renameContentNodeByKeyPath.mjs +37 -1
- package/dist/esm/dictionaryManipulator/renameContentNodeByKeyPath.mjs.map +1 -1
- package/dist/esm/dictionaryManipulator/updateNodeChildren.mjs +36 -1
- package/dist/esm/dictionaryManipulator/updateNodeChildren.mjs.map +1 -1
- package/dist/esm/formatters/compact.mjs +22 -1
- package/dist/esm/formatters/compact.mjs.map +1 -1
- package/dist/esm/formatters/currency.mjs +26 -1
- package/dist/esm/formatters/currency.mjs.map +1 -1
- package/dist/esm/formatters/date.mjs +57 -1
- package/dist/esm/formatters/date.mjs.map +1 -1
- package/dist/esm/formatters/index.mjs +11 -1
- package/dist/esm/formatters/list.mjs +27 -1
- package/dist/esm/formatters/list.mjs.map +1 -1
- package/dist/esm/formatters/number.mjs +17 -1
- package/dist/esm/formatters/number.mjs.map +1 -1
- package/dist/esm/formatters/percentage.mjs +24 -1
- package/dist/esm/formatters/percentage.mjs.map +1 -1
- package/dist/esm/formatters/relativeTime.mjs +40 -1
- package/dist/esm/formatters/relativeTime.mjs.map +1 -1
- package/dist/esm/formatters/units.mjs +20 -1
- package/dist/esm/formatters/units.mjs.map +1 -1
- package/dist/esm/getStorageAttributes.mjs +132 -1
- package/dist/esm/getStorageAttributes.mjs.map +1 -1
- package/dist/esm/index.mjs +87 -1
- package/dist/esm/interpreter/getCondition.mjs +25 -1
- package/dist/esm/interpreter/getCondition.mjs.map +1 -1
- package/dist/esm/interpreter/getContent/deepTransform.mjs +39 -1
- package/dist/esm/interpreter/getContent/deepTransform.mjs.map +1 -1
- package/dist/esm/interpreter/getContent/getContent.mjs +28 -1
- package/dist/esm/interpreter/getContent/getContent.mjs.map +1 -0
- package/dist/esm/interpreter/getContent/index.mjs +5 -1
- package/dist/esm/interpreter/getContent/plugins.mjs +154 -1
- package/dist/esm/interpreter/getContent/plugins.mjs.map +1 -0
- package/dist/esm/interpreter/getDictionary.mjs +24 -1
- package/dist/esm/interpreter/getDictionary.mjs.map +1 -0
- package/dist/esm/interpreter/getEnumeration.mjs +69 -1
- package/dist/esm/interpreter/getEnumeration.mjs.map +1 -1
- package/dist/esm/interpreter/getGender.mjs +36 -1
- package/dist/esm/interpreter/getGender.mjs.map +1 -1
- package/dist/esm/interpreter/getHTML.mjs +122 -1
- package/dist/esm/interpreter/getHTML.mjs.map +1 -1
- package/dist/esm/interpreter/getInsertion.mjs +20 -1
- package/dist/esm/interpreter/getInsertion.mjs.map +1 -1
- package/dist/esm/interpreter/getIntlayer.mjs +37 -1
- package/dist/esm/interpreter/getIntlayer.mjs.map +1 -0
- package/dist/esm/interpreter/getNesting.mjs +36 -1
- package/dist/esm/interpreter/getNesting.mjs.map +1 -0
- package/dist/esm/interpreter/getTranslation.mjs +110 -1
- package/dist/esm/interpreter/getTranslation.mjs.map +1 -1
- package/dist/esm/interpreter/index.mjs +13 -1
- package/dist/esm/interpreter/splitAndJoinInsertion.mjs +53 -1
- package/dist/esm/interpreter/splitAndJoinInsertion.mjs.map +1 -1
- package/dist/esm/localization/getBrowserLocale.mjs +138 -1
- package/dist/esm/localization/getBrowserLocale.mjs.map +1 -1
- package/dist/esm/localization/getHTMLTextDir.mjs +38 -1
- package/dist/esm/localization/getHTMLTextDir.mjs.map +1 -1
- package/dist/esm/localization/getLocale.mjs +24 -1
- package/dist/esm/localization/getLocale.mjs.map +1 -1
- package/dist/esm/localization/getLocaleFromPath.mjs +35 -1
- package/dist/esm/localization/getLocaleFromPath.mjs.map +1 -1
- package/dist/esm/localization/getLocaleLang.mjs +18 -1
- package/dist/esm/localization/getLocaleLang.mjs.map +1 -1
- package/dist/esm/localization/getLocaleName.mjs +9 -1
- package/dist/esm/localization/getLocaleName.mjs.map +1 -1
- package/dist/esm/localization/getLocalizedUrl.mjs +70 -1
- package/dist/esm/localization/getLocalizedUrl.mjs.map +1 -1
- package/dist/esm/localization/getMultilingualUrls.mjs +45 -1
- package/dist/esm/localization/getMultilingualUrls.mjs.map +1 -1
- package/dist/esm/localization/getPathWithoutLocale.mjs +52 -1
- package/dist/esm/localization/getPathWithoutLocale.mjs.map +1 -1
- package/dist/esm/localization/getPrefix.mjs +69 -1
- package/dist/esm/localization/getPrefix.mjs.map +1 -1
- package/dist/esm/localization/index.mjs +18 -1
- package/dist/esm/localization/localeDetector.mjs +131 -1
- package/dist/esm/localization/localeDetector.mjs.map +1 -1
- package/dist/esm/localization/localeMapper.mjs +119 -1
- package/dist/esm/localization/localeMapper.mjs.map +1 -1
- package/dist/esm/localization/localeResolver.mjs +25 -1
- package/dist/esm/localization/localeResolver.mjs.map +1 -1
- package/dist/esm/localization/rewriteUtils.mjs +104 -1
- package/dist/esm/localization/rewriteUtils.mjs.map +1 -1
- package/dist/esm/localization/validatePrefix.mjs +44 -1
- package/dist/esm/localization/validatePrefix.mjs.map +1 -1
- package/dist/esm/markdown/compiler.mjs +786 -10
- package/dist/esm/markdown/compiler.mjs.map +1 -1
- package/dist/esm/markdown/constants.mjs +247 -1
- package/dist/esm/markdown/constants.mjs.map +1 -1
- package/dist/esm/markdown/index.mjs +10 -1
- package/dist/esm/markdown/parser.mjs +65 -1
- package/dist/esm/markdown/parser.mjs.map +1 -1
- package/dist/esm/markdown/renderer.mjs +59 -1
- package/dist/esm/markdown/renderer.mjs.map +1 -1
- package/dist/esm/markdown/utils.mjs +361 -6
- package/dist/esm/markdown/utils.mjs.map +1 -1
- package/dist/esm/messageFormat/ICU.mjs +330 -1
- package/dist/esm/messageFormat/ICU.mjs.map +1 -1
- package/dist/esm/messageFormat/i18next.mjs +341 -1
- package/dist/esm/messageFormat/i18next.mjs.map +1 -1
- package/dist/esm/messageFormat/index.mjs +5 -1
- package/dist/esm/messageFormat/verify-icu-format.mjs +64 -2
- package/dist/esm/messageFormat/verify-icu-format.mjs.map +1 -1
- package/dist/esm/messageFormat/vue-i18n.mjs +177 -1
- package/dist/esm/messageFormat/vue-i18n.mjs.map +1 -1
- package/dist/esm/transpiler/condition/condition.mjs +24 -1
- package/dist/esm/transpiler/condition/condition.mjs.map +1 -1
- package/dist/esm/transpiler/condition/index.mjs +3 -1
- package/dist/esm/transpiler/enumeration/enumeration.mjs +26 -1
- package/dist/esm/transpiler/enumeration/enumeration.mjs.map +1 -1
- package/dist/esm/transpiler/enumeration/index.mjs +3 -1
- package/dist/esm/transpiler/file/file.mjs +48 -1
- package/dist/esm/transpiler/file/file.mjs.map +1 -1
- package/dist/esm/transpiler/file/fileBrowser.mjs +22 -1
- package/dist/esm/transpiler/file/fileBrowser.mjs.map +1 -1
- package/dist/esm/transpiler/file/index.mjs +3 -1
- package/dist/esm/transpiler/gender/gender.mjs +24 -1
- package/dist/esm/transpiler/gender/gender.mjs.map +1 -1
- package/dist/esm/transpiler/gender/index.mjs +3 -1
- package/dist/esm/transpiler/html/getHTMLCustomComponents.mjs +44 -1
- package/dist/esm/transpiler/html/getHTMLCustomComponents.mjs.map +1 -0
- package/dist/esm/transpiler/html/html.mjs +42 -1
- package/dist/esm/transpiler/html/html.mjs.map +1 -0
- package/dist/esm/transpiler/html/htmlTags.mjs +114 -1
- package/dist/esm/transpiler/html/htmlTags.mjs.map +1 -1
- package/dist/esm/transpiler/html/index.mjs +5 -1
- package/dist/esm/transpiler/html/validateHTML.mjs +62 -1
- package/dist/esm/transpiler/html/validateHTML.mjs.map +1 -1
- package/dist/esm/transpiler/index.mjs +15 -1
- package/dist/esm/transpiler/insertion/getInsertionValues.mjs +9 -1
- package/dist/esm/transpiler/insertion/getInsertionValues.mjs.map +1 -1
- package/dist/esm/transpiler/insertion/index.mjs +4 -1
- package/dist/esm/transpiler/insertion/insertion.mjs +34 -1
- package/dist/esm/transpiler/insertion/insertion.mjs.map +1 -1
- package/dist/esm/transpiler/markdown/getMarkdownMetadata.mjs +22 -2
- package/dist/esm/transpiler/markdown/getMarkdownMetadata.mjs.map +1 -1
- package/dist/esm/transpiler/markdown/index.mjs +5 -1
- package/dist/esm/transpiler/markdown/markdown.mjs +60 -1
- package/dist/esm/transpiler/markdown/markdown.mjs.map +1 -1
- package/dist/esm/transpiler/markdown/validateMarkdown.mjs +73 -4
- package/dist/esm/transpiler/markdown/validateMarkdown.mjs.map +1 -1
- package/dist/esm/transpiler/nesting/index.mjs +3 -1
- package/dist/esm/transpiler/nesting/nesting.mjs +25 -1
- package/dist/esm/transpiler/nesting/nesting.mjs.map +1 -1
- package/dist/esm/transpiler/translation/index.mjs +3 -1
- package/dist/esm/transpiler/translation/translation.mjs +27 -1
- package/dist/esm/transpiler/translation/translation.mjs.map +1 -1
- package/dist/esm/utils/checkIsURLAbsolute.mjs +5 -1
- package/dist/esm/utils/checkIsURLAbsolute.mjs.map +1 -1
- package/dist/esm/utils/getCookie.mjs +30 -1
- package/dist/esm/utils/getCookie.mjs.map +1 -1
- package/dist/esm/utils/index.mjs +9 -1
- package/dist/esm/utils/intl.mjs +86 -1
- package/dist/esm/utils/intl.mjs.map +1 -1
- package/dist/esm/utils/isSameKeyPath.mjs +5 -1
- package/dist/esm/utils/isSameKeyPath.mjs.map +1 -1
- package/dist/esm/utils/isValidReactElement.mjs +12 -1
- package/dist/esm/utils/isValidReactElement.mjs.map +1 -1
- package/dist/esm/utils/localeStorage.mjs +135 -1
- package/dist/esm/utils/localeStorage.mjs.map +1 -1
- package/dist/esm/utils/parseYaml.mjs +320 -16
- package/dist/esm/utils/parseYaml.mjs.map +1 -1
- package/dist/types/deepTransformPlugins/getFilterMissingTranslationsContent.d.ts +50 -2
- package/dist/types/deepTransformPlugins/getFilterMissingTranslationsContent.d.ts.map +1 -0
- package/dist/types/deepTransformPlugins/getFilterTranslationsOnlyContent.d.ts +42 -2
- package/dist/types/deepTransformPlugins/getFilterTranslationsOnlyContent.d.ts.map +1 -0
- package/dist/types/deepTransformPlugins/getFilteredLocalesContent.d.ts +34 -2
- package/dist/types/deepTransformPlugins/getFilteredLocalesContent.d.ts.map +1 -0
- package/dist/types/deepTransformPlugins/getLocalizedContent.d.ts +18 -2
- package/dist/types/deepTransformPlugins/getLocalizedContent.d.ts.map +1 -0
- package/dist/types/deepTransformPlugins/getMaskContent.d.ts +10 -2
- package/dist/types/deepTransformPlugins/getMaskContent.d.ts.map +1 -0
- package/dist/types/deepTransformPlugins/getMissingLocalesContent.d.ts +19 -2
- package/dist/types/deepTransformPlugins/getMissingLocalesContent.d.ts.map +1 -0
- package/dist/types/deepTransformPlugins/getMultilingualDictionary.d.ts +32 -2
- package/dist/types/deepTransformPlugins/getMultilingualDictionary.d.ts.map +1 -0
- package/dist/types/deepTransformPlugins/getReplacedValuesContent.d.ts +8 -2
- package/dist/types/deepTransformPlugins/getReplacedValuesContent.d.ts.map +1 -0
- package/dist/types/deepTransformPlugins/getSplittedContent.d.ts +43 -2
- package/dist/types/deepTransformPlugins/getSplittedContent.d.ts.map +1 -0
- package/dist/types/deepTransformPlugins/index.d.ts +10 -10
- package/dist/types/deepTransformPlugins/insertContentInDictionary.d.ts +25 -2
- package/dist/types/deepTransformPlugins/insertContentInDictionary.d.ts.map +1 -0
- package/dist/types/dictionaryManipulator/editDictionaryByKeyPath.d.ts +8 -2
- package/dist/types/dictionaryManipulator/editDictionaryByKeyPath.d.ts.map +1 -0
- package/dist/types/dictionaryManipulator/getContentNodeByKeyPath.d.ts +9 -2
- package/dist/types/dictionaryManipulator/getContentNodeByKeyPath.d.ts.map +1 -0
- package/dist/types/dictionaryManipulator/getDefaultNode.d.ts +9 -2
- package/dist/types/dictionaryManipulator/getDefaultNode.d.ts.map +1 -0
- package/dist/types/dictionaryManipulator/getEmptyNode.d.ts +7 -2
- package/dist/types/dictionaryManipulator/getEmptyNode.d.ts.map +1 -0
- package/dist/types/dictionaryManipulator/getNodeChildren.d.ts +7 -2
- package/dist/types/dictionaryManipulator/getNodeChildren.d.ts.map +1 -0
- package/dist/types/dictionaryManipulator/getNodeType.d.ts +8 -2
- package/dist/types/dictionaryManipulator/getNodeType.d.ts.map +1 -0
- package/dist/types/dictionaryManipulator/index.d.ts +12 -12
- package/dist/types/dictionaryManipulator/mergeDictionaries.d.ts +7 -2
- package/dist/types/dictionaryManipulator/mergeDictionaries.d.ts.map +1 -0
- package/dist/types/dictionaryManipulator/normalizeDictionary.d.ts +9 -2
- package/dist/types/dictionaryManipulator/normalizeDictionary.d.ts.map +1 -0
- package/dist/types/dictionaryManipulator/orderDictionaries.d.ts +15 -2
- package/dist/types/dictionaryManipulator/orderDictionaries.d.ts.map +1 -0
- package/dist/types/dictionaryManipulator/removeContentNodeByKeyPath.d.ts +8 -2
- package/dist/types/dictionaryManipulator/removeContentNodeByKeyPath.d.ts.map +1 -0
- package/dist/types/dictionaryManipulator/renameContentNodeByKeyPath.d.ts +8 -2
- package/dist/types/dictionaryManipulator/renameContentNodeByKeyPath.d.ts.map +1 -0
- package/dist/types/dictionaryManipulator/updateNodeChildren.d.ts +7 -2
- package/dist/types/dictionaryManipulator/updateNodeChildren.d.ts.map +1 -0
- package/dist/types/formatters/compact.d.ts +20 -2
- package/dist/types/formatters/compact.d.ts.map +1 -0
- package/dist/types/formatters/currency.d.ts +20 -2
- package/dist/types/formatters/currency.d.ts.map +1 -0
- package/dist/types/formatters/date.d.ts +20 -2
- package/dist/types/formatters/date.d.ts.map +1 -0
- package/dist/types/formatters/index.d.ts +9 -9
- package/dist/types/formatters/list.d.ts +30 -2
- package/dist/types/formatters/list.d.ts.map +1 -0
- package/dist/types/formatters/number.d.ts +18 -2
- package/dist/types/formatters/number.d.ts.map +1 -0
- package/dist/types/formatters/percentage.d.ts +18 -2
- package/dist/types/formatters/percentage.d.ts.map +1 -0
- package/dist/types/formatters/relativeTime.d.ts +21 -2
- package/dist/types/formatters/relativeTime.d.ts.map +1 -0
- package/dist/types/formatters/units.d.ts +16 -2
- package/dist/types/formatters/units.d.ts.map +1 -0
- package/dist/types/getStorageAttributes.d.ts +29 -2
- package/dist/types/getStorageAttributes.d.ts.map +1 -0
- package/dist/types/index.d.ts +88 -80
- package/dist/types/interpreter/getCondition.d.ts +22 -2
- package/dist/types/interpreter/getCondition.d.ts.map +1 -0
- package/dist/types/interpreter/getContent/deepTransform.d.ts +12 -2
- package/dist/types/interpreter/getContent/deepTransform.d.ts.map +1 -0
- package/dist/types/interpreter/getContent/getContent.d.ts +16 -2
- package/dist/types/interpreter/getContent/getContent.d.ts.map +1 -0
- package/dist/types/interpreter/getContent/index.d.ts +3 -1
- package/dist/types/interpreter/getContent/plugins.d.ts +152 -2
- package/dist/types/interpreter/getContent/plugins.d.ts.map +1 -0
- package/dist/types/interpreter/getDictionary.d.ts +17 -2
- package/dist/types/interpreter/getDictionary.d.ts.map +1 -0
- package/dist/types/interpreter/getEnumeration.d.ts +58 -2
- package/dist/types/interpreter/getEnumeration.d.ts.map +1 -0
- package/dist/types/interpreter/getGender.d.ts +1 -1
- package/dist/types/interpreter/getGender.d.ts.map +1 -1
- package/dist/types/interpreter/getHTML.d.ts +32 -2
- package/dist/types/interpreter/getHTML.d.ts.map +1 -0
- package/dist/types/interpreter/getInsertion.d.ts +1 -1
- package/dist/types/interpreter/getInsertion.d.ts.map +1 -1
- package/dist/types/interpreter/getIntlayer.d.ts +8 -2
- package/dist/types/interpreter/getIntlayer.d.ts.map +1 -0
- package/dist/types/interpreter/getNesting.d.ts +27 -2
- package/dist/types/interpreter/getNesting.d.ts.map +1 -0
- package/dist/types/interpreter/getTranslation.d.ts +30 -2
- package/dist/types/interpreter/getTranslation.d.ts.map +1 -0
- package/dist/types/interpreter/index.d.ts +11 -4
- package/dist/types/interpreter/splitAndJoinInsertion.d.ts +25 -2
- package/dist/types/interpreter/splitAndJoinInsertion.d.ts.map +1 -0
- package/dist/types/localization/getBrowserLocale.d.ts +35 -2
- package/dist/types/localization/getBrowserLocale.d.ts.map +1 -0
- package/dist/types/localization/getHTMLTextDir.d.ts +21 -2
- package/dist/types/localization/getHTMLTextDir.d.ts.map +1 -0
- package/dist/types/localization/getLocale.d.ts +11 -2
- package/dist/types/localization/getLocale.d.ts.map +1 -0
- package/dist/types/localization/getLocaleFromPath.d.ts +20 -2
- package/dist/types/localization/getLocaleFromPath.d.ts.map +1 -0
- package/dist/types/localization/getLocaleLang.d.ts +20 -2
- package/dist/types/localization/getLocaleLang.d.ts.map +1 -0
- package/dist/types/localization/getLocaleName.d.ts +7 -2
- package/dist/types/localization/getLocaleName.d.ts.map +1 -0
- package/dist/types/localization/getLocalizedUrl.d.ts +44 -2
- package/dist/types/localization/getLocalizedUrl.d.ts.map +1 -0
- package/dist/types/localization/getMultilingualUrls.d.ts +42 -2
- package/dist/types/localization/getMultilingualUrls.d.ts.map +1 -0
- package/dist/types/localization/getPathWithoutLocale.d.ts +31 -2
- package/dist/types/localization/getPathWithoutLocale.d.ts.map +1 -0
- package/dist/types/localization/getPrefix.d.ts +83 -2
- package/dist/types/localization/getPrefix.d.ts.map +1 -0
- package/dist/types/localization/index.d.ts +16 -16
- package/dist/types/localization/localeDetector.d.ts +18 -2
- package/dist/types/localization/localeDetector.d.ts.map +1 -0
- package/dist/types/localization/localeMapper.d.ts +92 -2
- package/dist/types/localization/localeMapper.d.ts.map +1 -0
- package/dist/types/localization/localeResolver.d.ts +12 -2
- package/dist/types/localization/localeResolver.d.ts.map +1 -0
- package/dist/types/localization/rewriteUtils.d.ts +34 -2
- package/dist/types/localization/rewriteUtils.d.ts.map +1 -0
- package/dist/types/localization/validatePrefix.d.ts +34 -2
- package/dist/types/localization/validatePrefix.d.ts.map +1 -0
- package/dist/types/markdown/compiler.d.ts +9 -2
- package/dist/types/markdown/compiler.d.ts.map +1 -0
- package/dist/types/markdown/constants.d.ts +177 -2
- package/dist/types/markdown/constants.d.ts.map +1 -0
- package/dist/types/markdown/index.d.ts +10 -10
- package/dist/types/markdown/parser.d.ts +16 -2
- package/dist/types/markdown/parser.d.ts.map +1 -0
- package/dist/types/markdown/renderer.d.ts +22 -2
- package/dist/types/markdown/renderer.d.ts.map +1 -0
- package/dist/types/markdown/types.d.ts +333 -2
- package/dist/types/markdown/types.d.ts.map +1 -0
- package/dist/types/markdown/utils.d.ts +140 -2
- package/dist/types/markdown/utils.d.ts.map +1 -0
- package/dist/types/messageFormat/ICU.d.ts +11 -2
- package/dist/types/messageFormat/ICU.d.ts.map +1 -0
- package/dist/types/messageFormat/i18next.d.ts +9 -2
- package/dist/types/messageFormat/i18next.d.ts.map +1 -0
- package/dist/types/messageFormat/index.d.ts +3 -3
- package/dist/types/messageFormat/vue-i18n.d.ts +9 -2
- package/dist/types/messageFormat/vue-i18n.d.ts.map +1 -0
- package/dist/types/transpiler/condition/condition.d.ts +28 -2
- package/dist/types/transpiler/condition/condition.d.ts.map +1 -0
- package/dist/types/transpiler/condition/index.d.ts +1 -1
- package/dist/types/transpiler/enumeration/enumeration.d.ts +40 -2
- package/dist/types/transpiler/enumeration/enumeration.d.ts.map +1 -0
- package/dist/types/transpiler/enumeration/index.d.ts +1 -1
- package/dist/types/transpiler/file/file.d.ts +28 -2
- package/dist/types/transpiler/file/file.d.ts.map +1 -0
- package/dist/types/transpiler/file/fileBrowser.d.ts +1 -1
- package/dist/types/transpiler/file/index.d.ts +1 -1
- package/dist/types/transpiler/gender/gender.d.ts +29 -2
- package/dist/types/transpiler/gender/gender.d.ts.map +1 -0
- package/dist/types/transpiler/gender/index.d.ts +1 -1
- package/dist/types/transpiler/html/html.d.ts +25 -2
- package/dist/types/transpiler/html/html.d.ts.map +1 -0
- package/dist/types/transpiler/html/htmlTags.d.ts +115 -2
- package/dist/types/transpiler/html/htmlTags.d.ts.map +1 -0
- package/dist/types/transpiler/html/index.d.ts +3 -3
- package/dist/types/transpiler/html/validateHTML.d.ts +21 -2
- package/dist/types/transpiler/html/validateHTML.d.ts.map +1 -0
- package/dist/types/transpiler/index.d.ts +15 -15
- package/dist/types/transpiler/insertion/getInsertionValues.d.ts +5 -2
- package/dist/types/transpiler/insertion/getInsertionValues.d.ts.map +1 -0
- package/dist/types/transpiler/insertion/index.d.ts +2 -2
- package/dist/types/transpiler/insertion/insertion.d.ts +23 -2
- package/dist/types/transpiler/insertion/insertion.d.ts.map +1 -0
- package/dist/types/transpiler/markdown/getMarkdownMetadata.d.ts +5 -2
- package/dist/types/transpiler/markdown/getMarkdownMetadata.d.ts.map +1 -0
- package/dist/types/transpiler/markdown/index.d.ts +4 -4
- package/dist/types/transpiler/markdown/markdown.d.ts +26 -2
- package/dist/types/transpiler/markdown/markdown.d.ts.map +1 -0
- package/dist/types/transpiler/markdown/validateMarkdown.d.ts +18 -3
- package/dist/types/transpiler/markdown/validateMarkdown.d.ts.map +1 -0
- package/dist/types/transpiler/nesting/index.d.ts +1 -1
- package/dist/types/transpiler/nesting/nesting.d.ts +49 -2
- package/dist/types/transpiler/nesting/nesting.d.ts.map +1 -0
- package/dist/types/transpiler/translation/index.d.ts +1 -1
- package/dist/types/transpiler/translation/translation.d.ts +33 -2
- package/dist/types/transpiler/translation/translation.d.ts.map +1 -0
- package/dist/types/utils/checkIsURLAbsolute.d.ts +5 -2
- package/dist/types/utils/checkIsURLAbsolute.d.ts.map +1 -0
- package/dist/types/utils/getCookie.d.ts +11 -2
- package/dist/types/utils/getCookie.d.ts.map +1 -0
- package/dist/types/utils/index.d.ts +7 -7
- package/dist/types/utils/intl.d.ts +33 -2
- package/dist/types/utils/intl.d.ts.map +1 -0
- package/dist/types/utils/isSameKeyPath.d.ts +7 -2
- package/dist/types/utils/isSameKeyPath.d.ts.map +1 -0
- package/dist/types/utils/isValidReactElement.d.ts +12 -2
- package/dist/types/utils/isValidReactElement.d.ts.map +1 -0
- package/dist/types/utils/localeStorage.d.ts +108 -2
- package/dist/types/utils/localeStorage.d.ts.map +1 -0
- package/dist/types/utils/parseYaml.d.ts +5 -2
- package/dist/types/utils/parseYaml.d.ts.map +1 -0
- package/package.json +6 -6
- package/dist/cjs/chunk-Bmb41Sf3.cjs +0 -1
- package/dist/cjs/getContent-DrqM8pqO.cjs +0 -2
- package/dist/cjs/getContent-DrqM8pqO.cjs.map +0 -1
- package/dist/cjs/html-CZ1N-VL0.cjs +0 -2
- package/dist/cjs/html-CZ1N-VL0.cjs.map +0 -1
- package/dist/esm/getContent-DKqtIZGL.mjs +0 -2
- package/dist/esm/getContent-DKqtIZGL.mjs.map +0 -1
- package/dist/esm/html-3bo80xzx.mjs +0 -2
- package/dist/esm/html-3bo80xzx.mjs.map +0 -1
- package/dist/types/ICU-tA3ZHN5U.d.ts +0 -11
- package/dist/types/ICU-tA3ZHN5U.d.ts.map +0 -1
- package/dist/types/checkIsURLAbsolute-CTf3JFU6.d.ts +0 -5
- package/dist/types/checkIsURLAbsolute-CTf3JFU6.d.ts.map +0 -1
- package/dist/types/compact-IHXcM4pT.d.ts +0 -20
- package/dist/types/compact-IHXcM4pT.d.ts.map +0 -1
- package/dist/types/compiler-DFiAsUdH.d.ts +0 -9
- package/dist/types/compiler-DFiAsUdH.d.ts.map +0 -1
- package/dist/types/condition-BDUtoh_1.d.ts +0 -28
- package/dist/types/condition-BDUtoh_1.d.ts.map +0 -1
- package/dist/types/constants-CI_D82B1.d.ts +0 -177
- package/dist/types/constants-CI_D82B1.d.ts.map +0 -1
- package/dist/types/currency-PbMCnHep.d.ts +0 -20
- package/dist/types/currency-PbMCnHep.d.ts.map +0 -1
- package/dist/types/date-C-PI8KqU.d.ts +0 -20
- package/dist/types/date-C-PI8KqU.d.ts.map +0 -1
- package/dist/types/editDictionaryByKeyPath-BYIHcsyf.d.ts +0 -8
- package/dist/types/editDictionaryByKeyPath-BYIHcsyf.d.ts.map +0 -1
- package/dist/types/enumeration-CtuvB5Zz.d.ts +0 -40
- package/dist/types/enumeration-CtuvB5Zz.d.ts.map +0 -1
- package/dist/types/file-C3q8xvQb.d.ts +0 -28
- package/dist/types/file-C3q8xvQb.d.ts.map +0 -1
- package/dist/types/gender-Dd39Ijmf.d.ts +0 -29
- package/dist/types/gender-Dd39Ijmf.d.ts.map +0 -1
- package/dist/types/getBrowserLocale-RD_Mwv1t.d.ts +0 -35
- package/dist/types/getBrowserLocale-RD_Mwv1t.d.ts.map +0 -1
- package/dist/types/getContentNodeByKeyPath-B0Tdi5mj.d.ts +0 -9
- package/dist/types/getContentNodeByKeyPath-B0Tdi5mj.d.ts.map +0 -1
- package/dist/types/getCookie-DPOvVv_h.d.ts +0 -11
- package/dist/types/getCookie-DPOvVv_h.d.ts.map +0 -1
- package/dist/types/getDefaultNode-DQNsje2D.d.ts +0 -9
- package/dist/types/getDefaultNode-DQNsje2D.d.ts.map +0 -1
- package/dist/types/getEmptyNode-DW27TTBj.d.ts +0 -7
- package/dist/types/getEmptyNode-DW27TTBj.d.ts.map +0 -1
- package/dist/types/getFilterMissingTranslationsContent-CDNQqoy1.d.ts +0 -50
- package/dist/types/getFilterMissingTranslationsContent-CDNQqoy1.d.ts.map +0 -1
- package/dist/types/getFilterTranslationsOnlyContent-D2YgBkHn.d.ts +0 -42
- package/dist/types/getFilterTranslationsOnlyContent-D2YgBkHn.d.ts.map +0 -1
- package/dist/types/getFilteredLocalesContent-D0GP-uEg.d.ts +0 -34
- package/dist/types/getFilteredLocalesContent-D0GP-uEg.d.ts.map +0 -1
- package/dist/types/getHTML-CP6OXtdo.d.ts +0 -32
- package/dist/types/getHTML-CP6OXtdo.d.ts.map +0 -1
- package/dist/types/getHTMLTextDir-4Zh8J3x7.d.ts +0 -21
- package/dist/types/getHTMLTextDir-4Zh8J3x7.d.ts.map +0 -1
- package/dist/types/getInsertionValues-Cu9IdbuE.d.ts +0 -5
- package/dist/types/getInsertionValues-Cu9IdbuE.d.ts.map +0 -1
- package/dist/types/getLocale-B9dECUM_.d.ts +0 -11
- package/dist/types/getLocale-B9dECUM_.d.ts.map +0 -1
- package/dist/types/getLocaleFromPath-621W32QA.d.ts +0 -26
- package/dist/types/getLocaleFromPath-621W32QA.d.ts.map +0 -1
- package/dist/types/getLocaleLang-Bcan1gS4.d.ts +0 -20
- package/dist/types/getLocaleLang-Bcan1gS4.d.ts.map +0 -1
- package/dist/types/getLocaleName-CfRAD9Hc.d.ts +0 -7
- package/dist/types/getLocaleName-CfRAD9Hc.d.ts.map +0 -1
- package/dist/types/getLocalizedContent-DOncZd-0.d.ts +0 -18
- package/dist/types/getLocalizedContent-DOncZd-0.d.ts.map +0 -1
- package/dist/types/getLocalizedUrl-BbqeA3-W.d.ts +0 -49
- package/dist/types/getLocalizedUrl-BbqeA3-W.d.ts.map +0 -1
- package/dist/types/getMarkdownMetadata-Bf1S1NQ0.d.ts +0 -5
- package/dist/types/getMarkdownMetadata-Bf1S1NQ0.d.ts.map +0 -1
- package/dist/types/getMaskContent-BwLFqp7v.d.ts +0 -10
- package/dist/types/getMaskContent-BwLFqp7v.d.ts.map +0 -1
- package/dist/types/getMissingLocalesContent-BYffYcdx.d.ts +0 -19
- package/dist/types/getMissingLocalesContent-BYffYcdx.d.ts.map +0 -1
- package/dist/types/getMultilingualDictionary-DO3i1MFs.d.ts +0 -32
- package/dist/types/getMultilingualDictionary-DO3i1MFs.d.ts.map +0 -1
- package/dist/types/getMultilingualUrls-CUxYYfA4.d.ts +0 -47
- package/dist/types/getMultilingualUrls-CUxYYfA4.d.ts.map +0 -1
- package/dist/types/getNodeChildren-OT7Liqke.d.ts +0 -7
- package/dist/types/getNodeChildren-OT7Liqke.d.ts.map +0 -1
- package/dist/types/getNodeType-Cp765I26.d.ts +0 -8
- package/dist/types/getNodeType-Cp765I26.d.ts.map +0 -1
- package/dist/types/getPathWithoutLocale-B_aIR7O0.d.ts +0 -31
- package/dist/types/getPathWithoutLocale-B_aIR7O0.d.ts.map +0 -1
- package/dist/types/getPrefix-X9XKkrZD.d.ts +0 -68
- package/dist/types/getPrefix-X9XKkrZD.d.ts.map +0 -1
- package/dist/types/getReplacedValuesContent-BvL25pdt.d.ts +0 -8
- package/dist/types/getReplacedValuesContent-BvL25pdt.d.ts.map +0 -1
- package/dist/types/getSplittedContent-YD4JDMfB.d.ts +0 -43
- package/dist/types/getSplittedContent-YD4JDMfB.d.ts.map +0 -1
- package/dist/types/getStorageAttributes-CIO2xWqQ.d.ts +0 -29
- package/dist/types/getStorageAttributes-CIO2xWqQ.d.ts.map +0 -1
- package/dist/types/getTranslation-BG2Wg-af.d.ts +0 -30
- package/dist/types/getTranslation-BG2Wg-af.d.ts.map +0 -1
- package/dist/types/html-Dn6KrpJ3.d.ts +0 -25
- package/dist/types/html-Dn6KrpJ3.d.ts.map +0 -1
- package/dist/types/htmlTags-YxTtVUx6.d.ts +0 -115
- package/dist/types/htmlTags-YxTtVUx6.d.ts.map +0 -1
- package/dist/types/i18next-qY0AixrB.d.ts +0 -9
- package/dist/types/i18next-qY0AixrB.d.ts.map +0 -1
- package/dist/types/index-1CTsSKEn.d.ts +0 -1
- package/dist/types/index-B8xF2zGo.d.ts +0 -1
- package/dist/types/index-BcsOTSQF.d.ts +0 -1
- package/dist/types/index-BnEeKNKW.d.ts +0 -322
- package/dist/types/index-BnEeKNKW.d.ts.map +0 -1
- package/dist/types/index-Cf8zm5QQ.d.ts +0 -1
- package/dist/types/index-CfvILin8.d.ts +0 -1
- package/dist/types/index-DK_kKFOF.d.ts +0 -1
- package/dist/types/index-DeJa0xZp.d.ts +0 -1
- package/dist/types/index-Vlqtiwjx.d.ts +0 -1
- package/dist/types/insertContentInDictionary-DZ3UzG4K.d.ts +0 -25
- package/dist/types/insertContentInDictionary-DZ3UzG4K.d.ts.map +0 -1
- package/dist/types/insertion-M5fwK-29.d.ts +0 -23
- package/dist/types/insertion-M5fwK-29.d.ts.map +0 -1
- package/dist/types/intl-B2Ap8I5x.d.ts +0 -33
- package/dist/types/intl-B2Ap8I5x.d.ts.map +0 -1
- package/dist/types/isSameKeyPath-CkH8NdJh.d.ts +0 -7
- package/dist/types/isSameKeyPath-CkH8NdJh.d.ts.map +0 -1
- package/dist/types/isValidReactElement-BsoJ01oP.d.ts +0 -12
- package/dist/types/isValidReactElement-BsoJ01oP.d.ts.map +0 -1
- package/dist/types/list-BdjJM2Gx.d.ts +0 -30
- package/dist/types/list-BdjJM2Gx.d.ts.map +0 -1
- package/dist/types/localeDetector-BWNCQRiZ.d.ts +0 -18
- package/dist/types/localeDetector-BWNCQRiZ.d.ts.map +0 -1
- package/dist/types/localeMapper-DoAnasqf.d.ts +0 -92
- package/dist/types/localeMapper-DoAnasqf.d.ts.map +0 -1
- package/dist/types/localeResolver-bb7AWQNX.d.ts +0 -12
- package/dist/types/localeResolver-bb7AWQNX.d.ts.map +0 -1
- package/dist/types/localeStorage-CZHwY0u3.d.ts +0 -108
- package/dist/types/localeStorage-CZHwY0u3.d.ts.map +0 -1
- package/dist/types/markdown-MzfikrI1.d.ts +0 -26
- package/dist/types/markdown-MzfikrI1.d.ts.map +0 -1
- package/dist/types/mergeDictionaries-D6WUMQN5.d.ts +0 -7
- package/dist/types/mergeDictionaries-D6WUMQN5.d.ts.map +0 -1
- package/dist/types/normalizeDictionary-coviIGTW.d.ts +0 -9
- package/dist/types/normalizeDictionary-coviIGTW.d.ts.map +0 -1
- package/dist/types/number-C8izkCmU.d.ts +0 -16
- package/dist/types/number-C8izkCmU.d.ts.map +0 -1
- package/dist/types/orderDictionaries-SSCMY6qG.d.ts +0 -15
- package/dist/types/orderDictionaries-SSCMY6qG.d.ts.map +0 -1
- package/dist/types/parseYaml-D5gxutvA.d.ts +0 -5
- package/dist/types/parseYaml-D5gxutvA.d.ts.map +0 -1
- package/dist/types/parser-BVwR6Tjw.d.ts +0 -16
- package/dist/types/parser-BVwR6Tjw.d.ts.map +0 -1
- package/dist/types/percentage-BqsvW0Zw.d.ts +0 -16
- package/dist/types/percentage-BqsvW0Zw.d.ts.map +0 -1
- package/dist/types/relativeTime-mJaYEq7H.d.ts +0 -11
- package/dist/types/relativeTime-mJaYEq7H.d.ts.map +0 -1
- package/dist/types/removeContentNodeByKeyPath-CotCOOsD.d.ts +0 -8
- package/dist/types/removeContentNodeByKeyPath-CotCOOsD.d.ts.map +0 -1
- package/dist/types/renameContentNodeByKeyPath-BuyH5gOr.d.ts +0 -8
- package/dist/types/renameContentNodeByKeyPath-BuyH5gOr.d.ts.map +0 -1
- package/dist/types/renderer-C06x2Orf.d.ts +0 -22
- package/dist/types/renderer-C06x2Orf.d.ts.map +0 -1
- package/dist/types/rewriteUtils-Bd82NiGR.d.ts +0 -34
- package/dist/types/rewriteUtils-Bd82NiGR.d.ts.map +0 -1
- package/dist/types/splitAndJoinInsertion-bkuLa7o2.d.ts +0 -25
- package/dist/types/splitAndJoinInsertion-bkuLa7o2.d.ts.map +0 -1
- package/dist/types/translation-CiC-Avxc.d.ts +0 -33
- package/dist/types/translation-CiC-Avxc.d.ts.map +0 -1
- package/dist/types/types-C2Om0aEM.d.ts +0 -333
- package/dist/types/types-C2Om0aEM.d.ts.map +0 -1
- package/dist/types/units-CouGqa8j.d.ts +0 -16
- package/dist/types/units-CouGqa8j.d.ts.map +0 -1
- package/dist/types/updateNodeChildren-B5Tu1UBZ.d.ts +0 -7
- package/dist/types/updateNodeChildren-B5Tu1UBZ.d.ts.map +0 -1
- package/dist/types/utils-Dcmgh_80.d.ts +0 -140
- package/dist/types/utils-Dcmgh_80.d.ts.map +0 -1
- package/dist/types/validateHTML-U7UKTtFd.d.ts +0 -21
- package/dist/types/validateHTML-U7UKTtFd.d.ts.map +0 -1
- package/dist/types/validateMarkdown-BUaTDDIu.d.ts +0 -18
- package/dist/types/validateMarkdown-BUaTDDIu.d.ts.map +0 -1
- package/dist/types/validatePrefix-Dtmg7QLq.d.ts +0 -38
- package/dist/types/validatePrefix-Dtmg7QLq.d.ts.map +0 -1
- package/dist/types/vue-i18n-JtUB7N_m.d.ts +0 -9
- package/dist/types/vue-i18n-JtUB7N_m.d.ts.map +0 -1
|
@@ -1,2 +1,342 @@
|
|
|
1
|
-
import{deepTransformNode
|
|
1
|
+
import { deepTransformNode } from "../interpreter/getContent/deepTransform.mjs";
|
|
2
|
+
import { enu as enumeration } from "../transpiler/enumeration/enumeration.mjs";
|
|
3
|
+
import { gender } from "../transpiler/gender/gender.mjs";
|
|
4
|
+
import { html } from "../transpiler/html/html.mjs";
|
|
5
|
+
import { insert as insertion } from "../transpiler/insertion/insertion.mjs";
|
|
6
|
+
import * as NodeTypes from "@intlayer/types/nodeType";
|
|
7
|
+
|
|
8
|
+
//#region src/messageFormat/i18next.ts
|
|
9
|
+
const parseI18Next = (text) => {
|
|
10
|
+
let index = 0;
|
|
11
|
+
const parseNodes = () => {
|
|
12
|
+
const nodes = [];
|
|
13
|
+
let currentText = "";
|
|
14
|
+
while (index < text.length) {
|
|
15
|
+
const char = text[index];
|
|
16
|
+
if (char === "{" && text[index + 1] === "{") {
|
|
17
|
+
if (currentText) {
|
|
18
|
+
nodes.push(currentText);
|
|
19
|
+
currentText = "";
|
|
20
|
+
}
|
|
21
|
+
index += 2;
|
|
22
|
+
nodes.push(parseStandardArgument());
|
|
23
|
+
} else if (char === "{") {
|
|
24
|
+
if (currentText) {
|
|
25
|
+
nodes.push(currentText);
|
|
26
|
+
currentText = "";
|
|
27
|
+
}
|
|
28
|
+
index++;
|
|
29
|
+
nodes.push(parseICUArgument());
|
|
30
|
+
} else if (char === "}") break;
|
|
31
|
+
else {
|
|
32
|
+
currentText += char;
|
|
33
|
+
index++;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
if (currentText) nodes.push(currentText);
|
|
37
|
+
return nodes;
|
|
38
|
+
};
|
|
39
|
+
const parseStandardArgument = () => {
|
|
40
|
+
let name = "";
|
|
41
|
+
while (index < text.length) {
|
|
42
|
+
if (text[index] === "}" && text[index + 1] === "}") {
|
|
43
|
+
index += 2;
|
|
44
|
+
return {
|
|
45
|
+
type: "argument",
|
|
46
|
+
name: name.trim()
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
name += text[index];
|
|
50
|
+
index++;
|
|
51
|
+
}
|
|
52
|
+
throw new Error("Unclosed i18next variable");
|
|
53
|
+
};
|
|
54
|
+
const parseICUArgument = () => {
|
|
55
|
+
let name = "";
|
|
56
|
+
while (index < text.length && /[^,}]/.test(text[index])) {
|
|
57
|
+
name += text[index];
|
|
58
|
+
index++;
|
|
59
|
+
}
|
|
60
|
+
name = name.trim();
|
|
61
|
+
if (index >= text.length) throw new Error("Unclosed argument");
|
|
62
|
+
if (text[index] === "}") {
|
|
63
|
+
index++;
|
|
64
|
+
return {
|
|
65
|
+
type: "argument",
|
|
66
|
+
name
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
if (text[index] === ",") {
|
|
70
|
+
index++;
|
|
71
|
+
let type = "";
|
|
72
|
+
while (index < text.length && /[^,}]/.test(text[index])) {
|
|
73
|
+
type += text[index];
|
|
74
|
+
index++;
|
|
75
|
+
}
|
|
76
|
+
type = type.trim();
|
|
77
|
+
if (index >= text.length) throw new Error("Unclosed argument");
|
|
78
|
+
if (text[index] === "}") {
|
|
79
|
+
index++;
|
|
80
|
+
return {
|
|
81
|
+
type: "argument",
|
|
82
|
+
name,
|
|
83
|
+
format: { type }
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
if (text[index] === ",") {
|
|
87
|
+
index++;
|
|
88
|
+
if (type === "plural" || type === "select") {
|
|
89
|
+
const options = {};
|
|
90
|
+
while (index < text.length && text[index] !== "}") {
|
|
91
|
+
while (index < text.length && /\s/.test(text[index])) index++;
|
|
92
|
+
let key = "";
|
|
93
|
+
while (index < text.length && /[^{\s]/.test(text[index])) {
|
|
94
|
+
key += text[index];
|
|
95
|
+
index++;
|
|
96
|
+
}
|
|
97
|
+
while (index < text.length && /\s/.test(text[index])) index++;
|
|
98
|
+
if (text[index] !== "{") throw new Error("Expected { after option key");
|
|
99
|
+
index++;
|
|
100
|
+
const value = parseNodes();
|
|
101
|
+
if (text[index] !== "}") throw new Error("Expected } after option value");
|
|
102
|
+
index++;
|
|
103
|
+
options[key] = value;
|
|
104
|
+
while (index < text.length && /\s/.test(text[index])) index++;
|
|
105
|
+
}
|
|
106
|
+
index++;
|
|
107
|
+
if (type === "plural") return {
|
|
108
|
+
type: "plural",
|
|
109
|
+
name,
|
|
110
|
+
options
|
|
111
|
+
};
|
|
112
|
+
else if (type === "select") return {
|
|
113
|
+
type: "select",
|
|
114
|
+
name,
|
|
115
|
+
options
|
|
116
|
+
};
|
|
117
|
+
} else {
|
|
118
|
+
let style = "";
|
|
119
|
+
while (index < text.length && text[index] !== "}") {
|
|
120
|
+
style += text[index];
|
|
121
|
+
index++;
|
|
122
|
+
}
|
|
123
|
+
if (index >= text.length) throw new Error("Unclosed argument");
|
|
124
|
+
style = style.trim();
|
|
125
|
+
index++;
|
|
126
|
+
return {
|
|
127
|
+
type: "argument",
|
|
128
|
+
name,
|
|
129
|
+
format: {
|
|
130
|
+
type,
|
|
131
|
+
style
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
throw new Error("Malformed argument");
|
|
138
|
+
};
|
|
139
|
+
return parseNodes();
|
|
140
|
+
};
|
|
141
|
+
const i18nextNodesToIntlayer = (nodes) => {
|
|
142
|
+
if (nodes.length === 0) return "";
|
|
143
|
+
if (nodes.length === 1 && typeof nodes[0] === "string") {
|
|
144
|
+
const node = nodes[0];
|
|
145
|
+
if (/<[a-zA-Z0-9-]+[^>]*>/.test(node)) return html(node);
|
|
146
|
+
return node;
|
|
147
|
+
}
|
|
148
|
+
if (nodes.every((node) => typeof node === "string" || node.type === "argument")) {
|
|
149
|
+
let str = "";
|
|
150
|
+
for (const node of nodes) if (typeof node === "string") str += node;
|
|
151
|
+
else if (typeof node !== "string" && node.type === "argument") if (node.format) str += `{${node.name}, ${node.format.type}${node.format.style ? `, ${node.format.style}` : ""}}`;
|
|
152
|
+
else str += `{{${node.name}}}`;
|
|
153
|
+
if (/<[a-zA-Z0-9-]+[^>]*>/.test(str)) return html(str);
|
|
154
|
+
return insertion(str);
|
|
155
|
+
}
|
|
156
|
+
if (nodes.length === 1) {
|
|
157
|
+
const node = nodes[0];
|
|
158
|
+
if (typeof node === "string") {
|
|
159
|
+
if (/<[a-zA-Z0-9-]+[^>]*>/.test(node)) return html(node);
|
|
160
|
+
return node;
|
|
161
|
+
}
|
|
162
|
+
if (node.type === "argument") {
|
|
163
|
+
if (node.format) return insertion(`{${node.name}, ${node.format.type}${node.format.style ? `, ${node.format.style}` : ""}}`);
|
|
164
|
+
return insertion(`{{${node.name}}}`);
|
|
165
|
+
}
|
|
166
|
+
if (node.type === "plural") {
|
|
167
|
+
const options = {};
|
|
168
|
+
for (const [key, val] of Object.entries(node.options)) {
|
|
169
|
+
let newKey = key;
|
|
170
|
+
if (key.startsWith("=")) newKey = key.substring(1);
|
|
171
|
+
else if (key === "one") newKey = "1";
|
|
172
|
+
else if (key === "two") newKey = "2";
|
|
173
|
+
else if (key === "few") newKey = "<=3";
|
|
174
|
+
else if (key === "many") newKey = ">=4";
|
|
175
|
+
else if (key === "other") newKey = "fallback";
|
|
176
|
+
options[newKey] = i18nextNodesToIntlayer(val.map((v) => {
|
|
177
|
+
if (typeof v === "string") return v.replace(/#/g, `{{${node.name}}}`);
|
|
178
|
+
return v;
|
|
179
|
+
}));
|
|
180
|
+
}
|
|
181
|
+
options.__intlayer_icu_var = node.name;
|
|
182
|
+
return enumeration(options);
|
|
183
|
+
}
|
|
184
|
+
if (node.type === "select") {
|
|
185
|
+
const options = {};
|
|
186
|
+
for (const [key, val] of Object.entries(node.options)) options[key] = i18nextNodesToIntlayer(val);
|
|
187
|
+
const optionKeys = Object.keys(options);
|
|
188
|
+
if ((options.male || options.female) && optionKeys.every((k) => [
|
|
189
|
+
"male",
|
|
190
|
+
"female",
|
|
191
|
+
"other",
|
|
192
|
+
"fallback"
|
|
193
|
+
].includes(k))) return gender({
|
|
194
|
+
fallback: options.other,
|
|
195
|
+
male: options.male,
|
|
196
|
+
female: options.female
|
|
197
|
+
});
|
|
198
|
+
options.__intlayer_icu_var = node.name;
|
|
199
|
+
return enumeration(options);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
return nodes.map((node) => i18nextNodesToIntlayer([node]));
|
|
203
|
+
};
|
|
204
|
+
const i18nextToIntlayerPlugin = {
|
|
205
|
+
canHandle: (node) => typeof node === "string" && (node.includes("{") || node.includes("}") || /<[a-zA-Z0-9-]+[^>]*>/.test(node)),
|
|
206
|
+
transform: (node) => {
|
|
207
|
+
try {
|
|
208
|
+
return i18nextNodesToIntlayer(parseI18Next(node));
|
|
209
|
+
} catch {
|
|
210
|
+
return node;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
};
|
|
214
|
+
const intlayerToI18nextPlugin = {
|
|
215
|
+
canHandle: (node) => {
|
|
216
|
+
if (typeof node === "string") return true;
|
|
217
|
+
if (node && typeof node === "object" && (node.nodeType === NodeTypes.INSERTION || node.nodeType === NodeTypes.HTML || node.nodeType === NodeTypes.ENUMERATION || node.nodeType === NodeTypes.GENDER || node.nodeType === "composite")) return true;
|
|
218
|
+
if (Array.isArray(node)) {
|
|
219
|
+
if (node.length === 0) return false;
|
|
220
|
+
let hasNode = false;
|
|
221
|
+
let hasPlainObjectOrArray = false;
|
|
222
|
+
for (const item of node) if (typeof item === "string") {} else if (item && typeof item === "object" && (item.nodeType === NodeTypes.INSERTION || item.nodeType === NodeTypes.HTML || item.nodeType === NodeTypes.ENUMERATION || item.nodeType === NodeTypes.GENDER || item.nodeType === "composite")) hasNode = true;
|
|
223
|
+
else hasPlainObjectOrArray = true;
|
|
224
|
+
if (hasPlainObjectOrArray) return false;
|
|
225
|
+
if (!hasNode) return false;
|
|
226
|
+
return true;
|
|
227
|
+
}
|
|
228
|
+
return false;
|
|
229
|
+
},
|
|
230
|
+
transform: (node, props, next) => {
|
|
231
|
+
if (typeof node === "string") return node;
|
|
232
|
+
if (node.nodeType === NodeTypes.INSERTION) {
|
|
233
|
+
if (node[NodeTypes.INSERTION].match(/\{[^}]*,[^}]*\}/)) return node[NodeTypes.INSERTION];
|
|
234
|
+
return node[NodeTypes.INSERTION];
|
|
235
|
+
}
|
|
236
|
+
if (node.nodeType === NodeTypes.HTML) return node[NodeTypes.HTML];
|
|
237
|
+
if (node.nodeType === NodeTypes.ENUMERATION) {
|
|
238
|
+
const options = node[NodeTypes.ENUMERATION];
|
|
239
|
+
const transformedOptions = {};
|
|
240
|
+
for (const [key, val] of Object.entries(options)) {
|
|
241
|
+
if (key === "__intlayer_icu_var") continue;
|
|
242
|
+
const childVal = next(val, props);
|
|
243
|
+
transformedOptions[key] = typeof childVal === "string" ? childVal : JSON.stringify(childVal);
|
|
244
|
+
}
|
|
245
|
+
let varName = options.__intlayer_icu_var || "count";
|
|
246
|
+
if (!options.__intlayer_icu_var) {
|
|
247
|
+
const fallbackVal = transformedOptions.fallback || transformedOptions.other || Object.values(transformedOptions)[0];
|
|
248
|
+
const match = fallbackVal.match(/\{\{([a-zA-Z0-9_]+)\}\}/) || fallbackVal.match(/\{([a-zA-Z0-9_]+)\}(?!,)/);
|
|
249
|
+
if (match) varName = match[1];
|
|
250
|
+
}
|
|
251
|
+
const keys = Object.keys(transformedOptions);
|
|
252
|
+
const pluralKeys = [
|
|
253
|
+
"1",
|
|
254
|
+
"2",
|
|
255
|
+
"<=3",
|
|
256
|
+
">=4",
|
|
257
|
+
"fallback",
|
|
258
|
+
"other",
|
|
259
|
+
"zero",
|
|
260
|
+
"one",
|
|
261
|
+
"two",
|
|
262
|
+
"few",
|
|
263
|
+
"many"
|
|
264
|
+
];
|
|
265
|
+
const isPlural = keys.every((k) => pluralKeys.includes(k) || /^[<>=]?\d+(\.\d+)?$/.test(k));
|
|
266
|
+
const parts = [];
|
|
267
|
+
if (isPlural) {
|
|
268
|
+
for (const [key, val] of Object.entries(transformedOptions)) {
|
|
269
|
+
let icuKey = key;
|
|
270
|
+
if (key === "fallback") icuKey = "other";
|
|
271
|
+
else if (key === "<=3") icuKey = "few";
|
|
272
|
+
else if (key === ">=4") icuKey = "many";
|
|
273
|
+
else if (/^\d+$/.test(key)) icuKey = `=${key}`;
|
|
274
|
+
let strVal = val;
|
|
275
|
+
strVal = strVal.replace(/\{\{([^}]+)\}\}/g, "{$1}");
|
|
276
|
+
strVal = strVal.replace(new RegExp(`\\{${varName}\\}`, "g"), "#");
|
|
277
|
+
parts.push(`${icuKey} {${strVal}}`);
|
|
278
|
+
}
|
|
279
|
+
return `{${varName}, plural, ${parts.join(" ")}}`;
|
|
280
|
+
} else {
|
|
281
|
+
const entries = Object.entries(transformedOptions).sort(([keyA], [keyB]) => {
|
|
282
|
+
if (keyA === "fallback" || keyA === "other") return 1;
|
|
283
|
+
if (keyB === "fallback" || keyB === "other") return -1;
|
|
284
|
+
return 0;
|
|
285
|
+
});
|
|
286
|
+
for (const [key, val] of entries) {
|
|
287
|
+
let icuKey = key;
|
|
288
|
+
if (key === "fallback") icuKey = "other";
|
|
289
|
+
let strVal = val;
|
|
290
|
+
strVal = strVal.replace(/\{\{([^}]+)\}\}/g, "{$1}");
|
|
291
|
+
parts.push(`${icuKey} {${strVal}}`);
|
|
292
|
+
}
|
|
293
|
+
return `{${varName}, select, ${parts.join(" ")}}`;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
if (node.nodeType === NodeTypes.GENDER) {
|
|
297
|
+
const options = node[NodeTypes.GENDER];
|
|
298
|
+
const varName = "gender";
|
|
299
|
+
const parts = [];
|
|
300
|
+
const entries = Object.entries(options).sort(([keyA], [keyB]) => {
|
|
301
|
+
if (keyA === "fallback") return 1;
|
|
302
|
+
if (keyB === "fallback") return -1;
|
|
303
|
+
return 0;
|
|
304
|
+
});
|
|
305
|
+
for (const [key, val] of entries) {
|
|
306
|
+
let icuKey = key;
|
|
307
|
+
if (key === "fallback") icuKey = "other";
|
|
308
|
+
const childVal = next(val, props);
|
|
309
|
+
let strVal = typeof childVal === "string" ? childVal : JSON.stringify(childVal);
|
|
310
|
+
strVal = strVal.replace(/\{\{([^}]+)\}\}/g, "{$1}");
|
|
311
|
+
parts.push(`${icuKey} {${strVal}}`);
|
|
312
|
+
}
|
|
313
|
+
return `{${varName}, select, ${parts.join(" ")}}`;
|
|
314
|
+
}
|
|
315
|
+
if (Array.isArray(node) || node.nodeType === "composite" && Array.isArray(node.composite)) return (Array.isArray(node) ? node : node.composite).map((item) => next(item, props)).join("");
|
|
316
|
+
return next(node, props);
|
|
317
|
+
}
|
|
318
|
+
};
|
|
319
|
+
const intlayerToI18nextFormatter = (message) => {
|
|
320
|
+
return deepTransformNode(message, {
|
|
321
|
+
dictionaryKey: "i18next",
|
|
322
|
+
keyPath: [],
|
|
323
|
+
plugins: [{
|
|
324
|
+
id: "i18next",
|
|
325
|
+
...intlayerToI18nextPlugin
|
|
326
|
+
}]
|
|
327
|
+
});
|
|
328
|
+
};
|
|
329
|
+
const i18nextToIntlayerFormatter = (message) => {
|
|
330
|
+
return deepTransformNode(message, {
|
|
331
|
+
dictionaryKey: "i18next",
|
|
332
|
+
keyPath: [],
|
|
333
|
+
plugins: [{
|
|
334
|
+
id: "i18next",
|
|
335
|
+
...i18nextToIntlayerPlugin
|
|
336
|
+
}]
|
|
337
|
+
});
|
|
338
|
+
};
|
|
339
|
+
|
|
340
|
+
//#endregion
|
|
341
|
+
export { i18nextToIntlayerFormatter, intlayerToI18nextFormatter };
|
|
2
342
|
//# sourceMappingURL=i18next.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18next.mjs","names":["insert","enu"],"sources":["../../../src/messageFormat/i18next.ts"],"sourcesContent":["import type { Dictionary } from '@intlayer/types/dictionary';\nimport { NodeType } from '@intlayer/types/nodeType';\nimport { deepTransformNode } from '../interpreter';\nimport { enu, gender, html, insert } from '../transpiler';\nimport type { JsonValue } from './ICU';\n\n// Types for our AST\ntype I18NextNode =\n | string\n | {\n type: 'argument';\n name: string;\n format?: { type: string; style?: string };\n }\n | { type: 'plural'; name: string; options: Record<string, I18NextNode[]> }\n | { type: 'select'; name: string; options: Record<string, I18NextNode[]> };\n\nconst parseI18Next = (text: string): I18NextNode[] => {\n let index = 0;\n\n const parseNodes = (): I18NextNode[] => {\n const nodes: I18NextNode[] = [];\n let currentText = '';\n\n while (index < text.length) {\n const char = text[index];\n\n // Standard i18next variable: {{var}}\n if (char === '{' && text[index + 1] === '{') {\n if (currentText) {\n nodes.push(currentText);\n currentText = '';\n }\n index += 2; // skip {{\n nodes.push(parseStandardArgument());\n }\n // ICU syntax: {var} or {var, plural, ...}\n else if (char === '{') {\n if (currentText) {\n nodes.push(currentText);\n currentText = '';\n }\n index++; // skip {\n nodes.push(parseICUArgument());\n } else if (char === '}') {\n // End of current block (likely ICU block end)\n break;\n } else {\n currentText += char;\n index++;\n }\n }\n\n if (currentText) {\n nodes.push(currentText);\n }\n return nodes;\n };\n\n const parseStandardArgument = (): I18NextNode => {\n // We are past '{{'\n let name = '';\n while (index < text.length) {\n // Check for closing }}\n if (text[index] === '}' && text[index + 1] === '}') {\n index += 2; // skip }}\n return { type: 'argument', name: name.trim() };\n }\n name += text[index];\n index++;\n }\n throw new Error('Unclosed i18next variable');\n };\n\n const parseICUArgument = (): I18NextNode => {\n // We are past '{'\n let name = '';\n while (index < text.length && /[^,}]/.test(text[index])) {\n name += text[index];\n index++;\n }\n name = name.trim();\n\n if (index >= text.length) throw new Error('Unclosed argument');\n\n if (text[index] === '}') {\n index++;\n return { type: 'argument', name };\n }\n\n // Must be comma\n if (text[index] === ',') {\n index++;\n // Parse type\n let type = '';\n while (index < text.length && /[^,}]/.test(text[index])) {\n type += text[index];\n index++;\n }\n type = type.trim();\n\n if (index >= text.length) throw new Error('Unclosed argument');\n\n if (text[index] === '}') {\n index++;\n return { type: 'argument', name, format: { type } };\n }\n\n if (text[index] === ',') {\n index++;\n\n // If plural or select, parse options\n if (type === 'plural' || type === 'select') {\n const options: Record<string, I18NextNode[]> = {};\n\n while (index < text.length && text[index] !== '}') {\n while (index < text.length && /\\s/.test(text[index])) index++;\n\n let key = '';\n while (index < text.length && /[^{\\s]/.test(text[index])) {\n key += text[index];\n index++;\n }\n\n while (index < text.length && /\\s/.test(text[index])) index++;\n\n if (text[index] !== '{')\n throw new Error('Expected { after option key');\n index++; // skip {\n\n const value = parseNodes();\n\n if (text[index] !== '}')\n throw new Error('Expected } after option value');\n index++; // skip }\n\n options[key] = value;\n\n while (index < text.length && /\\s/.test(text[index])) index++;\n }\n\n index++; // skip closing argument }\n\n if (type === 'plural') {\n return { type: 'plural', name, options };\n } else if (type === 'select') {\n return { type: 'select', name, options };\n }\n } else {\n // Parse style for number/date/time\n let style = '';\n while (index < text.length && text[index] !== '}') {\n style += text[index];\n index++;\n }\n if (index >= text.length) throw new Error('Unclosed argument');\n\n style = style.trim();\n index++; // skip }\n\n return { type: 'argument', name, format: { type, style } };\n }\n }\n }\n\n throw new Error('Malformed argument');\n };\n\n return parseNodes();\n};\n\nconst i18nextNodesToIntlayer = (nodes: I18NextNode[]): any => {\n if (nodes.length === 0) return '';\n if (nodes.length === 1 && typeof nodes[0] === 'string') {\n const node = nodes[0];\n if (/<[a-zA-Z0-9-]+[^>]*>/.test(node)) {\n return html(node);\n }\n return node;\n }\n\n const canFlatten = nodes.every(\n (node) => typeof node === 'string' || node.type === 'argument'\n );\n\n if (canFlatten) {\n let str = '';\n for (const node of nodes) {\n if (typeof node === 'string') {\n str += node;\n } else if (typeof node !== 'string' && node.type === 'argument') {\n if (node.format) {\n // For formatted arguments, use ICU syntax: {name, type, style}\n str += `{${node.name}, ${node.format.type}${\n node.format.style ? `, ${node.format.style}` : ''\n }}`;\n } else {\n // For simple arguments, use standard i18next: {{name}}\n str += `{{${node.name}}}`;\n }\n }\n }\n if (/<[a-zA-Z0-9-]+[^>]*>/.test(str)) {\n return html(str);\n }\n return insert(str);\n }\n\n if (nodes.length === 1) {\n const node = nodes[0];\n if (typeof node === 'string') {\n if (/<[a-zA-Z0-9-]+[^>]*>/.test(node)) {\n return html(node);\n }\n return node;\n }\n\n if (node.type === 'argument') {\n if (node.format) {\n return insert(\n `{${node.name}, ${node.format.type}${\n node.format.style ? `, ${node.format.style}` : ''\n }}`\n );\n }\n return insert(`{{${node.name}}}`);\n }\n\n if (node.type === 'plural') {\n const options: Record<string, any> = {};\n for (const [key, val] of Object.entries(node.options)) {\n let newKey = key;\n if (key.startsWith('=')) {\n newKey = key.substring(1);\n } else if (key === 'one') {\n newKey = '1';\n } else if (key === 'two') {\n newKey = '2';\n } else if (key === 'few') {\n newKey = '<=3';\n } else if (key === 'many') {\n newKey = '>=4';\n } else if (key === 'other') {\n newKey = 'fallback';\n }\n // Handle # replacement\n const replacedVal = val.map((v) => {\n if (typeof v === 'string') {\n // In ICU plural, # is replaced by the number\n // In i18next, if using ICU plugin, it behaves same.\n // We map it to {{varName}} in Intlayer\n return v.replace(/#/g, `{{${node.name}}}`);\n }\n return v;\n });\n\n options[newKey] = i18nextNodesToIntlayer(replacedVal);\n }\n\n // Preserve variable name\n options.__intlayer_icu_var = node.name;\n\n return enu(options);\n }\n\n if (node.type === 'select') {\n const options: Record<string, any> = {};\n for (const [key, val] of Object.entries(node.options)) {\n options[key] = i18nextNodesToIntlayer(val);\n }\n\n // Check for gender\n const optionKeys = Object.keys(options);\n const isGender =\n (options.male || options.female) &&\n optionKeys.every((k) =>\n ['male', 'female', 'other', 'fallback'].includes(k)\n );\n\n if (isGender) {\n return gender({\n fallback: options.other,\n male: options.male,\n female: options.female,\n });\n }\n\n // Preserve variable name for generic select\n options.__intlayer_icu_var = node.name;\n\n return enu(options);\n }\n }\n\n return nodes.map((node) => i18nextNodesToIntlayer([node]));\n};\n\nconst i18nextToIntlayerPlugin = {\n canHandle: (node: any) =>\n typeof node === 'string' &&\n (node.includes('{') ||\n node.includes('}') ||\n /<[a-zA-Z0-9-]+[^>]*>/.test(node)),\n transform: (node: any) => {\n try {\n const ast = parseI18Next(node);\n return i18nextNodesToIntlayer(ast);\n } catch {\n return node;\n }\n },\n};\n\nconst intlayerToI18nextPlugin = {\n canHandle: (node: any) => {\n if (typeof node === 'string') return true;\n\n if (\n node &&\n typeof node === 'object' &&\n (node.nodeType === NodeType.Insertion ||\n node.nodeType === NodeType.HTML ||\n node.nodeType === NodeType.Enumeration ||\n node.nodeType === NodeType.Gender ||\n node.nodeType === 'composite')\n ) {\n return true;\n }\n\n if (Array.isArray(node)) {\n if (node.length === 0) return false;\n\n let hasNode = false;\n let hasPlainObjectOrArray = false;\n\n for (const item of node) {\n if (typeof item === 'string') {\n } else if (\n item &&\n typeof item === 'object' &&\n (item.nodeType === NodeType.Insertion ||\n item.nodeType === NodeType.HTML ||\n item.nodeType === NodeType.Enumeration ||\n item.nodeType === NodeType.Gender ||\n item.nodeType === 'composite')\n ) {\n hasNode = true;\n } else {\n hasPlainObjectOrArray = true;\n }\n }\n\n // If it contains plain objects or nested arrays, it's a structural array\n if (hasPlainObjectOrArray) return false;\n // If it contains ONLY strings, it's a structural array, not a composite string\n if (!hasNode) return false;\n\n return true;\n }\n\n return false;\n },\n transform: (node: any, props: any, next: any) => {\n if (typeof node === 'string') {\n return node;\n }\n\n if (node.nodeType === NodeType.Insertion) {\n if (node.insertion.match(/\\{[^}]*,[^}]*\\}/)) {\n return node.insertion;\n }\n return node.insertion;\n }\n\n if (node.nodeType === NodeType.HTML) {\n return node.html;\n }\n\n if (node.nodeType === NodeType.Enumeration) {\n const options = node.enumeration;\n\n const transformedOptions: Record<string, string> = {};\n for (const [key, val] of Object.entries(options)) {\n if (key === '__intlayer_icu_var') continue;\n const childVal = next(val, props);\n transformedOptions[key] =\n typeof childVal === 'string' ? childVal : JSON.stringify(childVal);\n }\n\n let varName = options.__intlayer_icu_var || 'count';\n\n if (!options.__intlayer_icu_var) {\n const fallbackVal =\n transformedOptions.fallback ||\n transformedOptions.other ||\n Object.values(transformedOptions)[0];\n\n const match =\n fallbackVal.match(/\\{\\{([a-zA-Z0-9_]+)\\}\\}/) ||\n fallbackVal.match(/\\{([a-zA-Z0-9_]+)\\}(?!,)/);\n if (match) {\n varName = match[1];\n }\n }\n\n const keys = Object.keys(transformedOptions);\n const pluralKeys = [\n '1',\n '2',\n '<=3',\n '>=4',\n 'fallback',\n 'other',\n 'zero',\n 'one',\n 'two',\n 'few',\n 'many',\n ];\n const isPlural = keys.every(\n (k) => pluralKeys.includes(k) || /^[<>=]?\\d+(\\.\\d+)?$/.test(k)\n );\n\n const parts = [];\n\n if (isPlural) {\n for (const [key, val] of Object.entries(transformedOptions)) {\n let icuKey = key;\n if (key === 'fallback') icuKey = 'other';\n else if (key === '<=3') icuKey = 'few';\n else if (key === '>=4') icuKey = 'many';\n else if (/^\\d+$/.test(key)) icuKey = `=${key}`;\n\n let strVal = val;\n\n strVal = strVal.replace(/\\{\\{([^}]+)\\}\\}/g, '{$1}');\n strVal = strVal.replace(new RegExp(`\\\\{${varName}\\\\}`, 'g'), '#');\n\n parts.push(`${icuKey} {${strVal}}`);\n }\n return `{${varName}, plural, ${parts.join(' ')}}`;\n } else {\n const entries = Object.entries(transformedOptions).sort(\n ([keyA], [keyB]) => {\n if (keyA === 'fallback' || keyA === 'other') return 1;\n if (keyB === 'fallback' || keyB === 'other') return -1;\n return 0;\n }\n );\n\n for (const [key, val] of entries) {\n let icuKey = key;\n if (key === 'fallback') icuKey = 'other';\n\n let strVal = val;\n strVal = strVal.replace(/\\{\\{([^}]+)\\}\\}/g, '{$1}');\n\n parts.push(`${icuKey} {${strVal}}`);\n }\n return `{${varName}, select, ${parts.join(' ')}}`;\n }\n }\n\n if (node.nodeType === NodeType.Gender) {\n const options = node.gender;\n const varName = 'gender';\n const parts = [];\n\n const entries = Object.entries(options).sort(([keyA], [keyB]) => {\n if (keyA === 'fallback') return 1;\n if (keyB === 'fallback') return -1;\n return 0;\n });\n\n for (const [key, val] of entries) {\n let icuKey = key;\n if (key === 'fallback') icuKey = 'other';\n\n const childVal = next(val, props);\n let strVal =\n typeof childVal === 'string' ? childVal : JSON.stringify(childVal);\n\n strVal = strVal.replace(/\\{\\{([^}]+)\\}\\}/g, '{$1}');\n parts.push(`${icuKey} {${strVal}}`);\n }\n return `{${varName}, select, ${parts.join(' ')}}`;\n }\n\n if (\n Array.isArray(node) ||\n (node.nodeType === 'composite' && Array.isArray(node.composite))\n ) {\n const arr = Array.isArray(node) ? node : node.composite;\n const items = arr.map((item: any) => next(item, props));\n return items.join('');\n }\n\n return next(node, props);\n },\n};\n\nexport const intlayerToI18nextFormatter = (\n message: Dictionary['content']\n): JsonValue => {\n return deepTransformNode(message, {\n dictionaryKey: 'i18next',\n keyPath: [],\n plugins: [{ id: 'i18next', ...intlayerToI18nextPlugin }],\n });\n};\n\nexport const i18nextToIntlayerFormatter = (\n message: JsonValue\n): Dictionary['content'] => {\n return deepTransformNode(message, {\n dictionaryKey: 'i18next',\n keyPath: [],\n plugins: [{ id: 'i18next', ...i18nextToIntlayerPlugin }],\n });\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"i18next.mjs","names":["insert","enu"],"sources":["../../../src/messageFormat/i18next.ts"],"sourcesContent":["import type { Dictionary } from '@intlayer/types/dictionary';\nimport * as NodeTypes from '@intlayer/types/nodeType';\nimport { deepTransformNode } from '../interpreter';\nimport { enu, gender, html, insert } from '../transpiler';\nimport type { JsonValue } from './ICU';\n\n// Types for our AST\ntype I18NextNode =\n | string\n | {\n type: 'argument';\n name: string;\n format?: { type: string; style?: string };\n }\n | { type: 'plural'; name: string; options: Record<string, I18NextNode[]> }\n | { type: 'select'; name: string; options: Record<string, I18NextNode[]> };\n\nconst parseI18Next = (text: string): I18NextNode[] => {\n let index = 0;\n\n const parseNodes = (): I18NextNode[] => {\n const nodes: I18NextNode[] = [];\n let currentText = '';\n\n while (index < text.length) {\n const char = text[index];\n\n // Standard i18next variable: {{var}}\n if (char === '{' && text[index + 1] === '{') {\n if (currentText) {\n nodes.push(currentText);\n currentText = '';\n }\n index += 2; // skip {{\n nodes.push(parseStandardArgument());\n }\n // ICU syntax: {var} or {var, plural, ...}\n else if (char === '{') {\n if (currentText) {\n nodes.push(currentText);\n currentText = '';\n }\n index++; // skip {\n nodes.push(parseICUArgument());\n } else if (char === '}') {\n // End of current block (likely ICU block end)\n break;\n } else {\n currentText += char;\n index++;\n }\n }\n\n if (currentText) {\n nodes.push(currentText);\n }\n return nodes;\n };\n\n const parseStandardArgument = (): I18NextNode => {\n // We are past '{{'\n let name = '';\n while (index < text.length) {\n // Check for closing }}\n if (text[index] === '}' && text[index + 1] === '}') {\n index += 2; // skip }}\n return { type: 'argument', name: name.trim() };\n }\n name += text[index];\n index++;\n }\n throw new Error('Unclosed i18next variable');\n };\n\n const parseICUArgument = (): I18NextNode => {\n // We are past '{'\n let name = '';\n while (index < text.length && /[^,}]/.test(text[index])) {\n name += text[index];\n index++;\n }\n name = name.trim();\n\n if (index >= text.length) throw new Error('Unclosed argument');\n\n if (text[index] === '}') {\n index++;\n return { type: 'argument', name };\n }\n\n // Must be comma\n if (text[index] === ',') {\n index++;\n // Parse type\n let type = '';\n while (index < text.length && /[^,}]/.test(text[index])) {\n type += text[index];\n index++;\n }\n type = type.trim();\n\n if (index >= text.length) throw new Error('Unclosed argument');\n\n if (text[index] === '}') {\n index++;\n return { type: 'argument', name, format: { type } };\n }\n\n if (text[index] === ',') {\n index++;\n\n // If plural or select, parse options\n if (type === 'plural' || type === 'select') {\n const options: Record<string, I18NextNode[]> = {};\n\n while (index < text.length && text[index] !== '}') {\n while (index < text.length && /\\s/.test(text[index])) index++;\n\n let key = '';\n while (index < text.length && /[^{\\s]/.test(text[index])) {\n key += text[index];\n index++;\n }\n\n while (index < text.length && /\\s/.test(text[index])) index++;\n\n if (text[index] !== '{')\n throw new Error('Expected { after option key');\n index++; // skip {\n\n const value = parseNodes();\n\n if (text[index] !== '}')\n throw new Error('Expected } after option value');\n index++; // skip }\n\n options[key] = value;\n\n while (index < text.length && /\\s/.test(text[index])) index++;\n }\n\n index++; // skip closing argument }\n\n if (type === 'plural') {\n return { type: 'plural', name, options };\n } else if (type === 'select') {\n return { type: 'select', name, options };\n }\n } else {\n // Parse style for number/date/time\n let style = '';\n while (index < text.length && text[index] !== '}') {\n style += text[index];\n index++;\n }\n if (index >= text.length) throw new Error('Unclosed argument');\n\n style = style.trim();\n index++; // skip }\n\n return { type: 'argument', name, format: { type, style } };\n }\n }\n }\n\n throw new Error('Malformed argument');\n };\n\n return parseNodes();\n};\n\nconst i18nextNodesToIntlayer = (nodes: I18NextNode[]): any => {\n if (nodes.length === 0) return '';\n if (nodes.length === 1 && typeof nodes[0] === 'string') {\n const node = nodes[0];\n if (/<[a-zA-Z0-9-]+[^>]*>/.test(node)) {\n return html(node);\n }\n return node;\n }\n\n const canFlatten = nodes.every(\n (node) => typeof node === 'string' || node.type === 'argument'\n );\n\n if (canFlatten) {\n let str = '';\n for (const node of nodes) {\n if (typeof node === 'string') {\n str += node;\n } else if (typeof node !== 'string' && node.type === 'argument') {\n if (node.format) {\n // For formatted arguments, use ICU syntax: {name, type, style}\n str += `{${node.name}, ${node.format.type}${\n node.format.style ? `, ${node.format.style}` : ''\n }}`;\n } else {\n // For simple arguments, use standard i18next: {{name}}\n str += `{{${node.name}}}`;\n }\n }\n }\n if (/<[a-zA-Z0-9-]+[^>]*>/.test(str)) {\n return html(str);\n }\n return insert(str);\n }\n\n if (nodes.length === 1) {\n const node = nodes[0];\n if (typeof node === 'string') {\n if (/<[a-zA-Z0-9-]+[^>]*>/.test(node)) {\n return html(node);\n }\n return node;\n }\n\n if (node.type === 'argument') {\n if (node.format) {\n return insert(\n `{${node.name}, ${node.format.type}${\n node.format.style ? `, ${node.format.style}` : ''\n }}`\n );\n }\n return insert(`{{${node.name}}}`);\n }\n\n if (node.type === 'plural') {\n const options: Record<string, any> = {};\n for (const [key, val] of Object.entries(node.options)) {\n let newKey = key;\n if (key.startsWith('=')) {\n newKey = key.substring(1);\n } else if (key === 'one') {\n newKey = '1';\n } else if (key === 'two') {\n newKey = '2';\n } else if (key === 'few') {\n newKey = '<=3';\n } else if (key === 'many') {\n newKey = '>=4';\n } else if (key === 'other') {\n newKey = 'fallback';\n }\n // Handle # replacement\n const replacedVal = val.map((v) => {\n if (typeof v === 'string') {\n // In ICU plural, # is replaced by the number\n // In i18next, if using ICU plugin, it behaves same.\n // We map it to {{varName}} in Intlayer\n return v.replace(/#/g, `{{${node.name}}}`);\n }\n return v;\n });\n\n options[newKey] = i18nextNodesToIntlayer(replacedVal);\n }\n\n // Preserve variable name\n options.__intlayer_icu_var = node.name;\n\n return enu(options);\n }\n\n if (node.type === 'select') {\n const options: Record<string, any> = {};\n for (const [key, val] of Object.entries(node.options)) {\n options[key] = i18nextNodesToIntlayer(val);\n }\n\n // Check for gender\n const optionKeys = Object.keys(options);\n const isGender =\n (options.male || options.female) &&\n optionKeys.every((k) =>\n ['male', 'female', 'other', 'fallback'].includes(k)\n );\n\n if (isGender) {\n return gender({\n fallback: options.other,\n male: options.male,\n female: options.female,\n });\n }\n\n // Preserve variable name for generic select\n options.__intlayer_icu_var = node.name;\n\n return enu(options);\n }\n }\n\n return nodes.map((node) => i18nextNodesToIntlayer([node]));\n};\n\nconst i18nextToIntlayerPlugin = {\n canHandle: (node: any) =>\n typeof node === 'string' &&\n (node.includes('{') ||\n node.includes('}') ||\n /<[a-zA-Z0-9-]+[^>]*>/.test(node)),\n transform: (node: any) => {\n try {\n const ast = parseI18Next(node);\n return i18nextNodesToIntlayer(ast);\n } catch {\n return node;\n }\n },\n};\n\nconst intlayerToI18nextPlugin = {\n canHandle: (node: any) => {\n if (typeof node === 'string') return true;\n\n if (\n node &&\n typeof node === 'object' &&\n (node.nodeType === NodeTypes.INSERTION ||\n node.nodeType === NodeTypes.HTML ||\n node.nodeType === NodeTypes.ENUMERATION ||\n node.nodeType === NodeTypes.GENDER ||\n node.nodeType === 'composite')\n ) {\n return true;\n }\n\n if (Array.isArray(node)) {\n if (node.length === 0) return false;\n\n let hasNode = false;\n let hasPlainObjectOrArray = false;\n\n for (const item of node) {\n if (typeof item === 'string') {\n } else if (\n item &&\n typeof item === 'object' &&\n (item.nodeType === NodeTypes.INSERTION ||\n item.nodeType === NodeTypes.HTML ||\n item.nodeType === NodeTypes.ENUMERATION ||\n item.nodeType === NodeTypes.GENDER ||\n item.nodeType === 'composite')\n ) {\n hasNode = true;\n } else {\n hasPlainObjectOrArray = true;\n }\n }\n\n // If it contains plain objects or nested arrays, it's a structural array\n if (hasPlainObjectOrArray) return false;\n // If it contains ONLY strings, it's a structural array, not a composite string\n if (!hasNode) return false;\n\n return true;\n }\n\n return false;\n },\n transform: (node: any, props: any, next: any) => {\n if (typeof node === 'string') {\n return node;\n }\n\n if (node.nodeType === NodeTypes.INSERTION) {\n if (node[NodeTypes.INSERTION].match(/\\{[^}]*,[^}]*\\}/)) {\n return node[NodeTypes.INSERTION];\n }\n return node[NodeTypes.INSERTION];\n }\n\n if (node.nodeType === NodeTypes.HTML) {\n return node[NodeTypes.HTML];\n }\n\n if (node.nodeType === NodeTypes.ENUMERATION) {\n const options = node[NodeTypes.ENUMERATION];\n\n const transformedOptions: Record<string, string> = {};\n for (const [key, val] of Object.entries(options)) {\n if (key === '__intlayer_icu_var') continue;\n const childVal = next(val, props);\n transformedOptions[key] =\n typeof childVal === 'string' ? childVal : JSON.stringify(childVal);\n }\n\n let varName = options.__intlayer_icu_var || 'count';\n\n if (!options.__intlayer_icu_var) {\n const fallbackVal =\n transformedOptions.fallback ||\n transformedOptions.other ||\n Object.values(transformedOptions)[0];\n\n const match =\n fallbackVal.match(/\\{\\{([a-zA-Z0-9_]+)\\}\\}/) ||\n fallbackVal.match(/\\{([a-zA-Z0-9_]+)\\}(?!,)/);\n if (match) {\n varName = match[1];\n }\n }\n\n const keys = Object.keys(transformedOptions);\n const pluralKeys = [\n '1',\n '2',\n '<=3',\n '>=4',\n 'fallback',\n 'other',\n 'zero',\n 'one',\n 'two',\n 'few',\n 'many',\n ];\n const isPlural = keys.every(\n (k) => pluralKeys.includes(k) || /^[<>=]?\\d+(\\.\\d+)?$/.test(k)\n );\n\n const parts = [];\n\n if (isPlural) {\n for (const [key, val] of Object.entries(transformedOptions)) {\n let icuKey = key;\n if (key === 'fallback') icuKey = 'other';\n else if (key === '<=3') icuKey = 'few';\n else if (key === '>=4') icuKey = 'many';\n else if (/^\\d+$/.test(key)) icuKey = `=${key}`;\n\n let strVal = val;\n\n strVal = strVal.replace(/\\{\\{([^}]+)\\}\\}/g, '{$1}');\n strVal = strVal.replace(new RegExp(`\\\\{${varName}\\\\}`, 'g'), '#');\n\n parts.push(`${icuKey} {${strVal}}`);\n }\n return `{${varName}, plural, ${parts.join(' ')}}`;\n } else {\n const entries = Object.entries(transformedOptions).sort(\n ([keyA], [keyB]) => {\n if (keyA === 'fallback' || keyA === 'other') return 1;\n if (keyB === 'fallback' || keyB === 'other') return -1;\n return 0;\n }\n );\n\n for (const [key, val] of entries) {\n let icuKey = key;\n if (key === 'fallback') icuKey = 'other';\n\n let strVal = val;\n strVal = strVal.replace(/\\{\\{([^}]+)\\}\\}/g, '{$1}');\n\n parts.push(`${icuKey} {${strVal}}`);\n }\n return `{${varName}, select, ${parts.join(' ')}}`;\n }\n }\n\n if (node.nodeType === NodeTypes.GENDER) {\n const options = node[NodeTypes.GENDER];\n const varName = 'gender';\n const parts = [];\n\n const entries = Object.entries(options).sort(([keyA], [keyB]) => {\n if (keyA === 'fallback') return 1;\n if (keyB === 'fallback') return -1;\n return 0;\n });\n\n for (const [key, val] of entries) {\n let icuKey = key;\n if (key === 'fallback') icuKey = 'other';\n\n const childVal = next(val, props);\n let strVal =\n typeof childVal === 'string' ? childVal : JSON.stringify(childVal);\n\n strVal = strVal.replace(/\\{\\{([^}]+)\\}\\}/g, '{$1}');\n parts.push(`${icuKey} {${strVal}}`);\n }\n return `{${varName}, select, ${parts.join(' ')}}`;\n }\n\n if (\n Array.isArray(node) ||\n (node.nodeType === 'composite' && Array.isArray(node.composite))\n ) {\n const arr = Array.isArray(node) ? node : node.composite;\n const items = arr.map((item: any) => next(item, props));\n return items.join('');\n }\n\n return next(node, props);\n },\n};\n\nexport const intlayerToI18nextFormatter = (\n message: Dictionary['content']\n): JsonValue => {\n return deepTransformNode(message, {\n dictionaryKey: 'i18next',\n keyPath: [],\n plugins: [{ id: 'i18next', ...intlayerToI18nextPlugin }],\n });\n};\n\nexport const i18nextToIntlayerFormatter = (\n message: JsonValue\n): Dictionary['content'] => {\n return deepTransformNode(message, {\n dictionaryKey: 'i18next',\n keyPath: [],\n plugins: [{ id: 'i18next', ...i18nextToIntlayerPlugin }],\n });\n};\n"],"mappings":"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"}
|
|
@@ -1 +1,5 @@
|
|
|
1
|
-
import{icuToIntlayerFormatter
|
|
1
|
+
import { icuToIntlayerFormatter, intlayerToICUFormatter } from "./ICU.mjs";
|
|
2
|
+
import { i18nextToIntlayerFormatter, intlayerToI18nextFormatter } from "./i18next.mjs";
|
|
3
|
+
import { intlayerToVueI18nFormatter, vueI18nToIntlayerFormatter } from "./vue-i18n.mjs";
|
|
4
|
+
|
|
5
|
+
export { i18nextToIntlayerFormatter, icuToIntlayerFormatter, intlayerToI18nextFormatter, intlayerToICUFormatter, intlayerToVueI18nFormatter, vueI18nToIntlayerFormatter };
|
|
@@ -1,3 +1,65 @@
|
|
|
1
|
-
import{enu as
|
|
2
|
-
|
|
1
|
+
import { enu as enumeration } from "../transpiler/enumeration/enumeration.mjs";
|
|
2
|
+
import { gender } from "../transpiler/gender/gender.mjs";
|
|
3
|
+
import { insert as insertion } from "../transpiler/insertion/insertion.mjs";
|
|
4
|
+
import { icuToIntlayerFormatter, intlayerToICUFormatter } from "./ICU.mjs";
|
|
5
|
+
|
|
6
|
+
//#region src/messageFormat/verify-icu-format.ts
|
|
7
|
+
/**
|
|
8
|
+
* Verification script to demonstrate ICU format conversion
|
|
9
|
+
* This script shows that Intlayer correctly converts {{var}} (internal format)
|
|
10
|
+
* to {var} (ICU format) when outputting.
|
|
11
|
+
*/
|
|
12
|
+
console.log("=== ICU Format Verification ===\n");
|
|
13
|
+
console.log("Test 1: Simple Interpolation");
|
|
14
|
+
console.log("Intlayer input:", insertion("Hello {{name}}"));
|
|
15
|
+
const test1 = intlayerToICUFormatter(insertion("Hello {{name}}"));
|
|
16
|
+
console.log("ICU output:", test1);
|
|
17
|
+
console.log("✓ Expected: Single braces {name}");
|
|
18
|
+
console.log("✓ Result:", test1.includes("{name}") && !test1.includes("{{name}}") ? "PASS" : "FAIL");
|
|
19
|
+
console.log();
|
|
20
|
+
console.log("Test 2: Formatted Variable");
|
|
21
|
+
console.log("Intlayer input:", insertion("Price: {amount, number, currency}"));
|
|
22
|
+
const test2 = intlayerToICUFormatter(insertion("Price: {amount, number, currency}"));
|
|
23
|
+
console.log("ICU output:", test2);
|
|
24
|
+
console.log("✓ Expected: Single braces {amount, number, currency}");
|
|
25
|
+
console.log("✓ Result:", test2.includes("{amount, number, currency}") ? "PASS" : "FAIL");
|
|
26
|
+
console.log();
|
|
27
|
+
console.log("Test 3: Plural with Variable");
|
|
28
|
+
const pluralInput = enumeration({
|
|
29
|
+
"0": "No items",
|
|
30
|
+
"1": "One item",
|
|
31
|
+
fallback: "{{count}} items"
|
|
32
|
+
});
|
|
33
|
+
console.log("Intlayer input:", JSON.stringify(pluralInput, null, 2));
|
|
34
|
+
const test3 = intlayerToICUFormatter(pluralInput);
|
|
35
|
+
console.log("ICU output:", test3);
|
|
36
|
+
console.log("✓ Expected: {count, plural, ...} with # for count");
|
|
37
|
+
console.log("✓ Result:", test3.includes("{count, plural,") && test3.includes("# items") && !test3.includes("{{") ? "PASS" : "FAIL");
|
|
38
|
+
console.log();
|
|
39
|
+
console.log("Test 4: Roundtrip Conversion (ICU → Intlayer → ICU)");
|
|
40
|
+
const original = "Hello {name}, you have {count, plural, =0 {no messages} =1 {one message} other {# messages}}";
|
|
41
|
+
console.log("Original ICU:", original);
|
|
42
|
+
const toIntlayer = icuToIntlayerFormatter(original);
|
|
43
|
+
console.log("Converted to Intlayer:", JSON.stringify(toIntlayer, null, 2));
|
|
44
|
+
const backToICU = intlayerToICUFormatter(toIntlayer);
|
|
45
|
+
console.log("Back to ICU:", backToICU);
|
|
46
|
+
console.log("✓ Expected: No {{...}} in output");
|
|
47
|
+
console.log("✓ Result:", !String(backToICU).includes("{{") ? "PASS" : "FAIL");
|
|
48
|
+
console.log();
|
|
49
|
+
console.log("Test 5: Gender with Nested Structures");
|
|
50
|
+
const test5 = intlayerToICUFormatter(gender({
|
|
51
|
+
male: "He has items",
|
|
52
|
+
female: "She has items",
|
|
53
|
+
fallback: "They have items"
|
|
54
|
+
}));
|
|
55
|
+
console.log("ICU output:", test5);
|
|
56
|
+
console.log("✓ Expected: Single braces only");
|
|
57
|
+
console.log("✓ Result:", !test5.includes("{{") ? "PASS" : "FAIL");
|
|
58
|
+
console.log();
|
|
59
|
+
console.log("=== Summary ===");
|
|
60
|
+
console.log("ICU MessageFormat uses single braces: {var}");
|
|
61
|
+
console.log("Intlayer internal format uses double braces: {{var}}");
|
|
62
|
+
console.log("The conversion between these formats is handled automatically.");
|
|
63
|
+
|
|
64
|
+
//#endregion
|
|
3
65
|
//# sourceMappingURL=verify-icu-format.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify-icu-format.mjs","names":["insert","enu"],"sources":["../../../src/messageFormat/verify-icu-format.ts"],"sourcesContent":["/**\n * Verification script to demonstrate ICU format conversion\n * This script shows that Intlayer correctly converts {{var}} (internal format)\n * to {var} (ICU format) when outputting.\n */\n\nimport { enu, gender, insert } from '../transpiler';\nimport { icuToIntlayerFormatter, intlayerToICUFormatter } from './ICU';\n\nconsole.log('=== ICU Format Verification ===\\n');\n\n// Test 1: Simple interpolation\nconsole.log('Test 1: Simple Interpolation');\nconsole.log('Intlayer input:', insert('Hello {{name}}'));\nconst test1 = intlayerToICUFormatter(insert('Hello {{name}}'));\nconsole.log('ICU output:', test1);\nconsole.log('✓ Expected: Single braces {name}');\nconsole.log(\n '✓ Result:',\n test1.includes('{name}') && !test1.includes('{{name}}') ? 'PASS' : 'FAIL'\n);\nconsole.log();\n\n// Test 2: Formatted variable\nconsole.log('Test 2: Formatted Variable');\nconsole.log('Intlayer input:', insert('Price: {amount, number, currency}'));\nconst test2 = intlayerToICUFormatter(\n insert('Price: {amount, number, currency}')\n);\nconsole.log('ICU output:', test2);\nconsole.log('✓ Expected: Single braces {amount, number, currency}');\nconsole.log(\n '✓ Result:',\n test2.includes('{amount, number, currency}') ? 'PASS' : 'FAIL'\n);\nconsole.log();\n\n// Test 3: Plural with variable\nconsole.log('Test 3: Plural with Variable');\nconst pluralInput = enu({\n '0': 'No items',\n '1': 'One item',\n fallback: '{{count}} items',\n});\nconsole.log('Intlayer input:', JSON.stringify(pluralInput, null, 2));\nconst test3 = intlayerToICUFormatter(pluralInput);\nconsole.log('ICU output:', test3);\nconsole.log('✓ Expected: {count, plural, ...} with # for count');\nconsole.log(\n '✓ Result:',\n test3.includes('{count, plural,') &&\n test3.includes('# items') &&\n !test3.includes('{{')\n ? 'PASS'\n : 'FAIL'\n);\nconsole.log();\n\n// Test 4: Roundtrip conversion\nconsole.log('Test 4: Roundtrip Conversion (ICU → Intlayer → ICU)');\nconst original =\n 'Hello {name}, you have {count, plural, =0 {no messages} =1 {one message} other {# messages}}';\nconsole.log('Original ICU:', original);\nconst toIntlayer = icuToIntlayerFormatter(original);\nconsole.log('Converted to Intlayer:', JSON.stringify(toIntlayer, null, 2));\nconst backToICU = intlayerToICUFormatter(toIntlayer);\nconsole.log('Back to ICU:', backToICU);\nconsole.log('✓ Expected: No {{...}} in output');\nconsole.log('✓ Result:', !String(backToICU).includes('{{') ? 'PASS' : 'FAIL');\nconsole.log();\n\n// Test 5: Gender with nested plural\nconsole.log('Test 5: Gender with Nested Structures');\nconst genderInput = gender({\n male: 'He has items',\n female: 'She has items',\n fallback: 'They have items',\n});\nconst test5 = intlayerToICUFormatter(genderInput);\nconsole.log('ICU output:', test5);\nconsole.log('✓ Expected: Single braces only');\nconsole.log('✓ Result:', !test5.includes('{{') ? 'PASS' : 'FAIL');\nconsole.log();\n\nconsole.log('=== Summary ===');\nconsole.log('ICU MessageFormat uses single braces: {var}');\nconsole.log('Intlayer internal format uses double braces: {{var}}');\nconsole.log('The conversion between these formats is handled automatically.');\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"verify-icu-format.mjs","names":["insert","enu"],"sources":["../../../src/messageFormat/verify-icu-format.ts"],"sourcesContent":["/**\n * Verification script to demonstrate ICU format conversion\n * This script shows that Intlayer correctly converts {{var}} (internal format)\n * to {var} (ICU format) when outputting.\n */\n\nimport { enu, gender, insert } from '../transpiler';\nimport { icuToIntlayerFormatter, intlayerToICUFormatter } from './ICU';\n\nconsole.log('=== ICU Format Verification ===\\n');\n\n// Test 1: Simple interpolation\nconsole.log('Test 1: Simple Interpolation');\nconsole.log('Intlayer input:', insert('Hello {{name}}'));\nconst test1 = intlayerToICUFormatter(insert('Hello {{name}}'));\nconsole.log('ICU output:', test1);\nconsole.log('✓ Expected: Single braces {name}');\nconsole.log(\n '✓ Result:',\n test1.includes('{name}') && !test1.includes('{{name}}') ? 'PASS' : 'FAIL'\n);\nconsole.log();\n\n// Test 2: Formatted variable\nconsole.log('Test 2: Formatted Variable');\nconsole.log('Intlayer input:', insert('Price: {amount, number, currency}'));\nconst test2 = intlayerToICUFormatter(\n insert('Price: {amount, number, currency}')\n);\nconsole.log('ICU output:', test2);\nconsole.log('✓ Expected: Single braces {amount, number, currency}');\nconsole.log(\n '✓ Result:',\n test2.includes('{amount, number, currency}') ? 'PASS' : 'FAIL'\n);\nconsole.log();\n\n// Test 3: Plural with variable\nconsole.log('Test 3: Plural with Variable');\nconst pluralInput = enu({\n '0': 'No items',\n '1': 'One item',\n fallback: '{{count}} items',\n});\nconsole.log('Intlayer input:', JSON.stringify(pluralInput, null, 2));\nconst test3 = intlayerToICUFormatter(pluralInput);\nconsole.log('ICU output:', test3);\nconsole.log('✓ Expected: {count, plural, ...} with # for count');\nconsole.log(\n '✓ Result:',\n test3.includes('{count, plural,') &&\n test3.includes('# items') &&\n !test3.includes('{{')\n ? 'PASS'\n : 'FAIL'\n);\nconsole.log();\n\n// Test 4: Roundtrip conversion\nconsole.log('Test 4: Roundtrip Conversion (ICU → Intlayer → ICU)');\nconst original =\n 'Hello {name}, you have {count, plural, =0 {no messages} =1 {one message} other {# messages}}';\nconsole.log('Original ICU:', original);\nconst toIntlayer = icuToIntlayerFormatter(original);\nconsole.log('Converted to Intlayer:', JSON.stringify(toIntlayer, null, 2));\nconst backToICU = intlayerToICUFormatter(toIntlayer);\nconsole.log('Back to ICU:', backToICU);\nconsole.log('✓ Expected: No {{...}} in output');\nconsole.log('✓ Result:', !String(backToICU).includes('{{') ? 'PASS' : 'FAIL');\nconsole.log();\n\n// Test 5: Gender with nested plural\nconsole.log('Test 5: Gender with Nested Structures');\nconst genderInput = gender({\n male: 'He has items',\n female: 'She has items',\n fallback: 'They have items',\n});\nconst test5 = intlayerToICUFormatter(genderInput);\nconsole.log('ICU output:', test5);\nconsole.log('✓ Expected: Single braces only');\nconsole.log('✓ Result:', !test5.includes('{{') ? 'PASS' : 'FAIL');\nconsole.log();\n\nconsole.log('=== Summary ===');\nconsole.log('ICU MessageFormat uses single braces: {var}');\nconsole.log('Intlayer internal format uses double braces: {{var}}');\nconsole.log('The conversion between these formats is handled automatically.');\n"],"mappings":";;;;;;;;;;;AASA,QAAQ,IAAI,oCAAoC;AAGhD,QAAQ,IAAI,+BAA+B;AAC3C,QAAQ,IAAI,mBAAmBA,UAAO,iBAAiB,CAAC;AACxD,MAAM,QAAQ,uBAAuBA,UAAO,iBAAiB,CAAC;AAC9D,QAAQ,IAAI,eAAe,MAAM;AACjC,QAAQ,IAAI,mCAAmC;AAC/C,QAAQ,IACN,aACA,MAAM,SAAS,SAAS,IAAI,CAAC,MAAM,SAAS,WAAW,GAAG,SAAS,OACpE;AACD,QAAQ,KAAK;AAGb,QAAQ,IAAI,6BAA6B;AACzC,QAAQ,IAAI,mBAAmBA,UAAO,oCAAoC,CAAC;AAC3E,MAAM,QAAQ,uBACZA,UAAO,oCAAoC,CAC5C;AACD,QAAQ,IAAI,eAAe,MAAM;AACjC,QAAQ,IAAI,uDAAuD;AACnE,QAAQ,IACN,aACA,MAAM,SAAS,6BAA6B,GAAG,SAAS,OACzD;AACD,QAAQ,KAAK;AAGb,QAAQ,IAAI,+BAA+B;AAC3C,MAAM,cAAcC,YAAI;CACtB,KAAK;CACL,KAAK;CACL,UAAU;CACX,CAAC;AACF,QAAQ,IAAI,mBAAmB,KAAK,UAAU,aAAa,MAAM,EAAE,CAAC;AACpE,MAAM,QAAQ,uBAAuB,YAAY;AACjD,QAAQ,IAAI,eAAe,MAAM;AACjC,QAAQ,IAAI,oDAAoD;AAChE,QAAQ,IACN,aACA,MAAM,SAAS,kBAAkB,IAC/B,MAAM,SAAS,UAAU,IACzB,CAAC,MAAM,SAAS,KAAK,GACnB,SACA,OACL;AACD,QAAQ,KAAK;AAGb,QAAQ,IAAI,sDAAsD;AAClE,MAAM,WACJ;AACF,QAAQ,IAAI,iBAAiB,SAAS;AACtC,MAAM,aAAa,uBAAuB,SAAS;AACnD,QAAQ,IAAI,0BAA0B,KAAK,UAAU,YAAY,MAAM,EAAE,CAAC;AAC1E,MAAM,YAAY,uBAAuB,WAAW;AACpD,QAAQ,IAAI,gBAAgB,UAAU;AACtC,QAAQ,IAAI,mCAAmC;AAC/C,QAAQ,IAAI,aAAa,CAAC,OAAO,UAAU,CAAC,SAAS,KAAK,GAAG,SAAS,OAAO;AAC7E,QAAQ,KAAK;AAGb,QAAQ,IAAI,wCAAwC;AAMpD,MAAM,QAAQ,uBALM,OAAO;CACzB,MAAM;CACN,QAAQ;CACR,UAAU;CACX,CAAC,CAC+C;AACjD,QAAQ,IAAI,eAAe,MAAM;AACjC,QAAQ,IAAI,iCAAiC;AAC7C,QAAQ,IAAI,aAAa,CAAC,MAAM,SAAS,KAAK,GAAG,SAAS,OAAO;AACjE,QAAQ,KAAK;AAEb,QAAQ,IAAI,kBAAkB;AAC9B,QAAQ,IAAI,8CAA8C;AAC1D,QAAQ,IAAI,uDAAuD;AACnE,QAAQ,IAAI,iEAAiE"}
|