@packet-schema/core 0.1.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.
Files changed (46) hide show
  1. package/dist/collect-refs.d.ts +4 -0
  2. package/dist/collect-refs.d.ts.map +1 -0
  3. package/dist/collect-refs.js +76 -0
  4. package/dist/collect-refs.js.map +1 -0
  5. package/dist/constraint.d.ts +66 -0
  6. package/dist/constraint.d.ts.map +1 -0
  7. package/dist/constraint.js +286 -0
  8. package/dist/constraint.js.map +1 -0
  9. package/dist/expr.d.ts +32 -0
  10. package/dist/expr.d.ts.map +1 -0
  11. package/dist/expr.js +190 -0
  12. package/dist/expr.js.map +1 -0
  13. package/dist/index.d.ts +17 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +19 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/layout.d.ts +7 -0
  18. package/dist/layout.d.ts.map +1 -0
  19. package/dist/layout.js +217 -0
  20. package/dist/layout.js.map +1 -0
  21. package/dist/normalize.d.ts +37 -0
  22. package/dist/normalize.d.ts.map +1 -0
  23. package/dist/normalize.js +857 -0
  24. package/dist/normalize.js.map +1 -0
  25. package/dist/types.d.ts +538 -0
  26. package/dist/types.d.ts.map +1 -0
  27. package/dist/types.js +27 -0
  28. package/dist/types.js.map +1 -0
  29. package/dist/utils.d.ts +3 -0
  30. package/dist/utils.d.ts.map +1 -0
  31. package/dist/utils.js +4 -0
  32. package/dist/utils.js.map +1 -0
  33. package/dist/validate.d.ts +8 -0
  34. package/dist/validate.d.ts.map +1 -0
  35. package/dist/validate.js +1222 -0
  36. package/dist/validate.js.map +1 -0
  37. package/dist/values.d.ts +31 -0
  38. package/dist/values.d.ts.map +1 -0
  39. package/dist/values.js +73 -0
  40. package/dist/values.js.map +1 -0
  41. package/dist/yaml.d.ts +11 -0
  42. package/dist/yaml.d.ts.map +1 -0
  43. package/dist/yaml.js +145 -0
  44. package/dist/yaml.js.map +1 -0
  45. package/package.json +35 -0
  46. package/schemas/psdl-0.5.yaml +1223 -0
