@intlayer/core 8.0.4 → 8.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (211) hide show
  1. package/dist/cjs/_virtual/{rolldown_runtime.cjs → _rolldown/runtime.cjs} +1 -1
  2. package/dist/cjs/deepTransformPlugins/getFilterMissingTranslationsContent.cjs +3 -2
  3. package/dist/cjs/deepTransformPlugins/getFilterMissingTranslationsContent.cjs.map +1 -1
  4. package/dist/cjs/deepTransformPlugins/getFilterTranslationsOnlyContent.cjs +3 -2
  5. package/dist/cjs/deepTransformPlugins/getFilterTranslationsOnlyContent.cjs.map +1 -1
  6. package/dist/cjs/deepTransformPlugins/getFilteredLocalesContent.cjs +2 -1
  7. package/dist/cjs/deepTransformPlugins/getFilteredLocalesContent.cjs.map +1 -1
  8. package/dist/cjs/deepTransformPlugins/getLocalizedContent.cjs +1 -0
  9. package/dist/cjs/deepTransformPlugins/getLocalizedContent.cjs.map +1 -1
  10. package/dist/cjs/deepTransformPlugins/getMaskContent.cjs +1 -0
  11. package/dist/cjs/deepTransformPlugins/getMaskContent.cjs.map +1 -1
  12. package/dist/cjs/deepTransformPlugins/getMissingLocalesContent.cjs +3 -2
  13. package/dist/cjs/deepTransformPlugins/getMissingLocalesContent.cjs.map +1 -1
  14. package/dist/cjs/deepTransformPlugins/getMultilingualDictionary.cjs +1 -0
  15. package/dist/cjs/deepTransformPlugins/getMultilingualDictionary.cjs.map +1 -1
  16. package/dist/cjs/deepTransformPlugins/getReplacedValuesContent.cjs +1 -0
  17. package/dist/cjs/deepTransformPlugins/getReplacedValuesContent.cjs.map +1 -1
  18. package/dist/cjs/deepTransformPlugins/getSplittedContent.cjs +2 -1
  19. package/dist/cjs/deepTransformPlugins/getSplittedContent.cjs.map +1 -1
  20. package/dist/cjs/deepTransformPlugins/index.cjs +1 -0
  21. package/dist/cjs/deepTransformPlugins/insertContentInDictionary.cjs +2 -1
  22. package/dist/cjs/deepTransformPlugins/insertContentInDictionary.cjs.map +1 -1
  23. package/dist/cjs/dictionaryManipulator/editDictionaryByKeyPath.cjs +2 -1
  24. package/dist/cjs/dictionaryManipulator/editDictionaryByKeyPath.cjs.map +1 -1
  25. package/dist/cjs/dictionaryManipulator/getContentNodeByKeyPath.cjs +2 -1
  26. package/dist/cjs/dictionaryManipulator/getContentNodeByKeyPath.cjs.map +1 -1
  27. package/dist/cjs/dictionaryManipulator/getDefaultNode.cjs +2 -1
  28. package/dist/cjs/dictionaryManipulator/getDefaultNode.cjs.map +1 -1
  29. package/dist/cjs/dictionaryManipulator/getEmptyNode.cjs +2 -1
  30. package/dist/cjs/dictionaryManipulator/getEmptyNode.cjs.map +1 -1
  31. package/dist/cjs/dictionaryManipulator/getNodeChildren.cjs +2 -1
  32. package/dist/cjs/dictionaryManipulator/getNodeChildren.cjs.map +1 -1
  33. package/dist/cjs/dictionaryManipulator/getNodeType.cjs +2 -1
  34. package/dist/cjs/dictionaryManipulator/getNodeType.cjs.map +1 -1
  35. package/dist/cjs/dictionaryManipulator/index.cjs +1 -0
  36. package/dist/cjs/dictionaryManipulator/mergeDictionaries.cjs +3 -2
  37. package/dist/cjs/dictionaryManipulator/mergeDictionaries.cjs.map +1 -1
  38. package/dist/cjs/dictionaryManipulator/normalizeDictionary.cjs +1 -0
  39. package/dist/cjs/dictionaryManipulator/normalizeDictionary.cjs.map +1 -1
  40. package/dist/cjs/dictionaryManipulator/orderDictionaries.cjs +3 -2
  41. package/dist/cjs/dictionaryManipulator/orderDictionaries.cjs.map +1 -1
  42. package/dist/cjs/dictionaryManipulator/removeContentNodeByKeyPath.cjs +2 -1
  43. package/dist/cjs/dictionaryManipulator/removeContentNodeByKeyPath.cjs.map +1 -1
  44. package/dist/cjs/dictionaryManipulator/renameContentNodeByKeyPath.cjs +2 -1
  45. package/dist/cjs/dictionaryManipulator/renameContentNodeByKeyPath.cjs.map +1 -1
  46. package/dist/cjs/dictionaryManipulator/updateNodeChildren.cjs +2 -1
  47. package/dist/cjs/dictionaryManipulator/updateNodeChildren.cjs.map +1 -1
  48. package/dist/cjs/formatters/compact.cjs +3 -2
  49. package/dist/cjs/formatters/compact.cjs.map +1 -1
  50. package/dist/cjs/formatters/currency.cjs +3 -2
  51. package/dist/cjs/formatters/currency.cjs.map +1 -1
  52. package/dist/cjs/formatters/date.cjs +3 -2
  53. package/dist/cjs/formatters/date.cjs.map +1 -1
  54. package/dist/cjs/formatters/index.cjs +1 -0
  55. package/dist/cjs/formatters/list.cjs +3 -2
  56. package/dist/cjs/formatters/list.cjs.map +1 -1
  57. package/dist/cjs/formatters/number.cjs +3 -2
  58. package/dist/cjs/formatters/number.cjs.map +1 -1
  59. package/dist/cjs/formatters/percentage.cjs +3 -2
  60. package/dist/cjs/formatters/percentage.cjs.map +1 -1
  61. package/dist/cjs/formatters/relativeTime.cjs +3 -2
  62. package/dist/cjs/formatters/relativeTime.cjs.map +1 -1
  63. package/dist/cjs/formatters/units.cjs +3 -2
  64. package/dist/cjs/formatters/units.cjs.map +1 -1
  65. package/dist/cjs/getStorageAttributes.cjs +2 -1
  66. package/dist/cjs/getStorageAttributes.cjs.map +1 -1
  67. package/dist/cjs/index.cjs +1 -0
  68. package/dist/cjs/interpreter/getCondition.cjs +1 -0
  69. package/dist/cjs/interpreter/getCondition.cjs.map +1 -1
  70. package/dist/cjs/interpreter/getContent/deepTransform.cjs +2 -1
  71. package/dist/cjs/interpreter/getContent/deepTransform.cjs.map +1 -1
  72. package/dist/cjs/interpreter/getContent/getContent.cjs +3 -2
  73. package/dist/cjs/interpreter/getContent/getContent.cjs.map +1 -1
  74. package/dist/cjs/interpreter/getContent/index.cjs +1 -0
  75. package/dist/cjs/interpreter/getContent/plugins.cjs +2 -1
  76. package/dist/cjs/interpreter/getContent/plugins.cjs.map +1 -1
  77. package/dist/cjs/interpreter/getDictionary.cjs +1 -0
  78. package/dist/cjs/interpreter/getDictionary.cjs.map +1 -1
  79. package/dist/cjs/interpreter/getEnumeration.cjs +1 -0
  80. package/dist/cjs/interpreter/getEnumeration.cjs.map +1 -1
  81. package/dist/cjs/interpreter/getGender.cjs +1 -0
  82. package/dist/cjs/interpreter/getGender.cjs.map +1 -1
  83. package/dist/cjs/interpreter/getHTML.cjs +1 -0
  84. package/dist/cjs/interpreter/getHTML.cjs.map +1 -1
  85. package/dist/cjs/interpreter/getInsertion.cjs +1 -0
  86. package/dist/cjs/interpreter/getInsertion.cjs.map +1 -1
  87. package/dist/cjs/interpreter/getIntlayer.cjs +3 -2
  88. package/dist/cjs/interpreter/getIntlayer.cjs.map +1 -1
  89. package/dist/cjs/interpreter/getNesting.cjs +1 -0
  90. package/dist/cjs/interpreter/getNesting.cjs.map +1 -1
  91. package/dist/cjs/interpreter/getTranslation.cjs +1 -0
  92. package/dist/cjs/interpreter/getTranslation.cjs.map +1 -1
  93. package/dist/cjs/interpreter/index.cjs +1 -0
  94. package/dist/cjs/interpreter/splitAndJoinInsertion.cjs +1 -0
  95. package/dist/cjs/interpreter/splitAndJoinInsertion.cjs.map +1 -1
  96. package/dist/cjs/localization/getBrowserLocale.cjs +3 -2
  97. package/dist/cjs/localization/getBrowserLocale.cjs.map +1 -1
  98. package/dist/cjs/localization/getHTMLTextDir.cjs +2 -1
  99. package/dist/cjs/localization/getHTMLTextDir.cjs.map +1 -1
  100. package/dist/cjs/localization/getLocale.cjs +3 -2
  101. package/dist/cjs/localization/getLocale.cjs.map +1 -1
  102. package/dist/cjs/localization/getLocaleFromPath.cjs +3 -2
  103. package/dist/cjs/localization/getLocaleFromPath.cjs.map +1 -1
  104. package/dist/cjs/localization/getLocaleLang.cjs +1 -0
  105. package/dist/cjs/localization/getLocaleLang.cjs.map +1 -1
  106. package/dist/cjs/localization/getLocaleName.cjs +1 -0
  107. package/dist/cjs/localization/getLocaleName.cjs.map +1 -1
  108. package/dist/cjs/localization/getLocalizedUrl.cjs +3 -2
  109. package/dist/cjs/localization/getLocalizedUrl.cjs.map +1 -1
  110. package/dist/cjs/localization/getMultilingualUrls.cjs +3 -2
  111. package/dist/cjs/localization/getMultilingualUrls.cjs.map +1 -1
  112. package/dist/cjs/localization/getPathWithoutLocale.cjs +3 -2
  113. package/dist/cjs/localization/getPathWithoutLocale.cjs.map +1 -1
  114. package/dist/cjs/localization/getPrefix.cjs +3 -2
  115. package/dist/cjs/localization/getPrefix.cjs.map +1 -1
  116. package/dist/cjs/localization/index.cjs +1 -0
  117. package/dist/cjs/localization/localeDetector.cjs +1 -0
  118. package/dist/cjs/localization/localeDetector.cjs.map +1 -1
  119. package/dist/cjs/localization/localeMapper.cjs +3 -2
  120. package/dist/cjs/localization/localeMapper.cjs.map +1 -1
  121. package/dist/cjs/localization/localeResolver.cjs +3 -2
  122. package/dist/cjs/localization/localeResolver.cjs.map +1 -1
  123. package/dist/cjs/localization/rewriteUtils.cjs +1 -0
  124. package/dist/cjs/localization/rewriteUtils.cjs.map +1 -1
  125. package/dist/cjs/localization/validatePrefix.cjs +3 -2
  126. package/dist/cjs/localization/validatePrefix.cjs.map +1 -1
  127. package/dist/cjs/markdown/compiler.cjs +1 -0
  128. package/dist/cjs/markdown/compiler.cjs.map +1 -1
  129. package/dist/cjs/markdown/constants.cjs +1 -0
  130. package/dist/cjs/markdown/constants.cjs.map +1 -1
  131. package/dist/cjs/markdown/index.cjs +1 -0
  132. package/dist/cjs/markdown/parser.cjs +1 -0
  133. package/dist/cjs/markdown/parser.cjs.map +1 -1
  134. package/dist/cjs/markdown/renderer.cjs +1 -0
  135. package/dist/cjs/markdown/renderer.cjs.map +1 -1
  136. package/dist/cjs/markdown/utils.cjs +1 -0
  137. package/dist/cjs/markdown/utils.cjs.map +1 -1
  138. package/dist/cjs/messageFormat/ICU.cjs +16 -5
  139. package/dist/cjs/messageFormat/ICU.cjs.map +1 -1
  140. package/dist/cjs/messageFormat/i18next.cjs +16 -5
  141. package/dist/cjs/messageFormat/i18next.cjs.map +1 -1
  142. package/dist/cjs/messageFormat/index.cjs +1 -0
  143. package/dist/cjs/messageFormat/vue-i18n.cjs +2 -1
  144. package/dist/cjs/messageFormat/vue-i18n.cjs.map +1 -1
  145. package/dist/cjs/transpiler/condition/condition.cjs +2 -1
  146. package/dist/cjs/transpiler/condition/condition.cjs.map +1 -1
  147. package/dist/cjs/transpiler/condition/index.cjs +1 -0
  148. package/dist/cjs/transpiler/enumeration/enumeration.cjs +2 -1
  149. package/dist/cjs/transpiler/enumeration/enumeration.cjs.map +1 -1
  150. package/dist/cjs/transpiler/enumeration/index.cjs +1 -0
  151. package/dist/cjs/transpiler/file/file.cjs +2 -1
  152. package/dist/cjs/transpiler/file/file.cjs.map +1 -1
  153. package/dist/cjs/transpiler/file/fileBrowser.cjs +1 -0
  154. package/dist/cjs/transpiler/file/fileBrowser.cjs.map +1 -1
  155. package/dist/cjs/transpiler/file/index.cjs +1 -0
  156. package/dist/cjs/transpiler/gender/gender.cjs +2 -1
  157. package/dist/cjs/transpiler/gender/gender.cjs.map +1 -1
  158. package/dist/cjs/transpiler/gender/index.cjs +1 -0
  159. package/dist/cjs/transpiler/html/getHTMLCustomComponents.cjs +1 -0
  160. package/dist/cjs/transpiler/html/getHTMLCustomComponents.cjs.map +1 -1
  161. package/dist/cjs/transpiler/html/html.cjs +2 -1
  162. package/dist/cjs/transpiler/html/html.cjs.map +1 -1
  163. package/dist/cjs/transpiler/html/htmlTags.cjs +1 -0
  164. package/dist/cjs/transpiler/html/htmlTags.cjs.map +1 -1
  165. package/dist/cjs/transpiler/html/index.cjs +1 -0
  166. package/dist/cjs/transpiler/index.cjs +1 -0
  167. package/dist/cjs/transpiler/insertion/getInsertionValues.cjs +1 -0
  168. package/dist/cjs/transpiler/insertion/getInsertionValues.cjs.map +1 -1
  169. package/dist/cjs/transpiler/insertion/index.cjs +1 -0
  170. package/dist/cjs/transpiler/insertion/insertion.cjs +2 -1
  171. package/dist/cjs/transpiler/insertion/insertion.cjs.map +1 -1
  172. package/dist/cjs/transpiler/markdown/getMarkdownMetadata.cjs +1 -0
  173. package/dist/cjs/transpiler/markdown/getMarkdownMetadata.cjs.map +1 -1
  174. package/dist/cjs/transpiler/markdown/index.cjs +1 -0
  175. package/dist/cjs/transpiler/markdown/markdown.cjs +2 -1
  176. package/dist/cjs/transpiler/markdown/markdown.cjs.map +1 -1
  177. package/dist/cjs/transpiler/nesting/index.cjs +1 -0
  178. package/dist/cjs/transpiler/nesting/nesting.cjs +2 -1
  179. package/dist/cjs/transpiler/nesting/nesting.cjs.map +1 -1
  180. package/dist/cjs/transpiler/translation/index.cjs +1 -0
  181. package/dist/cjs/transpiler/translation/translation.cjs +2 -1
  182. package/dist/cjs/transpiler/translation/translation.cjs.map +1 -1
  183. package/dist/cjs/utils/checkIsURLAbsolute.cjs +1 -0
  184. package/dist/cjs/utils/checkIsURLAbsolute.cjs.map +1 -1
  185. package/dist/cjs/utils/getCookie.cjs +1 -0
  186. package/dist/cjs/utils/getCookie.cjs.map +1 -1
  187. package/dist/cjs/utils/intl.cjs +2 -1
  188. package/dist/cjs/utils/intl.cjs.map +1 -1
  189. package/dist/cjs/utils/isSameKeyPath.cjs +1 -0
  190. package/dist/cjs/utils/isSameKeyPath.cjs.map +1 -1
  191. package/dist/cjs/utils/isValidReactElement.cjs +1 -0
  192. package/dist/cjs/utils/isValidReactElement.cjs.map +1 -1
  193. package/dist/cjs/utils/localeStorage.cjs +3 -2
  194. package/dist/cjs/utils/localeStorage.cjs.map +1 -1
  195. package/dist/cjs/utils/parseYaml.cjs +1 -0
  196. package/dist/cjs/utils/parseYaml.cjs.map +1 -1
  197. package/dist/esm/dictionaryManipulator/orderDictionaries.mjs +3 -3
  198. package/dist/esm/dictionaryManipulator/orderDictionaries.mjs.map +1 -1
  199. package/dist/esm/messageFormat/ICU.mjs +14 -4
  200. package/dist/esm/messageFormat/ICU.mjs.map +1 -1
  201. package/dist/esm/messageFormat/i18next.mjs +14 -4
  202. package/dist/esm/messageFormat/i18next.mjs.map +1 -1
  203. package/dist/types/deepTransformPlugins/getFilterMissingTranslationsContent.d.ts +10 -10
  204. package/dist/types/deepTransformPlugins/getFilteredLocalesContent.d.ts +10 -10
  205. package/dist/types/deepTransformPlugins/getFilteredLocalesContent.d.ts.map +1 -1
  206. package/dist/types/dictionaryManipulator/orderDictionaries.d.ts +2 -2
  207. package/dist/types/dictionaryManipulator/orderDictionaries.d.ts.map +1 -1
  208. package/dist/types/messageFormat/ICU.d.ts.map +1 -1
  209. package/dist/types/messageFormat/i18next.d.ts.map +1 -1
  210. package/dist/types/transpiler/translation/translation.d.ts +1 -1
  211. package/package.json +8 -8
