From 02a980d8d79e06d554e4f42934acfda78e665442 Mon Sep 17 00:00:00 2001 From: Eugene Date: Fri, 3 Apr 2026 17:42:50 +0000 Subject: [PATCH 01/13] feat: markdown streaming --- __tests__/html2/livestream/html-chunk.html | 218 +++++++++++ .../livestream/html-chunk.html.snap-1.png | Bin 0 -> 11782 bytes .../livestream/html-chunk.html.snap-2.png | Bin 0 -> 12942 bytes .../livestream/html-chunk.html.snap-3.png | Bin 0 -> 14155 bytes .../livestream/html-chunk.html.snap-4.png | Bin 0 -> 16858 bytes .../livestream/html-chunk.no-streaming.html | 10 + .../html-chunk.no-streaming.html.snap-1.png | Bin 0 -> 11782 bytes .../html-chunk.no-streaming.html.snap-2.png | Bin 0 -> 12942 bytes .../html-chunk.no-streaming.html.snap-3.png | Bin 0 -> 14155 bytes .../html-chunk.no-streaming.html.snap-4.png | Bin 0 -> 16858 bytes .../src/markdown/createStreamingRenderer.ts | 350 ++++++++++++++++++ .../src/markdown/private/createDecorate.ts | 80 ++++ .../private/extractDefinitionsFromEvents.ts | 67 ++++ .../bundle/src/markdown/renderMarkdown.ts | 87 +---- .../Text/private/MarkdownTextContent.tsx | 37 +- .../src/hooks/useRenderMarkdownAsHTML.ts | 16 +- .../useStreamingMarkdownWithDefinitions.ts | 188 ++++++++++ 17 files changed, 947 insertions(+), 106 deletions(-) create mode 100644 __tests__/html2/livestream/html-chunk.html create mode 100644 __tests__/html2/livestream/html-chunk.html.snap-1.png create mode 100644 __tests__/html2/livestream/html-chunk.html.snap-2.png create mode 100644 __tests__/html2/livestream/html-chunk.html.snap-3.png create mode 100644 __tests__/html2/livestream/html-chunk.html.snap-4.png create mode 100644 __tests__/html2/livestream/html-chunk.no-streaming.html create mode 100644 __tests__/html2/livestream/html-chunk.no-streaming.html.snap-1.png create mode 100644 __tests__/html2/livestream/html-chunk.no-streaming.html.snap-2.png create mode 100644 __tests__/html2/livestream/html-chunk.no-streaming.html.snap-3.png create mode 100644 __tests__/html2/livestream/html-chunk.no-streaming.html.snap-4.png create mode 100644 packages/bundle/src/markdown/createStreamingRenderer.ts create mode 100644 packages/bundle/src/markdown/private/createDecorate.ts create mode 100644 packages/bundle/src/markdown/private/extractDefinitionsFromEvents.ts create mode 100644 packages/component/src/hooks/useStreamingMarkdownWithDefinitions.ts diff --git a/__tests__/html2/livestream/html-chunk.html b/__tests__/html2/livestream/html-chunk.html new file mode 100644 index 0000000000..e4a1abddd0 --- /dev/null +++ b/__tests__/html2/livestream/html-chunk.html @@ -0,0 +1,218 @@ + + + + HTML Streaming: Streaming Support + + + + + + + + + +
+ + + diff --git a/__tests__/html2/livestream/html-chunk.html.snap-1.png b/__tests__/html2/livestream/html-chunk.html.snap-1.png new file mode 100644 index 0000000000000000000000000000000000000000..bd12486652445909e9efcdc3036fdd01447e0b7e GIT binary patch literal 11782 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 H4}t#y$_@PE literal 0 HcmV?d00001 diff --git a/__tests__/html2/livestream/html-chunk.html.snap-2.png b/__tests__/html2/livestream/html-chunk.html.snap-2.png new file mode 100644 index 0000000000000000000000000000000000000000..441632b2b2d5eee7fe06678e6d51b9bd8b0dac04 GIT binary patch literal 12942 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 Q;1e<}bv?Bbm0O|z1q0G0FaQ7m literal 0 HcmV?d00001 diff --git a/__tests__/html2/livestream/html-chunk.html.snap-4.png b/__tests__/html2/livestream/html-chunk.html.snap-4.png new file mode 100644 index 0000000000000000000000000000000000000000..d8e818def0c9de51923d8820985ab0e3e97d3f3b GIT binary patch literal 16858 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 + + + HTML Streaming: No Streaming Support + + + + diff --git a/__tests__/html2/livestream/html-chunk.no-streaming.html.snap-1.png b/__tests__/html2/livestream/html-chunk.no-streaming.html.snap-1.png new file mode 100644 index 0000000000000000000000000000000000000000..bd12486652445909e9efcdc3036fdd01447e0b7e GIT binary patch literal 11782 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 H4}t#y$_@PE literal 0 HcmV?d00001 diff --git a/__tests__/html2/livestream/html-chunk.no-streaming.html.snap-2.png b/__tests__/html2/livestream/html-chunk.no-streaming.html.snap-2.png new file mode 100644 index 0000000000000000000000000000000000000000..441632b2b2d5eee7fe06678e6d51b9bd8b0dac04 GIT binary patch literal 12942 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 Q;1e<}bv?Bbm0O|z1q0G0FaQ7m literal 0 HcmV?d00001 diff --git a/__tests__/html2/livestream/html-chunk.no-streaming.html.snap-4.png b/__tests__/html2/livestream/html-chunk.no-streaming.html.snap-4.png new file mode 100644 index 0000000000000000000000000000000000000000..d8e818def0c9de51923d8820985ab0e3e97d3f3b GIT binary patch literal 16858 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 + +type StreamingRenderOptions = Readonly<{ + markdownRenderHTML?: boolean | undefined; + markdownRespectCRLF: boolean; +}>; + +type StreamingNextOptions = Readonly<{ + container: HTMLElement; + containerClassName?: string | undefined; + transformFragment?: ((fragment: DocumentFragment) => DocumentFragment) | undefined; +}>; + +type StreamingNextResult = Readonly<{ + definitions: readonly MarkdownLinkDefinition[]; +}>; + +type StreamingRenderer = Readonly<{ + finalize: (options: StreamingNextOptions) => StreamingNextResult; + next: (chunk: string, options: StreamingNextOptions) => void; + reset: () => void; +}>; + +// Top-level block token types emitted by micromark. +// An exit event at depth 0 for one of these types marks a committed block boundary. +const TOP_LEVEL_BLOCK_TYPES: ReadonlySet = new Set([ + 'atxHeading', + 'blockQuote', + 'codeFenced', + 'codeIndented', + 'content', + 'htmlFlow', + 'listOrdered', + 'listUnordered', + 'setextHeading', + 'table', + 'thematicBreak', + 'math' +]); + +type BlockBoundary = { + readonly endOffset: number; + readonly startOffset: number; + readonly type: string; +}; + +function findTopLevelBlocks(events: ReadonlyArray): readonly BlockBoundary[] { + const blocks: Array<{ endOffset: number; startOffset: number; type: string }> = []; + let depth = 0; + + for (const [action, token] of events) { + if (!TOP_LEVEL_BLOCK_TYPES.has(token.type)) { + continue; + } + + if (action === 'enter') { + if (!depth) { + blocks.push({ endOffset: -1, startOffset: token.start.offset, type: token.type }); + } + + depth++; + } else { + depth--; + + if (!depth && blocks.length) { + blocks[blocks.length - 1].endOffset = token.end.offset; + } + } + } + + return blocks; +} + +export default function createStreamingRenderer( + { markdownRenderHTML, markdownRespectCRLF }: StreamingRenderOptions, + { externalLinkAlt }: StreamingRenderInit +): StreamingRenderer { + const micromarkOptions: Options = { + allowDangerousHtml: markdownRenderHTML ?? true, + allowDangerousProtocol: true, + extensions: [gfm(), math()], + htmlExtensions: [ + gfmHtml(), + mathHtml({ + renderMath: (content, isDisplay) => + katex.renderToString(content, { + displayMode: isDisplay, + output: 'mathml' + }) + }) + ] + }; + + const domParser = new DOMParser(); + + // Parser state. + let activeBlockStartOffset = 0; + let previousMarkdown = ''; + const emptyDefinitions: readonly MarkdownLinkDefinition[] = Object.freeze([]); + + // DOM reconciliation state. + let wrapperDiv: HTMLDivElement | null = null; + let activeSentinel: Comment | null = null; + + function parseEvents(source: string): Event[] { + return postprocess( + parse(micromarkOptions) + .document() + .write(preprocess()(source, undefined, true)) + ); + } + + function applyTransform( + fragment: DocumentFragment, + transformFragment: ((fragment: DocumentFragment) => DocumentFragment) | undefined + ): DocumentFragment { + return transformFragment ? transformFragment(fragment) : fragment; + } + + function ensureWrapper(container: HTMLElement, containerClassName: string | undefined): HTMLDivElement { + if (wrapperDiv && container.contains(wrapperDiv)) { + wrapperDiv.className = containerClassName || ''; + + return wrapperDiv; + } + + const wrapper = document.createElement('div'); + + wrapper.className = containerClassName || ''; + container.textContent = ''; + container.appendChild(wrapper); + wrapperDiv = wrapper; + activeSentinel = null; + + return wrapper; + } + + function renderNext(chunk: string, options: StreamingNextOptions): void { + previousMarkdown += chunk; + + if (!previousMarkdown) { + activeBlockStartOffset = 0; + activeSentinel = null; + + const wrapper = ensureWrapper(options.container, options.containerClassName); + + wrapper.replaceChildren(); + + return; + } + + let processedMarkdown = previousMarkdown; + + if (markdownRespectCRLF) { + processedMarkdown = respectCRLFPre(processedMarkdown); + } + + // Incremental path: re-parse only from the last committed block boundary. + // Guard: if sentinel was lost (e.g. container changed), fall back to full reparse. + if (activeBlockStartOffset > 0) { + const wrapper = ensureWrapper(options.container, options.containerClassName); + + if (activeSentinel && wrapper.contains(activeSentinel)) { + const tailEvents = parseEvents(processedMarkdown.slice(activeBlockStartOffset)); + const tailBlocks = findTopLevelBlocks(tailEvents); + const tailHTML = compile(micromarkOptions)(tailEvents); + + if (tailBlocks.length <= 1) { + // Fast path: active block grew, no new committed blocks. + // Replace only the active zone (after sentinel). + const activeDoc = domParser.parseFromString(tailHTML, 'text/html'); + const activeFragment = activeDoc.createDocumentFragment(); + + activeFragment.append(...Array.from(activeDoc.body.childNodes)); + betterLinkDocumentMod(activeFragment, createDecorate(emptyDefinitions, externalLinkAlt)); + + const activeRange = document.createRange(); + + activeRange.setStartAfter(activeSentinel); + activeRange.setEndAfter(wrapper.lastChild!); + activeRange.deleteContents(); + + wrapper.append(applyTransform(activeFragment, options.transformFragment)); + } else { + // New block boundary in tail: commit newly-finished blocks, replace active. + const newActiveOffsetInTail = tailBlocks[tailBlocks.length - 1].startOffset; + const committedTailEvents = tailEvents.filter(([, token]) => token.start.offset < newActiveOffsetInTail); + const committedTailHTML = compile(micromarkOptions)(committedTailEvents); + + activeBlockStartOffset += newActiveOffsetInTail; + + const committedDoc = domParser.parseFromString(committedTailHTML, 'text/html'); + const committedFragment = committedDoc.createDocumentFragment(); + + committedFragment.append(...Array.from(committedDoc.body.childNodes)); + betterLinkDocumentMod(committedFragment, createDecorate(emptyDefinitions, externalLinkAlt)); + + const remainingHTML = tailHTML.slice(committedTailHTML.length); + const activeDoc = domParser.parseFromString(remainingHTML, 'text/html'); + const activeFragment = activeDoc.createDocumentFragment(); + + activeFragment.append(...Array.from(activeDoc.body.childNodes)); + betterLinkDocumentMod(activeFragment, createDecorate(emptyDefinitions, externalLinkAlt)); + + // Remove old sentinel and active zone. + const tailRange = document.createRange(); + + tailRange.setStartBefore(activeSentinel); + tailRange.setEndAfter(wrapper.lastChild!); + tailRange.deleteContents(); + + // Append newly committed, new sentinel, active. + activeSentinel = document.createComment(''); + + wrapper.append( + applyTransform(committedFragment, options.transformFragment), + activeSentinel, + applyTransform(activeFragment, options.transformFragment) + ); + } + + return; + } + + // Sentinel lost — reset and fall through to full reparse. + activeBlockStartOffset = 0; + activeSentinel = null; + } + + // Full reparse path. + const fullEvents = parseEvents(processedMarkdown); + const rawHTML = compile(micromarkOptions)(fullEvents); + const parsedDocument = domParser.parseFromString(rawHTML, 'text/html'); + const fragment = parsedDocument.createDocumentFragment(); + + fragment.append(...Array.from(parsedDocument.body.childNodes)); + + const blocks = findTopLevelBlocks(fullEvents); + + if (blocks.length >= 2) { + activeBlockStartOffset = blocks[blocks.length - 1].startOffset; + + const range = document.createRange(); + + range.setStartBefore(fragment.firstChild!); + range.setEndBefore(fragment.lastElementChild!); + + const committedFragment = range.extractContents(); + const decorate = createDecorate(emptyDefinitions, externalLinkAlt); + + betterLinkDocumentMod(committedFragment, decorate); + betterLinkDocumentMod(fragment, decorate); + + const wrapper = ensureWrapper(options.container, options.containerClassName); + + activeSentinel = document.createComment(''); + + wrapper.replaceChildren( + applyTransform(committedFragment, options.transformFragment), + activeSentinel, + applyTransform(fragment, options.transformFragment) + ); + + return; + } + + // Single block — full replace, no sentinel. + activeBlockStartOffset = 0; + activeSentinel = null; + + betterLinkDocumentMod(fragment, createDecorate(emptyDefinitions, externalLinkAlt)); + + const wrapper = ensureWrapper(options.container, options.containerClassName); + + wrapper.replaceChildren(applyTransform(fragment, options.transformFragment)); + } + + return Object.freeze({ + finalize(options: StreamingNextOptions): StreamingNextResult { + if (!previousMarkdown) { + const wrapper = ensureWrapper(options.container, options.containerClassName); + + wrapper.replaceChildren(); + + return Object.freeze({ definitions: Object.freeze([]) }); + } + + let processedMarkdown = previousMarkdown; + + if (markdownRespectCRLF) { + processedMarkdown = respectCRLFPre(processedMarkdown); + } + + const fullEvents = parseEvents(processedMarkdown); + const rawHTML = compile(micromarkOptions)(fullEvents); + const parsedDocument = domParser.parseFromString(rawHTML, 'text/html'); + const fragment = parsedDocument.createDocumentFragment(); + + fragment.append(...Array.from(parsedDocument.body.childNodes)); + + const definitions = extractDefinitionsFromEvents(fullEvents); + + betterLinkDocumentMod(fragment, createDecorate(definitions, externalLinkAlt)); + + activeBlockStartOffset = 0; + activeSentinel = null; + + // Full replace on finalize — no incremental path needed. + const wrapper = ensureWrapper(options.container, options.containerClassName); + const transformedFragment = applyTransform(fragment, options.transformFragment); + + wrapper.replaceChildren(transformedFragment); + + return Object.freeze({ definitions }); + }, + + next(chunk: string, options: StreamingNextOptions): void { + renderNext(chunk, options); + }, + + reset(): void { + previousMarkdown = ''; + activeBlockStartOffset = 0; + activeSentinel = null; + wrapperDiv = null; + } + }); +} + +export { + type MarkdownLinkDefinition, + type StreamingNextOptions, + type StreamingNextResult, + type StreamingRenderer, + type StreamingRenderOptions +}; diff --git a/packages/bundle/src/markdown/private/createDecorate.ts b/packages/bundle/src/markdown/private/createDecorate.ts new file mode 100644 index 0000000000..7586d71eac --- /dev/null +++ b/packages/bundle/src/markdown/private/createDecorate.ts @@ -0,0 +1,80 @@ +import { onErrorResumeNext } from 'botframework-webchat-core'; +import { BetterLinkDocumentModDecoration } from './betterLinkDocumentMod'; +import { MarkdownLinkDefinition } from './extractDefinitionsFromEvents'; +import { sanitizeUri } from 'micromark-util-sanitize-uri'; + +export const ALLOWED_SCHEMES = ['data', 'http', 'https', 'ftp', 'mailto', 'sip', 'tel']; + +export function createDecorate( + definitions: readonly MarkdownLinkDefinition[], + externalLinkAlt: string +): (href: string, textContent: string) => BetterLinkDocumentModDecoration { + const linkDefinitions = definitions.map(definition => + Object.freeze({ + ...definition, + markupUrl: sanitizeUri(definition.url), + parsedUrl: onErrorResumeNext(() => new URL(definition.url)) + }) + ); + + return (href: string, textContent: string): BetterLinkDocumentModDecoration => { + const decoration: BetterLinkDocumentModDecoration = { + rel: 'noopener noreferrer', + target: '_blank', + wrapZeroWidthSpace: true + }; + + const ariaLabelSegments: string[] = [textContent]; + const classes: Set = new Set(); + const linkDefinition = linkDefinitions.find(({ url, markupUrl }) => url === href || (href && markupUrl === href)); + const protocol = onErrorResumeNext(() => new URL(href).protocol); + + if (linkDefinition) { + ariaLabelSegments.push(linkDefinition.title || linkDefinition?.parsedUrl?.host || linkDefinition.url); + + // linkDefinition.identifier is uppercase, while linkDefinition.label is as-is. + linkDefinition.label === textContent && classes.add('render-markdown__pure-identifier'); + } + + // Let javascript: fell through. Our sanitizer will catch and remove it from . + // Otherwise, it will be turn into