cesr-ts 0.2.2 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +31 -3
- package/esm/src/adapters/async-iterable.js +9 -9
- package/esm/src/annotate/annotator.js +18 -10
- package/esm/src/annotate/comments.js +3 -6
- package/esm/src/annotate/render.js +123 -24
- package/esm/src/bench/parser-benchmark.js +134 -0
- package/esm/src/core/bytes.js +6 -0
- package/esm/src/core/errors.js +24 -0
- package/esm/src/core/parser-attachment-collector.js +154 -0
- package/esm/src/core/parser-constants.js +74 -0
- package/esm/src/core/parser-deferred-frames.js +73 -0
- package/esm/src/core/parser-engine.js +128 -505
- package/esm/src/core/parser-frame-parser.js +643 -0
- package/esm/src/core/parser-policy.js +137 -0
- package/esm/src/core/parser-stream-state.js +62 -0
- package/esm/src/core/recovery-diagnostics.js +25 -0
- package/esm/src/index.js +4 -0
- package/esm/src/parser/attachment-fallback-policy.js +142 -0
- package/esm/src/parser/group-dispatch.js +547 -233
- package/esm/src/primitives/counter.js +4 -5
- package/esm/src/primitives/mapper.js +126 -45
- package/esm/src/primitives/matter.js +1 -1
- package/esm/src/router/router-stub.js +6 -6
- package/esm/src/serder/serder.js +44 -7
- package/esm/src/serder/smell.js +2 -1
- package/esm/src/tables/counter-version-registry.js +201 -0
- package/esm/src/version.js +2 -2
- package/package.json +3 -1
- package/types/_dnt.polyfills.d.ts +5 -0
- package/types/_dnt.polyfills.d.ts.map +1 -1
- package/types/src/adapters/async-iterable.d.ts +2 -2
- package/types/src/adapters/async-iterable.d.ts.map +1 -1
- package/types/src/adapters/effection.d.ts +2 -2
- package/types/src/adapters/effection.d.ts.map +1 -1
- package/types/src/annotate/annotator.d.ts.map +1 -1
- package/types/src/annotate/comments.d.ts.map +1 -1
- package/types/src/annotate/render.d.ts +8 -2
- package/types/src/annotate/render.d.ts.map +1 -1
- package/types/src/annotate/types.d.ts +2 -2
- package/types/src/annotate/types.d.ts.map +1 -1
- package/types/src/bench/parser-benchmark.d.ts +70 -0
- package/types/src/bench/parser-benchmark.d.ts.map +1 -0
- package/types/src/core/bytes.d.ts +6 -0
- package/types/src/core/bytes.d.ts.map +1 -1
- package/types/src/core/errors.d.ts +10 -0
- package/types/src/core/errors.d.ts.map +1 -1
- package/types/src/core/parser-attachment-collector.d.ts +51 -0
- package/types/src/core/parser-attachment-collector.d.ts.map +1 -0
- package/types/src/core/parser-constants.d.ts +30 -0
- package/types/src/core/parser-constants.d.ts.map +1 -0
- package/types/src/core/parser-deferred-frames.d.ts +38 -0
- package/types/src/core/parser-deferred-frames.d.ts.map +1 -0
- package/types/src/core/parser-engine.d.ts +53 -44
- package/types/src/core/parser-engine.d.ts.map +1 -1
- package/types/src/core/parser-frame-parser.d.ts +89 -0
- package/types/src/core/parser-frame-parser.d.ts.map +1 -0
- package/types/src/core/parser-policy.d.ts +27 -0
- package/types/src/core/parser-policy.d.ts.map +1 -0
- package/types/src/core/parser-stream-state.d.ts +30 -0
- package/types/src/core/parser-stream-state.d.ts.map +1 -0
- package/types/src/core/recovery-diagnostics.d.ts +59 -0
- package/types/src/core/recovery-diagnostics.d.ts.map +1 -0
- package/types/src/core/types.d.ts +61 -7
- package/types/src/core/types.d.ts.map +1 -1
- package/types/src/index.d.ts +4 -0
- package/types/src/index.d.ts.map +1 -1
- package/types/src/parser/attachment-fallback-policy.d.ts +78 -0
- package/types/src/parser/attachment-fallback-policy.d.ts.map +1 -0
- package/types/src/parser/group-dispatch.d.ts +85 -15
- package/types/src/parser/group-dispatch.d.ts.map +1 -1
- package/types/src/primitives/aggor.d.ts +2 -2
- package/types/src/primitives/aggor.d.ts.map +1 -1
- package/types/src/primitives/blinder.d.ts +2 -2
- package/types/src/primitives/blinder.d.ts.map +1 -1
- package/types/src/primitives/counter.d.ts.map +1 -1
- package/types/src/primitives/mapper.d.ts +44 -1
- package/types/src/primitives/mapper.d.ts.map +1 -1
- package/types/src/primitives/mediar.d.ts +2 -2
- package/types/src/primitives/mediar.d.ts.map +1 -1
- package/types/src/primitives/sealer.d.ts +2 -2
- package/types/src/primitives/sealer.d.ts.map +1 -1
- package/types/src/router/router-stub.d.ts +5 -5
- package/types/src/router/router-stub.d.ts.map +1 -1
- package/types/src/serder/serder.d.ts +2 -2
- package/types/src/serder/serder.d.ts.map +1 -1
- package/types/src/serder/serdery.d.ts +2 -2
- package/types/src/serder/serdery.d.ts.map +1 -1
- package/types/src/serder/smell.d.ts.map +1 -1
- package/types/src/tables/counter-version-registry.d.ts +90 -0
- package/types/src/tables/counter-version-registry.d.ts.map +1 -0
- package/types/src/version.d.ts +2 -2
- package/types/src/version.d.ts.map +1 -1
|
@@ -1,5 +1,11 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { CesrMessage } from "../core/types.js";
|
|
2
2
|
import type { AnnotatedFrame, AnnotateOptions } from "./types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Render stream-level wrapper groups (GenericGroup/BodyWithAttachmentGroup)
|
|
5
|
+
* so denot round-trips preserve wrapper counters. Returns null when input does
|
|
6
|
+
* not start in a wrapper-oriented domain and caller should use frame rendering.
|
|
7
|
+
*/
|
|
8
|
+
export declare function renderWrapperAnnotatedStream(input: Uint8Array, options: Required<AnnotateOptions>): string | null;
|
|
3
9
|
/** Render parsed CESR frames into line-oriented, human-annotated text blocks. */
|
|
4
|
-
export declare function renderAnnotatedFrames(frames:
|
|
10
|
+
export declare function renderAnnotatedFrames(frames: CesrMessage[], options: Required<AnnotateOptions>): AnnotatedFrame[];
|
|
5
11
|
//# sourceMappingURL=render.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../../src/src/annotate/render.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../../src/src/annotate/render.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGpE,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAkflE;;;;GAIG;AACH,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,QAAQ,CAAC,eAAe,CAAC,GACjC,MAAM,GAAG,IAAI,CAaf;AAED,iFAAiF;AACjF,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,WAAW,EAAE,EACrB,OAAO,EAAE,QAAQ,CAAC,eAAe,CAAC,GACjC,cAAc,EAAE,CAElB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { CesrMessage } from "../core/types.js";
|
|
2
2
|
export interface AnnotateOptions {
|
|
3
3
|
commentMode?: "inline" | "above";
|
|
4
4
|
indent?: number;
|
|
@@ -9,7 +9,7 @@ export interface AnnotateOptions {
|
|
|
9
9
|
}
|
|
10
10
|
export interface AnnotatedFrame {
|
|
11
11
|
index: number;
|
|
12
|
-
frame:
|
|
12
|
+
frame: CesrMessage;
|
|
13
13
|
lines: string[];
|
|
14
14
|
}
|
|
15
15
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/src/annotate/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/src/annotate/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;IACpC,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { type ParserOptions } from "../core/parser-engine.js";
|
|
2
|
+
/**
|
|
3
|
+
* Benchmark configuration for parser throughput measurements.
|
|
4
|
+
*
|
|
5
|
+
* Boundary contract:
|
|
6
|
+
* - This configuration only controls execution shape (iterations/chunking/parser mode).
|
|
7
|
+
* - It must not mutate parser behavior beyond explicit `parserOptions`.
|
|
8
|
+
*/
|
|
9
|
+
export interface CesrParserBenchmarkOptions {
|
|
10
|
+
/** Number of measured parser runs. */
|
|
11
|
+
iterations?: number;
|
|
12
|
+
/** Number of warmup runs before measured runs. */
|
|
13
|
+
warmupIterations?: number;
|
|
14
|
+
/**
|
|
15
|
+
* Optional chunk size for simulated streaming.
|
|
16
|
+
*
|
|
17
|
+
* When unset or <= 0, the full stream is fed in one chunk.
|
|
18
|
+
*/
|
|
19
|
+
chunkSize?: number;
|
|
20
|
+
/** Parser behavior options to benchmark. */
|
|
21
|
+
parserOptions?: ParserOptions;
|
|
22
|
+
/**
|
|
23
|
+
* Whether any parse error frame should fail the benchmark run.
|
|
24
|
+
* Default: true.
|
|
25
|
+
*/
|
|
26
|
+
failOnParseError?: boolean;
|
|
27
|
+
}
|
|
28
|
+
export interface CesrParseRunSummary {
|
|
29
|
+
frameCount: number;
|
|
30
|
+
errorCount: number;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Stable benchmark result envelope consumed by CLI and maintainers.
|
|
34
|
+
*
|
|
35
|
+
* Invariants:
|
|
36
|
+
* - `totalBytes === bytesPerIteration * iterations`
|
|
37
|
+
* - rate metrics are derived from `elapsedMs` and must remain monotonic with work size.
|
|
38
|
+
*/
|
|
39
|
+
export interface CesrParserBenchmarkResult {
|
|
40
|
+
iterations: number;
|
|
41
|
+
warmupIterations: number;
|
|
42
|
+
chunkSize: number;
|
|
43
|
+
bytesPerIteration: number;
|
|
44
|
+
totalBytes: number;
|
|
45
|
+
totalFrames: number;
|
|
46
|
+
totalErrors: number;
|
|
47
|
+
elapsedMs: number;
|
|
48
|
+
avgIterationMs: number;
|
|
49
|
+
throughputBytesPerSec: number;
|
|
50
|
+
throughputMiBPerSec: number;
|
|
51
|
+
framesPerSec: number;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Execute one complete parser pass over the provided stream.
|
|
55
|
+
*
|
|
56
|
+
* Boundary contract:
|
|
57
|
+
* - Always feeds configured chunks and then flushes once.
|
|
58
|
+
* - Returns event counts only; callers own timing and aggregation.
|
|
59
|
+
*/
|
|
60
|
+
export declare function parseCesrStreamOnce(input: Uint8Array, options?: Pick<CesrParserBenchmarkOptions, "chunkSize" | "parserOptions">): CesrParseRunSummary;
|
|
61
|
+
/**
|
|
62
|
+
* Benchmark parser throughput across warmup + measured iterations.
|
|
63
|
+
*
|
|
64
|
+
* Invariants:
|
|
65
|
+
* - warmup runs are excluded from final metrics.
|
|
66
|
+
* - when `failOnParseError` is true, any parse error fails fast to prevent
|
|
67
|
+
* silently benchmarking degraded correctness.
|
|
68
|
+
*/
|
|
69
|
+
export declare function benchmarkCesrParser(input: Uint8Array, options?: CesrParserBenchmarkOptions): CesrParserBenchmarkResult;
|
|
70
|
+
//# sourceMappingURL=parser-benchmark.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser-benchmark.d.ts","sourceRoot":"","sources":["../../../src/src/bench/parser-benchmark.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAG5E;;;;;;GAMG;AACH,MAAM,WAAW,0BAA0B;IACzC,sCAAsC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4CAA4C;IAC5C,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,yBAAyB;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;CACtB;AAmED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,UAAU,EACjB,OAAO,GAAE,IAAI,CAAC,0BAA0B,EAAE,WAAW,GAAG,eAAe,CAAM,GAC5E,mBAAmB,CAcrB;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,UAAU,EACjB,OAAO,GAAE,0BAA+B,GACvC,yBAAyB,CA4D3B"}
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
export declare const encoder: TextEncoder;
|
|
2
2
|
export declare const decoder: TextDecoder;
|
|
3
|
+
/**
|
|
4
|
+
* Concatenates Uint8Array byte arrays into one byte array
|
|
5
|
+
*
|
|
6
|
+
* @param chunks chunks to concatenate
|
|
7
|
+
* @returns concatenated bytearray
|
|
8
|
+
*/
|
|
3
9
|
export declare function concatBytes(...chunks: Uint8Array[]): Uint8Array;
|
|
4
10
|
export declare function intToB64(value: number, length?: number): string;
|
|
5
11
|
export declare function b64ToInt(text: string): number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bytes.d.ts","sourceRoot":"","sources":["../../../src/src/core/bytes.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,aAAoB,CAAC;AACzC,eAAO,MAAM,OAAO,aAAoB,CAAC;AAIzC,wBAAgB,WAAW,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,GAAG,UAAU,CAS/D;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,SAAI,GAAG,MAAM,CAc1D;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAU7C;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAGlD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAQlD;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAIpD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAMtE;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,GAAG,UAAU,CAEzE"}
|
|
1
|
+
{"version":3,"file":"bytes.d.ts","sourceRoot":"","sources":["../../../src/src/core/bytes.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,aAAoB,CAAC;AACzC,eAAO,MAAM,OAAO,aAAoB,CAAC;AAIzC;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,GAAG,UAAU,CAS/D;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,SAAI,GAAG,MAAM,CAc1D;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAU7C;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAGlD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAQlD;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE3C;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAIpD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAMtE;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,GAAG,UAAU,CAEzE"}
|
|
@@ -18,4 +18,14 @@ export declare class GroupSizeError extends ParserError {
|
|
|
18
18
|
}
|
|
19
19
|
export declare class DeserializeError extends ParserError {
|
|
20
20
|
}
|
|
21
|
+
/** Failure while constructing syntax artifacts from token bytes. */
|
|
22
|
+
export declare class SyntaxParseError extends ParserError {
|
|
23
|
+
readonly cause?: Error | undefined;
|
|
24
|
+
constructor(message: string, cause?: Error | undefined, offset?: number, context?: string);
|
|
25
|
+
}
|
|
26
|
+
/** Failure while interpreting syntax artifacts into semantic fields. */
|
|
27
|
+
export declare class SemanticInterpretationError extends ParserError {
|
|
28
|
+
readonly cause?: Error | undefined;
|
|
29
|
+
constructor(message: string, cause?: Error | undefined, offset?: number, context?: string);
|
|
30
|
+
}
|
|
21
31
|
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/src/core/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,WAAY,SAAQ,KAAK;aAGlB,MAAM,CAAC,EAAE,MAAM;aACf,OAAO,CAAC,EAAE,MAAM;gBAFhC,OAAO,EAAE,MAAM,EACC,MAAM,CAAC,EAAE,MAAM,YAAA,EACf,OAAO,CAAC,EAAE,MAAM,YAAA;CAKnC;AAED,qBAAa,aAAc,SAAQ,WAAW;aAE1B,MAAM,EAAE,MAAM;aACd,SAAS,EAAE,MAAM;gBADjB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjC,MAAM,CAAC,EAAE,MAAM;CAIlB;AAED,qBAAa,cAAe,SAAQ,WAAW;CAAG;AAClD,qBAAa,YAAa,SAAQ,WAAW;CAAG;AAChD,qBAAa,gBAAiB,SAAQ,WAAW;CAAG;AACpD,qBAAa,cAAe,SAAQ,WAAW;CAAG;AAClD,qBAAa,gBAAiB,SAAQ,WAAW;CAAG"}
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/src/core/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,WAAY,SAAQ,KAAK;aAGlB,MAAM,CAAC,EAAE,MAAM;aACf,OAAO,CAAC,EAAE,MAAM;gBAFhC,OAAO,EAAE,MAAM,EACC,MAAM,CAAC,EAAE,MAAM,YAAA,EACf,OAAO,CAAC,EAAE,MAAM,YAAA;CAKnC;AAED,qBAAa,aAAc,SAAQ,WAAW;aAE1B,MAAM,EAAE,MAAM;aACd,SAAS,EAAE,MAAM;gBADjB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjC,MAAM,CAAC,EAAE,MAAM;CAIlB;AAED,qBAAa,cAAe,SAAQ,WAAW;CAAG;AAClD,qBAAa,YAAa,SAAQ,WAAW;CAAG;AAChD,qBAAa,gBAAiB,SAAQ,WAAW;CAAG;AACpD,qBAAa,cAAe,SAAQ,WAAW;CAAG;AAClD,qBAAa,gBAAiB,SAAQ,WAAW;CAAG;AACpD,oEAAoE;AACpE,qBAAa,gBAAiB,SAAQ,WAAW;aAGpB,KAAK,CAAC,EAAE,KAAK;gBADtC,OAAO,EAAE,MAAM,EACU,KAAK,CAAC,EAAE,KAAK,YAAA,EACtC,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM;CAInB;AACD,wEAAwE;AACxE,qBAAa,2BAA4B,SAAQ,WAAW;aAG/B,KAAK,CAAC,EAAE,KAAK;gBADtC,OAAO,EAAE,MAAM,EACU,KAAK,CAAC,EAAE,KAAK,YAAA,EACtC,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM;CAInB"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { AttachmentVersionFallbackPolicy } from "../parser/group-dispatch.js";
|
|
2
|
+
import type { Versionage } from "../tables/table-types.js";
|
|
3
|
+
import type { FrameBoundaryPolicy } from "./parser-policy.js";
|
|
4
|
+
import type { RecoveryDiagnosticObserver } from "./recovery-diagnostics.js";
|
|
5
|
+
import type { AttachmentGroup, CesrMessage } from "./types.js";
|
|
6
|
+
/** Dependency-injected attachment collection policies and hooks. */
|
|
7
|
+
interface AttachmentCollectorOptions {
|
|
8
|
+
frameBoundaryPolicy: FrameBoundaryPolicy;
|
|
9
|
+
attachmentVersionFallbackPolicy: AttachmentVersionFallbackPolicy;
|
|
10
|
+
recoveryDiagnosticObserver?: RecoveryDiagnosticObserver;
|
|
11
|
+
isFrameBoundaryAhead: (input: Uint8Array, version: Versionage, cold: "txt" | "bny") => boolean;
|
|
12
|
+
}
|
|
13
|
+
/** Outcome for top-level trailing attachment collection. */
|
|
14
|
+
export interface CollectAttachmentsResult {
|
|
15
|
+
attachments: AttachmentGroup[];
|
|
16
|
+
consumed: number;
|
|
17
|
+
pausedForShortage: boolean;
|
|
18
|
+
}
|
|
19
|
+
/** Outcome for pending-frame continuation parsing. */
|
|
20
|
+
export interface ResumePendingResult {
|
|
21
|
+
consumed: number;
|
|
22
|
+
emitPending: boolean;
|
|
23
|
+
shouldContinue: boolean;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Parses and appends attachment groups for both:
|
|
27
|
+
* - normal trailing-attachment collection after frame start parse
|
|
28
|
+
* - pending-frame continuation after shortage pauses
|
|
29
|
+
*/
|
|
30
|
+
export declare class AttachmentCollector {
|
|
31
|
+
private readonly frameBoundaryPolicy;
|
|
32
|
+
private readonly attachmentVersionFallbackPolicy;
|
|
33
|
+
private readonly recoveryDiagnosticObserver?;
|
|
34
|
+
private readonly isFrameBoundaryAhead;
|
|
35
|
+
constructor(options: AttachmentCollectorOptions);
|
|
36
|
+
/**
|
|
37
|
+
* Collect attachments from the current stream head until a frame boundary
|
|
38
|
+
* (including `msg` message-domain frame start) or shortage pause is reached.
|
|
39
|
+
*/
|
|
40
|
+
collectTrailingAttachments(input: Uint8Array, version: Versionage, streamVersion: Versionage, seed?: AttachmentGroup[]): CollectAttachmentsResult;
|
|
41
|
+
/**
|
|
42
|
+
* Resume attachment parsing for a pending top-level frame.
|
|
43
|
+
*
|
|
44
|
+
* Emits no events directly; parser orchestration decides when to emit pending.
|
|
45
|
+
*/
|
|
46
|
+
resumePendingFrame(input: Uint8Array, pendingFrame: CesrMessage, version: Versionage, streamVersion: Versionage): ResumePendingResult;
|
|
47
|
+
/** Fast-forward consecutive annotation separator bytes from a local offset. */
|
|
48
|
+
private consumeLeadingAno;
|
|
49
|
+
}
|
|
50
|
+
export {};
|
|
51
|
+
//# sourceMappingURL=parser-attachment-collector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser-attachment-collector.d.ts","sourceRoot":"","sources":["../../../src/src/core/parser-attachment-collector.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,+BAA+B,EAChC,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAG3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAC5E,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE/D,oEAAoE;AACpE,UAAU,0BAA0B;IAClC,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,+BAA+B,EAAE,+BAA+B,CAAC;IACjE,0BAA0B,CAAC,EAAE,0BAA0B,CAAC;IACxD,oBAAoB,EAAE,CACpB,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,UAAU,EACnB,IAAI,EAAE,KAAK,GAAG,KAAK,KAChB,OAAO,CAAC;CACd;AAED,4DAA4D;AAC5D,MAAM,WAAW,wBAAwB;IACvC,WAAW,EAAE,eAAe,EAAE,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED,sDAAsD;AACtD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,OAAO,CAAC;CACzB;AAED;;;;GAIG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAsB;IAC1D,OAAO,CAAC,QAAQ,CAAC,+BAA+B,CACd;IAClC,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAA6B;IACzE,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAIxB;gBAED,OAAO,EAAE,0BAA0B;IAQ/C;;;OAGG;IACH,0BAA0B,CACxB,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,UAAU,EACnB,aAAa,EAAE,UAAU,EACzB,IAAI,GAAE,eAAe,EAAO,GAC3B,wBAAwB;IAiE3B;;;;OAIG;IACH,kBAAkB,CAChB,KAAK,EAAE,UAAU,EACjB,YAAY,EAAE,WAAW,EACzB,OAAO,EAAE,UAAU,EACnB,aAAa,EAAE,UAAU,GACxB,mBAAmB;IAqEtB,+EAA+E;IAC/E,OAAO,CAAC,iBAAiB;CAO1B"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { Counter } from "../primitives/counter.js";
|
|
2
|
+
import type { Versionage } from "../tables/table-types.js";
|
|
3
|
+
/** Default parser version context when no explicit selector is present. */
|
|
4
|
+
export declare const DEFAULT_VERSION: Versionage;
|
|
5
|
+
/** Native map-body counter codes that permit interleaved label parsing. */
|
|
6
|
+
export declare const MAP_BODY_CODES: Set<string>;
|
|
7
|
+
/** Counter code for stream or nested genus-version selector tokens. */
|
|
8
|
+
export declare const GENUS_VERSION_CODE: string;
|
|
9
|
+
/** True when counter begins a top-level frame boundary domain. */
|
|
10
|
+
export declare function isFrameBoundaryCounter(counter: Counter): boolean;
|
|
11
|
+
/** Counter names supported as frame starts in CESR-native domain. */
|
|
12
|
+
export declare const FRAME_START_GROUP_NAMES: Set<string>;
|
|
13
|
+
/** Wrapper counters whose payload encloses one full body+attachments frame. */
|
|
14
|
+
export declare const BODY_WITH_ATTACHMENT_GROUP_NAMES: Set<string>;
|
|
15
|
+
/** Non-native body counters whose payload is a texter-wrapped message body. */
|
|
16
|
+
export declare const NON_NATIVE_BODY_GROUP_NAMES: Set<string>;
|
|
17
|
+
/** Native body counters (fixed-field or map-body forms). */
|
|
18
|
+
export declare const NATIVE_BODY_GROUP_NAMES: Set<string>;
|
|
19
|
+
/** Generic counters whose payload contains one or more enclosed frames. */
|
|
20
|
+
export declare const GENERIC_GROUP_NAMES: Set<string>;
|
|
21
|
+
/** Domain-sensitive token size helper (qb64 vs qb2). */
|
|
22
|
+
export declare function tokenSize(token: {
|
|
23
|
+
fullSize: number;
|
|
24
|
+
fullSizeB2: number;
|
|
25
|
+
}, cold: "txt" | "bny"): number;
|
|
26
|
+
/** Domain-sensitive counter unit (quadlet count for txt, triplet count for bny). */
|
|
27
|
+
export declare function quadletUnit(cold: "txt" | "bny"): number;
|
|
28
|
+
/** Attachment parsing domains supported by the parser. */
|
|
29
|
+
export declare function isAttachmentDomain(cold: string): cold is "txt" | "bny";
|
|
30
|
+
//# sourceMappingURL=parser-constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser-constants.d.ts","sourceRoot":"","sources":["../../../src/src/core/parser-constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAExD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE3D,2EAA2E;AAC3E,eAAO,MAAM,eAAe,EAAE,UAAmC,CAAC;AAElE,2EAA2E;AAC3E,eAAO,MAAM,cAAc,aAGzB,CAAC;AAEH,uEAAuE;AACvE,eAAO,MAAM,kBAAkB,QAAgC,CAAC;AAgBhE,kEAAkE;AAClE,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAEhE;AAED,qEAAqE;AACrE,eAAO,MAAM,uBAAuB,aAWlC,CAAC;AAEH,+EAA+E;AAC/E,eAAO,MAAM,gCAAgC,aAG3C,CAAC;AAEH,+EAA+E;AAC/E,eAAO,MAAM,2BAA2B,aAGtC,CAAC;AAEH,4DAA4D;AAC5D,eAAO,MAAM,uBAAuB,aAKlC,CAAC;AAEH,2EAA2E;AAC3E,eAAO,MAAM,mBAAmB,aAG9B,CAAC;AAEH,wDAAwD;AACxD,wBAAgB,SAAS,CACvB,KAAK,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,EAC/C,IAAI,EAAE,KAAK,GAAG,KAAK,GAClB,MAAM,CAER;AAED,oFAAoF;AACpF,wBAAgB,WAAW,CAAC,IAAI,EAAE,KAAK,GAAG,KAAK,GAAG,MAAM,CAEvD;AAED,0DAA0D;AAC1D,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,IAAI,KAAK,GAAG,KAAK,CAEtE"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { Versionage } from "../tables/table-types.js";
|
|
2
|
+
import type { CesrFrame, CesrMessage } from "./types.js";
|
|
3
|
+
/** Pending top-level frame state awaiting continuation parsing. */
|
|
4
|
+
export interface PendingFrameState {
|
|
5
|
+
frame: CesrMessage;
|
|
6
|
+
version: Versionage;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Manages deferred frame emission lifecycle for parser orchestration.
|
|
10
|
+
*
|
|
11
|
+
* Contract reminder:
|
|
12
|
+
* - `pendingFrame` is older than any `queuedFrames`.
|
|
13
|
+
* - flush order must preserve stream encounter order.
|
|
14
|
+
*/
|
|
15
|
+
export declare class DeferredFrameLifecycle {
|
|
16
|
+
private pendingFrame;
|
|
17
|
+
private queuedFrames;
|
|
18
|
+
/** Current pending top-level frame continuation, if any. */
|
|
19
|
+
get pending(): PendingFrameState | null;
|
|
20
|
+
/** Whether enclosed deferred frames are queued for emission. */
|
|
21
|
+
hasQueued(): boolean;
|
|
22
|
+
/** Store a pending top-level frame continuation. */
|
|
23
|
+
setPending(frame: CesrMessage, version: Versionage): void;
|
|
24
|
+
/** Clear pending top-level frame continuation state. */
|
|
25
|
+
clearPending(): void;
|
|
26
|
+
/** Append enclosed frames parsed from one bounded GenericGroup payload. */
|
|
27
|
+
enqueueQueued(frames: CesrMessage[]): void;
|
|
28
|
+
/** Emit next queued enclosed frame (FIFO) when no pending frame remains. */
|
|
29
|
+
shiftQueued(): CesrMessage | undefined;
|
|
30
|
+
/**
|
|
31
|
+
* Flush deferred frames in normative order: pending first, queued next.
|
|
32
|
+
* Buffer-remainder shortage handling is outside this collaborator.
|
|
33
|
+
*/
|
|
34
|
+
flushDeferred(): CesrFrame[];
|
|
35
|
+
/** Clear all deferred frame lifecycle state. */
|
|
36
|
+
reset(): void;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=parser-deferred-frames.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser-deferred-frames.d.ts","sourceRoot":"","sources":["../../../src/src/core/parser-deferred-frames.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzD,mEAAmE;AACnE,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,WAAW,CAAC;IACnB,OAAO,EAAE,UAAU,CAAC;CACrB;AAED;;;;;;GAMG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,YAAY,CAAkC;IACtD,OAAO,CAAC,YAAY,CAAqB;IAEzC,4DAA4D;IAC5D,IAAI,OAAO,IAAI,iBAAiB,GAAG,IAAI,CAEtC;IAED,gEAAgE;IAChE,SAAS,IAAI,OAAO;IAIpB,oDAAoD;IACpD,UAAU,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,GAAG,IAAI;IAIzD,wDAAwD;IACxD,YAAY,IAAI,IAAI;IAIpB,2EAA2E;IAC3E,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI;IAO1C,4EAA4E;IAC5E,WAAW,IAAI,WAAW,GAAG,SAAS;IAItC;;;OAGG;IACH,aAAa,IAAI,SAAS,EAAE;IAkB5B,gDAAgD;IAChD,KAAK,IAAI,IAAI;CAId"}
|
|
@@ -1,58 +1,67 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type
|
|
1
|
+
import type { CesrFrame } from "./types.js";
|
|
2
|
+
import { type AttachmentDispatchOptions, type AttachmentVersionFallbackPolicy, type VersionFallbackInfo } from "../parser/group-dispatch.js";
|
|
3
|
+
import { type FrameBoundaryPolicy } from "./parser-policy.js";
|
|
4
|
+
import { type RecoveryDiagnosticObserver } from "./recovery-diagnostics.js";
|
|
3
5
|
export interface ParserOptions {
|
|
6
|
+
/** Legacy framed toggle; used only when `frameBoundaryPolicy` is not injected. */
|
|
4
7
|
framed?: boolean;
|
|
8
|
+
/**
|
|
9
|
+
* Legacy strict/compat selector; used only when
|
|
10
|
+
* `attachmentVersionFallbackPolicy` is not injected.
|
|
11
|
+
*/
|
|
5
12
|
attachmentDispatchMode?: AttachmentDispatchOptions["mode"];
|
|
13
|
+
/** Legacy fallback observer; adapted from structured diagnostics events. */
|
|
6
14
|
onAttachmentVersionFallback?: (info: VersionFallbackInfo) => void;
|
|
15
|
+
/** Structured recovery diagnostics observer (preferred observability path). */
|
|
16
|
+
onRecoveryDiagnostic?: RecoveryDiagnosticObserver;
|
|
17
|
+
/** Explicit frame-boundary strategy override (preferred for new integrations). */
|
|
18
|
+
frameBoundaryPolicy?: FrameBoundaryPolicy;
|
|
19
|
+
/**
|
|
20
|
+
* Explicit attachment fallback strategy override.
|
|
21
|
+
*
|
|
22
|
+
* When provided, this supersedes `attachmentDispatchMode` and
|
|
23
|
+
* `onAttachmentVersionFallback`.
|
|
24
|
+
*/
|
|
25
|
+
attachmentVersionFallbackPolicy?: AttachmentVersionFallbackPolicy;
|
|
7
26
|
}
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
27
|
+
/**
|
|
28
|
+
* Streaming CESR parser for message-domain and CESR-native body-group streams.
|
|
29
|
+
* Handles chunk boundaries, pending frames, and attachment continuation.
|
|
30
|
+
*/
|
|
31
|
+
export declare class CesrParser {
|
|
32
|
+
/**
|
|
33
|
+
* Parser state contract (normative):
|
|
34
|
+
* `docs/design-docs/CESR_PARSER_STATE_MACHINE_CONTRACT.md`
|
|
35
|
+
*/
|
|
36
|
+
private readonly frameBoundaryPolicy;
|
|
37
|
+
private readonly stream;
|
|
38
|
+
private readonly deferred;
|
|
39
|
+
private readonly frameParser;
|
|
40
|
+
private readonly attachmentCollector;
|
|
41
|
+
private readonly recoveryDiagnosticObserver?;
|
|
42
|
+
/**
|
|
43
|
+
* Compose parser collaborators with injected policy strategies.
|
|
44
|
+
*
|
|
45
|
+
* Policy precedence:
|
|
46
|
+
* 1) explicit policy objects from `ParserOptions`
|
|
47
|
+
* 2) derived defaults from legacy `framed` and strict/compat options
|
|
48
|
+
*/
|
|
14
49
|
constructor(options?: ParserOptions);
|
|
15
50
|
/** Append bytes and emit any complete parse events. */
|
|
16
|
-
feed(chunk: Uint8Array):
|
|
51
|
+
feed(chunk: Uint8Array): CesrFrame[];
|
|
17
52
|
/** Flush pending state at end-of-stream, emitting frame/error if needed. */
|
|
18
|
-
flush():
|
|
53
|
+
flush(): CesrFrame[];
|
|
19
54
|
reset(): void;
|
|
20
55
|
/**
|
|
21
|
-
* Core streaming loop.
|
|
22
|
-
*
|
|
23
|
-
*
|
|
56
|
+
* Core streaming loop. Emit pending frames, then queued frames, then new base frame with trailing attachments.
|
|
57
|
+
* Contract invariants:
|
|
58
|
+
* - `pendingFrame` is always resumed before any queued enclosed frame emits.
|
|
59
|
+
* - `queuedFrames` are emitted before starting a new parse from `buffer`.
|
|
24
60
|
*/
|
|
25
61
|
private drain;
|
|
26
|
-
private resumePendingFrame;
|
|
27
|
-
private consume;
|
|
28
|
-
private consumeLeadingAno;
|
|
29
|
-
/**
|
|
30
|
-
* Parse a single top-level frame start from current buffer head.
|
|
31
|
-
* Supports message-domain serders and CESR-native body groups.
|
|
32
|
-
*/
|
|
33
|
-
private parseFrame;
|
|
34
|
-
/** Parse wrapped body+attachments payloads as a complete nested frame. */
|
|
35
|
-
private parseBodyWithAttachmentGroup;
|
|
36
|
-
/** Parse a non-native body group; keep opaque fallback when serder reap fails. */
|
|
37
|
-
private parseNonNativeBodyGroup;
|
|
38
|
-
/** Parse fixed/map native body groups and extract semantic native fields. */
|
|
39
|
-
private parseNativeBodyGroup;
|
|
40
|
-
/** Decode genus-version counter suffix to active CESR version. */
|
|
41
|
-
private decodeVersionCounter;
|
|
42
|
-
/**
|
|
43
|
-
* Best-effort native metadata extraction.
|
|
44
|
-
* This is intentionally advisory and may recover instead of failing hard.
|
|
45
|
-
*/
|
|
46
|
-
private extractNativeMetadata;
|
|
47
|
-
/** Skip consecutive native label tokens (V/W) from an offset. */
|
|
48
|
-
private skipNativeLabelers;
|
|
49
|
-
/** Strict native field extraction for annotation and higher-level processing. */
|
|
50
|
-
private extractNativeFields;
|
|
51
|
-
/** Counter probe with ordered version fallback; throws on shortage. */
|
|
52
|
-
private tryParseCounter;
|
|
53
|
-
/** Parse one complete frame plus optional attachments from a standalone slice. */
|
|
54
|
-
private parseCompleteFrame;
|
|
55
62
|
}
|
|
56
|
-
|
|
57
|
-
export declare function
|
|
63
|
+
/** CESR parser factory function. */
|
|
64
|
+
export declare function createParser(options?: ParserOptions): CesrParser;
|
|
65
|
+
/** Parse a buffer of bytes into a list of frames. */
|
|
66
|
+
export declare function parseBytes(bytes: Uint8Array, options?: ParserOptions): CesrFrame[];
|
|
58
67
|
//# sourceMappingURL=parser-engine.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser-engine.d.ts","sourceRoot":"","sources":["../../../src/src/core/parser-engine.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"parser-engine.d.ts","sourceRoot":"","sources":["../../../src/src/core/parser-engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAe,MAAM,YAAY,CAAC;AACzD,OAAO,EACL,KAAK,yBAAyB,EAC9B,KAAK,+BAA+B,EAEpC,KAAK,mBAAmB,EACzB,MAAM,6BAA6B,CAAC;AAOrC,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAEL,KAAK,0BAA0B,EAChC,MAAM,2BAA2B,CAAC;AAEnC,MAAM,WAAW,aAAa;IAC5B,kFAAkF;IAClF,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,sBAAsB,CAAC,EAAE,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAC3D,4EAA4E;IAC5E,2BAA2B,CAAC,EAAE,CAAC,IAAI,EAAE,mBAAmB,KAAK,IAAI,CAAC;IAClE,+EAA+E;IAC/E,oBAAoB,CAAC,EAAE,0BAA0B,CAAC;IAClD,kFAAkF;IAClF,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C;;;;;OAKG;IACH,+BAA+B,CAAC,EAAE,+BAA+B,CAAC;CACnE;AAED;;;GAGG;AACH,qBAAa,UAAU;IACrB;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAsB;IAC1D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAC3C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAyB;IAClD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAsB;IAC1D,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAA6B;IAEzE;;;;;;OAMG;gBACS,OAAO,GAAE,aAAkB;IAgCvC,uDAAuD;IACvD,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,SAAS,EAAE;IAKpC,4EAA4E;IAC5E,KAAK,IAAI,SAAS,EAAE;IAmBpB,KAAK,IAAI,IAAI;IAKb;;;;;OAKG;IACH,OAAO,CAAC,KAAK;CAoHd;AAED,oCAAoC;AACpC,wBAAgB,YAAY,CAAC,OAAO,GAAE,aAAkB,GAAG,UAAU,CAEpE;AAED,qDAAqD;AACrD,wBAAgB,UAAU,CACxB,KAAK,EAAE,UAAU,EACjB,OAAO,GAAE,aAAkB,GAC1B,SAAS,EAAE,CAGb"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import type { AttachmentVersionFallbackPolicy } from "../parser/group-dispatch.js";
|
|
2
|
+
import type { Versionage } from "../tables/table-types.js";
|
|
3
|
+
import type { RecoveryDiagnosticObserver } from "./recovery-diagnostics.js";
|
|
4
|
+
import type { FrameBoundaryPolicy } from "./parser-policy.js";
|
|
5
|
+
import type { CesrMessage } from "./types.js";
|
|
6
|
+
/** Dependency-injected options for frame parsing behavior and hooks. */
|
|
7
|
+
interface FrameParserOptions {
|
|
8
|
+
frameBoundaryPolicy: FrameBoundaryPolicy;
|
|
9
|
+
attachmentVersionFallbackPolicy: AttachmentVersionFallbackPolicy;
|
|
10
|
+
onEnclosedFrames: (frames: CesrMessage[]) => void;
|
|
11
|
+
recoveryDiagnosticObserver?: RecoveryDiagnosticObserver;
|
|
12
|
+
}
|
|
13
|
+
/** Parsed frame-start result consumed by top-level parser orchestration. */
|
|
14
|
+
export interface ParsedFrameStart {
|
|
15
|
+
frame: CesrMessage;
|
|
16
|
+
consumed: number;
|
|
17
|
+
version: Versionage;
|
|
18
|
+
streamVersion: Versionage;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Parses frame starts and bounded frame payload structures.
|
|
22
|
+
*
|
|
23
|
+
* Responsibilities:
|
|
24
|
+
* - resolve frame-start forms (`msg`, native/body groups, wrappers)
|
|
25
|
+
* - preserve version-scope semantics for stream and nested payloads
|
|
26
|
+
* - emit enclosed GenericGroup siblings through callback for deferred handling
|
|
27
|
+
*/
|
|
28
|
+
export declare class FrameParser {
|
|
29
|
+
private readonly frameBoundaryPolicy;
|
|
30
|
+
private readonly attachmentVersionFallbackPolicy;
|
|
31
|
+
private readonly onEnclosedFrames;
|
|
32
|
+
private readonly recoveryDiagnosticObserver?;
|
|
33
|
+
constructor(options: FrameParserOptions);
|
|
34
|
+
/** Probe whether the next token is a top-level frame boundary counter. */
|
|
35
|
+
isFrameBoundaryAhead(input: Uint8Array, version: Versionage, cold: "txt" | "bny"): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Parse one frame start from the current head.
|
|
38
|
+
* Does not parse trailing top-level attachments.
|
|
39
|
+
*/
|
|
40
|
+
parseFrame(input: Uint8Array, inheritedVersion?: Versionage): ParsedFrameStart;
|
|
41
|
+
/**
|
|
42
|
+
* Parse frame-start tokens into a syntax artifact.
|
|
43
|
+
*
|
|
44
|
+
* Non-goal: this is not a global two-pass parser rewrite. It only separates
|
|
45
|
+
* the highest-coupling frame-start syntax extraction from semantic dispatch.
|
|
46
|
+
*/
|
|
47
|
+
private parseFrameStartSyntax;
|
|
48
|
+
/** Interpret frame-start syntax artifacts into semantic parse behavior. */
|
|
49
|
+
private interpretFrameStartSyntax;
|
|
50
|
+
/** Parse nested `BodyWithAttachmentGroup` payload as one complete enclosed frame. */
|
|
51
|
+
private parseBodyWithAttachmentGroup;
|
|
52
|
+
/**
|
|
53
|
+
* Parse `NonNativeBodyGroup` payload, preserving opaque-body fallback behavior
|
|
54
|
+
* when Serder decode is not possible.
|
|
55
|
+
* Returns only a body object (Serder) with no attachments.
|
|
56
|
+
*/
|
|
57
|
+
private parseNonNativeBodyGroup;
|
|
58
|
+
/** Parse native fixed/map body group and extract metadata/native fields. */
|
|
59
|
+
private parseNativeBodyGroup;
|
|
60
|
+
/**
|
|
61
|
+
* Parse bounded `GenericGroup` payload into enclosed frames.
|
|
62
|
+
* Returns first frame and reports remaining siblings via callback.
|
|
63
|
+
*/
|
|
64
|
+
private parseGenericGroup;
|
|
65
|
+
/** Parse all enclosed frames inside a bounded payload slice, in order. */
|
|
66
|
+
private parseFrameSequence;
|
|
67
|
+
/** Parse one complete frame from a bounded slice, including trailing attachments. */
|
|
68
|
+
private parseCompleteFrame;
|
|
69
|
+
/** Decode a genus-version counter token into major/minor Versionage values. */
|
|
70
|
+
private decodeVersionCounter;
|
|
71
|
+
/** Build native-body syntax artifacts used by semantic interpretation phase. */
|
|
72
|
+
private parseNativeBodySyntax;
|
|
73
|
+
/** Parse advisory native metadata tokens without semantic projection. */
|
|
74
|
+
private parseNativeMetadataSyntax;
|
|
75
|
+
/** Interpret advisory metadata syntax into projected body metadata fields. */
|
|
76
|
+
private interpretNativeMetadataSyntax;
|
|
77
|
+
/** Parse native field tokens without resolving label/value pairing semantics. */
|
|
78
|
+
private parseNativeFieldSyntax;
|
|
79
|
+
/** Interpret native field syntax into semantic fields with label/value pairing. */
|
|
80
|
+
private interpretNativeFieldSyntax;
|
|
81
|
+
/** Skip consecutive labeler tokens in native map-body parsing context. */
|
|
82
|
+
private skipNativeLabelers;
|
|
83
|
+
/** Probe parseCounter with ordered major-version fallback. */
|
|
84
|
+
private tryParseCounter;
|
|
85
|
+
/** Resolve a valid frame-start counter, preferring current stream major version. */
|
|
86
|
+
private resolveFrameStartCounter;
|
|
87
|
+
}
|
|
88
|
+
export {};
|
|
89
|
+
//# sourceMappingURL=parser-frame-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser-frame-parser.d.ts","sourceRoot":"","sources":["../../../src/src/core/parser-frame-parser.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,+BAA+B,EAChC,MAAM,6BAA6B,CAAC;AAarC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAG3D,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAuB5E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,wEAAwE;AACxE,UAAU,kBAAkB;IAC1B,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,+BAA+B,EAAE,+BAA+B,CAAC;IACjE,gBAAgB,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC;IAClD,0BAA0B,CAAC,EAAE,0BAA0B,CAAC;CACzD;AAED,4EAA4E;AAC5E,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,WAAW,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,UAAU,CAAC;IACpB,aAAa,EAAE,UAAU,CAAC;CAC3B;AAoED;;;;;;;GAOG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAsB;IAC1D,OAAO,CAAC,QAAQ,CAAC,+BAA+B,CACd;IAClC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAkC;IACnE,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAA6B;gBAE7D,OAAO,EAAE,kBAAkB;IAQvC,0EAA0E;IAC1E,oBAAoB,CAClB,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,UAAU,EACnB,IAAI,EAAE,KAAK,GAAG,KAAK,GAClB,OAAO;IAKV;;;OAGG;IACH,UAAU,CACR,KAAK,EAAE,UAAU,EACjB,gBAAgB,GAAE,UAA4B,GAC7C,gBAAgB;IAKnB;;;;;OAKG;IACH,OAAO,CAAC,qBAAqB;IA4G7B,2EAA2E;IAC3E,OAAO,CAAC,yBAAyB;IA+FjC,qFAAqF;IACrF,OAAO,CAAC,4BAA4B;IA6BpC;;;;OAIG;IACH,OAAO,CAAC,uBAAuB;IAkD/B,4EAA4E;IAC5E,OAAO,CAAC,oBAAoB;IAgD5B;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAoCzB,0EAA0E;IAC1E,OAAO,CAAC,kBAAkB;IAuE1B,qFAAqF;IACrF,OAAO,CAAC,kBAAkB;IAqD1B,+EAA+E;IAC/E,OAAO,CAAC,oBAAoB;IAa5B,gFAAgF;IAChF,OAAO,CAAC,qBAAqB;IAoC7B,yEAAyE;IACzE,OAAO,CAAC,yBAAyB;IAuCjC,8EAA8E;IAC9E,OAAO,CAAC,6BAA6B;IAmBrC,iFAAiF;IACjF,OAAO,CAAC,sBAAsB;IA8D9B,mFAAmF;IACnF,OAAO,CAAC,0BAA0B;IA6ClC,0EAA0E;IAC1E,OAAO,CAAC,kBAAkB;IAgB1B,8DAA8D;IAC9D,OAAO,CAAC,eAAe;IA6BvB,oFAAoF;IACpF,OAAO,CAAC,wBAAwB;CA8CjC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Strategy interface for frame-boundary and emission cadence behavior.
|
|
3
|
+
*
|
|
4
|
+
* Implementations encapsulate framed/unframed decisions so parser collaborators
|
|
5
|
+
* can delegate policy checks without branching on raw booleans.
|
|
6
|
+
*/
|
|
7
|
+
export interface FrameBoundaryPolicy {
|
|
8
|
+
/** Whether one queued-frame emission should end the current drain cycle. */
|
|
9
|
+
shouldStopAfterQueuedFrameEmission(): boolean;
|
|
10
|
+
/** Whether one completed frame emission should end the current drain cycle. */
|
|
11
|
+
shouldStopAfterCompletedFrameEmission(): boolean;
|
|
12
|
+
/** Whether one collected attachment group should end local collection loops. */
|
|
13
|
+
shouldStopAfterAttachmentGroupCollection(): boolean;
|
|
14
|
+
/** Whether pending continuation should emit after one attachment append. */
|
|
15
|
+
shouldEmitPendingAfterAttachmentResume(): boolean;
|
|
16
|
+
/** Whether a body-only frame at end-of-buffer should be deferred as pending. */
|
|
17
|
+
shouldDeferBodyOnlyFrame(attachmentCount: number, remainingBufferLength: number): boolean;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Build default frame-boundary strategy from legacy parser options.
|
|
21
|
+
*
|
|
22
|
+
* Why:
|
|
23
|
+
* maintains backward compatibility for `framed` while allowing call sites to
|
|
24
|
+
* inject explicit `FrameBoundaryPolicy` implementations.
|
|
25
|
+
*/
|
|
26
|
+
export declare function createFrameBoundaryPolicy(framed?: boolean): FrameBoundaryPolicy;
|
|
27
|
+
//# sourceMappingURL=parser-policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser-policy.d.ts","sourceRoot":"","sources":["../../../src/src/core/parser-policy.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC,4EAA4E;IAC5E,kCAAkC,IAAI,OAAO,CAAC;IAC9C,+EAA+E;IAC/E,qCAAqC,IAAI,OAAO,CAAC;IACjD,gFAAgF;IAChF,wCAAwC,IAAI,OAAO,CAAC;IACpD,4EAA4E;IAC5E,sCAAsC,IAAI,OAAO,CAAC;IAClD,gFAAgF;IAChF,wBAAwB,CACtB,eAAe,EAAE,MAAM,EACvB,qBAAqB,EAAE,MAAM,GAC5B,OAAO,CAAC;CACZ;AA+ID;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,GAAE,OAAe,GACtB,mBAAmB,CAIrB"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { Versionage } from "../tables/table-types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Owns mutable stream-level parser state (buffer, absolute offset, stream version).
|
|
4
|
+
*
|
|
5
|
+
* This class intentionally has no parse policy; it only provides deterministic
|
|
6
|
+
* state transitions used by parser orchestration.
|
|
7
|
+
*/
|
|
8
|
+
export declare class ParserStreamState {
|
|
9
|
+
private state;
|
|
10
|
+
private activeVersion;
|
|
11
|
+
/** Initialize stream state with the parser's default top-level version. */
|
|
12
|
+
constructor(initialVersion: Versionage);
|
|
13
|
+
/** Current unconsumed bytes. */
|
|
14
|
+
get buffer(): Uint8Array;
|
|
15
|
+
/** Absolute consumed-byte offset (monotonic). */
|
|
16
|
+
get offset(): number;
|
|
17
|
+
/** Active top-level stream version context. */
|
|
18
|
+
get streamVersion(): Versionage;
|
|
19
|
+
/** Update active top-level stream version context. */
|
|
20
|
+
set streamVersion(version: Versionage);
|
|
21
|
+
/** Append bytes to the buffered stream tail. */
|
|
22
|
+
append(chunk: Uint8Array): void;
|
|
23
|
+
/** Consume a prefix from the buffer and advance absolute offset. */
|
|
24
|
+
consume(length: number): void;
|
|
25
|
+
/** Consume all leading annotation-domain separator bytes (`ano`). */
|
|
26
|
+
consumeLeadingAno(): void;
|
|
27
|
+
/** Reset buffer/offset/version to initial parser state. */
|
|
28
|
+
reset(initialVersion: Versionage): void;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=parser-stream-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser-stream-state.d.ts","sourceRoot":"","sources":["../../../src/src/core/parser-stream-state.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAI3D;;;;;GAKG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,KAAK,CAAyD;IACtE,OAAO,CAAC,aAAa,CAAa;IAElC,2EAA2E;gBAC/D,cAAc,EAAE,UAAU;IAItC,gCAAgC;IAChC,IAAI,MAAM,IAAI,UAAU,CAEvB;IAED,iDAAiD;IACjD,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,+CAA+C;IAC/C,IAAI,aAAa,IAAI,UAAU,CAE9B;IAED,sDAAsD;IACtD,IAAI,aAAa,CAAC,OAAO,EAAE,UAAU,EAEpC;IAED,gDAAgD;IAChD,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAI/B,oEAAoE;IACpE,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAK7B,qEAAqE;IACrE,iBAAiB,IAAI,IAAI;IAMzB,2DAA2D;IAC3D,KAAK,CAAC,cAAc,EAAE,UAAU,GAAG,IAAI;CAIxC"}
|