package/dist/expr.js ADDED
@@ -0,0 +1,190 @@
1
+ /* ------------------------------------------------------------------ *
2
+ * Expression constructors (authoring helpers)
3
+ * ------------------------------------------------------------------ */
4
+ export const lit = (value) => ({ kind: "lit", value });
5
+ export const ref = (field) => ({ kind: "ref", field });
6
+ export const op = (o, a, b) => ({ kind: "op", op: o, a, b });
7
+ export const cond = (test, t, f) => ({ kind: "cond", test, t, f });
8
+ export const peek = (bits, offset) => offset === undefined ? { kind: "peek", bits } : { kind: "peek", bits, offset };
9
+ export const lookup = (key, table) => ({ kind: "lookup", key, table });
10
+ export const wireSize = (target) => ({ kind: "wireSize", target });
11
+ export const prevIter = (field) => ({ kind: "prevIter", field });
12
+ export const remaining = () => ({ kind: "remaining" });
13
+ export const enclosingBits = () => ({ kind: "enclosingBits" });
14
+ export const enclosingField = (field) => ({ kind: "enclosingField", field });
15
+ /* ------------------------------------------------------------------ *
16
+ * Reserved env keys for context-dependent expressions.
17
+ * normalize injects these so evalExpr stays pure (§4, §10).
18
+ * ------------------------------------------------------------------ */
19
+ export const peekEnvKey = (offset, bits) => `__peek__${offset}__${bits}`;
20
+ export const remainingEnvKey = () => "__remaining__";
21
+ export const enclosingBitsEnvKey = () => "__enclosingBits__";
22
+ export const wireSizeEnvKey = (target) => `__wireSize__${target}`;
23
+ export const prevIterEnvKey = (field) => `__prevIter__${field}`;
24
+ export const enclosingFieldEnvKey = (field) => `__enclosing__${field}`;
25
+ export class MissingRefError extends Error {
26
+ field;
27
+ constructor(field) {
28
+ super(`evalExpr: missing reference "${field}"`);
29
+ this.field = field;
30
+ this.name = "MissingRefError";
31
+ }
32
+ }
33
+ /* ------------------------------------------------------------------ *
34
+ * Evaluator
35
+ * ------------------------------------------------------------------ */
36
+ export function evalExpr(expr, env) {
37
+ switch (expr.kind) {
38
+ case "lit":
39
+ return expr.value;
40
+ case "ref": {
41
+ const v = env.get(expr.field);
42
+ if (v === undefined)
43
+ throw new MissingRefError(expr.field);
44
+ return v;
45
+ }
46
+ case "op": {
47
+ const a = evalExpr(expr.a, env);
48
+ const b = evalExpr(expr.b, env);
49
+ switch (expr.op) {
50
+ case "+": return a + b;
51
+ case "-": return a - b;
52
+ case "*": return a * b;
53
+ case "/":
54
+ if (b === 0)
55
+ throw new Error("evalExpr: division by zero");
56
+ return Math.trunc(a / b);
57
+ case "%":
58
+ if (b === 0)
59
+ throw new Error("evalExpr: modulo by zero");
60
+ // §4 pairs `%` with truncated-division `/` ("truncates toward zero"),
61
+ // so `%` follows JS remainder semantics: the result takes the sign of
62
+ // the dividend (e.g. (1-3) % 4 === -2, NOT the Euclidean 2). The spec
63
+ // does not define a Euclidean modulo; authors must not assume one.
64
+ // Spec keys/table values are non-negative, so a negative left operand
65
+ // here reflects authored arithmetic, not a normalization choice.
66
+ return a % b;
67
+ // Left shift masked to an unsigned 32-bit result (§4): JS `<<` is
68
+ // signed, so a high-bit shift like `1 << 31` would yield a negative
69
+ // number; `>>> 0` reinterprets it as the unsigned wire value.
70
+ case "<<": return (a << b) >>> 0;
71
+ // Arithmetic (sign-propagating) right shift, per §4 "Arithmetic right
72
+ // shift; operates on 32-bit integers."
73
+ case ">>": return a >> b;
74
+ case "==": return a === b ? 1 : 0;
75
+ case "!=": return a !== b ? 1 : 0;
76
+ case "<": return a < b ? 1 : 0;
77
+ case "<=": return a <= b ? 1 : 0;
78
+ case ">": return a > b ? 1 : 0;
79
+ case ">=": return a >= b ? 1 : 0;
80
+ // §4 (Note on 64-bit fields): bitwise and shift operators are evaluated
81
+ // as 32-bit integers BY DESIGN — JS `&|^` coerce operands via ToInt32,
82
+ // so a value wider than 32 bits is truncated and a high bit may flip the
83
+ // sign. This is the documented spec contract: for fields wider than 32
84
+ // bits, authors must use arithmetic operators and `cond`, not bit ops.
85
+ case "&": return (a & b) | 0;
86
+ case "|": return (a | b) | 0;
87
+ case "^": return (a ^ b) | 0;
88
+ default: {
89
+ const bad = expr.op;
90
+ throw new Error(`evalExpr: unknown operator "${bad}"`);
91
+ }
92
+ }
93
+ }
94
+ case "cond": {
95
+ const t = evalExpr(expr.test, env);
96
+ return t !== 0 ? evalExpr(expr.t, env) : evalExpr(expr.f, env);
97
+ }
98
+ case "peek": {
99
+ const offsetVal = expr.offset !== undefined ? evalExpr(expr.offset, env) : 0;
100
+ return env.get(peekEnvKey(offsetVal, expr.bits)) ?? 0;
101
+ }
102
+ case "lookup": {
103
+ // key truncated toward zero; negative or missing key → 0 (§4)
104
+ const k = Math.trunc(evalExpr(expr.key, env));
105
+ const v = expr.table[k];
106
+ return v ?? 0;
107
+ }
108
+ case "wireSize":
109
+ return env.get(wireSizeEnvKey(expr.target)) ?? 0;
110
+ case "prevIter":
111
+ return env.get(prevIterEnvKey(expr.field)) ?? 0;
112
+ case "remaining":
113
+ return env.get(remainingEnvKey()) ?? 0;
114
+ case "enclosingBits":
115
+ return env.get(enclosingBitsEnvKey()) ?? 0;
116
+ case "enclosingField":
117
+ return env.get(enclosingFieldEnvKey(expr.field)) ?? 0;
118
+ default: {
119
+ const _exhaustive = expr;
120
+ throw new Error(`evalExpr: unknown expression kind "${_exhaustive.kind}"`);
121
+ }
122
+ }
123
+ }
124
+ /** Evaluate, returning `fallback` when a referenced field is missing (§10.3). */
125
+ export function evalExprOr(expr, env, fallback = 0) {
126
+ try {
127
+ return evalExpr(expr, env);
128
+ }
129
+ catch (e) {
130
+ if (e instanceof MissingRefError)
131
+ return fallback;
132
+ throw e;
133
+ }
134
+ }
135
+ /* ------------------------------------------------------------------ *
136
+ * Static reference collection
137
+ * ------------------------------------------------------------------ */
138
+ /** Plain field-id references (`ref`) reachable from an expression. */
139
+ export function exprRefs(expr) {
140
+ const out = [];
141
+ walkExpr(expr, (e) => {
142
+ if (e.kind === "ref")
143
+ out.push(e.field);
144
+ });
145
+ return out;
146
+ }
147
+ /** Visit every sub-expression node depth-first. */
148
+ export function walkExpr(expr, visit) {
149
+ visit(expr);
150
+ switch (expr.kind) {
151
+ case "lit":
152
+ case "ref":
153
+ case "wireSize":
154
+ case "prevIter":
155
+ case "remaining":
156
+ case "enclosingBits":
157
+ case "enclosingField":
158
+ return;
159
+ case "op":
160
+ walkExpr(expr.a, visit);
161
+ walkExpr(expr.b, visit);
162
+ return;
163
+ case "cond":
164
+ walkExpr(expr.test, visit);
165
+ walkExpr(expr.t, visit);
166
+ walkExpr(expr.f, visit);
167
+ return;
168
+ case "peek":
169
+ if (expr.offset !== undefined)
170
+ walkExpr(expr.offset, visit);
171
+ return;
172
+ case "lookup":
173
+ walkExpr(expr.key, visit);
174
+ return;
175
+ default: {
176
+ const _exhaustive = expr;
177
+ throw new Error(`walkExpr: unhandled Expr kind ${String(_exhaustive.kind)}`);
178
+ }
179
+ }
180
+ }
181
+ /** True if any sub-expression matches the predicate. */
182
+ export function exprContains(expr, pred) {
183
+ let found = false;
184
+ walkExpr(expr, (e) => {
185
+ if (pred(e))
186
+ found = true;
187
+ });
188
+ return found;
189
+ }
190
+ //# sourceMappingURL=expr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expr.js","sourceRoot":"","sources":["../src/expr.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export type { Packet, PsdlPacket, PsdlField, PsdlExpr, PsdlType, Field, Virtual, Repeat, RepeatCount, Switch, Group, Encrypted, Optional, Align, Bounded, RefContainer, Container, Struct, NamedStruct, Constraint, Type, TypeInt, TypeBits, TypeBytes, TypeEnum, TypeVarint, TypeBerLength, BytesDelimited, VarintEncoding, EnumVariant, EnumVariantObj, Subfield, NormativeLevel, RfcRef, UpdateRef, ValueEntry, ChecksumAlgorithm, ChecksumParams, PseudoHeader, DisplayHint, FieldMeta, PacketMeta, ImportEntry, RendererHints, RendererSection, Expr, ExprLit, ExprRef, ExprOp, ExprCond, ExprPeek, ExprLookup, ExprWireSize, ExprPrevIter, ExprRemaining, ExprEnclosingBits, ExprEnclosingField, BinOp, CategoryToken, PacketEnv, ViewMode, Normalized, NormalizedField, LayoutField, LayoutSubField, Cell, SubCell, ResolvedLayout, } from "./types.js";
2
+ export { VARINT_ENCODINGS, CHECKSUM_ALGORITHMS, CATEGORY_TOKENS, BIN_OPS } from "./types.js";
3
+ export { lit, ref, op, cond, peek, lookup, wireSize, prevIter, remaining, enclosingBits, enclosingField, peekEnvKey, remainingEnvKey, enclosingBitsEnvKey, wireSizeEnvKey, prevIterEnvKey, enclosingFieldEnvKey, evalExpr, evalExprOr, exprRefs, walkExpr, exprContains, MissingRefError, } from "./expr.js";
4
+ export { normalize, initialEnv, typeBits, berLenEnvKey, varintBitsEnvKey, bytesDelimLenEnvKey, isBytesDelimited, selectArm } from "./normalize.js";
5
+ export type { NormalizeOptions } from "./normalize.js";
6
+ export { resolveLayout } from "./layout.js";
7
+ export type { LayoutOptions } from "./layout.js";
8
+ export { propagate, propagateFixpoint, validateConstraints } from "./constraint.js";
9
+ export type { PropagateResult, PropagateOk, PropagateConflict, ConstraintDiagnostic } from "./constraint.js";
10
+ export { validatePacket, validateContainer, isValidExpr } from "./validate.js";
11
+ export type { ValidationError } from "./validate.js";
12
+ export { parsePsdl, stringifyPsdl } from "./yaml.js";
13
+ export type { ParseResult } from "./yaml.js";
14
+ export { isField } from "./utils.js";
15
+ export { collectPsdlRefs } from "./collect-refs.js";
16
+ export { resolveValueEntry, matchesPattern } from "./values.js";
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,YAAY,EACV,MAAM,EACN,UAAU,EACV,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,KAAK,EACL,OAAO,EACP,MAAM,EACN,WAAW,EACX,MAAM,EACN,KAAK,EACL,SAAS,EACT,QAAQ,EACR,KAAK,EACL,OAAO,EACP,YAAY,EACZ,SAAS,EACT,MAAM,EACN,WAAW,EACX,UAAU,EACV,IAAI,EACJ,OAAO,EACP,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,UAAU,EACV,aAAa,EACb,cAAc,EACd,cAAc,EACd,WAAW,EACX,cAAc,EACd,QAAQ,EACR,cAAc,EACd,MAAM,EACN,SAAS,EACT,UAAU,EACV,iBAAiB,EACjB,cAAc,EACd,YAAY,EACZ,WAAW,EACX,SAAS,EACT,UAAU,EACV,WAAW,EACX,aAAa,EACb,eAAe,EACf,IAAI,EACJ,OAAO,EACP,OAAO,EACP,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,iBAAiB,EACjB,kBAAkB,EAClB,KAAK,EACL,aAAa,EACb,SAAS,EACT,QAAQ,EACR,UAAU,EACV,eAAe,EACf,WAAW,EACX,cAAc,EACd,IAAI,EACJ,OAAO,EACP,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAG7F,OAAO,EACL,GAAG,EACH,GAAG,EACH,EAAE,EACF,IAAI,EACJ,IAAI,EACJ,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,aAAa,EACb,cAAc,EACd,UAAU,EACV,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,eAAe,GAChB,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACnJ,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGvD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACpF,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAG7G,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC/E,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGrD,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACrD,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAG7C,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,19 @@
1
+ // @packet-schema/core — public API
2
+ export { VARINT_ENCODINGS, CHECKSUM_ALGORITHMS, CATEGORY_TOKENS, BIN_OPS } from "./types.js";
3
+ // Expression helpers & evaluator
4
+ export { lit, ref, op, cond, peek, lookup, wireSize, prevIter, remaining, enclosingBits, enclosingField, peekEnvKey, remainingEnvKey, enclosingBitsEnvKey, wireSizeEnvKey, prevIterEnvKey, enclosingFieldEnvKey, evalExpr, evalExprOr, exprRefs, walkExpr, exprContains, MissingRefError, } from "./expr.js";
5
+ // Normalize
6
+ export { normalize, initialEnv, typeBits, berLenEnvKey, varintBitsEnvKey, bytesDelimLenEnvKey, isBytesDelimited, selectArm } from "./normalize.js";
7
+ // Layout
8
+ export { resolveLayout } from "./layout.js";
9
+ // Constraint solver
10
+ export { propagate, propagateFixpoint, validateConstraints } from "./constraint.js";
11
+ // Validation
12
+ export { validatePacket, validateContainer, isValidExpr } from "./validate.js";
13
+ // YAML I/O
14
+ export { parsePsdl, stringifyPsdl } from "./yaml.js";
15
+ // Utilities
16
+ export { isField } from "./utils.js";
17
+ export { collectPsdlRefs } from "./collect-refs.js";
18
+ export { resolveValueEntry, matchesPattern } from "./values.js";
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mCAAmC;AAyEnC,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE7F,iCAAiC;AACjC,OAAO,EACL,GAAG,EACH,GAAG,EACH,EAAE,EACF,IAAI,EACJ,IAAI,EACJ,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,SAAS,EACT,aAAa,EACb,cAAc,EACd,UAAU,EACV,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,eAAe,GAChB,MAAM,WAAW,CAAC;AAEnB,YAAY;AACZ,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGnJ,SAAS;AACT,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,oBAAoB;AACpB,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAGpF,aAAa;AACb,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG/E,WAAW;AACX,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAGrD,YAAY;AACZ,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { PacketEnv, Packet as PsdlPacket, ResolvedLayout, ViewMode } from "./types.js";
2
+ export type LayoutOptions = {
3
+ env?: PacketEnv;
4
+ viewMode?: ViewMode;
5
+ };
6
+ export declare function resolveLayout(packet: PsdlPacket, options?: LayoutOptions): ResolvedLayout;
7
+ //# sourceMappingURL=layout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../src/layout.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAKV,SAAS,EACT,MAAM,IAAI,UAAU,EACpB,cAAc,EAEd,QAAQ,EACT,MAAM,YAAY,CAAC;AAGpB,MAAM,MAAM,aAAa,GAAG;IAC1B,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB,CAAC;AAMF,wBAAgB,aAAa,CAC3B,MAAM,EAAE,UAAU,EAClB,OAAO,GAAE,aAAkB,GAC1B,cAAc,CAkFhB"}
package/dist/layout.js ADDED
@@ -0,0 +1,217 @@
1
+ // layout.ts — renderer に依存しない bit-grid 展開。
2
+ // Cell / LayoutField / ResolvedLayout はすべて types.ts で定義。
3
+ import { initialEnv, normalize } from "./normalize.js";
4
+ function resolveRowBits(packet) {
5
+ return packet.rendererHints?.rowBits ?? packet.rowBits ?? 0;
6
+ }
7
+ export function resolveLayout(packet, options = {}) {
8
+ const rowBits = resolveRowBits(packet);
9
+ if (!Number.isInteger(rowBits) || rowBits <= 0) {
10
+ throw new Error(`resolveLayout: rowBits must be a positive integer; got ${String(rowBits)}.`);
11
+ }
12
+ const env = new Map(options.env ?? initialEnv(packet));
13
+ const viewMode = options.viewMode ?? "wire";
14
+ const norm = normalize(packet, env, { viewMode });
15
+ const cells = [];
16
+ let bitPos = 0;
17
+ const groups = groupConsecutiveByContainer(norm.fields);
18
+ for (const g of groups) {
19
+ if (g.kind === "flat") {
20
+ const nf = g.field;
21
+ const field = {
22
+ id: nf.id,
23
+ name: nf.name,
24
+ bits: nf.bits,
25
+ ...(nf.category ? { category: nf.category } : {}),
26
+ ...(nf.doc ? { description: nf.doc } : {}),
27
+ ...(nf.values ? { values: nf.values } : {}),
28
+ // Field meta wins; fall back to the enclosing group's meta so a
29
+ // single-child group (not collapsed into a parent) still surfaces its
30
+ // RFC provenance for per-group deep-linking (§5.4).
31
+ ...(nf.meta ? { meta: nf.meta } : nf.groupMeta ? { meta: nf.groupMeta } : {}),
32
+ };
33
+ bitPos = emitField(field, nf, bitPos, rowBits, cells);
34
+ continue;
35
+ }
36
+ const totalBits = g.children.reduce((a, f) => a + f.bits, 0);
37
+ if (totalBits === 0)
38
+ continue;
39
+ const subfields = g.children.map((c) => ({
40
+ // Strip the repeat suffix back to the source field id. Nested repeats
41
+ // join their index stack with "_" (normalize.ts repeatSuffix), so the
42
+ // suffix shape is "#0", "#0_1", "#0_1_2", …
43
+ id: c.id.replace(/#\d+(?:_\d+)*$/, ""),
44
+ name: c.name,
45
+ bits: c.bits,
46
+ ...(c.doc ? { description: c.doc } : {}),
47
+ ...(c.values ? { values: c.values } : {}),
48
+ ...(c.meta ? { meta: c.meta } : {}),
49
+ }));
50
+ const field = {
51
+ id: g.parentId,
52
+ name: g.parentName,
53
+ bits: totalBits,
54
+ subfields,
55
+ ...(g.children.find((c) => c.category)?.category
56
+ ? { category: g.children.find((c) => c.category).category }
57
+ : {}),
58
+ // §5.4: surface the enclosing group's RFC provenance for per-group LSP deep-linking.
59
+ ...(g.children[0]?.groupMeta ? { meta: g.children[0].groupMeta } : {}),
60
+ };
61
+ const allEncrypted = g.children.every((c) => c.encrypted);
62
+ const sharedParentId = g.children[0]?.encryptedParentId &&
63
+ g.children.every((c) => c.encryptedParentId === g.children[0]?.encryptedParentId)
64
+ ? g.children[0].encryptedParentId
65
+ : undefined;
66
+ const allHeaderProtected = g.children.every((c) => c.headerProtected);
67
+ const sharedByteOrder = g.children[0]?.byteOrder &&
68
+ g.children.every((c) => c.byteOrder === g.children[0]?.byteOrder)
69
+ ? g.children[0].byteOrder
70
+ : undefined;
71
+ const first = g.children[0];
72
+ const proxy = {
73
+ ...first,
74
+ id: g.parentId,
75
+ name: g.parentName,
76
+ bits: totalBits,
77
+ ...(allEncrypted ? { encrypted: true } : {}),
78
+ ...(sharedParentId !== undefined ? { encryptedParentId: sharedParentId } : {}),
79
+ ...(sharedParentId ? { encryptedContextNote: first.encryptedContextNote } : {}),
80
+ ...(allHeaderProtected ? { headerProtected: true } : {}),
81
+ ...(sharedByteOrder !== undefined ? { byteOrder: sharedByteOrder } : {}),
82
+ };
83
+ bitPos = emitField(field, proxy, bitPos, rowBits, cells, g.children);
84
+ }
85
+ return { cells, totalBits: norm.totalBits };
86
+ }
87
+ function groupConsecutiveByContainer(fields) {
88
+ const out = [];
89
+ let i = 0;
90
+ while (i < fields.length) {
91
+ const f = fields[i];
92
+ if (!f.groupId) {
93
+ out.push({ kind: "flat", field: f });
94
+ i++;
95
+ continue;
96
+ }
97
+ const groupId = f.groupId;
98
+ const groupPath = f.originalContainerPath;
99
+ const run = [f];
100
+ let j = i + 1;
101
+ while (j < fields.length &&
102
+ fields[j].groupId === groupId &&
103
+ fields[j].originalContainerPath === groupPath) {
104
+ run.push(fields[j]);
105
+ j++;
106
+ }
107
+ // Virtual fields are zero-width tooling entries (§5): they participate in
108
+ // the run (so a virtual between two group fields does not split the
109
+ // group's collapse) but are not rendered, so they neither count toward
110
+ // the flat/collapsed decision nor appear as subfields.
111
+ const real = run.filter((c) => !c.virtual);
112
+ if (real.length <= 1) {
113
+ for (const c of run)
114
+ out.push({ kind: "flat", field: c });
115
+ i = j;
116
+ continue;
117
+ }
118
+ out.push({ kind: "collapsed", parentId: groupId, parentName: f.groupName ?? groupId, children: real });
119
+ i = j;
120
+ }
121
+ return out;
122
+ }
123
+ function emitField(field, nf, bitPos, rowBits, cells, childNFs) {
124
+ const bits = nf.bits;
125
+ if (bits === 0)
126
+ return bitPos;
127
+ let remaining = bits;
128
+ let segmentIndex = 0;
129
+ const totalSegments = computeSegmentCount(bitPos, bits, rowBits);
130
+ while (remaining > 0) {
131
+ const row = Math.floor(bitPos / rowBits);
132
+ const colInRow = bitPos % rowBits;
133
+ const take = Math.min(remaining, rowBits - colInRow);
134
+ const cell = {
135
+ field,
136
+ bitsTotal: bits,
137
+ row,
138
+ startBit: colInRow,
139
+ endBit: colInRow + take - 1,
140
+ segmentIndex,
141
+ totalSegments,
142
+ isFirst: segmentIndex === 0,
143
+ isLast: remaining === take,
144
+ fieldStartOffset: bits - remaining,
145
+ fieldEndOffset: bits - remaining + take - 1,
146
+ };
147
+ if (nf.encrypted)
148
+ cell.encrypted = true;
149
+ if (nf.encryptedParentId !== undefined)
150
+ cell.encryptedParentId = nf.encryptedParentId;
151
+ if (nf.encryptedContextNote !== undefined)
152
+ cell.encryptedContextNote = nf.encryptedContextNote;
153
+ if (nf.headerProtected)
154
+ cell.headerProtected = true;
155
+ if (nf.byteOrder)
156
+ cell.byteOrder = nf.byteOrder;
157
+ if (field.subfields && field.subfields.length > 0) {
158
+ cell.subCells = buildSubCells(field, field.subfields, cell.fieldStartOffset, cell.fieldEndOffset, colInRow, childNFs);
159
+ }
160
+ cells.push(cell);
161
+ remaining -= take;
162
+ bitPos += take;
163
+ segmentIndex++;
164
+ }
165
+ return bitPos;
166
+ }
167
+ function buildSubCells(parentField, subfields, fieldStartOffset, fieldEndOffset, segmentColInRow, childNFs) {
168
+ const out = [];
169
+ let cursor = 0;
170
+ for (let i = 0; i < subfields.length; i++) {
171
+ const sf = subfields[i];
172
+ const subStart = cursor;
173
+ const subEnd = cursor + sf.bits;
174
+ cursor = subEnd;
175
+ const lo = Math.max(subStart, fieldStartOffset);
176
+ const hi = Math.min(subEnd, fieldEndOffset + 1);
177
+ if (lo >= hi)
178
+ continue;
179
+ const startBit = segmentColInRow + (lo - fieldStartOffset);
180
+ const childNF = childNFs?.[i];
181
+ const sub = {
182
+ parentField,
183
+ subfield: sf,
184
+ id: `${parentField.id}:${sf.id}`,
185
+ startBit,
186
+ endBit: startBit + (hi - lo) - 1,
187
+ isFirst: lo === subStart,
188
+ isLast: hi === subEnd,
189
+ bitsTotal: sf.bits,
190
+ };
191
+ if (childNF?.encrypted)
192
+ sub.encrypted = true;
193
+ if (childNF?.encryptedParentId !== undefined)
194
+ sub.encryptedParentId = childNF.encryptedParentId;
195
+ if (childNF?.encryptedContextNote !== undefined)
196
+ sub.encryptedContextNote = childNF.encryptedContextNote;
197
+ if (childNF?.headerProtected)
198
+ sub.headerProtected = true;
199
+ if (childNF?.byteOrder)
200
+ sub.byteOrder = childNF.byteOrder;
201
+ out.push(sub);
202
+ }
203
+ return out;
204
+ }
205
+ function computeSegmentCount(startPos, bits, rowBits) {
206
+ let remaining = bits;
207
+ let pos = startPos;
208
+ let count = 0;
209
+ while (remaining > 0) {
210
+ const take = Math.min(remaining, rowBits - (pos % rowBits));
211
+ remaining -= take;
212
+ pos += take;
213
+ count++;
214
+ }
215
+ return count;
216
+ }
217
+ //# sourceMappingURL=layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.js","sourceRoot":"","sources":["../src/layout.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import type { BytesDelimited, Normalized, Packet, PacketEnv, Struct, Type, ViewMode } from "./types.js";
2
+ export declare function berLenEnvKey(fieldId: string): string;
3
+ /**
4
+ * Decoder-injected wire byte length of a delimiter-terminated `bytes` field
5
+ * (§3/§10.7, D3). Keyed by the field's fully-qualified id under a dedicated
6
+ * namespace so it never collides with env[id] (the field's value slot) or any
7
+ * other injection key. With no injection (static preview) the length is unknown
8
+ * and the field lays out as 0 bytes.
9
+ */
10
+ export declare function bytesDelimLenEnvKey(qid: string): string;
11
+ /** True if a `bytes.n` is the delimiter form rather than an Expr (§3, D3). */
12
+ export declare function isBytesDelimited(n: unknown): n is BytesDelimited;
13
+ /** Decoder-injected wire bit-width of a varint field (distinct from its value). */
14
+ export declare function varintBitsEnvKey(fieldId: string): string;
15
+ /**
16
+ * Static wire bit-width of a wire type. For decoder-determined widths
17
+ * (`varint`, delimiter-terminated `bytes`), the width is looked up in `env`
18
+ * under a key derived from `fieldId`. The CALLER must pass the same id used at
19
+ * injection: for fields expanded inside a `ref`/`repeat` that is the qualified
20
+ * id (`{ref.id}.{field.id}#N`), which the normalize walk threads through emit().
21
+ * Calling this helper directly with a bare id for a qualified field yields 0
22
+ * (unknown width) — resolve such fields via the full `normalize()` walk.
23
+ */
24
+ export declare function typeBits(type: Type, env: PacketEnv, fieldId?: string): number;
25
+ /** Match in order: exact → list → range → "_" (§5). */
26
+ export declare function selectArm(cases: Record<string, Struct>, disc: number): {
27
+ key: string;
28
+ struct: Struct;
29
+ } | undefined;
30
+ export type NormalizeOptions = {
31
+ viewMode?: ViewMode;
32
+ /** Decoder-injected total packet bit count for top-level body budget (§10.1). */
33
+ totalBits?: number;
34
+ };
35
+ export declare function normalize(packet: Packet, env?: PacketEnv, opts?: NormalizeOptions): Normalized;
36
+ export declare function initialEnv(packet: Packet): PacketEnv;
37
+ //# sourceMappingURL=normalize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../src/normalize.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAEV,cAAc,EAQd,UAAU,EAGV,MAAM,EACN,SAAS,EAGT,MAAM,EAEN,IAAI,EACJ,QAAQ,EAET,MAAM,YAAY,CAAC;AAEpB,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,8EAA8E;AAC9E,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,cAAc,CAGhE;AAOD,mFAAmF;AACnF,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAExD;AAKD;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAoC7E;AA0lBD,uDAAuD;AACvD,wBAAgB,SAAS,CACvB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7B,IAAI,EAAE,MAAM,GACX;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CA2B7C;AA8GD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,iFAAiF;IACjF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,wBAAgB,SAAS,CACvB,MAAM,EAAE,MAAM,EACd,GAAG,GAAE,SAAqB,EAC1B,IAAI,GAAE,gBAAqB,GAC1B,UAAU,CAmBZ;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAIpD"}