@elaraai/east 1.0.76 → 1.0.78

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 (70) hide show
  1. package/dist/src/fuzz.d.ts +103 -11
  2. package/dist/src/fuzz.d.ts.map +1 -1
  3. package/dist/src/fuzz.js +226 -16
  4. package/dist/src/fuzz.js.map +1 -1
  5. package/dist/src/patch/fuzz.d.ts +26 -0
  6. package/dist/src/patch/fuzz.d.ts.map +1 -1
  7. package/dist/src/patch/fuzz.js +42 -4
  8. package/dist/src/patch/fuzz.js.map +1 -1
  9. package/dist/src/patch/type_of_patch.d.ts +14 -1
  10. package/dist/src/patch/type_of_patch.d.ts.map +1 -1
  11. package/dist/src/patch/type_of_patch.js +8 -13
  12. package/dist/src/patch/type_of_patch.js.map +1 -1
  13. package/dist/src/patch/type_of_patch.spec.d.ts +6 -0
  14. package/dist/src/patch/type_of_patch.spec.d.ts.map +1 -0
  15. package/dist/src/patch/type_of_patch.spec.js +74 -0
  16. package/dist/src/patch/type_of_patch.spec.js.map +1 -0
  17. package/dist/src/serialization/beast2/index.d.ts +22 -1
  18. package/dist/src/serialization/beast2/index.d.ts.map +1 -1
  19. package/dist/src/serialization/beast2/index.js +56 -1
  20. package/dist/src/serialization/beast2/index.js.map +1 -1
  21. package/dist/src/serialization/beast2/index.spec.js +16 -0
  22. package/dist/src/serialization/beast2/index.spec.js.map +1 -1
  23. package/dist/src/serialization/beast2/v4/container.js +10 -15
  24. package/dist/src/serialization/beast2/v4/container.js.map +1 -1
  25. package/dist/src/serialization/beast2/v4/type-table.d.ts +63 -34
  26. package/dist/src/serialization/beast2/v4/type-table.d.ts.map +1 -1
  27. package/dist/src/serialization/beast2/v4/type-table.js +353 -403
  28. package/dist/src/serialization/beast2/v4/type-table.js.map +1 -1
  29. package/dist/src/serialization/beast2/v5/deflate.d.ts.map +1 -1
  30. package/dist/src/serialization/beast2/v5/deflate.js +147 -50
  31. package/dist/src/serialization/beast2/v5/deflate.js.map +1 -1
  32. package/dist/src/serialization/beast2/v5/deflate.spec.d.ts +6 -0
  33. package/dist/src/serialization/beast2/v5/deflate.spec.d.ts.map +1 -0
  34. package/dist/src/serialization/beast2/v5/deflate.spec.js +237 -0
  35. package/dist/src/serialization/beast2/v5/deflate.spec.js.map +1 -0
  36. package/dist/src/serialization/beast2/v5/frame-pool.d.ts +119 -0
  37. package/dist/src/serialization/beast2/v5/frame-pool.d.ts.map +1 -0
  38. package/dist/src/serialization/beast2/v5/frame-pool.js +235 -0
  39. package/dist/src/serialization/beast2/v5/frame-pool.js.map +1 -0
  40. package/dist/src/serialization/beast2/v5/frame-pool.spec.d.ts +6 -0
  41. package/dist/src/serialization/beast2/v5/frame-pool.spec.d.ts.map +1 -0
  42. package/dist/src/serialization/beast2/v5/frame-pool.spec.js +287 -0
  43. package/dist/src/serialization/beast2/v5/frame-pool.spec.js.map +1 -0
  44. package/dist/src/serialization/beast2/v5/frame-worker.d.ts +6 -0
  45. package/dist/src/serialization/beast2/v5/frame-worker.d.ts.map +1 -0
  46. package/dist/src/serialization/beast2/v5/frame-worker.js +40 -0
  47. package/dist/src/serialization/beast2/v5/frame-worker.js.map +1 -0
  48. package/dist/src/serialization/beast2/v5/index.spec.js +292 -5
  49. package/dist/src/serialization/beast2/v5/index.spec.js.map +1 -1
  50. package/dist/src/serialization/beast2/v5/lazy.d.ts +11 -8
  51. package/dist/src/serialization/beast2/v5/lazy.d.ts.map +1 -1
  52. package/dist/src/serialization/beast2/v5/lazy.js +49 -39
  53. package/dist/src/serialization/beast2/v5/lazy.js.map +1 -1
  54. package/dist/src/serialization/beast2/v5/lazy.spec.js +98 -3
  55. package/dist/src/serialization/beast2/v5/lazy.spec.js.map +1 -1
  56. package/dist/src/serialization/beast2/v5/stream.d.ts +88 -2
  57. package/dist/src/serialization/beast2/v5/stream.d.ts.map +1 -1
  58. package/dist/src/serialization/beast2/v5/stream.js +175 -22
  59. package/dist/src/serialization/beast2/v5/stream.js.map +1 -1
  60. package/dist/src/serialization/index.d.ts +1 -1
  61. package/dist/src/serialization/index.d.ts.map +1 -1
  62. package/dist/src/serialization/index.js +1 -1
  63. package/dist/src/serialization/index.js.map +1 -1
  64. package/dist/src/type_of_type.d.ts +0 -5
  65. package/dist/src/type_of_type.d.ts.map +1 -1
  66. package/dist/src/type_of_type.js +51 -49
  67. package/dist/src/type_of_type.js.map +1 -1
  68. package/dist/src/type_of_type.to_etv.spec.js +75 -0
  69. package/dist/src/type_of_type.to_etv.spec.js.map +1 -1
  70. package/package.json +1 -1
