stream-markdown-parser 0.0.90 → 0.0.91
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +8 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +276 -17
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -405,21 +405,25 @@ declare function stripCustomHtmlWrapper(html: unknown, tag: string): string;
|
|
|
405
405
|
declare function findMatchingClose(src: string, startIdx: number, open: string, close: string): number;
|
|
406
406
|
//#endregion
|
|
407
407
|
//#region src/htmlRenderUtils.d.ts
|
|
408
|
+
type HtmlPolicy = 'escape' | 'safe' | 'trusted';
|
|
408
409
|
interface HtmlToken {
|
|
409
410
|
type: 'text' | 'tag_open' | 'tag_close' | 'self_closing';
|
|
410
411
|
tagName?: string;
|
|
411
412
|
attrs?: Record<string, string>;
|
|
412
413
|
content?: string;
|
|
413
414
|
}
|
|
415
|
+
declare const SAFE_ALLOWED_HTML_TAGS: Set<string>;
|
|
416
|
+
declare function isHtmlTagBlocked(tagName: string | undefined, policy?: HtmlPolicy): boolean;
|
|
417
|
+
declare function isHtmlTagHardBlocked(tagName: string | undefined, policy?: HtmlPolicy): boolean;
|
|
414
418
|
declare function isCustomHtmlComponentTag(tagName: string, customComponents: Record<string, unknown>): boolean;
|
|
415
|
-
declare function sanitizeHtmlAttrs(attrs: Record<string, string
|
|
419
|
+
declare function sanitizeHtmlAttrs(attrs: Record<string, string>, policy?: HtmlPolicy, tagName?: string): Record<string, string>;
|
|
416
420
|
declare function tokenAttrsToRecord(attrs?: Array<[string, string | null]> | null): Record<string, string>;
|
|
417
|
-
declare function sanitizeHtmlTokenAttrs(attrs?: Array<[string, string | null]> | null): [string, string][] | undefined;
|
|
421
|
+
declare function sanitizeHtmlTokenAttrs(attrs?: Array<[string, string | null]> | null, policy?: HtmlPolicy, tagName?: string): [string, string][] | undefined;
|
|
418
422
|
declare function convertHtmlPropValue(value: string, key: string): any;
|
|
419
423
|
declare function convertHtmlAttrsToProps(attrs: Record<string, string>): Record<string, any>;
|
|
420
424
|
declare function tokenizeHtml(html: string): HtmlToken[];
|
|
421
425
|
declare function hasCustomHtmlComponents(content: string, customComponents: Record<string, unknown>): boolean;
|
|
422
|
-
declare function sanitizeHtmlContent(content: string): string;
|
|
426
|
+
declare function sanitizeHtmlContent(content: string, policy?: HtmlPolicy): string;
|
|
423
427
|
//#endregion
|
|
424
428
|
//#region src/htmlTags.d.ts
|
|
425
429
|
declare const VOID_HTML_TAG_NAMES: readonly ["area", "base", "br", "col", "embed", "hr", "img", "input", "link", "meta", "param", "source", "track", "wbr"];
|
|
@@ -472,5 +476,5 @@ interface GetMarkdownOptions extends FactoryOptions {
|
|
|
472
476
|
}
|
|
473
477
|
declare function getMarkdown(msgId?: string, options?: GetMarkdownOptions): MarkdownIt;
|
|
474
478
|
//#endregion
|
|
475
|
-
export { AdmonitionNode, BLOCKED_HTML_TAGS, BLOCKED_HTML_TAG_NAMES, BLOCK_HTML_TAG_NAMES, BaseNode, BlockquoteNode, CheckboxInputNode, CheckboxNode, CodeBlockNode, CustomComponentAttrs, CustomComponentNode, CustomComponents, DANGEROUS_HTML_ATTRS, DANGEROUS_HTML_ATTR_NAMES, DefinitionItemNode, DefinitionListNode, ESCAPED_TEX_BRACE_COMMANDS, EXTENDED_STANDARD_HTML_TAGS, EXTENDED_STANDARD_HTML_TAG_NAMES, EmojiNode, EmphasisNode, FootnoteAnchorNode, FootnoteNode, FootnoteReferenceNode, GetMarkdownOptions, HardBreakNode, HeadingNode, HighlightNode, HtmlBlockNode, HtmlInlineNode, HtmlToken, INLINE_HTML_TAG_NAMES, ImageNode, InlineCodeNode, InlineNode, InsertNode, KATEX_COMMANDS, LinkNode, ListItemNode, ListNode, type MarkdownIt, MarkdownRender, MarkdownToken, MarkdownTokenLite, MathBlockNode, MathInlineNode, type MathOptions, MermaidBlockNode, NON_STRUCTURING_HTML_TAGS, NON_STRUCTURING_HTML_TAG_NAMES, ParagraphNode, ParseOptions, ParsedNode, PostTransformNodesHook, ReferenceNode, STANDARD_BLOCK_HTML_TAGS, STANDARD_HTML_TAGS, SVG_HTML_TAG_NAMES, StrikethroughNode, StrongNode, SubscriptNode, SuperscriptNode, TEX_BRACE_COMMANDS, TableCellNode, TableNode, TableRowNode, TextNode, ThematicBreakNode, TransformTokensHook, URL_HTML_ATTRS, URL_HTML_ATTR_NAMES, UnknownNode, VOID_HTML_TAGS, VOID_HTML_TAG_NAMES, VmrContainerNode, applyContainers, applyMath, clearRegisteredMarkdownPlugins, convertHtmlAttrsToProps, convertHtmlPropValue, findMatchingClose, getHtmlTagFromContent, getMarkdown, hasCompleteHtmlTagContent, hasCustomHtmlComponents, isCustomHtmlComponentTag, isHtmlLikeTagName, isMathLike, isUnsafeHtmlUrl, mergeCustomHtmlTags, normalizeCustomHtmlTagName, normalizeCustomHtmlTags, normalizeStandaloneBackslashT, parseFenceToken, parseInlineTokens, parseMarkdownToStructure, processTokens, registerMarkdownPlugin, resolveCustomHtmlTags, sanitizeHtmlAttrs, sanitizeHtmlContent, sanitizeHtmlTokenAttrs, setDefaultMathOptions, shouldRenderUnknownHtmlTagAsText, stripCustomHtmlWrapper, stripHtmlControlAndWhitespace, tokenAttrsToRecord, tokenizeHtml };
|
|
479
|
+
export { AdmonitionNode, BLOCKED_HTML_TAGS, BLOCKED_HTML_TAG_NAMES, BLOCK_HTML_TAG_NAMES, BaseNode, BlockquoteNode, CheckboxInputNode, CheckboxNode, CodeBlockNode, CustomComponentAttrs, CustomComponentNode, CustomComponents, DANGEROUS_HTML_ATTRS, DANGEROUS_HTML_ATTR_NAMES, DefinitionItemNode, DefinitionListNode, ESCAPED_TEX_BRACE_COMMANDS, EXTENDED_STANDARD_HTML_TAGS, EXTENDED_STANDARD_HTML_TAG_NAMES, EmojiNode, EmphasisNode, FootnoteAnchorNode, FootnoteNode, FootnoteReferenceNode, GetMarkdownOptions, HardBreakNode, HeadingNode, HighlightNode, HtmlBlockNode, HtmlInlineNode, HtmlPolicy, HtmlToken, INLINE_HTML_TAG_NAMES, ImageNode, InlineCodeNode, InlineNode, InsertNode, KATEX_COMMANDS, LinkNode, ListItemNode, ListNode, type MarkdownIt, MarkdownRender, MarkdownToken, MarkdownTokenLite, MathBlockNode, MathInlineNode, type MathOptions, MermaidBlockNode, NON_STRUCTURING_HTML_TAGS, NON_STRUCTURING_HTML_TAG_NAMES, ParagraphNode, ParseOptions, ParsedNode, PostTransformNodesHook, ReferenceNode, SAFE_ALLOWED_HTML_TAGS, STANDARD_BLOCK_HTML_TAGS, STANDARD_HTML_TAGS, SVG_HTML_TAG_NAMES, StrikethroughNode, StrongNode, SubscriptNode, SuperscriptNode, TEX_BRACE_COMMANDS, TableCellNode, TableNode, TableRowNode, TextNode, ThematicBreakNode, TransformTokensHook, URL_HTML_ATTRS, URL_HTML_ATTR_NAMES, UnknownNode, VOID_HTML_TAGS, VOID_HTML_TAG_NAMES, VmrContainerNode, applyContainers, applyMath, clearRegisteredMarkdownPlugins, convertHtmlAttrsToProps, convertHtmlPropValue, findMatchingClose, getHtmlTagFromContent, getMarkdown, hasCompleteHtmlTagContent, hasCustomHtmlComponents, isCustomHtmlComponentTag, isHtmlLikeTagName, isHtmlTagBlocked, isHtmlTagHardBlocked, isMathLike, isUnsafeHtmlUrl, mergeCustomHtmlTags, normalizeCustomHtmlTagName, normalizeCustomHtmlTags, normalizeStandaloneBackslashT, parseFenceToken, parseInlineTokens, parseMarkdownToStructure, processTokens, registerMarkdownPlugin, resolveCustomHtmlTags, sanitizeHtmlAttrs, sanitizeHtmlContent, sanitizeHtmlTokenAttrs, setDefaultMathOptions, shouldRenderUnknownHtmlTagAsText, stripCustomHtmlWrapper, stripHtmlControlAndWhitespace, tokenAttrsToRecord, tokenizeHtml };
|
|
476
480
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/factory.ts","../src/types.ts","../src/parser/inline-parsers/index.ts","../src/parser/index.ts","../src/config.ts","../src/customHtmlTags.ts","../src/findMatchingClose.ts","../src/htmlRenderUtils.ts","../src/htmlTags.ts","../src/parser/inline-parsers/fence-parser.ts","../src/plugins/containers.ts","../src/plugins/isMathLike.ts","../src/plugins/math.ts","../src/index.ts"],"sourcesContent":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/factory.ts","../src/types.ts","../src/parser/inline-parsers/index.ts","../src/parser/index.ts","../src/config.ts","../src/customHtmlTags.ts","../src/findMatchingClose.ts","../src/htmlRenderUtils.ts","../src/htmlTags.ts","../src/parser/inline-parsers/fence-parser.ts","../src/plugins/containers.ts","../src/plugins/isMathLike.ts","../src/plugins/math.ts","../src/index.ts"],"sourcesContent":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -10503,6 +10503,124 @@ function applyFixIndentedCodeBlock(md, options = {}) {
|
|
|
10503
10503
|
});
|
|
10504
10504
|
}
|
|
10505
10505
|
|
|
10506
|
+
//#endregion
|
|
10507
|
+
//#region src/parser/linkifyHeuristics.ts
|
|
10508
|
+
const FILENAMEISH_EXTENSION_RE = /\.([a-z0-9]{1,10})$/i;
|
|
10509
|
+
const FILENAMEISH_SEGMENT_RE = /[_()[\]{}<>]/u;
|
|
10510
|
+
const URL_PREFIX_HINT_RE = /^(?:https?:\/\/|ftp:\/\/|mailto:|www\.)/i;
|
|
10511
|
+
const URL_QUERY_OR_AUTH_HINT_RE = /[?#@]/u;
|
|
10512
|
+
const PATH_SEPARATOR_RE = /[\\/]/u;
|
|
10513
|
+
const DOMAINISH_TEXT_RE = /^[\p{L}\p{N}./\\-]+$/u;
|
|
10514
|
+
const DOMAIN_LABEL_RE = /^[A-Za-z0-9-]{1,63}$/u;
|
|
10515
|
+
const PUNYCODE_TLD_RE = /^xn--[a-z0-9-]{2,59}$/i;
|
|
10516
|
+
const AMBIGUOUS_BARE_DOMAIN_EXTENSIONS = new Set([
|
|
10517
|
+
"ai",
|
|
10518
|
+
"md",
|
|
10519
|
+
"py",
|
|
10520
|
+
"rs",
|
|
10521
|
+
"sh",
|
|
10522
|
+
"zip"
|
|
10523
|
+
]);
|
|
10524
|
+
const FILENAMEISH_LINK_EXTENSIONS = new Set([
|
|
10525
|
+
"7z",
|
|
10526
|
+
"ai",
|
|
10527
|
+
"astro",
|
|
10528
|
+
"avi",
|
|
10529
|
+
"bash",
|
|
10530
|
+
"bz2",
|
|
10531
|
+
"c",
|
|
10532
|
+
"cjs",
|
|
10533
|
+
"cpp",
|
|
10534
|
+
"cs",
|
|
10535
|
+
"csv",
|
|
10536
|
+
"doc",
|
|
10537
|
+
"docx",
|
|
10538
|
+
"fish",
|
|
10539
|
+
"flac",
|
|
10540
|
+
"gif",
|
|
10541
|
+
"go",
|
|
10542
|
+
"gz",
|
|
10543
|
+
"h",
|
|
10544
|
+
"hpp",
|
|
10545
|
+
"html",
|
|
10546
|
+
"java",
|
|
10547
|
+
"jpeg",
|
|
10548
|
+
"jpg",
|
|
10549
|
+
"js",
|
|
10550
|
+
"json",
|
|
10551
|
+
"jsx",
|
|
10552
|
+
"kt",
|
|
10553
|
+
"md",
|
|
10554
|
+
"mdx",
|
|
10555
|
+
"mjs",
|
|
10556
|
+
"mov",
|
|
10557
|
+
"mp3",
|
|
10558
|
+
"mp4",
|
|
10559
|
+
"pdf",
|
|
10560
|
+
"php",
|
|
10561
|
+
"png",
|
|
10562
|
+
"ppt",
|
|
10563
|
+
"pptx",
|
|
10564
|
+
"ps1",
|
|
10565
|
+
"py",
|
|
10566
|
+
"rar",
|
|
10567
|
+
"rb",
|
|
10568
|
+
"rs",
|
|
10569
|
+
"sh",
|
|
10570
|
+
"sql",
|
|
10571
|
+
"svg",
|
|
10572
|
+
"swift",
|
|
10573
|
+
"svelte",
|
|
10574
|
+
"tar",
|
|
10575
|
+
"tgz",
|
|
10576
|
+
"toml",
|
|
10577
|
+
"ts",
|
|
10578
|
+
"tsx",
|
|
10579
|
+
"txt",
|
|
10580
|
+
"vue",
|
|
10581
|
+
"wav",
|
|
10582
|
+
"webp",
|
|
10583
|
+
"xls",
|
|
10584
|
+
"xlsx",
|
|
10585
|
+
"xml",
|
|
10586
|
+
"yaml",
|
|
10587
|
+
"yml",
|
|
10588
|
+
"zip",
|
|
10589
|
+
"zsh"
|
|
10590
|
+
]);
|
|
10591
|
+
function isValidDomainLabel(label) {
|
|
10592
|
+
return DOMAIN_LABEL_RE.test(label) && !label.startsWith("-") && !label.endsWith("-");
|
|
10593
|
+
}
|
|
10594
|
+
function isPlausibleBareDomain(text$1) {
|
|
10595
|
+
const labels = text$1.split(".");
|
|
10596
|
+
if (labels.length < 2) return false;
|
|
10597
|
+
const tld = labels[labels.length - 1]?.toLowerCase() ?? "";
|
|
10598
|
+
if (!(isValidDomainLabel(tld) || PUNYCODE_TLD_RE.test(tld))) return false;
|
|
10599
|
+
return labels.every(isValidDomainLabel);
|
|
10600
|
+
}
|
|
10601
|
+
function hasDomainAuthorityPrefix(text$1) {
|
|
10602
|
+
return isPlausibleBareDomain(text$1.split(/[\\/]/)[0] ?? "");
|
|
10603
|
+
}
|
|
10604
|
+
function isUppercaseFilenameSegment(segment) {
|
|
10605
|
+
const lettersOnly = segment.replace(/[^a-z]/gi, "");
|
|
10606
|
+
return lettersOnly.length >= 2 && lettersOnly === lettersOnly.toUpperCase();
|
|
10607
|
+
}
|
|
10608
|
+
function hasStrongFilenameSignals(linkText) {
|
|
10609
|
+
if (FILENAMEISH_SEGMENT_RE.test(linkText)) return true;
|
|
10610
|
+
if (!DOMAINISH_TEXT_RE.test(linkText)) return true;
|
|
10611
|
+
if (PATH_SEPARATOR_RE.test(linkText)) return !hasDomainAuthorityPrefix(linkText);
|
|
10612
|
+
return linkText.replace(FILENAMEISH_EXTENSION_RE, "").split(".").filter(Boolean).some(isUppercaseFilenameSegment);
|
|
10613
|
+
}
|
|
10614
|
+
function shouldDemoteFilenameLikeLinkify(linkText) {
|
|
10615
|
+
if (!linkText || URL_PREFIX_HINT_RE.test(linkText) || URL_QUERY_OR_AUTH_HINT_RE.test(linkText)) return false;
|
|
10616
|
+
const extensionMatch = linkText.match(FILENAMEISH_EXTENSION_RE);
|
|
10617
|
+
if (!extensionMatch) return false;
|
|
10618
|
+
const extension = String(extensionMatch[1] ?? "").toLowerCase();
|
|
10619
|
+
if (!FILENAMEISH_LINK_EXTENSIONS.has(extension)) return false;
|
|
10620
|
+
if (!AMBIGUOUS_BARE_DOMAIN_EXTENSIONS.has(extension)) return true;
|
|
10621
|
+
return hasStrongFilenameSignals(linkText);
|
|
10622
|
+
}
|
|
10623
|
+
|
|
10506
10624
|
//#endregion
|
|
10507
10625
|
//#region src/plugins/fixLinkTokens.ts
|
|
10508
10626
|
const LINKIFY_HARD_STOP_CHARS = ["!"];
|
|
@@ -10614,6 +10732,15 @@ function setHrefOnLinkOpen(token, href) {
|
|
|
10614
10732
|
if (idx >= 0) token.attrs[idx][1] = href;
|
|
10615
10733
|
else token.attrs.push(["href", href]);
|
|
10616
10734
|
}
|
|
10735
|
+
function collectLinkifyText(tokens, openIndex, closeIndex) {
|
|
10736
|
+
let text$1 = "";
|
|
10737
|
+
for (let index = openIndex + 1; index < closeIndex; index++) {
|
|
10738
|
+
const token = tokens[index];
|
|
10739
|
+
if (token?.type !== "text" || typeof token.content !== "string") return null;
|
|
10740
|
+
text$1 += token.content;
|
|
10741
|
+
}
|
|
10742
|
+
return text$1 || null;
|
|
10743
|
+
}
|
|
10617
10744
|
function applyFixLinkTokens(md) {
|
|
10618
10745
|
md.core.ruler.after("inline", "fix_link_tokens", (state) => {
|
|
10619
10746
|
const toks = state.tokens ?? [];
|
|
@@ -10641,6 +10768,11 @@ function fixLinkToken(tokens) {
|
|
|
10641
10768
|
break;
|
|
10642
10769
|
}
|
|
10643
10770
|
if (closeIdx !== -1) {
|
|
10771
|
+
const linkText = collectLinkifyText(tokens, i, closeIdx);
|
|
10772
|
+
if (curToken.markup === "linkify" && linkText && shouldDemoteFilenameLikeLinkify(linkText)) {
|
|
10773
|
+
tokens.splice(i, closeIdx - i + 1, textToken(linkText));
|
|
10774
|
+
continue;
|
|
10775
|
+
}
|
|
10644
10776
|
const href = getHrefFromLinkOpen(curToken);
|
|
10645
10777
|
const hrefStop = firstIndexOfAny(href, LINKIFY_HARD_STOP_CHARS);
|
|
10646
10778
|
for (let j = i + 1; j < closeIdx; j++) {
|
|
@@ -14067,6 +14199,10 @@ function parseInlineTokens(tokens, raw, pPreToken, options) {
|
|
|
14067
14199
|
resetCurrentTextNode();
|
|
14068
14200
|
const { node, nextIndex } = parseLinkToken(tokens, i, options);
|
|
14069
14201
|
i = nextIndex;
|
|
14202
|
+
if (token.markup === "linkify" && shouldDemoteFilenameLikeLinkify(node.text || node.href || "")) {
|
|
14203
|
+
pushText(node.text || node.href || "", node.text || node.href || "");
|
|
14204
|
+
return;
|
|
14205
|
+
}
|
|
14070
14206
|
const hasSingleTextChild = node.children.length === 1 && node.children[0]?.type === "text";
|
|
14071
14207
|
if (node.loading && raw && node.text === node.href && hasSingleTextChild) {
|
|
14072
14208
|
const recoveredLabel = recoverTrailingMarkdownLinkLabel(raw, node.href);
|
|
@@ -16743,6 +16879,79 @@ function processTokens(tokens, options) {
|
|
|
16743
16879
|
|
|
16744
16880
|
//#endregion
|
|
16745
16881
|
//#region src/htmlRenderUtils.ts
|
|
16882
|
+
const SAFE_BLOCKED_HTML_TAGS = new Set([
|
|
16883
|
+
...BLOCKED_HTML_TAGS,
|
|
16884
|
+
"base",
|
|
16885
|
+
"button",
|
|
16886
|
+
"datalist",
|
|
16887
|
+
"dialog",
|
|
16888
|
+
"embed",
|
|
16889
|
+
"fieldset",
|
|
16890
|
+
"form",
|
|
16891
|
+
"iframe",
|
|
16892
|
+
"input",
|
|
16893
|
+
"legend",
|
|
16894
|
+
"link",
|
|
16895
|
+
"meta",
|
|
16896
|
+
"object",
|
|
16897
|
+
"optgroup",
|
|
16898
|
+
"option",
|
|
16899
|
+
"output",
|
|
16900
|
+
"param",
|
|
16901
|
+
"select",
|
|
16902
|
+
"style",
|
|
16903
|
+
"template",
|
|
16904
|
+
"textarea",
|
|
16905
|
+
"title"
|
|
16906
|
+
]);
|
|
16907
|
+
const SAFE_ALLOWED_HTML_TAGS = new Set([
|
|
16908
|
+
"a",
|
|
16909
|
+
"abbr",
|
|
16910
|
+
"b",
|
|
16911
|
+
"blockquote",
|
|
16912
|
+
"br",
|
|
16913
|
+
"caption",
|
|
16914
|
+
"code",
|
|
16915
|
+
"col",
|
|
16916
|
+
"colgroup",
|
|
16917
|
+
"dd",
|
|
16918
|
+
"details",
|
|
16919
|
+
"div",
|
|
16920
|
+
"dl",
|
|
16921
|
+
"dt",
|
|
16922
|
+
"em",
|
|
16923
|
+
"h1",
|
|
16924
|
+
"h2",
|
|
16925
|
+
"h3",
|
|
16926
|
+
"h4",
|
|
16927
|
+
"h5",
|
|
16928
|
+
"h6",
|
|
16929
|
+
"hr",
|
|
16930
|
+
"i",
|
|
16931
|
+
"img",
|
|
16932
|
+
"ins",
|
|
16933
|
+
"kbd",
|
|
16934
|
+
"li",
|
|
16935
|
+
"mark",
|
|
16936
|
+
"ol",
|
|
16937
|
+
"p",
|
|
16938
|
+
"pre",
|
|
16939
|
+
"s",
|
|
16940
|
+
"small",
|
|
16941
|
+
"span",
|
|
16942
|
+
"strong",
|
|
16943
|
+
"sub",
|
|
16944
|
+
"summary",
|
|
16945
|
+
"sup",
|
|
16946
|
+
"table",
|
|
16947
|
+
"tbody",
|
|
16948
|
+
"td",
|
|
16949
|
+
"tfoot",
|
|
16950
|
+
"th",
|
|
16951
|
+
"thead",
|
|
16952
|
+
"tr",
|
|
16953
|
+
"ul"
|
|
16954
|
+
]);
|
|
16746
16955
|
const CUSTOM_TAG_REGEX = /<([a-z][a-z0-9-]*)\b[^>]*>/gi;
|
|
16747
16956
|
function hasOwn(obj, key) {
|
|
16748
16957
|
return Object.prototype.hasOwnProperty.call(obj, key);
|
|
@@ -16762,37 +16971,75 @@ function escapeAttr(value) {
|
|
|
16762
16971
|
function normalizeTagName(tagName) {
|
|
16763
16972
|
return String(tagName ?? "").trim().toLowerCase();
|
|
16764
16973
|
}
|
|
16974
|
+
function isHtmlTagBlocked(tagName, policy = "safe") {
|
|
16975
|
+
const normalized = normalizeTagName(tagName);
|
|
16976
|
+
if (!normalized) return false;
|
|
16977
|
+
if (policy === "escape") return true;
|
|
16978
|
+
if (policy === "trusted") return BLOCKED_HTML_TAGS.has(normalized);
|
|
16979
|
+
return !SAFE_ALLOWED_HTML_TAGS.has(normalized);
|
|
16980
|
+
}
|
|
16981
|
+
function isHtmlTagHardBlocked(tagName, policy = "safe") {
|
|
16982
|
+
const normalized = normalizeTagName(tagName);
|
|
16983
|
+
if (!normalized) return false;
|
|
16984
|
+
if (policy === "escape") return true;
|
|
16985
|
+
if (policy === "trusted") return BLOCKED_HTML_TAGS.has(normalized);
|
|
16986
|
+
return SAFE_BLOCKED_HTML_TAGS.has(normalized);
|
|
16987
|
+
}
|
|
16765
16988
|
function serializeAttrs(attrs) {
|
|
16766
16989
|
const pairs = Object.entries(attrs);
|
|
16767
16990
|
if (pairs.length === 0) return "";
|
|
16768
16991
|
return pairs.map(([name, value]) => value === "" ? ` ${name}` : ` ${name}="${escapeAttr(value)}"`).join("");
|
|
16769
16992
|
}
|
|
16770
|
-
function
|
|
16993
|
+
function isUnsafeSrcset(value) {
|
|
16994
|
+
const candidates = value.split(",").map((candidate) => candidate.trim()).filter(Boolean);
|
|
16995
|
+
if (candidates.length === 0) return false;
|
|
16996
|
+
return candidates.some((candidate) => {
|
|
16997
|
+
const url = candidate.split(/\s+/, 1)[0] ?? "";
|
|
16998
|
+
return !url || isUnsafeHtmlUrl(url);
|
|
16999
|
+
});
|
|
17000
|
+
}
|
|
17001
|
+
function shouldDropHtmlAttr(lowerKey, value, policy) {
|
|
17002
|
+
if (DANGEROUS_HTML_ATTRS.has(lowerKey)) return true;
|
|
17003
|
+
if (policy === "safe" && lowerKey === "style") return true;
|
|
17004
|
+
if (lowerKey === "srcset") return isUnsafeSrcset(value);
|
|
17005
|
+
if (URL_HTML_ATTRS.has(lowerKey) && value && isUnsafeHtmlUrl(value)) return true;
|
|
17006
|
+
return false;
|
|
17007
|
+
}
|
|
17008
|
+
function hardenAnchorAttrs(clean, policy, tagName) {
|
|
17009
|
+
if (policy !== "safe" || normalizeTagName(tagName) !== "a") return clean;
|
|
17010
|
+
if (String(clean.target ?? "").trim().toLowerCase() !== "_blank") return clean;
|
|
17011
|
+
const relTokens = new Set(String(clean.rel ?? "").split(/\s+/).map((token) => token.trim()).filter(Boolean).filter((token) => token.toLowerCase() !== "opener"));
|
|
17012
|
+
relTokens.add("noopener");
|
|
17013
|
+
relTokens.add("noreferrer");
|
|
17014
|
+
clean.rel = Array.from(relTokens).join(" ");
|
|
17015
|
+
return clean;
|
|
17016
|
+
}
|
|
17017
|
+
function sanitizeHtmlContentAttrs(attrs, policy = "safe", tagName) {
|
|
16771
17018
|
const clean = {};
|
|
16772
17019
|
for (const [key, value] of Object.entries(attrs)) {
|
|
16773
17020
|
const safeName = key.trim();
|
|
16774
17021
|
const lowerKey = safeName.toLowerCase();
|
|
16775
17022
|
if (!safeName || !isSafeAttrName(safeName)) continue;
|
|
16776
|
-
if (
|
|
16777
|
-
if (URL_HTML_ATTRS.has(lowerKey) && value && isUnsafeHtmlUrl(value)) continue;
|
|
17023
|
+
if (shouldDropHtmlAttr(lowerKey, value, policy)) continue;
|
|
16778
17024
|
clean[safeName] = value;
|
|
16779
17025
|
}
|
|
16780
|
-
return clean;
|
|
17026
|
+
return hardenAnchorAttrs(clean, policy, tagName);
|
|
16781
17027
|
}
|
|
16782
17028
|
function isCustomHtmlComponentTag(tagName, customComponents) {
|
|
16783
17029
|
const lowerTag = tagName.toLowerCase();
|
|
16784
17030
|
if (EXTENDED_STANDARD_HTML_TAGS.has(lowerTag)) return false;
|
|
16785
17031
|
return hasOwn(customComponents, lowerTag) || hasOwn(customComponents, tagName);
|
|
16786
17032
|
}
|
|
16787
|
-
function sanitizeHtmlAttrs(attrs) {
|
|
17033
|
+
function sanitizeHtmlAttrs(attrs, policy = "safe", tagName) {
|
|
16788
17034
|
const clean = {};
|
|
16789
17035
|
for (const [key, value] of Object.entries(attrs)) {
|
|
16790
|
-
const
|
|
16791
|
-
|
|
16792
|
-
if (
|
|
16793
|
-
|
|
17036
|
+
const safeName = key.trim();
|
|
17037
|
+
const lowerKey = safeName.toLowerCase();
|
|
17038
|
+
if (!safeName || !isSafeAttrName(safeName)) continue;
|
|
17039
|
+
if (shouldDropHtmlAttr(lowerKey, value, policy)) continue;
|
|
17040
|
+
clean[safeName] = value;
|
|
16794
17041
|
}
|
|
16795
|
-
return clean;
|
|
17042
|
+
return hardenAnchorAttrs(clean, policy, tagName);
|
|
16796
17043
|
}
|
|
16797
17044
|
function tokenAttrsToRecord(attrs) {
|
|
16798
17045
|
const record = {};
|
|
@@ -16803,8 +17050,8 @@ function tokenAttrsToRecord(attrs) {
|
|
|
16803
17050
|
}
|
|
16804
17051
|
return record;
|
|
16805
17052
|
}
|
|
16806
|
-
function sanitizeHtmlTokenAttrs(attrs) {
|
|
16807
|
-
const sanitized = sanitizeHtmlAttrs(tokenAttrsToRecord(attrs));
|
|
17053
|
+
function sanitizeHtmlTokenAttrs(attrs, policy = "safe", tagName) {
|
|
17054
|
+
const sanitized = sanitizeHtmlAttrs(tokenAttrsToRecord(attrs), policy, tagName);
|
|
16808
17055
|
const pairs = Object.entries(sanitized).map(([key, value]) => [key, value]);
|
|
16809
17056
|
return pairs.length > 0 ? pairs : void 0;
|
|
16810
17057
|
}
|
|
@@ -17021,6 +17268,13 @@ function tokenizeHtmlPreservingText(html) {
|
|
|
17021
17268
|
}
|
|
17022
17269
|
return tokens;
|
|
17023
17270
|
}
|
|
17271
|
+
function serializeLiteralHtmlTag(token) {
|
|
17272
|
+
const tagName = String(token.tagName ?? "").trim();
|
|
17273
|
+
if (!tagName) return "";
|
|
17274
|
+
if (token.type === "tag_close") return `</${escapeHtml(tagName)}>`;
|
|
17275
|
+
const attrs = Object.entries(token.attrs ?? {}).map(([name, value]) => value === "" ? ` ${escapeHtml(name)}` : ` ${escapeHtml(name)}="${escapeAttr(value)}"`).join("");
|
|
17276
|
+
return token.type === "self_closing" ? `<${escapeHtml(tagName)}${attrs} />` : `<${escapeHtml(tagName)}${attrs}>`;
|
|
17277
|
+
}
|
|
17024
17278
|
function hasCustomHtmlComponents(content, customComponents) {
|
|
17025
17279
|
if (!content || !content.includes("<")) return false;
|
|
17026
17280
|
if (!customComponents || Object.keys(customComponents).length === 0) return false;
|
|
@@ -17029,8 +17283,9 @@ function hasCustomHtmlComponents(content, customComponents) {
|
|
|
17029
17283
|
while ((match = CUSTOM_TAG_REGEX.exec(content)) !== null) if (isCustomHtmlComponentTag(match[1], customComponents)) return true;
|
|
17030
17284
|
return false;
|
|
17031
17285
|
}
|
|
17032
|
-
function sanitizeHtmlContent(content) {
|
|
17286
|
+
function sanitizeHtmlContent(content, policy = "safe") {
|
|
17033
17287
|
if (!content) return "";
|
|
17288
|
+
if (policy === "escape") return escapeHtml(content);
|
|
17034
17289
|
const tokens = tokenizeHtmlPreservingText(content);
|
|
17035
17290
|
const stack = [];
|
|
17036
17291
|
const output = [];
|
|
@@ -17042,18 +17297,22 @@ function sanitizeHtmlContent(content) {
|
|
|
17042
17297
|
}
|
|
17043
17298
|
const tagName = normalizeTagName(token.tagName);
|
|
17044
17299
|
if (!tagName) continue;
|
|
17045
|
-
if (
|
|
17300
|
+
if (isHtmlTagHardBlocked(tagName, policy)) {
|
|
17046
17301
|
if (token.type === "tag_open") blockedDepth += 1;
|
|
17047
17302
|
else if (token.type === "tag_close" && blockedDepth > 0) blockedDepth -= 1;
|
|
17048
17303
|
continue;
|
|
17049
17304
|
}
|
|
17050
17305
|
if (blockedDepth > 0) continue;
|
|
17306
|
+
if (policy === "safe" && isHtmlTagBlocked(tagName, policy)) {
|
|
17307
|
+
output.push(serializeLiteralHtmlTag(token));
|
|
17308
|
+
continue;
|
|
17309
|
+
}
|
|
17051
17310
|
if (token.type === "self_closing") {
|
|
17052
|
-
output.push(`<${tagName}${serializeAttrs(sanitizeHtmlContentAttrs(token.attrs ?? {}))}>`);
|
|
17311
|
+
output.push(`<${tagName}${serializeAttrs(sanitizeHtmlContentAttrs(token.attrs ?? {}, policy, tagName))}>`);
|
|
17053
17312
|
continue;
|
|
17054
17313
|
}
|
|
17055
17314
|
if (token.type === "tag_open") {
|
|
17056
|
-
output.push(`<${tagName}${serializeAttrs(sanitizeHtmlContentAttrs(token.attrs ?? {}))}>`);
|
|
17315
|
+
output.push(`<${tagName}${serializeAttrs(sanitizeHtmlContentAttrs(token.attrs ?? {}, policy, tagName))}>`);
|
|
17057
17316
|
if (!VOID_HTML_TAGS.has(tagName)) stack.push(tagName);
|
|
17058
17317
|
continue;
|
|
17059
17318
|
}
|
|
@@ -17214,5 +17473,5 @@ function getMarkdown(msgId = `editor-${Date.now()}`, options = {}) {
|
|
|
17214
17473
|
}
|
|
17215
17474
|
|
|
17216
17475
|
//#endregion
|
|
17217
|
-
export { BLOCKED_HTML_TAGS, BLOCKED_HTML_TAG_NAMES, BLOCK_HTML_TAG_NAMES, DANGEROUS_HTML_ATTRS, DANGEROUS_HTML_ATTR_NAMES, ESCAPED_TEX_BRACE_COMMANDS, EXTENDED_STANDARD_HTML_TAGS, EXTENDED_STANDARD_HTML_TAG_NAMES, INLINE_HTML_TAG_NAMES, KATEX_COMMANDS, NON_STRUCTURING_HTML_TAGS, NON_STRUCTURING_HTML_TAG_NAMES, STANDARD_BLOCK_HTML_TAGS, STANDARD_HTML_TAGS, SVG_HTML_TAG_NAMES, TEX_BRACE_COMMANDS, URL_HTML_ATTRS, URL_HTML_ATTR_NAMES, VOID_HTML_TAGS, VOID_HTML_TAG_NAMES, applyContainers, applyMath, clearRegisteredMarkdownPlugins, convertHtmlAttrsToProps, convertHtmlPropValue, findMatchingClose, getHtmlTagFromContent, getMarkdown, hasCompleteHtmlTagContent, hasCustomHtmlComponents, isCustomHtmlComponentTag, isHtmlLikeTagName, isMathLike, isUnsafeHtmlUrl, mergeCustomHtmlTags, normalizeCustomHtmlTagName, normalizeCustomHtmlTags, normalizeStandaloneBackslashT, parseFenceToken, parseInlineTokens, parseMarkdownToStructure, processTokens, registerMarkdownPlugin, resolveCustomHtmlTags, sanitizeHtmlAttrs, sanitizeHtmlContent, sanitizeHtmlTokenAttrs, setDefaultMathOptions, shouldRenderUnknownHtmlTagAsText, stripCustomHtmlWrapper, stripHtmlControlAndWhitespace, tokenAttrsToRecord, tokenizeHtml };
|
|
17476
|
+
export { BLOCKED_HTML_TAGS, BLOCKED_HTML_TAG_NAMES, BLOCK_HTML_TAG_NAMES, DANGEROUS_HTML_ATTRS, DANGEROUS_HTML_ATTR_NAMES, ESCAPED_TEX_BRACE_COMMANDS, EXTENDED_STANDARD_HTML_TAGS, EXTENDED_STANDARD_HTML_TAG_NAMES, INLINE_HTML_TAG_NAMES, KATEX_COMMANDS, NON_STRUCTURING_HTML_TAGS, NON_STRUCTURING_HTML_TAG_NAMES, SAFE_ALLOWED_HTML_TAGS, STANDARD_BLOCK_HTML_TAGS, STANDARD_HTML_TAGS, SVG_HTML_TAG_NAMES, TEX_BRACE_COMMANDS, URL_HTML_ATTRS, URL_HTML_ATTR_NAMES, VOID_HTML_TAGS, VOID_HTML_TAG_NAMES, applyContainers, applyMath, clearRegisteredMarkdownPlugins, convertHtmlAttrsToProps, convertHtmlPropValue, findMatchingClose, getHtmlTagFromContent, getMarkdown, hasCompleteHtmlTagContent, hasCustomHtmlComponents, isCustomHtmlComponentTag, isHtmlLikeTagName, isHtmlTagBlocked, isHtmlTagHardBlocked, isMathLike, isUnsafeHtmlUrl, mergeCustomHtmlTags, normalizeCustomHtmlTagName, normalizeCustomHtmlTags, normalizeStandaloneBackslashT, parseFenceToken, parseInlineTokens, parseMarkdownToStructure, processTokens, registerMarkdownPlugin, resolveCustomHtmlTags, sanitizeHtmlAttrs, sanitizeHtmlContent, sanitizeHtmlTokenAttrs, setDefaultMathOptions, shouldRenderUnknownHtmlTagAsText, stripCustomHtmlWrapper, stripHtmlControlAndWhitespace, tokenAttrsToRecord, tokenizeHtml };
|
|
17218
17477
|
//# sourceMappingURL=index.js.map
|