stream-markdown-parser 0.0.90 → 0.0.92
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 +283 -18
- 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":";;;UAaiB,cAAA,SAAuB;sBAClB;;EADL,gBAAA,CAAe,EAAA,OAAA;;;;ECXf,CAAA;EAaL;AAEZ;AAMA;;EAKY,cAAA,CAAA,EAAA,SAAA,MAAA,EAAA;EALyB;;AAQrC;AAMA;EAMiB,0BAKR,CAAA,EAAA,OAAA;AAGT;;;UAjDiB,QAAA;;EDWA,GAAA,EAAA,MAAA;;;;ACXjB;AAaA;AAEA;AAMA;;;AAAqC,KARzB,WAAA,GAAc,QAQW,GARA,MAQA,CAAA,MAAA,EAAA,OAAA,CAAA;AAAQ,UAN5B,QAAA,SAAiB,QAMW,CAAA;EAQ5B,IAAA,EAAA,MAAA;EAMA,OAAA,EAAA,MAAW;EAMX,MAAA,CAAA,EAAA,OAAS;AAQ1B;AAKiB,UAjCA,WAAA,SAAoB,QAiCU,CAAA;EAiB9B,IAAA,EAAA,SAAA;EAQA,KAAA,EAAA,MAAA;EAYL,IAAA,EAAA,MAAA;EAYK,KAAA,CAAA,EA9EP,MA8EO,CAAA,MAAA,EAAoB,MAAA,GAAA,OAAA,CAAA;EAK3B,QAAA,EAlFE,UAkFF,EAAA;;AALmC,UA1E5B,aAAA,SAAsB,QA0EM,CAAA;EAAQ,IAAA,EAAA,WAAA;EAUpC,QAAA,EAlFL,UAkFoB,EAAA;EAKf,aAAS,CAAA,EAAA,OAMd;AAGZ;AAOiB,UAnGA,UAAA,SAAmB,QAmGO,CAAQ;EAIlC,IAAA,EAAA,QAAA;EASL,QAAA,EA9GA,UA8Gc,EAAA;EAST,OAAA,CAAA,EAAA,MAAA;AAKjB;AAEU,UA1HO,QAAA,SAAiB,QA0HxB,CAAA;EACF,IAAA,EAAA,MAAA;EAH2B,OAAA,EAAA,OAAA;EAAQ,KAAA,CAAA,EAAA,MAAA;EAM1B,KAAA,EAzHR,YAyHqB,EAAA;AAK9B;AAOiB,UAlIA,YAAA,SAAqB,QAoI7B,CAAA;EAGQ,IAAA,EAAA,WAAA;EAET,QAAA,EAvII,UAuIJ,EAAA;;AAFoC,UAlI3B,aAAA,SAAsB,QAkIK,CAAA;EAAQ,IAAA,EAAA,YAAA;EAMnC,QAAA,EAAA,MAAa;EAMb,IAAA,EAAA,MAAA;EAKA,SAAA,CAAA,EAAA,MAAA;EAKA,OAAA,CAAA,EAAA,MAAA;EAOA,OAAA,CAAA,EAAA,OAAA;EAKP,IAAA,CAAA,EAAA,OAAA;EACE,YAAA,CAAA,EAAA,MAAA;EAN8B,WAAA,CAAA,EAAA,MAAA;EAAQ,GAAA,EAAA,MAAA;AASlD;AAKiB,UA5JA,aAAA,SAAsB,QA4JD,CAAA;EAKrB,IAAA,EAAA,YAAA;EAKA,KAAA,CAAA,EAAA,CAAA,MAAA,EAAc,MAAA,CAAA,EAAA,GAEnB,IAAA;EAGK,GAAA,EAAA,MAAA;EAKA,OAAA,EAAA,MAAA;EAKA,QAAA,CAAA,EAhLJ,UAgLoB,EAAA;AAKjC;AAKiB,UAvLA,cAAA,SAAuB,QAuLW,CAAA;EAKlC,IAAA,EAAA,aAAU;EAMV,GAAA,CAAA,EAAA,MAAA;EAIA,OAAA,EAAA,MAAA;EAMA,QAAA,EAxML,UAwMmB,EAAA;EAMd;AAMjB;AAkBA;AAEA;EACM,UAAA,CAAA,EAAA,OAAA;;AAEA,KAnOM,oBAAA,GAmON,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,GAjOA,MAiOA,CAAA,MAAA,EAAA,MAAA,GAAA,OAAA,CAAA,GAhOA,KAgOA,CAAA;EACA,IAAA,EAAA,MAAA;EACA,KAAA,EAAA,MAAA,GAAA,OAAA;CACA,CAAA,GAAA,IAAA;;;;;;;AAOA,UAjOW,mBAAA,SAA4B,QAiOvC,CAAA;EACA;EACA,IAAA,EAAA,MAAA;EACA,GAAA,EAAA,MAAA;EACA,OAAA,EAAA,MAAA;EACA,KAAA,CAAA,EAjOI,oBAiOJ;EACA,QAAA,CAAA,EAjOO,UAiOP,EAAA;EACA,UAAA,CAAA,EAAA,OAAA;;AAEA,UAhOW,cAAA,SAAuB,QAgOlC,CAAA;EACA,IAAA,EAAA,aAAA;EACA,IAAA,EAAA,MAAA;;AAEA,UA/NW,QAAA,SAAiB,QA+N5B,CAAA;EACA,IAAA,EAAA,MAAA;EACA,IAAA,EAAA,MAAA;EACA,KAAA,EAAA,MAAA,GAAA,IAAA;EACA,IAAA,EAAA,MAAA;EACA,KAAA,CAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA;EACA,QAAA,EA/NM,UA+NN,EAAA;;AAEA,UA9NW,SAAA,SAAkB,QA8N7B,CAAA;EACA,IAAA,EAAA,OAAA;EACA,GAAA,EAAA,MAAA;EACA,GAAA,EAAA,MAAA;EACA,KAAA,EAAA,MAAA,GAAA,IAAA;;AACW,UA5NA,iBAAA,SAA0B,QA4NV,CAAA;EAmCrB,IAAA,EAAA,gBAAmB;AAE/B;AA8BY,UA3RK,gBAAA,CA2RiB;;;;IC9ElB,IAAA,EAAA,MAAA;IACN,OAAA,CAAA,EAAA,OAAA;EAEI,CAAA;;AAEX,KDzMS,cAAA,GCyMT;EAAU,OAAA,EAAA,MAAA;;;;ECy8CG,KAAA,EF3oDL,QE2oDK,EAAA;CAEV;AACK,UF5oDM,cAAA,SAAuB,QE4oD7B,CAAA;EACR,IAAA,EAAA,YAAA;EAAU,QAAA,EF3oDD,UE2oDC,EAAA;AA+Nb;AAAsC,UFv2DrB,SAAA,SAAkB,QEu2DG,CAAA;EAA2B,IAAA,EAAA,OAAA;EAAe,MAAA,EFr2DtE,YEq2DsE;EAAU,IAAA,EFp2DlF,YEo2DkF,EAAA;;UFj2DzE,YAAA,SAAqB;;EGhKrB,KAAA,EHkKR,aGlKmB,EAAA;AAqB5B;UHgJiB,aAAA,SAAsB;;;EIzKvB,QAAA,EJ4KJ,UI5KqB,EAAA;EAIjB,KAAA,CAAA,EAAA,MAAA,GAAA,OAAA,GAAA,QAA0B;AA4B1C;AAgBgB,UJgIC,kBAAA,SAA2B,QIhIO,CAAA;EAgBnC,IAAA,EAAA,iBAAA;EAQA,KAAA,EJ0GP,kBI1G4B,EAAA;AAIrC;AAgBgB,UJyFC,kBAAA,SAA2B,QIzFI,CAAA;EAOhC,IAAA,EAAA,iBAAA;QJoFR;cACM;;AK7LE,ULgMC,YAAA,SAAqB,QKhML,CAAA;;;YLmMrB;AM1LZ;AAEiB,UN2LA,qBAAA,SAA8B,QMxL/B,CAAA;EA8BH,IAAA,EAAA,oBA+CX;EAqCc,EAAA,EAAA,MAAA;AAWhB;AAqFgB,UNrBC,kBAAA,SAA2B,QMuBlB,CAAA;EAQV,IAAA,EAAA,iBAAiB;EAAQ,EAAA,EAAA,MAAA;;AAAqE,UN1B7F,cAAA,SAAuB,QM0BsE,CAAA;EAAA,IAAA,EAAA,YAAA;EAc9F,IAAA,EAAA,MAAA;EAcA,KAAA,EAAA,MAAA;EAUA,QAAA,EN5DJ,UM4DI,EAAA;AAehB;AAWgB,UNnFC,gBAAA,SAAyB,QMmFW,CAAA;EAsNrC,IAAA,EAAA,eAAA;EAiBA,IAAA,EAAA,MAAA;;;UNrTN;EO5NG,QAAA,EP6ND,UO7NC,EAeH;AAEV;AAgCa,UP+KI,UAAA,SAAmB,QOhJ1B,CAAA;EAEG,IAAA,EAAA,QAAA;EAMA,QAAA,EP0ID,UO1IC,EAAA;AA0Cb;AA+Ba,UPoEI,YAAA,SAAqB,QO9D5B,CAAA;EAEG,IAAA,EAAA,UAAA;EAIA,QAAA,EP0DD,UO1DC,EAAA;AAQb;AACa,UPoDI,iBAAA,SAA0B,QOpDN,CAAA;EACxB,IAAA,EAAA,eAKX;EACW,QAAA,EP+CD,UO/CC,EAAA;AAIb;AACa,UP6CI,aAAA,SAAsB,QO7CZ,CAAA;EACd,IAAA,EAAA,WAAA;EACA,QAAA,EP6CD,UO7CC,EAAA;AAEb;AAagB,UPiCC,UAAA,SAAmB,QOjCL,CAAA;;YPmCnB;;AQ5KI,UR+KC,aAAA,SAAsB,QQ/KA,CAAA;;YRiL3B;;AS1HI,UT6HC,eAAA,SAAwB,QS7HK,CAAA;;YT+HlC;;AUhQC,UVmQI,YAAA,SAAqB,QUjPrC,CAAA;EAEY,IAAA,EAAA,UAAA;EAsCG,OAAA,EAAA,OAAU;;UV8MT,iBAAA,SAA0B;;EWvP9B,OAAA,EAAA,OAAA;AAyKb;AAoPgB,UXjKC,SAAA,SAAkB,QWiKkB,CAAA;;;;ACzZrD;AAIgB,UZ0PC,aAAA,SAAsB,QY1PO,CAAA;EA0B7B,IAAA,EAAA,WAAA;;AAEI,UZkOJ,cAAA,SAAuB,QYlOnB,CAAA;EAAX,IAAA,EAAA,aAAA;EAK2B,OAAA,EAAA,MAAA;EAPO,MAAA,CAAA,EAAA,MAAA;;AAU5B,UZgOC,aAAA,SAAsB,QYhOsC,CAAA;;;;;UZsO5D,aAAA,SAAsB;;;;UAMtB,iBAAA;;;;;;;;;;;;;aAaJ;;;;KAKD,aAAA,IAAiB;;;KAA+C;KAEhE,UAAA,GACN,WACA,cACA,gBACA,WACA,eACA,gBACA,iBACA,WACA,YACA,oBACA,iBACA,YACA,eACA,gBACA,aACA,eACA,oBACA,gBACA,aACA,gBACA,kBACA,eACA,oBACA,YACA,qBACA,qBACA,eACA,wBACA,iBACA,mBACA,gBACA,iBACA,gBACA,gBACA,gBACA,iBACA,sBACA;UACW,gBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAmCL,mBAAA,YAA+B,oBAAoB;UAE9C,YAAA;uBACM;wBACC;;;;;;;;;;;;;;;;;;;;;;;;;KA4BZ,sBAAA,WAAiC,iBAAiB;;;iBC9E9C,iBAAA,SACN,2CAEI,yBACF,eACT;;;iBCy8Ca,wBAAA,uBAEV,wBACK,eACR;iBA+Na,aAAA,SAAsB,2BAA2B,eAAe;;;;;;AH7/DhF;;;;ACXA;AAaA;AAEiB,UGRA,WAAA,CHQiB;EAMjB;EAIP,QAAA,CAAA,EAAA,SAAA,MAAA,EAAA;EACE;EALyB,iBAAA,CAAA,EAAA,OAAA;EAAQ;AAQ7C;AAMA;AAMA;AAQA;AAKA;AAiBA;AAQA;AAYA;AAYA;;EAMa,gBAAA,CAAA,EAAA,OAAA;;AANwC,iBG3ErC,qBAAA,CH2EqC,IAAA,EG3ET,WH2ES,GAAA,SAAA,CAAA,EAAA,IAAA;;;iBIpGrC,iBAAA;iBAIA,0BAAA;iBA4BA,uBAAA;ALxBC,iBKwCD,mBAAA,CLxCwB,GAAM,KAAA,EKwCA,KLxCA,CAAA,SAAA,MAAA,EAAA,GAAA,SAAA,CAAA,CAAA,EAAA,MAAA,EAAA;iBKwD9B,qBAAA;;;AJnEhB,CAAA;AAaY,iBI8DI,qBAAA,CJ9DqB,IAAM,EAAA,OAAA,CAAA,EAAA,MAAA;AAE1B,iBIgED,yBAAA,CJhE0B,IAAA,EAAA,OAAA,EAAA,GAAA,EAAA,MAAA,CAAA,EAAA,OAAA;AAMzB,iBI0ED,gCAAA,CJ1Ea,IAAA,EAAA,OAAA,EAAA,GAAA,EAAA,MAAA,CAAA,EAAA,OAAA;AAInB,iBI6EM,sBAAA,CJ7EN,IAAA,EAAA,OAAA,EAAA,GAAA,EAAA,MAAA,CAAA,EAAA,MAAA;;;iBK3BM,iBAAA;;;KCSJ,UAAA;UAEK,SAAA;;EPEA,OAAA,CAAA,EAAA,MAAA;UOCP;;;ANZO,cM0CJ,sBN1CY,EM0CU,GN1CV,CAAA,MAAA,CAAA;AAab,iBMiHI,gBAAA,CNjHqB,OAAM,EAAA,MAAA,GAAA,SAAA,EAAA,MAAA,CAAA,EMiH2B,UNjH3B,CAAA,EAAA,OAAA;AAE1B,iBM0HD,oBAAA,CN1H0B,OAAA,EAAA,MAAA,GAAA,SAAA,EAAA,MAAA,CAAA,EM0HgC,UN1HhC,CAAA,EAAA,OAAA;AAMzB,iBMyMD,wBAAA,CNzMa,OAAA,EAAA,MAAA,EAAA,gBAAA,EM2MT,MN3MS,CAAA,MAAA,EAAA,OAAA,CAAA,CAAA,EAAA,OAAA;AAInB,iBM+MM,iBAAA,CN/MN,KAAA,EM+M+B,MN/M/B,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,MAAA,CAAA,EM+M+D,UN/M/D,EAAA,OAAA,CAAA,EAAA,MAAA,CAAA,EM+MoG,MN/MpG,CAAA,MAAA,EAAA,MAAA,CAAA;AACE,iBM4NI,kBAAA,CN5NJ,KAAA,CAAA,EM4N+B,KN5N/B,CAAA,CAAA,MAAA,EAAA,MAAA,GAAA,IAAA,CAAA,CAAA,GAAA,IAAA,CAAA,EM4NoE,MN5NpE,CAAA,MAAA,EAAA,MAAA,CAAA;AALyB,iBM+OrB,sBAAA,CN/OqB,KAAA,CAAA,EMgP3B,KNhP2B,CAAA,CAAA,MAAA,EAAA,MAAA,GAAA,IAAA,CAAA,CAAA,GAAA,IAAA,EAAA,MAAA,CAAA,EMiP3B,UNjP2B,EAAA,OAAA,CAAA,EAAA,MAAA,CAAA,EAAA,CAAA,MAAA,EAAA,MAAA,CAAA,EAAA,GAAA,SAAA;AAAQ,iBMyP7B,oBAAA,CNzP6B,KAAA,EAAA,MAAA,EAAA,GAAA,EAAA,MAAA,CAAA,EAAA,GAAA;AAQ5B,iBMgQD,uBAAA,CNhQuB,KAAQ,EMgQA,MNhQA,CAAA,MAAA,EAAA,MAAA,CAAA,CAAA,EMgQsB,MNhQtB,CAAA,MAAA,EAAA,GAAA,CAAA;AAM9B,iBMqQD,YAAA,CNnQJ,IAFwB,EAAA,MAAA,CAAQ,EMqQA,SNrQA,EAAA;AAM3B,iBMqdD,uBAAA,CNrdkB,OAAQ,EAAA,MAAA,EAAA,gBAAA,EMudtB,MNvdsB,CAAA,MAAA,EAAA,OAAA,CAAA,CAAA,EAAA,OAAA;AAQzB,iBM8dD,mBAAA,CN9dsB,OAAA,EAAQ,MAAA,EAAA,MAAA,CAAA,EM8de,UN9df,CAAA,EAAA,MAAA;;;cOnDjC;cAiBA;cAgCA;ARpCI,cQqEJ,kBRpES,EADkB,SAAM,CAAA,KAAA,EAAA,GAAA,EAAA,MAAA,CAAA;cQ2EjC;cA0CA;cA+BA;AP/JI,cOuKJ,sBPvKY,EAAA,SAAA,CAAA,QAAA,CAAA;AAab,cO8JC,8BP9J8B,EAAA,SAAA,CAAA,KAAA,EAAA,QAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,CAAA;AAE1B,cOoKJ,cPpKqB,EOoKP,GPpKe,CAAA,MAAA,CAAA;AAMzB,cO+JJ,wBP/JgB,EO+JQ,GP/JR,CAAA,MAAA,CAAA;AAInB,cO4JG,kBP5JH,EO4JqB,GP5JrB,CAAA,MAAA,CAAA;AACE,cOiKC,2BPjKD,EOiK4B,GPjK5B,CAAA,MAAA,CAAA;AALyB,cO0KxB,oBP1KwB,EO0KJ,GP1KI,CAAA,MAAA,CAAA;AAAQ,cO2KhC,cP3KgC,EO2KlB,GP3KkB,CAAA,MAAA,CAAA;AAQ5B,cOoKJ,iBPlKD,EOkKkB,GPlKlB,CAF2B,MAAA,CAAA;AAMtB,cO+JJ,yBP/JuB,EO+JE,GP/JM,CAAA,MAAA,CAAA;AAM3B,iBO2JD,6BAAA,CP3J0B,KAAA,EAAA,MAAA,CAAA,EAAA,MAAA;AAQzB,iBOgKD,eAAA,CP9JJ,KAF0B,EAAA,MAAQ,CAAA,EAAA,OAAA;;;iBQuB9B,eAAA,QAAuB,gBAAgB;;;iBCuDvC,eAAA,KAAoB;;;cCjIvB;cAoBA;iBAsCG,UAAA;;;cCzCH;iBAyKG,6BAAA,mBAAgD;iBAoPhD,SAAA,KAAc,yBAAuB;;;AZjapC,iBaQD,sBAAA,CbR8B,MAAA,EAAA,OAAA,CAAA,EAAA,IAAA;iBaY9B,8BAAA,CAAA;AZ0BC,UYAA,kBAAA,SAA2B,cZAE,CAAA;EAK7B,MAAA,CAAA,EYJN,KZIM,CAAA,OAAc,CAAA;EAiBd,KAAA,CAAA,EYpBP,KZoBO,CAAA,CAAA,EAAc,EYpBV,UZyBR,EAAA,GAAA,IAAA,CAAA;EAGI;AAYjB;AAYA;;EAMa,IAAA,CAAA,EAAA,CAAA,CAAA,GAAA,EAAA,MAAA,EAAA,GAAA,MAAA,CAAA,GYrDwB,MZqDxB,CAAA,MAAA,EAAA,MAAA,CAAA;;AANwC,iBY5CrC,WAAA,CZ4CqC,KAAA,CAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EY5CwB,kBZ4CxB,CAAA,EY5C+C,UZ4C/C"}
|
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);
|
|
@@ -15638,12 +15774,18 @@ function parseDetailsFragmentChildren(fragment, md, options) {
|
|
|
15638
15774
|
if (!fragment.trim()) return [];
|
|
15639
15775
|
return parseMarkdownToStructure(fragment, md, options);
|
|
15640
15776
|
}
|
|
15777
|
+
function parseSummaryChildren(fragment, md, options) {
|
|
15778
|
+
const children = parseDetailsFragmentChildren(fragment, md, options);
|
|
15779
|
+
const onlyChild = children[0];
|
|
15780
|
+
if (children.length === 1 && onlyChild?.type === "paragraph" && Array.isArray(onlyChild.children)) return onlyChild.children;
|
|
15781
|
+
return children;
|
|
15782
|
+
}
|
|
15641
15783
|
function buildStructuredSummaryNode(summaryRaw, md, options) {
|
|
15642
15784
|
const summaryNode = parseHtmlBlock({ content: summaryRaw });
|
|
15643
15785
|
const openEnd = findTagCloseIndexOutsideQuotes(summaryRaw);
|
|
15644
15786
|
const closeStart = findLastClosingTagStart(summaryRaw, "summary");
|
|
15645
15787
|
if (openEnd !== -1 && closeStart !== -1 && closeStart >= openEnd + 1) {
|
|
15646
|
-
const children =
|
|
15788
|
+
const children = parseSummaryChildren(summaryRaw.slice(openEnd + 1, closeStart), md, options);
|
|
15647
15789
|
if (children.length > 0) summaryNode.children = children;
|
|
15648
15790
|
}
|
|
15649
15791
|
summaryNode.raw = summaryRaw;
|
|
@@ -16743,6 +16885,79 @@ function processTokens(tokens, options) {
|
|
|
16743
16885
|
|
|
16744
16886
|
//#endregion
|
|
16745
16887
|
//#region src/htmlRenderUtils.ts
|
|
16888
|
+
const SAFE_BLOCKED_HTML_TAGS = new Set([
|
|
16889
|
+
...BLOCKED_HTML_TAGS,
|
|
16890
|
+
"base",
|
|
16891
|
+
"button",
|
|
16892
|
+
"datalist",
|
|
16893
|
+
"dialog",
|
|
16894
|
+
"embed",
|
|
16895
|
+
"fieldset",
|
|
16896
|
+
"form",
|
|
16897
|
+
"iframe",
|
|
16898
|
+
"input",
|
|
16899
|
+
"legend",
|
|
16900
|
+
"link",
|
|
16901
|
+
"meta",
|
|
16902
|
+
"object",
|
|
16903
|
+
"optgroup",
|
|
16904
|
+
"option",
|
|
16905
|
+
"output",
|
|
16906
|
+
"param",
|
|
16907
|
+
"select",
|
|
16908
|
+
"style",
|
|
16909
|
+
"template",
|
|
16910
|
+
"textarea",
|
|
16911
|
+
"title"
|
|
16912
|
+
]);
|
|
16913
|
+
const SAFE_ALLOWED_HTML_TAGS = new Set([
|
|
16914
|
+
"a",
|
|
16915
|
+
"abbr",
|
|
16916
|
+
"b",
|
|
16917
|
+
"blockquote",
|
|
16918
|
+
"br",
|
|
16919
|
+
"caption",
|
|
16920
|
+
"code",
|
|
16921
|
+
"col",
|
|
16922
|
+
"colgroup",
|
|
16923
|
+
"dd",
|
|
16924
|
+
"details",
|
|
16925
|
+
"div",
|
|
16926
|
+
"dl",
|
|
16927
|
+
"dt",
|
|
16928
|
+
"em",
|
|
16929
|
+
"h1",
|
|
16930
|
+
"h2",
|
|
16931
|
+
"h3",
|
|
16932
|
+
"h4",
|
|
16933
|
+
"h5",
|
|
16934
|
+
"h6",
|
|
16935
|
+
"hr",
|
|
16936
|
+
"i",
|
|
16937
|
+
"img",
|
|
16938
|
+
"ins",
|
|
16939
|
+
"kbd",
|
|
16940
|
+
"li",
|
|
16941
|
+
"mark",
|
|
16942
|
+
"ol",
|
|
16943
|
+
"p",
|
|
16944
|
+
"pre",
|
|
16945
|
+
"s",
|
|
16946
|
+
"small",
|
|
16947
|
+
"span",
|
|
16948
|
+
"strong",
|
|
16949
|
+
"sub",
|
|
16950
|
+
"summary",
|
|
16951
|
+
"sup",
|
|
16952
|
+
"table",
|
|
16953
|
+
"tbody",
|
|
16954
|
+
"td",
|
|
16955
|
+
"tfoot",
|
|
16956
|
+
"th",
|
|
16957
|
+
"thead",
|
|
16958
|
+
"tr",
|
|
16959
|
+
"ul"
|
|
16960
|
+
]);
|
|
16746
16961
|
const CUSTOM_TAG_REGEX = /<([a-z][a-z0-9-]*)\b[^>]*>/gi;
|
|
16747
16962
|
function hasOwn(obj, key) {
|
|
16748
16963
|
return Object.prototype.hasOwnProperty.call(obj, key);
|
|
@@ -16762,37 +16977,75 @@ function escapeAttr(value) {
|
|
|
16762
16977
|
function normalizeTagName(tagName) {
|
|
16763
16978
|
return String(tagName ?? "").trim().toLowerCase();
|
|
16764
16979
|
}
|
|
16980
|
+
function isHtmlTagBlocked(tagName, policy = "safe") {
|
|
16981
|
+
const normalized = normalizeTagName(tagName);
|
|
16982
|
+
if (!normalized) return false;
|
|
16983
|
+
if (policy === "escape") return true;
|
|
16984
|
+
if (policy === "trusted") return BLOCKED_HTML_TAGS.has(normalized);
|
|
16985
|
+
return !SAFE_ALLOWED_HTML_TAGS.has(normalized);
|
|
16986
|
+
}
|
|
16987
|
+
function isHtmlTagHardBlocked(tagName, policy = "safe") {
|
|
16988
|
+
const normalized = normalizeTagName(tagName);
|
|
16989
|
+
if (!normalized) return false;
|
|
16990
|
+
if (policy === "escape") return true;
|
|
16991
|
+
if (policy === "trusted") return BLOCKED_HTML_TAGS.has(normalized);
|
|
16992
|
+
return SAFE_BLOCKED_HTML_TAGS.has(normalized);
|
|
16993
|
+
}
|
|
16765
16994
|
function serializeAttrs(attrs) {
|
|
16766
16995
|
const pairs = Object.entries(attrs);
|
|
16767
16996
|
if (pairs.length === 0) return "";
|
|
16768
16997
|
return pairs.map(([name, value]) => value === "" ? ` ${name}` : ` ${name}="${escapeAttr(value)}"`).join("");
|
|
16769
16998
|
}
|
|
16770
|
-
function
|
|
16999
|
+
function isUnsafeSrcset(value) {
|
|
17000
|
+
const candidates = value.split(",").map((candidate) => candidate.trim()).filter(Boolean);
|
|
17001
|
+
if (candidates.length === 0) return false;
|
|
17002
|
+
return candidates.some((candidate) => {
|
|
17003
|
+
const url = candidate.split(/\s+/, 1)[0] ?? "";
|
|
17004
|
+
return !url || isUnsafeHtmlUrl(url);
|
|
17005
|
+
});
|
|
17006
|
+
}
|
|
17007
|
+
function shouldDropHtmlAttr(lowerKey, value, policy) {
|
|
17008
|
+
if (DANGEROUS_HTML_ATTRS.has(lowerKey)) return true;
|
|
17009
|
+
if (policy === "safe" && lowerKey === "style") return true;
|
|
17010
|
+
if (lowerKey === "srcset") return isUnsafeSrcset(value);
|
|
17011
|
+
if (URL_HTML_ATTRS.has(lowerKey) && value && isUnsafeHtmlUrl(value)) return true;
|
|
17012
|
+
return false;
|
|
17013
|
+
}
|
|
17014
|
+
function hardenAnchorAttrs(clean, policy, tagName) {
|
|
17015
|
+
if (policy !== "safe" || normalizeTagName(tagName) !== "a") return clean;
|
|
17016
|
+
if (String(clean.target ?? "").trim().toLowerCase() !== "_blank") return clean;
|
|
17017
|
+
const relTokens = new Set(String(clean.rel ?? "").split(/\s+/).map((token) => token.trim()).filter(Boolean).filter((token) => token.toLowerCase() !== "opener"));
|
|
17018
|
+
relTokens.add("noopener");
|
|
17019
|
+
relTokens.add("noreferrer");
|
|
17020
|
+
clean.rel = Array.from(relTokens).join(" ");
|
|
17021
|
+
return clean;
|
|
17022
|
+
}
|
|
17023
|
+
function sanitizeHtmlContentAttrs(attrs, policy = "safe", tagName) {
|
|
16771
17024
|
const clean = {};
|
|
16772
17025
|
for (const [key, value] of Object.entries(attrs)) {
|
|
16773
17026
|
const safeName = key.trim();
|
|
16774
17027
|
const lowerKey = safeName.toLowerCase();
|
|
16775
17028
|
if (!safeName || !isSafeAttrName(safeName)) continue;
|
|
16776
|
-
if (
|
|
16777
|
-
if (URL_HTML_ATTRS.has(lowerKey) && value && isUnsafeHtmlUrl(value)) continue;
|
|
17029
|
+
if (shouldDropHtmlAttr(lowerKey, value, policy)) continue;
|
|
16778
17030
|
clean[safeName] = value;
|
|
16779
17031
|
}
|
|
16780
|
-
return clean;
|
|
17032
|
+
return hardenAnchorAttrs(clean, policy, tagName);
|
|
16781
17033
|
}
|
|
16782
17034
|
function isCustomHtmlComponentTag(tagName, customComponents) {
|
|
16783
17035
|
const lowerTag = tagName.toLowerCase();
|
|
16784
17036
|
if (EXTENDED_STANDARD_HTML_TAGS.has(lowerTag)) return false;
|
|
16785
17037
|
return hasOwn(customComponents, lowerTag) || hasOwn(customComponents, tagName);
|
|
16786
17038
|
}
|
|
16787
|
-
function sanitizeHtmlAttrs(attrs) {
|
|
17039
|
+
function sanitizeHtmlAttrs(attrs, policy = "safe", tagName) {
|
|
16788
17040
|
const clean = {};
|
|
16789
17041
|
for (const [key, value] of Object.entries(attrs)) {
|
|
16790
|
-
const
|
|
16791
|
-
|
|
16792
|
-
if (
|
|
16793
|
-
|
|
17042
|
+
const safeName = key.trim();
|
|
17043
|
+
const lowerKey = safeName.toLowerCase();
|
|
17044
|
+
if (!safeName || !isSafeAttrName(safeName)) continue;
|
|
17045
|
+
if (shouldDropHtmlAttr(lowerKey, value, policy)) continue;
|
|
17046
|
+
clean[safeName] = value;
|
|
16794
17047
|
}
|
|
16795
|
-
return clean;
|
|
17048
|
+
return hardenAnchorAttrs(clean, policy, tagName);
|
|
16796
17049
|
}
|
|
16797
17050
|
function tokenAttrsToRecord(attrs) {
|
|
16798
17051
|
const record = {};
|
|
@@ -16803,8 +17056,8 @@ function tokenAttrsToRecord(attrs) {
|
|
|
16803
17056
|
}
|
|
16804
17057
|
return record;
|
|
16805
17058
|
}
|
|
16806
|
-
function sanitizeHtmlTokenAttrs(attrs) {
|
|
16807
|
-
const sanitized = sanitizeHtmlAttrs(tokenAttrsToRecord(attrs));
|
|
17059
|
+
function sanitizeHtmlTokenAttrs(attrs, policy = "safe", tagName) {
|
|
17060
|
+
const sanitized = sanitizeHtmlAttrs(tokenAttrsToRecord(attrs), policy, tagName);
|
|
16808
17061
|
const pairs = Object.entries(sanitized).map(([key, value]) => [key, value]);
|
|
16809
17062
|
return pairs.length > 0 ? pairs : void 0;
|
|
16810
17063
|
}
|
|
@@ -17021,6 +17274,13 @@ function tokenizeHtmlPreservingText(html) {
|
|
|
17021
17274
|
}
|
|
17022
17275
|
return tokens;
|
|
17023
17276
|
}
|
|
17277
|
+
function serializeLiteralHtmlTag(token) {
|
|
17278
|
+
const tagName = String(token.tagName ?? "").trim();
|
|
17279
|
+
if (!tagName) return "";
|
|
17280
|
+
if (token.type === "tag_close") return `</${escapeHtml(tagName)}>`;
|
|
17281
|
+
const attrs = Object.entries(token.attrs ?? {}).map(([name, value]) => value === "" ? ` ${escapeHtml(name)}` : ` ${escapeHtml(name)}="${escapeAttr(value)}"`).join("");
|
|
17282
|
+
return token.type === "self_closing" ? `<${escapeHtml(tagName)}${attrs} />` : `<${escapeHtml(tagName)}${attrs}>`;
|
|
17283
|
+
}
|
|
17024
17284
|
function hasCustomHtmlComponents(content, customComponents) {
|
|
17025
17285
|
if (!content || !content.includes("<")) return false;
|
|
17026
17286
|
if (!customComponents || Object.keys(customComponents).length === 0) return false;
|
|
@@ -17029,8 +17289,9 @@ function hasCustomHtmlComponents(content, customComponents) {
|
|
|
17029
17289
|
while ((match = CUSTOM_TAG_REGEX.exec(content)) !== null) if (isCustomHtmlComponentTag(match[1], customComponents)) return true;
|
|
17030
17290
|
return false;
|
|
17031
17291
|
}
|
|
17032
|
-
function sanitizeHtmlContent(content) {
|
|
17292
|
+
function sanitizeHtmlContent(content, policy = "safe") {
|
|
17033
17293
|
if (!content) return "";
|
|
17294
|
+
if (policy === "escape") return escapeHtml(content);
|
|
17034
17295
|
const tokens = tokenizeHtmlPreservingText(content);
|
|
17035
17296
|
const stack = [];
|
|
17036
17297
|
const output = [];
|
|
@@ -17042,18 +17303,22 @@ function sanitizeHtmlContent(content) {
|
|
|
17042
17303
|
}
|
|
17043
17304
|
const tagName = normalizeTagName(token.tagName);
|
|
17044
17305
|
if (!tagName) continue;
|
|
17045
|
-
if (
|
|
17306
|
+
if (isHtmlTagHardBlocked(tagName, policy)) {
|
|
17046
17307
|
if (token.type === "tag_open") blockedDepth += 1;
|
|
17047
17308
|
else if (token.type === "tag_close" && blockedDepth > 0) blockedDepth -= 1;
|
|
17048
17309
|
continue;
|
|
17049
17310
|
}
|
|
17050
17311
|
if (blockedDepth > 0) continue;
|
|
17312
|
+
if (policy === "safe" && isHtmlTagBlocked(tagName, policy)) {
|
|
17313
|
+
output.push(serializeLiteralHtmlTag(token));
|
|
17314
|
+
continue;
|
|
17315
|
+
}
|
|
17051
17316
|
if (token.type === "self_closing") {
|
|
17052
|
-
output.push(`<${tagName}${serializeAttrs(sanitizeHtmlContentAttrs(token.attrs ?? {}))}>`);
|
|
17317
|
+
output.push(`<${tagName}${serializeAttrs(sanitizeHtmlContentAttrs(token.attrs ?? {}, policy, tagName))}>`);
|
|
17053
17318
|
continue;
|
|
17054
17319
|
}
|
|
17055
17320
|
if (token.type === "tag_open") {
|
|
17056
|
-
output.push(`<${tagName}${serializeAttrs(sanitizeHtmlContentAttrs(token.attrs ?? {}))}>`);
|
|
17321
|
+
output.push(`<${tagName}${serializeAttrs(sanitizeHtmlContentAttrs(token.attrs ?? {}, policy, tagName))}>`);
|
|
17057
17322
|
if (!VOID_HTML_TAGS.has(tagName)) stack.push(tagName);
|
|
17058
17323
|
continue;
|
|
17059
17324
|
}
|
|
@@ -17214,5 +17479,5 @@ function getMarkdown(msgId = `editor-${Date.now()}`, options = {}) {
|
|
|
17214
17479
|
}
|
|
17215
17480
|
|
|
17216
17481
|
//#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 };
|
|
17482
|
+
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
17483
|
//# sourceMappingURL=index.js.map
|