@intlayer/core 8.11.0 → 8.11.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/dist/cjs/dictionaryManipulator/mergeDictionaries.cjs +0 -1
  2. package/dist/cjs/dictionaryManipulator/mergeDictionaries.cjs.map +1 -1
  3. package/dist/cjs/dictionaryManipulator/orderDictionaries.cjs +0 -1
  4. package/dist/cjs/dictionaryManipulator/orderDictionaries.cjs.map +1 -1
  5. package/dist/cjs/formatters/compact.cjs +0 -1
  6. package/dist/cjs/formatters/compact.cjs.map +1 -1
  7. package/dist/cjs/formatters/currency.cjs +0 -1
  8. package/dist/cjs/formatters/currency.cjs.map +1 -1
  9. package/dist/cjs/formatters/date.cjs +0 -1
  10. package/dist/cjs/formatters/date.cjs.map +1 -1
  11. package/dist/cjs/formatters/list.cjs +0 -1
  12. package/dist/cjs/formatters/list.cjs.map +1 -1
  13. package/dist/cjs/formatters/number.cjs +0 -1
  14. package/dist/cjs/formatters/number.cjs.map +1 -1
  15. package/dist/cjs/formatters/percentage.cjs +0 -1
  16. package/dist/cjs/formatters/percentage.cjs.map +1 -1
  17. package/dist/cjs/formatters/relativeTime.cjs +0 -1
  18. package/dist/cjs/formatters/relativeTime.cjs.map +1 -1
  19. package/dist/cjs/formatters/units.cjs +0 -1
  20. package/dist/cjs/formatters/units.cjs.map +1 -1
  21. package/dist/cjs/index.cjs +3 -1
  22. package/dist/cjs/interpreter/getCondition.cjs.map +1 -1
  23. package/dist/cjs/interpreter/getContent/getContent.cjs +0 -1
  24. package/dist/cjs/interpreter/getContent/getContent.cjs.map +1 -1
  25. package/dist/cjs/interpreter/getDictionary.cjs.map +1 -1
  26. package/dist/cjs/interpreter/getEnumeration.cjs.map +1 -1
  27. package/dist/cjs/interpreter/getGender.cjs.map +1 -1
  28. package/dist/cjs/interpreter/getIntlayer.cjs +0 -1
  29. package/dist/cjs/interpreter/getIntlayer.cjs.map +1 -1
  30. package/dist/cjs/interpreter/getNesting.cjs.map +1 -1
  31. package/dist/cjs/interpreter/getPlural.cjs.map +1 -1
  32. package/dist/cjs/interpreter/getTranslation.cjs.map +1 -1
  33. package/dist/cjs/localization/getBrowserLocale.cjs +0 -21
  34. package/dist/cjs/localization/getBrowserLocale.cjs.map +1 -1
  35. package/dist/cjs/localization/getLocale.cjs +0 -1
  36. package/dist/cjs/localization/getLocale.cjs.map +1 -1
  37. package/dist/cjs/localization/getLocalizedUrl.cjs +0 -1
  38. package/dist/cjs/localization/getLocalizedUrl.cjs.map +1 -1
  39. package/dist/cjs/localization/getPathWithoutLocale.cjs +0 -1
  40. package/dist/cjs/localization/getPathWithoutLocale.cjs.map +1 -1
  41. package/dist/cjs/localization/getPrefix.cjs +0 -1
  42. package/dist/cjs/localization/getPrefix.cjs.map +1 -1
  43. package/dist/cjs/localization/index.cjs +0 -1
  44. package/dist/cjs/localization/localeMapper.cjs +0 -1
  45. package/dist/cjs/localization/localeMapper.cjs.map +1 -1
  46. package/dist/cjs/localization/localeResolver.cjs +0 -1
  47. package/dist/cjs/localization/localeResolver.cjs.map +1 -1
  48. package/dist/cjs/markdown/compiler.cjs +53 -31
  49. package/dist/cjs/markdown/compiler.cjs.map +1 -1
  50. package/dist/cjs/markdown/index.cjs +2 -0
  51. package/dist/cjs/transpiler/condition/condition.cjs +0 -1
  52. package/dist/cjs/transpiler/condition/condition.cjs.map +1 -1
  53. package/dist/cjs/transpiler/enumeration/enumeration.cjs +0 -1
  54. package/dist/cjs/transpiler/enumeration/enumeration.cjs.map +1 -1
  55. package/dist/cjs/transpiler/file/file.cjs +0 -1
  56. package/dist/cjs/transpiler/file/file.cjs.map +1 -1
  57. package/dist/cjs/transpiler/gender/gender.cjs +0 -1
  58. package/dist/cjs/transpiler/gender/gender.cjs.map +1 -1
  59. package/dist/cjs/transpiler/html/html.cjs +0 -1
  60. package/dist/cjs/transpiler/html/html.cjs.map +1 -1
  61. package/dist/cjs/transpiler/insertion/insertion.cjs +0 -1
  62. package/dist/cjs/transpiler/insertion/insertion.cjs.map +1 -1
  63. package/dist/cjs/transpiler/markdown/markdown.cjs +0 -1
  64. package/dist/cjs/transpiler/markdown/markdown.cjs.map +1 -1
  65. package/dist/cjs/transpiler/nesting/nesting.cjs +0 -1
  66. package/dist/cjs/transpiler/nesting/nesting.cjs.map +1 -1
  67. package/dist/cjs/transpiler/plural/plural.cjs +0 -1
  68. package/dist/cjs/transpiler/plural/plural.cjs.map +1 -1
  69. package/dist/cjs/transpiler/translation/translation.cjs +0 -1
  70. package/dist/cjs/transpiler/translation/translation.cjs.map +1 -1
  71. package/dist/cjs/utils/index.cjs +1 -0
  72. package/dist/cjs/utils/intl.cjs +0 -1
  73. package/dist/cjs/utils/intl.cjs.map +1 -1
  74. package/dist/cjs/utils/localeStorage.cjs +21 -3
  75. package/dist/cjs/utils/localeStorage.cjs.map +1 -1
  76. package/dist/esm/index.mjs +4 -4
  77. package/dist/esm/interpreter/getCondition.mjs.map +1 -1
  78. package/dist/esm/interpreter/getContent/getContent.mjs.map +1 -1
  79. package/dist/esm/interpreter/getDictionary.mjs.map +1 -1
  80. package/dist/esm/interpreter/getEnumeration.mjs.map +1 -1
  81. package/dist/esm/interpreter/getGender.mjs.map +1 -1
  82. package/dist/esm/interpreter/getIntlayer.mjs.map +1 -1
  83. package/dist/esm/interpreter/getNesting.mjs.map +1 -1
  84. package/dist/esm/interpreter/getPlural.mjs.map +1 -1
  85. package/dist/esm/interpreter/getTranslation.mjs.map +1 -1
  86. package/dist/esm/localization/getBrowserLocale.mjs +1 -20
  87. package/dist/esm/localization/getBrowserLocale.mjs.map +1 -1
  88. package/dist/esm/localization/index.mjs +2 -2
  89. package/dist/esm/markdown/compiler.mjs +44 -24
  90. package/dist/esm/markdown/compiler.mjs.map +1 -1
  91. package/dist/esm/markdown/index.mjs +2 -2
  92. package/dist/esm/utils/index.mjs +2 -2
  93. package/dist/esm/utils/localeStorage.mjs +20 -2
  94. package/dist/esm/utils/localeStorage.mjs.map +1 -1
  95. package/dist/types/index.d.ts +4 -4
  96. package/dist/types/interpreter/getCondition.d.ts +1 -1
  97. package/dist/types/interpreter/getCondition.d.ts.map +1 -1
  98. package/dist/types/interpreter/getContent/getContent.d.ts +1 -1
  99. package/dist/types/interpreter/getContent/getContent.d.ts.map +1 -1
  100. package/dist/types/interpreter/getDictionary.d.ts +1 -1
  101. package/dist/types/interpreter/getDictionary.d.ts.map +1 -1
  102. package/dist/types/interpreter/getEnumeration.d.ts +2 -2
  103. package/dist/types/interpreter/getEnumeration.d.ts.map +1 -1
  104. package/dist/types/interpreter/getGender.d.ts +1 -1
  105. package/dist/types/interpreter/getGender.d.ts.map +1 -1
  106. package/dist/types/interpreter/getIntlayer.d.ts +1 -1
  107. package/dist/types/interpreter/getIntlayer.d.ts.map +1 -1
  108. package/dist/types/interpreter/getNesting.d.ts +1 -1
  109. package/dist/types/interpreter/getNesting.d.ts.map +1 -1
  110. package/dist/types/interpreter/getPlural.d.ts +1 -1
  111. package/dist/types/interpreter/getPlural.d.ts.map +1 -1
  112. package/dist/types/interpreter/getTranslation.d.ts +1 -1
  113. package/dist/types/interpreter/getTranslation.d.ts.map +1 -1
  114. package/dist/types/localization/getBrowserLocale.d.ts +1 -3
  115. package/dist/types/localization/getBrowserLocale.d.ts.map +1 -1
  116. package/dist/types/localization/getPrefix.d.ts +5 -5
  117. package/dist/types/localization/getPrefix.d.ts.map +1 -1
  118. package/dist/types/localization/index.d.ts +2 -2
  119. package/dist/types/markdown/compiler.d.ts +12 -1
  120. package/dist/types/markdown/compiler.d.ts.map +1 -1
  121. package/dist/types/markdown/index.d.ts +2 -2
  122. package/dist/types/utils/index.d.ts +2 -2
  123. package/dist/types/utils/localeStorage.d.ts +2 -1
  124. package/dist/types/utils/localeStorage.d.ts.map +1 -1
  125. package/package.json +7 -7
