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
JavaScript
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
};