@coderminer/vue-markdown 0.0.0-stage → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +110 -0
- package/LICENSE +21 -0
- package/README.md +579 -3
- package/README.zh-CN.md +547 -0
- package/dist/chunks/MarkdownBlockquote-DVXziX2t.js +18 -0
- package/dist/chunks/MarkdownBlockquote-DVXziX2t.js.map +1 -0
- package/dist/chunks/MarkdownBreak-BwCi2Itt.js +18 -0
- package/dist/chunks/MarkdownBreak-BwCi2Itt.js.map +1 -0
- package/dist/chunks/MarkdownCode-B1k9tmW5.js +65 -0
- package/dist/chunks/MarkdownCode-B1k9tmW5.js.map +1 -0
- package/dist/chunks/MarkdownConfigProvider-5N3ylrIu.js +51 -0
- package/dist/chunks/MarkdownConfigProvider-5N3ylrIu.js.map +1 -0
- package/dist/chunks/MarkdownContent-BAK6dqo7.js +15 -0
- package/dist/chunks/MarkdownContent-BAK6dqo7.js.map +1 -0
- package/dist/chunks/MarkdownCustomTag-BBdn3-WO.js +42 -0
- package/dist/chunks/MarkdownCustomTag-BBdn3-WO.js.map +1 -0
- package/dist/chunks/MarkdownEmphasis-CppivOEu.js +18 -0
- package/dist/chunks/MarkdownEmphasis-CppivOEu.js.map +1 -0
- package/dist/chunks/MarkdownEmpty-Av5k6bqa.js +16 -0
- package/dist/chunks/MarkdownEmpty-Av5k6bqa.js.map +1 -0
- package/dist/chunks/MarkdownError-C0sPs5W0.js +19 -0
- package/dist/chunks/MarkdownError-C0sPs5W0.js.map +1 -0
- package/dist/chunks/MarkdownFootnoteReference-Dy3Khwyj.js +24 -0
- package/dist/chunks/MarkdownFootnoteReference-Dy3Khwyj.js.map +1 -0
- package/dist/chunks/MarkdownFootnotes-BRPzkbXv.js +23 -0
- package/dist/chunks/MarkdownFootnotes-BRPzkbXv.js.map +1 -0
- package/dist/chunks/MarkdownHeading-DaNcP0_6.js +31 -0
- package/dist/chunks/MarkdownHeading-DaNcP0_6.js.map +1 -0
- package/dist/chunks/MarkdownHorizontalRule-QNe_cuUI.js +18 -0
- package/dist/chunks/MarkdownHorizontalRule-QNe_cuUI.js.map +1 -0
- package/dist/chunks/MarkdownHtml-66lYkvwM.js +15 -0
- package/dist/chunks/MarkdownHtml-66lYkvwM.js.map +1 -0
- package/dist/chunks/MarkdownImage-BRy76svs.js +53 -0
- package/dist/chunks/MarkdownImage-BRy76svs.js.map +1 -0
- package/dist/chunks/MarkdownInlineCode-MXZYFwex.js +18 -0
- package/dist/chunks/MarkdownInlineCode-MXZYFwex.js.map +1 -0
- package/dist/chunks/MarkdownLink-Dbx3NwgV.js +47 -0
- package/dist/chunks/MarkdownLink-Dbx3NwgV.js.map +1 -0
- package/dist/chunks/MarkdownList-BJ-_C71k.js +22 -0
- package/dist/chunks/MarkdownList-BJ-_C71k.js.map +1 -0
- package/dist/chunks/MarkdownListItem-Z1EHIY26.js +18 -0
- package/dist/chunks/MarkdownListItem-Z1EHIY26.js.map +1 -0
- package/dist/chunks/MarkdownLoading-D-RYtXxf.js +17 -0
- package/dist/chunks/MarkdownLoading-D-RYtXxf.js.map +1 -0
- package/dist/chunks/MarkdownParagraph-BxLSmSaG.js +18 -0
- package/dist/chunks/MarkdownParagraph-BxLSmSaG.js.map +1 -0
- package/dist/chunks/MarkdownRenderer-DLRRfsdI.js +416 -0
- package/dist/chunks/MarkdownRenderer-DLRRfsdI.js.map +1 -0
- package/dist/chunks/MarkdownRoot-DEE6iVfh.js +25 -0
- package/dist/chunks/MarkdownRoot-DEE6iVfh.js.map +1 -0
- package/dist/chunks/MarkdownStrikethrough-CblvbqDk.js +18 -0
- package/dist/chunks/MarkdownStrikethrough-CblvbqDk.js.map +1 -0
- package/dist/chunks/MarkdownStrong-uU5MzAoJ.js +18 -0
- package/dist/chunks/MarkdownStrong-uU5MzAoJ.js.map +1 -0
- package/dist/chunks/MarkdownTable-DmBTg_CR.js +18 -0
- package/dist/chunks/MarkdownTable-DmBTg_CR.js.map +1 -0
- package/dist/chunks/MarkdownTableCell-eiCJe847.js +33 -0
- package/dist/chunks/MarkdownTableCell-eiCJe847.js.map +1 -0
- package/dist/chunks/MarkdownTableRow-DuJaPntg.js +18 -0
- package/dist/chunks/MarkdownTableRow-DuJaPntg.js.map +1 -0
- package/dist/chunks/MarkdownTableSection-PFHz-R33.js +26 -0
- package/dist/chunks/MarkdownTableSection-PFHz-R33.js.map +1 -0
- package/dist/chunks/MarkdownTaskItem-BcmKo1lk.js +40 -0
- package/dist/chunks/MarkdownTaskItem-BcmKo1lk.js.map +1 -0
- package/dist/chunks/MarkdownToc-BdOHF-Yo.js +51 -0
- package/dist/chunks/MarkdownToc-BdOHF-Yo.js.map +1 -0
- package/dist/chunks/MarkdownTocItem-DT9mR3vL.js +27 -0
- package/dist/chunks/MarkdownTocItem-DT9mR3vL.js.map +1 -0
- package/dist/chunks/MermaidLiveEditor-W-qf3G-5.js +416 -0
- package/dist/chunks/MermaidLiveEditor-W-qf3G-5.js.map +1 -0
- package/dist/chunks/VueSyntaxHighlighter-DyLsYMwy.js +262 -0
- package/dist/chunks/VueSyntaxHighlighter-DyLsYMwy.js.map +1 -0
- package/dist/chunks/adapters-CMwX_NEI.js +28 -0
- package/dist/chunks/adapters-CMwX_NEI.js.map +1 -0
- package/dist/chunks/asyncToGenerator-ChigusFD.js +26 -0
- package/dist/chunks/blank-line-Cb-JBP_5.js +90 -0
- package/dist/chunks/blank-line-Cb-JBP_5.js.map +1 -0
- package/dist/chunks/codemirror-DyphMAEg.js +84 -0
- package/dist/chunks/codemirror-DyphMAEg.js.map +1 -0
- package/dist/chunks/config-aRYo2R8_.js +12 -0
- package/dist/chunks/config-aRYo2R8_.js.map +1 -0
- package/dist/chunks/context-8NfW6fxI.js +32 -0
- package/dist/chunks/context-8NfW6fxI.js.map +1 -0
- package/dist/chunks/default-DWVS-I_8.js +23 -0
- package/dist/chunks/default-DWVS-I_8.js.map +1 -0
- package/dist/chunks/diagnostics-CtHoJyiX.js +25 -0
- package/dist/chunks/diagnostics-CtHoJyiX.js.map +1 -0
- package/dist/chunks/export-DZQ3cUry.js +1575 -0
- package/dist/chunks/export-DZQ3cUry.js.map +1 -0
- package/dist/chunks/hast-nodes-C0bX3M5Z.js +35 -0
- package/dist/chunks/hast-nodes-C0bX3M5Z.js.map +1 -0
- package/dist/chunks/highlightjs-BEh-YwEG.js +6041 -0
- package/dist/chunks/highlightjs-BEh-YwEG.js.map +1 -0
- package/dist/chunks/identity-jZEhX2d5.js +6244 -0
- package/dist/chunks/identity-jZEhX2d5.js.map +1 -0
- package/dist/chunks/labels-BtHiUTQI.js +49 -0
- package/dist/chunks/labels-BtHiUTQI.js.map +1 -0
- package/dist/chunks/lib-BQiWGWpu.js +5087 -0
- package/dist/chunks/lib-BQiWGWpu.js.map +1 -0
- package/dist/chunks/lib-LwqA_W3J.js +127 -0
- package/dist/chunks/lib-LwqA_W3J.js.map +1 -0
- package/dist/chunks/longest-streak-DZE_EqsU.js +10 -0
- package/dist/chunks/longest-streak-DZE_EqsU.js.map +1 -0
- package/dist/chunks/micromark-factory-space-Db040TnW.js +139 -0
- package/dist/chunks/micromark-factory-space-Db040TnW.js.map +1 -0
- package/dist/chunks/normalize-CRYv3Wqt.js +220 -0
- package/dist/chunks/normalize-CRYv3Wqt.js.map +1 -0
- package/dist/chunks/objectSpread2-CtBNx0TF.js +57 -0
- package/dist/chunks/plugin-DqkFHyny.js +28 -0
- package/dist/chunks/plugin-DqkFHyny.js.map +1 -0
- package/dist/chunks/preset-BjaOuJUL.js +46 -0
- package/dist/chunks/preset-BjaOuJUL.js.map +1 -0
- package/dist/chunks/registry-DLjr93-V.js +6144 -0
- package/dist/chunks/registry-DLjr93-V.js.map +1 -0
- package/dist/chunks/render-Cs8iKrgz.js +1724 -0
- package/dist/chunks/render-Cs8iKrgz.js.map +1 -0
- package/dist/chunks/runtime-DJMnzjah.js +546 -0
- package/dist/chunks/runtime-DJMnzjah.js.map +1 -0
- package/dist/chunks/security-y4EwUyAs.js +214 -0
- package/dist/chunks/security-y4EwUyAs.js.map +1 -0
- package/dist/chunks/shared-DNAvZ-UY.js +76 -0
- package/dist/chunks/shared-DNAvZ-UY.js.map +1 -0
- package/dist/chunks/space-separated-tokens-CmBjEPdR.js +1099 -0
- package/dist/chunks/space-separated-tokens-CmBjEPdR.js.map +1 -0
- package/dist/chunks/url-D2BoivaE.js +26 -0
- package/dist/chunks/url-D2BoivaE.js.map +1 -0
- package/dist/chunks/useActiveHeading-BaGVMJnB.js +316 -0
- package/dist/chunks/useActiveHeading-BaGVMJnB.js.map +1 -0
- package/dist/components/CodeBlock.d.ts +73 -0
- package/dist/components/CodeBlock.js +1 -0
- package/dist/components/Icon.d.ts +6 -0
- package/dist/components/MarkdownBlockquote.d.ts +18 -0
- package/dist/components/MarkdownBlockquote.js +1 -0
- package/dist/components/MarkdownBreak.d.ts +8 -0
- package/dist/components/MarkdownBreak.js +1 -0
- package/dist/components/MarkdownChildren.d.ts +17 -0
- package/dist/components/MarkdownCode.d.ts +29 -0
- package/dist/components/MarkdownCode.js +1 -0
- package/dist/components/MarkdownConfigProvider.d.ts +33 -0
- package/dist/components/MarkdownConfigProvider.js +1 -0
- package/dist/components/MarkdownContent.d.ts +16 -0
- package/dist/components/MarkdownContent.js +1 -0
- package/dist/components/MarkdownCustomTag.d.ts +20 -0
- package/dist/components/MarkdownCustomTag.js +1 -0
- package/dist/components/MarkdownEmphasis.d.ts +18 -0
- package/dist/components/MarkdownEmphasis.js +1 -0
- package/dist/components/MarkdownEmpty.d.ts +8 -0
- package/dist/components/MarkdownEmpty.js +1 -0
- package/dist/components/MarkdownError.d.ts +11 -0
- package/dist/components/MarkdownError.js +1 -0
- package/dist/components/MarkdownFootnoteReference.d.ts +19 -0
- package/dist/components/MarkdownFootnoteReference.js +1 -0
- package/dist/components/MarkdownFootnotes.d.ts +17 -0
- package/dist/components/MarkdownFootnotes.js +1 -0
- package/dist/components/MarkdownHeading.d.ts +18 -0
- package/dist/components/MarkdownHeading.js +1 -0
- package/dist/components/MarkdownHorizontalRule.d.ts +8 -0
- package/dist/components/MarkdownHorizontalRule.js +1 -0
- package/dist/components/MarkdownHtml.d.ts +8 -0
- package/dist/components/MarkdownHtml.js +1 -0
- package/dist/components/MarkdownImage.d.ts +15 -0
- package/dist/components/MarkdownImage.js +1 -0
- package/dist/components/MarkdownInlineCode.d.ts +18 -0
- package/dist/components/MarkdownInlineCode.js +1 -0
- package/dist/components/MarkdownLink.d.ts +22 -0
- package/dist/components/MarkdownLink.js +1 -0
- package/dist/components/MarkdownList.d.ts +18 -0
- package/dist/components/MarkdownList.js +1 -0
- package/dist/components/MarkdownListItem.d.ts +18 -0
- package/dist/components/MarkdownListItem.js +1 -0
- package/dist/components/MarkdownLoading.d.ts +8 -0
- package/dist/components/MarkdownLoading.js +1 -0
- package/dist/components/MarkdownMath.d.ts +12 -0
- package/dist/components/MarkdownMath.js +1 -0
- package/dist/components/MarkdownMermaid.d.ts +78 -0
- package/dist/components/MarkdownMermaid.js +1 -0
- package/dist/components/MarkdownParagraph.d.ts +18 -0
- package/dist/components/MarkdownParagraph.js +1 -0
- package/dist/components/MarkdownRenderer.d.ts +170 -0
- package/dist/components/MarkdownRenderer.js +1 -0
- package/dist/components/MarkdownRoot.d.ts +24 -0
- package/dist/components/MarkdownRoot.js +1 -0
- package/dist/components/MarkdownStrikethrough.d.ts +18 -0
- package/dist/components/MarkdownStrikethrough.js +1 -0
- package/dist/components/MarkdownStrong.d.ts +18 -0
- package/dist/components/MarkdownStrong.js +1 -0
- package/dist/components/MarkdownTable.d.ts +18 -0
- package/dist/components/MarkdownTable.js +1 -0
- package/dist/components/MarkdownTableCell.d.ts +20 -0
- package/dist/components/MarkdownTableCell.js +1 -0
- package/dist/components/MarkdownTableRow.d.ts +18 -0
- package/dist/components/MarkdownTableRow.js +1 -0
- package/dist/components/MarkdownTableSection.d.ts +18 -0
- package/dist/components/MarkdownTableSection.js +1 -0
- package/dist/components/MarkdownTaskItem.d.ts +20 -0
- package/dist/components/MarkdownTaskItem.js +1 -0
- package/dist/components/MarkdownToc.d.ts +36 -0
- package/dist/components/MarkdownToc.js +1 -0
- package/dist/components/MarkdownTocItem.d.ts +14 -0
- package/dist/components/MarkdownTocItem.js +1 -0
- package/dist/components/MermaidBlock.d.ts +50 -0
- package/dist/components/MermaidBlock.js +1 -0
- package/dist/components/MermaidLiveEditor.d.ts +44 -0
- package/dist/components/MermaidLiveEditor.js +1 -0
- package/dist/components/VueSyntaxHighlighter.d.ts +39 -0
- package/dist/components/VueSyntaxHighlighter.js +1 -0
- package/dist/components/codeRegion.d.ts +14 -0
- package/dist/components/config.d.ts +7 -0
- package/dist/components/context.d.ts +45 -0
- package/dist/components/index.d.ts +42 -0
- package/dist/components/index.js +38 -0
- package/dist/components/render.d.ts +9 -0
- package/dist/components/scroll-lock.d.ts +7 -0
- package/dist/components/types.d.ts +29 -0
- package/dist/composables/useActiveHeading.d.ts +12 -0
- package/dist/composables/useCodeHighlighter.d.ts +30 -0
- package/dist/composables/useLineWindow.d.ts +38 -0
- package/dist/composables/useMarkdownDocument.d.ts +23 -0
- package/dist/core/adapters.d.ts +7 -0
- package/dist/core/config.d.ts +5 -0
- package/dist/core/diagnostics.d.ts +9 -0
- package/dist/core/finalize.d.ts +18 -0
- package/dist/core/hast-nodes.d.ts +6 -0
- package/dist/core/highlight-lines.d.ts +8 -0
- package/dist/core/identity.d.ts +4 -0
- package/dist/core/labels.d.ts +4 -0
- package/dist/core/manifest.d.ts +38 -0
- package/dist/core/memo.d.ts +5 -0
- package/dist/core/model-hast.d.ts +8 -0
- package/dist/core/model.d.ts +10 -0
- package/dist/core/normalize.d.ts +27 -0
- package/dist/core/parts.d.ts +135 -0
- package/dist/core/preset.d.ts +10 -0
- package/dist/core/run.d.ts +16 -0
- package/dist/core/search.d.ts +5 -0
- package/dist/core/security.d.ts +21 -0
- package/dist/core/slugger.d.ts +6 -0
- package/dist/core/types.d.ts +390 -0
- package/dist/core/url.d.ts +10 -0
- package/dist/editor/codemirror.d.ts +14 -0
- package/dist/editor/index.d.ts +2 -0
- package/dist/editor/index.js +1 -0
- package/dist/export/index.d.ts +6 -0
- package/dist/headless.d.ts +21 -0
- package/dist/headless.js +12 -0
- package/dist/highlight/highlightjs.d.ts +7 -0
- package/dist/highlight/index.d.ts +3 -0
- package/dist/highlight/index.js +3 -0
- package/dist/highlight/shared.d.ts +16 -0
- package/dist/highlight/shiki.d.ts +7 -0
- package/dist/highlight/shiki.js +76 -0
- package/dist/highlight/shiki.js.map +1 -0
- package/dist/html/index.d.ts +17 -0
- package/dist/html/index.js +13 -0
- package/dist/html/index.js.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.js +55 -0
- package/dist/index.js.map +1 -0
- package/dist/math/index.d.ts +4 -0
- package/dist/math/index.js +583 -0
- package/dist/math/index.js.map +1 -0
- package/dist/math/katex.d.ts +4 -0
- package/dist/math/plugin.d.ts +20 -0
- package/dist/mermaid/index.d.ts +5 -0
- package/dist/mermaid/index.js +3 -0
- package/dist/mermaid/plugin.d.ts +14 -0
- package/dist/mermaid/runtime.d.ts +12 -0
- package/dist/mermaid/sanitize.d.ts +12 -0
- package/dist/node-components.d.ts +1 -0
- package/dist/node-components.js +39 -0
- package/dist/pipeline/custom.d.ts +8 -0
- package/dist/pipeline/identity.d.ts +12 -0
- package/dist/pipeline/index.d.ts +5 -0
- package/dist/pipeline/official.d.ts +6 -0
- package/dist/pipeline.d.ts +1 -0
- package/dist/pipeline.js +1 -0
- package/dist/plugins/builtin.d.ts +15 -0
- package/dist/plugins/define.d.ts +7 -0
- package/dist/plugins/registry.d.ts +16 -0
- package/dist/plugins/source.d.ts +7 -0
- package/dist/plugins.d.ts +3 -0
- package/dist/plugins.js +1 -0
- package/dist/presets.d.ts +3 -0
- package/dist/presets.js +1 -0
- package/dist/style.css +2 -0
- package/dist/styles/components.css +712 -0
- package/dist/styles/index.d.ts +1 -0
- package/dist/styles/math-full.css +3 -0
- package/dist/styles/math.css +18 -0
- package/dist/styles/tokens.css +96 -0
- package/package.json +211 -6
|
@@ -0,0 +1,214 @@
|
|
|
1
|
+
import { t as e } from "./url-D2BoivaE.js";
|
|
2
|
+
// src/core/security.ts
|
|
3
|
+
var t = /* @__PURE__ */ new Set(/* @__PURE__ */ "p.h1.h2.h3.h4.h5.h6.em.strong.del.a.img.ul.ol.li.blockquote.hr.table.thead.tbody.tfoot.tr.th.td.caption.colgroup.col.pre.code.br.input.section.div.span.sup.sub.kbd.mark.abbr.details.summary.dl.dt.dd.figure.figcaption.time.b.i.s.u.q.ins.picture.source.ruby.rp.rt.samp.var.tt.strike".split(".")), n = /* @__PURE__ */ new Set([
|
|
4
|
+
"script",
|
|
5
|
+
"style",
|
|
6
|
+
"iframe",
|
|
7
|
+
"object",
|
|
8
|
+
"embed",
|
|
9
|
+
"link",
|
|
10
|
+
"meta",
|
|
11
|
+
"base",
|
|
12
|
+
"form",
|
|
13
|
+
"textarea",
|
|
14
|
+
"select",
|
|
15
|
+
"option",
|
|
16
|
+
"template",
|
|
17
|
+
"noscript",
|
|
18
|
+
"svg",
|
|
19
|
+
"math"
|
|
20
|
+
]), r = /* @__PURE__ */ new Set([
|
|
21
|
+
"href",
|
|
22
|
+
"src",
|
|
23
|
+
"cite",
|
|
24
|
+
"poster",
|
|
25
|
+
"action",
|
|
26
|
+
"formaction",
|
|
27
|
+
"data",
|
|
28
|
+
"srcset",
|
|
29
|
+
"xlink:href"
|
|
30
|
+
]), i = /* @__PURE__ */ new Set([
|
|
31
|
+
"id",
|
|
32
|
+
"class",
|
|
33
|
+
"title",
|
|
34
|
+
"lang",
|
|
35
|
+
"dir",
|
|
36
|
+
"role",
|
|
37
|
+
"tabindex",
|
|
38
|
+
"hidden",
|
|
39
|
+
"align"
|
|
40
|
+
]), a = {
|
|
41
|
+
a: [
|
|
42
|
+
"href",
|
|
43
|
+
"target",
|
|
44
|
+
"rel",
|
|
45
|
+
"download",
|
|
46
|
+
"hreflang",
|
|
47
|
+
"type",
|
|
48
|
+
"name"
|
|
49
|
+
],
|
|
50
|
+
img: [
|
|
51
|
+
"src",
|
|
52
|
+
"alt",
|
|
53
|
+
"width",
|
|
54
|
+
"height",
|
|
55
|
+
"loading",
|
|
56
|
+
"decoding",
|
|
57
|
+
"srcset",
|
|
58
|
+
"sizes",
|
|
59
|
+
"referrerpolicy",
|
|
60
|
+
"crossorigin"
|
|
61
|
+
],
|
|
62
|
+
ol: [
|
|
63
|
+
"start",
|
|
64
|
+
"reversed",
|
|
65
|
+
"type"
|
|
66
|
+
],
|
|
67
|
+
ul: ["type"],
|
|
68
|
+
li: ["value"],
|
|
69
|
+
input: [
|
|
70
|
+
"type",
|
|
71
|
+
"checked",
|
|
72
|
+
"disabled",
|
|
73
|
+
"name",
|
|
74
|
+
"value"
|
|
75
|
+
],
|
|
76
|
+
td: [
|
|
77
|
+
"colspan",
|
|
78
|
+
"rowspan",
|
|
79
|
+
"headers",
|
|
80
|
+
"scope"
|
|
81
|
+
],
|
|
82
|
+
th: [
|
|
83
|
+
"colspan",
|
|
84
|
+
"rowspan",
|
|
85
|
+
"headers",
|
|
86
|
+
"scope",
|
|
87
|
+
"abbr"
|
|
88
|
+
],
|
|
89
|
+
table: ["summary"],
|
|
90
|
+
col: ["span", "width"],
|
|
91
|
+
colgroup: ["span"],
|
|
92
|
+
blockquote: ["cite"],
|
|
93
|
+
q: ["cite"],
|
|
94
|
+
del: ["cite", "datetime"],
|
|
95
|
+
ins: ["cite", "datetime"],
|
|
96
|
+
time: ["datetime"],
|
|
97
|
+
source: [
|
|
98
|
+
"src",
|
|
99
|
+
"srcset",
|
|
100
|
+
"sizes",
|
|
101
|
+
"media",
|
|
102
|
+
"type"
|
|
103
|
+
],
|
|
104
|
+
details: ["open"],
|
|
105
|
+
code: ["class"],
|
|
106
|
+
pre: ["class"],
|
|
107
|
+
abbr: ["title"],
|
|
108
|
+
section: ["data-footnotes", "data-footnote-ref"],
|
|
109
|
+
sup: ["data-footnote-ref"]
|
|
110
|
+
}, o = {
|
|
111
|
+
classname: "class",
|
|
112
|
+
htmlfor: "for",
|
|
113
|
+
srcset: "srcset",
|
|
114
|
+
colspan: "colspan",
|
|
115
|
+
rowspan: "rowspan",
|
|
116
|
+
charset: "charset",
|
|
117
|
+
httpequiv: "http-equiv",
|
|
118
|
+
tabindex: "tabindex",
|
|
119
|
+
readonly: "readonly",
|
|
120
|
+
maxlength: "maxlength",
|
|
121
|
+
minlength: "minlength",
|
|
122
|
+
autocomplete: "autocomplete",
|
|
123
|
+
referrerpolicy: "referrerpolicy",
|
|
124
|
+
crossorigin: "crossorigin",
|
|
125
|
+
datetime: "datetime"
|
|
126
|
+
};
|
|
127
|
+
function s(e) {
|
|
128
|
+
return e.replace(/([a-z0-9])([A-Z])/g, "$1-$2").replace(/[_\s]+/g, "-").toLowerCase();
|
|
129
|
+
}
|
|
130
|
+
function c(e) {
|
|
131
|
+
return /^data[A-Z]/.test(e) ? `data-${s(e.slice(4))}` : /^aria[A-Z]/.test(e) ? `aria-${e.slice(4).toLowerCase()}` : o[e.toLowerCase()] || (e.includes("-") ? e.toLowerCase() : s(e));
|
|
132
|
+
}
|
|
133
|
+
function l(e, t) {
|
|
134
|
+
if (t.startsWith("on") || t === "style" || t === "srcdoc") return !1;
|
|
135
|
+
if (t.startsWith("aria-") || t.startsWith("data-") || i.has(t)) return !0;
|
|
136
|
+
let n = a[e];
|
|
137
|
+
return n ? n.includes(t) : /^[a-z][a-z0-9-]*$/.test(t);
|
|
138
|
+
}
|
|
139
|
+
function u(t, n) {
|
|
140
|
+
return t.trim() === "" || e(t, n) !== "";
|
|
141
|
+
}
|
|
142
|
+
function d(e) {
|
|
143
|
+
let t = [], n = 0;
|
|
144
|
+
for (; n < e.length;) {
|
|
145
|
+
for (; n < e.length && /[\s,]/.test(e[n]);) n++;
|
|
146
|
+
if (n >= e.length) break;
|
|
147
|
+
let r = n;
|
|
148
|
+
for (; n < e.length && !/\s/.test(e[n]);) n++;
|
|
149
|
+
let i = e.slice(r, n), a = !1;
|
|
150
|
+
for (; i.endsWith(",");) i = i.slice(0, -1), a = !0;
|
|
151
|
+
let o = "";
|
|
152
|
+
if (!a) {
|
|
153
|
+
let t = n;
|
|
154
|
+
for (; n < e.length && e[n] !== ",";) n++;
|
|
155
|
+
o = e.slice(t, n).trim();
|
|
156
|
+
}
|
|
157
|
+
i && t.push({
|
|
158
|
+
url: i,
|
|
159
|
+
descriptor: o
|
|
160
|
+
}), n < e.length && e[n] === "," && n++;
|
|
161
|
+
}
|
|
162
|
+
return t;
|
|
163
|
+
}
|
|
164
|
+
function f(e, t) {
|
|
165
|
+
if (t === "srcset") {
|
|
166
|
+
let t = [];
|
|
167
|
+
for (let n of d(e)) u(n.url, "src") && t.push(n.descriptor ? `${n.url} ${n.descriptor}` : n.url);
|
|
168
|
+
return t.length > 0 ? t.join(", ") : void 0;
|
|
169
|
+
}
|
|
170
|
+
return u(e, t) ? e : void 0;
|
|
171
|
+
}
|
|
172
|
+
var p = /* @__PURE__ */ new Set([
|
|
173
|
+
"color",
|
|
174
|
+
"background-color",
|
|
175
|
+
"font-style",
|
|
176
|
+
"font-weight",
|
|
177
|
+
"text-decoration",
|
|
178
|
+
"opacity"
|
|
179
|
+
]), m = /url\s*\(|expression\s*\(|javascript\s*:|@import|behavior\s*:|-moz-binding|[<>{}]/i;
|
|
180
|
+
function h(e) {
|
|
181
|
+
let t = [];
|
|
182
|
+
for (let n of e.split(";")) {
|
|
183
|
+
let e = n.indexOf(":");
|
|
184
|
+
if (e <= 0) continue;
|
|
185
|
+
let r = n.slice(0, e).trim().toLowerCase(), i = n.slice(e + 1).trim();
|
|
186
|
+
r && i && (m.test(i) || (p.has(r) || /^--shiki-[a-z0-9-]+$/.test(r)) && t.push(`${r}: ${i}`));
|
|
187
|
+
}
|
|
188
|
+
return t.length > 0 ? t.join("; ") : void 0;
|
|
189
|
+
}
|
|
190
|
+
function g(e, t, n = {}) {
|
|
191
|
+
let i = {};
|
|
192
|
+
if (!t) return i;
|
|
193
|
+
for (let a of Object.keys(t)) {
|
|
194
|
+
let o = t[a];
|
|
195
|
+
if (o == null || o === !1) continue;
|
|
196
|
+
let s = c(a), u;
|
|
197
|
+
if (u = o === !0 ? "" : Array.isArray(o) ? o.join(" ") : String(o), s === "style") {
|
|
198
|
+
if (!n.allowStyle) continue;
|
|
199
|
+
let e = h(u);
|
|
200
|
+
if (e === void 0) continue;
|
|
201
|
+
i.style = e;
|
|
202
|
+
} else if (l(e, s)) {
|
|
203
|
+
if (r.has(s)) {
|
|
204
|
+
let e = f(u, s);
|
|
205
|
+
if (e === void 0) continue;
|
|
206
|
+
i[s] = e;
|
|
207
|
+
} else i[s] = u;
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
return i;
|
|
211
|
+
}
|
|
212
|
+
export { f as a, g as i, n, r, t };
|
|
213
|
+
|
|
214
|
+
//# sourceMappingURL=security-y4EwUyAs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security-y4EwUyAs.js","names":["defaultUrlTransform","ALLOWED_TAGS","DANGEROUS_TAGS","URL_ATTRIBUTES","GLOBAL_ATTRIBUTES","TAG_ATTRIBUTES","ATTRIBUTE_ALIASES","kebab","value","toAttributeName","key","isAllowedAttribute","name","tagAttributes","tag","isSafeUrl","parseSrcset","candidates","index","urlStart","url","commaSeparated","descriptor","descriptorStart","sanitizeUrlValue","safe","candidate","ALLOWED_STYLE_PROPERTIES","UNSAFE_STYLE","sanitizeStyleValue","declarations","part","separator","rawValue","propertiesToAttrs","attrs","properties","raw","options","safeStyle"],"sources":["../../src/core/security.ts"],"sourcesContent":["import type { Properties } from 'hast'\r\nimport { defaultUrlTransform } from './url'\r\n\r\n/** Tags that may appear in the normalized model. */\r\nexport const ALLOWED_TAGS = new Set([\r\n 'p',\r\n 'h1',\r\n 'h2',\r\n 'h3',\r\n 'h4',\r\n 'h5',\r\n 'h6',\r\n 'em',\r\n 'strong',\r\n 'del',\r\n 'a',\r\n 'img',\r\n 'ul',\r\n 'ol',\r\n 'li',\r\n 'blockquote',\r\n 'hr',\r\n 'table',\r\n 'thead',\r\n 'tbody',\r\n 'tfoot',\r\n 'tr',\r\n 'th',\r\n 'td',\r\n 'caption',\r\n 'colgroup',\r\n 'col',\r\n 'pre',\r\n 'code',\r\n 'br',\r\n 'input',\r\n 'section',\r\n 'div',\r\n 'span',\r\n 'sup',\r\n 'sub',\r\n 'kbd',\r\n 'mark',\r\n 'abbr',\r\n 'details',\r\n 'summary',\r\n 'dl',\r\n 'dt',\r\n 'dd',\r\n 'figure',\r\n 'figcaption',\r\n 'time',\r\n 'b',\r\n 'i',\r\n 's',\r\n 'u',\r\n 'q',\r\n 'ins',\r\n 'picture',\r\n 'source',\r\n 'ruby',\r\n 'rp',\r\n 'rt',\r\n 'samp',\r\n 'var',\r\n 'tt',\r\n 'strike',\r\n])\r\n\r\n/** Tags whose content must never reach the model. */\r\nexport const DANGEROUS_TAGS = new Set([\r\n 'script',\r\n 'style',\r\n 'iframe',\r\n 'object',\r\n 'embed',\r\n 'link',\r\n 'meta',\r\n 'base',\r\n 'form',\r\n 'textarea',\r\n 'select',\r\n 'option',\r\n 'template',\r\n 'noscript',\r\n 'svg',\r\n 'math',\r\n])\r\n\r\nconst URL_ATTRIBUTES = new Set([\r\n 'href',\r\n 'src',\r\n 'cite',\r\n 'poster',\r\n 'action',\r\n 'formaction',\r\n 'data',\r\n 'srcset',\r\n 'xlink:href',\r\n])\r\n\r\nexport { URL_ATTRIBUTES }\r\n\r\nconst GLOBAL_ATTRIBUTES = new Set([\r\n 'id',\r\n 'class',\r\n 'title',\r\n 'lang',\r\n 'dir',\r\n 'role',\r\n 'tabindex',\r\n 'hidden',\r\n 'align',\r\n])\r\n\r\nconst TAG_ATTRIBUTES: Record<string, readonly string[]> = {\r\n a: ['href', 'target', 'rel', 'download', 'hreflang', 'type', 'name'],\r\n img: [\r\n 'src',\r\n 'alt',\r\n 'width',\r\n 'height',\r\n 'loading',\r\n 'decoding',\r\n 'srcset',\r\n 'sizes',\r\n 'referrerpolicy',\r\n 'crossorigin',\r\n ],\r\n ol: ['start', 'reversed', 'type'],\r\n ul: ['type'],\r\n li: ['value'],\r\n input: ['type', 'checked', 'disabled', 'name', 'value'],\r\n td: ['colspan', 'rowspan', 'headers', 'scope'],\r\n th: ['colspan', 'rowspan', 'headers', 'scope', 'abbr'],\r\n table: ['summary'],\r\n col: ['span', 'width'],\r\n colgroup: ['span'],\r\n blockquote: ['cite'],\r\n q: ['cite'],\r\n del: ['cite', 'datetime'],\r\n ins: ['cite', 'datetime'],\r\n time: ['datetime'],\r\n source: ['src', 'srcset', 'sizes', 'media', 'type'],\r\n details: ['open'],\r\n code: ['class'],\r\n pre: ['class'],\r\n abbr: ['title'],\r\n section: ['data-footnotes', 'data-footnote-ref'],\r\n sup: ['data-footnote-ref'],\r\n}\r\n\r\nconst ATTRIBUTE_ALIASES: Record<string, string> = {\r\n classname: 'class',\r\n htmlfor: 'for',\r\n srcset: 'srcset',\r\n colspan: 'colspan',\r\n rowspan: 'rowspan',\r\n charset: 'charset',\r\n httpequiv: 'http-equiv',\r\n tabindex: 'tabindex',\r\n readonly: 'readonly',\r\n maxlength: 'maxlength',\r\n minlength: 'minlength',\r\n autocomplete: 'autocomplete',\r\n referrerpolicy: 'referrerpolicy',\r\n crossorigin: 'crossorigin',\r\n datetime: 'datetime',\r\n}\r\n\r\nfunction kebab(value: string): string {\r\n return value\r\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\r\n .replace(/[_\\s]+/g, '-')\r\n .toLowerCase()\r\n}\r\n\r\nexport function toAttributeName(key: string): string {\r\n if (/^data[A-Z]/.test(key)) return `data-${kebab(key.slice(4))}`\r\n // ARIA attribute names are lowercase concatenations, not kebab-case:\r\n // ariaLabelledBy -> aria-labelledby, ariaValueText -> aria-valuetext.\r\n if (/^aria[A-Z]/.test(key)) return `aria-${key.slice(4).toLowerCase()}`\r\n const alias = ATTRIBUTE_ALIASES[key.toLowerCase()]\r\n if (alias) return alias\r\n return key.includes('-') ? key.toLowerCase() : kebab(key)\r\n}\r\n\r\nexport function isAllowedAttribute(tag: string, name: string): boolean {\r\n if (name.startsWith('on')) return false\r\n if (name === 'style' || name === 'srcdoc') return false\r\n if (name.startsWith('aria-') || name.startsWith('data-')) return true\r\n if (GLOBAL_ATTRIBUTES.has(name)) return true\r\n const tagAttributes = TAG_ATTRIBUTES[tag]\r\n if (tagAttributes) return tagAttributes.includes(name)\r\n // Unknown tags are plugin/custom tags: accept safe named props, but still\r\n // reject event handlers and validate URL-bearing attributes below.\r\n return /^[a-z][a-z0-9-]*$/.test(name)\r\n}\r\n\r\nfunction isSafeUrl(value: string, key: string): boolean {\r\n return value.trim() === '' || defaultUrlTransform(value, key) !== ''\r\n}\r\n\r\ninterface SrcsetCandidate {\r\n url: string\r\n descriptor: string\r\n}\r\n\r\n/**\r\n * Split a `srcset` value without breaking commas inside a `data:` URL. The URL\r\n * runs until whitespace, matching the HTML candidate grammar; a trailing comma\r\n * separates the next candidate.\r\n */\r\nfunction parseSrcset(value: string): SrcsetCandidate[] {\r\n const candidates: SrcsetCandidate[] = []\r\n let index = 0\r\n\r\n while (index < value.length) {\r\n while (index < value.length && /[\\s,]/.test(value[index]!)) index++\r\n if (index >= value.length) break\r\n\r\n const urlStart = index\r\n while (index < value.length && !/\\s/.test(value[index]!)) index++\r\n let url = value.slice(urlStart, index)\r\n let commaSeparated = false\r\n while (url.endsWith(',')) {\r\n url = url.slice(0, -1)\r\n commaSeparated = true\r\n }\r\n\r\n let descriptor = ''\r\n if (!commaSeparated) {\r\n const descriptorStart = index\r\n while (index < value.length && value[index] !== ',') index++\r\n descriptor = value.slice(descriptorStart, index).trim()\r\n }\r\n\r\n if (url) candidates.push({ url, descriptor })\r\n if (index < value.length && value[index] === ',') index++\r\n }\r\n\r\n return candidates\r\n}\r\n\r\n/**\r\n * Validate one URL-bearing attribute value. `srcset` holds a comma-separated\r\n * candidate list, so each candidate is checked individually.\r\n */\r\nexport function sanitizeUrlValue(\r\n value: string,\r\n key: string,\r\n): string | undefined {\r\n if (key === 'srcset') {\r\n const safe: string[] = []\r\n for (const candidate of parseSrcset(value)) {\r\n if (!isSafeUrl(candidate.url, 'src')) continue\r\n safe.push(\r\n candidate.descriptor\r\n ? `${candidate.url} ${candidate.descriptor}`\r\n : candidate.url,\r\n )\r\n }\r\n return safe.length > 0 ? safe.join(', ') : undefined\r\n }\r\n return isSafeUrl(value, key) ? value : undefined\r\n}\r\n\r\n// Inline styles are rejected for document content. Trusted engine output\r\n// (highlighters, math) may opt in to a small, non-executable subset so token\r\n// colors survive normalization.\r\nconst ALLOWED_STYLE_PROPERTIES = new Set([\r\n 'color',\r\n 'background-color',\r\n 'font-style',\r\n 'font-weight',\r\n 'text-decoration',\r\n 'opacity',\r\n])\r\n\r\nconst UNSAFE_STYLE =\r\n /url\\s*\\(|expression\\s*\\(|javascript\\s*:|@import|behavior\\s*:|-moz-binding|[<>{}]/i\r\n\r\nexport function sanitizeStyleValue(value: string): string | undefined {\r\n const declarations: string[] = []\r\n for (const part of value.split(';')) {\r\n const separator = part.indexOf(':')\r\n if (separator <= 0) continue\r\n const name = part.slice(0, separator).trim().toLowerCase()\r\n const rawValue = part.slice(separator + 1).trim()\r\n if (!name || !rawValue) continue\r\n if (UNSAFE_STYLE.test(rawValue)) continue\r\n const allowed =\r\n ALLOWED_STYLE_PROPERTIES.has(name) || /^--shiki-[a-z0-9-]+$/.test(name)\r\n if (!allowed) continue\r\n declarations.push(`${name}: ${rawValue}`)\r\n }\r\n return declarations.length > 0 ? declarations.join('; ') : undefined\r\n}\r\n\r\nexport interface PropertiesToAttrsOptions {\r\n /** Allow a constrained inline-style subset for trusted engine output. */\r\n allowStyle?: boolean\r\n}\r\n\r\n/** Convert hast properties into safe, normalized attributes. */\r\nexport function propertiesToAttrs(\r\n tag: string,\r\n properties: Properties | undefined,\r\n options: PropertiesToAttrsOptions = {},\r\n): Record<string, string> {\r\n const attrs: Record<string, string> = {}\r\n if (!properties) return attrs\r\n\r\n for (const key of Object.keys(properties)) {\r\n const raw = properties[key]\r\n if (raw === null || raw === undefined || raw === false) continue\r\n const name = toAttributeName(key)\r\n\r\n let value: string\r\n if (raw === true) {\r\n value = ''\r\n } else if (Array.isArray(raw)) {\r\n value = raw.join(' ')\r\n } else {\r\n value = String(raw)\r\n }\r\n\r\n if (name === 'style') {\r\n if (!options.allowStyle) continue\r\n const safeStyle = sanitizeStyleValue(value)\r\n if (safeStyle === undefined) continue\r\n attrs.style = safeStyle\r\n continue\r\n }\r\n\r\n if (!isAllowedAttribute(tag, name)) continue\r\n\r\n if (URL_ATTRIBUTES.has(name)) {\r\n const safe = sanitizeUrlValue(value, name)\r\n if (safe === undefined) continue\r\n attrs[name] = safe\r\n continue\r\n }\r\n\r\n attrs[name] = value\r\n }\r\n\r\n return attrs\r\n}\r\n"],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { t as e } from "./objectSpread2-CtBNx0TF.js";
|
|
2
|
+
import { n as t, t as n } from "./hast-nodes-C0bX3M5Z.js";
|
|
3
|
+
// src/highlight/shared.ts
|
|
4
|
+
var r = 256, i = /* @__PURE__ */ new Map();
|
|
5
|
+
function a(e, t = "") {
|
|
6
|
+
return {
|
|
7
|
+
language: t,
|
|
8
|
+
nodes: [{
|
|
9
|
+
kind: "text",
|
|
10
|
+
key: "highlight-0",
|
|
11
|
+
value: e
|
|
12
|
+
}]
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
function o(e) {
|
|
16
|
+
return t(e);
|
|
17
|
+
}
|
|
18
|
+
function s(e) {
|
|
19
|
+
return n(e);
|
|
20
|
+
}
|
|
21
|
+
function c(e, t, n, r) {
|
|
22
|
+
var i, a;
|
|
23
|
+
return [
|
|
24
|
+
e.id,
|
|
25
|
+
n,
|
|
26
|
+
(i = r.theme) == null ? "" : i,
|
|
27
|
+
(a = r.colorScheme) == null ? "" : a,
|
|
28
|
+
JSON.stringify(r),
|
|
29
|
+
t
|
|
30
|
+
].join("");
|
|
31
|
+
}
|
|
32
|
+
function l() {
|
|
33
|
+
i.clear();
|
|
34
|
+
}
|
|
35
|
+
function u(e) {
|
|
36
|
+
if (!e || typeof e != "object") return !1;
|
|
37
|
+
let t = e;
|
|
38
|
+
return typeof t.language == "string" && Array.isArray(t.nodes);
|
|
39
|
+
}
|
|
40
|
+
function d(e, t, n, o = {}) {
|
|
41
|
+
if (!e) return a(t, n);
|
|
42
|
+
let s = c(e, t, n, o), l = i.get(s);
|
|
43
|
+
if (l) return l;
|
|
44
|
+
let d;
|
|
45
|
+
try {
|
|
46
|
+
let r = e.highlight(t, n, o);
|
|
47
|
+
d = u(r) ? r : a(t, n);
|
|
48
|
+
} catch (e) {
|
|
49
|
+
d = a(t, n);
|
|
50
|
+
}
|
|
51
|
+
if (i.set(s, d), i.size > r) {
|
|
52
|
+
let e = i.keys().next().value;
|
|
53
|
+
e !== void 0 && i.delete(e);
|
|
54
|
+
}
|
|
55
|
+
return d;
|
|
56
|
+
}
|
|
57
|
+
function f(t) {
|
|
58
|
+
let n = 0, r = () => `line-${n++}`, i = (t) => t.kind === "text" ? t.value.split("\n").map((e) => e === "" ? [] : [{
|
|
59
|
+
kind: "text",
|
|
60
|
+
key: r(),
|
|
61
|
+
value: e
|
|
62
|
+
}]) : !("children" in t) || !Array.isArray(t.children) ? [[t]] : a(t.children).map((n) => [e(e({}, t), {}, {
|
|
63
|
+
key: r(),
|
|
64
|
+
children: n
|
|
65
|
+
})]), a = (e) => {
|
|
66
|
+
let t = [[]];
|
|
67
|
+
for (let n of e) i(n).forEach((e, n) => {
|
|
68
|
+
n > 0 && t.push([]), t[t.length - 1].push(...e);
|
|
69
|
+
});
|
|
70
|
+
return t;
|
|
71
|
+
};
|
|
72
|
+
return a(t);
|
|
73
|
+
}
|
|
74
|
+
export { d as a, a as i, s as n, f as o, o as r, l as t };
|
|
75
|
+
|
|
76
|
+
//# sourceMappingURL=shared-DNAvZ-UY.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared-DNAvZ-UY.js","names":["_objectSpread2","htmlToMarkdownNodes","hastToMarkdownNodes","MAX_CACHE","cache","plaintextHighlight","code","highlightedNodesFromHtml","html","highlightedNodesFromHast","nodes","cacheKey","_options$theme","_options$colorScheme","highlighter","language","options","clearHighlightCache","isResult","value","result","runHighlighter","key","cached","_unused","oldest","splitHighlightLines","nextKey","splitNode","node","part","splitNodes","lines","list","index","line"],"sources":["../../src/highlight/shared.ts"],"sourcesContent":["import type {\r\n HighlightOptions,\r\n HighlightResult,\r\n MarkdownHighlighter,\r\n MarkdownNode,\r\n} from '../core/types'\r\nimport {\r\n hastToMarkdownNodes,\r\n htmlToMarkdownNodes,\r\n} from '../core/hast-nodes'\r\n\r\nconst MAX_CACHE = 256\r\nconst cache = new Map<string, HighlightResult>()\r\n\r\nexport function plaintextHighlight(\r\n code: string,\r\n language = '',\r\n): HighlightResult {\r\n return {\r\n language,\r\n nodes: [{ kind: 'text', key: 'highlight-0', value: code }],\r\n }\r\n}\r\n\r\n/** Convert trusted engine HTML into normalized nodes. */\r\nexport function highlightedNodesFromHtml(html: string): MarkdownNode[] {\r\n return htmlToMarkdownNodes(html)\r\n}\r\n\r\n/** Convert an already-parsed hast subtree into normalized nodes. */\r\nexport function highlightedNodesFromHast(\r\n nodes: Parameters<typeof hastToMarkdownNodes>[0],\r\n): MarkdownNode[] {\r\n return hastToMarkdownNodes(nodes)\r\n}\r\n\r\nexport function cacheKey(\r\n highlighter: MarkdownHighlighter,\r\n code: string,\r\n language: string,\r\n options: HighlightOptions,\r\n): string {\r\n return [\r\n highlighter.id,\r\n language,\r\n options.theme ?? '',\r\n options.colorScheme ?? '',\r\n JSON.stringify(options),\r\n code,\r\n ].join('\\u001e')\r\n}\r\n\r\nexport function clearHighlightCache(): void {\r\n cache.clear()\r\n}\r\n\r\nfunction isResult(value: unknown): value is HighlightResult {\r\n if (!value || typeof value !== 'object') return false\r\n const result = value as HighlightResult\r\n return typeof result.language === 'string' && Array.isArray(result.nodes)\r\n}\r\n\r\n/**\r\n * Run one adapter safely. Invalid adapters, thrown errors, and malformed\r\n * results fall back to plain text instead of breaking the document.\r\n */\r\nexport function runHighlighter(\r\n highlighter: MarkdownHighlighter | undefined,\r\n code: string,\r\n language: string,\r\n options: HighlightOptions = {},\r\n): HighlightResult {\r\n if (!highlighter) return plaintextHighlight(code, language)\r\n const key = cacheKey(highlighter, code, language, options)\r\n const cached = cache.get(key)\r\n if (cached) return cached\r\n\r\n let result: HighlightResult\r\n try {\r\n const value = highlighter.highlight(code, language, options)\r\n result = isResult(value) ? value : plaintextHighlight(code, language)\r\n } catch {\r\n result = plaintextHighlight(code, language)\r\n }\r\n\r\n cache.set(key, result)\r\n if (cache.size > MAX_CACHE) {\r\n const oldest = cache.keys().next().value\r\n if (oldest !== undefined) cache.delete(oldest)\r\n }\r\n return result\r\n}\r\n\r\n/** Split highlighted nodes into lines while preserving element wrappers. */\r\nexport function splitHighlightLines(\r\n nodes: readonly MarkdownNode[],\r\n): MarkdownNode[][] {\r\n let key = 0\r\n\r\n const nextKey = (): string => `line-${key++}`\r\n\r\n const splitNode = (node: MarkdownNode): MarkdownNode[][] => {\r\n if (node.kind === 'text') {\r\n return node.value.split('\\n').map((part) =>\r\n part === '' ? [] : [{ kind: 'text', key: nextKey(), value: part }],\r\n )\r\n }\r\n if (!('children' in node) || !Array.isArray(node.children)) {\r\n return [[node]]\r\n }\r\n return splitNodes(node.children).map((children) => [\r\n { ...node, key: nextKey(), children } as MarkdownNode,\r\n ])\r\n }\r\n\r\n const splitNodes = (list: readonly MarkdownNode[]): MarkdownNode[][] => {\r\n const lines: MarkdownNode[][] = [[]]\r\n for (const node of list) {\r\n const nodeLines = splitNode(node)\r\n nodeLines.forEach((line, index) => {\r\n if (index > 0) lines.push([])\r\n lines[lines.length - 1]!.push(...line)\r\n })\r\n }\r\n return lines\r\n }\r\n\r\n return splitNodes(nodes)\r\n}\r\n"],"mappings":";;;AAWA,IAAMG,IAAY,KACZC,oBAAQ,IAAI,IAA6B;AAE/C,SAAgBC,EACd,GACA,IAAW,IACM;CACjB,OAAO;EACL;EACA,OAAO,CAAC;GAAE,MAAM;GAAQ,KAAK;GAAe,OAAOC;EAAK,CAAC;CAC3D;AACF;AAGA,SAAgBC,EAAyB,GAA8B;CACrE,OAAON,EAAoBO,CAAI;AACjC;AAGA,SAAgBC,EACd,GACgB;CAChB,OAAOP,EAAoBQ,CAAK;AAClC;AAEA,SAAgBC,EACd,GACA,GACA,GACA,GACQ;;CACR,OAAO;EACLG,EAAY;EACZC;GACA,IAAAC,EAAQ,UAAA,OAAS,KAATJ;GACR,IAAAI,EAAQ,gBAAA,OAAe,KAAfH;EACR,KAAK,UAAUG,CAAO;EACtBV;CACF,CAAC,CAAC,KAAK,GAAQ;AACjB;AAEA,SAAgBW,IAA4B;CAC1C,EAAM,MAAM;AACd;AAEA,SAASC,EAAS,GAA0C;CAC1D,IAAI,CAACC,KAAS,OAAOA,KAAU,UAAU,OAAO;CAChD,IAAMC,IAASD;CACf,OAAO,OAAOC,EAAO,YAAa,YAAY,MAAM,QAAQA,EAAO,KAAK;AAC1E;AAMA,SAAgBC,EACd,GACA,GACA,GACA,IAA4B,CAAC,GACZ;CACjB,IAAI,CAACP,GAAa,OAAOT,EAAmBC,GAAMS,CAAQ;CAC1D,IAAMO,IAAMX,EAASG,GAAaR,GAAMS,GAAUC,CAAO,GACnDO,IAASnB,EAAM,IAAIkB,CAAG;CAC5B,IAAIC,GAAQ,OAAOA;CAEnB,IAAIH;CACJ,IAAI;EACF,IAAMD,IAAQL,EAAY,UAAUR,GAAMS,GAAUC,CAAO;EAC3D,IAASE,EAASC,CAAK,IAAIA,IAAQd,EAAmBC,GAAMS,CAAQ;CACtE,SAAAS,GAAQ;EACN,IAASnB,EAAmBC,GAAMS,CAAQ;CAC5C;CAGA,IADAX,EAAM,IAAIkB,GAAKF,CAAM,GACjBhB,EAAM,OAAOD,GAAW;EAC1B,IAAMsB,IAASrB,EAAM,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;EACnC,AAAIqB,MAAW,KAAA,KAAWrB,EAAM,OAAOqB,CAAM;CAC/C;CACA,OAAOL;AACT;AAGA,SAAgBM,EACd,GACkB;CAClB,IAAIJ,IAAM,GAEJK,UAAwB,QAAQ,OAEhCC,KAAa,MACbC,EAAK,SAAS,SACTA,EAAK,MAAM,MAAM,IAAI,CAAC,CAAC,KAAK,MACjCC,MAAS,KAAK,CAAC,IAAI,CAAC;EAAE,MAAM;EAAQ,KAAKH,EAAQ;EAAG,OAAOG;CAAK,CAAC,CACnE,IAEE,EAAE,cAAcD,MAAS,CAAC,MAAM,QAAQA,EAAK,QAAQ,IAChD,CAAC,CAACA,CAAI,CAAC,IAETE,EAAWF,EAAK,QAAQ,CAAC,CAAC,KAAK,MAAa,CAAA7B,EAAAA,EAAA,CAAA,GAC5C6B,CAAA,GAAA,CAAA,GAAA;EAAM,KAAKF,EAAQ;EAAG;CAAS,CAAA,CACtC,CAAC,GAGGI,KAAc,MAAoD;EACtE,IAAMC,IAA0B,CAAC,CAAC,CAAC;EACnC,KAAK,IAAMH,KAAQI,GAEjB,EAD4BJ,CAC5B,CAAA,CAAU,SAAS,GAAM,MAAU;GAEjC,AADIK,IAAQ,KAAGF,EAAM,KAAK,CAAC,CAAC,GAC5BA,EAAMA,EAAM,SAAS,EAAE,CAAE,KAAK,GAAGG,CAAI;EACvC,CAAC;EAEH,OAAOH;CACT;CAEA,OAAOD,EAAWrB,CAAK;AACzB"}
|