UNPKG

ant-design-x-vue-next

Version:

Ant Design X for Vue — community continuation aligned with @ant-design/x

164 lines (162 loc) 5.5 kB
import { StreamCacheTokenType as i } from "./interface.mjs"; const d = { image: [/^!\[[^\]\r\n]{0,1000}$/, /^!\[[^\r\n]{0,1000}\]\(*[^)\r\n]{0,1000}$/], link: [/^\[[^\]\r\n]{0,1000}$/, /^\[[^\r\n]{0,1000}\]\(*[^)\r\n]{0,1000}$/], html: [/^<\/$/, /^<\/?[a-zA-Z][a-zA-Z0-9-]{0,100}[^>\r\n]{0,1000}$/], commonEmphasis: [/^(\*{1,3}|_{1,3})(?!\s)(?!.*\1$)[^\r\n]{0,1000}$/], list: [/^[-+*]\s{0,3}$/, /^[-+*]\s{1,3}(\*{1,3}|_{1,3})(?!\s)(?!.*\1$)[^\r\n]{0,1000}$/], "inline-code": [/^`[^`\r\n]{0,300}$/] }, u = (e) => { if (e.includes(` `)) return !1; const n = e.split(` `); if (n.length <= 1) return !0; const [t, o] = n, r = t.trim(); if (!/^\|.*\|$/.test(r)) return !1; const s = o.trim().split("|").map((l) => l.trim()).filter(Boolean), m = /^:?-+:?$/; return s.every( (l, p) => p === s.length - 1 && l === ":" || m.test(l) ); }, T = { [i.Link]: { tokenType: i.Link, isStartOfToken: (e) => e.startsWith("["), isStreamingValid: (e) => d.link.some((n) => n.test(e)) }, [i.Image]: { tokenType: i.Image, isStartOfToken: (e) => e.startsWith("!"), isStreamingValid: (e) => d.image.some((n) => n.test(e)) }, [i.Html]: { tokenType: i.Html, isStartOfToken: (e) => e.startsWith("<"), isStreamingValid: (e) => d.html.some((n) => n.test(e)) }, [i.Emphasis]: { tokenType: i.Emphasis, isStartOfToken: (e) => e.startsWith("*") || e.startsWith("_"), isStreamingValid: (e) => d.commonEmphasis.some((n) => n.test(e)) }, [i.List]: { tokenType: i.List, isStartOfToken: (e) => /^[-+*]/.test(e), isStreamingValid: (e) => d.list.some((n) => n.test(e)), getCommitPrefix: (e) => { var o; const n = (o = e.match(/^([-+*]\s{0,3})/)) == null ? void 0 : o[1], t = n ? e.slice(n.length) : ""; return n && t.startsWith("`") ? n : null; } }, [i.Table]: { tokenType: i.Table, isStartOfToken: (e) => e.startsWith("|"), isStreamingValid: u }, [i.InlineCode]: { tokenType: i.InlineCode, isStartOfToken: (e) => e.startsWith("`"), isStreamingValid: (e) => d["inline-code"].some((n) => n.test(e)) } }, C = (e, n) => { var a; const t = T[n]; if (!t) return; const { token: o, pending: r } = e; if (o === i.Text && t.isStartOfToken(r)) { e.token = n; return; } if (o === n && !t.isStreamingValid(r)) { const s = (a = t.getCommitPrefix) == null ? void 0 : a.call(t, r); if (s) { e.completeMarkdown += s, e.pending = r.slice(s.length), e.token = i.Text; return; } k(e); } }, g = Object.values(T).map((e) => ({ tokenType: e.tokenType, recognize: (n) => C(n, e.tokenType) })), F = () => ({ inFenced: !1, fenceChar: "", fenceLen: 0, lineFenceChar: "", lineFenceLen: 0, lineFenceRunEnded: !1, lineTailBlank: !0 }), f = () => ({ pending: "", token: i.Text, processedLength: 0, completeMarkdown: "", fence: F() }), k = (e) => { e.pending && (e.completeMarkdown += e.pending, e.pending = ""), e.token = i.Text; }, S = (e, n) => { if (n === ` `) { e.lineFenceLen >= 3 && (e.inFenced ? e.lineFenceChar === e.fenceChar && e.lineFenceLen >= e.fenceLen && e.lineTailBlank && (e.inFenced = !1, e.fenceChar = "", e.fenceLen = 0) : (e.inFenced = !0, e.fenceChar = e.lineFenceChar, e.fenceLen = e.lineFenceLen)), e.lineFenceChar = "", e.lineFenceLen = 0, e.lineFenceRunEnded = !1, e.lineTailBlank = !0; return; } e.lineFenceRunEnded ? e.lineTailBlank = e.lineTailBlank && /\s/.test(n) : e.lineFenceLen === 0 && (n === "`" || n === "~") ? (e.lineFenceChar = n, e.lineFenceLen = 1) : e.lineFenceLen > 0 && n === e.lineFenceChar ? e.lineFenceLen += 1 : (e.lineFenceRunEnded = !0, e.lineTailBlank = e.lineTailBlank && /\s/.test(n)); }, L = (e) => e.inFenced || e.lineFenceLen >= 3, h = (e) => { let n = ""; for (let t = 0; t < e.length; t++) { const o = e.charCodeAt(t); o >= 55296 && o <= 56319 ? t + 1 < e.length && e.charCodeAt(t + 1) >= 56320 && e.charCodeAt(t + 1) <= 57343 && (n += e[t] + e[t + 1], t++) : (o < 56320 || o > 57343) && (n += e[t]); } return n; }, $ = (e) => { try { return encodeURIComponent(e); } catch (n) { return n instanceof URIError ? encodeURIComponent(h(e)) : ""; } }; function c(e, n = {}) { const { token: t, pending: o } = e; if (t === i.Text || t === i.Image && o === "!") return; if (t === i.Table && o.split(` `).length > 2) return o; const a = (n.incompleteMarkdownComponentMap || {})[t] || `incomplete-${t}`, s = $(o); return (n.componentNames || []).includes(a) ? `<${a} data-raw="${s}" />` : void 0; } function x(e, n, t = {}) { if (!n) return Object.assign(e, f()), ""; const o = e.completeMarkdown + e.pending; n.startsWith(o) || Object.assign(e, f()); const r = n.slice(e.processedLength); if (!r) { const s = c(e, t); return e.completeMarkdown + (s || ""); } e.processedLength += r.length; for (const s of r) { if (e.pending += s, S(e.fence, s), L(e.fence)) { k(e); continue; } const m = e.token; if (m === i.Text) for (const l of g) l.recognize(e); else { const l = g.find((p) => p.tokenType === m); if (l == null || l.recognize(e), e.token === i.Text) for (const p of g) p.recognize(e); } e.token === i.Text && k(e); } const a = c(e, t); return e.completeMarkdown + (a || ""); } export { c as buildIncompletePlaceholder, f as getInitialCache, x as processStreamingText, $ as safeEncodeURIComponent };