@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.
- package/dist/collect-refs.d.ts +4 -0
- package/dist/collect-refs.d.ts.map +1 -0
- package/dist/collect-refs.js +76 -0
- package/dist/collect-refs.js.map +1 -0
- package/dist/constraint.d.ts +66 -0
- package/dist/constraint.d.ts.map +1 -0
- package/dist/constraint.js +286 -0
- package/dist/constraint.js.map +1 -0
- package/dist/expr.d.ts +32 -0
- package/dist/expr.d.ts.map +1 -0
- package/dist/expr.js +190 -0
- package/dist/expr.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/layout.d.ts +7 -0
- package/dist/layout.d.ts.map +1 -0
- package/dist/layout.js +217 -0
- package/dist/layout.js.map +1 -0
- package/dist/normalize.d.ts +37 -0
- package/dist/normalize.d.ts.map +1 -0
- package/dist/normalize.js +857 -0
- package/dist/normalize.js.map +1 -0
- package/dist/types.d.ts +538 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +27 -0
- package/dist/types.js.map +1 -0
- package/dist/utils.d.ts +3 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +4 -0
- package/dist/utils.js.map +1 -0
- package/dist/validate.d.ts +8 -0
- package/dist/validate.d.ts.map +1 -0
- package/dist/validate.js +1222 -0
- package/dist/validate.js.map +1 -0
- package/dist/values.d.ts +31 -0
- package/dist/values.d.ts.map +1 -0
- package/dist/values.js +73 -0
- package/dist/values.js.map +1 -0
- package/dist/yaml.d.ts +11 -0
- package/dist/yaml.d.ts.map +1 -0
- package/dist/yaml.js +145 -0
- package/dist/yaml.js.map +1 -0
- package/package.json +35 -0
- 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
|
package/dist/expr.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expr.js","sourceRoot":"","sources":["../src/expr.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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"}
|
package/dist/layout.d.ts
ADDED
|
@@ -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"}
|