@@ -1 +1 @@
1
- {"version":3,"file":"compiler.cjs","names":["get","cx","defaultSlugify","defaultSanitizer","NAMED_CODES_TO_UNICODE","ORDERED","ORDERED_LIST_R","UNORDERED_LIST_R","ORDERED_LIST_ITEM_R","UNORDERED_LIST_ITEM_R","ORDERED_LIST_ITEM_PREFIX_R","UNORDERED_LIST_ITEM_PREFIX_R","allowInline","LIST_LOOKBEHIND_R","Priority","BLOCK_END_R","trimEnd","some","RuleType","blockRegex","BLOCKQUOTE_R","BLOCKQUOTE_TRIM_LEFT_MULTILINE_R","BLOCKQUOTE_ALERT_R","parseBlock","parseInline","anyScopeRegex","BREAK_LINE_R","captureNothing","BREAK_THEMATIC_R","CODE_BLOCK_R","unescapeString","CODE_BLOCK_FENCED_R","simpleInlineRegex","CODE_INLINE_R","FOOTNOTE_R","renderNothing","inlineRegex","FOOTNOTE_REFERENCE_R","GFM_TASK_R","HEADING_ATX_COMPLIANT_R","HEADING_R","HEADING_SETEXT_R","HTML_BLOCK_ELEMENT_R","HTML_LEFT_TRIM_AMOUNT_R","trimLeadingWhitespaceOutsideFences","DO_NOT_PROCESS_HTML_ELEMENTS","HTML_COMMENT_R","HTML_SELF_CLOSING_ELEMENT_R","CUSTOM_COMPONENT_R","parseCaptureInline","parseSimpleInline","LINK_AUTOLINK_R","startsWith","LINK_AUTOLINK_BARE_URL_R","CONSECUTIVE_NEWLINE_R","UNORDERED","REFERENCE_IMAGE_OR_LINK","REFERENCE_IMAGE_R","REFERENCE_LINK_R","NP_TABLE_R","parseTableAlign","parseTableCells","parseTableRow","SHORTCODE_R","TEXT_PLAIN_R","HTML_CHAR_CODE_R","TEXT_BOLD_R","TEXT_EMPHASIZED_R","TEXT_ESCAPED_R","TEXT_MARKED_R","TEXT_STRIKETHROUGHED_R","ATTR_EXTRACTOR_R","normalizeAttributeKey","unquote","ATTRIBUTE_TO_NODE_PROP_MAP","attributeValueToNodePropValue","TRIM_STARTING_NEWLINES","PARAGRAPH_R","parserFor","renderFor","createRenderer","FRONT_MATTER_R","SHOULD_RENDER_AS_BLOCK_R"],"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] ? { textAlign: table.align[i] } : {};\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(\n HTML_CHAR_CODE_R,\n (f, i) => 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 || !str.trim()) return null;\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 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.cjs","names":["get","cx","defaultSlugify","defaultSanitizer","NAMED_CODES_TO_UNICODE","ORDERED","ORDERED_LIST_R","UNORDERED_LIST_R","ORDERED_LIST_ITEM_R","UNORDERED_LIST_ITEM_R","ORDERED_LIST_ITEM_PREFIX_R","UNORDERED_LIST_ITEM_PREFIX_R","allowInline","LIST_LOOKBEHIND_R","Priority","BLOCK_END_R","trimEnd","some","RuleType","blockRegex","BLOCKQUOTE_R","BLOCKQUOTE_TRIM_LEFT_MULTILINE_R","BLOCKQUOTE_ALERT_R","parseBlock","parseInline","anyScopeRegex","BREAK_LINE_R","captureNothing","BREAK_THEMATIC_R","CODE_BLOCK_R","unescapeString","CODE_BLOCK_FENCED_R","simpleInlineRegex","CODE_INLINE_R","FOOTNOTE_R","renderNothing","inlineRegex","FOOTNOTE_REFERENCE_R","GFM_TASK_R","HEADING_ATX_COMPLIANT_R","HEADING_R","HEADING_SETEXT_R","HTML_BLOCK_ELEMENT_R","HTML_LEFT_TRIM_AMOUNT_R","trimLeadingWhitespaceOutsideFences","DO_NOT_PROCESS_HTML_ELEMENTS","HTML_COMMENT_R","HTML_SELF_CLOSING_ELEMENT_R","CUSTOM_COMPONENT_R","parseCaptureInline","parseSimpleInline","LINK_AUTOLINK_R","startsWith","LINK_AUTOLINK_BARE_URL_R","CONSECUTIVE_NEWLINE_R","UNORDERED","REFERENCE_IMAGE_OR_LINK","REFERENCE_IMAGE_R","REFERENCE_LINK_R","NP_TABLE_R","parseTableAlign","parseTableCells","parseTableRow","SHORTCODE_R","TEXT_PLAIN_R","HTML_CHAR_CODE_R","TEXT_BOLD_R","TEXT_EMPHASIZED_R","TEXT_ESCAPED_R","TEXT_MARKED_R","TEXT_STRIKETHROUGHED_R","ATTR_EXTRACTOR_R","normalizeAttributeKey","unquote","ATTRIBUTE_TO_NODE_PROP_MAP","attributeValueToNodePropValue","TRIM_STARTING_NEWLINES","PARAGRAPH_R","parserFor","renderFor","createRenderer","FRONT_MATTER_R","SHOULD_RENDER_AS_BLOCK_R"],"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] ? { textAlign: table.align[i] } : {};\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(\n HTML_CHAR_CODE_R,\n (f, i) => 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 || !str.trim()) return null;\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 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,3 +1,4 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
1
2
 
2
3
  //#region src/markdown/constants.ts
3
4
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"constants.cjs","names":[],"sources":["../../../src/markdown/constants.ts"],"sourcesContent":["// ============================================================================\n// RULE TYPES\n// ============================================================================\n\n/**\n * Analogous to `node.type`. Please note that the values here may change at any time,\n * so do not hard code against the value directly.\n */\nexport const RuleType = {\n blockQuote: '0',\n breakLine: '1',\n breakThematic: '2',\n codeBlock: '3',\n codeFenced: '4',\n codeInline: '5',\n footnote: '6',\n footnoteReference: '7',\n gfmTask: '8',\n heading: '9',\n headingSetext: '10',\n /** only available if not `disableHTMLParsing` */\n htmlBlock: '11',\n htmlComment: '12',\n /** only available if not `disableHTMLParsing` */\n htmlSelfClosing: '13',\n /** Custom components like <Tabs>, <TabItem> */\n customComponent: '34',\n image: '14',\n link: '15',\n /** emits a `link` 'node', does not render directly */\n linkAngleBraceStyleDetector: '16',\n /** emits a `link` 'node', does not render directly */\n linkBareUrlDetector: '17',\n newlineCoalescer: '19',\n orderedList: '20',\n paragraph: '21',\n ref: '22',\n refImage: '23',\n refLink: '24',\n table: '25',\n tableSeparator: '26',\n text: '27',\n textBolded: '28',\n textEmphasized: '29',\n textEscaped: '30',\n textMarked: '31',\n textStrikethroughed: '32',\n unorderedList: '33',\n} as const;\n\n// In test environment, use human-readable keys for easier debugging\nif (process.env.NODE_ENV === 'test') {\n Object.keys(RuleType).forEach((key) => {\n (RuleType as any)[key] = key;\n });\n}\n\nexport type RuleTypeValue = (typeof RuleType)[keyof typeof RuleType];\n\n// ============================================================================\n// PRIORITY LEVELS\n// ============================================================================\n\n/**\n * Priority levels for rule ordering.\n */\nexport const Priority = {\n /** anything that must scan the tree before everything else */\n MAX: 0,\n /** scans for block-level constructs */\n HIGH: 1,\n /** inline w/ more priority than other inline */\n MED: 2,\n /** inline elements */\n LOW: 3,\n /** bare text and stuff that is considered leftovers */\n MIN: 4,\n} as const;\n\nexport type PriorityValue = (typeof Priority)[keyof typeof Priority];\n\n// ============================================================================\n// PERFORMANCE CONSTANTS\n// ============================================================================\n\n/** Threshold for performance logging (in milliseconds) */\nexport const DURATION_DELAY_TRIGGER = 20;\n\n// ============================================================================\n// ATTRIBUTE MAPPING\n// ============================================================================\n\n/**\n * Map of HTML attributes to their JSX prop equivalents.\n * Some renderers use camelCase for certain attributes.\n */\nexport const ATTRIBUTE_TO_NODE_PROP_MAP: Record<string, string> = [\n 'allowFullScreen',\n 'allowTransparency',\n 'autoComplete',\n 'autoFocus',\n 'autoPlay',\n 'cellPadding',\n 'cellSpacing',\n 'charSet',\n 'classId',\n 'colSpan',\n 'contentEditable',\n 'contextMenu',\n 'crossOrigin',\n 'encType',\n 'formAction',\n 'formEncType',\n 'formMethod',\n 'formNoValidate',\n 'formTarget',\n 'frameBorder',\n 'hrefLang',\n 'inputMode',\n 'keyParams',\n 'keyType',\n 'marginHeight',\n 'marginWidth',\n 'maxLength',\n 'mediaGroup',\n 'minLength',\n 'noValidate',\n 'radioGroup',\n 'readOnly',\n 'rowSpan',\n 'spellCheck',\n 'srcDoc',\n 'srcLang',\n 'srcSet',\n 'tabIndex',\n 'useMap',\n].reduce(\n (obj: Record<string, string>, x) => {\n obj[x.toLowerCase()] = x;\n return obj;\n },\n { class: 'className', for: 'htmlFor' }\n);\n\n// ============================================================================\n// NAMED CODES TO UNICODE\n// ============================================================================\n\n/**\n * Default HTML entity to unicode mappings.\n */\nexport const NAMED_CODES_TO_UNICODE: Record<string, string> = {\n amp: '\\u0026',\n apos: '\\u0027',\n gt: '\\u003e',\n lt: '\\u003c',\n nbsp: '\\u00a0',\n quot: '\\u201c',\n};\n\n// ============================================================================\n// SPECIAL ELEMENTS\n// ============================================================================\n\n/** HTML elements that should not have their content processed */\nexport const DO_NOT_PROCESS_HTML_ELEMENTS = ['style', 'script', 'pre'];\n\n/** Attributes that require URL sanitization */\nexport const ATTRIBUTES_TO_SANITIZE = [\n 'src',\n 'href',\n 'data',\n 'formAction',\n 'srcDoc',\n 'action',\n];\n\n// ============================================================================\n// REGEX PATTERNS\n// ============================================================================\n\n/** Attribute extractor regex */\nexport const ATTR_EXTRACTOR_R =\n /([-A-Z0-9_:]+)(?:\\s*=\\s*(?:(?:\"((?:\\\\.|[^\"])*)\")|(?:'((?:\\\\.|[^'])*)')|(?:\\{((?:\\\\.|{[^}]*?}|[^}])*)\\})))?/gi;\n\n/** Block end detection */\nexport const BLOCK_END_R = /\\n{2,}$/;\n\n/** Blockquote patterns */\nexport const BLOCKQUOTE_R = /^(\\s*>[\\s\\S]*?)(?=\\n\\n|$)/;\nexport const BLOCKQUOTE_TRIM_LEFT_MULTILINE_R = /^ *> ?/gm;\nexport const BLOCKQUOTE_ALERT_R = /^(?:\\[!([^\\]]*)\\]\\n)?([\\s\\S]*)/;\n\n/** Line break patterns */\nexport const BREAK_LINE_R = /^ {2,}\\n/;\nexport const BREAK_THEMATIC_R = /^(?:([-*_])( *\\1){2,}) *(?:\\n *)+\\n/;\n\n/** Code block patterns */\nexport const CODE_BLOCK_FENCED_R =\n /^(?: {1,3})?(`{3,}|~{3,}) *(\\S+)? *([^\\n]*?)?\\n([\\s\\S]*?)(?:\\1\\n?|$)/;\nexport const CODE_BLOCK_R = /^(?: {4}[^\\n]+\\n*)+(?:\\n *)+\\n?/;\nexport const CODE_INLINE_R = /^(`+)((?:\\\\`|(?!\\1)`|[^`])+)\\1/;\n\n/** Newline patterns */\nexport const CONSECUTIVE_NEWLINE_R = /^(?:\\n *)*\\n/;\nexport const CR_NEWLINE_R = /\\r\\n?/g;\n\n/** Footnote patterns */\nexport const FOOTNOTE_R = /^\\[\\^([^\\]]+)](:(.*)((\\n+ {4,}.*)|(\\n(?!\\[\\^).+))*)/;\nexport const FOOTNOTE_REFERENCE_R = /^\\[\\^([^\\]]+)]/;\n\n/** Form feed */\nexport const FORMFEED_R = /\\f/g;\n\n/** Front matter */\nexport const FRONT_MATTER_R = /^---[ \\t]*\\n(.|\\n)*?\\n---[ \\t]*\\n/;\n\n/** GFM task */\nexport const GFM_TASK_R = /^\\s*?\\[(x|\\s)\\]/;\n\n/** Heading patterns */\nexport const HEADING_R = /^ *(#{1,6}) *([^\\n]+?)(?: +#*)?(?:\\n *)*(?:\\n|$)/;\nexport const HEADING_ATX_COMPLIANT_R =\n /^ *(#{1,6}) +([^\\n]+?)(?: +#*)?(?:\\n *)*(?:\\n|$)/;\nexport const HEADING_SETEXT_R = /^([^\\n]+)\\n *(=|-)\\2{2,} *\\n/;\n\n/** HTML patterns */\nexport const HTML_BLOCK_ELEMENT_R =\n /^ *(?!<[a-zA-Z][^ >/]* ?\\/>)<([a-zA-Z][^ >/]*) ?((?:[^>]*[^/])?)>\\n?(\\s*(?:<\\1[^>]*?>[\\s\\S]*?<\\/\\1>|(?!<\\1\\b)[\\s\\S])*?)<\\/\\1>(?!<\\/\\1>)\\n*/i;\nexport const HTML_CHAR_CODE_R =\n /&([a-z0-9]+|#[0-9]{1,6}|#x[0-9a-fA-F]{1,6});/gi;\nexport const HTML_COMMENT_R = /^<!--[\\s\\S]*?(?:-->)/;\nexport const HTML_CUSTOM_ATTR_R = /^(data|aria|x)-[a-z_][a-z\\d_.-]*$/;\nexport const HTML_SELF_CLOSING_ELEMENT_R =\n /^ *<([a-zA-Z][a-zA-Z0-9:]*)(?:\\s+((?:<.*?>|[^>])*))?\\/?>(?!<\\/\\1>)(\\s*\\n)?/i;\n\n/** Custom component pattern */\nexport const CUSTOM_COMPONENT_R =\n /^ *<([A-Z][a-zA-Z0-9]*)(?:\\s+((?:<.*?>|[^>])*))?>\\n?(\\s*(?:<\\1[^>]*?>[\\s\\S]*?<\\/\\1>|(?!<\\1\\b)[\\s\\S])*?)<\\/\\1>(?!<\\/\\1>)\\n*/;\n\n/** Interpolation */\nexport const INTERPOLATION_R = /^\\{.*\\}$/;\n\n/** Link patterns */\nexport const LINK_AUTOLINK_BARE_URL_R = /^(https?:\\/\\/[^\\s<]+[^<.,:;\"')\\]\\s])/;\nexport const LINK_AUTOLINK_R = /^<([^ >]+[:@/][^ >]+)>/;\nexport const CAPTURE_LETTER_AFTER_HYPHEN = /-([a-z])?/gi;\n\n/** Table patterns */\nexport const NP_TABLE_R =\n /^(\\|.*)\\n(?: *(\\|? *[-:]+ *\\|[-| :]*)\\n((?:.*\\|.*\\n)*))?\\n?/;\nexport const TABLE_TRIM_PIPES = /(^ *\\||\\| *$)/g;\nexport const TABLE_CENTER_ALIGN = /^ *:-+: *$/;\nexport const TABLE_LEFT_ALIGN = /^ *:-+ *$/;\nexport const TABLE_RIGHT_ALIGN = /^ *-+: *$/;\n\n/** Paragraph */\nexport const PARAGRAPH_R = /^[^\\n]+(?: {2}\\n|\\n{2,})/;\n\n/** Reference patterns */\nexport const REFERENCE_IMAGE_OR_LINK =\n /^\\[([^\\]]*)\\]:\\s+<?([^\\s>]+)>?\\s*(\"([^\"]*)\")?/;\nexport const REFERENCE_IMAGE_R = /^!\\[([^\\]]*)\\] ?\\[([^\\]]*)\\]/;\nexport const REFERENCE_LINK_R = /^\\[([^\\]]*)\\] ?\\[([^\\]]*)\\]/;\n\n/** Block detection */\nexport const SHOULD_RENDER_AS_BLOCK_R = /(\\n|^[-*]\\s|^#|^ {2,}|^-{2,}|^>\\s)/;\n\n/** Tab and whitespace */\nexport const TAB_R = /\\t/g;\nexport const TRIM_STARTING_NEWLINES = /^\\n+/;\nexport const HTML_LEFT_TRIM_AMOUNT_R = /^\\n*([ \\t]*)/;\n\n/** List patterns */\nexport const LIST_LOOKBEHIND_R = /(?:^|\\n)( *)$/;\nexport const ORDERED_LIST_BULLET = '(?:\\\\d+\\\\.)';\nexport const UNORDERED_LIST_BULLET = '(?:[*+-])';\n\n/** Text formatting patterns */\nexport const TEXT_ESCAPED_R = /^\\\\([^0-9A-Za-z\\s])/;\nexport const UNESCAPE_R = /\\\\([^0-9A-Za-z\\s])/g;\nexport const TEXT_PLAIN_R =\n /^[\\s\\S](?:(?! {2}\\n|[0-9]\\.|http)[^=*_~\\-\\n:<`\\\\[!])*/;\n\n/** Shortcode pattern */\nexport const SHORTCODE_R = /^(:[a-zA-Z0-9-_]+:)/;\n\n// ============================================================================\n// LIST TYPE CONSTANTS\n// ============================================================================\n\nexport type ListType = 1 | 2;\nexport const ORDERED: ListType = 1;\nexport const UNORDERED: ListType = 2;\n\n// ============================================================================\n// INLINE PATTERN HELPERS\n// ============================================================================\n\n/**\n * Ensure there's at least one more instance of the delimiter later\n * in the current sequence.\n */\nexport const LOOKAHEAD = (double: number): string =>\n `(?=[\\\\s\\\\S]+?\\\\1${double ? '\\\\1' : ''})`;\n\n/**\n * For inline formatting, this partial attempts to ignore characters that\n * may appear in nested formatting.\n */\nexport const INLINE_SKIP_R =\n '((?:\\\\[.*?\\\\][([].*?[)\\\\]]|<.*?>(?:.*?<.*?>)?|`.*?`|\\\\\\\\[^\\\\s]|[\\\\s\\\\S])+?)';\n\n/** Bold text pattern */\nexport const TEXT_BOLD_R = new RegExp(\n `^([*_])\\\\1${LOOKAHEAD(1)}${INLINE_SKIP_R}\\\\1\\\\1(?!\\\\1)`\n);\n\n/** Emphasized text pattern */\nexport const TEXT_EMPHASIZED_R = new RegExp(\n `^([*_])${LOOKAHEAD(0)}${INLINE_SKIP_R}\\\\1(?!\\\\1)`\n);\n\n/** Marked text pattern */\nexport const TEXT_MARKED_R = new RegExp(\n `^(==)${LOOKAHEAD(0)}${INLINE_SKIP_R}\\\\1`\n);\n\n/** Strikethrough text pattern */\nexport const TEXT_STRIKETHROUGHED_R = new RegExp(\n `^(~~)${LOOKAHEAD(0)}${INLINE_SKIP_R}\\\\1`\n);\n\n// ============================================================================\n// LIST REGEX GENERATORS\n// ============================================================================\n\nexport const generateListItemPrefix = (type: ListType): string => {\n return (\n '( *)(' +\n (type === ORDERED ? ORDERED_LIST_BULLET : UNORDERED_LIST_BULLET) +\n ') +'\n );\n};\n\nexport const ORDERED_LIST_ITEM_PREFIX = generateListItemPrefix(ORDERED);\nexport const UNORDERED_LIST_ITEM_PREFIX = generateListItemPrefix(UNORDERED);\n\nexport const generateListItemPrefixRegex = (type: ListType): RegExp => {\n return new RegExp(\n '^' +\n (type === ORDERED ? ORDERED_LIST_ITEM_PREFIX : UNORDERED_LIST_ITEM_PREFIX)\n );\n};\n\nexport const ORDERED_LIST_ITEM_PREFIX_R = generateListItemPrefixRegex(ORDERED);\nexport const UNORDERED_LIST_ITEM_PREFIX_R =\n generateListItemPrefixRegex(UNORDERED);\n\nexport const generateListItemRegex = (type: ListType): RegExp => {\n return new RegExp(\n '^' +\n (type === ORDERED\n ? ORDERED_LIST_ITEM_PREFIX\n : UNORDERED_LIST_ITEM_PREFIX) +\n '[^\\\\n]*(?:\\\\n' +\n '(?!\\\\1' +\n (type === ORDERED ? ORDERED_LIST_BULLET : UNORDERED_LIST_BULLET) +\n ' )[^\\\\n]*)*(\\\\n|$)',\n 'gm'\n );\n};\n\nexport const ORDERED_LIST_ITEM_R = generateListItemRegex(ORDERED);\nexport const UNORDERED_LIST_ITEM_R = generateListItemRegex(UNORDERED);\n\nexport const generateListRegex = (type: ListType): RegExp => {\n const bullet = type === ORDERED ? ORDERED_LIST_BULLET : UNORDERED_LIST_BULLET;\n\n return new RegExp(\n '^( *)(' +\n bullet +\n ') ' +\n '[\\\\s\\\\S]+?(?:\\\\n{2,}(?! )' +\n '(?!\\\\1' +\n bullet +\n ' (?!' +\n bullet +\n ' ))\\\\n*' +\n '|\\\\s*\\\\n*$)'\n );\n};\n\nexport const ORDERED_LIST_R = generateListRegex(ORDERED);\nexport const UNORDERED_LIST_R = generateListRegex(UNORDERED);\n"],"mappings":"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"}
1
+ {"version":3,"file":"constants.cjs","names":[],"sources":["../../../src/markdown/constants.ts"],"sourcesContent":["// ============================================================================\n// RULE TYPES\n// ============================================================================\n\n/**\n * Analogous to `node.type`. Please note that the values here may change at any time,\n * so do not hard code against the value directly.\n */\nexport const RuleType = {\n blockQuote: '0',\n breakLine: '1',\n breakThematic: '2',\n codeBlock: '3',\n codeFenced: '4',\n codeInline: '5',\n footnote: '6',\n footnoteReference: '7',\n gfmTask: '8',\n heading: '9',\n headingSetext: '10',\n /** only available if not `disableHTMLParsing` */\n htmlBlock: '11',\n htmlComment: '12',\n /** only available if not `disableHTMLParsing` */\n htmlSelfClosing: '13',\n /** Custom components like <Tabs>, <TabItem> */\n customComponent: '34',\n image: '14',\n link: '15',\n /** emits a `link` 'node', does not render directly */\n linkAngleBraceStyleDetector: '16',\n /** emits a `link` 'node', does not render directly */\n linkBareUrlDetector: '17',\n newlineCoalescer: '19',\n orderedList: '20',\n paragraph: '21',\n ref: '22',\n refImage: '23',\n refLink: '24',\n table: '25',\n tableSeparator: '26',\n text: '27',\n textBolded: '28',\n textEmphasized: '29',\n textEscaped: '30',\n textMarked: '31',\n textStrikethroughed: '32',\n unorderedList: '33',\n} as const;\n\n// In test environment, use human-readable keys for easier debugging\nif (process.env.NODE_ENV === 'test') {\n Object.keys(RuleType).forEach((key) => {\n (RuleType as any)[key] = key;\n });\n}\n\nexport type RuleTypeValue = (typeof RuleType)[keyof typeof RuleType];\n\n// ============================================================================\n// PRIORITY LEVELS\n// ============================================================================\n\n/**\n * Priority levels for rule ordering.\n */\nexport const Priority = {\n /** anything that must scan the tree before everything else */\n MAX: 0,\n /** scans for block-level constructs */\n HIGH: 1,\n /** inline w/ more priority than other inline */\n MED: 2,\n /** inline elements */\n LOW: 3,\n /** bare text and stuff that is considered leftovers */\n MIN: 4,\n} as const;\n\nexport type PriorityValue = (typeof Priority)[keyof typeof Priority];\n\n// ============================================================================\n// PERFORMANCE CONSTANTS\n// ============================================================================\n\n/** Threshold for performance logging (in milliseconds) */\nexport const DURATION_DELAY_TRIGGER = 20;\n\n// ============================================================================\n// ATTRIBUTE MAPPING\n// ============================================================================\n\n/**\n * Map of HTML attributes to their JSX prop equivalents.\n * Some renderers use camelCase for certain attributes.\n */\nexport const ATTRIBUTE_TO_NODE_PROP_MAP: Record<string, string> = [\n 'allowFullScreen',\n 'allowTransparency',\n 'autoComplete',\n 'autoFocus',\n 'autoPlay',\n 'cellPadding',\n 'cellSpacing',\n 'charSet',\n 'classId',\n 'colSpan',\n 'contentEditable',\n 'contextMenu',\n 'crossOrigin',\n 'encType',\n 'formAction',\n 'formEncType',\n 'formMethod',\n 'formNoValidate',\n 'formTarget',\n 'frameBorder',\n 'hrefLang',\n 'inputMode',\n 'keyParams',\n 'keyType',\n 'marginHeight',\n 'marginWidth',\n 'maxLength',\n 'mediaGroup',\n 'minLength',\n 'noValidate',\n 'radioGroup',\n 'readOnly',\n 'rowSpan',\n 'spellCheck',\n 'srcDoc',\n 'srcLang',\n 'srcSet',\n 'tabIndex',\n 'useMap',\n].reduce(\n (obj: Record<string, string>, x) => {\n obj[x.toLowerCase()] = x;\n return obj;\n },\n { class: 'className', for: 'htmlFor' }\n);\n\n// ============================================================================\n// NAMED CODES TO UNICODE\n// ============================================================================\n\n/**\n * Default HTML entity to unicode mappings.\n */\nexport const NAMED_CODES_TO_UNICODE: Record<string, string> = {\n amp: '\\u0026',\n apos: '\\u0027',\n gt: '\\u003e',\n lt: '\\u003c',\n nbsp: '\\u00a0',\n quot: '\\u201c',\n};\n\n// ============================================================================\n// SPECIAL ELEMENTS\n// ============================================================================\n\n/** HTML elements that should not have their content processed */\nexport const DO_NOT_PROCESS_HTML_ELEMENTS = ['style', 'script', 'pre'];\n\n/** Attributes that require URL sanitization */\nexport const ATTRIBUTES_TO_SANITIZE = [\n 'src',\n 'href',\n 'data',\n 'formAction',\n 'srcDoc',\n 'action',\n];\n\n// ============================================================================\n// REGEX PATTERNS\n// ============================================================================\n\n/** Attribute extractor regex */\nexport const ATTR_EXTRACTOR_R =\n /([-A-Z0-9_:]+)(?:\\s*=\\s*(?:(?:\"((?:\\\\.|[^\"])*)\")|(?:'((?:\\\\.|[^'])*)')|(?:\\{((?:\\\\.|{[^}]*?}|[^}])*)\\})))?/gi;\n\n/** Block end detection */\nexport const BLOCK_END_R = /\\n{2,}$/;\n\n/** Blockquote patterns */\nexport const BLOCKQUOTE_R = /^(\\s*>[\\s\\S]*?)(?=\\n\\n|$)/;\nexport const BLOCKQUOTE_TRIM_LEFT_MULTILINE_R = /^ *> ?/gm;\nexport const BLOCKQUOTE_ALERT_R = /^(?:\\[!([^\\]]*)\\]\\n)?([\\s\\S]*)/;\n\n/** Line break patterns */\nexport const BREAK_LINE_R = /^ {2,}\\n/;\nexport const BREAK_THEMATIC_R = /^(?:([-*_])( *\\1){2,}) *(?:\\n *)+\\n/;\n\n/** Code block patterns */\nexport const CODE_BLOCK_FENCED_R =\n /^(?: {1,3})?(`{3,}|~{3,}) *(\\S+)? *([^\\n]*?)?\\n([\\s\\S]*?)(?:\\1\\n?|$)/;\nexport const CODE_BLOCK_R = /^(?: {4}[^\\n]+\\n*)+(?:\\n *)+\\n?/;\nexport const CODE_INLINE_R = /^(`+)((?:\\\\`|(?!\\1)`|[^`])+)\\1/;\n\n/** Newline patterns */\nexport const CONSECUTIVE_NEWLINE_R = /^(?:\\n *)*\\n/;\nexport const CR_NEWLINE_R = /\\r\\n?/g;\n\n/** Footnote patterns */\nexport const FOOTNOTE_R = /^\\[\\^([^\\]]+)](:(.*)((\\n+ {4,}.*)|(\\n(?!\\[\\^).+))*)/;\nexport const FOOTNOTE_REFERENCE_R = /^\\[\\^([^\\]]+)]/;\n\n/** Form feed */\nexport const FORMFEED_R = /\\f/g;\n\n/** Front matter */\nexport const FRONT_MATTER_R = /^---[ \\t]*\\n(.|\\n)*?\\n---[ \\t]*\\n/;\n\n/** GFM task */\nexport const GFM_TASK_R = /^\\s*?\\[(x|\\s)\\]/;\n\n/** Heading patterns */\nexport const HEADING_R = /^ *(#{1,6}) *([^\\n]+?)(?: +#*)?(?:\\n *)*(?:\\n|$)/;\nexport const HEADING_ATX_COMPLIANT_R =\n /^ *(#{1,6}) +([^\\n]+?)(?: +#*)?(?:\\n *)*(?:\\n|$)/;\nexport const HEADING_SETEXT_R = /^([^\\n]+)\\n *(=|-)\\2{2,} *\\n/;\n\n/** HTML patterns */\nexport const HTML_BLOCK_ELEMENT_R =\n /^ *(?!<[a-zA-Z][^ >/]* ?\\/>)<([a-zA-Z][^ >/]*) ?((?:[^>]*[^/])?)>\\n?(\\s*(?:<\\1[^>]*?>[\\s\\S]*?<\\/\\1>|(?!<\\1\\b)[\\s\\S])*?)<\\/\\1>(?!<\\/\\1>)\\n*/i;\nexport const HTML_CHAR_CODE_R =\n /&([a-z0-9]+|#[0-9]{1,6}|#x[0-9a-fA-F]{1,6});/gi;\nexport const HTML_COMMENT_R = /^<!--[\\s\\S]*?(?:-->)/;\nexport const HTML_CUSTOM_ATTR_R = /^(data|aria|x)-[a-z_][a-z\\d_.-]*$/;\nexport const HTML_SELF_CLOSING_ELEMENT_R =\n /^ *<([a-zA-Z][a-zA-Z0-9:]*)(?:\\s+((?:<.*?>|[^>])*))?\\/?>(?!<\\/\\1>)(\\s*\\n)?/i;\n\n/** Custom component pattern */\nexport const CUSTOM_COMPONENT_R =\n /^ *<([A-Z][a-zA-Z0-9]*)(?:\\s+((?:<.*?>|[^>])*))?>\\n?(\\s*(?:<\\1[^>]*?>[\\s\\S]*?<\\/\\1>|(?!<\\1\\b)[\\s\\S])*?)<\\/\\1>(?!<\\/\\1>)\\n*/;\n\n/** Interpolation */\nexport const INTERPOLATION_R = /^\\{.*\\}$/;\n\n/** Link patterns */\nexport const LINK_AUTOLINK_BARE_URL_R = /^(https?:\\/\\/[^\\s<]+[^<.,:;\"')\\]\\s])/;\nexport const LINK_AUTOLINK_R = /^<([^ >]+[:@/][^ >]+)>/;\nexport const CAPTURE_LETTER_AFTER_HYPHEN = /-([a-z])?/gi;\n\n/** Table patterns */\nexport const NP_TABLE_R =\n /^(\\|.*)\\n(?: *(\\|? *[-:]+ *\\|[-| :]*)\\n((?:.*\\|.*\\n)*))?\\n?/;\nexport const TABLE_TRIM_PIPES = /(^ *\\||\\| *$)/g;\nexport const TABLE_CENTER_ALIGN = /^ *:-+: *$/;\nexport const TABLE_LEFT_ALIGN = /^ *:-+ *$/;\nexport const TABLE_RIGHT_ALIGN = /^ *-+: *$/;\n\n/** Paragraph */\nexport const PARAGRAPH_R = /^[^\\n]+(?: {2}\\n|\\n{2,})/;\n\n/** Reference patterns */\nexport const REFERENCE_IMAGE_OR_LINK =\n /^\\[([^\\]]*)\\]:\\s+<?([^\\s>]+)>?\\s*(\"([^\"]*)\")?/;\nexport const REFERENCE_IMAGE_R = /^!\\[([^\\]]*)\\] ?\\[([^\\]]*)\\]/;\nexport const REFERENCE_LINK_R = /^\\[([^\\]]*)\\] ?\\[([^\\]]*)\\]/;\n\n/** Block detection */\nexport const SHOULD_RENDER_AS_BLOCK_R = /(\\n|^[-*]\\s|^#|^ {2,}|^-{2,}|^>\\s)/;\n\n/** Tab and whitespace */\nexport const TAB_R = /\\t/g;\nexport const TRIM_STARTING_NEWLINES = /^\\n+/;\nexport const HTML_LEFT_TRIM_AMOUNT_R = /^\\n*([ \\t]*)/;\n\n/** List patterns */\nexport const LIST_LOOKBEHIND_R = /(?:^|\\n)( *)$/;\nexport const ORDERED_LIST_BULLET = '(?:\\\\d+\\\\.)';\nexport const UNORDERED_LIST_BULLET = '(?:[*+-])';\n\n/** Text formatting patterns */\nexport const TEXT_ESCAPED_R = /^\\\\([^0-9A-Za-z\\s])/;\nexport const UNESCAPE_R = /\\\\([^0-9A-Za-z\\s])/g;\nexport const TEXT_PLAIN_R =\n /^[\\s\\S](?:(?! {2}\\n|[0-9]\\.|http)[^=*_~\\-\\n:<`\\\\[!])*/;\n\n/** Shortcode pattern */\nexport const SHORTCODE_R = /^(:[a-zA-Z0-9-_]+:)/;\n\n// ============================================================================\n// LIST TYPE CONSTANTS\n// ============================================================================\n\nexport type ListType = 1 | 2;\nexport const ORDERED: ListType = 1;\nexport const UNORDERED: ListType = 2;\n\n// ============================================================================\n// INLINE PATTERN HELPERS\n// ============================================================================\n\n/**\n * Ensure there's at least one more instance of the delimiter later\n * in the current sequence.\n */\nexport const LOOKAHEAD = (double: number): string =>\n `(?=[\\\\s\\\\S]+?\\\\1${double ? '\\\\1' : ''})`;\n\n/**\n * For inline formatting, this partial attempts to ignore characters that\n * may appear in nested formatting.\n */\nexport const INLINE_SKIP_R =\n '((?:\\\\[.*?\\\\][([].*?[)\\\\]]|<.*?>(?:.*?<.*?>)?|`.*?`|\\\\\\\\[^\\\\s]|[\\\\s\\\\S])+?)';\n\n/** Bold text pattern */\nexport const TEXT_BOLD_R = new RegExp(\n `^([*_])\\\\1${LOOKAHEAD(1)}${INLINE_SKIP_R}\\\\1\\\\1(?!\\\\1)`\n);\n\n/** Emphasized text pattern */\nexport const TEXT_EMPHASIZED_R = new RegExp(\n `^([*_])${LOOKAHEAD(0)}${INLINE_SKIP_R}\\\\1(?!\\\\1)`\n);\n\n/** Marked text pattern */\nexport const TEXT_MARKED_R = new RegExp(\n `^(==)${LOOKAHEAD(0)}${INLINE_SKIP_R}\\\\1`\n);\n\n/** Strikethrough text pattern */\nexport const TEXT_STRIKETHROUGHED_R = new RegExp(\n `^(~~)${LOOKAHEAD(0)}${INLINE_SKIP_R}\\\\1`\n);\n\n// ============================================================================\n// LIST REGEX GENERATORS\n// ============================================================================\n\nexport const generateListItemPrefix = (type: ListType): string => {\n return (\n '( *)(' +\n (type === ORDERED ? ORDERED_LIST_BULLET : UNORDERED_LIST_BULLET) +\n ') +'\n );\n};\n\nexport const ORDERED_LIST_ITEM_PREFIX = generateListItemPrefix(ORDERED);\nexport const UNORDERED_LIST_ITEM_PREFIX = generateListItemPrefix(UNORDERED);\n\nexport const generateListItemPrefixRegex = (type: ListType): RegExp => {\n return new RegExp(\n '^' +\n (type === ORDERED ? ORDERED_LIST_ITEM_PREFIX : UNORDERED_LIST_ITEM_PREFIX)\n );\n};\n\nexport const ORDERED_LIST_ITEM_PREFIX_R = generateListItemPrefixRegex(ORDERED);\nexport const UNORDERED_LIST_ITEM_PREFIX_R =\n generateListItemPrefixRegex(UNORDERED);\n\nexport const generateListItemRegex = (type: ListType): RegExp => {\n return new RegExp(\n '^' +\n (type === ORDERED\n ? ORDERED_LIST_ITEM_PREFIX\n : UNORDERED_LIST_ITEM_PREFIX) +\n '[^\\\\n]*(?:\\\\n' +\n '(?!\\\\1' +\n (type === ORDERED ? ORDERED_LIST_BULLET : UNORDERED_LIST_BULLET) +\n ' )[^\\\\n]*)*(\\\\n|$)',\n 'gm'\n );\n};\n\nexport const ORDERED_LIST_ITEM_R = generateListItemRegex(ORDERED);\nexport const UNORDERED_LIST_ITEM_R = generateListItemRegex(UNORDERED);\n\nexport const generateListRegex = (type: ListType): RegExp => {\n const bullet = type === ORDERED ? ORDERED_LIST_BULLET : UNORDERED_LIST_BULLET;\n\n return new RegExp(\n '^( *)(' +\n bullet +\n ') ' +\n '[\\\\s\\\\S]+?(?:\\\\n{2,}(?! )' +\n '(?!\\\\1' +\n bullet +\n ' (?!' +\n bullet +\n ' ))\\\\n*' +\n '|\\\\s*\\\\n*$)'\n );\n};\n\nexport const ORDERED_LIST_R = generateListRegex(ORDERED);\nexport const UNORDERED_LIST_R = generateListRegex(UNORDERED);\n"],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
1
2
  const require_markdown_constants = require('./constants.cjs');
2
3
  const require_markdown_utils = require('./utils.cjs');
3
4
  const require_markdown_parser = require('./parser.cjs');
@@ -1,3 +1,4 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
1
2
  const require_markdown_constants = require('./constants.cjs');
2
3
  const require_markdown_utils = require('./utils.cjs');
3
4
 
@@ -1 +1 @@
1
- {"version":3,"file":"parser.cjs","names":["qualifies","DURATION_DELAY_TRIGGER","normalizeWhitespace"],"sources":["../../../src/markdown/parser.ts"],"sourcesContent":["import { DURATION_DELAY_TRIGGER } from './constants';\nimport type { NestedParser, ParserResult, ParseState, Rules } from './types';\nimport { normalizeWhitespace, qualifies } from './utils';\n\n/**\n * Creates a parser for a given set of rules, with the precedence\n * specified as a list of rules.\n *\n * @param rules - An object containing rule type -> {match, order, parse} objects\n * (lower order is higher precedence)\n *\n * @returns The resulting parse function\n */\nexport const parserFor = (\n rules: Rules\n): ((source: string, state: ParseState) => ParserResult[]) => {\n const start = performance.now();\n const ruleList = Object.keys(rules);\n\n if (process.env.NODE_ENV !== 'production') {\n ruleList.forEach((type) => {\n const order = rules[type]._order;\n if (typeof order !== 'number' || !Number.isFinite(order)) {\n console.warn(`intlayer: Invalid order for rule \\`${type}\\`: ${order}`);\n }\n });\n }\n\n // Sorts rules in order of increasing order, then\n // ascending rule name in case of ties.\n ruleList.sort((a, b) => {\n return rules[a]._order - rules[b]._order || (a < b ? -1 : 1);\n });\n\n const nestedParse: NestedParser = (\n source: string,\n state: ParseState = {}\n ): ParserResult[] => {\n const parseStart = performance.now();\n const result: ParserResult[] = [];\n state.prevCapture = state.prevCapture || '';\n\n if (source.trim()) {\n while (source) {\n let i = 0;\n while (i < ruleList.length) {\n const ruleType = ruleList[i];\n const rule = rules[ruleType];\n\n if (rule._qualify && !qualifies(source, state, rule._qualify)) {\n i++;\n continue;\n }\n\n const matchStart = performance.now();\n const capture = rule._match(source, state);\n const matchDuration = performance.now() - matchStart;\n\n if (matchDuration > 1) {\n console.log(\n `${ruleType}._match: ${matchDuration.toFixed(3)}ms, source length: ${source.length}`\n );\n }\n\n if (capture?.[0]) {\n source = source.substring(capture[0].length);\n\n const ruleParseStart = performance.now();\n const parsedAny: any = rule._parse(capture, nestedParse, state);\n const ruleParseDuration = performance.now() - ruleParseStart;\n\n if (ruleParseDuration > 1) {\n console.log(\n `${ruleType}._parse: ${ruleParseDuration.toFixed(3)}ms, capture length: ${capture[0].length}`\n );\n }\n\n state.prevCapture = (state.prevCapture || '') + capture[0];\n\n if (!parsedAny.type) {\n parsedAny.type = ruleType;\n }\n result.push(parsedAny as ParserResult);\n break;\n }\n i++;\n }\n }\n }\n\n const parseDuration = performance.now() - parseStart;\n if (parseDuration > 1) {\n console.log(\n `nestedParse: ${parseDuration.toFixed(3)}ms, source length: ${source.length}, result count: ${result.length}`\n );\n }\n\n return result;\n };\n\n const duration = performance.now() - start;\n if (duration > DURATION_DELAY_TRIGGER) {\n console.log(\n `parserFor: ${duration.toFixed(3)}ms, rules count: ${ruleList.length}`\n );\n }\n\n return (source: string, state: ParseState) =>\n nestedParse(normalizeWhitespace(source), state);\n};\n"],"mappings":";;;;;;;;;;;;;AAaA,MAAa,aACX,UAC4D;CAC5D,MAAM,QAAQ,YAAY,KAAK;CAC/B,MAAM,WAAW,OAAO,KAAK,MAAM;AAEnC,KAAI,QAAQ,IAAI,aAAa,aAC3B,UAAS,SAAS,SAAS;EACzB,MAAM,QAAQ,MAAM,MAAM;AAC1B,MAAI,OAAO,UAAU,YAAY,CAAC,OAAO,SAAS,MAAM,CACtD,SAAQ,KAAK,sCAAsC,KAAK,MAAM,QAAQ;GAExE;AAKJ,UAAS,MAAM,GAAG,MAAM;AACtB,SAAO,MAAM,GAAG,SAAS,MAAM,GAAG,WAAW,IAAI,IAAI,KAAK;GAC1D;CAEF,MAAM,eACJ,QACA,QAAoB,EAAE,KACH;EACnB,MAAM,aAAa,YAAY,KAAK;EACpC,MAAM,SAAyB,EAAE;AACjC,QAAM,cAAc,MAAM,eAAe;AAEzC,MAAI,OAAO,MAAM,CACf,QAAO,QAAQ;GACb,IAAI,IAAI;AACR,UAAO,IAAI,SAAS,QAAQ;IAC1B,MAAM,WAAW,SAAS;IAC1B,MAAM,OAAO,MAAM;AAEnB,QAAI,KAAK,YAAY,CAACA,iCAAU,QAAQ,OAAO,KAAK,SAAS,EAAE;AAC7D;AACA;;IAGF,MAAM,aAAa,YAAY,KAAK;IACpC,MAAM,UAAU,KAAK,OAAO,QAAQ,MAAM;IAC1C,MAAM,gBAAgB,YAAY,KAAK,GAAG;AAE1C,QAAI,gBAAgB,EAClB,SAAQ,IACN,GAAG,SAAS,WAAW,cAAc,QAAQ,EAAE,CAAC,qBAAqB,OAAO,SAC7E;AAGH,QAAI,UAAU,IAAI;AAChB,cAAS,OAAO,UAAU,QAAQ,GAAG,OAAO;KAE5C,MAAM,iBAAiB,YAAY,KAAK;KACxC,MAAM,YAAiB,KAAK,OAAO,SAAS,aAAa,MAAM;KAC/D,MAAM,oBAAoB,YAAY,KAAK,GAAG;AAE9C,SAAI,oBAAoB,EACtB,SAAQ,IACN,GAAG,SAAS,WAAW,kBAAkB,QAAQ,EAAE,CAAC,sBAAsB,QAAQ,GAAG,SACtF;AAGH,WAAM,eAAe,MAAM,eAAe,MAAM,QAAQ;AAExD,SAAI,CAAC,UAAU,KACb,WAAU,OAAO;AAEnB,YAAO,KAAK,UAA0B;AACtC;;AAEF;;;EAKN,MAAM,gBAAgB,YAAY,KAAK,GAAG;AAC1C,MAAI,gBAAgB,EAClB,SAAQ,IACN,gBAAgB,cAAc,QAAQ,EAAE,CAAC,qBAAqB,OAAO,OAAO,kBAAkB,OAAO,SACtG;AAGH,SAAO;;CAGT,MAAM,WAAW,YAAY,KAAK,GAAG;AACrC,KAAI,WAAWC,kDACb,SAAQ,IACN,cAAc,SAAS,QAAQ,EAAE,CAAC,mBAAmB,SAAS,SAC/D;AAGH,SAAQ,QAAgB,UACtB,YAAYC,2CAAoB,OAAO,EAAE,MAAM"}
1
+ {"version":3,"file":"parser.cjs","names":["qualifies","DURATION_DELAY_TRIGGER","normalizeWhitespace"],"sources":["../../../src/markdown/parser.ts"],"sourcesContent":["import { DURATION_DELAY_TRIGGER } from './constants';\nimport type { NestedParser, ParserResult, ParseState, Rules } from './types';\nimport { normalizeWhitespace, qualifies } from './utils';\n\n/**\n * Creates a parser for a given set of rules, with the precedence\n * specified as a list of rules.\n *\n * @param rules - An object containing rule type -> {match, order, parse} objects\n * (lower order is higher precedence)\n *\n * @returns The resulting parse function\n */\nexport const parserFor = (\n rules: Rules\n): ((source: string, state: ParseState) => ParserResult[]) => {\n const start = performance.now();\n const ruleList = Object.keys(rules);\n\n if (process.env.NODE_ENV !== 'production') {\n ruleList.forEach((type) => {\n const order = rules[type]._order;\n if (typeof order !== 'number' || !Number.isFinite(order)) {\n console.warn(`intlayer: Invalid order for rule \\`${type}\\`: ${order}`);\n }\n });\n }\n\n // Sorts rules in order of increasing order, then\n // ascending rule name in case of ties.\n ruleList.sort((a, b) => {\n return rules[a]._order - rules[b]._order || (a < b ? -1 : 1);\n });\n\n const nestedParse: NestedParser = (\n source: string,\n state: ParseState = {}\n ): ParserResult[] => {\n const parseStart = performance.now();\n const result: ParserResult[] = [];\n state.prevCapture = state.prevCapture || '';\n\n if (source.trim()) {\n while (source) {\n let i = 0;\n while (i < ruleList.length) {\n const ruleType = ruleList[i];\n const rule = rules[ruleType];\n\n if (rule._qualify && !qualifies(source, state, rule._qualify)) {\n i++;\n continue;\n }\n\n const matchStart = performance.now();\n const capture = rule._match(source, state);\n const matchDuration = performance.now() - matchStart;\n\n if (matchDuration > 1) {\n console.log(\n `${ruleType}._match: ${matchDuration.toFixed(3)}ms, source length: ${source.length}`\n );\n }\n\n if (capture?.[0]) {\n source = source.substring(capture[0].length);\n\n const ruleParseStart = performance.now();\n const parsedAny: any = rule._parse(capture, nestedParse, state);\n const ruleParseDuration = performance.now() - ruleParseStart;\n\n if (ruleParseDuration > 1) {\n console.log(\n `${ruleType}._parse: ${ruleParseDuration.toFixed(3)}ms, capture length: ${capture[0].length}`\n );\n }\n\n state.prevCapture = (state.prevCapture || '') + capture[0];\n\n if (!parsedAny.type) {\n parsedAny.type = ruleType;\n }\n result.push(parsedAny as ParserResult);\n break;\n }\n i++;\n }\n }\n }\n\n const parseDuration = performance.now() - parseStart;\n if (parseDuration > 1) {\n console.log(\n `nestedParse: ${parseDuration.toFixed(3)}ms, source length: ${source.length}, result count: ${result.length}`\n );\n }\n\n return result;\n };\n\n const duration = performance.now() - start;\n if (duration > DURATION_DELAY_TRIGGER) {\n console.log(\n `parserFor: ${duration.toFixed(3)}ms, rules count: ${ruleList.length}`\n );\n }\n\n return (source: string, state: ParseState) =>\n nestedParse(normalizeWhitespace(source), state);\n};\n"],"mappings":";;;;;;;;;;;;;;AAaA,MAAa,aACX,UAC4D;CAC5D,MAAM,QAAQ,YAAY,KAAK;CAC/B,MAAM,WAAW,OAAO,KAAK,MAAM;AAEnC,KAAI,QAAQ,IAAI,aAAa,aAC3B,UAAS,SAAS,SAAS;EACzB,MAAM,QAAQ,MAAM,MAAM;AAC1B,MAAI,OAAO,UAAU,YAAY,CAAC,OAAO,SAAS,MAAM,CACtD,SAAQ,KAAK,sCAAsC,KAAK,MAAM,QAAQ;GAExE;AAKJ,UAAS,MAAM,GAAG,MAAM;AACtB,SAAO,MAAM,GAAG,SAAS,MAAM,GAAG,WAAW,IAAI,IAAI,KAAK;GAC1D;CAEF,MAAM,eACJ,QACA,QAAoB,EAAE,KACH;EACnB,MAAM,aAAa,YAAY,KAAK;EACpC,MAAM,SAAyB,EAAE;AACjC,QAAM,cAAc,MAAM,eAAe;AAEzC,MAAI,OAAO,MAAM,CACf,QAAO,QAAQ;GACb,IAAI,IAAI;AACR,UAAO,IAAI,SAAS,QAAQ;IAC1B,MAAM,WAAW,SAAS;IAC1B,MAAM,OAAO,MAAM;AAEnB,QAAI,KAAK,YAAY,CAACA,iCAAU,QAAQ,OAAO,KAAK,SAAS,EAAE;AAC7D;AACA;;IAGF,MAAM,aAAa,YAAY,KAAK;IACpC,MAAM,UAAU,KAAK,OAAO,QAAQ,MAAM;IAC1C,MAAM,gBAAgB,YAAY,KAAK,GAAG;AAE1C,QAAI,gBAAgB,EAClB,SAAQ,IACN,GAAG,SAAS,WAAW,cAAc,QAAQ,EAAE,CAAC,qBAAqB,OAAO,SAC7E;AAGH,QAAI,UAAU,IAAI;AAChB,cAAS,OAAO,UAAU,QAAQ,GAAG,OAAO;KAE5C,MAAM,iBAAiB,YAAY,KAAK;KACxC,MAAM,YAAiB,KAAK,OAAO,SAAS,aAAa,MAAM;KAC/D,MAAM,oBAAoB,YAAY,KAAK,GAAG;AAE9C,SAAI,oBAAoB,EACtB,SAAQ,IACN,GAAG,SAAS,WAAW,kBAAkB,QAAQ,EAAE,CAAC,sBAAsB,QAAQ,GAAG,SACtF;AAGH,WAAM,eAAe,MAAM,eAAe,MAAM,QAAQ;AAExD,SAAI,CAAC,UAAU,KACb,WAAU,OAAO;AAEnB,YAAO,KAAK,UAA0B;AACtC;;AAEF;;;EAKN,MAAM,gBAAgB,YAAY,KAAK,GAAG;AAC1C,MAAI,gBAAgB,EAClB,SAAQ,IACN,gBAAgB,cAAc,QAAQ,EAAE,CAAC,qBAAqB,OAAO,OAAO,kBAAkB,OAAO,SACtG;AAGH,SAAO;;CAGT,MAAM,WAAW,YAAY,KAAK,GAAG;AACrC,KAAI,WAAWC,kDACb,SAAQ,IACN,cAAc,SAAS,QAAQ,EAAE,CAAC,mBAAmB,SAAS,SAC/D;AAGH,SAAQ,QAAgB,UACtB,YAAYC,2CAAoB,OAAO,EAAE,MAAM"}
@@ -1,3 +1,4 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
1
2
  const require_markdown_constants = require('./constants.cjs');
2
3
 
3
4
  //#region src/markdown/renderer.ts
@@ -1 +1 @@
1
- {"version":3,"file":"renderer.cjs","names":["DURATION_DELAY_TRIGGER"],"sources":["../../../src/markdown/renderer.ts"],"sourcesContent":["import { DURATION_DELAY_TRIGGER } from './constants';\nimport type {\n ParserResult,\n ParseState,\n RenderRuleHook,\n RuleOutput,\n Rules,\n} from './types';\n\n/**\n * Creates a renderer for AST nodes.\n * Renamed from `reactFor` to be framework-agnostic.\n *\n * @param render - The render function to call for each node\n * @returns A function that renders AST to output\n */\nexport const renderFor =\n (\n render: (\n ast: ParserResult,\n render: RuleOutput,\n state: ParseState\n ) => unknown\n ) =>\n (ast: ParserResult | ParserResult[], state: ParseState = {}): any => {\n const start = performance.now();\n\n const patchedRender = (\n ast: ParserResult | ParserResult[],\n state: ParseState = {}\n ): any => renderFor(render)(ast, state);\n\n if (Array.isArray(ast)) {\n const oldKey = state.key;\n const result: any[] = [];\n\n // map nestedOutput over the ast, except group any text\n // nodes together into a single string output.\n let lastWasString = false;\n let renderedIndex = 0;\n\n for (let i = 0; i < ast.length; i++) {\n // We clone the state to avoid side effects on other nodes in the same level\n // while ensuring each non-null rendered node gets a unique, sequential key.\n const nodeOut = patchedRender(ast[i], { ...state, key: renderedIndex });\n const isString = typeof nodeOut === 'string';\n\n if (isString && lastWasString) {\n result[result.length - 1] =\n (result[result.length - 1] as string) + nodeOut;\n } else if (nodeOut !== null) {\n result.push(nodeOut);\n renderedIndex++;\n }\n\n lastWasString = isString;\n }\n\n state.key = oldKey;\n\n const duration = performance.now() - start;\n if (duration > DURATION_DELAY_TRIGGER) {\n console.log(\n `renderFor (array): ${duration.toFixed(3)}ms, ast length: ${ast.length}`\n );\n }\n\n return result;\n }\n\n const result = render(ast, patchedRender as RuleOutput, state);\n\n const duration = performance.now() - start;\n if (duration > DURATION_DELAY_TRIGGER) {\n console.log(\n `renderFor (single): ${duration.toFixed(3)}ms, ast type: ${(ast as ParserResult).type}`\n );\n }\n\n return result;\n };\n\n/**\n * Creates a renderer from rules with optional custom render hook.\n *\n * @param rules - The rules object containing _render functions\n * @param userRender - Optional custom render hook for full control\n * @returns A render function for AST nodes\n */\nexport const createRenderer =\n (rules: Rules, userRender?: RenderRuleHook) =>\n (ast: ParserResult, render: RuleOutput, state: ParseState): unknown => {\n const start = performance.now();\n const renderer = rules[ast.type]?._render;\n\n const result = userRender\n ? userRender(() => renderer?.(ast, render, state), ast, render, state)\n : renderer?.(ast, render, state);\n\n const duration = performance.now() - start;\n if (duration > DURATION_DELAY_TRIGGER) {\n console.log(\n `createRenderer: ${duration.toFixed(3)}ms, ast type: ${ast.type}, hasUserRender: ${!!userRender}`\n );\n }\n\n return result;\n };\n"],"mappings":";;;;;;;;;;AAgBA,MAAa,aAET,YAMD,KAAoC,QAAoB,EAAE,KAAU;CACnE,MAAM,QAAQ,YAAY,KAAK;CAE/B,MAAM,iBACJ,KACA,QAAoB,EAAE,KACd,UAAU,OAAO,CAAC,KAAK,MAAM;AAEvC,KAAI,MAAM,QAAQ,IAAI,EAAE;EACtB,MAAM,SAAS,MAAM;EACrB,MAAM,SAAgB,EAAE;EAIxB,IAAI,gBAAgB;EACpB,IAAI,gBAAgB;AAEpB,OAAK,IAAI,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;GAGnC,MAAM,UAAU,cAAc,IAAI,IAAI;IAAE,GAAG;IAAO,KAAK;IAAe,CAAC;GACvE,MAAM,WAAW,OAAO,YAAY;AAEpC,OAAI,YAAY,cACd,QAAO,OAAO,SAAS,KACpB,OAAO,OAAO,SAAS,KAAgB;YACjC,YAAY,MAAM;AAC3B,WAAO,KAAK,QAAQ;AACpB;;AAGF,mBAAgB;;AAGlB,QAAM,MAAM;EAEZ,MAAM,WAAW,YAAY,KAAK,GAAG;AACrC,MAAI,WAAWA,kDACb,SAAQ,IACN,sBAAsB,SAAS,QAAQ,EAAE,CAAC,kBAAkB,IAAI,SACjE;AAGH,SAAO;;CAGT,MAAM,SAAS,OAAO,KAAK,eAA6B,MAAM;CAE9D,MAAM,WAAW,YAAY,KAAK,GAAG;AACrC,KAAI,WAAWA,kDACb,SAAQ,IACN,uBAAuB,SAAS,QAAQ,EAAE,CAAC,gBAAiB,IAAqB,OAClF;AAGH,QAAO;;;;;;;;;AAUX,MAAa,kBACV,OAAc,gBACd,KAAmB,QAAoB,UAA+B;CACrE,MAAM,QAAQ,YAAY,KAAK;CAC/B,MAAM,WAAW,MAAM,IAAI,OAAO;CAElC,MAAM,SAAS,aACX,iBAAiB,WAAW,KAAK,QAAQ,MAAM,EAAE,KAAK,QAAQ,MAAM,GACpE,WAAW,KAAK,QAAQ,MAAM;CAElC,MAAM,WAAW,YAAY,KAAK,GAAG;AACrC,KAAI,WAAWA,kDACb,SAAQ,IACN,mBAAmB,SAAS,QAAQ,EAAE,CAAC,gBAAgB,IAAI,KAAK,mBAAmB,CAAC,CAAC,aACtF;AAGH,QAAO"}
1
+ {"version":3,"file":"renderer.cjs","names":["DURATION_DELAY_TRIGGER"],"sources":["../../../src/markdown/renderer.ts"],"sourcesContent":["import { DURATION_DELAY_TRIGGER } from './constants';\nimport type {\n ParserResult,\n ParseState,\n RenderRuleHook,\n RuleOutput,\n Rules,\n} from './types';\n\n/**\n * Creates a renderer for AST nodes.\n * Renamed from `reactFor` to be framework-agnostic.\n *\n * @param render - The render function to call for each node\n * @returns A function that renders AST to output\n */\nexport const renderFor =\n (\n render: (\n ast: ParserResult,\n render: RuleOutput,\n state: ParseState\n ) => unknown\n ) =>\n (ast: ParserResult | ParserResult[], state: ParseState = {}): any => {\n const start = performance.now();\n\n const patchedRender = (\n ast: ParserResult | ParserResult[],\n state: ParseState = {}\n ): any => renderFor(render)(ast, state);\n\n if (Array.isArray(ast)) {\n const oldKey = state.key;\n const result: any[] = [];\n\n // map nestedOutput over the ast, except group any text\n // nodes together into a single string output.\n let lastWasString = false;\n let renderedIndex = 0;\n\n for (let i = 0; i < ast.length; i++) {\n // We clone the state to avoid side effects on other nodes in the same level\n // while ensuring each non-null rendered node gets a unique, sequential key.\n const nodeOut = patchedRender(ast[i], { ...state, key: renderedIndex });\n const isString = typeof nodeOut === 'string';\n\n if (isString && lastWasString) {\n result[result.length - 1] =\n (result[result.length - 1] as string) + nodeOut;\n } else if (nodeOut !== null) {\n result.push(nodeOut);\n renderedIndex++;\n }\n\n lastWasString = isString;\n }\n\n state.key = oldKey;\n\n const duration = performance.now() - start;\n if (duration > DURATION_DELAY_TRIGGER) {\n console.log(\n `renderFor (array): ${duration.toFixed(3)}ms, ast length: ${ast.length}`\n );\n }\n\n return result;\n }\n\n const result = render(ast, patchedRender as RuleOutput, state);\n\n const duration = performance.now() - start;\n if (duration > DURATION_DELAY_TRIGGER) {\n console.log(\n `renderFor (single): ${duration.toFixed(3)}ms, ast type: ${(ast as ParserResult).type}`\n );\n }\n\n return result;\n };\n\n/**\n * Creates a renderer from rules with optional custom render hook.\n *\n * @param rules - The rules object containing _render functions\n * @param userRender - Optional custom render hook for full control\n * @returns A render function for AST nodes\n */\nexport const createRenderer =\n (rules: Rules, userRender?: RenderRuleHook) =>\n (ast: ParserResult, render: RuleOutput, state: ParseState): unknown => {\n const start = performance.now();\n const renderer = rules[ast.type]?._render;\n\n const result = userRender\n ? userRender(() => renderer?.(ast, render, state), ast, render, state)\n : renderer?.(ast, render, state);\n\n const duration = performance.now() - start;\n if (duration > DURATION_DELAY_TRIGGER) {\n console.log(\n `createRenderer: ${duration.toFixed(3)}ms, ast type: ${ast.type}, hasUserRender: ${!!userRender}`\n );\n }\n\n return result;\n };\n"],"mappings":";;;;;;;;;;;AAgBA,MAAa,aAET,YAMD,KAAoC,QAAoB,EAAE,KAAU;CACnE,MAAM,QAAQ,YAAY,KAAK;CAE/B,MAAM,iBACJ,KACA,QAAoB,EAAE,KACd,UAAU,OAAO,CAAC,KAAK,MAAM;AAEvC,KAAI,MAAM,QAAQ,IAAI,EAAE;EACtB,MAAM,SAAS,MAAM;EACrB,MAAM,SAAgB,EAAE;EAIxB,IAAI,gBAAgB;EACpB,IAAI,gBAAgB;AAEpB,OAAK,IAAI,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;GAGnC,MAAM,UAAU,cAAc,IAAI,IAAI;IAAE,GAAG;IAAO,KAAK;IAAe,CAAC;GACvE,MAAM,WAAW,OAAO,YAAY;AAEpC,OAAI,YAAY,cACd,QAAO,OAAO,SAAS,KACpB,OAAO,OAAO,SAAS,KAAgB;YACjC,YAAY,MAAM;AAC3B,WAAO,KAAK,QAAQ;AACpB;;AAGF,mBAAgB;;AAGlB,QAAM,MAAM;EAEZ,MAAM,WAAW,YAAY,KAAK,GAAG;AACrC,MAAI,WAAWA,kDACb,SAAQ,IACN,sBAAsB,SAAS,QAAQ,EAAE,CAAC,kBAAkB,IAAI,SACjE;AAGH,SAAO;;CAGT,MAAM,SAAS,OAAO,KAAK,eAA6B,MAAM;CAE9D,MAAM,WAAW,YAAY,KAAK,GAAG;AACrC,KAAI,WAAWA,kDACb,SAAQ,IACN,uBAAuB,SAAS,QAAQ,EAAE,CAAC,gBAAiB,IAAqB,OAClF;AAGH,QAAO;;;;;;;;;AAUX,MAAa,kBACV,OAAc,gBACd,KAAmB,QAAoB,UAA+B;CACrE,MAAM,QAAQ,YAAY,KAAK;CAC/B,MAAM,WAAW,MAAM,IAAI,OAAO;CAElC,MAAM,SAAS,aACX,iBAAiB,WAAW,KAAK,QAAQ,MAAM,EAAE,KAAK,QAAQ,MAAM,GACpE,WAAW,KAAK,QAAQ,MAAM;CAElC,MAAM,WAAW,YAAY,KAAK,GAAG;AACrC,KAAI,WAAWA,kDACb,SAAQ,IACN,mBAAmB,SAAS,QAAQ,EAAE,CAAC,gBAAgB,IAAI,KAAK,mBAAmB,CAAC,CAAC,aACtF;AAGH,QAAO"}
@@ -1,3 +1,4 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
1
2
  const require_markdown_constants = require('./constants.cjs');
2
3
 
3
4
  //#region src/markdown/utils.ts
@@ -1 +1 @@
1
- {"version":3,"file":"utils.cjs","names":["UNESCAPE_R","CR_NEWLINE_R","FORMFEED_R","TAB_R","DURATION_DELAY_TRIGGER","HTML_CUSTOM_ATTR_R","CAPTURE_LETTER_AFTER_HYPHEN","ATTRIBUTES_TO_SANITIZE","INTERPOLATION_R","TABLE_RIGHT_ALIGN","TABLE_CENTER_ALIGN","TABLE_LEFT_ALIGN","TABLE_TRIM_PIPES"],"sources":["../../../src/markdown/utils.ts"],"sourcesContent":["import {\n ATTRIBUTES_TO_SANITIZE,\n CAPTURE_LETTER_AFTER_HYPHEN,\n CR_NEWLINE_R,\n DURATION_DELAY_TRIGGER,\n FORMFEED_R,\n HTML_CUSTOM_ATTR_R,\n INTERPOLATION_R,\n TAB_R,\n TABLE_CENTER_ALIGN,\n TABLE_LEFT_ALIGN,\n TABLE_RIGHT_ALIGN,\n TABLE_TRIM_PIPES,\n UNESCAPE_R,\n} from './constants';\nimport type { NestedParser, ParserResult, ParseState, Rule } from './types';\n\n// ============================================================================\n// STRING UTILITIES\n// ============================================================================\n\n/**\n * Trim trailing whitespace from a string.\n */\nexport const trimEnd = (str: string): string => {\n let end = str.length;\n\n while (end > 0 && str[end - 1] <= ' ') end--;\n\n return str.slice(0, end);\n};\n\n/**\n * Check if string starts with prefix.\n */\nexport const startsWith = (str: string, prefix: string): boolean => {\n return str.startsWith(prefix);\n};\n\n/**\n * Remove symmetrical leading and trailing quotes.\n */\nexport const unquote = (str: string): string => {\n const first = str[0];\n\n if (\n (first === '\"' || first === \"'\") &&\n str.length >= 2 &&\n str[str.length - 1] === first\n ) {\n return str.slice(1, -1);\n }\n\n return str;\n};\n\n/**\n * Unescape backslash-escaped characters.\n */\nexport const unescapeString = (rawString: string): string =>\n rawString ? rawString.replace(UNESCAPE_R, '$1') : rawString;\n\n/**\n * Join class names, filtering out falsy values.\n */\nexport const cx = (...args: any[]): string => args.filter(Boolean).join(' ');\n\n/**\n * Get a nested property from an object using dot notation.\n */\nexport const get = (src: any, path: string, fb?: any): any => {\n let ptr = src;\n const frags = path.split('.');\n\n while (frags.length) {\n ptr = ptr[frags[0]];\n\n if (ptr === undefined) break;\n else frags.shift();\n }\n\n return ptr ?? fb;\n};\n\n// ============================================================================\n// SLUGIFY\n// ============================================================================\n\n/**\n * Convert a string to a URL-safe slug.\n * Based on https://stackoverflow.com/a/18123682/1141611\n */\nexport const slugify = (str: string): string =>\n str\n .replace(/[ÀÁÂÃÄÅàáâãä忯]/g, 'a')\n .replace(/[çÇ]/g, 'c')\n .replace(/[ðÐ]/g, 'd')\n .replace(/[ÈÉÊËéèêë]/g, 'e')\n .replace(/[ÏïÎîÍíÌì]/g, 'i')\n .replace(/[Ññ]/g, 'n')\n .replace(/[øØœŒÕõÔôÓóÒò]/g, 'o')\n .replace(/[ÜüÛûÚúÙù]/g, 'u')\n .replace(/[ŸÿÝý]/g, 'y')\n .replace(/[^a-z0-9- ]/gi, '')\n .replace(/ /gi, '-')\n .toLowerCase();\n\n// ============================================================================\n// SANITIZER\n// ============================================================================\n\nconst SANITIZE_R = /(javascript|vbscript|data(?!:image)):/i;\n\n/**\n * Sanitize URLs to prevent XSS attacks.\n * Returns null if the URL is unsafe.\n */\nexport const sanitizer = (input: string): string | null => {\n try {\n const decoded = decodeURIComponent(input).replace(/[^A-Za-z0-9/:]/g, '');\n\n if (SANITIZE_R.test(decoded)) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n 'Input contains an unsafe JavaScript/VBScript/data expression, it will not be rendered.',\n decoded\n );\n }\n\n return null;\n }\n } catch (_e) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n 'Input could not be decoded due to malformed syntax or characters, it will not be rendered.',\n input\n );\n }\n\n // decodeURIComponent sometimes throws a URIError\n return null;\n }\n\n return input;\n};\n\n// ============================================================================\n// WHITESPACE NORMALIZATION\n// ============================================================================\n\n/**\n * Normalize whitespace in source string.\n */\nexport const normalizeWhitespace = (source: string): string => {\n const start = performance.now();\n const result = source\n .replace(CR_NEWLINE_R, '\\n')\n .replace(FORMFEED_R, '')\n .replace(TAB_R, ' ');\n\n const duration = performance.now() - start;\n\n if (duration > DURATION_DELAY_TRIGGER) {\n console.log(\n `normalizeWhitespace: ${duration.toFixed(3)}ms, source length: ${source.length}`\n );\n }\n\n return result;\n};\n\n/**\n * Safely remove a uniform leading indentation from lines, but do NOT touch\n * the content inside fenced code blocks (``` or ~~~).\n */\nexport const trimLeadingWhitespaceOutsideFences = (\n text: string,\n whitespace: string\n): string => {\n const start = performance.now();\n if (!whitespace) return text;\n\n const lines = text.split('\\n');\n let inFence = false;\n let fenceToken: string | null = null;\n\n const isFenceLine = (line: string): RegExpMatchArray | null =>\n line.match(/^\\s*(`{3,}|~{3,})/);\n\n const maybeToggleFence = (line: string): void => {\n const m = isFenceLine(line);\n\n if (!m) return;\n\n const token = m[1];\n\n if (!inFence) {\n inFence = true;\n fenceToken = token;\n } else if (fenceToken && line.includes(fenceToken)) {\n inFence = false;\n fenceToken = null;\n }\n };\n\n const out = lines.map((line) => {\n const fenceMatch = isFenceLine(line);\n if (fenceMatch) {\n const trimmedFenceLine = line.startsWith(whitespace)\n ? line.slice(whitespace.length)\n : line;\n maybeToggleFence(line);\n return trimmedFenceLine;\n }\n\n if (inFence) {\n return line;\n }\n\n return line.startsWith(whitespace) ? line.slice(whitespace.length) : line;\n });\n\n const result = out.join('\\n');\n\n const duration = performance.now() - start;\n if (duration > DURATION_DELAY_TRIGGER) {\n console.log(\n `trimLeadingWhitespaceOutsideFences: ${duration.toFixed(3)}ms, text length: ${text.length}, lines count: ${lines.length}`\n );\n }\n\n return result;\n};\n\n/**\n * Normalize HTML attribute key to JSX prop name.\n */\nexport const normalizeAttributeKey = (key: string): string => {\n const hyphenIndex = key.indexOf('-');\n\n if (hyphenIndex !== -1 && key.match(HTML_CUSTOM_ATTR_R) === null) {\n key = key.replace(CAPTURE_LETTER_AFTER_HYPHEN, (_, letter) => {\n return letter.toUpperCase();\n });\n }\n\n return key;\n};\n\ntype StyleTuple = [key: string, value: string];\n\n/**\n * Parse a CSS style string into an array of [key, value] tuples.\n */\nexport const parseStyleAttribute = (styleString: string): StyleTuple[] => {\n const start = performance.now();\n const styles: StyleTuple[] = [];\n let buffer = '';\n let inUrl = false;\n let inQuotes = false;\n let quoteChar: '\"' | \"'\" | '' = '';\n\n if (!styleString) return styles;\n\n for (let i = 0; i < styleString.length; i++) {\n const char = styleString[i];\n\n if ((char === '\"' || char === \"'\") && !inUrl) {\n if (!inQuotes) {\n inQuotes = true;\n quoteChar = char;\n } else if (char === quoteChar) {\n inQuotes = false;\n quoteChar = '';\n }\n }\n\n if (char === '(' && buffer.endsWith('url')) {\n inUrl = true;\n } else if (char === ')' && inUrl) {\n inUrl = false;\n }\n\n if (char === ';' && !inQuotes && !inUrl) {\n const declaration = buffer.trim();\n\n if (declaration) {\n const colonIndex = declaration.indexOf(':');\n\n if (colonIndex > 0) {\n const key = declaration.slice(0, colonIndex).trim();\n const value = declaration.slice(colonIndex + 1).trim();\n styles.push([key, value]);\n }\n }\n buffer = '';\n } else {\n buffer += char;\n }\n }\n\n const declaration = buffer.trim();\n\n if (declaration) {\n const colonIndex = declaration.indexOf(':');\n if (colonIndex > 0) {\n const key = declaration.slice(0, colonIndex).trim();\n const value = declaration.slice(colonIndex + 1).trim();\n styles.push([key, value]);\n }\n }\n\n const duration = performance.now() - start;\n\n if (duration > DURATION_DELAY_TRIGGER) {\n console.log(\n `parseStyleAttribute: ${duration.toFixed(3)}ms, styleString length: ${styleString.length}, styles count: ${styles.length}`\n );\n }\n\n return styles;\n};\n\n/**\n * Convert an attribute value to a Node prop value.\n */\nexport const attributeValueToNodePropValue = (\n tag: string,\n key: string,\n value: string,\n sanitizeUrlFn: (\n value: string,\n tag: string,\n attribute: string\n ) => string | null\n): any => {\n if (key === 'style') {\n return parseStyleAttribute(value).reduce(\n (styles, [styleKey, styleValue]) => {\n const camelCasedKey = styleKey.replace(/(-[a-z])/g, (substr) =>\n substr[1].toUpperCase()\n );\n\n (styles as Record<string, any>)[camelCasedKey] = sanitizeUrlFn(\n styleValue,\n tag,\n styleKey\n );\n\n return styles;\n },\n {} as Record<string, any>\n );\n } else if (ATTRIBUTES_TO_SANITIZE.indexOf(key) !== -1) {\n return sanitizeUrlFn(unescapeString(value), tag, key);\n } else if (value.match(INTERPOLATION_R)) {\n value = unescapeString(value.slice(1, value.length - 1));\n }\n\n if (value === 'true') {\n return true;\n } else if (value === 'false') {\n return false;\n }\n\n return value;\n};\n\n// ============================================================================\n// TABLE PARSING\n// ============================================================================\n\n/**\n * Parse table alignment from a separator row.\n */\nexport const parseTableAlignCapture = (\n alignCapture: string\n): 'left' | 'right' | 'center' => {\n if (TABLE_RIGHT_ALIGN.test(alignCapture)) {\n return 'right';\n } else if (TABLE_CENTER_ALIGN.test(alignCapture)) {\n return 'center';\n } else if (TABLE_LEFT_ALIGN.test(alignCapture)) {\n return 'left';\n }\n\n return 'left';\n};\n\n/**\n * Parse table alignment row.\n */\nexport const parseTableAlign = (\n source: string\n): ('left' | 'right' | 'center')[] => {\n const alignText = source.replace(TABLE_TRIM_PIPES, '').split('|');\n return alignText.map(parseTableAlignCapture);\n};\n\n/**\n * Parse a single table row.\n */\nexport const parseTableRow = (\n source: string,\n parse: NestedParser,\n state: ParseState,\n tableOutput: boolean\n): ParserResult[][] => {\n const start = performance.now();\n const prevInTable = state.inTable;\n\n state.inTable = true;\n\n const cells: ParserResult[][] = [[]];\n let acc = '';\n\n const flush = (): void => {\n if (!acc) return;\n\n const cell = cells[cells.length - 1];\n cell.push.apply(cell, parse(acc, state));\n acc = '';\n };\n\n source\n .trim()\n .split(/(`[^`]*`|\\\\\\||\\|)/)\n .filter(Boolean)\n .forEach((fragment, i, arr) => {\n if (fragment.trim() === '|') {\n flush();\n\n if (tableOutput) {\n if (i !== 0 && i !== arr.length - 1) {\n cells.push([]);\n }\n\n return;\n }\n }\n\n acc += fragment;\n });\n\n flush();\n\n state.inTable = prevInTable;\n\n const duration = performance.now() - start;\n if (duration > DURATION_DELAY_TRIGGER) {\n console.log(\n `parseTableRow: ${duration.toFixed(3)}ms, source length: ${source.length}, cells count: ${cells.length}`\n );\n }\n\n return cells;\n};\n\n/**\n * Parse table cells (multiple rows).\n */\nexport const parseTableCells = (\n source: string,\n parse: NestedParser,\n state: ParseState\n): ParserResult[][][] => {\n const start = performance.now();\n const rowsText = source.trim().split('\\n');\n\n const result = rowsText.map((rowText) =>\n parseTableRow(rowText, parse, state, true)\n );\n\n const duration = performance.now() - start;\n if (duration > DURATION_DELAY_TRIGGER) {\n console.log(\n `parseTableCells: ${duration.toFixed(3)}ms, source length: ${source.length}, rows count: ${rowsText.length}`\n );\n }\n\n return result;\n};\n\n// ============================================================================\n// PARSING HELPERS\n// ============================================================================\n\n/**\n * Check if a rule qualifies for the current source and state.\n */\nexport const qualifies = (\n source: string,\n state: ParseState,\n qualify: NonNullable<Rule<any>['_qualify']>\n): boolean => {\n if (Array.isArray(qualify)) {\n for (let i = 0; i < qualify.length; i++) {\n if (startsWith(source, qualify[i])) return true;\n }\n\n return false;\n }\n\n return (qualify as (source: string, state: ParseState) => boolean)(\n source,\n state\n );\n};\n\n/**\n * Marks a matcher function as eligible for being run inside an inline context.\n */\nexport const allowInline = <T extends (...args: any[]) => any>(\n fn: T\n): T & { inline: 1 } => {\n (fn as any).inline = 1;\n return fn as T & { inline: 1 };\n};\n\n/**\n * Creates a match function for an inline scoped element from a regex.\n */\nexport const inlineRegex = (regex: RegExp) =>\n allowInline((source: string, state: ParseState): RegExpMatchArray | null => {\n if (state.inline) {\n return regex.exec(source);\n } else {\n return null;\n }\n });\n\n/**\n * Creates a match function for inline elements except links.\n */\nexport const simpleInlineRegex = (regex: RegExp) =>\n allowInline((source: string, state: ParseState): RegExpMatchArray | null => {\n if (state.inline || state.simple) {\n return regex.exec(source);\n } else {\n return null;\n }\n });\n\n/**\n * Creates a match function for a block scoped element from a regex.\n */\nexport const blockRegex =\n (regex: RegExp) =>\n (source: string, state: ParseState): RegExpMatchArray | null => {\n if (state.inline || state.simple) {\n return null;\n } else {\n return regex.exec(source);\n }\n };\n\n/**\n * Creates a match function from a regex, ignoring block/inline scope.\n */\nexport const anyScopeRegex = (\n fn: RegExp | ((source: string, state: ParseState) => RegExpMatchArray | null)\n) =>\n allowInline((source: string, state: ParseState): RegExpMatchArray | null => {\n if (typeof fn === 'function') {\n return fn(source, state);\n }\n return fn.exec(source);\n });\n\n/**\n * Parse inline content (including links).\n */\nexport const parseInline = (\n parse: NestedParser,\n children: string,\n state: ParseState\n): ParserResult[] => {\n const start = performance.now();\n const isCurrentlyInline = state.inline ?? false;\n const isCurrentlySimple = state.simple ?? false;\n state.inline = true;\n state.simple = true;\n const result = parse(children, state);\n state.inline = isCurrentlyInline;\n state.simple = isCurrentlySimple;\n\n const duration = performance.now() - start;\n if (duration > DURATION_DELAY_TRIGGER) {\n console.log(\n `parseInline: ${duration.toFixed(3)}ms, children length: ${children.length}, result count: ${result.length}`\n );\n }\n\n return result;\n};\n\n/**\n * Parse simple inline content (no links).\n */\nexport const parseSimpleInline = (\n parse: NestedParser,\n children: string,\n state: ParseState\n): ParserResult[] => {\n const start = performance.now();\n const isCurrentlyInline = state.inline ?? false;\n const isCurrentlySimple = state.simple ?? false;\n\n state.inline = false;\n state.simple = true;\n const result = parse(children, state);\n state.inline = isCurrentlyInline;\n state.simple = isCurrentlySimple;\n\n const duration = performance.now() - start;\n if (duration > DURATION_DELAY_TRIGGER) {\n console.log(\n `parseSimpleInline: ${duration.toFixed(3)}ms, children length: ${children.length}, result count: ${result.length}`\n );\n }\n\n return result;\n};\n\n/**\n * Parse block content.\n */\nexport const parseBlock = (\n parse: NestedParser,\n children: string,\n state: ParseState = {}\n): ParserResult[] => {\n const start = performance.now();\n const isCurrentlyInline = state.inline || false;\n state.inline = false;\n const normalizedChildren = trimEnd(children);\n const needsTerminator = /\\n\\n$/.test(normalizedChildren) === false;\n const blockInput = needsTerminator\n ? normalizedChildren.endsWith('\\n')\n ? `${normalizedChildren}\\n`\n : `${normalizedChildren}\\n\\n`\n : normalizedChildren;\n\n const result = parse(blockInput, state);\n state.inline = isCurrentlyInline;\n\n const duration = performance.now() - start;\n if (duration > DURATION_DELAY_TRIGGER) {\n console.log(\n `parseBlock: ${duration.toFixed(3)}ms, children length: ${children.length}, result count: ${result.length}`\n );\n }\n\n return result;\n};\n\n/**\n * Helper to parse capture group 2 as inline content.\n */\nexport const parseCaptureInline = (\n capture: RegExpMatchArray,\n parse: NestedParser,\n state: ParseState\n): { children: ParserResult[] } => {\n return {\n children: parseInline(parse, capture[2], state),\n };\n};\n\n/**\n * Helper that captures nothing (empty object).\n */\nexport const captureNothing = (): Record<string, never> => ({});\n\n/**\n * Helper that renders nothing (null).\n */\nexport const renderNothing = (): null => null;\n\n/**\n * Check if any regex in a list matches the input.\n */\nexport const some = (regexes: RegExp[], input: string): boolean => {\n for (let i = 0; i < regexes.length; i++) {\n if (regexes[i].test(input)) {\n return true;\n }\n }\n return false;\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"utils.cjs","names":["UNESCAPE_R","CR_NEWLINE_R","FORMFEED_R","TAB_R","DURATION_DELAY_TRIGGER","HTML_CUSTOM_ATTR_R","CAPTURE_LETTER_AFTER_HYPHEN","ATTRIBUTES_TO_SANITIZE","INTERPOLATION_R","TABLE_RIGHT_ALIGN","TABLE_CENTER_ALIGN","TABLE_LEFT_ALIGN","TABLE_TRIM_PIPES"],"sources":["../../../src/markdown/utils.ts"],"sourcesContent":["import {\n ATTRIBUTES_TO_SANITIZE,\n CAPTURE_LETTER_AFTER_HYPHEN,\n CR_NEWLINE_R,\n DURATION_DELAY_TRIGGER,\n FORMFEED_R,\n HTML_CUSTOM_ATTR_R,\n INTERPOLATION_R,\n TAB_R,\n TABLE_CENTER_ALIGN,\n TABLE_LEFT_ALIGN,\n TABLE_RIGHT_ALIGN,\n TABLE_TRIM_PIPES,\n UNESCAPE_R,\n} from './constants';\nimport type { NestedParser, ParserResult, ParseState, Rule } from './types';\n\n// ============================================================================\n// STRING UTILITIES\n// ============================================================================\n\n/**\n * Trim trailing whitespace from a string.\n */\nexport const trimEnd = (str: string): string => {\n let end = str.length;\n\n while (end > 0 && str[end - 1] <= ' ') end--;\n\n return str.slice(0, end);\n};\n\n/**\n * Check if string starts with prefix.\n */\nexport const startsWith = (str: string, prefix: string): boolean => {\n return str.startsWith(prefix);\n};\n\n/**\n * Remove symmetrical leading and trailing quotes.\n */\nexport const unquote = (str: string): string => {\n const first = str[0];\n\n if (\n (first === '\"' || first === \"'\") &&\n str.length >= 2 &&\n str[str.length - 1] === first\n ) {\n return str.slice(1, -1);\n }\n\n return str;\n};\n\n/**\n * Unescape backslash-escaped characters.\n */\nexport const unescapeString = (rawString: string): string =>\n rawString ? rawString.replace(UNESCAPE_R, '$1') : rawString;\n\n/**\n * Join class names, filtering out falsy values.\n */\nexport const cx = (...args: any[]): string => args.filter(Boolean).join(' ');\n\n/**\n * Get a nested property from an object using dot notation.\n */\nexport const get = (src: any, path: string, fb?: any): any => {\n let ptr = src;\n const frags = path.split('.');\n\n while (frags.length) {\n ptr = ptr[frags[0]];\n\n if (ptr === undefined) break;\n else frags.shift();\n }\n\n return ptr ?? fb;\n};\n\n// ============================================================================\n// SLUGIFY\n// ============================================================================\n\n/**\n * Convert a string to a URL-safe slug.\n * Based on https://stackoverflow.com/a/18123682/1141611\n */\nexport const slugify = (str: string): string =>\n str\n .replace(/[ÀÁÂÃÄÅàáâãä忯]/g, 'a')\n .replace(/[çÇ]/g, 'c')\n .replace(/[ðÐ]/g, 'd')\n .replace(/[ÈÉÊËéèêë]/g, 'e')\n .replace(/[ÏïÎîÍíÌì]/g, 'i')\n .replace(/[Ññ]/g, 'n')\n .replace(/[øØœŒÕõÔôÓóÒò]/g, 'o')\n .replace(/[ÜüÛûÚúÙù]/g, 'u')\n .replace(/[ŸÿÝý]/g, 'y')\n .replace(/[^a-z0-9- ]/gi, '')\n .replace(/ /gi, '-')\n .toLowerCase();\n\n// ============================================================================\n// SANITIZER\n// ============================================================================\n\nconst SANITIZE_R = /(javascript|vbscript|data(?!:image)):/i;\n\n/**\n * Sanitize URLs to prevent XSS attacks.\n * Returns null if the URL is unsafe.\n */\nexport const sanitizer = (input: string): string | null => {\n try {\n const decoded = decodeURIComponent(input).replace(/[^A-Za-z0-9/:]/g, '');\n\n if (SANITIZE_R.test(decoded)) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n 'Input contains an unsafe JavaScript/VBScript/data expression, it will not be rendered.',\n decoded\n );\n }\n\n return null;\n }\n } catch (_e) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n 'Input could not be decoded due to malformed syntax or characters, it will not be rendered.',\n input\n );\n }\n\n // decodeURIComponent sometimes throws a URIError\n return null;\n }\n\n return input;\n};\n\n// ============================================================================\n// WHITESPACE NORMALIZATION\n// ============================================================================\n\n/**\n * Normalize whitespace in source string.\n */\nexport const normalizeWhitespace = (source: string): string => {\n const start = performance.now();\n const result = source\n .replace(CR_NEWLINE_R, '\\n')\n .replace(FORMFEED_R, '')\n .replace(TAB_R, ' ');\n\n const duration = performance.now() - start;\n\n if (duration > DURATION_DELAY_TRIGGER) {\n console.log(\n `normalizeWhitespace: ${duration.toFixed(3)}ms, source length: ${source.length}`\n );\n }\n\n return result;\n};\n\n/**\n * Safely remove a uniform leading indentation from lines, but do NOT touch\n * the content inside fenced code blocks (``` or ~~~).\n */\nexport const trimLeadingWhitespaceOutsideFences = (\n text: string,\n whitespace: string\n): string => {\n const start = performance.now();\n if (!whitespace) return text;\n\n const lines = text.split('\\n');\n let inFence = false;\n let fenceToken: string | null = null;\n\n const isFenceLine = (line: string): RegExpMatchArray | null =>\n line.match(/^\\s*(`{3,}|~{3,})/);\n\n const maybeToggleFence = (line: string): void => {\n const m = isFenceLine(line);\n\n if (!m) return;\n\n const token = m[1];\n\n if (!inFence) {\n inFence = true;\n fenceToken = token;\n } else if (fenceToken && line.includes(fenceToken)) {\n inFence = false;\n fenceToken = null;\n }\n };\n\n const out = lines.map((line) => {\n const fenceMatch = isFenceLine(line);\n if (fenceMatch) {\n const trimmedFenceLine = line.startsWith(whitespace)\n ? line.slice(whitespace.length)\n : line;\n maybeToggleFence(line);\n return trimmedFenceLine;\n }\n\n if (inFence) {\n return line;\n }\n\n return line.startsWith(whitespace) ? line.slice(whitespace.length) : line;\n });\n\n const result = out.join('\\n');\n\n const duration = performance.now() - start;\n if (duration > DURATION_DELAY_TRIGGER) {\n console.log(\n `trimLeadingWhitespaceOutsideFences: ${duration.toFixed(3)}ms, text length: ${text.length}, lines count: ${lines.length}`\n );\n }\n\n return result;\n};\n\n/**\n * Normalize HTML attribute key to JSX prop name.\n */\nexport const normalizeAttributeKey = (key: string): string => {\n const hyphenIndex = key.indexOf('-');\n\n if (hyphenIndex !== -1 && key.match(HTML_CUSTOM_ATTR_R) === null) {\n key = key.replace(CAPTURE_LETTER_AFTER_HYPHEN, (_, letter) => {\n return letter.toUpperCase();\n });\n }\n\n return key;\n};\n\ntype StyleTuple = [key: string, value: string];\n\n/**\n * Parse a CSS style string into an array of [key, value] tuples.\n */\nexport const parseStyleAttribute = (styleString: string): StyleTuple[] => {\n const start = performance.now();\n const styles: StyleTuple[] = [];\n let buffer = '';\n let inUrl = false;\n let inQuotes = false;\n let quoteChar: '\"' | \"'\" | '' = '';\n\n if (!styleString) return styles;\n\n for (let i = 0; i < styleString.length; i++) {\n const char = styleString[i];\n\n if ((char === '\"' || char === \"'\") && !inUrl) {\n if (!inQuotes) {\n inQuotes = true;\n quoteChar = char;\n } else if (char === quoteChar) {\n inQuotes = false;\n quoteChar = '';\n }\n }\n\n if (char === '(' && buffer.endsWith('url')) {\n inUrl = true;\n } else if (char === ')' && inUrl) {\n inUrl = false;\n }\n\n if (char === ';' && !inQuotes && !inUrl) {\n const declaration = buffer.trim();\n\n if (declaration) {\n const colonIndex = declaration.indexOf(':');\n\n if (colonIndex > 0) {\n const key = declaration.slice(0, colonIndex).trim();\n const value = declaration.slice(colonIndex + 1).trim();\n styles.push([key, value]);\n }\n }\n buffer = '';\n } else {\n buffer += char;\n }\n }\n\n const declaration = buffer.trim();\n\n if (declaration) {\n const colonIndex = declaration.indexOf(':');\n if (colonIndex > 0) {\n const key = declaration.slice(0, colonIndex).trim();\n const value = declaration.slice(colonIndex + 1).trim();\n styles.push([key, value]);\n }\n }\n\n const duration = performance.now() - start;\n\n if (duration > DURATION_DELAY_TRIGGER) {\n console.log(\n `parseStyleAttribute: ${duration.toFixed(3)}ms, styleString length: ${styleString.length}, styles count: ${styles.length}`\n );\n }\n\n return styles;\n};\n\n/**\n * Convert an attribute value to a Node prop value.\n */\nexport const attributeValueToNodePropValue = (\n tag: string,\n key: string,\n value: string,\n sanitizeUrlFn: (\n value: string,\n tag: string,\n attribute: string\n ) => string | null\n): any => {\n if (key === 'style') {\n return parseStyleAttribute(value).reduce(\n (styles, [styleKey, styleValue]) => {\n const camelCasedKey = styleKey.replace(/(-[a-z])/g, (substr) =>\n substr[1].toUpperCase()\n );\n\n (styles as Record<string, any>)[camelCasedKey] = sanitizeUrlFn(\n styleValue,\n tag,\n styleKey\n );\n\n return styles;\n },\n {} as Record<string, any>\n );\n } else if (ATTRIBUTES_TO_SANITIZE.indexOf(key) !== -1) {\n return sanitizeUrlFn(unescapeString(value), tag, key);\n } else if (value.match(INTERPOLATION_R)) {\n value = unescapeString(value.slice(1, value.length - 1));\n }\n\n if (value === 'true') {\n return true;\n } else if (value === 'false') {\n return false;\n }\n\n return value;\n};\n\n// ============================================================================\n// TABLE PARSING\n// ============================================================================\n\n/**\n * Parse table alignment from a separator row.\n */\nexport const parseTableAlignCapture = (\n alignCapture: string\n): 'left' | 'right' | 'center' => {\n if (TABLE_RIGHT_ALIGN.test(alignCapture)) {\n return 'right';\n } else if (TABLE_CENTER_ALIGN.test(alignCapture)) {\n return 'center';\n } else if (TABLE_LEFT_ALIGN.test(alignCapture)) {\n return 'left';\n }\n\n return 'left';\n};\n\n/**\n * Parse table alignment row.\n */\nexport const parseTableAlign = (\n source: string\n): ('left' | 'right' | 'center')[] => {\n const alignText = source.replace(TABLE_TRIM_PIPES, '').split('|');\n return alignText.map(parseTableAlignCapture);\n};\n\n/**\n * Parse a single table row.\n */\nexport const parseTableRow = (\n source: string,\n parse: NestedParser,\n state: ParseState,\n tableOutput: boolean\n): ParserResult[][] => {\n const start = performance.now();\n const prevInTable = state.inTable;\n\n state.inTable = true;\n\n const cells: ParserResult[][] = [[]];\n let acc = '';\n\n const flush = (): void => {\n if (!acc) return;\n\n const cell = cells[cells.length - 1];\n cell.push.apply(cell, parse(acc, state));\n acc = '';\n };\n\n source\n .trim()\n .split(/(`[^`]*`|\\\\\\||\\|)/)\n .filter(Boolean)\n .forEach((fragment, i, arr) => {\n if (fragment.trim() === '|') {\n flush();\n\n if (tableOutput) {\n if (i !== 0 && i !== arr.length - 1) {\n cells.push([]);\n }\n\n return;\n }\n }\n\n acc += fragment;\n });\n\n flush();\n\n state.inTable = prevInTable;\n\n const duration = performance.now() - start;\n if (duration > DURATION_DELAY_TRIGGER) {\n console.log(\n `parseTableRow: ${duration.toFixed(3)}ms, source length: ${source.length}, cells count: ${cells.length}`\n );\n }\n\n return cells;\n};\n\n/**\n * Parse table cells (multiple rows).\n */\nexport const parseTableCells = (\n source: string,\n parse: NestedParser,\n state: ParseState\n): ParserResult[][][] => {\n const start = performance.now();\n const rowsText = source.trim().split('\\n');\n\n const result = rowsText.map((rowText) =>\n parseTableRow(rowText, parse, state, true)\n );\n\n const duration = performance.now() - start;\n if (duration > DURATION_DELAY_TRIGGER) {\n console.log(\n `parseTableCells: ${duration.toFixed(3)}ms, source length: ${source.length}, rows count: ${rowsText.length}`\n );\n }\n\n return result;\n};\n\n// ============================================================================\n// PARSING HELPERS\n// ============================================================================\n\n/**\n * Check if a rule qualifies for the current source and state.\n */\nexport const qualifies = (\n source: string,\n state: ParseState,\n qualify: NonNullable<Rule<any>['_qualify']>\n): boolean => {\n if (Array.isArray(qualify)) {\n for (let i = 0; i < qualify.length; i++) {\n if (startsWith(source, qualify[i])) return true;\n }\n\n return false;\n }\n\n return (qualify as (source: string, state: ParseState) => boolean)(\n source,\n state\n );\n};\n\n/**\n * Marks a matcher function as eligible for being run inside an inline context.\n */\nexport const allowInline = <T extends (...args: any[]) => any>(\n fn: T\n): T & { inline: 1 } => {\n (fn as any).inline = 1;\n return fn as T & { inline: 1 };\n};\n\n/**\n * Creates a match function for an inline scoped element from a regex.\n */\nexport const inlineRegex = (regex: RegExp) =>\n allowInline((source: string, state: ParseState): RegExpMatchArray | null => {\n if (state.inline) {\n return regex.exec(source);\n } else {\n return null;\n }\n });\n\n/**\n * Creates a match function for inline elements except links.\n */\nexport const simpleInlineRegex = (regex: RegExp) =>\n allowInline((source: string, state: ParseState): RegExpMatchArray | null => {\n if (state.inline || state.simple) {\n return regex.exec(source);\n } else {\n return null;\n }\n });\n\n/**\n * Creates a match function for a block scoped element from a regex.\n */\nexport const blockRegex =\n (regex: RegExp) =>\n (source: string, state: ParseState): RegExpMatchArray | null => {\n if (state.inline || state.simple) {\n return null;\n } else {\n return regex.exec(source);\n }\n };\n\n/**\n * Creates a match function from a regex, ignoring block/inline scope.\n */\nexport const anyScopeRegex = (\n fn: RegExp | ((source: string, state: ParseState) => RegExpMatchArray | null)\n) =>\n allowInline((source: string, state: ParseState): RegExpMatchArray | null => {\n if (typeof fn === 'function') {\n return fn(source, state);\n }\n return fn.exec(source);\n });\n\n/**\n * Parse inline content (including links).\n */\nexport const parseInline = (\n parse: NestedParser,\n children: string,\n state: ParseState\n): ParserResult[] => {\n const start = performance.now();\n const isCurrentlyInline = state.inline ?? false;\n const isCurrentlySimple = state.simple ?? false;\n state.inline = true;\n state.simple = true;\n const result = parse(children, state);\n state.inline = isCurrentlyInline;\n state.simple = isCurrentlySimple;\n\n const duration = performance.now() - start;\n if (duration > DURATION_DELAY_TRIGGER) {\n console.log(\n `parseInline: ${duration.toFixed(3)}ms, children length: ${children.length}, result count: ${result.length}`\n );\n }\n\n return result;\n};\n\n/**\n * Parse simple inline content (no links).\n */\nexport const parseSimpleInline = (\n parse: NestedParser,\n children: string,\n state: ParseState\n): ParserResult[] => {\n const start = performance.now();\n const isCurrentlyInline = state.inline ?? false;\n const isCurrentlySimple = state.simple ?? false;\n\n state.inline = false;\n state.simple = true;\n const result = parse(children, state);\n state.inline = isCurrentlyInline;\n state.simple = isCurrentlySimple;\n\n const duration = performance.now() - start;\n if (duration > DURATION_DELAY_TRIGGER) {\n console.log(\n `parseSimpleInline: ${duration.toFixed(3)}ms, children length: ${children.length}, result count: ${result.length}`\n );\n }\n\n return result;\n};\n\n/**\n * Parse block content.\n */\nexport const parseBlock = (\n parse: NestedParser,\n children: string,\n state: ParseState = {}\n): ParserResult[] => {\n const start = performance.now();\n const isCurrentlyInline = state.inline || false;\n state.inline = false;\n const normalizedChildren = trimEnd(children);\n const needsTerminator = /\\n\\n$/.test(normalizedChildren) === false;\n const blockInput = needsTerminator\n ? normalizedChildren.endsWith('\\n')\n ? `${normalizedChildren}\\n`\n : `${normalizedChildren}\\n\\n`\n : normalizedChildren;\n\n const result = parse(blockInput, state);\n state.inline = isCurrentlyInline;\n\n const duration = performance.now() - start;\n if (duration > DURATION_DELAY_TRIGGER) {\n console.log(\n `parseBlock: ${duration.toFixed(3)}ms, children length: ${children.length}, result count: ${result.length}`\n );\n }\n\n return result;\n};\n\n/**\n * Helper to parse capture group 2 as inline content.\n */\nexport const parseCaptureInline = (\n capture: RegExpMatchArray,\n parse: NestedParser,\n state: ParseState\n): { children: ParserResult[] } => {\n return {\n children: parseInline(parse, capture[2], state),\n };\n};\n\n/**\n * Helper that captures nothing (empty object).\n */\nexport const captureNothing = (): Record<string, never> => ({});\n\n/**\n * Helper that renders nothing (null).\n */\nexport const renderNothing = (): null => null;\n\n/**\n * Check if any regex in a list matches the input.\n */\nexport const some = (regexes: RegExp[], input: string): boolean => {\n for (let i = 0; i < regexes.length; i++) {\n if (regexes[i].test(input)) {\n return true;\n }\n }\n return false;\n};\n"],"mappings":"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"}