stream-markdown-parser 0.0.89 → 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 +280 -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
|
@@ -9820,6 +9820,9 @@ function tokenToRaw$1(token) {
|
|
|
9820
9820
|
const shape = token;
|
|
9821
9821
|
return String(shape.raw ?? shape.content ?? shape.markup ?? "");
|
|
9822
9822
|
}
|
|
9823
|
+
function isNonElementHtmlBlock(content) {
|
|
9824
|
+
return /^\s*<\s*[!?]/.test(content);
|
|
9825
|
+
}
|
|
9823
9826
|
function buildCommonHtmlTagSet(extraTags) {
|
|
9824
9827
|
const set = new Set(BASE_COMMON_HTML_TAGS);
|
|
9825
9828
|
if (extraTags && Array.isArray(extraTags)) for (const t of extraTags) {
|
|
@@ -10115,6 +10118,7 @@ function applyFixHtmlInlineTokens(md, options = {}) {
|
|
|
10115
10118
|
}
|
|
10116
10119
|
const rawContent = getHtmlBlockCarrierContent(t);
|
|
10117
10120
|
if (rawContent) {
|
|
10121
|
+
if (isNonElementHtmlBlock(rawContent)) continue;
|
|
10118
10122
|
const tag = (rawContent.match(/<\s*(?:\/\s*)?([^\s>/]+)/)?.[1] ?? "").toLowerCase();
|
|
10119
10123
|
const isClosingTag$1 = /^\s*<\s*\//.test(rawContent);
|
|
10120
10124
|
if (!tag || !shouldMergeHtmlBlockTag(tag)) continue;
|
|
@@ -10499,6 +10503,124 @@ function applyFixIndentedCodeBlock(md, options = {}) {
|
|
|
10499
10503
|
});
|
|
10500
10504
|
}
|
|
10501
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
|
+
|
|
10502
10624
|
//#endregion
|
|
10503
10625
|
//#region src/plugins/fixLinkTokens.ts
|
|
10504
10626
|
const LINKIFY_HARD_STOP_CHARS = ["!"];
|
|
@@ -10610,6 +10732,15 @@ function setHrefOnLinkOpen(token, href) {
|
|
|
10610
10732
|
if (idx >= 0) token.attrs[idx][1] = href;
|
|
10611
10733
|
else token.attrs.push(["href", href]);
|
|
10612
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
|
+
}
|
|
10613
10744
|
function applyFixLinkTokens(md) {
|
|
10614
10745
|
md.core.ruler.after("inline", "fix_link_tokens", (state) => {
|
|
10615
10746
|
const toks = state.tokens ?? [];
|
|
@@ -10637,6 +10768,11 @@ function fixLinkToken(tokens) {
|
|
|
10637
10768
|
break;
|
|
10638
10769
|
}
|
|
10639
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
|
+
}
|
|
10640
10776
|
const href = getHrefFromLinkOpen(curToken);
|
|
10641
10777
|
const hrefStop = firstIndexOfAny(href, LINKIFY_HARD_STOP_CHARS);
|
|
10642
10778
|
for (let j = i + 1; j < closeIdx; j++) {
|
|
@@ -14063,6 +14199,10 @@ function parseInlineTokens(tokens, raw, pPreToken, options) {
|
|
|
14063
14199
|
resetCurrentTextNode();
|
|
14064
14200
|
const { node, nextIndex } = parseLinkToken(tokens, i, options);
|
|
14065
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
|
+
}
|
|
14066
14206
|
const hasSingleTextChild = node.children.length === 1 && node.children[0]?.type === "text";
|
|
14067
14207
|
if (node.loading && raw && node.text === node.href && hasSingleTextChild) {
|
|
14068
14208
|
const recoveredLabel = recoverTrailingMarkdownLinkLabel(raw, node.href);
|
|
@@ -16739,6 +16879,79 @@ function processTokens(tokens, options) {
|
|
|
16739
16879
|
|
|
16740
16880
|
//#endregion
|
|
16741
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
|
+
]);
|
|
16742
16955
|
const CUSTOM_TAG_REGEX = /<([a-z][a-z0-9-]*)\b[^>]*>/gi;
|
|
16743
16956
|
function hasOwn(obj, key) {
|
|
16744
16957
|
return Object.prototype.hasOwnProperty.call(obj, key);
|
|
@@ -16758,37 +16971,75 @@ function escapeAttr(value) {
|
|
|
16758
16971
|
function normalizeTagName(tagName) {
|
|
16759
16972
|
return String(tagName ?? "").trim().toLowerCase();
|
|
16760
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
|
+
}
|
|
16761
16988
|
function serializeAttrs(attrs) {
|
|
16762
16989
|
const pairs = Object.entries(attrs);
|
|
16763
16990
|
if (pairs.length === 0) return "";
|
|
16764
16991
|
return pairs.map(([name, value]) => value === "" ? ` ${name}` : ` ${name}="${escapeAttr(value)}"`).join("");
|
|
16765
16992
|
}
|
|
16766
|
-
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) {
|
|
16767
17018
|
const clean = {};
|
|
16768
17019
|
for (const [key, value] of Object.entries(attrs)) {
|
|
16769
17020
|
const safeName = key.trim();
|
|
16770
17021
|
const lowerKey = safeName.toLowerCase();
|
|
16771
17022
|
if (!safeName || !isSafeAttrName(safeName)) continue;
|
|
16772
|
-
if (
|
|
16773
|
-
if (URL_HTML_ATTRS.has(lowerKey) && value && isUnsafeHtmlUrl(value)) continue;
|
|
17023
|
+
if (shouldDropHtmlAttr(lowerKey, value, policy)) continue;
|
|
16774
17024
|
clean[safeName] = value;
|
|
16775
17025
|
}
|
|
16776
|
-
return clean;
|
|
17026
|
+
return hardenAnchorAttrs(clean, policy, tagName);
|
|
16777
17027
|
}
|
|
16778
17028
|
function isCustomHtmlComponentTag(tagName, customComponents) {
|
|
16779
17029
|
const lowerTag = tagName.toLowerCase();
|
|
16780
17030
|
if (EXTENDED_STANDARD_HTML_TAGS.has(lowerTag)) return false;
|
|
16781
17031
|
return hasOwn(customComponents, lowerTag) || hasOwn(customComponents, tagName);
|
|
16782
17032
|
}
|
|
16783
|
-
function sanitizeHtmlAttrs(attrs) {
|
|
17033
|
+
function sanitizeHtmlAttrs(attrs, policy = "safe", tagName) {
|
|
16784
17034
|
const clean = {};
|
|
16785
17035
|
for (const [key, value] of Object.entries(attrs)) {
|
|
16786
|
-
const
|
|
16787
|
-
|
|
16788
|
-
if (
|
|
16789
|
-
|
|
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;
|
|
16790
17041
|
}
|
|
16791
|
-
return clean;
|
|
17042
|
+
return hardenAnchorAttrs(clean, policy, tagName);
|
|
16792
17043
|
}
|
|
16793
17044
|
function tokenAttrsToRecord(attrs) {
|
|
16794
17045
|
const record = {};
|
|
@@ -16799,8 +17050,8 @@ function tokenAttrsToRecord(attrs) {
|
|
|
16799
17050
|
}
|
|
16800
17051
|
return record;
|
|
16801
17052
|
}
|
|
16802
|
-
function sanitizeHtmlTokenAttrs(attrs) {
|
|
16803
|
-
const sanitized = sanitizeHtmlAttrs(tokenAttrsToRecord(attrs));
|
|
17053
|
+
function sanitizeHtmlTokenAttrs(attrs, policy = "safe", tagName) {
|
|
17054
|
+
const sanitized = sanitizeHtmlAttrs(tokenAttrsToRecord(attrs), policy, tagName);
|
|
16804
17055
|
const pairs = Object.entries(sanitized).map(([key, value]) => [key, value]);
|
|
16805
17056
|
return pairs.length > 0 ? pairs : void 0;
|
|
16806
17057
|
}
|
|
@@ -17017,6 +17268,13 @@ function tokenizeHtmlPreservingText(html) {
|
|
|
17017
17268
|
}
|
|
17018
17269
|
return tokens;
|
|
17019
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
|
+
}
|
|
17020
17278
|
function hasCustomHtmlComponents(content, customComponents) {
|
|
17021
17279
|
if (!content || !content.includes("<")) return false;
|
|
17022
17280
|
if (!customComponents || Object.keys(customComponents).length === 0) return false;
|
|
@@ -17025,8 +17283,9 @@ function hasCustomHtmlComponents(content, customComponents) {
|
|
|
17025
17283
|
while ((match = CUSTOM_TAG_REGEX.exec(content)) !== null) if (isCustomHtmlComponentTag(match[1], customComponents)) return true;
|
|
17026
17284
|
return false;
|
|
17027
17285
|
}
|
|
17028
|
-
function sanitizeHtmlContent(content) {
|
|
17286
|
+
function sanitizeHtmlContent(content, policy = "safe") {
|
|
17029
17287
|
if (!content) return "";
|
|
17288
|
+
if (policy === "escape") return escapeHtml(content);
|
|
17030
17289
|
const tokens = tokenizeHtmlPreservingText(content);
|
|
17031
17290
|
const stack = [];
|
|
17032
17291
|
const output = [];
|
|
@@ -17038,18 +17297,22 @@ function sanitizeHtmlContent(content) {
|
|
|
17038
17297
|
}
|
|
17039
17298
|
const tagName = normalizeTagName(token.tagName);
|
|
17040
17299
|
if (!tagName) continue;
|
|
17041
|
-
if (
|
|
17300
|
+
if (isHtmlTagHardBlocked(tagName, policy)) {
|
|
17042
17301
|
if (token.type === "tag_open") blockedDepth += 1;
|
|
17043
17302
|
else if (token.type === "tag_close" && blockedDepth > 0) blockedDepth -= 1;
|
|
17044
17303
|
continue;
|
|
17045
17304
|
}
|
|
17046
17305
|
if (blockedDepth > 0) continue;
|
|
17306
|
+
if (policy === "safe" && isHtmlTagBlocked(tagName, policy)) {
|
|
17307
|
+
output.push(serializeLiteralHtmlTag(token));
|
|
17308
|
+
continue;
|
|
17309
|
+
}
|
|
17047
17310
|
if (token.type === "self_closing") {
|
|
17048
|
-
output.push(`<${tagName}${serializeAttrs(sanitizeHtmlContentAttrs(token.attrs ?? {}))}>`);
|
|
17311
|
+
output.push(`<${tagName}${serializeAttrs(sanitizeHtmlContentAttrs(token.attrs ?? {}, policy, tagName))}>`);
|
|
17049
17312
|
continue;
|
|
17050
17313
|
}
|
|
17051
17314
|
if (token.type === "tag_open") {
|
|
17052
|
-
output.push(`<${tagName}${serializeAttrs(sanitizeHtmlContentAttrs(token.attrs ?? {}))}>`);
|
|
17315
|
+
output.push(`<${tagName}${serializeAttrs(sanitizeHtmlContentAttrs(token.attrs ?? {}, policy, tagName))}>`);
|
|
17053
17316
|
if (!VOID_HTML_TAGS.has(tagName)) stack.push(tagName);
|
|
17054
17317
|
continue;
|
|
17055
17318
|
}
|
|
@@ -17210,5 +17473,5 @@ function getMarkdown(msgId = `editor-${Date.now()}`, options = {}) {
|
|
|
17210
17473
|
}
|
|
17211
17474
|
|
|
17212
17475
|
//#endregion
|
|
17213
|
-
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 };
|
|
17214
17477
|
//# sourceMappingURL=index.js.map
|