@@ -1 +1 @@
1
- {"version":3,"file":"compiler.mjs","names":["defaultSlugify","defaultSanitizer"],"sources":["../../../src/markdown/compiler.ts"],"sourcesContent":["import {\n ATTR_EXTRACTOR_R,\n ATTRIBUTE_TO_NODE_PROP_MAP,\n BLOCK_END_R,\n BLOCKQUOTE_ALERT_R,\n BLOCKQUOTE_R,\n BLOCKQUOTE_TRIM_LEFT_MULTILINE_R,\n BREAK_LINE_R,\n BREAK_THEMATIC_R,\n CODE_BLOCK_FENCED_R,\n CODE_BLOCK_R,\n CODE_INLINE_R,\n CONSECUTIVE_NEWLINE_R,\n CUSTOM_COMPONENT_R,\n DO_NOT_PROCESS_HTML_ELEMENTS,\n FOOTNOTE_R,\n FOOTNOTE_REFERENCE_R,\n FRONT_MATTER_R,\n GFM_TASK_R,\n HEADING_ATX_COMPLIANT_R,\n HEADING_R,\n HEADING_SETEXT_R,\n HTML_BLOCK_ELEMENT_R,\n HTML_CHAR_CODE_R,\n HTML_COMMENT_R,\n HTML_LEFT_TRIM_AMOUNT_R,\n HTML_SELF_CLOSING_ELEMENT_R,\n LINK_AUTOLINK_BARE_URL_R,\n LINK_AUTOLINK_R,\n LIST_LOOKBEHIND_R,\n type ListType,\n NAMED_CODES_TO_UNICODE,\n NP_TABLE_R,\n ORDERED,\n ORDERED_LIST_ITEM_PREFIX_R,\n ORDERED_LIST_ITEM_R,\n ORDERED_LIST_R,\n PARAGRAPH_R,\n Priority,\n REFERENCE_IMAGE_OR_LINK,\n REFERENCE_IMAGE_R,\n REFERENCE_LINK_R,\n RuleType,\n SHORTCODE_R,\n SHOULD_RENDER_AS_BLOCK_R,\n TEXT_BOLD_R,\n TEXT_EMPHASIZED_R,\n TEXT_ESCAPED_R,\n TEXT_MARKED_R,\n TEXT_PLAIN_R,\n TEXT_STRIKETHROUGHED_R,\n TRIM_STARTING_NEWLINES,\n UNORDERED,\n UNORDERED_LIST_ITEM_PREFIX_R,\n UNORDERED_LIST_ITEM_R,\n UNORDERED_LIST_R,\n} from './constants';\nimport { parserFor } from './parser';\nimport { createRenderer, renderFor } from './renderer';\nimport type {\n CompileOptions,\n ComponentOverrides as ComponentDefinition,\n HeadingNode,\n HTMLTag,\n MarkdownContext,\n MarkdownOptions,\n MarkdownRuntime,\n OrderedListNode,\n ParseState,\n Rule,\n Rules,\n TableNode,\n UnorderedListNode,\n} from './types';\nimport {\n allowInline,\n anyScopeRegex,\n attributeValueToNodePropValue,\n blockRegex,\n captureNothing,\n cx,\n sanitizer as defaultSanitizer,\n slugify as defaultSlugify,\n get,\n inlineRegex,\n normalizeAttributeKey,\n parseBlock,\n parseCaptureInline,\n parseInline,\n parseSimpleInline,\n parseTableAlign,\n parseTableCells,\n parseTableRow,\n renderNothing,\n simpleInlineRegex,\n some,\n startsWith,\n trimEnd,\n trimLeadingWhitespaceOutsideFences,\n unescapeString,\n unquote,\n} from './utils';\n\ntype CreateElementFunction = (\n tag: any,\n props: Record<string, any> | null,\n ...children: any[]\n) => unknown;\n\ntype FootnoteDef = { footnote: string; identifier: string };\n\nconst IMAGE_R = /^!\\[(.*?)\\]\\( *((?:\\([^)]*\\)|[^() ])*) *\"?([^)\"]*)?\"?\\)/;\nconst LINK_INSIDE =\n '(?:\\\\[[^\\\\[\\\\]]*(?:\\\\[[^\\\\[\\\\]]*\\\\][^\\\\[\\\\]]*)*\\\\]|[^\\\\[\\\\]])*';\nconst LINK_HREF_AND_TITLE =\n '\\\\s*<?((?:\\\\([^)]*\\\\)|[^\\\\s\\\\\\\\]|\\\\\\\\.)*?)>?(?:\\\\s+[\\'\"]([\\\\s\\\\S]*?)[\\'\"])?\\\\s*';\nconst LINK_R = new RegExp(\n `^\\\\[(${LINK_INSIDE})\\\\]\\\\(${LINK_HREF_AND_TITLE}\\\\)`\n);\n\nconst getTag = (tag: any, components: ComponentDefinition<any>): any => {\n if (typeof tag !== 'string') return tag;\n let override = get(components, tag);\n\n if (!override && typeof tag === 'string') {\n const lowercaseTag = tag.toLowerCase();\n // Try case-insensitive lookup\n const key = Object.keys(components).find(\n (k) => k.toLowerCase() === lowercaseTag\n );\n if (key) {\n override = get(components, key);\n }\n }\n\n if (!override) return tag;\n\n return override;\n};\n\nconst createElementFactory = (\n ctx: MarkdownContext<any>,\n options: MarkdownOptions\n): CreateElementFunction => {\n const { runtime, components = {} } = ctx;\n const filteredTags = options.tagfilter\n ? [\n 'title',\n 'textarea',\n 'style',\n 'xmp',\n 'iframe',\n 'noembed',\n 'noframes',\n 'script',\n 'plaintext',\n ]\n : [];\n\n return (\n tag: any,\n props: Record<string, any> | null,\n ...children: any[]\n ): unknown => {\n if (typeof tag === 'string' && filteredTags.includes(tag.toLowerCase())) {\n return null;\n }\n\n const isStringTag = typeof tag === 'string';\n\n const className = cx(props?.className, props?.class);\n\n const mergedProps: Record<string, any> = {};\n let classNameHandled = false;\n\n // Preserve attribute order while merging className\n if (props) {\n for (const key in props) {\n const value = props[key];\n\n if (value === undefined || value === null) continue;\n\n if (key === 'className' || key === 'class') {\n if (!classNameHandled) {\n if (className) mergedProps.className = className;\n classNameHandled = true;\n }\n } else {\n mergedProps[key] = value;\n }\n }\n }\n\n if (!classNameHandled && className) {\n mergedProps.className = className;\n }\n\n let finalProps = mergedProps;\n\n if (runtime.normalizeProps && isStringTag)\n finalProps = runtime.normalizeProps(tag as string, mergedProps);\n const component = getTag(tag, components);\n\n return runtime.createElement(\n component,\n finalProps,\n ...(children.length === 1 ? [children[0]] : children)\n );\n };\n};\n\nconst createRules = (\n createElement: CreateElementFunction,\n ctx: MarkdownContext<any>,\n options: MarkdownOptions,\n footnotes: FootnoteDef[],\n refs: Record<string, { target: string; title?: string }>,\n attrStringToMap: (tag: HTMLTag, str: string) => Record<string, any> | null,\n containsBlockSyntax: (input: string) => boolean,\n nonParagraphBlockSyntaxes: RegExp[]\n): Rules => {\n const slug = (input: string) => {\n if (process.env.NODE_ENV === 'test' && input === '中文') {\n const def = defaultSlugify(input);\n console.log('Slug check:', {\n input,\n ctxSlugify: !!ctx.slugify,\n defaultSlugifyResult: def,\n });\n }\n return ctx.slugify\n ? ctx.slugify(input, defaultSlugify)\n : defaultSlugify(input);\n };\n const sanitize = ctx.sanitizer ?? defaultSanitizer;\n const namedCodesToUnicode = ctx.namedCodesToUnicode\n ? { ...NAMED_CODES_TO_UNICODE, ...ctx.namedCodesToUnicode }\n : NAMED_CODES_TO_UNICODE;\n\n const generateListRule = (\n type: ListType\n ): Rule<OrderedListNode | UnorderedListNode> => {\n const ordered = type === ORDERED;\n const LIST_R = ordered ? ORDERED_LIST_R : UNORDERED_LIST_R;\n const LIST_ITEM_R = ordered ? ORDERED_LIST_ITEM_R : UNORDERED_LIST_ITEM_R;\n const LIST_ITEM_PREFIX_R = ordered\n ? ORDERED_LIST_ITEM_PREFIX_R\n : UNORDERED_LIST_ITEM_PREFIX_R;\n\n return {\n _qualify: (source) => LIST_ITEM_PREFIX_R.test(source),\n _match: allowInline((source, state) => {\n const isStartOfLine = LIST_LOOKBEHIND_R.exec(state.prevCapture ?? '');\n const isListAllowed = state.list ?? (!state.inline && !state.simple);\n\n if (isStartOfLine && isListAllowed) {\n const matchSource = (isStartOfLine[1] || '') + source;\n\n return LIST_R.exec(matchSource);\n }\n\n return null;\n }),\n _order: Priority.HIGH,\n _parse(capture, parse, state) {\n const bullet = capture[2];\n const startValue = ordered ? +bullet.slice(0, -1) : undefined;\n const items = capture[0]\n .replace(BLOCK_END_R, '\\n')\n .match(LIST_ITEM_R) as string[];\n\n if (!items) return { items: [], ordered, start: startValue } as any;\n\n let lastItemWasAParagraph = false;\n\n const result = items.map((item, i) => {\n const prefixCapture = LIST_ITEM_PREFIX_R.exec(item);\n const space = prefixCapture ? prefixCapture[0].length : 0;\n const spaceRegex = new RegExp(`^ {1,${space}}`, 'gm');\n const content = item\n .replace(spaceRegex, '')\n .replace(LIST_ITEM_PREFIX_R, '');\n const isLastItem = i === items.length - 1;\n const containsBlocks = content.indexOf('\\n\\n') !== -1;\n const thisItemIsAParagraph =\n containsBlocks || (isLastItem && lastItemWasAParagraph);\n lastItemWasAParagraph = thisItemIsAParagraph;\n\n const oldStateInline = state.inline;\n const oldStateList = state.list;\n state.list = true;\n\n let adjustedContent: string;\n\n if (thisItemIsAParagraph) {\n state.inline = false;\n adjustedContent = `${trimEnd(content)}\\n\\n`;\n } else {\n state.inline = true;\n adjustedContent = trimEnd(content);\n }\n\n const parsed = parse(adjustedContent, state);\n state.inline = oldStateInline;\n state.list = oldStateList;\n\n return parsed;\n });\n\n return { items: result, ordered, start: startValue } as any;\n },\n _render(node, output, state = {}) {\n const Tag = node.ordered ? 'ol' : 'ul';\n const props: Record<string, any> = { key: state.key };\n\n if (node.ordered && node.start != null) props.start = node.start;\n\n return createElement(\n Tag,\n props,\n ...node.items.map((item, i) =>\n createElement('li', { key: i }, output(item, state))\n )\n );\n },\n };\n };\n\n const matchParagraph = (\n source: string,\n state: ParseState\n ): RegExpMatchArray | null => {\n if (\n state.inline ||\n state.simple ||\n (state.inHTML &&\n source.indexOf('\\n\\n') === -1 &&\n state.prevCapture?.indexOf('\\n\\n') === -1)\n )\n return null;\n let start = 0;\n while (true) {\n const newlineIndex = source.indexOf('\\n', start);\n const line = source.slice(\n start,\n newlineIndex === -1 ? undefined : newlineIndex + 1\n );\n\n if (some(nonParagraphBlockSyntaxes, line)) break;\n\n if (newlineIndex === -1 || !line.trim()) break;\n start = newlineIndex + 1;\n }\n const match = source.slice(0, start);\n // Align with original simple-markdown behavior: capture the whole match including newlines\n\n if (match === '') return null;\n const captured = trimEnd(match);\n\n if (captured === '') return null;\n\n return [match, undefined, captured] as unknown as RegExpMatchArray;\n };\n\n const rules: Rules = {\n [RuleType.blockQuote]: {\n _qualify: ['>'],\n _match: blockRegex(BLOCKQUOTE_R),\n _order: Priority.HIGH,\n _parse(capture, parse, state) {\n const matchAlert = capture[0]\n .replace(BLOCKQUOTE_TRIM_LEFT_MULTILINE_R, '')\n .match(BLOCKQUOTE_ALERT_R);\n const alert = matchAlert?.[1];\n const content = matchAlert?.[2] ?? '';\n const hasNewline = content.indexOf('\\n') !== -1;\n const children = hasNewline\n ? parseBlock(parse, content, state)\n : parseInline(parse, content, state);\n\n return { alert, children };\n },\n _render(node, output, state = {}) {\n const props: Record<string, any> = { key: state.key };\n\n if (node.alert) {\n props.className = `markdown-alert-${slug(node.alert.toLowerCase())}`;\n node.children.unshift({\n attrs: {},\n children: [{ type: RuleType.text, text: node.alert }],\n noInnerParse: true,\n type: RuleType.htmlBlock,\n tag: 'header',\n } as any);\n }\n\n return createElement('blockquote', props, output(node.children, state));\n },\n },\n [RuleType.breakLine]: {\n _qualify: [' '],\n _match: anyScopeRegex(BREAK_LINE_R),\n _order: Priority.HIGH,\n _parse: captureNothing,\n _render(_, __, state = {}) {\n return createElement('br', { key: state.key });\n },\n },\n [RuleType.breakThematic]: {\n _qualify: ['--', '__', '**', '- ', '* ', '_ '],\n _match: blockRegex(BREAK_THEMATIC_R),\n _order: Priority.HIGH,\n _parse: captureNothing,\n _render(_, __, state = {}) {\n return createElement('hr', { key: state.key });\n },\n },\n [RuleType.codeBlock]: {\n _qualify: [' '],\n _match: blockRegex(CODE_BLOCK_R),\n _order: Priority.MAX,\n _parse(capture) {\n return {\n type: RuleType.codeBlock,\n lang: undefined,\n text: unescapeString(trimEnd(capture[0].replace(/^ {4}/gm, ''))),\n };\n },\n _render(node, _, state = {}) {\n const attrs = { ...((node as any).attrs ?? {}) } as Record<string, any>;\n const langClass = node.lang ? `lang-${node.lang}` : 'lang-plaintext';\n attrs.className = attrs.className\n ? `${attrs.className} ${langClass}`\n : langClass;\n\n if (node.lang && !attrs.lang) attrs.lang = node.lang;\n\n return createElement(\n 'pre',\n { key: state.key },\n createElement('code', attrs, node.text)\n );\n },\n },\n [RuleType.codeFenced]: {\n _qualify: ['```', '~~~'],\n _match: blockRegex(CODE_BLOCK_FENCED_R),\n _order: Priority.MAX,\n _parse(capture) {\n return {\n attrs: attrStringToMap('code', capture[3] ?? ''),\n lang: capture[2] || undefined,\n text: capture[4],\n type: RuleType.codeBlock,\n };\n },\n },\n [RuleType.codeInline]: {\n _qualify: ['`'],\n _match: simpleInlineRegex(CODE_INLINE_R),\n _order: Priority.LOW,\n _parse(capture) {\n return { text: unescapeString(capture[2]) };\n },\n _render(node, _, state = {}) {\n return createElement('code', { key: state.key }, node.text);\n },\n },\n [RuleType.footnote]: {\n _qualify: ['[^'],\n _match: blockRegex(FOOTNOTE_R),\n _order: Priority.MAX,\n _parse(capture) {\n footnotes.push({ footnote: capture[2], identifier: capture[1] });\n\n return {};\n },\n _render: renderNothing,\n },\n [RuleType.footnoteReference]: {\n _qualify: ['[^'],\n _match: inlineRegex(FOOTNOTE_REFERENCE_R),\n _order: Priority.HIGH,\n _parse(capture) {\n return { target: `#${slug(capture[1])}`, text: capture[1] };\n },\n _render(node, _, state = {}) {\n return createElement(\n 'a',\n {\n key: state.key,\n href: sanitize(node.target, 'a', 'href') ?? undefined,\n },\n createElement('sup', { key: state.key }, node.text)\n );\n },\n },\n [RuleType.gfmTask]: {\n _qualify: ['[ ]', '[x]'],\n _match: inlineRegex(GFM_TASK_R),\n _order: Priority.HIGH,\n _parse(capture) {\n return { completed: capture[1].toLowerCase() === 'x' };\n },\n _render(node, _, state = {}) {\n return createElement('input', {\n checked: node.completed,\n key: state.key,\n readOnly: true,\n type: 'checkbox',\n });\n },\n },\n [RuleType.heading]: {\n _qualify: ['#'],\n _match: blockRegex(\n options.enforceAtxHeadings ? HEADING_ATX_COMPLIANT_R : HEADING_R\n ),\n _order: Priority.HIGH,\n _parse(capture, parse, state) {\n return {\n children: parseInline(parse, capture[2], state),\n id: slug(capture[2]),\n level: capture[1].length as HeadingNode['level'],\n };\n },\n _render(node, output, state = {}) {\n return createElement(\n `h${node.level}` as HTMLTag,\n { id: node.id, key: state.key },\n output(node.children, state)\n );\n },\n },\n [RuleType.headingSetext]: {\n _qualify: (source) => {\n const nlIndex = source.indexOf('\\n');\n\n return (\n nlIndex > 0 &&\n nlIndex < source.length - 1 &&\n (source[nlIndex + 1] === '=' || source[nlIndex + 1] === '-')\n );\n },\n _match: blockRegex(HEADING_SETEXT_R),\n _order: Priority.MAX,\n _parse(capture, parse, state) {\n return {\n children: parseInline(parse, capture[1], state),\n level: capture[2] === '=' ? 1 : 2,\n type: RuleType.heading,\n };\n },\n },\n [RuleType.htmlBlock]: {\n _qualify: (source) => {\n if (options.disableParsingRawHTML) return false;\n\n const match = source.match(/^ *<([a-z][a-z0-9:-]*)\\b/i);\n if (!match) return false;\n const tag = match[1];\n\n return source.toLowerCase().indexOf(`</${tag.toLowerCase()}>`) !== -1;\n },\n _match: anyScopeRegex(HTML_BLOCK_ELEMENT_R),\n _order: Priority.HIGH,\n _parse(capture, parse, state) {\n const m = capture[3].match(HTML_LEFT_TRIM_AMOUNT_R);\n const whitespace = m?.[1] ?? '';\n const trimmed = trimLeadingWhitespaceOutsideFences(\n capture[3],\n whitespace\n );\n const parseFunc = containsBlockSyntax(trimmed)\n ? parseBlock\n : parseInline;\n const tagName = capture[1].trim();\n const noInnerParse =\n DO_NOT_PROCESS_HTML_ELEMENTS.indexOf(tagName.toLowerCase()) !== -1;\n const tag = (noInnerParse ? tagName.toLowerCase() : tagName) as HTMLTag;\n const ast: any = {\n attrs: attrStringToMap(tag, capture[2] ?? ''),\n noInnerParse,\n tag,\n };\n state.inAnchor = state.inAnchor || tagName.toLowerCase() === 'a';\n\n if (noInnerParse) {\n ast.text = capture[3];\n } else {\n const prevInHTML = state.inHTML;\n state.inHTML = true;\n ast.children = parseFunc(parse, trimmed, state);\n state.inHTML = prevInHTML;\n }\n state.inAnchor = false;\n\n return ast;\n },\n _render(node, output, state = {}) {\n return createElement(\n node.tag,\n { key: state.key, ...(node.attrs ?? {}) },\n node.text ?? (node.children ? output(node.children, state) : '')\n );\n },\n },\n [RuleType.htmlComment]: {\n _qualify: ['<!'],\n _match: anyScopeRegex(HTML_COMMENT_R),\n _order: Priority.HIGH,\n _parse: captureNothing,\n _render: renderNothing,\n },\n [RuleType.htmlSelfClosing]: {\n _qualify: (source) => {\n if (options.disableParsingRawHTML) return false;\n\n return /^ *<([a-zA-Z][a-zA-Z0-9:]*)[\\s>/]/.test(source);\n },\n _match: anyScopeRegex(HTML_SELF_CLOSING_ELEMENT_R),\n _order: Priority.HIGH,\n _parse(capture) {\n const tag = capture[1].trim() as HTMLTag;\n\n return { attrs: attrStringToMap(tag, capture[2] || ''), tag };\n },\n _render(node, _, state = {}) {\n return createElement(node.tag, {\n key: state.key,\n ...(node.attrs ?? {}),\n });\n },\n },\n [RuleType.customComponent]: {\n _qualify: (source) => /^ *<([A-Z][a-zA-Z0-9]*)/.test(source),\n _match: anyScopeRegex(CUSTOM_COMPONENT_R),\n _order: Priority.MAX,\n _parse(capture, parse, state) {\n const m = capture[3].match(HTML_LEFT_TRIM_AMOUNT_R);\n const whitespace = m?.[1] ?? '';\n const trimmed = trimLeadingWhitespaceOutsideFences(\n capture[3],\n whitespace\n );\n const parseFunc = containsBlockSyntax(trimmed)\n ? parseBlock\n : parseInline;\n const tag = capture[1].trim();\n const ast: any = {\n attrs: attrStringToMap(tag as HTMLTag, capture[2] ?? ''),\n noInnerParse: false,\n tag,\n };\n const prevInHTML = state.inHTML;\n state.inHTML = true;\n ast.children = parseFunc(parse, trimmed, state);\n state.inHTML = prevInHTML;\n\n return ast;\n },\n _render(node, output, state = {}) {\n return createElement(\n node.tag as HTMLTag,\n { key: state.key, ...(node.attrs ?? {}) },\n node.text ?? (node.children ? output(node.children, state) : '')\n );\n },\n },\n [RuleType.paragraph]: {\n _match: matchParagraph,\n _order: Priority.LOW,\n _parse: parseCaptureInline,\n _render(node, output, state = {}) {\n return createElement(\n 'p',\n { key: state.key },\n output(node.children, state)\n );\n },\n },\n [RuleType.image]: {\n _qualify: ['!['],\n _match: simpleInlineRegex(IMAGE_R),\n _order: Priority.HIGH,\n _parse(capture) {\n return {\n alt: unescapeString(capture[1]),\n target: unescapeString(capture[2]),\n title: unescapeString(capture[3]),\n };\n },\n _render(node, _, state = {}) {\n return createElement('img', {\n key: state.key,\n alt: node.alt ?? undefined,\n title: node.title ?? undefined,\n src: sanitize(node.target, 'img', 'src') ?? undefined,\n });\n },\n },\n [RuleType.link]: {\n _qualify: ['['],\n _match: inlineRegex(LINK_R),\n _order: Priority.LOW,\n _parse(capture, parse, state) {\n return {\n children: parseSimpleInline(parse, capture[1], state),\n target: unescapeString(capture[2]),\n title: unescapeString(capture[3]),\n };\n },\n _render(node, output, state = {}) {\n const sanitizedHref = sanitize(node.target, 'a', 'href');\n if (\n process.env.NODE_ENV === 'test' &&\n node.target.includes('javascript:')\n ) {\n console.log('Compiler sanitize result:', {\n target: node.target,\n sanitizedHref,\n finalHref: sanitizedHref ?? undefined,\n });\n }\n return createElement(\n 'a',\n {\n key: state.key,\n href: sanitizedHref ?? undefined,\n title: node.title ?? undefined,\n },\n output(node.children, state)\n );\n },\n },\n [RuleType.linkAngleBraceStyleDetector]: {\n _qualify: ['<'],\n _match: inlineRegex(LINK_AUTOLINK_R),\n _order: Priority.MAX,\n _parse(capture) {\n let target = capture[1];\n let isEmail = false;\n\n if (target.indexOf('@') !== -1 && target.indexOf('//') === -1) {\n isEmail = true;\n target = target.replace('mailto:', '');\n }\n\n return {\n children: [{ text: target, type: RuleType.text }],\n target: isEmail ? `mailto:${target}` : target,\n type: RuleType.link,\n };\n },\n },\n [RuleType.linkBareUrlDetector]: {\n _qualify: (source, state) =>\n !!(\n state.inline &&\n !state.inAnchor &&\n !options.disableAutoLink &&\n (startsWith(source, 'http://') || startsWith(source, 'https://'))\n ),\n _match: inlineRegex(LINK_AUTOLINK_BARE_URL_R),\n _order: Priority.MAX,\n _parse(capture) {\n return {\n children: [{ text: capture[1], type: RuleType.text }],\n target: capture[1],\n type: RuleType.link,\n };\n },\n },\n [RuleType.newlineCoalescer]: {\n _match: blockRegex(CONSECUTIVE_NEWLINE_R),\n _order: Priority.LOW,\n _parse: captureNothing,\n _render() {\n return '\\n';\n },\n },\n [RuleType.orderedList]: generateListRule(ORDERED),\n [RuleType.unorderedList]: generateListRule(UNORDERED),\n [RuleType.ref]: {\n _qualify: ['['],\n _match: anyScopeRegex(REFERENCE_IMAGE_OR_LINK),\n _order: Priority.MAX,\n _parse(capture) {\n refs[capture[1]] = { target: capture[2], title: capture[4] };\n\n return {};\n },\n _render: renderNothing,\n },\n [RuleType.refImage]: {\n _qualify: ['!['],\n _match: simpleInlineRegex(REFERENCE_IMAGE_R),\n _order: Priority.MAX,\n _parse(capture) {\n return {\n alt: capture[1] ? unescapeString(capture[1]) : undefined,\n ref: capture[2],\n };\n },\n _render(node, _, state = {}) {\n const ref = refs[node.ref];\n\n if (!ref) return null;\n\n return createElement('img', {\n key: state.key,\n alt: node.alt,\n src: sanitize(ref.target, 'img', 'src') ?? undefined,\n title: ref.title,\n });\n },\n },\n [RuleType.refLink]: {\n _qualify: (source) => source[0] === '[' && source.indexOf('](') === -1,\n _match: inlineRegex(REFERENCE_LINK_R),\n _order: Priority.MAX,\n _parse(capture, parse, state) {\n return {\n children: parseSimpleInline(parse, capture[1], state),\n fallbackChildren: capture[0],\n ref: capture[2],\n };\n },\n _render(node, output, state = {}) {\n const ref = refs[node.ref];\n\n if (!ref)\n return createElement(\n 'span',\n { key: state.key },\n node.fallbackChildren\n );\n\n return createElement(\n 'a',\n {\n key: state.key,\n href: sanitize(ref.target, 'a', 'href') ?? undefined,\n title: ref.title,\n },\n output(node.children, state)\n );\n },\n },\n [RuleType.table]: {\n _qualify: ['|'],\n _match: blockRegex(NP_TABLE_R),\n _order: Priority.HIGH,\n _parse(capture, parse, state) {\n state.inline = true;\n const align = capture[2] ? parseTableAlign(capture[2]) : [];\n const cells = capture[3]\n ? parseTableCells(capture[3], parse, state)\n : [];\n const header = parseTableRow(capture[1], parse, state, !!cells.length);\n state.inline = false;\n\n return cells.length\n ? { align, cells, header, type: RuleType.table }\n : { children: header.flat(), type: RuleType.paragraph };\n },\n _render(node, output, state = {}) {\n const table = node as TableNode;\n const getStyle = (i: number) =>\n table.align[i] && table.align[i] !== 'left'\n ? { textAlign: table.align[i] }\n : {};\n\n return createElement(\n 'table',\n { key: state.key },\n createElement(\n 'thead',\n null,\n createElement(\n 'tr',\n null,\n ...table.header.map((c, i) =>\n createElement(\n 'th',\n { key: i, style: getStyle(i) },\n output(c, state)\n )\n )\n )\n ),\n createElement(\n 'tbody',\n null,\n ...table.cells.map((row, i) =>\n createElement(\n 'tr',\n { key: i },\n ...row.map((c, j) =>\n createElement(\n 'td',\n { key: j, style: getStyle(j) },\n output(c, state)\n )\n )\n )\n )\n )\n );\n },\n },\n [RuleType.tableSeparator]: {\n _match: (source, state) =>\n state.inTable && source[0] === '|' ? /^\\|/.exec(source) : null,\n _order: Priority.HIGH,\n _parse() {\n return { type: RuleType.tableSeparator };\n },\n _render() {\n return ' | ';\n },\n },\n [RuleType.text]: {\n _match: allowInline((source, _state) => {\n const shortMatch = SHORTCODE_R.exec(source);\n\n if (shortMatch) return shortMatch;\n\n return TEXT_PLAIN_R.exec(source) || /^[\\s\\S]/.exec(source);\n }),\n _order: Priority.MIN,\n _parse(capture) {\n const text = capture[0];\n\n return {\n text:\n text.indexOf('&') === -1\n ? text\n : text.replace(HTML_CHAR_CODE_R, (f, i) => {\n if (i.startsWith('#x'))\n return String.fromCharCode(parseInt(i.slice(2), 16));\n if (i.startsWith('#'))\n return String.fromCharCode(parseInt(i.slice(1), 10));\n return namedCodesToUnicode[i] || f;\n }),\n };\n },\n _render(node) {\n return node.text;\n },\n },\n [RuleType.textBolded]: {\n _qualify: ['**', '__'],\n _match: simpleInlineRegex(TEXT_BOLD_R),\n _order: Priority.MED,\n _parse(capture, parse, state) {\n return { children: parse(capture[2], state) };\n },\n _render(node, output, state = {}) {\n return createElement(\n 'strong',\n { key: state.key },\n output(node.children, state)\n );\n },\n },\n [RuleType.textEmphasized]: {\n _qualify: ['*', '_'],\n _match: simpleInlineRegex(TEXT_EMPHASIZED_R),\n _order: Priority.LOW,\n _parse(capture, parse, state) {\n return { children: parse(capture[2], state) };\n },\n _render(node, output, state = {}) {\n return createElement(\n 'em',\n { key: state.key },\n output(node.children, state)\n );\n },\n },\n [RuleType.textEscaped]: {\n _qualify: ['\\\\'],\n _match: simpleInlineRegex(TEXT_ESCAPED_R),\n _order: Priority.HIGH,\n _parse(capture) {\n return { text: capture[1], type: RuleType.text };\n },\n },\n [RuleType.textMarked]: {\n _qualify: ['=='],\n _match: simpleInlineRegex(TEXT_MARKED_R),\n _order: Priority.LOW,\n _parse: parseCaptureInline,\n _render(node, output, state = {}) {\n return createElement(\n 'mark',\n { key: state.key },\n output(node.children, state)\n );\n },\n },\n [RuleType.textStrikethroughed]: {\n _qualify: ['~~'],\n _match: simpleInlineRegex(TEXT_STRIKETHROUGHED_R),\n _order: Priority.LOW,\n _parse: parseCaptureInline,\n _render(node, output, state = {}) {\n return createElement(\n 'del',\n { key: state.key },\n output(node.children, state)\n );\n },\n },\n };\n\n return rules;\n};\n\n// Removed compilerCache completely to avoid issues with props changes not invalidating cache\n// const compilerCache = new Map<string, unknown>();\n\nexport const compile = (\n markdown: string = '',\n ctx: MarkdownContext<any>,\n options: MarkdownOptions = {}\n): unknown => {\n // const cacheKey = JSON.stringify({\n // markdown,\n // options,\n // components: ctx.components ? Object.keys(ctx.components) : [],\n // });\n\n // if (compilerCache.has(cacheKey)) {\n // return compilerCache.get(cacheKey);\n // }\n\n const components = ctx.components ?? {};\n const slug = (input: string) => {\n if (process.env.NODE_ENV === 'test' && input === '中文') {\n const def = defaultSlugify(input);\n console.log('Slug check:', {\n input,\n ctxSlugify: !!ctx.slugify,\n defaultSlugifyResult: def,\n });\n }\n return ctx.slugify\n ? ctx.slugify(input, defaultSlugify)\n : defaultSlugify(input);\n };\n const createElement = createElementFactory(ctx, options);\n const footnotes: FootnoteDef[] = [];\n const refs: Record<string, { target: string; title?: string }> = {};\n\n const attrStringToMap = (\n tag: HTMLTag,\n str: string\n ): Record<string, any> | null => {\n if (!str?.trim()) return null;\n\n const attributes = str.match(ATTR_EXTRACTOR_R);\n\n if (!attributes) return null;\n\n return attributes.reduce((map: any, raw) => {\n const delimiterIdx = raw.indexOf('=');\n\n if (delimiterIdx !== -1) {\n const key = normalizeAttributeKey(raw.slice(0, delimiterIdx)).trim();\n const value = unquote(raw.slice(delimiterIdx + 1).trim());\n const mappedKey = ATTRIBUTE_TO_NODE_PROP_MAP[key] ?? key;\n\n if (mappedKey === 'ref') return map;\n map[mappedKey] = attributeValueToNodePropValue(\n tag,\n key,\n value,\n ctx.sanitizer ?? defaultSanitizer\n );\n\n if (\n typeof map[mappedKey] === 'string' &&\n (HTML_BLOCK_ELEMENT_R.test(map[mappedKey]) ||\n HTML_SELF_CLOSING_ELEMENT_R.test(map[mappedKey]))\n ) {\n map[mappedKey] = compileInner(map[mappedKey].trim());\n }\n } else if (raw !== 'style') {\n map[ATTRIBUTE_TO_NODE_PROP_MAP[raw] ?? raw] = true;\n }\n\n return map;\n }, {});\n };\n\n const nonParagraphBlockSyntaxes = [\n BLOCKQUOTE_R,\n CODE_BLOCK_FENCED_R,\n CODE_BLOCK_R,\n options.enforceAtxHeadings ? HEADING_ATX_COMPLIANT_R : HEADING_R,\n HEADING_SETEXT_R,\n NP_TABLE_R,\n ORDERED_LIST_R,\n UNORDERED_LIST_R,\n CUSTOM_COMPONENT_R,\n ];\n\n const containsBlockSyntax = (input: string): boolean => {\n const cleaned = input.replace(TRIM_STARTING_NEWLINES, '');\n const slice = cleaned.length > 2048 ? cleaned.slice(0, 2048) : cleaned;\n\n // A blank line unambiguously separates block-level elements\n if (slice.indexOf('\\n\\n') !== -1) return true;\n\n const syntaxes = options.disableParsingRawHTML\n ? nonParagraphBlockSyntaxes\n : [\n ...nonParagraphBlockSyntaxes,\n PARAGRAPH_R,\n HTML_BLOCK_ELEMENT_R,\n HTML_COMMENT_R,\n HTML_SELF_CLOSING_ELEMENT_R,\n CUSTOM_COMPONENT_R,\n ];\n\n return some(syntaxes as RegExp[], slice);\n };\n\n const baseRules = createRules(\n createElement,\n ctx,\n options,\n footnotes,\n refs,\n attrStringToMap,\n containsBlockSyntax,\n nonParagraphBlockSyntaxes\n );\n\n const rules = options.disableParsingRawHTML\n ? Object.keys(baseRules).reduce((acc, key) => {\n if (key !== RuleType.htmlBlock && key !== RuleType.htmlSelfClosing) {\n acc[key] = baseRules[key];\n }\n\n return acc;\n }, {} as Rules)\n : baseRules;\n\n const parser = parserFor(rules);\n const emitter = renderFor(createRenderer(rules, options.renderRule));\n\n const compileInner = (input: string): unknown => {\n const result = options.preserveFrontmatter\n ? input\n : input.replace(FRONT_MATTER_R, '');\n const inline =\n options.forceInline ||\n (!options.forceBlock &&\n SHOULD_RENDER_AS_BLOCK_R.test(\n result.replace(TRIM_STARTING_NEWLINES, '')\n ) === false);\n const arr = emitter(\n parser(\n inline\n ? result\n : `${trimEnd(result).replace(TRIM_STARTING_NEWLINES, '')}\\n\\n`,\n { inline }\n ),\n { inline }\n ) as unknown as any[];\n while (\n typeof arr[arr.length - 1] === 'string' &&\n !arr[arr.length - 1].trim()\n )\n arr.pop();\n\n if (options.wrapper === null) return arr;\n const wrapper = options.wrapper ?? (inline ? 'span' : 'div');\n\n if (arr.length > 1 || options.forceWrapper)\n return createElement(wrapper, { key: 'outer' }, arr);\n\n if (arr.length === 1) {\n const node = arr[0];\n\n if (typeof node === 'string') {\n const spanProps: Record<string, any> = { key: 'outer' };\n\n if (!inline && components) {\n const pOverrideProps = (get(components, 'p.props', {}) ??\n {}) as Record<string, any>;\n const mergedClassName = cx(\n spanProps.className,\n pOverrideProps.className\n );\n const finalSpanProps: Record<string, any> = {\n ...spanProps,\n ...pOverrideProps,\n };\n\n if (mergedClassName) finalSpanProps.className = mergedClassName;\n\n return createElement('span', finalSpanProps, node);\n }\n\n return createElement('span', spanProps, node);\n }\n\n return node;\n }\n\n return createElement(wrapper, { key: 'outer' }, null);\n };\n\n if (typeof markdown !== 'string') {\n if (process.env.NODE_ENV !== 'production') {\n console.error(\n 'intlayer: the first argument must be a string. Received',\n typeof markdown\n );\n }\n throw new Error('intlayer: the first argument must be a string');\n }\n\n const node = compileInner(markdown);\n\n const result = footnotes.length\n ? createElement(\n 'div',\n null,\n node,\n createElement(\n 'footer',\n { key: 'footer' },\n ...footnotes.map((def) =>\n createElement(\n 'div',\n { id: slug(def.identifier), key: def.identifier },\n def.identifier,\n emitter(parser(def.footnote, { inline: true }), { inline: true })\n )\n )\n )\n )\n : node;\n\n // compilerCache.set(cacheKey, result);\n\n return result;\n};\n\nexport const createCompiler =\n (ctx: MarkdownContext<any>) =>\n (markdown: string, options?: MarkdownOptions): unknown =>\n compile(markdown, ctx, options);\n\nexport const compileWithOptions = (\n markdown: string,\n runtime: MarkdownRuntime,\n options: CompileOptions<any> = {}\n): unknown => {\n const {\n components,\n namedCodesToUnicode,\n sanitizer,\n slugify,\n ...compilerOptions\n } = options;\n\n return compile(\n markdown,\n { runtime, components, namedCodesToUnicode, sanitizer, slugify },\n compilerOptions\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"compiler.mjs","names":["defaultSlugify","defaultSanitizer"],"sources":["../../../src/markdown/compiler.ts"],"sourcesContent":["import {\n ATTR_EXTRACTOR_R,\n ATTRIBUTE_TO_NODE_PROP_MAP,\n BLOCK_END_R,\n BLOCKQUOTE_ALERT_R,\n BLOCKQUOTE_R,\n BLOCKQUOTE_TRIM_LEFT_MULTILINE_R,\n BREAK_LINE_R,\n BREAK_THEMATIC_R,\n CODE_BLOCK_FENCED_R,\n CODE_BLOCK_R,\n CODE_INLINE_R,\n CONSECUTIVE_NEWLINE_R,\n CUSTOM_COMPONENT_R,\n DO_NOT_PROCESS_HTML_ELEMENTS,\n FOOTNOTE_R,\n FOOTNOTE_REFERENCE_R,\n FRONT_MATTER_R,\n GFM_TASK_R,\n HEADING_ATX_COMPLIANT_R,\n HEADING_R,\n HEADING_SETEXT_R,\n HTML_BLOCK_ELEMENT_R,\n HTML_CHAR_CODE_R,\n HTML_COMMENT_R,\n HTML_LEFT_TRIM_AMOUNT_R,\n HTML_SELF_CLOSING_ELEMENT_R,\n LINK_AUTOLINK_BARE_URL_R,\n LINK_AUTOLINK_R,\n LIST_LOOKBEHIND_R,\n type ListType,\n NAMED_CODES_TO_UNICODE,\n NP_TABLE_R,\n ORDERED,\n ORDERED_LIST_ITEM_PREFIX_R,\n ORDERED_LIST_ITEM_R,\n ORDERED_LIST_R,\n PARAGRAPH_R,\n Priority,\n REFERENCE_IMAGE_OR_LINK,\n REFERENCE_IMAGE_R,\n REFERENCE_LINK_R,\n RuleType,\n SHORTCODE_R,\n SHOULD_RENDER_AS_BLOCK_R,\n TEXT_BOLD_R,\n TEXT_EMPHASIZED_R,\n TEXT_ESCAPED_R,\n TEXT_MARKED_R,\n TEXT_PLAIN_R,\n TEXT_STRIKETHROUGHED_R,\n TRIM_STARTING_NEWLINES,\n UNORDERED,\n UNORDERED_LIST_ITEM_PREFIX_R,\n UNORDERED_LIST_ITEM_R,\n UNORDERED_LIST_R,\n} from './constants';\nimport { parserFor } from './parser';\nimport { createRenderer, renderFor } from './renderer';\nimport type {\n CompileOptions,\n ComponentOverrides as ComponentDefinition,\n HeadingNode,\n HTMLTag,\n MarkdownContext,\n MarkdownOptions,\n MarkdownRuntime,\n OrderedListNode,\n ParseState,\n Rule,\n Rules,\n TableNode,\n UnorderedListNode,\n} from './types';\nimport {\n allowInline,\n anyScopeRegex,\n attributeValueToNodePropValue,\n blockRegex,\n captureNothing,\n cx,\n sanitizer as defaultSanitizer,\n slugify as defaultSlugify,\n get,\n inlineRegex,\n normalizeAttributeKey,\n parseBlock,\n parseCaptureInline,\n parseInline,\n parseSimpleInline,\n parseTableAlign,\n parseTableCells,\n parseTableRow,\n renderNothing,\n simpleInlineRegex,\n some,\n startsWith,\n trimEnd,\n trimLeadingWhitespaceOutsideFences,\n unescapeString,\n unquote,\n} from './utils';\n\ntype CreateElementFunction = (\n tag: any,\n props: Record<string, any> | null,\n ...children: any[]\n) => unknown;\n\ntype FootnoteDef = { footnote: string; identifier: string };\n\nconst IMAGE_R = /^!\\[(.*?)\\]\\( *((?:\\([^)]*\\)|[^() ])*) *\"?([^)\"]*)?\"?\\)/;\nconst LINK_INSIDE =\n '(?:\\\\[[^\\\\[\\\\]]*(?:\\\\[[^\\\\[\\\\]]*\\\\][^\\\\[\\\\]]*)*\\\\]|[^\\\\[\\\\]])*';\nconst LINK_HREF_AND_TITLE =\n '\\\\s*<?((?:\\\\([^)]*\\\\)|[^\\\\s\\\\\\\\]|\\\\\\\\.)*?)>?(?:\\\\s+[\\'\"]([\\\\s\\\\S]*?)[\\'\"])?\\\\s*';\nconst LINK_R = new RegExp(\n `^\\\\[(${LINK_INSIDE})\\\\]\\\\(${LINK_HREF_AND_TITLE}\\\\)`\n);\n\nconst getTag = (tag: any, components: ComponentDefinition<any>): any => {\n if (typeof tag !== 'string') return tag;\n let override = get(components, tag);\n\n if (!override && typeof tag === 'string') {\n const lowercaseTag = tag.toLowerCase();\n // Try case-insensitive lookup\n const key = Object.keys(components).find(\n (k) => k.toLowerCase() === lowercaseTag\n );\n if (key) {\n override = get(components, key);\n }\n }\n\n if (!override) return tag;\n\n return override;\n};\n\nconst createElementFactory = (\n ctx: MarkdownContext<any>,\n options: MarkdownOptions\n): CreateElementFunction => {\n const { runtime, components = {} } = ctx;\n const filteredTags = options.tagfilter\n ? [\n 'title',\n 'textarea',\n 'style',\n 'xmp',\n 'iframe',\n 'noembed',\n 'noframes',\n 'script',\n 'plaintext',\n ]\n : [];\n\n return (\n tag: any,\n props: Record<string, any> | null,\n ...children: any[]\n ): unknown => {\n if (typeof tag === 'string' && filteredTags.includes(tag.toLowerCase())) {\n return null;\n }\n\n const isStringTag = typeof tag === 'string';\n\n const className = cx(props?.className, props?.class);\n\n const mergedProps: Record<string, any> = {};\n let classNameHandled = false;\n\n // Preserve attribute order while merging className\n if (props) {\n for (const key in props) {\n const value = props[key];\n\n if (value === undefined || value === null) continue;\n\n if (key === 'className' || key === 'class') {\n if (!classNameHandled) {\n if (className) mergedProps.className = className;\n classNameHandled = true;\n }\n } else {\n mergedProps[key] = value;\n }\n }\n }\n\n if (!classNameHandled && className) {\n mergedProps.className = className;\n }\n\n let finalProps = mergedProps;\n\n if (runtime.normalizeProps && isStringTag)\n finalProps = runtime.normalizeProps(tag as string, mergedProps);\n const component = getTag(tag, components);\n\n return runtime.createElement(\n component,\n finalProps,\n ...(children.length === 1 ? [children[0]] : children)\n );\n };\n};\n\nconst createRules = (\n createElement: CreateElementFunction,\n ctx: MarkdownContext<any>,\n options: MarkdownOptions,\n footnotes: FootnoteDef[],\n refs: Record<string, { target: string; title?: string }>,\n attrStringToMap: (tag: HTMLTag, str: string) => Record<string, any> | null,\n containsBlockSyntax: (input: string) => boolean,\n nonParagraphBlockSyntaxes: RegExp[]\n): Rules => {\n const slug = (input: string) => {\n if (process.env.NODE_ENV === 'test' && input === '中文') {\n const def = defaultSlugify(input);\n console.log('Slug check:', {\n input,\n ctxSlugify: !!ctx.slugify,\n defaultSlugifyResult: def,\n });\n }\n return ctx.slugify\n ? ctx.slugify(input, defaultSlugify)\n : defaultSlugify(input);\n };\n const sanitize = ctx.sanitizer ?? defaultSanitizer;\n const namedCodesToUnicode = ctx.namedCodesToUnicode\n ? { ...NAMED_CODES_TO_UNICODE, ...ctx.namedCodesToUnicode }\n : NAMED_CODES_TO_UNICODE;\n\n const generateListRule = (\n type: ListType\n ): Rule<OrderedListNode | UnorderedListNode> => {\n const ordered = type === ORDERED;\n const LIST_R = ordered ? ORDERED_LIST_R : UNORDERED_LIST_R;\n const LIST_ITEM_R = ordered ? ORDERED_LIST_ITEM_R : UNORDERED_LIST_ITEM_R;\n const LIST_ITEM_PREFIX_R = ordered\n ? ORDERED_LIST_ITEM_PREFIX_R\n : UNORDERED_LIST_ITEM_PREFIX_R;\n\n return {\n _qualify: (source) => LIST_ITEM_PREFIX_R.test(source),\n _match: allowInline((source, state) => {\n const isStartOfLine = LIST_LOOKBEHIND_R.exec(state.prevCapture ?? '');\n const isListAllowed = state.list ?? (!state.inline && !state.simple);\n\n if (isStartOfLine && isListAllowed) {\n const matchSource = (isStartOfLine[1] || '') + source;\n\n return LIST_R.exec(matchSource);\n }\n\n return null;\n }),\n _order: Priority.HIGH,\n _parse(capture, parse, state) {\n const bullet = capture[2];\n const startValue = ordered ? +bullet.slice(0, -1) : undefined;\n const items = capture[0]\n .replace(BLOCK_END_R, '\\n')\n .match(LIST_ITEM_R) as string[];\n\n if (!items) return { items: [], ordered, start: startValue } as any;\n\n let lastItemWasAParagraph = false;\n\n const result = items.map((item, i) => {\n const prefixCapture = LIST_ITEM_PREFIX_R.exec(item);\n const space = prefixCapture ? prefixCapture[0].length : 0;\n const spaceRegex = new RegExp(`^ {1,${space}}`, 'gm');\n const content = item\n .replace(spaceRegex, '')\n .replace(LIST_ITEM_PREFIX_R, '');\n const isLastItem = i === items.length - 1;\n const containsBlocks = content.indexOf('\\n\\n') !== -1;\n const thisItemIsAParagraph =\n containsBlocks || (isLastItem && lastItemWasAParagraph);\n lastItemWasAParagraph = thisItemIsAParagraph;\n\n const oldStateInline = state.inline;\n const oldStateList = state.list;\n state.list = true;\n\n let adjustedContent: string;\n\n if (thisItemIsAParagraph) {\n state.inline = false;\n adjustedContent = `${trimEnd(content)}\\n\\n`;\n } else {\n state.inline = true;\n adjustedContent = trimEnd(content);\n }\n\n const parsed = parse(adjustedContent, state);\n state.inline = oldStateInline;\n state.list = oldStateList;\n\n return parsed;\n });\n\n return { items: result, ordered, start: startValue } as any;\n },\n _render(node, output, state = {}) {\n const Tag = node.ordered ? 'ol' : 'ul';\n const props: Record<string, any> = { key: state.key };\n\n if (node.ordered && node.start != null) props.start = node.start;\n\n return createElement(\n Tag,\n props,\n ...node.items.map((item, i) =>\n createElement('li', { key: i }, output(item, state))\n )\n );\n },\n };\n };\n\n const matchParagraph = (\n source: string,\n state: ParseState\n ): RegExpMatchArray | null => {\n if (\n state.inline ||\n state.simple ||\n (state.inHTML &&\n source.indexOf('\\n\\n') === -1 &&\n state.prevCapture?.indexOf('\\n\\n') === -1)\n )\n return null;\n let start = 0;\n while (true) {\n const newlineIndex = source.indexOf('\\n', start);\n const line = source.slice(\n start,\n newlineIndex === -1 ? undefined : newlineIndex + 1\n );\n\n if (some(nonParagraphBlockSyntaxes, line)) break;\n\n if (newlineIndex === -1 || !line.trim()) break;\n start = newlineIndex + 1;\n }\n const match = source.slice(0, start);\n // Align with original simple-markdown behavior: capture the whole match including newlines\n\n if (match === '') return null;\n const captured = trimEnd(match);\n\n if (captured === '') return null;\n\n return [match, undefined, captured] as unknown as RegExpMatchArray;\n };\n\n const rules: Rules = {\n [RuleType.blockQuote]: {\n _qualify: ['>'],\n _match: blockRegex(BLOCKQUOTE_R),\n _order: Priority.HIGH,\n _parse(capture, parse, state) {\n const matchAlert = capture[0]\n .replace(BLOCKQUOTE_TRIM_LEFT_MULTILINE_R, '')\n .match(BLOCKQUOTE_ALERT_R);\n const alert = matchAlert?.[1];\n const content = matchAlert?.[2] ?? '';\n const hasNewline = content.indexOf('\\n') !== -1;\n const children = hasNewline\n ? parseBlock(parse, content, state)\n : parseInline(parse, content, state);\n\n return { alert, children };\n },\n _render(node, output, state = {}) {\n const props: Record<string, any> = { key: state.key };\n\n if (node.alert) {\n props.className = `markdown-alert-${slug(node.alert.toLowerCase())}`;\n node.children.unshift({\n attrs: {},\n children: [{ type: RuleType.text, text: node.alert }],\n noInnerParse: true,\n type: RuleType.htmlBlock,\n tag: 'header',\n } as any);\n }\n\n return createElement('blockquote', props, output(node.children, state));\n },\n },\n [RuleType.breakLine]: {\n _qualify: [' '],\n _match: anyScopeRegex(BREAK_LINE_R),\n _order: Priority.HIGH,\n _parse: captureNothing,\n _render(_, __, state = {}) {\n return createElement('br', { key: state.key });\n },\n },\n [RuleType.breakThematic]: {\n _qualify: ['--', '__', '**', '- ', '* ', '_ '],\n _match: blockRegex(BREAK_THEMATIC_R),\n _order: Priority.HIGH,\n _parse: captureNothing,\n _render(_, __, state = {}) {\n return createElement('hr', { key: state.key });\n },\n },\n [RuleType.codeBlock]: {\n _qualify: [' '],\n _match: blockRegex(CODE_BLOCK_R),\n _order: Priority.MAX,\n _parse(capture) {\n return {\n type: RuleType.codeBlock,\n lang: undefined,\n text: unescapeString(trimEnd(capture[0].replace(/^ {4}/gm, ''))),\n };\n },\n _render(node, _, state = {}) {\n const attrs = { ...((node as any).attrs ?? {}) } as Record<string, any>;\n const langClass = node.lang ? `lang-${node.lang}` : 'lang-plaintext';\n attrs.className = attrs.className\n ? `${attrs.className} ${langClass}`\n : langClass;\n\n return createElement(\n 'pre',\n { key: state.key },\n createElement('code', attrs, node.text)\n );\n },\n },\n [RuleType.codeFenced]: {\n _qualify: ['```', '~~~'],\n _match: blockRegex(CODE_BLOCK_FENCED_R),\n _order: Priority.MAX,\n _parse(capture) {\n return {\n attrs: attrStringToMap('code', capture[3] ?? ''),\n lang: capture[2] || undefined,\n text: capture[4],\n type: RuleType.codeBlock,\n };\n },\n },\n [RuleType.codeInline]: {\n _qualify: ['`'],\n _match: simpleInlineRegex(CODE_INLINE_R),\n _order: Priority.LOW,\n _parse(capture) {\n return { text: unescapeString(capture[2]) };\n },\n _render(node, _, state = {}) {\n return createElement('code', { key: state.key }, node.text);\n },\n },\n [RuleType.footnote]: {\n _qualify: ['[^'],\n _match: blockRegex(FOOTNOTE_R),\n _order: Priority.MAX,\n _parse(capture) {\n footnotes.push({ footnote: capture[2], identifier: capture[1] });\n\n return {};\n },\n _render: renderNothing,\n },\n [RuleType.footnoteReference]: {\n _qualify: ['[^'],\n _match: inlineRegex(FOOTNOTE_REFERENCE_R),\n _order: Priority.HIGH,\n _parse(capture) {\n return { target: `#${slug(capture[1])}`, text: capture[1] };\n },\n _render(node, _, state = {}) {\n return createElement(\n 'a',\n {\n key: state.key,\n href: sanitize(node.target, 'a', 'href') ?? undefined,\n },\n createElement('sup', { key: state.key }, node.text)\n );\n },\n },\n [RuleType.gfmTask]: {\n _qualify: ['[ ]', '[x]'],\n _match: inlineRegex(GFM_TASK_R),\n _order: Priority.HIGH,\n _parse(capture) {\n return { completed: capture[1].toLowerCase() === 'x' };\n },\n _render(node, _, state = {}) {\n return createElement('input', {\n checked: node.completed,\n key: state.key,\n readOnly: true,\n type: 'checkbox',\n });\n },\n },\n [RuleType.heading]: {\n _qualify: ['#'],\n _match: blockRegex(\n options.enforceAtxHeadings ? HEADING_ATX_COMPLIANT_R : HEADING_R\n ),\n _order: Priority.HIGH,\n _parse(capture, parse, state) {\n return {\n children: parseInline(parse, capture[2], state),\n id: slug(capture[2]),\n level: capture[1].length as HeadingNode['level'],\n };\n },\n _render(node, output, state = {}) {\n return createElement(\n `h${node.level}` as HTMLTag,\n { id: node.id, key: state.key },\n output(node.children, state)\n );\n },\n },\n [RuleType.headingSetext]: {\n _qualify: (source) => {\n const nlIndex = source.indexOf('\\n');\n\n return (\n nlIndex > 0 &&\n nlIndex < source.length - 1 &&\n (source[nlIndex + 1] === '=' || source[nlIndex + 1] === '-')\n );\n },\n _match: blockRegex(HEADING_SETEXT_R),\n _order: Priority.MAX,\n _parse(capture, parse, state) {\n return {\n children: parseInline(parse, capture[1], state),\n level: capture[2] === '=' ? 1 : 2,\n type: RuleType.heading,\n };\n },\n },\n [RuleType.htmlBlock]: {\n _qualify: (source) => {\n if (options.disableParsingRawHTML) return false;\n\n const match = source.match(/^ *<([a-z][a-z0-9:-]*)\\b/i);\n if (!match) return false;\n const tag = match[1];\n\n return source.toLowerCase().indexOf(`</${tag.toLowerCase()}>`) !== -1;\n },\n _match: anyScopeRegex(HTML_BLOCK_ELEMENT_R),\n _order: Priority.HIGH,\n _parse(capture, parse, state) {\n const m = capture[3].match(HTML_LEFT_TRIM_AMOUNT_R);\n const whitespace = m?.[1] ?? '';\n const trimmed = trimLeadingWhitespaceOutsideFences(\n capture[3],\n whitespace\n );\n const parseFunc = containsBlockSyntax(trimmed)\n ? parseBlock\n : parseInline;\n const tagName = capture[1].trim();\n const noInnerParse =\n DO_NOT_PROCESS_HTML_ELEMENTS.indexOf(tagName.toLowerCase()) !== -1;\n const tag = (noInnerParse ? tagName.toLowerCase() : tagName) as HTMLTag;\n const ast: any = {\n attrs: attrStringToMap(tag, capture[2] ?? ''),\n noInnerParse,\n tag,\n };\n state.inAnchor = state.inAnchor || tagName.toLowerCase() === 'a';\n\n if (noInnerParse) {\n ast.text = capture[3];\n } else {\n const prevInHTML = state.inHTML;\n state.inHTML = true;\n ast.children = parseFunc(parse, trimmed, state);\n state.inHTML = prevInHTML;\n }\n state.inAnchor = false;\n\n return ast;\n },\n _render(node, output, state = {}) {\n return createElement(\n node.tag,\n { key: state.key, ...(node.attrs ?? {}) },\n node.text ?? (node.children ? output(node.children, state) : '')\n );\n },\n },\n [RuleType.htmlComment]: {\n _qualify: ['<!'],\n _match: anyScopeRegex(HTML_COMMENT_R),\n _order: Priority.HIGH,\n _parse: captureNothing,\n _render: renderNothing,\n },\n [RuleType.htmlSelfClosing]: {\n _qualify: (source) => {\n if (options.disableParsingRawHTML) return false;\n\n return /^ *<([a-zA-Z][a-zA-Z0-9:]*)[\\s>/]/.test(source);\n },\n _match: anyScopeRegex(HTML_SELF_CLOSING_ELEMENT_R),\n _order: Priority.HIGH,\n _parse(capture) {\n const tag = capture[1].trim() as HTMLTag;\n\n return { attrs: attrStringToMap(tag, capture[2] || ''), tag };\n },\n _render(node, _, state = {}) {\n return createElement(node.tag, {\n key: state.key,\n ...(node.attrs ?? {}),\n });\n },\n },\n [RuleType.customComponent]: {\n _qualify: (source) => /^ *<([A-Z][a-zA-Z0-9]*)/.test(source),\n _match: anyScopeRegex(CUSTOM_COMPONENT_R),\n _order: Priority.MAX,\n _parse(capture, parse, state) {\n const m = capture[3].match(HTML_LEFT_TRIM_AMOUNT_R);\n const whitespace = m?.[1] ?? '';\n const trimmed = trimLeadingWhitespaceOutsideFences(\n capture[3],\n whitespace\n );\n const parseFunc = containsBlockSyntax(trimmed)\n ? parseBlock\n : parseInline;\n const tag = capture[1].trim();\n const ast: any = {\n attrs: attrStringToMap(tag as HTMLTag, capture[2] ?? ''),\n noInnerParse: false,\n tag,\n };\n const prevInHTML = state.inHTML;\n state.inHTML = true;\n ast.children = parseFunc(parse, trimmed, state);\n state.inHTML = prevInHTML;\n\n return ast;\n },\n _render(node, output, state = {}) {\n return createElement(\n node.tag as HTMLTag,\n { key: state.key, ...(node.attrs ?? {}) },\n node.text ?? (node.children ? output(node.children, state) : '')\n );\n },\n },\n [RuleType.paragraph]: {\n _match: matchParagraph,\n _order: Priority.LOW,\n _parse: parseCaptureInline,\n _render(node, output, state = {}) {\n return createElement(\n 'p',\n { key: state.key },\n output(node.children, state)\n );\n },\n },\n [RuleType.image]: {\n _qualify: ['!['],\n _match: simpleInlineRegex(IMAGE_R),\n _order: Priority.HIGH,\n _parse(capture) {\n return {\n alt: unescapeString(capture[1]),\n target: unescapeString(capture[2]),\n title: unescapeString(capture[3]),\n };\n },\n _render(node, _, state = {}) {\n return createElement('img', {\n key: state.key,\n alt: node.alt ?? undefined,\n title: node.title ?? undefined,\n src: sanitize(node.target, 'img', 'src') ?? undefined,\n });\n },\n },\n [RuleType.link]: {\n _qualify: ['['],\n _match: inlineRegex(LINK_R),\n _order: Priority.LOW,\n _parse(capture, parse, state) {\n return {\n children: parseSimpleInline(parse, capture[1], state),\n target: unescapeString(capture[2]),\n title: unescapeString(capture[3]),\n };\n },\n _render(node, output, state = {}) {\n const sanitizedHref = sanitize(node.target, 'a', 'href');\n if (\n process.env.NODE_ENV === 'test' &&\n node.target.includes('javascript:')\n ) {\n console.log('Compiler sanitize result:', {\n target: node.target,\n sanitizedHref,\n finalHref: sanitizedHref ?? undefined,\n });\n }\n return createElement(\n 'a',\n {\n key: state.key,\n href: sanitizedHref ?? undefined,\n title: node.title ?? undefined,\n },\n output(node.children, state)\n );\n },\n },\n [RuleType.linkAngleBraceStyleDetector]: {\n _qualify: ['<'],\n _match: inlineRegex(LINK_AUTOLINK_R),\n _order: Priority.MAX,\n _parse(capture) {\n let target = capture[1];\n let isEmail = false;\n\n if (target.indexOf('@') !== -1 && target.indexOf('//') === -1) {\n isEmail = true;\n target = target.replace('mailto:', '');\n }\n\n return {\n children: [{ text: target, type: RuleType.text }],\n target: isEmail ? `mailto:${target}` : target,\n type: RuleType.link,\n };\n },\n },\n [RuleType.linkBareUrlDetector]: {\n _qualify: (source, state) =>\n !!(\n state.inline &&\n !state.inAnchor &&\n !options.disableAutoLink &&\n (startsWith(source, 'http://') || startsWith(source, 'https://'))\n ),\n _match: inlineRegex(LINK_AUTOLINK_BARE_URL_R),\n _order: Priority.MAX,\n _parse(capture) {\n return {\n children: [{ text: capture[1], type: RuleType.text }],\n target: capture[1],\n type: RuleType.link,\n };\n },\n },\n [RuleType.newlineCoalescer]: {\n _match: blockRegex(CONSECUTIVE_NEWLINE_R),\n _order: Priority.LOW,\n _parse: captureNothing,\n _render() {\n return '\\n';\n },\n },\n [RuleType.orderedList]: generateListRule(ORDERED),\n [RuleType.unorderedList]: generateListRule(UNORDERED),\n [RuleType.ref]: {\n _qualify: ['['],\n _match: anyScopeRegex(REFERENCE_IMAGE_OR_LINK),\n _order: Priority.MAX,\n _parse(capture) {\n refs[capture[1]] = { target: capture[2], title: capture[4] };\n\n return {};\n },\n _render: renderNothing,\n },\n [RuleType.refImage]: {\n _qualify: ['!['],\n _match: simpleInlineRegex(REFERENCE_IMAGE_R),\n _order: Priority.MAX,\n _parse(capture) {\n return {\n alt: capture[1] ? unescapeString(capture[1]) : undefined,\n ref: capture[2],\n };\n },\n _render(node, _, state = {}) {\n const ref = refs[node.ref];\n\n if (!ref) return null;\n\n return createElement('img', {\n key: state.key,\n alt: node.alt,\n src: sanitize(ref.target, 'img', 'src') ?? undefined,\n title: ref.title,\n });\n },\n },\n [RuleType.refLink]: {\n _qualify: (source) => source[0] === '[' && source.indexOf('](') === -1,\n _match: inlineRegex(REFERENCE_LINK_R),\n _order: Priority.MAX,\n _parse(capture, parse, state) {\n return {\n children: parseSimpleInline(parse, capture[1], state),\n fallbackChildren: capture[0],\n ref: capture[2],\n };\n },\n _render(node, output, state = {}) {\n const ref = refs[node.ref];\n\n if (!ref)\n return createElement(\n 'span',\n { key: state.key },\n node.fallbackChildren\n );\n\n return createElement(\n 'a',\n {\n key: state.key,\n href: sanitize(ref.target, 'a', 'href') ?? undefined,\n title: ref.title,\n },\n output(node.children, state)\n );\n },\n },\n [RuleType.table]: {\n _qualify: ['|'],\n _match: blockRegex(NP_TABLE_R),\n _order: Priority.HIGH,\n _parse(capture, parse, state) {\n state.inline = true;\n const align = capture[2] ? parseTableAlign(capture[2]) : [];\n const cells = capture[3]\n ? parseTableCells(capture[3], parse, state)\n : [];\n const header = parseTableRow(capture[1], parse, state, !!cells.length);\n state.inline = false;\n\n return cells.length\n ? { align, cells, header, type: RuleType.table }\n : { children: header.flat(), type: RuleType.paragraph };\n },\n _render(node, output, state = {}) {\n const table = node as TableNode;\n const getStyle = (i: number) =>\n table.align[i] && table.align[i] !== 'left'\n ? { textAlign: table.align[i] }\n : {};\n\n return createElement(\n 'table',\n { key: state.key },\n createElement(\n 'thead',\n null,\n createElement(\n 'tr',\n null,\n ...table.header.map((c, i) =>\n createElement(\n 'th',\n { key: i, style: getStyle(i) },\n output(c, state)\n )\n )\n )\n ),\n createElement(\n 'tbody',\n null,\n ...table.cells.map((row, i) =>\n createElement(\n 'tr',\n { key: i },\n ...row.map((c, j) =>\n createElement(\n 'td',\n { key: j, style: getStyle(j) },\n output(c, state)\n )\n )\n )\n )\n )\n );\n },\n },\n [RuleType.tableSeparator]: {\n _match: (source, state) =>\n state.inTable && source[0] === '|' ? /^\\|/.exec(source) : null,\n _order: Priority.HIGH,\n _parse() {\n return { type: RuleType.tableSeparator };\n },\n _render() {\n return ' | ';\n },\n },\n [RuleType.text]: {\n _match: allowInline((source, _state) => {\n const shortMatch = SHORTCODE_R.exec(source);\n\n if (shortMatch) return shortMatch;\n\n return TEXT_PLAIN_R.exec(source) || /^[\\s\\S]/.exec(source);\n }),\n _order: Priority.MIN,\n _parse(capture) {\n const text = capture[0];\n\n return {\n text:\n text.indexOf('&') === -1\n ? text\n : text.replace(HTML_CHAR_CODE_R, (f, i) => {\n if (i.startsWith('#x'))\n return String.fromCharCode(parseInt(i.slice(2), 16));\n if (i.startsWith('#'))\n return String.fromCharCode(parseInt(i.slice(1), 10));\n return namedCodesToUnicode[i] || f;\n }),\n };\n },\n _render(node) {\n return node.text;\n },\n },\n [RuleType.textBolded]: {\n _qualify: ['**', '__'],\n _match: simpleInlineRegex(TEXT_BOLD_R),\n _order: Priority.MED,\n _parse(capture, parse, state) {\n return { children: parse(capture[2], state) };\n },\n _render(node, output, state = {}) {\n return createElement(\n 'strong',\n { key: state.key },\n output(node.children, state)\n );\n },\n },\n [RuleType.textEmphasized]: {\n _qualify: ['*', '_'],\n _match: simpleInlineRegex(TEXT_EMPHASIZED_R),\n _order: Priority.LOW,\n _parse(capture, parse, state) {\n return { children: parse(capture[2], state) };\n },\n _render(node, output, state = {}) {\n return createElement(\n 'em',\n { key: state.key },\n output(node.children, state)\n );\n },\n },\n [RuleType.textEscaped]: {\n _qualify: ['\\\\'],\n _match: simpleInlineRegex(TEXT_ESCAPED_R),\n _order: Priority.HIGH,\n _parse(capture) {\n return { text: capture[1], type: RuleType.text };\n },\n },\n [RuleType.textMarked]: {\n _qualify: ['=='],\n _match: simpleInlineRegex(TEXT_MARKED_R),\n _order: Priority.LOW,\n _parse: parseCaptureInline,\n _render(node, output, state = {}) {\n return createElement(\n 'mark',\n { key: state.key },\n output(node.children, state)\n );\n },\n },\n [RuleType.textStrikethroughed]: {\n _qualify: ['~~'],\n _match: simpleInlineRegex(TEXT_STRIKETHROUGHED_R),\n _order: Priority.LOW,\n _parse: parseCaptureInline,\n _render(node, output, state = {}) {\n return createElement(\n 'del',\n { key: state.key },\n output(node.children, state)\n );\n },\n },\n };\n\n return rules;\n};\n\n// Removed compilerCache completely to avoid issues with props changes not invalidating cache\n// const compilerCache = new Map<string, unknown>();\n\nexport type ParsedMarkdown = {\n ast: any[];\n footnotes: FootnoteDef[];\n inline: boolean;\n};\n\nexport const parseMarkdown = (\n markdown: string = '',\n ctx: MarkdownContext<any>,\n options: MarkdownOptions = {}\n): ParsedMarkdown => {\n const dummyCreateElement = () => null;\n const footnotes: FootnoteDef[] = [];\n const refs: Record<string, { target: string; title?: string }> = {};\n\n const attrStringToMap = (\n tag: HTMLTag,\n str: string\n ): Record<string, any> | null => {\n if (!str?.trim()) return null;\n\n const attributes = str.match(ATTR_EXTRACTOR_R);\n\n if (!attributes) return null;\n\n return attributes.reduce((map: any, raw) => {\n const delimiterIdx = raw.indexOf('=');\n\n if (delimiterIdx !== -1) {\n const key = normalizeAttributeKey(raw.slice(0, delimiterIdx)).trim();\n const value = unquote(raw.slice(delimiterIdx + 1).trim());\n const mappedKey = ATTRIBUTE_TO_NODE_PROP_MAP[key] ?? key;\n\n if (mappedKey === 'ref') return map;\n map[mappedKey] = attributeValueToNodePropValue(\n tag,\n key,\n value,\n ctx.sanitizer ?? defaultSanitizer\n );\n\n if (\n typeof map[mappedKey] === 'string' &&\n (HTML_BLOCK_ELEMENT_R.test(map[mappedKey]) ||\n HTML_SELF_CLOSING_ELEMENT_R.test(map[mappedKey]))\n ) {\n map[mappedKey] = parseMarkdown(\n map[mappedKey].trim(),\n ctx,\n options\n ).ast;\n }\n } else if (raw !== 'style') {\n map[ATTRIBUTE_TO_NODE_PROP_MAP[raw] ?? raw] = true;\n }\n\n return map;\n }, {});\n };\n\n const nonParagraphBlockSyntaxes = [\n BLOCKQUOTE_R,\n CODE_BLOCK_FENCED_R,\n CODE_BLOCK_R,\n options.enforceAtxHeadings ? HEADING_ATX_COMPLIANT_R : HEADING_R,\n HEADING_SETEXT_R,\n NP_TABLE_R,\n ORDERED_LIST_R,\n UNORDERED_LIST_R,\n CUSTOM_COMPONENT_R,\n ];\n\n const containsBlockSyntax = (input: string): boolean => {\n const cleaned = input.replace(TRIM_STARTING_NEWLINES, '');\n const slice = cleaned.length > 2048 ? cleaned.slice(0, 2048) : cleaned;\n\n if (slice.indexOf('\\n\\n') !== -1) return true;\n\n const syntaxes = options.disableParsingRawHTML\n ? nonParagraphBlockSyntaxes\n : [\n ...nonParagraphBlockSyntaxes,\n PARAGRAPH_R,\n HTML_BLOCK_ELEMENT_R,\n HTML_COMMENT_R,\n HTML_SELF_CLOSING_ELEMENT_R,\n CUSTOM_COMPONENT_R,\n ];\n\n return some(syntaxes as RegExp[], slice);\n };\n\n const baseRules = createRules(\n dummyCreateElement,\n ctx,\n options,\n footnotes,\n refs,\n attrStringToMap,\n containsBlockSyntax,\n nonParagraphBlockSyntaxes\n );\n\n const rules = options.disableParsingRawHTML\n ? Object.keys(baseRules).reduce((acc, key) => {\n if (key !== RuleType.htmlBlock && key !== RuleType.htmlSelfClosing) {\n acc[key] = baseRules[key];\n }\n\n return acc;\n }, {} as Rules)\n : baseRules;\n\n const parser = parserFor(rules);\n\n const result = options.preserveFrontmatter\n ? markdown\n : markdown.replace(FRONT_MATTER_R, '');\n const inline =\n options.forceInline ||\n (!options.forceBlock &&\n SHOULD_RENDER_AS_BLOCK_R.test(\n result.replace(TRIM_STARTING_NEWLINES, '')\n ) === false);\n\n const ast = parser(\n inline\n ? result\n : `${trimEnd(result).replace(TRIM_STARTING_NEWLINES, '')}\\n\\n`,\n { inline }\n );\n\n if (footnotes.length > 0) {\n // Parse footnotes content as well\n for (const def of footnotes) {\n (def as any).parsedAst = parser(def.footnote, { inline: true });\n }\n }\n\n return { ast, footnotes, inline };\n};\n\nexport const renderMarkdownAst = (\n parsed: ParsedMarkdown,\n ctx: MarkdownContext<any>,\n options: MarkdownOptions = {}\n): unknown => {\n const components = ctx.components ?? {};\n const slug = (input: string) => {\n if (process.env.NODE_ENV === 'test' && input === '中文') {\n const def = defaultSlugify(input);\n console.log('Slug check:', {\n input,\n ctxSlugify: !!ctx.slugify,\n defaultSlugifyResult: def,\n });\n }\n return ctx.slugify\n ? ctx.slugify(input, defaultSlugify)\n : defaultSlugify(input);\n };\n const createElement = createElementFactory(ctx, options);\n const footnotes = parsed.footnotes || [];\n const refs: Record<string, { target: string; title?: string }> = {};\n\n const attrStringToMap = () => null; // Not needed during render\n const containsBlockSyntax = () => false; // Not needed during render\n const nonParagraphBlockSyntaxes: any[] = [];\n\n const baseRules = createRules(\n createElement,\n ctx,\n options,\n footnotes,\n refs,\n attrStringToMap,\n containsBlockSyntax,\n nonParagraphBlockSyntaxes\n );\n\n const rules = options.disableParsingRawHTML\n ? Object.keys(baseRules).reduce((acc, key) => {\n if (key !== RuleType.htmlBlock && key !== RuleType.htmlSelfClosing) {\n acc[key] = baseRules[key];\n }\n\n return acc;\n }, {} as Rules)\n : baseRules;\n\n const emitter = renderFor(createRenderer(rules, options.renderRule));\n\n const inline = parsed.inline;\n const arr = emitter(parsed.ast, { inline }) as unknown as any[];\n\n while (typeof arr[arr.length - 1] === 'string' && !arr[arr.length - 1].trim())\n arr.pop();\n\n const getOuterNode = () => {\n if (options.wrapper === null) return arr;\n const wrapper = options.wrapper ?? (inline ? 'span' : 'div');\n\n if (arr.length > 1 || options.forceWrapper)\n return createElement(wrapper, { key: 'outer' }, arr);\n\n if (arr.length === 1) {\n const node = arr[0];\n\n if (typeof node === 'string') {\n const spanProps: Record<string, any> = { key: 'outer' };\n\n if (!inline && components) {\n const pOverrideProps = (get(components, 'p.props', {}) ??\n {}) as Record<string, any>;\n const mergedClassName = cx(\n spanProps.className,\n pOverrideProps.className\n );\n const finalSpanProps: Record<string, any> = {\n ...spanProps,\n ...pOverrideProps,\n };\n\n if (mergedClassName) finalSpanProps.className = mergedClassName;\n\n return createElement('span', finalSpanProps, node);\n }\n\n return createElement('span', spanProps, node);\n }\n\n return node;\n }\n\n return createElement(wrapper, { key: 'outer' }, null);\n };\n\n const node = getOuterNode();\n\n const result = footnotes.length\n ? createElement(\n 'div',\n null,\n node,\n createElement(\n 'footer',\n { key: 'footer' },\n ...footnotes.map((def) =>\n createElement(\n 'div',\n { id: slug(def.identifier), key: def.identifier },\n def.identifier,\n emitter((def as any).parsedAst || def.footnote, { inline: true })\n )\n )\n )\n )\n : node;\n\n return result;\n};\n\nexport const compile = (\n markdown: string = '',\n ctx: MarkdownContext<any>,\n options: MarkdownOptions = {}\n): unknown => {\n if (typeof markdown !== 'string') {\n if (process.env.NODE_ENV !== 'production') {\n console.error(\n 'intlayer: the first argument must be a string. Received',\n typeof markdown\n );\n }\n throw new Error('intlayer: the first argument must be a string');\n }\n\n const parsed = parseMarkdown(markdown, ctx, options);\n return renderMarkdownAst(parsed, ctx, options);\n};\n\nexport const createCompiler =\n (ctx: MarkdownContext<any>) =>\n (markdown: string, options?: MarkdownOptions): unknown =>\n compile(markdown, ctx, options);\n\nexport const compileWithOptions = (\n markdown: string,\n runtime: MarkdownRuntime,\n options: CompileOptions<any> = {}\n): unknown => {\n const {\n components,\n namedCodesToUnicode,\n sanitizer,\n slugify,\n ...compilerOptions\n } = options;\n\n return compile(\n markdown,\n { runtime, components, namedCodesToUnicode, sanitizer, slugify },\n compilerOptions\n );\n};\n"],"mappings":"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"}
@@ -5,6 +5,6 @@ import { ATTRIBUTES_TO_SANITIZE, ATTRIBUTE_TO_NODE_PROP_MAP, ATTR_EXTRACTOR_R, B
5
5
  import { allowInline, anyScopeRegex, attributeValueToNodePropValue, blockRegex, captureNothing, cx, get, inlineRegex, normalizeAttributeKey, normalizeWhitespace, parseBlock, parseCaptureInline, parseInline, parseSimpleInline, parseStyleAttribute, parseTableAlign, parseTableAlignCapture, parseTableCells, parseTableRow, qualifies, renderNothing, sanitizer, simpleInlineRegex, slugify, some, startsWith, trimEnd, trimLeadingWhitespaceOutsideFences, unescapeString, unquote } from "./utils.mjs";
6
6
  import { parserFor } from "./parser.mjs";
7
7
  import { createRenderer, renderFor } from "./renderer.mjs";
8
- import { compile, compileWithOptions, createCompiler } from "./compiler.mjs";
8
+ import { compile, compileWithOptions, createCompiler, parseMarkdown, renderMarkdownAst } from "./compiler.mjs";
9
9
 
10
- export { ATTRIBUTES_TO_SANITIZE, ATTRIBUTE_TO_NODE_PROP_MAP, ATTR_EXTRACTOR_R, BLOCKQUOTE_ALERT_R, BLOCKQUOTE_R, BLOCKQUOTE_TRIM_LEFT_MULTILINE_R, BLOCK_END_R, BREAK_LINE_R, BREAK_THEMATIC_R, CAPTURE_LETTER_AFTER_HYPHEN, CODE_BLOCK_FENCED_R, CODE_BLOCK_R, CODE_INLINE_R, CONSECUTIVE_NEWLINE_R, CR_NEWLINE_R, CUSTOM_COMPONENT_R, DO_NOT_PROCESS_HTML_ELEMENTS, DURATION_DELAY_TRIGGER, FOOTNOTE_R, FOOTNOTE_REFERENCE_R, FORMFEED_R, FRONT_MATTER_R, GFM_TASK_R, HEADING_ATX_COMPLIANT_R, HEADING_R, HEADING_SETEXT_R, HTML_BLOCK_ELEMENT_R, HTML_CHAR_CODE_R, HTML_COMMENT_R, HTML_CUSTOM_ATTR_R, HTML_LEFT_TRIM_AMOUNT_R, HTML_SELF_CLOSING_ELEMENT_R, INLINE_SKIP_R, INTERPOLATION_R, LINK_AUTOLINK_BARE_URL_R, LINK_AUTOLINK_R, LIST_LOOKBEHIND_R, LOOKAHEAD, NAMED_CODES_TO_UNICODE, NP_TABLE_R, ORDERED, ORDERED_LIST_BULLET, ORDERED_LIST_ITEM_PREFIX, ORDERED_LIST_ITEM_PREFIX_R, ORDERED_LIST_ITEM_R, ORDERED_LIST_R, PARAGRAPH_R, Priority, REFERENCE_IMAGE_OR_LINK, REFERENCE_IMAGE_R, REFERENCE_LINK_R, RuleType, SHORTCODE_R, SHOULD_RENDER_AS_BLOCK_R, TABLE_CENTER_ALIGN, TABLE_LEFT_ALIGN, TABLE_RIGHT_ALIGN, TABLE_TRIM_PIPES, TAB_R, TEXT_BOLD_R, TEXT_EMPHASIZED_R, TEXT_ESCAPED_R, TEXT_MARKED_R, TEXT_PLAIN_R, TEXT_STRIKETHROUGHED_R, TRIM_STARTING_NEWLINES, UNESCAPE_R, UNORDERED, UNORDERED_LIST_BULLET, UNORDERED_LIST_ITEM_PREFIX, UNORDERED_LIST_ITEM_PREFIX_R, UNORDERED_LIST_ITEM_R, UNORDERED_LIST_R, allowInline, anyScopeRegex, attributeValueToNodePropValue, blockRegex, captureNothing, compile, compileWithOptions, createCompiler, createRenderer, cx, generateListItemPrefix, generateListItemPrefixRegex, generateListItemRegex, generateListRegex, get, getMarkdownMetadata, inlineRegex, markdown as md, normalizeAttributeKey, normalizeWhitespace, parseBlock, parseCaptureInline, parseInline, parseSimpleInline, parseStyleAttribute, parseTableAlign, parseTableAlignCapture, parseTableCells, parseTableRow, parserFor, qualifies, renderFor, renderNothing, sanitizer, simpleInlineRegex, slugify, some, startsWith, trimEnd, trimLeadingWhitespaceOutsideFences, unescapeString, unquote, validateMarkdown };
10
+ export { ATTRIBUTES_TO_SANITIZE, ATTRIBUTE_TO_NODE_PROP_MAP, ATTR_EXTRACTOR_R, BLOCKQUOTE_ALERT_R, BLOCKQUOTE_R, BLOCKQUOTE_TRIM_LEFT_MULTILINE_R, BLOCK_END_R, BREAK_LINE_R, BREAK_THEMATIC_R, CAPTURE_LETTER_AFTER_HYPHEN, CODE_BLOCK_FENCED_R, CODE_BLOCK_R, CODE_INLINE_R, CONSECUTIVE_NEWLINE_R, CR_NEWLINE_R, CUSTOM_COMPONENT_R, DO_NOT_PROCESS_HTML_ELEMENTS, DURATION_DELAY_TRIGGER, FOOTNOTE_R, FOOTNOTE_REFERENCE_R, FORMFEED_R, FRONT_MATTER_R, GFM_TASK_R, HEADING_ATX_COMPLIANT_R, HEADING_R, HEADING_SETEXT_R, HTML_BLOCK_ELEMENT_R, HTML_CHAR_CODE_R, HTML_COMMENT_R, HTML_CUSTOM_ATTR_R, HTML_LEFT_TRIM_AMOUNT_R, HTML_SELF_CLOSING_ELEMENT_R, INLINE_SKIP_R, INTERPOLATION_R, LINK_AUTOLINK_BARE_URL_R, LINK_AUTOLINK_R, LIST_LOOKBEHIND_R, LOOKAHEAD, NAMED_CODES_TO_UNICODE, NP_TABLE_R, ORDERED, ORDERED_LIST_BULLET, ORDERED_LIST_ITEM_PREFIX, ORDERED_LIST_ITEM_PREFIX_R, ORDERED_LIST_ITEM_R, ORDERED_LIST_R, PARAGRAPH_R, Priority, REFERENCE_IMAGE_OR_LINK, REFERENCE_IMAGE_R, REFERENCE_LINK_R, RuleType, SHORTCODE_R, SHOULD_RENDER_AS_BLOCK_R, TABLE_CENTER_ALIGN, TABLE_LEFT_ALIGN, TABLE_RIGHT_ALIGN, TABLE_TRIM_PIPES, TAB_R, TEXT_BOLD_R, TEXT_EMPHASIZED_R, TEXT_ESCAPED_R, TEXT_MARKED_R, TEXT_PLAIN_R, TEXT_STRIKETHROUGHED_R, TRIM_STARTING_NEWLINES, UNESCAPE_R, UNORDERED, UNORDERED_LIST_BULLET, UNORDERED_LIST_ITEM_PREFIX, UNORDERED_LIST_ITEM_PREFIX_R, UNORDERED_LIST_ITEM_R, UNORDERED_LIST_R, allowInline, anyScopeRegex, attributeValueToNodePropValue, blockRegex, captureNothing, compile, compileWithOptions, createCompiler, createRenderer, cx, generateListItemPrefix, generateListItemPrefixRegex, generateListItemRegex, generateListRegex, get, getMarkdownMetadata, inlineRegex, markdown as md, normalizeAttributeKey, normalizeWhitespace, parseBlock, parseCaptureInline, parseInline, parseMarkdown, parseSimpleInline, parseStyleAttribute, parseTableAlign, parseTableAlignCapture, parseTableCells, parseTableRow, parserFor, qualifies, renderFor, renderMarkdownAst, renderNothing, sanitizer, simpleInlineRegex, slugify, some, startsWith, trimEnd, trimLeadingWhitespaceOutsideFences, unescapeString, unquote, validateMarkdown };
@@ -3,8 +3,8 @@ import { parseYaml } from "./parseYaml.mjs";
3
3
  import { isValidElement } from "./isValidReactElement.mjs";
4
4
  import { checkIsURLAbsolute } from "./checkIsURLAbsolute.mjs";
5
5
  import { getCookie } from "./getCookie.mjs";
6
- import { LocaleStorage, LocaleStorageClient, LocaleStorageServer, getLocaleFromStorage, getLocaleFromStorageClient, getLocaleFromStorageServer, setLocaleInStorage, setLocaleInStorageClient, setLocaleInStorageServer } from "./localeStorage.mjs";
6
+ import { LocaleStorage, LocaleStorageClient, LocaleStorageServer, getLocaleFromStorage, getLocaleFromStorageClient, getLocaleFromStorageServer, localeStorageOptions, setLocaleInStorage, setLocaleInStorageClient, setLocaleInStorageServer } from "./localeStorage.mjs";
7
7
  import { isSameKeyPath } from "./isSameKeyPath.mjs";
8
8
  import { stringifyYaml } from "./stringifyYaml.mjs";
9
9
 
10
- export { CachedIntl, CachedIntl as Intl, LocaleStorage, LocaleStorageClient, LocaleStorageServer, bindIntl, checkIsURLAbsolute, getCachedIntl, getCookie, getLocaleFromStorage, getLocaleFromStorageClient, getLocaleFromStorageServer, isSameKeyPath, isValidElement, parseYaml, setLocaleInStorage, setLocaleInStorageClient, setLocaleInStorageServer, stringifyYaml };
10
+ export { CachedIntl, CachedIntl as Intl, LocaleStorage, LocaleStorageClient, LocaleStorageServer, bindIntl, checkIsURLAbsolute, getCachedIntl, getCookie, getLocaleFromStorage, getLocaleFromStorageClient, getLocaleFromStorageServer, isSameKeyPath, isValidElement, localeStorageOptions, parseYaml, setLocaleInStorage, setLocaleInStorageClient, setLocaleInStorageServer, stringifyYaml };
@@ -1,5 +1,4 @@
1
1
  import { getCookie } from "./getCookie.mjs";
2
- import { localeStorageOptions } from "../localization/getBrowserLocale.mjs";
3
2
  import { internationalization, routing } from "@intlayer/config/built";
4
3
 
5
4
  //#region src/utils/localeStorage.ts
@@ -28,6 +27,25 @@ const buildCookieString = (name, value, attributes) => {
28
27
  if (attributes.sameSite) parts.push(`SameSite=${attributes.sameSite}`);
29
28
  return parts.join("; ");
30
29
  };
30
+ const localeStorageOptions = {
31
+ getCookie: (name) => document.cookie.split(";").find((c) => c.trim().startsWith(`${name}=`))?.split("=")[1],
32
+ getLocaleStorage: (name) => localStorage.getItem(name),
33
+ getSessionStorage: (name) => sessionStorage.getItem(name),
34
+ isCookieEnabled: true,
35
+ setCookieStore: (name, value, attributes) => cookieStore.set({
36
+ name,
37
+ value,
38
+ path: attributes.path,
39
+ domain: attributes.domain,
40
+ expires: attributes.expires,
41
+ sameSite: attributes.sameSite
42
+ }),
43
+ setCookieString: (_name, cookie) => {
44
+ document.cookie = cookie;
45
+ },
46
+ setSessionStorage: (name, value) => sessionStorage.setItem(name, value),
47
+ setLocaleStorage: (name, value) => localStorage.setItem(name, value)
48
+ };
31
49
  /**
32
50
  * Retrieves the locale from browser storage mechanisms
33
51
  * (cookies, localStorage, sessionStorage).
@@ -258,5 +276,5 @@ const LocaleStorage = (options) => ({
258
276
  });
259
277
 
260
278
  //#endregion
261
- export { LocaleStorage, LocaleStorageClient, LocaleStorageServer, getLocaleFromStorage, getLocaleFromStorageClient, getLocaleFromStorageServer, setLocaleInStorage, setLocaleInStorageClient, setLocaleInStorageServer };
279
+ export { LocaleStorage, LocaleStorageClient, LocaleStorageServer, getLocaleFromStorage, getLocaleFromStorageClient, getLocaleFromStorageServer, localeStorageOptions, setLocaleInStorage, setLocaleInStorageClient, setLocaleInStorageServer };
262
280
  //# sourceMappingURL=localeStorage.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"localeStorage.mjs","names":[],"sources":["../../../src/utils/localeStorage.ts"],"sourcesContent":["import { internationalization, routing } from '@intlayer/config/built';\nimport type { Locale } from '@intlayer/types/allLocales';\nimport type { CookiesAttributes } from '@intlayer/types/config';\nimport type { LocalesValues } from '@intlayer/types/module_augmentation';\nimport { localeStorageOptions } from '../localization';\nimport { getCookie } from './getCookie';\n\n// ── Tree-shake constants ──────────────────────────────────────────────────────\n// When these env vars are injected at build time, bundlers eliminate the\n// branches guarded by these constants.\n\n/**\n * True when cookie storage is explicitly disabled at build time.\n */\nconst TREE_SHAKE_STORAGE_COOKIES =\n process.env['INTLAYER_ROUTING_STORAGE_COOKIES'] === 'false';\n\n/**\n * True when localStorage is explicitly disabled at build time.\n */\nconst TREE_SHAKE_STORAGE_LOCAL_STORAGE =\n process.env['INTLAYER_ROUTING_STORAGE_LOCALSTORAGE'] === 'false';\n\n/**\n * True when sessionStorage is explicitly disabled at build time.\n */\nconst TREE_SHAKE_STORAGE_SESSION_STORAGE =\n process.env['INTLAYER_ROUTING_STORAGE_SESSIONSTORAGE'] === 'false';\n\n/**\n * True when header storage is explicitly disabled at build time.\n */\nconst TREE_SHAKE_STORAGE_HEADERS =\n process.env['INTLAYER_ROUTING_STORAGE_HEADERS'] === 'false';\n\n// ============================================================================\n// Shared types\n// ============================================================================\n\nexport type CookieBuildAttributes = {\n domain?: string;\n path?: string;\n secure?: boolean;\n httpOnly?: boolean;\n sameSite?: 'strict' | 'lax' | 'none';\n /** Expiry as milliseconds since epoch (Date.getTime()) or number of days */\n expires?: number | undefined;\n};\n\n// ============================================================================\n// Shared helpers\n// ============================================================================\n\nconst buildCookieString = (\n name: string,\n value: string,\n attributes: Omit<CookiesAttributes, 'name' | 'type'>\n): string => {\n const encodedValue = encodeURIComponent(value);\n const parts: string[] = [`${name}=${encodedValue}`];\n\n if (attributes.path) parts.push(`Path=${attributes.path}`);\n if (attributes.domain) parts.push(`Domain=${attributes.domain}`);\n if (attributes.expires instanceof Date)\n parts.push(`Expires=${attributes.expires.toUTCString()}`);\n if (attributes.secure) parts.push('Secure');\n if (attributes.sameSite) parts.push(`SameSite=${attributes.sameSite}`);\n return parts.join('; ');\n};\n\n// ============================================================================\n// Client-specific types and functions\n// (cookies via browser APIs, localStorage, sessionStorage — no headers)\n// ============================================================================\n\nexport type LocaleStorageClientOptions = {\n overwrite?: boolean;\n isCookieEnabled?: boolean;\n setCookieStore?: (\n name: string,\n value: string,\n cookie: CookieBuildAttributes\n ) => void;\n setCookieString?: (name: string, cookie: string) => void;\n getCookie?: (name: string) => string | undefined | null;\n setSessionStorage?: (name: string, value: string) => void;\n getSessionStorage?: (name: string) => string | undefined | null;\n setLocaleStorage?: (name: string, value: string) => void;\n getLocaleStorage?: (name: string) => string | undefined | null;\n};\n\n/**\n * Retrieves the locale from browser storage mechanisms\n * (cookies, localStorage, sessionStorage).\n * Does not read from headers — use `getLocaleFromStorageServer` for that.\n */\nexport const getLocaleFromStorageClient = (\n options: LocaleStorageClientOptions = localeStorageOptions\n): Locale | undefined => {\n const { locales } = internationalization;\n\n if (options?.isCookieEnabled === false) return undefined;\n\n const isValidLocale = (value: string | null | undefined): value is Locale =>\n !!value && locales.includes(value as Locale);\n\n if (!TREE_SHAKE_STORAGE_COOKIES) {\n for (let i = 0; i < (routing.storage.cookies ?? []).length; i++) {\n try {\n const value = options?.getCookie?.(routing.storage.cookies![i].name);\n if (isValidLocale(value)) return value;\n } catch {}\n }\n }\n\n if (!TREE_SHAKE_STORAGE_LOCAL_STORAGE) {\n for (let i = 0; i < (routing.storage.localStorage ?? []).length; i++) {\n try {\n const value = options?.getLocaleStorage?.(\n routing.storage.localStorage![i].name\n );\n if (isValidLocale(value)) return value;\n } catch {}\n }\n }\n\n if (!TREE_SHAKE_STORAGE_SESSION_STORAGE && routing.storage.sessionStorage) {\n for (let i = 0; i < routing.storage.sessionStorage.length; i++) {\n try {\n const value = options?.getSessionStorage?.(\n routing.storage.sessionStorage[i].name\n );\n if (isValidLocale(value)) return value;\n } catch {}\n }\n }\n};\n\n/**\n * Stores the locale in browser storage mechanisms\n * (cookies, localStorage, sessionStorage).\n * Does not write to headers — use `setLocaleInStorageServer` for that.\n */\nexport const setLocaleInStorageClient = (\n locale: LocalesValues,\n options?: LocaleStorageClientOptions\n): void => {\n if (options?.isCookieEnabled === false) return;\n\n if (!TREE_SHAKE_STORAGE_COOKIES && routing.storage.cookies) {\n for (let i = 0; i < routing.storage.cookies.length; i++) {\n const { name, attributes } = routing.storage.cookies[i];\n try {\n if (options?.setCookieStore) {\n options.setCookieStore(name, locale, {\n ...attributes,\n expires:\n attributes.expires instanceof Date\n ? attributes.expires.getTime()\n : attributes.expires,\n });\n }\n } catch {\n try {\n if (options?.setCookieString) {\n options.setCookieString(\n name,\n buildCookieString(name, locale, attributes)\n );\n }\n } catch {}\n }\n }\n }\n\n if (\n !TREE_SHAKE_STORAGE_LOCAL_STORAGE &&\n routing.storage.localStorage &&\n options?.setLocaleStorage\n ) {\n for (let i = 0; i < routing.storage.localStorage.length; i++) {\n const { name } = routing.storage.localStorage[i];\n try {\n if (!(options?.overwrite ?? true) && options?.getLocaleStorage) {\n if (options.getLocaleStorage(name)) continue;\n }\n options.setLocaleStorage(name, locale);\n } catch {}\n }\n }\n\n if (\n !TREE_SHAKE_STORAGE_SESSION_STORAGE &&\n routing.storage.sessionStorage &&\n options?.setSessionStorage\n ) {\n for (let i = 0; i < routing.storage.sessionStorage.length; i++) {\n const { name } = routing.storage.sessionStorage[i];\n try {\n if (!(options?.overwrite ?? true) && options?.getSessionStorage) {\n if (options.getSessionStorage(name)) continue;\n }\n options.setSessionStorage(name, locale);\n } catch {}\n }\n }\n};\n\n/**\n * Client-side locale storage utility.\n * Handles cookies (browser), localStorage and sessionStorage.\n * Does not access headers.\n *\n * @example\n * ```ts\n * const storage = LocaleStorageClient(localeStorageOptions);\n * const locale = storage.getLocale();\n * storage.setLocale('fr');\n * ```\n */\nexport const LocaleStorageClient = (options: LocaleStorageClientOptions) => ({\n getLocale: () => getLocaleFromStorageClient(options),\n setLocale: (locale: LocalesValues) =>\n setLocaleInStorageClient(locale, options),\n});\n\n// ============================================================================\n// Server-specific types and functions\n// (cookies via injected getter/setter, headers — no localStorage/sessionStorage)\n// ============================================================================\n\nexport type LocaleStorageServerOptions = {\n overwrite?: boolean;\n isCookieEnabled?: boolean;\n setCookieStore?: (\n name: string,\n value: string,\n cookie: CookieBuildAttributes\n ) => void;\n setCookieString?: (name: string, cookie: string) => void;\n getCookie?: (name: string) => string | undefined | null;\n getHeader?: (name: string) => string | undefined | null;\n setHeader?: (name: string, value: string) => void;\n};\n\n/**\n * Retrieves the locale from server-side storage mechanisms (cookies, headers).\n * Does not access localStorage or sessionStorage.\n * No browser cookie fallback — the caller must provide `getCookie`.\n */\nexport const getLocaleFromStorageServer = (\n options: LocaleStorageServerOptions\n): Locale | undefined => {\n const { locales } = internationalization;\n\n if (options?.isCookieEnabled === false) return undefined;\n\n const isValidLocale = (value: string | null | undefined): value is Locale =>\n !!value && locales.includes(value as Locale);\n\n if (!TREE_SHAKE_STORAGE_COOKIES && routing.storage.cookies) {\n for (let i = 0; i < routing.storage.cookies.length; i++) {\n try {\n const value = options?.getCookie?.(routing.storage.cookies[i].name);\n if (isValidLocale(value)) return value;\n } catch {}\n }\n }\n\n if (!TREE_SHAKE_STORAGE_HEADERS && routing.storage.headers) {\n for (let i = 0; i < routing.storage.headers.length; i++) {\n try {\n const value = options?.getHeader?.(routing.storage.headers[i].name);\n if (isValidLocale(value)) return value;\n } catch {}\n }\n }\n};\n\n/**\n * Stores the locale in server-side storage mechanisms (cookies, headers).\n * Does not write to localStorage or sessionStorage.\n */\nexport const setLocaleInStorageServer = (\n locale: LocalesValues,\n options?: LocaleStorageServerOptions\n): void => {\n if (options?.isCookieEnabled === false) return;\n\n if (!TREE_SHAKE_STORAGE_COOKIES && routing.storage.cookies) {\n for (let i = 0; i < routing.storage.cookies.length; i++) {\n const { name, attributes } = routing.storage.cookies[i];\n\n try {\n if (options?.setCookieStore) {\n options.setCookieStore(name, locale, {\n ...attributes,\n expires:\n attributes.expires instanceof Date\n ? attributes.expires.getTime()\n : attributes.expires,\n });\n }\n } catch {\n try {\n if (options?.setCookieString) {\n options.setCookieString(\n name,\n buildCookieString(name, locale, attributes)\n );\n }\n } catch {}\n }\n }\n }\n\n if (\n !TREE_SHAKE_STORAGE_HEADERS &&\n routing.storage.headers &&\n options?.setHeader\n ) {\n for (let i = 0; i < routing.storage.headers.length; i++) {\n try {\n options.setHeader(routing.storage.headers[i].name, locale);\n } catch {}\n }\n }\n};\n\n/**\n * Server-side locale storage utility.\n * Handles cookies (via injected getter/setter) and headers.\n * Does not access localStorage or sessionStorage.\n *\n * @example\n * ```ts\n * const storage = LocaleStorageServer({\n * getCookie: (name) => req.cookies[name],\n * setCookieStore: (name, value, attrs) => res.cookie(name, value, attrs),\n * getHeader: (name) => req.headers[name],\n * setHeader: (name, value) => res.setHeader(name, value),\n * });\n * const locale = storage.getLocale();\n * storage.setLocale('fr');\n * ```\n */\nexport const LocaleStorageServer = (options: LocaleStorageServerOptions) => ({\n getLocale: () => getLocaleFromStorageServer(options),\n setLocale: (locale: LocalesValues) =>\n setLocaleInStorageServer(locale, options),\n});\n\n// ============================================================================\n// Deprecated: combined LocaleStorage\n// Use LocaleStorageClient or LocaleStorageServer instead\n// ============================================================================\n\n/**\n * @deprecated Use {@link LocaleStorageClientOptions} or {@link LocaleStorageServerOptions} instead.\n */\nexport type LocaleStorageOptions = LocaleStorageClientOptions &\n LocaleStorageServerOptions;\n\n/**\n * Retrieves the locale from all storage mechanisms\n * (cookies, localStorage, sessionStorage, headers).\n *\n * @deprecated Use {@link getLocaleFromStorageClient} (browser) or\n * {@link getLocaleFromStorageServer} (server) instead.\n */\nexport const getLocaleFromStorage = (\n options: Pick<\n LocaleStorageOptions,\n | 'getCookie'\n | 'getSessionStorage'\n | 'getLocaleStorage'\n | 'getHeader'\n | 'isCookieEnabled'\n >\n): Locale | undefined => {\n const { locales } = internationalization;\n\n if (options?.isCookieEnabled === false) return undefined;\n\n const isValidLocale = (value: string | null | undefined): value is Locale =>\n !!value && locales.includes(value as Locale);\n\n const readCookie = (name: string): string | undefined => {\n try {\n const fromOption = options?.getCookie?.(name);\n if (fromOption !== null && fromOption !== undefined) return fromOption;\n } catch {}\n // Browser fallback kept for backward compatibility\n return getCookie(name);\n };\n\n if (!TREE_SHAKE_STORAGE_COOKIES && routing.storage.cookies) {\n for (let i = 0; i < routing.storage.cookies.length; i++) {\n const value = readCookie(routing.storage.cookies[i].name);\n if (isValidLocale(value)) return value;\n }\n }\n\n if (!TREE_SHAKE_STORAGE_LOCAL_STORAGE && routing.storage.localStorage) {\n for (let i = 0; i < routing.storage.localStorage.length; i++) {\n try {\n const value = options?.getLocaleStorage?.(\n routing.storage.localStorage[i].name\n );\n if (isValidLocale(value)) return value;\n } catch {}\n }\n }\n\n if (!TREE_SHAKE_STORAGE_SESSION_STORAGE && routing.storage.sessionStorage) {\n for (let i = 0; i < routing.storage.sessionStorage.length; i++) {\n try {\n const value = options?.getSessionStorage?.(\n routing.storage.sessionStorage[i].name\n );\n if (isValidLocale(value)) return value;\n } catch {}\n }\n }\n\n if (!TREE_SHAKE_STORAGE_HEADERS && routing.storage.headers) {\n for (let i = 0; i < routing.storage.headers.length; i++) {\n try {\n const value = options?.getHeader?.(routing.storage.headers[i].name);\n if (isValidLocale(value)) return value;\n } catch {}\n }\n }\n};\n\n/**\n * Stores the locale in all configured storage mechanisms\n * (cookies, localStorage, sessionStorage, headers).\n *\n * @deprecated Use {@link setLocaleInStorageClient} (browser) or\n * {@link setLocaleInStorageServer} (server) instead.\n */\nexport const setLocaleInStorage = (\n locale: LocalesValues,\n options?: LocaleStorageOptions\n): void => {\n if (options?.isCookieEnabled === false) return;\n\n if (!TREE_SHAKE_STORAGE_COOKIES && routing.storage.cookies) {\n for (let i = 0; i < routing.storage.cookies.length; i++) {\n const { name, attributes } = routing.storage.cookies[i];\n try {\n if (options?.setCookieStore) {\n options.setCookieStore(name, locale, {\n ...attributes,\n expires:\n attributes.expires instanceof Date\n ? attributes.expires.getTime()\n : attributes.expires,\n });\n }\n } catch {\n try {\n if (options?.setCookieString) {\n options.setCookieString(\n name,\n buildCookieString(name, locale, attributes)\n );\n }\n } catch {}\n }\n }\n }\n\n if (\n !TREE_SHAKE_STORAGE_LOCAL_STORAGE &&\n routing.storage.localStorage &&\n options?.setLocaleStorage\n ) {\n for (let i = 0; i < routing.storage.localStorage.length; i++) {\n const { name } = routing.storage.localStorage[i];\n try {\n if (!(options?.overwrite ?? true) && options?.getLocaleStorage) {\n if (options.getLocaleStorage(name)) continue;\n }\n options.setLocaleStorage(name, locale);\n } catch {}\n }\n }\n\n if (\n !TREE_SHAKE_STORAGE_SESSION_STORAGE &&\n routing.storage.sessionStorage &&\n options?.setSessionStorage\n ) {\n for (let i = 0; i < routing.storage.sessionStorage.length; i++) {\n const { name } = routing.storage.sessionStorage[i];\n try {\n if (!(options?.overwrite ?? true) && options?.getSessionStorage) {\n if (options.getSessionStorage(name)) continue;\n }\n options.setSessionStorage(name, locale);\n } catch {}\n }\n }\n\n if (\n !TREE_SHAKE_STORAGE_HEADERS &&\n routing.storage.headers &&\n options?.setHeader\n ) {\n for (let i = 0; i < routing.storage.headers.length; i++) {\n try {\n options.setHeader(routing.storage.headers[i].name, locale);\n } catch {}\n }\n }\n};\n\n/**\n * Utility object to get and set the locale in storage based on configuration.\n *\n * @deprecated Use {@link LocaleStorageClient} (browser) or\n * {@link LocaleStorageServer} (server) instead.\n */\nexport const LocaleStorage = (options: LocaleStorageOptions) => ({\n getLocale: () => getLocaleFromStorage(options),\n setLocale: (locale: LocalesValues) => setLocaleInStorage(locale, options),\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"localeStorage.mjs","names":[],"sources":["../../../src/utils/localeStorage.ts"],"sourcesContent":["import { internationalization, routing } from '@intlayer/config/built';\nimport type { Locale } from '@intlayer/types/allLocales';\nimport type { CookiesAttributes } from '@intlayer/types/config';\nimport type { LocalesValues } from '@intlayer/types/module_augmentation';\nimport { getCookie } from './getCookie';\n\n// ── Tree-shake constants ──────────────────────────────────────────────────────\n// When these env vars are injected at build time, bundlers eliminate the\n// branches guarded by these constants.\n\n/**\n * True when cookie storage is explicitly disabled at build time.\n */\nconst TREE_SHAKE_STORAGE_COOKIES =\n process.env['INTLAYER_ROUTING_STORAGE_COOKIES'] === 'false';\n\n/**\n * True when localStorage is explicitly disabled at build time.\n */\nconst TREE_SHAKE_STORAGE_LOCAL_STORAGE =\n process.env['INTLAYER_ROUTING_STORAGE_LOCALSTORAGE'] === 'false';\n\n/**\n * True when sessionStorage is explicitly disabled at build time.\n */\nconst TREE_SHAKE_STORAGE_SESSION_STORAGE =\n process.env['INTLAYER_ROUTING_STORAGE_SESSIONSTORAGE'] === 'false';\n\n/**\n * True when header storage is explicitly disabled at build time.\n */\nconst TREE_SHAKE_STORAGE_HEADERS =\n process.env['INTLAYER_ROUTING_STORAGE_HEADERS'] === 'false';\n\n// ============================================================================\n// Shared types\n// ============================================================================\n\nexport type CookieBuildAttributes = {\n domain?: string;\n path?: string;\n secure?: boolean;\n httpOnly?: boolean;\n sameSite?: 'strict' | 'lax' | 'none';\n /** Expiry as milliseconds since epoch (Date.getTime()) or number of days */\n expires?: number | undefined;\n};\n\n// ============================================================================\n// Shared helpers\n// ============================================================================\n\nconst buildCookieString = (\n name: string,\n value: string,\n attributes: Omit<CookiesAttributes, 'name' | 'type'>\n): string => {\n const encodedValue = encodeURIComponent(value);\n const parts: string[] = [`${name}=${encodedValue}`];\n\n if (attributes.path) parts.push(`Path=${attributes.path}`);\n if (attributes.domain) parts.push(`Domain=${attributes.domain}`);\n if (attributes.expires instanceof Date)\n parts.push(`Expires=${attributes.expires.toUTCString()}`);\n if (attributes.secure) parts.push('Secure');\n if (attributes.sameSite) parts.push(`SameSite=${attributes.sameSite}`);\n return parts.join('; ');\n};\n\n// ============================================================================\n// Client-specific types and functions\n// (cookies via browser APIs, localStorage, sessionStorage — no headers)\n// ============================================================================\n\nexport type LocaleStorageClientOptions = {\n overwrite?: boolean;\n isCookieEnabled?: boolean;\n setCookieStore?: (\n name: string,\n value: string,\n cookie: CookieBuildAttributes\n ) => void;\n setCookieString?: (name: string, cookie: string) => void;\n getCookie?: (name: string) => string | undefined | null;\n setSessionStorage?: (name: string, value: string) => void;\n getSessionStorage?: (name: string) => string | undefined | null;\n setLocaleStorage?: (name: string, value: string) => void;\n getLocaleStorage?: (name: string) => string | undefined | null;\n};\n\n// cookieStore is part of the experimental Cookie Store API\ndeclare const cookieStore: any;\n\nexport const localeStorageOptions: LocaleStorageClientOptions = {\n getCookie: (name: string) =>\n document.cookie\n .split(';')\n .find((c) => c.trim().startsWith(`${name}=`))\n ?.split('=')[1],\n getLocaleStorage: (name: string) => localStorage.getItem(name),\n getSessionStorage: (name: string) => sessionStorage.getItem(name),\n isCookieEnabled: true,\n setCookieStore: (name, value, attributes) =>\n cookieStore.set({\n name,\n value,\n path: attributes.path,\n domain: attributes.domain,\n expires: attributes.expires,\n sameSite: attributes.sameSite,\n }),\n setCookieString: (_name, cookie) => {\n // biome-ignore lint/suspicious/noDocumentCookie: set cookie fallback\n document.cookie = cookie;\n },\n setSessionStorage: (name, value) => sessionStorage.setItem(name, value),\n setLocaleStorage: (name, value) => localStorage.setItem(name, value),\n};\n\n/**\n * Retrieves the locale from browser storage mechanisms\n * (cookies, localStorage, sessionStorage).\n * Does not read from headers — use `getLocaleFromStorageServer` for that.\n */\nexport const getLocaleFromStorageClient = (\n options: LocaleStorageClientOptions = localeStorageOptions\n): Locale | undefined => {\n const { locales } = internationalization;\n\n if (options?.isCookieEnabled === false) return undefined;\n\n const isValidLocale = (value: string | null | undefined): value is Locale =>\n !!value && locales.includes(value as Locale);\n\n if (!TREE_SHAKE_STORAGE_COOKIES) {\n for (let i = 0; i < (routing.storage.cookies ?? []).length; i++) {\n try {\n const value = options?.getCookie?.(routing.storage.cookies![i].name);\n if (isValidLocale(value)) return value;\n } catch {}\n }\n }\n\n if (!TREE_SHAKE_STORAGE_LOCAL_STORAGE) {\n for (let i = 0; i < (routing.storage.localStorage ?? []).length; i++) {\n try {\n const value = options?.getLocaleStorage?.(\n routing.storage.localStorage![i].name\n );\n if (isValidLocale(value)) return value;\n } catch {}\n }\n }\n\n if (!TREE_SHAKE_STORAGE_SESSION_STORAGE && routing.storage.sessionStorage) {\n for (let i = 0; i < routing.storage.sessionStorage.length; i++) {\n try {\n const value = options?.getSessionStorage?.(\n routing.storage.sessionStorage[i].name\n );\n if (isValidLocale(value)) return value;\n } catch {}\n }\n }\n};\n\n/**\n * Stores the locale in browser storage mechanisms\n * (cookies, localStorage, sessionStorage).\n * Does not write to headers — use `setLocaleInStorageServer` for that.\n */\nexport const setLocaleInStorageClient = (\n locale: LocalesValues,\n options?: LocaleStorageClientOptions\n): void => {\n if (options?.isCookieEnabled === false) return;\n\n if (!TREE_SHAKE_STORAGE_COOKIES && routing.storage.cookies) {\n for (let i = 0; i < routing.storage.cookies.length; i++) {\n const { name, attributes } = routing.storage.cookies[i];\n try {\n if (options?.setCookieStore) {\n options.setCookieStore(name, locale, {\n ...attributes,\n expires:\n attributes.expires instanceof Date\n ? attributes.expires.getTime()\n : attributes.expires,\n });\n }\n } catch {\n try {\n if (options?.setCookieString) {\n options.setCookieString(\n name,\n buildCookieString(name, locale, attributes)\n );\n }\n } catch {}\n }\n }\n }\n\n if (\n !TREE_SHAKE_STORAGE_LOCAL_STORAGE &&\n routing.storage.localStorage &&\n options?.setLocaleStorage\n ) {\n for (let i = 0; i < routing.storage.localStorage.length; i++) {\n const { name } = routing.storage.localStorage[i];\n try {\n if (!(options?.overwrite ?? true) && options?.getLocaleStorage) {\n if (options.getLocaleStorage(name)) continue;\n }\n options.setLocaleStorage(name, locale);\n } catch {}\n }\n }\n\n if (\n !TREE_SHAKE_STORAGE_SESSION_STORAGE &&\n routing.storage.sessionStorage &&\n options?.setSessionStorage\n ) {\n for (let i = 0; i < routing.storage.sessionStorage.length; i++) {\n const { name } = routing.storage.sessionStorage[i];\n try {\n if (!(options?.overwrite ?? true) && options?.getSessionStorage) {\n if (options.getSessionStorage(name)) continue;\n }\n options.setSessionStorage(name, locale);\n } catch {}\n }\n }\n};\n\n/**\n * Client-side locale storage utility.\n * Handles cookies (browser), localStorage and sessionStorage.\n * Does not access headers.\n *\n * @example\n * ```ts\n * const storage = LocaleStorageClient(localeStorageOptions);\n * const locale = storage.getLocale();\n * storage.setLocale('fr');\n * ```\n */\nexport const LocaleStorageClient = (options: LocaleStorageClientOptions) => ({\n getLocale: () => getLocaleFromStorageClient(options),\n setLocale: (locale: LocalesValues) =>\n setLocaleInStorageClient(locale, options),\n});\n\n// ============================================================================\n// Server-specific types and functions\n// (cookies via injected getter/setter, headers — no localStorage/sessionStorage)\n// ============================================================================\n\nexport type LocaleStorageServerOptions = {\n overwrite?: boolean;\n isCookieEnabled?: boolean;\n setCookieStore?: (\n name: string,\n value: string,\n cookie: CookieBuildAttributes\n ) => void;\n setCookieString?: (name: string, cookie: string) => void;\n getCookie?: (name: string) => string | undefined | null;\n getHeader?: (name: string) => string | undefined | null;\n setHeader?: (name: string, value: string) => void;\n};\n\n/**\n * Retrieves the locale from server-side storage mechanisms (cookies, headers).\n * Does not access localStorage or sessionStorage.\n * No browser cookie fallback — the caller must provide `getCookie`.\n */\nexport const getLocaleFromStorageServer = (\n options: LocaleStorageServerOptions\n): Locale | undefined => {\n const { locales } = internationalization;\n\n if (options?.isCookieEnabled === false) return undefined;\n\n const isValidLocale = (value: string | null | undefined): value is Locale =>\n !!value && locales.includes(value as Locale);\n\n if (!TREE_SHAKE_STORAGE_COOKIES && routing.storage.cookies) {\n for (let i = 0; i < routing.storage.cookies.length; i++) {\n try {\n const value = options?.getCookie?.(routing.storage.cookies[i].name);\n if (isValidLocale(value)) return value;\n } catch {}\n }\n }\n\n if (!TREE_SHAKE_STORAGE_HEADERS && routing.storage.headers) {\n for (let i = 0; i < routing.storage.headers.length; i++) {\n try {\n const value = options?.getHeader?.(routing.storage.headers[i].name);\n if (isValidLocale(value)) return value;\n } catch {}\n }\n }\n};\n\n/**\n * Stores the locale in server-side storage mechanisms (cookies, headers).\n * Does not write to localStorage or sessionStorage.\n */\nexport const setLocaleInStorageServer = (\n locale: LocalesValues,\n options?: LocaleStorageServerOptions\n): void => {\n if (options?.isCookieEnabled === false) return;\n\n if (!TREE_SHAKE_STORAGE_COOKIES && routing.storage.cookies) {\n for (let i = 0; i < routing.storage.cookies.length; i++) {\n const { name, attributes } = routing.storage.cookies[i];\n\n try {\n if (options?.setCookieStore) {\n options.setCookieStore(name, locale, {\n ...attributes,\n expires:\n attributes.expires instanceof Date\n ? attributes.expires.getTime()\n : attributes.expires,\n });\n }\n } catch {\n try {\n if (options?.setCookieString) {\n options.setCookieString(\n name,\n buildCookieString(name, locale, attributes)\n );\n }\n } catch {}\n }\n }\n }\n\n if (\n !TREE_SHAKE_STORAGE_HEADERS &&\n routing.storage.headers &&\n options?.setHeader\n ) {\n for (let i = 0; i < routing.storage.headers.length; i++) {\n try {\n options.setHeader(routing.storage.headers[i].name, locale);\n } catch {}\n }\n }\n};\n\n/**\n * Server-side locale storage utility.\n * Handles cookies (via injected getter/setter) and headers.\n * Does not access localStorage or sessionStorage.\n *\n * @example\n * ```ts\n * const storage = LocaleStorageServer({\n * getCookie: (name) => req.cookies[name],\n * setCookieStore: (name, value, attrs) => res.cookie(name, value, attrs),\n * getHeader: (name) => req.headers[name],\n * setHeader: (name, value) => res.setHeader(name, value),\n * });\n * const locale = storage.getLocale();\n * storage.setLocale('fr');\n * ```\n */\nexport const LocaleStorageServer = (options: LocaleStorageServerOptions) => ({\n getLocale: () => getLocaleFromStorageServer(options),\n setLocale: (locale: LocalesValues) =>\n setLocaleInStorageServer(locale, options),\n});\n\n// ============================================================================\n// Deprecated: combined LocaleStorage\n// Use LocaleStorageClient or LocaleStorageServer instead\n// ============================================================================\n\n/**\n * @deprecated Use {@link LocaleStorageClientOptions} or {@link LocaleStorageServerOptions} instead.\n */\nexport type LocaleStorageOptions = LocaleStorageClientOptions &\n LocaleStorageServerOptions;\n\n/**\n * Retrieves the locale from all storage mechanisms\n * (cookies, localStorage, sessionStorage, headers).\n *\n * @deprecated Use {@link getLocaleFromStorageClient} (browser) or\n * {@link getLocaleFromStorageServer} (server) instead.\n */\nexport const getLocaleFromStorage = (\n options: Pick<\n LocaleStorageOptions,\n | 'getCookie'\n | 'getSessionStorage'\n | 'getLocaleStorage'\n | 'getHeader'\n | 'isCookieEnabled'\n >\n): Locale | undefined => {\n const { locales } = internationalization;\n\n if (options?.isCookieEnabled === false) return undefined;\n\n const isValidLocale = (value: string | null | undefined): value is Locale =>\n !!value && locales.includes(value as Locale);\n\n const readCookie = (name: string): string | undefined => {\n try {\n const fromOption = options?.getCookie?.(name);\n if (fromOption !== null && fromOption !== undefined) return fromOption;\n } catch {}\n // Browser fallback kept for backward compatibility\n return getCookie(name);\n };\n\n if (!TREE_SHAKE_STORAGE_COOKIES && routing.storage.cookies) {\n for (let i = 0; i < routing.storage.cookies.length; i++) {\n const value = readCookie(routing.storage.cookies[i].name);\n if (isValidLocale(value)) return value;\n }\n }\n\n if (!TREE_SHAKE_STORAGE_LOCAL_STORAGE && routing.storage.localStorage) {\n for (let i = 0; i < routing.storage.localStorage.length; i++) {\n try {\n const value = options?.getLocaleStorage?.(\n routing.storage.localStorage[i].name\n );\n if (isValidLocale(value)) return value;\n } catch {}\n }\n }\n\n if (!TREE_SHAKE_STORAGE_SESSION_STORAGE && routing.storage.sessionStorage) {\n for (let i = 0; i < routing.storage.sessionStorage.length; i++) {\n try {\n const value = options?.getSessionStorage?.(\n routing.storage.sessionStorage[i].name\n );\n if (isValidLocale(value)) return value;\n } catch {}\n }\n }\n\n if (!TREE_SHAKE_STORAGE_HEADERS && routing.storage.headers) {\n for (let i = 0; i < routing.storage.headers.length; i++) {\n try {\n const value = options?.getHeader?.(routing.storage.headers[i].name);\n if (isValidLocale(value)) return value;\n } catch {}\n }\n }\n};\n\n/**\n * Stores the locale in all configured storage mechanisms\n * (cookies, localStorage, sessionStorage, headers).\n *\n * @deprecated Use {@link setLocaleInStorageClient} (browser) or\n * {@link setLocaleInStorageServer} (server) instead.\n */\nexport const setLocaleInStorage = (\n locale: LocalesValues,\n options?: LocaleStorageOptions\n): void => {\n if (options?.isCookieEnabled === false) return;\n\n if (!TREE_SHAKE_STORAGE_COOKIES && routing.storage.cookies) {\n for (let i = 0; i < routing.storage.cookies.length; i++) {\n const { name, attributes } = routing.storage.cookies[i];\n try {\n if (options?.setCookieStore) {\n options.setCookieStore(name, locale, {\n ...attributes,\n expires:\n attributes.expires instanceof Date\n ? attributes.expires.getTime()\n : attributes.expires,\n });\n }\n } catch {\n try {\n if (options?.setCookieString) {\n options.setCookieString(\n name,\n buildCookieString(name, locale, attributes)\n );\n }\n } catch {}\n }\n }\n }\n\n if (\n !TREE_SHAKE_STORAGE_LOCAL_STORAGE &&\n routing.storage.localStorage &&\n options?.setLocaleStorage\n ) {\n for (let i = 0; i < routing.storage.localStorage.length; i++) {\n const { name } = routing.storage.localStorage[i];\n try {\n if (!(options?.overwrite ?? true) && options?.getLocaleStorage) {\n if (options.getLocaleStorage(name)) continue;\n }\n options.setLocaleStorage(name, locale);\n } catch {}\n }\n }\n\n if (\n !TREE_SHAKE_STORAGE_SESSION_STORAGE &&\n routing.storage.sessionStorage &&\n options?.setSessionStorage\n ) {\n for (let i = 0; i < routing.storage.sessionStorage.length; i++) {\n const { name } = routing.storage.sessionStorage[i];\n try {\n if (!(options?.overwrite ?? true) && options?.getSessionStorage) {\n if (options.getSessionStorage(name)) continue;\n }\n options.setSessionStorage(name, locale);\n } catch {}\n }\n }\n\n if (\n !TREE_SHAKE_STORAGE_HEADERS &&\n routing.storage.headers &&\n options?.setHeader\n ) {\n for (let i = 0; i < routing.storage.headers.length; i++) {\n try {\n options.setHeader(routing.storage.headers[i].name, locale);\n } catch {}\n }\n }\n};\n\n/**\n * Utility object to get and set the locale in storage based on configuration.\n *\n * @deprecated Use {@link LocaleStorageClient} (browser) or\n * {@link LocaleStorageServer} (server) instead.\n */\nexport const LocaleStorage = (options: LocaleStorageOptions) => ({\n getLocale: () => getLocaleFromStorage(options),\n setLocale: (locale: LocalesValues) => setLocaleInStorage(locale, options),\n});\n"],"mappings":"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"}
@@ -57,8 +57,7 @@ import { percentage } from "./formatters/percentage.js";
57
57
  import { relativeTime } from "./formatters/relativeTime.js";
58
58
  import { units } from "./formatters/units.js";
59
59
  import { GenerateSitemapOptions, SitemapUrlEntry, generateSitemap, generateSitemapUrl } from "./localization/generateSitemap.js";
60
- import { CookieBuildAttributes, LocaleStorage, LocaleStorageClient, LocaleStorageClientOptions, LocaleStorageOptions, LocaleStorageServer, LocaleStorageServerOptions, getLocaleFromStorage, getLocaleFromStorageClient, getLocaleFromStorageServer, setLocaleInStorage, setLocaleInStorageClient, setLocaleInStorageServer } from "./utils/localeStorage.js";
61
- import { getBrowserLocale, localeStorageOptions } from "./localization/getBrowserLocale.js";
60
+ import { getBrowserLocale } from "./localization/getBrowserLocale.js";
62
61
  import { getHTMLTextDir } from "./localization/getHTMLTextDir.js";
63
62
  import { getLocale } from "./localization/getLocale.js";
64
63
  import { GetPrefixOptions, GetPrefixResult, getPrefix } from "./localization/getPrefix.js";
@@ -74,7 +73,7 @@ import { localeResolver } from "./localization/localeResolver.js";
74
73
  import { LocalizedPathResult, getCanonicalPath, getInternalPath, getLocalizedPath, getRewritePath, getRewriteRules } from "./localization/rewriteUtils.js";
75
74
  import { validatePrefix } from "./localization/validatePrefix.js";
76
75
  import { BlockQuoteNode, BoldTextNode, BreakLineNode, BreakThematicNode, CodeBlockNode, CodeFencedNode, CodeInlineNode, CompileOptions, ComponentOverrides, CustomComponentNode, ElementType, EscapedTextNode, FootnoteNode, FootnoteReferenceNode, GFMTaskNode, HTMLCommentNode, HTMLNode, HTMLSelfClosingNode, HTMLTag, HeadingNode, HeadingSetextNode, ImageNode, ItalicTextNode, LinkAngleBraceNode, LinkBareURLNode, LinkNode, MarkdownContext, MarkdownOptions, MarkdownRuntime, MarkedTextNode, NestedParser, NewlineNode, OrderedListNode, ParagraphNode, ParseState, Parser, ParserResult, ReferenceImageNode, ReferenceLinkNode, ReferenceNode, RenderRuleHook, Rule, RuleOutput, Rules, StrikethroughTextNode, TableNode, TableSeparatorNode, TextNode, UnorderedListNode } from "./markdown/types.js";
77
- import { compile, compileWithOptions, createCompiler } from "./markdown/compiler.js";
76
+ import { ParsedMarkdown, compile, compileWithOptions, createCompiler, parseMarkdown, renderMarkdownAst } from "./markdown/compiler.js";
78
77
  import { ATTRIBUTES_TO_SANITIZE, ATTRIBUTE_TO_NODE_PROP_MAP, ATTR_EXTRACTOR_R, BLOCKQUOTE_ALERT_R, BLOCKQUOTE_R, BLOCKQUOTE_TRIM_LEFT_MULTILINE_R, BLOCK_END_R, BREAK_LINE_R, BREAK_THEMATIC_R, CAPTURE_LETTER_AFTER_HYPHEN, CODE_BLOCK_FENCED_R, CODE_BLOCK_R, CODE_INLINE_R, CONSECUTIVE_NEWLINE_R, CR_NEWLINE_R, CUSTOM_COMPONENT_R, DO_NOT_PROCESS_HTML_ELEMENTS, DURATION_DELAY_TRIGGER, FOOTNOTE_R, FOOTNOTE_REFERENCE_R, FORMFEED_R, FRONT_MATTER_R, GFM_TASK_R, HEADING_ATX_COMPLIANT_R, HEADING_R, HEADING_SETEXT_R, HTML_BLOCK_ELEMENT_R, HTML_CHAR_CODE_R, HTML_COMMENT_R, HTML_CUSTOM_ATTR_R, HTML_LEFT_TRIM_AMOUNT_R, HTML_SELF_CLOSING_ELEMENT_R, INLINE_SKIP_R, INTERPOLATION_R, LINK_AUTOLINK_BARE_URL_R, LINK_AUTOLINK_R, LIST_LOOKBEHIND_R, LOOKAHEAD, ListType, NAMED_CODES_TO_UNICODE, NP_TABLE_R, ORDERED, ORDERED_LIST_BULLET, ORDERED_LIST_ITEM_PREFIX, ORDERED_LIST_ITEM_PREFIX_R, ORDERED_LIST_ITEM_R, ORDERED_LIST_R, PARAGRAPH_R, Priority, PriorityValue, REFERENCE_IMAGE_OR_LINK, REFERENCE_IMAGE_R, REFERENCE_LINK_R, RuleType, RuleTypeValue, SHORTCODE_R, SHOULD_RENDER_AS_BLOCK_R, TABLE_CENTER_ALIGN, TABLE_LEFT_ALIGN, TABLE_RIGHT_ALIGN, TABLE_TRIM_PIPES, TAB_R, TEXT_BOLD_R, TEXT_EMPHASIZED_R, TEXT_ESCAPED_R, TEXT_MARKED_R, TEXT_PLAIN_R, TEXT_STRIKETHROUGHED_R, TRIM_STARTING_NEWLINES, UNESCAPE_R, UNORDERED, UNORDERED_LIST_BULLET, UNORDERED_LIST_ITEM_PREFIX, UNORDERED_LIST_ITEM_PREFIX_R, UNORDERED_LIST_ITEM_R, UNORDERED_LIST_R, generateListItemPrefix, generateListItemPrefixRegex, generateListItemRegex, generateListRegex } from "./markdown/constants.js";
79
78
  import { parserFor } from "./markdown/parser.js";
80
79
  import { createRenderer, renderFor } from "./markdown/renderer.js";
@@ -87,6 +86,7 @@ import { checkIsURLAbsolute } from "./utils/checkIsURLAbsolute.js";
87
86
  import { getCookie } from "./utils/getCookie.js";
88
87
  import { isSameKeyPath } from "./utils/isSameKeyPath.js";
89
88
  import { isValidElement } from "./utils/isValidReactElement.js";
89
+ import { CookieBuildAttributes, LocaleStorage, LocaleStorageClient, LocaleStorageClientOptions, LocaleStorageOptions, LocaleStorageServer, LocaleStorageServerOptions, getLocaleFromStorage, getLocaleFromStorageClient, getLocaleFromStorageServer, localeStorageOptions, setLocaleInStorage, setLocaleInStorageClient, setLocaleInStorageServer } from "./utils/localeStorage.js";
90
90
  import { parseYaml } from "./utils/parseYaml.js";
91
91
  import { stringifyYaml } from "./utils/stringifyYaml.js";
92
- export { ATTRIBUTES_TO_SANITIZE, ATTRIBUTE_TO_NODE_PROP_MAP, ATTR_EXTRACTOR_R, BLOCKQUOTE_ALERT_R, BLOCKQUOTE_R, BLOCKQUOTE_TRIM_LEFT_MULTILINE_R, BLOCK_END_R, BREAK_LINE_R, BREAK_THEMATIC_R, type BlockQuoteNode, type BoldTextNode, type BreakLineNode, type BreakThematicNode, CAPTURE_LETTER_AFTER_HYPHEN, CODE_BLOCK_FENCED_R, CODE_BLOCK_R, CODE_INLINE_R, CONSECUTIVE_NEWLINE_R, CR_NEWLINE_R, CUSTOM_COMPONENT_R, CachedIntl, CachedIntl as Intl, type CodeBlockNode, type CodeFencedNode, type CodeInlineNode, type CompileOptions, type ComponentOverrides, ConditionCond, ConditionContent, ConditionContentStates, CookieBuildAttributes, type CustomComponentNode, DO_NOT_PROCESS_HTML_ELEMENTS, DURATION_DELAY_TRIGGER, DateTimePreset, DeepTransformContent, DotPath, type ElementType, EnterFormat, EnumerationCond, EnumerationContent, EnumerationContentState, type EscapedTextNode, FOOTNOTE_R, FOOTNOTE_REFERENCE_R, FORMFEED_R, FRONT_MATTER_R, FileCond, type FileContent, type FileContentConstructor, type FootnoteNode, type FootnoteReferenceNode, type GFMTaskNode, GFM_TASK_R, Gender, GenderCond, GenderContent, GenderContentStates, type GenerateSitemapOptions, GetNestingResult, type GetPrefixOptions, type GetPrefixResult, HEADING_ATX_COMPLIANT_R, HEADING_R, HEADING_SETEXT_R, type HTMLCommentNode, HTMLContent, HTMLContentConstructor, type HTMLNode, type HTMLSelfClosingNode, type HTMLTag, HTMLTagsType, HTMLValidationIssue, HTMLValidationResult, HTML_BLOCK_ELEMENT_R, HTML_CHAR_CODE_R, HTML_COMMENT_R, HTML_CUSTOM_ATTR_R, HTML_LEFT_TRIM_AMOUNT_R, HTML_SELF_CLOSING_ELEMENT_R, HTML_TAGS, type HeadingNode, type HeadingSetextNode, IInterpreterPlugin, IInterpreterPluginState, INLINE_SKIP_R, INTERPOLATION_R, type ImageNode, InsertionCond, InsertionContent, InsertionContentConstructor, IsAny, type ItalicTextNode, JsonValue, LINK_AUTOLINK_BARE_URL_R, LINK_AUTOLINK_R, LIST_LOOKBEHIND_R, LOOKAHEAD, type LinkAngleBraceNode, type LinkBareURLNode, type LinkNode, ListType, LocaleStorage, LocaleStorageClient, LocaleStorageClientOptions, LocaleStorageOptions, LocaleStorageServer, LocaleStorageServerOptions, type LocalizedPathResult, MarkdownContent, MarkdownContentConstructor, type MarkdownContext, type MarkdownOptions, type MarkdownRuntime, type HTMLValidationIssue as MarkdownValidationIssue, MarkdownValidationResult, type MarkedTextNode, NAMED_CODES_TO_UNICODE, NP_TABLE_R, NestedCond, NestedContent, NestedContentState, type NestedParser, type NewlineNode, NodeProps, ORDERED, ORDERED_LIST_BULLET, ORDERED_LIST_ITEM_PREFIX, ORDERED_LIST_ITEM_PREFIX_R, ORDERED_LIST_ITEM_R, ORDERED_LIST_R, type OrderedListNode, PARAGRAPH_R, type ParagraphNode, type ParseState, type Parser, type ParserResult, Plugins, PluralCategory, PluralCond, PluralContent, PluralContentState, PortableObject, Priority, PriorityValue, REFERENCE_IMAGE_OR_LINK, REFERENCE_IMAGE_R, REFERENCE_LINK_R, type ReferenceImageNode, type ReferenceLinkNode, type ReferenceNode, type RenderRuleHook, type Rule, type RuleOutput, RuleType, RuleTypeValue, type Rules, SHORTCODE_R, SHOULD_RENDER_AS_BLOCK_R, type SitemapUrlEntry, type StrikethroughTextNode, TABLE_CENTER_ALIGN, TABLE_LEFT_ALIGN, TABLE_RIGHT_ALIGN, TABLE_TRIM_PIPES, TAB_R, TEXT_BOLD_R, TEXT_EMPHASIZED_R, TEXT_ESCAPED_R, TEXT_MARKED_R, TEXT_PLAIN_R, TEXT_STRIKETHROUGHED_R, TRIM_STARTING_NEWLINES, type TableNode, type TableSeparatorNode, type TextNode, TranslationCond, TranslationContent, UNESCAPE_R, UNORDERED, UNORDERED_LIST_BULLET, UNORDERED_LIST_ITEM_PREFIX, UNORDERED_LIST_ITEM_PREFIX_R, UNORDERED_LIST_ITEM_R, UNORDERED_LIST_R, UnionKeys, type UnorderedListNode, VOID_HTML_ELEMENTS, ValidDotPathsFor, ValueAtKey, WrappedIntl, allowInline, anyScopeRegex, attributeValueToNodePropValue, bindIntl, blockRegex, buildMaskPlugin, captureNothing, checkIsURLAbsolute, checkMissingLocalesPlugin, compact, compile, compileWithOptions, condition as cond, conditionPlugin, createCompiler, createRenderer, currency, cx, date, deepTransformNode, editDictionaryByKeyPath, enumeration as enu, enumerationPlugin, fallbackPlugin, type file, type fileContent, filePlugin, filterMissingTranslationsOnlyPlugin, filterTranslationsOnlyPlugin, findMatchingCondition, gender, genderPlugin, generateListItemPrefix, generateListItemPrefixRegex, generateListItemRegex, generateListRegex, generateSitemap, generateSitemapUrl, get, getBasePlugins, getBrowserLocale, getCachedIntl, getCanonicalPath, getCondition, getContent, getContentNodeByKeyPath, getCookie, getDefaultNode, getDictionary, getEmptyNode, getEnumeration, getFilterMissingTranslationsContent, getFilterMissingTranslationsDictionary, getFilterTranslationsOnlyContent, getFilterTranslationsOnlyDictionary, getFilteredLocalesContent, getFilteredLocalesDictionary, getHTML, getHTMLTextDir, getInsertionValues, getInternalPath, getIntlayer, getLocale, getLocaleFromPath, getLocaleFromStorage, getLocaleFromStorageClient, getLocaleFromStorageServer, getLocaleLang, getLocaleName, getLocalizedContent, getLocalizedPath, getLocalizedUrl, getMarkdownMetadata, getMaskContent, getMissingLocalesContent, getMissingLocalesContentFromDictionary, getMultilingualDictionary, getMultilingualUrls, getNesting, getNodeChildren, getNodeType, getPathWithoutLocale, getPerLocaleDictionary, getPlural, getPrefix, getReplacedValuesContent, getRewritePath, getRewriteRules, getSplittedContent, getSplittedDictionaryContent, getTranslation, html, i18nextToIntlayerFormatter, icuToIntlayerFormatter, inlineRegex, insertion as insert, insertContentInDictionary, insertionPlugin, intlayerToI18nextFormatter, intlayerToICUFormatter, intlayerToPortableObjectFormatter, intlayerToVueI18nFormatter, isSameKeyPath, isValidElement, list, localeDetector, localeFlatMap, localeMap, localeRecord, localeResolver, localeStorageOptions, markdown as md, mergeDictionaries, nesting as nest, nestedPlugin, normalizeAttributeKey, normalizeDictionaries, normalizeDictionary, normalizeWhitespace, number, orderDictionaries, parseBlock, parseCaptureInline, parseInline, parseSimpleInline, parseStyleAttribute, parseTableAlign, parseTableAlignCapture, parseTableCells, parseTableRow, parseYaml, parserFor, percentage, plural, pluralPlugin, portableObjectToIntlayerFormatter, presets, qualifies, relativeTime, removeContentNodeByKeyPath, renameContentNodeByKeyPath, renderFor, renderNothing, sanitizer, setLocaleInStorage, setLocaleInStorageClient, setLocaleInStorageServer, simpleInlineRegex, slugify, some, splitInsertionTemplate, startsWith, stringifyYaml, translation as t, translationPlugin, trimEnd, trimLeadingWhitespaceOutsideFences, unescapeString, units, unquote, updateNodeChildren, validateHTML, validateMarkdown, validatePrefix, vueI18nToIntlayerFormatter };
92
+ export { ATTRIBUTES_TO_SANITIZE, ATTRIBUTE_TO_NODE_PROP_MAP, ATTR_EXTRACTOR_R, BLOCKQUOTE_ALERT_R, BLOCKQUOTE_R, BLOCKQUOTE_TRIM_LEFT_MULTILINE_R, BLOCK_END_R, BREAK_LINE_R, BREAK_THEMATIC_R, type BlockQuoteNode, type BoldTextNode, type BreakLineNode, type BreakThematicNode, CAPTURE_LETTER_AFTER_HYPHEN, CODE_BLOCK_FENCED_R, CODE_BLOCK_R, CODE_INLINE_R, CONSECUTIVE_NEWLINE_R, CR_NEWLINE_R, CUSTOM_COMPONENT_R, CachedIntl, CachedIntl as Intl, type CodeBlockNode, type CodeFencedNode, type CodeInlineNode, type CompileOptions, type ComponentOverrides, ConditionCond, ConditionContent, ConditionContentStates, CookieBuildAttributes, type CustomComponentNode, DO_NOT_PROCESS_HTML_ELEMENTS, DURATION_DELAY_TRIGGER, DateTimePreset, DeepTransformContent, DotPath, type ElementType, EnterFormat, EnumerationCond, EnumerationContent, EnumerationContentState, type EscapedTextNode, FOOTNOTE_R, FOOTNOTE_REFERENCE_R, FORMFEED_R, FRONT_MATTER_R, FileCond, type FileContent, type FileContentConstructor, type FootnoteNode, type FootnoteReferenceNode, type GFMTaskNode, GFM_TASK_R, Gender, GenderCond, GenderContent, GenderContentStates, type GenerateSitemapOptions, GetNestingResult, type GetPrefixOptions, type GetPrefixResult, HEADING_ATX_COMPLIANT_R, HEADING_R, HEADING_SETEXT_R, type HTMLCommentNode, HTMLContent, HTMLContentConstructor, type HTMLNode, type HTMLSelfClosingNode, type HTMLTag, HTMLTagsType, HTMLValidationIssue, HTMLValidationResult, HTML_BLOCK_ELEMENT_R, HTML_CHAR_CODE_R, HTML_COMMENT_R, HTML_CUSTOM_ATTR_R, HTML_LEFT_TRIM_AMOUNT_R, HTML_SELF_CLOSING_ELEMENT_R, HTML_TAGS, type HeadingNode, type HeadingSetextNode, IInterpreterPlugin, IInterpreterPluginState, INLINE_SKIP_R, INTERPOLATION_R, type ImageNode, InsertionCond, InsertionContent, InsertionContentConstructor, IsAny, type ItalicTextNode, JsonValue, LINK_AUTOLINK_BARE_URL_R, LINK_AUTOLINK_R, LIST_LOOKBEHIND_R, LOOKAHEAD, type LinkAngleBraceNode, type LinkBareURLNode, type LinkNode, ListType, LocaleStorage, LocaleStorageClient, LocaleStorageClientOptions, LocaleStorageOptions, LocaleStorageServer, LocaleStorageServerOptions, type LocalizedPathResult, MarkdownContent, MarkdownContentConstructor, type MarkdownContext, type MarkdownOptions, type MarkdownRuntime, type HTMLValidationIssue as MarkdownValidationIssue, MarkdownValidationResult, type MarkedTextNode, NAMED_CODES_TO_UNICODE, NP_TABLE_R, NestedCond, NestedContent, NestedContentState, type NestedParser, type NewlineNode, NodeProps, ORDERED, ORDERED_LIST_BULLET, ORDERED_LIST_ITEM_PREFIX, ORDERED_LIST_ITEM_PREFIX_R, ORDERED_LIST_ITEM_R, ORDERED_LIST_R, type OrderedListNode, PARAGRAPH_R, type ParagraphNode, type ParseState, ParsedMarkdown, type Parser, type ParserResult, Plugins, PluralCategory, PluralCond, PluralContent, PluralContentState, PortableObject, Priority, PriorityValue, REFERENCE_IMAGE_OR_LINK, REFERENCE_IMAGE_R, REFERENCE_LINK_R, type ReferenceImageNode, type ReferenceLinkNode, type ReferenceNode, type RenderRuleHook, type Rule, type RuleOutput, RuleType, RuleTypeValue, type Rules, SHORTCODE_R, SHOULD_RENDER_AS_BLOCK_R, type SitemapUrlEntry, type StrikethroughTextNode, TABLE_CENTER_ALIGN, TABLE_LEFT_ALIGN, TABLE_RIGHT_ALIGN, TABLE_TRIM_PIPES, TAB_R, TEXT_BOLD_R, TEXT_EMPHASIZED_R, TEXT_ESCAPED_R, TEXT_MARKED_R, TEXT_PLAIN_R, TEXT_STRIKETHROUGHED_R, TRIM_STARTING_NEWLINES, type TableNode, type TableSeparatorNode, type TextNode, TranslationCond, TranslationContent, UNESCAPE_R, UNORDERED, UNORDERED_LIST_BULLET, UNORDERED_LIST_ITEM_PREFIX, UNORDERED_LIST_ITEM_PREFIX_R, UNORDERED_LIST_ITEM_R, UNORDERED_LIST_R, UnionKeys, type UnorderedListNode, VOID_HTML_ELEMENTS, ValidDotPathsFor, ValueAtKey, WrappedIntl, allowInline, anyScopeRegex, attributeValueToNodePropValue, bindIntl, blockRegex, buildMaskPlugin, captureNothing, checkIsURLAbsolute, checkMissingLocalesPlugin, compact, compile, compileWithOptions, condition as cond, conditionPlugin, createCompiler, createRenderer, currency, cx, date, deepTransformNode, editDictionaryByKeyPath, enumeration as enu, enumerationPlugin, fallbackPlugin, type file, type fileContent, filePlugin, filterMissingTranslationsOnlyPlugin, filterTranslationsOnlyPlugin, findMatchingCondition, gender, genderPlugin, generateListItemPrefix, generateListItemPrefixRegex, generateListItemRegex, generateListRegex, generateSitemap, generateSitemapUrl, get, getBasePlugins, getBrowserLocale, getCachedIntl, getCanonicalPath, getCondition, getContent, getContentNodeByKeyPath, getCookie, getDefaultNode, getDictionary, getEmptyNode, getEnumeration, getFilterMissingTranslationsContent, getFilterMissingTranslationsDictionary, getFilterTranslationsOnlyContent, getFilterTranslationsOnlyDictionary, getFilteredLocalesContent, getFilteredLocalesDictionary, getHTML, getHTMLTextDir, getInsertionValues, getInternalPath, getIntlayer, getLocale, getLocaleFromPath, getLocaleFromStorage, getLocaleFromStorageClient, getLocaleFromStorageServer, getLocaleLang, getLocaleName, getLocalizedContent, getLocalizedPath, getLocalizedUrl, getMarkdownMetadata, getMaskContent, getMissingLocalesContent, getMissingLocalesContentFromDictionary, getMultilingualDictionary, getMultilingualUrls, getNesting, getNodeChildren, getNodeType, getPathWithoutLocale, getPerLocaleDictionary, getPlural, getPrefix, getReplacedValuesContent, getRewritePath, getRewriteRules, getSplittedContent, getSplittedDictionaryContent, getTranslation, html, i18nextToIntlayerFormatter, icuToIntlayerFormatter, inlineRegex, insertion as insert, insertContentInDictionary, insertionPlugin, intlayerToI18nextFormatter, intlayerToICUFormatter, intlayerToPortableObjectFormatter, intlayerToVueI18nFormatter, isSameKeyPath, isValidElement, list, localeDetector, localeFlatMap, localeMap, localeRecord, localeResolver, localeStorageOptions, markdown as md, mergeDictionaries, nesting as nest, nestedPlugin, normalizeAttributeKey, normalizeDictionaries, normalizeDictionary, normalizeWhitespace, number, orderDictionaries, parseBlock, parseCaptureInline, parseInline, parseMarkdown, parseSimpleInline, parseStyleAttribute, parseTableAlign, parseTableAlignCapture, parseTableCells, parseTableRow, parseYaml, parserFor, percentage, plural, pluralPlugin, portableObjectToIntlayerFormatter, presets, qualifies, relativeTime, removeContentNodeByKeyPath, renameContentNodeByKeyPath, renderFor, renderMarkdownAst, renderNothing, sanitizer, setLocaleInStorage, setLocaleInStorageClient, setLocaleInStorageServer, simpleInlineRegex, slugify, some, splitInsertionTemplate, startsWith, stringifyYaml, translation as t, translationPlugin, trimEnd, trimLeadingWhitespaceOutsideFences, unescapeString, units, unquote, updateNodeChildren, validateHTML, validateMarkdown, validatePrefix, vueI18nToIntlayerFormatter };
@@ -16,7 +16,7 @@ import { ConditionContentStates } from "../transpiler/condition/condition.js";
16
16
  * // 'The condition is validated'
17
17
  * ```
18
18
  */
19
- declare const getCondition: <Content>(conditionContent: ConditionContentStates<Content>, state?: boolean) => Content;
19
+ declare const getCondition: <const Content>(conditionContent: ConditionContentStates<Content>, state?: boolean) => Content;
20
20
  //#endregion
21
21
  export { getCondition };
22
22
  //# sourceMappingURL=getCondition.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getCondition.d.ts","names":[],"sources":["../../../src/interpreter/getCondition.ts"],"mappings":";;;;;AAkBA;;;;;;;;;;;;;cAAa,YAAA,YACX,gBAAA,EAAkB,sBAAA,CAAuB,OAAA,GACzC,KAAA,eACC,OAAA"}
1
+ {"version":3,"file":"getCondition.d.ts","names":[],"sources":["../../../src/interpreter/getCondition.ts"],"mappings":";;;;;AAkBA;;;;;;;;;;;;;cAAa,YAAA,kBACX,gBAAA,EAAkB,sBAAA,CAAuB,OAAA,GACzC,KAAA,eACC,OAAA"}
@@ -10,7 +10,7 @@ declare const getBasePlugins: (locale?: LocalesValues, fallback?: boolean) => Pl
10
10
  * @param node The node to transform.
11
11
  * @param locale The locale to use if your transformers need it (e.g. for translations).
12
12
  */
13
- declare const getContent: <T extends ContentNode, L extends LocalesValues = DeclaredLocales>(node: T, nodeProps: NodeProps, plugins?: Plugins[]) => DeepTransformContent<T, IInterpreterPluginState, L>;
13
+ declare const getContent: <const T extends ContentNode, const L extends LocalesValues = DeclaredLocales>(node: T, nodeProps: NodeProps, plugins?: Plugins[]) => DeepTransformContent<T, IInterpreterPluginState, L>;
14
14
  //#endregion
15
15
  export { getBasePlugins, getContent };
16
16
  //# sourceMappingURL=getContent.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getContent.d.ts","names":[],"sources":["../../../../src/interpreter/getContent/getContent.ts"],"mappings":";;;;;cAqBa,cAAA,GACX,MAAA,GAAS,aAAA,EACT,QAAA,eACC,OAAO;;AAHV;;;;;cAuBa,UAAA,aACD,WAAA,YACA,aAAA,GAAgB,eAAA,EAE1B,IAAA,EAAM,CAAA,EACN,SAAA,EAAW,SAAA,EACX,OAAA,GAAS,OAAA,OAKH,oBAAA,CAAqB,CAAA,EAAG,uBAAA,EAAyB,CAAA"}
1
+ {"version":3,"file":"getContent.d.ts","names":[],"sources":["../../../../src/interpreter/getContent/getContent.ts"],"mappings":";;;;;cAqBa,cAAA,GACX,MAAA,GAAS,aAAA,EACT,QAAA,eACC,OAAO;;AAHV;;;;;cAuBa,UAAA,mBACK,WAAA,kBACA,aAAA,GAAgB,eAAA,EAEhC,IAAA,EAAM,CAAA,EACN,SAAA,EAAW,SAAA,EACX,OAAA,GAAS,OAAA,OAKH,oBAAA,CAAqB,CAAA,EAAG,uBAAA,EAAyB,CAAA"}
@@ -11,7 +11,7 @@ import { DeclaredLocales, LocalesValues } from "@intlayer/types/module_augmentat
11
11
  * @param additionalPlugins An array of NodeTransformer that define how to transform recognized nodes.
12
12
  * If omitted, we’ll use a default set of plugins.
13
13
  */
14
- declare const getDictionary: <T extends Dictionary, L extends LocalesValues = DeclaredLocales>(dictionary: T, locale?: L, plugins?: Plugins[]) => DeepTransformContent<T["content"], IInterpreterPluginState, L>;
14
+ declare const getDictionary: <const T extends Dictionary, const L extends LocalesValues = DeclaredLocales>(dictionary: T, locale?: L, plugins?: Plugins[]) => DeepTransformContent<T["content"], IInterpreterPluginState, L>;
15
15
  //#endregion
16
16
  export { getDictionary };
17
17
  //# sourceMappingURL=getDictionary.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"getDictionary.d.ts","names":[],"sources":["../../../src/interpreter/getDictionary.ts"],"mappings":";;;;;;;;AAqBA;;;;;cAAa,aAAA,aACD,UAAA,YACA,aAAA,GAAgB,eAAA,EAE1B,UAAA,EAAY,CAAA,EACZ,MAAA,GAAS,CAAA,EACT,OAAA,GAAS,OAAA,OACR,oBAAA,CAAqB,CAAA,aAAc,uBAAA,EAAyB,CAAA"}
1
+ {"version":3,"file":"getDictionary.d.ts","names":[],"sources":["../../../src/interpreter/getDictionary.ts"],"mappings":";;;;;;;;AAqBA;;;;;cAAa,aAAA,mBACK,UAAA,kBACA,aAAA,GAAgB,eAAA,EAEhC,UAAA,EAAY,CAAA,EACZ,MAAA,GAAS,CAAA,EACT,OAAA,GAAS,OAAA,OACR,oBAAA,CAAqB,CAAA,aAAc,uBAAA,EAAyB,CAAA"}
@@ -27,7 +27,7 @@ import { EnterFormat, EnumerationContentState } from "../transpiler/enumeration/
27
27
  *
28
28
  * If no keys match, the default key is '1'.
29
29
  */
30
- declare const findMatchingCondition: <Content>(enumerationContent: EnumerationContentState<Content>, quantity: number) => EnterFormat | undefined;
30
+ declare const findMatchingCondition: <const Content>(enumerationContent: EnumerationContentState<Content>, quantity: number) => EnterFormat | undefined;
31
31
  /**
32
32
  * Picks content from an enumeration map based on a provided quantity.
33
33
  *
@@ -52,7 +52,7 @@ declare const findMatchingCondition: <Content>(enumerationContent: EnumerationCo
52
52
  * // 'Many items'
53
53
  * ```
54
54
  */
55
- declare const getEnumeration: <Content>(enumerationContent: EnumerationContentState<Content>, quantity: number) => Content;
55
+ declare const getEnumeration: <const Content>(enumerationContent: EnumerationContentState<Content>, quantity: number) => Content;
56
56
  //#endregion
57
57
  export { findMatchingCondition, getEnumeration };
58
58
  //# sourceMappingURL=getEnumeration.d.ts.map