@@ -17,6 +17,8 @@ export interface FuzzTestCase<T extends EastType = EastType> {
17
17
  type: T;
18
18
  /** String representation of the type for test naming */
19
19
  typeName: string;
20
+ /** {@link typeFingerprint} of the type — a name stable across processes */
21
+ fingerprint: string;
20
22
  /** Array type for before/after pairs (used by compliance tests) */
21
23
  pairsArrayType: ArrayTypeT<StructTypeT<{
22
24
  before: T;
@@ -39,6 +41,23 @@ export interface FuzzTestCase<T extends EastType = EastType> {
39
41
  v2: ValueTypeOf<T>;
40
42
  v3: ValueTypeOf<T>;
41
43
  }>;
44
+ /**
45
+ * Per pair, the beast2 bytes of `diff(before, after)` as TypeScript
46
+ * computes and encodes it (`0x…`): the corpus asserts every runtime's
47
+ * diff encodes to these bytes, so a patch is the same value on every
48
+ * runtime — not merely one that applies to the same result (#774).
49
+ */
50
+ diffHex: string[];
51
+ /** Per pair, the bytes of `invertPatch(diff(before, after))`. */
52
+ invertHex: string[];
53
+ /**
54
+ * Per triplet, the bytes of `composePatch(diff(v1, v2), diff(v2, v3))`.
55
+ * A composition can carry one input container twice — an element the
56
+ * first patch inserts and the second replaces — and the wire records
57
+ * that sharing as a back-reference, so these bytes also pin that every
58
+ * runtime's writer sees the sharing (#774).
59
+ */
60
+ composeHex: string[];
42
61
  }
43
62
  /**
44
63
  * Options for generating fuzz test cases.
@@ -48,10 +67,17 @@ export interface FuzzTestOptions {
48
67
  numTypes?: number;
49
68
  /** Number of sample values per type */
50
69
  numSamples?: number;
70
+ /** Depth at which sample values stop nesting (default 5) */
71
+ valueDepth?: number;
51
72
  /** Include recursive types in generation */
52
73
  includeRecursive?: boolean;
53
74
  /** Include function types in generation */
54
75
  includeFunctions?: boolean;
76
+ /** Recursion below the top level: closed recursive leaves, a recursive
77
+ * type shared by several fields, random recursive bodies (default true) */
78
+ nestedRecursive?: boolean;
79
+ /** `EastTypeType` as a leaf, with type values as values (default true) */
80
+ includeTypeValues?: boolean;
55
81
  /** Maximum retries when generating values for a single type */
56
82
  maxValueRetries?: number;
57
83
  /** Multiplier for max attempts (numTypes * multiplier) */
@@ -1 +1 @@
1
- {"version":3,"file":"fuzz.d.ts","sourceRoot":"","sources":["../../../src/patch/fuzz.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,IAAI,UAAU,EAAE,UAAU,IAAI,WAAW,EAAE,MAAM,aAAa,CAAC;AAkB7G;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC,SAAS,QAAQ,GAAG,QAAQ;IACvD,uCAAuC;IACvC,IAAI,EAAE,CAAC,CAAC;IACR,wDAAwD;IACxD,QAAQ,EAAE,MAAM,CAAC;IACjB,mEAAmE;IACnE,cAAc,EAAE,UAAU,CAAC,WAAW,CAAC;QAAE,MAAM,EAAE,CAAC,CAAC;QAAC,KAAK,EAAE,CAAC,CAAA;KAAE,CAAC,CAAC,CAAC;IACjE,kEAAkE;IAClE,iBAAiB,EAAE,UAAU,CAAC,WAAW,CAAC;QAAE,EAAE,EAAE,CAAC,CAAC;QAAC,EAAE,EAAE,CAAC,CAAC;QAAC,EAAE,EAAE,CAAC,CAAA;KAAE,CAAC,CAAC,CAAC;IACpE,8CAA8C;IAC9C,KAAK,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;QAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,CAAA;KAAE,CAAC,CAAC;IAChE,uCAAuC;IACvC,QAAQ,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;QAAC,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;QAAC,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAA;KAAE,CAAC,CAAC;CACnF;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,2CAA2C;IAC3C,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,+DAA+D;IAC/D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,0DAA0D;IAC1D,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,+DAA+D;IAC/D,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;+CAG2C;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AA2ED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,eAAoB,GAAG,YAAY,EAAE,CAgGnF"}
1
+ {"version":3,"file":"fuzz.d.ts","sourceRoot":"","sources":["../../../src/patch/fuzz.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,IAAI,UAAU,EAAE,UAAU,IAAI,WAAW,EAAE,MAAM,aAAa,CAAC;AAwB7G;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC,SAAS,QAAQ,GAAG,QAAQ;IACvD,uCAAuC;IACvC,IAAI,EAAE,CAAC,CAAC;IACR,wDAAwD;IACxD,QAAQ,EAAE,MAAM,CAAC;IACjB,2EAA2E;IAC3E,WAAW,EAAE,MAAM,CAAC;IACpB,mEAAmE;IACnE,cAAc,EAAE,UAAU,CAAC,WAAW,CAAC;QAAE,MAAM,EAAE,CAAC,CAAC;QAAC,KAAK,EAAE,CAAC,CAAA;KAAE,CAAC,CAAC,CAAC;IACjE,kEAAkE;IAClE,iBAAiB,EAAE,UAAU,CAAC,WAAW,CAAC;QAAE,EAAE,EAAE,CAAC,CAAC;QAAC,EAAE,EAAE,CAAC,CAAC;QAAC,EAAE,EAAE,CAAC,CAAA;KAAE,CAAC,CAAC,CAAC;IACpE,8CAA8C;IAC9C,KAAK,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;QAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,CAAA;KAAE,CAAC,CAAC;IAChE,uCAAuC;IACvC,QAAQ,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;QAAC,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;QAAC,EAAE,EAAE,WAAW,CAAC,CAAC,CAAC,CAAA;KAAE,CAAC,CAAC;IAChF;;;;;OAKG;IACH,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,iEAAiE;IACjE,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB;;;;;;OAMG;IACH,UAAU,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4DAA4D;IAC5D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,2CAA2C;IAC3C,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;gFAC4E;IAC5E,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,0EAA0E;IAC1E,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,+DAA+D;IAC/D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,0DAA0D;IAC1D,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,+DAA+D;IAC/D,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B;;;+CAG2C;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AA6FD;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,eAAoB,GAAG,YAAY,EAAE,CAmHnF"}
@@ -3,12 +3,21 @@
3
3
  * Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
4
4
  */
5
5
  import { ArrayType, StructType, VariantType, DictType, SetType, RefType, FunctionType, IntegerType, StringType, FloatType, BooleanType, NullType, printType, } from "../types.js";
6
- import { randomType, randomValueFor, randomRecursiveType, randomFunctionType, seedFuzz } from "../fuzz.js";
6
+ import { EastTypeType } from "../type_of_type.js";
7
+ import { randomType, randomValueFor, randomRecursiveType, randomSharedRecursiveType, randomFunctionType, seedFuzz, typeFingerprint } from "../fuzz.js";
8
+ import { encodeBeast2For } from "../serialization/beast2/index.js";
9
+ import { PatchType } from "./type_of_patch.js";
10
+ import { diffFor } from "./diff.js";
11
+ import { invertFor } from "./invert.js";
12
+ import { composeFor } from "./compose.js";
7
13
  const DEFAULT_OPTIONS = {
8
14
  numTypes: 20,
9
15
  numSamples: 5,
16
+ valueDepth: 5,
10
17
  includeRecursive: true,
11
18
  includeFunctions: true,
19
+ nestedRecursive: true,
20
+ includeTypeValues: true,
12
21
  maxValueRetries: 20,
13
22
  attemptsMultiplier: 3,
14
23
  ensureDiversity: true,
@@ -18,7 +27,7 @@ const DEFAULT_OPTIONS = {
18
27
  * Specific type generators to ensure diversity in test coverage.
19
28
  * These guarantee we test important type patterns that random generation might miss.
20
29
  */
21
- function getDiverseTypes(includeRecursive, includeFunctions) {
30
+ function getDiverseTypes(includeRecursive, includeFunctions, nestedRecursive, includeTypeValues) {
22
31
  const types = [
23
32
  // Variants (often missed by random generation)
24
33
  VariantType({ none: NullType, some: IntegerType }),
@@ -51,6 +60,17 @@ function getDiverseTypes(includeRecursive, includeFunctions) {
51
60
  for (let i = 0; i < 3; i++) {
52
61
  types.push(randomRecursiveType());
53
62
  }
63
+ if (nestedRecursive) {
64
+ // A recursive type reached through a container before itself,
65
+ // random bodies, and recursion nested in recursion (#770).
66
+ types.push(randomSharedRecursiveType());
67
+ types.push(randomRecursiveType({ randomBody: true }));
68
+ types.push(ArrayType(randomRecursiveType({ randomBody: true })));
69
+ }
70
+ }
71
+ // Type values: the shape every IR annotation travels as
72
+ if (includeTypeValues) {
73
+ types.push(EastTypeType, StructType({ a: ArrayType(EastTypeType), b: EastTypeType, c: ArrayType(EastTypeType) }));
54
74
  }
55
75
  // Add function types if enabled
56
76
  if (includeFunctions) {
@@ -89,7 +109,7 @@ export function generateFuzzTestCases(options = {}) {
89
109
  return false;
90
110
  }
91
111
  try {
92
- const genValue = randomValueFor(type);
112
+ const genValue = randomValueFor(type, { maxDepth: opts.valueDepth });
93
113
  // Helper to safely generate a value (retry on depth exceeded)
94
114
  const safeGenValue = () => {
95
115
  for (let retry = 0; retry < opts.maxValueRetries; retry++) {
@@ -118,14 +138,30 @@ export function generateFuzzTestCases(options = {}) {
118
138
  // Create array types for East runtime iteration
119
139
  const pairsArrayType = ArrayType(StructType({ before: type, after: type }));
120
140
  const tripletsArrayType = ArrayType(StructType({ v1: type, v2: type, v3: type }));
141
+ // The reference patch values and their bytes, for the runtimes
142
+ // to match byte for byte.
143
+ const patchType = PatchType(type);
144
+ const diff = diffFor(type);
145
+ const invert = invertFor(type);
146
+ const compose = composeFor(type);
147
+ const encode = encodeBeast2For(patchType);
148
+ const hex = (patch) => `0x${Buffer.from(encode(patch)).toString("hex")}`;
149
+ const diffs = pairs.map(({ before, after }) => diff(before, after));
150
+ const diffHex = diffs.map(hex);
151
+ const invertHex = diffs.map((patch) => hex(invert(patch)));
152
+ const composeHex = triplets.map(({ v1, v2, v3 }) => hex(compose(diff(v1, v2), diff(v2, v3))));
121
153
  seenTypes.add(typeName);
122
154
  testCases.push({
123
155
  type,
124
156
  typeName,
157
+ fingerprint: typeFingerprint(type),
125
158
  pairsArrayType,
126
159
  tripletsArrayType,
127
160
  pairs,
128
161
  triplets,
162
+ diffHex,
163
+ invertHex,
164
+ composeHex,
129
165
  });
130
166
  return true;
131
167
  }
@@ -139,7 +175,7 @@ export function generateFuzzTestCases(options = {}) {
139
175
  };
140
176
  // First, add diverse types to ensure coverage
141
177
  if (opts.ensureDiversity) {
142
- const diverseTypes = getDiverseTypes(opts.includeRecursive, opts.includeFunctions);
178
+ const diverseTypes = getDiverseTypes(opts.includeRecursive, opts.includeFunctions, opts.nestedRecursive, opts.includeTypeValues);
143
179
  for (const type of diverseTypes) {
144
180
  if (testCases.length >= opts.numTypes)
145
181
  break;
@@ -155,6 +191,8 @@ export function generateFuzzTestCases(options = {}) {
155
191
  const type = randomType(0, {
156
192
  includeRecursive: opts.includeRecursive,
157
193
  includeFunctions: opts.includeFunctions,
194
+ nestedRecursive: opts.nestedRecursive,
195
+ includeTypeValues: opts.includeTypeValues,
158
196
  });
159
197
  tryAddType(type);
160
198
  }
@@ -1 +1 @@
1
- {"version":3,"file":"fuzz.js","sourceRoot":"","sources":["../../../src/patch/fuzz.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fuzz.js","sourceRoot":"","sources":["../../../src/patch/fuzz.ts"],"names":[],"mappings":"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"}
@@ -18,7 +18,20 @@ import { type EastTypeValue } from "../type_of_type.js";
18
18
  * for passing to constructors like {@link StructType} or for round-tripping
19
19
  * via `toEastTypeValue` if a runtime form is needed.
20
20
  *
21
- * Uses a context map to handle recursive types.
21
+ * The patch type is a pure function of the type — every occurrence of a
22
+ * type gets the same patch type, wherever it sits — and it is the type the
23
+ * runtimes' patch values conform to, so it is one definition on every
24
+ * runtime (`PatchType` in east-py's `types.py`; east-c's `patch.c` builds
25
+ * values of exactly these shapes). A **recursive type is replace-only**:
26
+ * its patch has `unchanged` and `replace` cases and no `patch` case, at the
27
+ * wrapper and at every reference back to it, which is what `diffFor`,
28
+ * `applyFor`, `composeFor`, `invertFor`, `mergeFor` and `walkPatch` implement
29
+ * and what the type-level {@link PatchTypeOf} states. (An earlier version
30
+ * descended into the wrapper's body on its first occurrence only, keyed by
31
+ * object identity, so `Struct{a: Array<T>, b: T}` gave `a`'s element and `b`
32
+ * different patch types — a type no runtime's values conformed to; #774.)
33
+ *
34
+ * `ctx` memoizes the result per type object across one computation.
22
35
  */
23
36
  export declare function PatchType<T extends EastType>(type: T, ctx?: Map<EastType, EastType>): EastType;
24
37
  export declare function PatchType(type: EastTypeValue, ctx?: Map<EastType, EastType>): EastType;
@@ -1 +1 @@
1
- {"version":3,"file":"type_of_patch.d.ts","sourceRoot":"","sources":["../../../src/patch/type_of_patch.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;GAIG;AAEH,OAAO,EACL,KAAK,QAAQ,EAOd,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,KAAK,aAAa,EAAqB,MAAM,oBAAoB,CAAC;AAG3E;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC;AAChG,wBAAgB,SAAS,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC"}
1
+ {"version":3,"file":"type_of_patch.d.ts","sourceRoot":"","sources":["../../../src/patch/type_of_patch.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;GAIG;AAEH,OAAO,EACL,KAAK,QAAQ,EAOd,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,KAAK,aAAa,EAAqB,MAAM,oBAAoB,CAAC;AAG3E;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC;AAChG,wBAAgB,SAAS,CAAC,IAAI,EAAE,aAAa,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC"}
@@ -13,13 +13,16 @@ import { isVariant } from "../containers/variant.js";
13
13
  export function PatchType(type, ctx) {
14
14
  if (isVariant(type))
15
15
  type = fromEastTypeValue(type);
16
- // Initialize context for tracking recursive types
17
16
  const context = ctx ?? new Map();
18
- // Check if we've already computed the patch type for this type (handles recursion)
19
17
  const cached = context.get(type);
20
18
  if (cached !== undefined) {
21
19
  return cached;
22
20
  }
21
+ const result = patchTypeOf(type, context);
22
+ context.set(type, result);
23
+ return result;
24
+ }
25
+ function patchTypeOf(type, context) {
23
26
  const t = type;
24
27
  if (t.type === "Never" ||
25
28
  t.type === "Null" ||
@@ -116,20 +119,12 @@ export function PatchType(type, ctx) {
116
119
  });
117
120
  }
118
121
  else if (t.type === "Recursive") {
119
- // Check if we've already seen this type (handles circular back-references)
120
- const cached = context.get(type);
121
- if (cached !== undefined) {
122
- return cached;
123
- }
124
- // For back-references within the recursive structure, use replace-only semantics
125
- // Register this BEFORE recursing so circular refs are caught
126
- const replaceOnlyType = VariantType({
122
+ // Replace-only, at the wrapper and at every reference back to it: the
123
+ // whole recursive value is the unit of change (see the module comment).
124
+ return VariantType({
127
125
  unchanged: NullType,
128
126
  replace: StructType({ before: type, after: type }),
129
127
  });
130
- context.set(type, replaceOnlyType);
131
- // Recurse into the node - the outer structure gets structural patching
132
- return PatchType(t.node, context);
133
128
  }
134
129
  else if (t.type === "Function" || t.type === "AsyncFunction") {
135
130
  return VariantType({
@@ -1 +1 @@
1
- {"version":3,"file":"type_of_patch.js","sourceRoot":"","sources":["../../../src/patch/type_of_patch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"type_of_patch.js","sourceRoot":"","sources":["../../../src/patch/type_of_patch.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;GAIG;AAEH,OAAO,EAEL,QAAQ,EACR,UAAU,EACV,WAAW,EACX,SAAS,EACT,QAAQ,EACR,WAAW,GACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAsB,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AA4BrD,MAAM,UAAU,SAAS,CAAC,IAA8B,EAAE,GAA6B;IACrF,IAAI,SAAS,CAAC,IAAI,CAAC;QAAE,IAAI,GAAG,iBAAiB,CAAC,IAAqB,CAAC,CAAC;IACrE,MAAM,OAAO,GAAG,GAAG,IAAI,IAAI,GAAG,EAAsB,CAAC;IACrD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,MAAM,MAAM,GAAG,WAAW,CAAC,IAAgB,EAAE,OAAO,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,IAAgB,EAAE,MAAM,CAAC,CAAC;IACtC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,WAAW,CAAC,IAAc,EAAE,OAAgC;IACnE,MAAM,CAAC,GAAG,IAAI,CAAC;IAEf,IACE,CAAC,CAAC,IAAI,KAAK,OAAO;QAClB,CAAC,CAAC,IAAI,KAAK,MAAM;QACjB,CAAC,CAAC,IAAI,KAAK,SAAS;QACpB,CAAC,CAAC,IAAI,KAAK,SAAS;QACpB,CAAC,CAAC,IAAI,KAAK,OAAO;QAClB,CAAC,CAAC,IAAI,KAAK,QAAQ;QACnB,CAAC,CAAC,IAAI,KAAK,UAAU;QACrB,CAAC,CAAC,IAAI,KAAK,MAAM;QACjB,CAAC,CAAC,IAAI,KAAK,QAAQ;QACnB,CAAC,CAAC,IAAI,KAAK,QAAQ,EACnB,CAAC;QACD,OAAO,WAAW,CAAC;YACjB,SAAS,EAAE,QAAQ;YACnB,OAAO,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;SACnD,CAAC,CAAC;IACL,CAAC;SAAM,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC9B,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC;QAC5B,MAAM,gBAAgB,GAAG,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACzD,MAAM,aAAa,GAAG,WAAW,CAAC;YAChC,MAAM,EAAE,WAAW;YACnB,MAAM,EAAE,WAAW;YACnB,MAAM,EAAE,gBAAgB;SACzB,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,UAAU,CAAC;YAC3B,GAAG,EAAE,WAAW;YAChB,MAAM,EAAE,WAAW;YACnB,SAAS,EAAE,aAAa;SACzB,CAAC,CAAC;QACH,OAAO,WAAW,CAAC;YACjB,SAAS,EAAE,QAAQ;YACnB,OAAO,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YAClD,KAAK,EAAE,SAAS,CAAC,SAAS,CAAC;SAC5B,CAAC,CAAC;IACL,CAAC;SAAM,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC;QACtB,MAAM,aAAa,GAAG,WAAW,CAAC;YAChC,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,QAAQ;SACjB,CAAC,CAAC;QACH,OAAO,WAAW,CAAC;YACjB,SAAS,EAAE,QAAQ;YACnB,OAAO,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YAClD,KAAK,EAAE,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;SACxC,CAAC,CAAC;IACL,CAAC;SAAM,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC;QACtB,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC;QAC1B,MAAM,cAAc,GAAG,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,aAAa,GAAG,WAAW,CAAC;YAChC,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,cAAc;SACvB,CAAC,CAAC;QACH,OAAO,WAAW,CAAC;YACjB,SAAS,EAAE,QAAQ;YACnB,OAAO,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YAClD,KAAK,EAAE,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;SACxC,CAAC,CAAC;IACL,CAAC;SAAM,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC/B,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;QAC5B,MAAM,WAAW,GAA6B,EAAE,CAAC;QACjD,KAAK,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3D,WAAW,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACpD,CAAC;QACD,OAAO,WAAW,CAAC;YACjB,SAAS,EAAE,QAAQ;YACnB,OAAO,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YAClD,KAAK,EAAE,UAAU,CAAC,WAAW,CAAC;SAC/B,CAAC,CAAC;IACL,CAAC;SAAM,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAChC,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC;QAC1B,MAAM,UAAU,GAA6B,EAAE,CAAC;QAChD,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YACzD,UAAU,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAClD,CAAC;QACD,OAAO,WAAW,CAAC;YACjB,SAAS,EAAE,QAAQ;YACnB,OAAO,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YAClD,KAAK,EAAE,WAAW,CAAC,UAAU,CAAC;SAC/B,CAAC,CAAC;IACL,CAAC;SAAM,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC;QAC1B,MAAM,cAAc,GAAG,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACrD,OAAO,WAAW,CAAC;YACjB,SAAS,EAAE,QAAQ;YACnB,OAAO,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YAClD,KAAK,EAAE,cAAc;SACtB,CAAC,CAAC;IACL,CAAC;SAAM,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAClC,sEAAsE;QACtE,wEAAwE;QACxE,OAAO,WAAW,CAAC;YACjB,SAAS,EAAE,QAAQ;YACnB,OAAO,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;SACnD,CAAC,CAAC;IACL,CAAC;SAAM,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;QAC/D,OAAO,WAAW,CAAC;YACjB,SAAS,EAAE,QAAQ;YACnB,OAAO,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;SACnD,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,gCAAiC,CAAc,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1E,CAAC;AACH,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=type_of_patch.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type_of_patch.spec.d.ts","sourceRoot":"","sources":["../../../src/patch/type_of_patch.spec.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
4
+ */
5
+ /**
6
+ * PatchType over recursive types (#774): a pure function of the type, and
7
+ * replace-only at a recursive wrapper — the patch type every runtime
8
+ * declares and the type every runtime's patch values conform to.
9
+ */
10
+ import { describe, test } from "node:test";
11
+ import assert from "node:assert/strict";
12
+ import { NullType, IntegerType, StringType, ArrayType, DictType, StructType, VariantType, OptionType, RecursiveType, } from "../types.js";
13
+ import { PatchType } from "./type_of_patch.js";
14
+ import { diffFor } from "./diff.js";
15
+ import { applyFor } from "./apply.js";
16
+ import { isValueOf, isTypeEqual } from "../types.js";
17
+ import { variant } from "../containers/variant.js";
18
+ const Linked = RecursiveType((self) => VariantType({
19
+ cons: StructType({ head: IntegerType, tail: self }),
20
+ nil: NullType,
21
+ }));
22
+ const replaceOnly = (t) => VariantType({ unchanged: NullType, replace: StructType({ before: t, after: t }) });
23
+ const caseType = (v, name) => v.cases[name];
24
+ const cases = (v) => Object.keys(v.cases).sort();
25
+ const fieldsOf = (v) => v.fields;
26
+ describe("PatchType — recursive types (#774)", () => {
27
+ test("a recursive type is replace-only: no patch case at the wrapper", () => {
28
+ const p = PatchType(Linked);
29
+ assert.deepEqual(cases(p), ["replace", "unchanged"]);
30
+ assert.ok(isTypeEqual(p, replaceOnly(Linked)));
31
+ // What diffFor computes and applyFor accepts — the type describes the values.
32
+ const before = variant("cons", { head: 1n, tail: variant("nil", null) });
33
+ const after = variant("cons", { head: 2n, tail: variant("nil", null) });
34
+ const patch = diffFor(Linked)(before, after);
35
+ assert.equal(patch.type, "replace");
36
+ assert.ok(isValueOf(patch, p), "the runtime's patch is a value of the patch type");
37
+ assert.deepEqual(applyFor(Linked)(before, patch), after);
38
+ });
39
+ test("the same type gets the same patch type wherever it occurs", () => {
40
+ // A wrapper reached through a container and bare, side by side: the
41
+ // shape the Patch_Fuzz corpus names several times over. An earlier
42
+ // PatchType descended into the wrapper on its first occurrence only, so
43
+ // `a`'s element and `b` disagreed and neither matched the runtime.
44
+ const Both = StructType({ a: ArrayType(Linked), b: Linked, c: Linked });
45
+ const p = PatchType(Both);
46
+ const fields = fieldsOf(caseType(p, "patch"));
47
+ const aElement = caseType(caseType(fields.a, "patch").value.fields.operation, "update");
48
+ assert.ok(isTypeEqual(aElement, fields.b));
49
+ assert.ok(isTypeEqual(fields.b, fields.c));
50
+ assert.ok(isTypeEqual(fields.b, PatchType(Linked)));
51
+ // ...and in the other order.
52
+ const Swapped = StructType({ b: Linked, a: ArrayType(Linked) });
53
+ assert.ok(isTypeEqual(fieldsOf(caseType(PatchType(Swapped), "patch")).b, fields.b));
54
+ });
55
+ test("a nested wrapper under an enclosing wrapper is replace-only too", () => {
56
+ const Outer = RecursiveType((self) => StructType({
57
+ first: DictType(StringType, Linked),
58
+ second: OptionType(Linked),
59
+ third: Linked,
60
+ next: OptionType(self),
61
+ }));
62
+ const p = PatchType(Outer);
63
+ assert.ok(isTypeEqual(p, replaceOnly(Outer)));
64
+ // The wrapper's body, patched as a struct on its own, names Linked's
65
+ // patch type in every position.
66
+ const body = PatchType(Outer.node);
67
+ const fields = fieldsOf(caseType(body, "patch"));
68
+ const firstValue = caseType(caseType(fields.first, "patch").value, "update");
69
+ assert.ok(isTypeEqual(firstValue, PatchType(Linked)));
70
+ assert.ok(isTypeEqual(caseType(caseType(fields.second, "patch"), "some"), PatchType(Linked)));
71
+ assert.ok(isTypeEqual(fields.third, PatchType(Linked)));
72
+ });
73
+ });
74
+ //# sourceMappingURL=type_of_patch.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type_of_patch.spec.js","sourceRoot":"","sources":["../../../src/patch/type_of_patch.spec.ts"],"names":[],"mappings":"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"}
@@ -23,9 +23,10 @@ export { MAGIC_BYTES } from "./v4/container.js";
23
23
  export { MAGIC_BYTES_V5 } from "./v5/codec.js";
24
24
  export type { Beast2DecodeOptions } from "./shared.js";
25
25
  export type { Beast2Codec } from "./v5/frames.js";
26
- export { Beast2Writer, type Beast2WriterOptions, encodeBeast2SegmentsFor, encodeBeast2PagedFor, type Beast2PagedEncodeOptions, BEAST2_PAGED_BATCH_DEFAULT, BEAST2_PAGED_TARGET_BYTES_DEFAULT, iterBeast2SegmentsFor, Beast2Pages, openBeast2PagesFor, } from "./v5/stream.js";
26
+ export { Beast2Writer, type Beast2WriterOptions, encodeBeast2SegmentsFor, encodeBeast2PagedFor, type Beast2PagedEncodeOptions, BEAST2_PAGED_BATCH_DEFAULT, BEAST2_PAGED_PROBE_BATCH, BEAST2_PAGED_TARGET_BYTES_DEFAULT, iterBeast2SegmentsFor, Beast2Pages, openBeast2PagesFor, } from "./v5/stream.js";
27
27
  export { type Beast2Extents, readBeast2Extents, carveBeast2, spliceBeast2, rebuildBeast2, type RebuildBeast2Options, type Beast2RangeReader, type Beast2SyncRangeReader, type Beast2RangedExtents, type ReadBeast2ExtentsRangedOptions, readBeast2ExtentsRanged, readBeast2ExtentsSync, isBeast2SyncRangeReader, carveBeast2Ranged, spliceBeast2Tail, } from "./v5/geometry.js";
28
28
  export { openBeast2LazyFor, isBeast2LazySafe, type Beast2LazySafeOptions } from "./v5/lazy.js";
29
+ import type { Beast2SyncRangeReader } from "./v5/range.js";
29
30
  /**
30
31
  * Reads the root type a beast2 blob's header declares, without decoding the
31
32
  * value.
@@ -41,6 +42,26 @@ export { openBeast2LazyFor, isBeast2LazySafe, type Beast2LazySafeOptions } from
41
42
  * section is malformed.
42
43
  */
43
44
  export declare function readBeast2Type(data: Uint8Array): EastTypeValue;
45
+ /**
46
+ * Reads the root type a beast2 blob's header declares, through ranged reads
47
+ * instead of the whole blob.
48
+ *
49
+ * The sibling of {@link readBeast2Type}, for a blob too big to hold in memory:
50
+ * a delivered file a caller is about to accept as a dataset, where the point of
51
+ * checking the type is to refuse it *before* paying for its bytes. Both
52
+ * container versions carry the type up front, so one head read normally answers
53
+ * it; a type section wider than the probe costs one more read, never the file.
54
+ *
55
+ * Collection roots have a cheaper and stricter check available in
56
+ * `readBeast2Extents(reader)`, which reads the index too. This one is for the
57
+ * roots that have no index.
58
+ *
59
+ * @param reader - synchronous ranged access to the blob
60
+ * @returns the declared root type
61
+ * @throws {Error} When the blob is not a beast2 container, or its type section
62
+ * is malformed or implausibly large.
63
+ */
64
+ export declare function readBeast2HeaderType(reader: Beast2SyncRangeReader): EastTypeValue;
44
65
  /**
45
66
  * Whether a blob carries the v5 trailing paging index (a well-formed
46
67
  * index + footer). O(index) — inspects the blob's tail without decoding any
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/serialization/beast2/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/serialization/beast2/index.ts"],"names":[],"mappings":"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"}
@@ -22,7 +22,7 @@ import { encodeBeast2V5For, decodeBeast2V5For, decodeBeast2V5ForAsync, decodeBea
22
22
  import { BEAST2_WRITE_VERSION } from "./version.js";
23
23
  export { MAGIC_BYTES } from "./v4/container.js";
24
24
  export { MAGIC_BYTES_V5 } from "./v5/codec.js";
25
- export { Beast2Writer, encodeBeast2SegmentsFor, encodeBeast2PagedFor, BEAST2_PAGED_BATCH_DEFAULT, BEAST2_PAGED_TARGET_BYTES_DEFAULT, iterBeast2SegmentsFor, Beast2Pages, openBeast2PagesFor, } from "./v5/stream.js";
25
+ export { Beast2Writer, encodeBeast2SegmentsFor, encodeBeast2PagedFor, BEAST2_PAGED_BATCH_DEFAULT, BEAST2_PAGED_PROBE_BATCH, BEAST2_PAGED_TARGET_BYTES_DEFAULT, iterBeast2SegmentsFor, Beast2Pages, openBeast2PagesFor, } from "./v5/stream.js";
26
26
  export { readBeast2Extents, carveBeast2, spliceBeast2, rebuildBeast2, readBeast2ExtentsRanged, readBeast2ExtentsSync, isBeast2SyncRangeReader, carveBeast2Ranged, spliceBeast2Tail, } from "./v5/geometry.js";
27
27
  export { openBeast2LazyFor, isBeast2LazySafe } from "./v5/lazy.js";
28
28
  import { readIndex, MAGIC_BYTES_V5 } from "./v5/codec.js";
@@ -45,6 +45,61 @@ export function readBeast2Type(data) {
45
45
  return readBeast2V4Type(data);
46
46
  return readTypeSection(new BufferReader(data, MAGIC_BYTES_V5.length)).rootType;
47
47
  }
48
+ /** Head read sizes {@link readBeast2HeaderType} tries, in order. The first
49
+ * covers every type section anything realistic writes; the last is a ceiling,
50
+ * not a budget — a blob whose declared type needs more than 16 MiB of type
51
+ * table is malformed, not merely large. */
52
+ const HEADER_TYPE_PROBE_BYTES = [64 * 1024, 1024 * 1024, 16 * 1024 * 1024];
53
+ /**
54
+ * Reads the root type a beast2 blob's header declares, through ranged reads
55
+ * instead of the whole blob.
56
+ *
57
+ * The sibling of {@link readBeast2Type}, for a blob too big to hold in memory:
58
+ * a delivered file a caller is about to accept as a dataset, where the point of
59
+ * checking the type is to refuse it *before* paying for its bytes. Both
60
+ * container versions carry the type up front, so one head read normally answers
61
+ * it; a type section wider than the probe costs one more read, never the file.
62
+ *
63
+ * Collection roots have a cheaper and stricter check available in
64
+ * `readBeast2Extents(reader)`, which reads the index too. This one is for the
65
+ * roots that have no index.
66
+ *
67
+ * @param reader - synchronous ranged access to the blob
68
+ * @returns the declared root type
69
+ * @throws {Error} When the blob is not a beast2 container, or its type section
70
+ * is malformed or implausibly large.
71
+ */
72
+ export function readBeast2HeaderType(reader) {
73
+ const size = reader.size;
74
+ if (size < 8) {
75
+ throw new Error(`Data too short for Beast2 format: ${size} bytes`);
76
+ }
77
+ let lastError;
78
+ let read = 0;
79
+ for (const probe of HEADER_TYPE_PROBE_BYTES) {
80
+ const length = Math.min(size, probe);
81
+ if (length <= read && read > 0)
82
+ break;
83
+ read = length;
84
+ const head = reader.read(0, length);
85
+ if (head.length !== length) {
86
+ throw new Error(`beast2: reader returned ${head.length} bytes for a ${length}-byte range at offset 0`);
87
+ }
88
+ try {
89
+ return readBeast2Type(head);
90
+ }
91
+ catch (err) {
92
+ // A short head fails the same way a malformed one does, so grow first
93
+ // and only report the failure once the whole type section must be in
94
+ // hand. `read === size` means it is.
95
+ if (length === size)
96
+ throw err;
97
+ lastError = err;
98
+ }
99
+ }
100
+ throw new Error(`beast2: type section not readable in the first ${read} bytes — ` +
101
+ `${lastError instanceof Error ? lastError.message : String(lastError)}`);
102
+ }
48
103
  /**
49
104
  * Whether a blob carries the v5 trailing paging index (a well-formed
50
105
  * index + footer). O(index) — inspects the blob's tail without decoding any
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/serialization/beast2/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/serialization/beast2/index.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,7 @@ import { describe, test } from "node:test";
11
11
  import assert from "node:assert/strict";
12
12
  import { NullType, BooleanType, IntegerType, FloatType, StringType, DateTimeType, BlobType, ArrayType, SetType, DictType, StructType, VariantType, RecursiveType, RefType, VectorType, MatrixType, FunctionType, } from "../../types.js";
13
13
  import { toEastTypeValue, EastTypeValueType } from "../../type_of_type.js";
14
+ import { TypeTableBuilder } from "./v4/type-table.js";
14
15
  import { IRType } from "../../ir.js";
15
16
  import { equalFor } from "../../comparison.js";
16
17
  import { East, variant, ref, some, none } from "../../index.js";
@@ -676,6 +677,21 @@ describe("Beast2 — canonical type table", () => {
676
677
  });
677
678
  assertCanonical(EastTypeValueType, toEastTypeValue(T), "EastTypeValueType");
678
679
  });
680
+ test("a deduplicated wrapper binds every id that named it", () => {
681
+ // One recursive type reaches a table under two wrapper ids — an interned
682
+ // type id for a type built here, a table index for one read off the wire.
683
+ // The ids are runtime artefacts and are never written, so the wrappers
684
+ // dedup to one entry; binding only the first id left a later bare `ref`
685
+ // under the second — which is what a mutable container over the
686
+ // self-reference adds — bound by no wrapper, failing the whole encode.
687
+ const wrapper = (id) => variant("Recursive", variant("wrapper", { id, inner: variant("Integer", null) }));
688
+ const selfRef = (id) => variant("Recursive", variant("ref", id));
689
+ const builder = new TypeTableBuilder();
690
+ const first = builder.add(wrapper(42n));
691
+ assert.equal(builder.add(wrapper(7n)), first, "structurally equal wrappers are one entry");
692
+ assert.equal(builder.add(selfRef(42n)), first);
693
+ assert.equal(builder.add(selfRef(7n)), first, "the deduplicated wrapper's id resolves too");
694
+ });
679
695
  test("one table index yields one shared object", () => {
680
696
  // Identity, not just structure: TypeTableBuilder dedups EastTypeValues by
681
697
  // object identity, so a decoded type that hands out two objects for one