fix(ui): распознавать CRLF и комментарии в потоке SSE

This commit is contained in:
Denozordec committed 2026-09-28 11:38:11 +07:00
1 parent f50a29f116
commit ed491c313f
8 files changed
+38 -15

No files matched your search

+3 -3
View File
@@ -8,7 +8,7 @@ import { flowQuery } from "@/shared/api/traffic-flow"
function parseSseBlock(block: string): { event: string; data: string } {
let event = "message"
const dataLines: string[] = []
for (const line of block.split("\n")) {
for (const line of block.split(/\r?\n/)) {
if (line.startsWith("event:")) event = line.slice(6).trim()
else if (line.startsWith("data:")) dataLines.push(line.slice(5).trim())
}
@@ -81,10 +81,10 @@ export function useFlowLive(opts: {
if (ac.signal.aborted) return
if (done) { setError("Поток live завершён"); break }
buf += decoder.decode(value, { stream: true })
const parts = buf.split("\n\n")
const parts = buf.split(/\r?\n\r?\n/)
buf = parts.pop() ?? ""
for (const raw of parts) {
if (!raw.trim() || raw.trim().startsWith(":")) continue
if (!raw.trim()) continue
const ev = parseSseBlock(raw)
if (ev.event === "sample" && ev.data) {
const parsed = JSON.parse(ev.data) as unknown
+3 -3
View File
@@ -12,7 +12,7 @@ export interface TrafficLiveSample {
function parseSseBlock(block: string): { event: string; data: string } {
let event = "message"
const dataLines: string[] = []
for (const line of block.split("\n")) {
for (const line of block.split(/\r?\n/)) {
if (line.startsWith("event:")) event = line.slice(6).trim()
else if (line.startsWith("data:")) dataLines.push(line.slice(5).trim())
}
@@ -74,10 +74,10 @@ export function useTrafficLive(opts: {
break
}
buf += decoder.decode(value, { stream: true })
const parts = buf.split("\n\n")
const parts = buf.split(/\r?\n\r?\n/)
buf = parts.pop() ?? ""
for (const raw of parts) {
if (!raw.trim() || raw.trim().startsWith(":")) continue
if (!raw.trim()) continue
const ev = parseSseBlock(raw)
if (ev.event === "sample" && ev.data) {
const parsed = JSON.parse(ev.data) as TrafficLiveSample