Skip to content
中文

parseJsonFrames ​

SUPPORT · function · Runtime value

Parse complete object frames under explicit count and size limits.

Only whitespace may appear outside frames; a stray closing brace is tolerated only up to maxExtraClosings, which covers transports that repeat the delimiter after the payload.

Import ​

ts
import { parseJsonFrames } from '@jangts/agent-core/json-transport';
js
import { parseJsonFrames } from '@jangts/agent-core/json-transport';

Other public entry points:@jangts/agent-core, @jangts/agent-core/types, @jangts/agent-core/json-transport, @jangts/agent-core/support.

Definition ​

Call ​

ts
parseJsonFrames(text: string, limits: JsonFrameLimits): Record<string, unknown>[]

Parse complete object frames under explicit count and size limits.

Only whitespace may appear outside frames; a stray closing brace is tolerated only up to maxExtraClosings, which covers transports that repeat the delimiter after the payload.

ParameterTypePassingDescription
textstringRequired—
limitsJsonFrameLimitsRequired—
Fields of limits
FieldTypeRequiredDescription
maxFramesnumberRequiredMaximum number of complete frames accepted.
maxExtraClosingsnumberRequiredStray closing braces tolerated outside frames, covering transports that repeat a delimiter.
maxFrameCharsnumber | undefinedOptionalOptional per-frame character cap so a single frame cannot amplify into an oversized parse.

Returns: Record<string, unknown>[].

Examples ​

Parse one SSE frame locally ​

Beginner · Node.js

ts
import { Support } from '@jangts/agent-core';
const frame = Support.encodeSseEvent({ event: 'status', data: JSON.stringify({ phase: 'thinking' }) });
const body = new Response(frame).body!;
for await (const event of Support.readSse(body)) console.log(event.event, event.data);
js
import { Support } from '@jangts/agent-core';
const frame = Support.encodeSseEvent({ event: 'status', data: JSON.stringify({ phase: 'thinking' }) });
const body = new Response(frame).body;
for await (const event of Support.readSse(body))
    console.log(event.event, event.data);

Producer waits for each event delivery ​

Configuration · Node.js

ts
import { Support } from '@jangts/agent-core';
const signal = new AbortController().signal;
const stream = Support.streamEvents<{ phase: string }>(async emit => {
  await emit({ phase: 'preparing' });
  await emit({ phase: 'complete' });
}, { signal });
for await (const event of stream) console.log(event.phase);
js
import { Support } from '@jangts/agent-core';
const signal = new AbortController().signal;
const stream = Support.streamEvents(async (emit) => {
    await emit({ phase: 'preparing' });
    await emit({ phase: 'complete' });
}, { signal });
for await (const event of stream)
    console.log(event.phase);

Explicitly limit JSON frame count and surrounding content ​

Extension · Node.js

ts
import { Support } from '@jangts/agent-core';
const text = '{"kind":"reply","answer":"服务正常"}';
console.log(Support.scanJsonObjectFrames(text));
console.log(Support.parseJsonFrames(text, { maxFrames: 1, maxExtraClosings: 0 }));
const sent: string[] = [];
await Support.writeSseFrame({
  writer: { write(frame) { sent.push(frame); return true; }, async waitForDrain() {} },
  frame: Support.encodeSseEvent({ event: 'answer', data: text }),
}, { signal: new AbortController().signal });
console.log(sent);
js
import { Support } from '@jangts/agent-core';
const text = '{"kind":"reply","answer":"服务正常"}';
console.log(Support.scanJsonObjectFrames(text));
console.log(Support.parseJsonFrames(text, { maxFrames: 1, maxExtraClosings: 0 }));
const sent = [];
await Support.writeSseFrame({
    writer: { write(frame) { sent.push(frame); return true; }, async waitForDrain() { } },
    frame: Support.encodeSseEvent({ event: 'answer', data: text }),
}, { signal: new AbortController().signal });
console.log(sent);

API reference, usage examples and developer guides.