@elaraai/east 1.0.80 → 1.0.81
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/src/builtins.d.ts +1 -1
- package/dist/src/builtins.d.ts.map +1 -1
- package/dist/src/builtins.js +19 -0
- package/dist/src/builtins.js.map +1 -1
- package/dist/src/codegen/spellings.d.ts.map +1 -1
- package/dist/src/codegen/spellings.js +3 -0
- package/dist/src/codegen/spellings.js.map +1 -1
- package/dist/src/comparison.d.ts +54 -0
- package/dist/src/comparison.d.ts.map +1 -1
- package/dist/src/comparison.equivalent.spec.d.ts +6 -0
- package/dist/src/comparison.equivalent.spec.d.ts.map +1 -0
- package/dist/src/comparison.equivalent.spec.js +130 -0
- package/dist/src/comparison.equivalent.spec.js.map +1 -0
- package/dist/src/comparison.js +93 -20
- package/dist/src/comparison.js.map +1 -1
- package/dist/src/compile/builtins/array.d.ts +2 -1
- package/dist/src/compile/builtins/array.d.ts.map +1 -1
- package/dist/src/compile/builtins/array.js +35 -0
- package/dist/src/compile/builtins/array.js.map +1 -1
- package/dist/src/compile/builtins/dict.d.ts +1 -0
- package/dist/src/compile/builtins/dict.d.ts.map +1 -1
- package/dist/src/compile/builtins/dict.js +25 -0
- package/dist/src/compile/builtins/dict.js.map +1 -1
- package/dist/src/compile/builtins/set.d.ts +1 -0
- package/dist/src/compile/builtins/set.d.ts.map +1 -1
- package/dist/src/compile/builtins/set.js +25 -0
- package/dist/src/compile/builtins/set.js.map +1 -1
- package/dist/src/compile/builtins/tree.d.ts +32 -0
- package/dist/src/compile/builtins/tree.d.ts.map +1 -0
- package/dist/src/compile/builtins/tree.js +108 -0
- package/dist/src/compile/builtins/tree.js.map +1 -0
- package/dist/src/compile/functions.d.ts.map +1 -1
- package/dist/src/compile/functions.js +4 -4
- package/dist/src/compile/functions.js.map +1 -1
- package/dist/src/compile/runtime.d.ts +12 -15
- package/dist/src/compile/runtime.d.ts.map +1 -1
- package/dist/src/compile/runtime.js +19 -16
- package/dist/src/compile/runtime.js.map +1 -1
- package/dist/src/compile.signature.spec.d.ts +6 -0
- package/dist/src/compile.signature.spec.d.ts.map +1 -0
- package/dist/src/compile.signature.spec.js +53 -0
- package/dist/src/compile.signature.spec.js.map +1 -0
- package/dist/src/expr/array.d.ts +158 -81
- package/dist/src/expr/array.d.ts.map +1 -1
- package/dist/src/expr/array.js +68 -51
- package/dist/src/expr/array.js.map +1 -1
- package/dist/src/expr/ast.d.ts.map +1 -1
- package/dist/src/expr/ast.js +13 -0
- package/dist/src/expr/ast.js.map +1 -1
- package/dist/src/expr/blob.d.ts +8 -8
- package/dist/src/expr/blob.js +8 -8
- package/dist/src/expr/block.d.ts +18 -5
- package/dist/src/expr/block.d.ts.map +1 -1
- package/dist/src/expr/block.js +19 -0
- package/dist/src/expr/block.js.map +1 -1
- package/dist/src/expr/boolean.d.ts +10 -10
- package/dist/src/expr/boolean.js +10 -10
- package/dist/src/expr/datetime.d.ts +28 -28
- package/dist/src/expr/datetime.js +28 -28
- package/dist/src/expr/dict.d.ts +101 -51
- package/dist/src/expr/dict.d.ts.map +1 -1
- package/dist/src/expr/dict.js +97 -36
- package/dist/src/expr/dict.js.map +1 -1
- package/dist/src/expr/float.d.ts +23 -23
- package/dist/src/expr/float.js +23 -23
- package/dist/src/expr/integer.d.ts +17 -17
- package/dist/src/expr/integer.js +11 -11
- package/dist/src/expr/libs/array.d.ts +6 -6
- package/dist/src/expr/libs/array.js +6 -6
- package/dist/src/expr/libs/blob.d.ts +2 -2
- package/dist/src/expr/libs/blob.js +2 -2
- package/dist/src/expr/libs/datetime.d.ts +25 -25
- package/dist/src/expr/libs/datetime.js +25 -25
- package/dist/src/expr/libs/dict.d.ts +2 -2
- package/dist/src/expr/libs/dict.js +2 -2
- package/dist/src/expr/libs/float.d.ts +15 -15
- package/dist/src/expr/libs/float.js +15 -15
- package/dist/src/expr/libs/integer.d.ts +12 -12
- package/dist/src/expr/libs/integer.js +12 -12
- package/dist/src/expr/libs/set.d.ts +2 -2
- package/dist/src/expr/libs/set.js +2 -2
- package/dist/src/expr/libs/string.d.ts +4 -4
- package/dist/src/expr/libs/string.js +4 -4
- package/dist/src/expr/recursive.d.ts +22 -5
- package/dist/src/expr/recursive.d.ts.map +1 -1
- package/dist/src/expr/recursive.js +22 -5
- package/dist/src/expr/recursive.js.map +1 -1
- package/dist/src/expr/ref.d.ts +5 -5
- package/dist/src/expr/ref.js +5 -5
- package/dist/src/expr/set.d.ts +96 -51
- package/dist/src/expr/set.d.ts.map +1 -1
- package/dist/src/expr/set.js +85 -29
- package/dist/src/expr/set.js.map +1 -1
- package/dist/src/expr/string.d.ts +28 -28
- package/dist/src/expr/string.js +28 -28
- package/dist/src/expr/struct.d.ts.map +1 -1
- package/dist/src/expr/struct.js +2 -2
- package/dist/src/expr/variant.d.ts +12 -12
- package/dist/src/expr/variant.js +7 -7
- package/dist/src/function_symbols.d.ts +28 -0
- package/dist/src/function_symbols.d.ts.map +1 -0
- package/dist/src/function_symbols.js +28 -0
- package/dist/src/function_symbols.js.map +1 -0
- package/dist/src/location.d.ts +32 -0
- package/dist/src/location.d.ts.map +1 -1
- package/dist/src/location.js +38 -0
- package/dist/src/location.js.map +1 -1
- package/dist/src/location.spec.js +89 -1
- package/dist/src/location.spec.js.map +1 -1
- package/dist/src/runner_protocol.d.ts +46 -5
- package/dist/src/runner_protocol.d.ts.map +1 -1
- package/dist/src/runner_protocol.js +24 -5
- package/dist/src/runner_protocol.js.map +1 -1
- package/dist/src/serialization/beast2/index.d.ts +1 -0
- package/dist/src/serialization/beast2/index.d.ts.map +1 -1
- package/dist/src/serialization/beast2/index.js +1 -0
- package/dist/src/serialization/beast2/index.js.map +1 -1
- package/dist/src/serialization/beast2/v5/canonical.d.ts +101 -0
- package/dist/src/serialization/beast2/v5/canonical.d.ts.map +1 -0
- package/dist/src/serialization/beast2/v5/canonical.js +436 -0
- package/dist/src/serialization/beast2/v5/canonical.js.map +1 -0
- package/dist/src/serialization/beast2/v5/canonical.spec.d.ts +6 -0
- package/dist/src/serialization/beast2/v5/canonical.spec.d.ts.map +1 -0
- package/dist/src/serialization/beast2/v5/canonical.spec.js +124 -0
- package/dist/src/serialization/beast2/v5/canonical.spec.js.map +1 -0
- package/dist/src/serialization/beast2/v5/elements.d.ts +3 -1
- package/dist/src/serialization/beast2/v5/elements.d.ts.map +1 -1
- package/dist/src/serialization/beast2/v5/elements.js +7 -2
- package/dist/src/serialization/beast2/v5/elements.js.map +1 -1
- package/dist/src/serialization/beast2/v5/elements.spec.js +1 -1
- package/dist/src/serialization/beast2/v5/elements.spec.js.map +1 -1
- package/dist/src/serialization/beast2/v5/intake.d.ts +98 -0
- package/dist/src/serialization/beast2/v5/intake.d.ts.map +1 -0
- package/dist/src/serialization/beast2/v5/intake.js +462 -0
- package/dist/src/serialization/beast2/v5/intake.js.map +1 -0
- package/dist/src/serialization/beast2/v5/intake.spec.d.ts +6 -0
- package/dist/src/serialization/beast2/v5/intake.spec.d.ts.map +1 -0
- package/dist/src/serialization/beast2/v5/intake.spec.js +202 -0
- package/dist/src/serialization/beast2/v5/intake.spec.js.map +1 -0
- package/dist/src/serialization/index.d.ts +1 -1
- package/dist/src/serialization/index.d.ts.map +1 -1
- package/dist/src/serialization/index.js +1 -1
- package/dist/src/serialization/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,462 @@
|
|
|
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
|
+
* Taking a delivered collection in: a beast2 file from outside, read a segment
|
|
7
|
+
* at a time and written through the Writer.
|
|
8
|
+
*
|
|
9
|
+
* A delivery is a collection some writer wrote. Usually that was a Writer, whose
|
|
10
|
+
* rows are already the bytes the Writer writes for them; sometimes an older
|
|
11
|
+
* writer or another tool, whose bytes differ in ways decoding and encoding again
|
|
12
|
+
* would remove. Each segment is walked by its type without building a value
|
|
13
|
+
* ({@link canonicalSkipperFor}), and when every row of it is the Writer's
|
|
14
|
+
* encoding its rows go to the Writer as they stand, which cuts and frames them
|
|
15
|
+
* again: for a delivery the Writer wrote, that walk and that framing are the
|
|
16
|
+
* whole cost.
|
|
17
|
+
*
|
|
18
|
+
* A segment with a row the Writer would write otherwise is walked again with
|
|
19
|
+
* the lenient skipper, which holds the bytes to what the decoder reads. If it
|
|
20
|
+
* passes, the segment's rows are decoded — against one definition table, so a
|
|
21
|
+
* row may alias a container of an earlier row, as an older writer's could — and
|
|
22
|
+
* each is encoded again on its own. Anything else is refused, naming the
|
|
23
|
+
* segment and what is wrong with it, in words every runner uses.
|
|
24
|
+
*
|
|
25
|
+
* A Set's elements and a Dict's keys must strictly ascend across the whole
|
|
26
|
+
* delivery. A piece of a delivery — a run of its segments, by its index —
|
|
27
|
+
* checks only its own rows: whoever assembles the pieces checks where they
|
|
28
|
+
* meet.
|
|
29
|
+
*
|
|
30
|
+
* Memory is one segment of the delivery and the Writer's open segment. A
|
|
31
|
+
* version 4 delivery has no segments, so it is read whole, within the limit a
|
|
32
|
+
* segment is read in.
|
|
33
|
+
*/
|
|
34
|
+
import { EastTypeValueType, isTypeValueEqual } from "../../../type_of_type.js";
|
|
35
|
+
import { SourceMap } from "../../../location.js";
|
|
36
|
+
import { printFor } from "../../east.js";
|
|
37
|
+
import { compareFor } from "../../../comparison.js";
|
|
38
|
+
import { SortedSet } from "../../../containers/sortedset.js";
|
|
39
|
+
import { SortedMap } from "../../../containers/sortedmap.js";
|
|
40
|
+
import { BufferReader, BufferWriter } from "../../binary-utils.js";
|
|
41
|
+
import { buildPlatformContext } from "../shared.js";
|
|
42
|
+
import { MAGIC_BYTES, decodeBeast2V4For, readBeast2V4Type } from "../v4/container.js";
|
|
43
|
+
import { asTypeValue, readTypeSection } from "./type-section.js";
|
|
44
|
+
import { FOOTER_MAGIC_V5, MAGIC_BYTES_V5, TAG_NEW, buildV5Decoder, readSourceMapSectionV5 } from "./codec.js";
|
|
45
|
+
import { CODEC_DEFLATE, CODEC_NONE, FRAME_HEADER_MAX, inflateRawSync } from "./frames.js";
|
|
46
|
+
import { RUN_MAX_BYTES } from "./runs.js";
|
|
47
|
+
import { SEGMENT_MAX_BYTES, decodeBeast2FenceFor } from "./boundary.js";
|
|
48
|
+
import { readBeast2ExtentsSync, readExact } from "./range.js";
|
|
49
|
+
import { elementEncoderFor } from "./stream.js";
|
|
50
|
+
import { Beast2ManifestWriter } from "./manifest-writer.js";
|
|
51
|
+
import { BEAST2_ZERO_WIDTH_MAX, Beast2NotCanonicalError, canonicalSkipperFor, zeroWidth } from "./canonical.js";
|
|
52
|
+
/** Head reads the header sections are parsed from, in order: neither section
|
|
53
|
+
* says how long it is before it is parsed. The last is a ceiling — a type
|
|
54
|
+
* section wider than 16 MiB is malformed, not merely large. */
|
|
55
|
+
const HEAD_PROBE_BYTES = [4 * 1024, 256 * 1024, 16 * 1024 * 1024];
|
|
56
|
+
/** A delivery refused: what is wrong with it, in the words every runner uses. */
|
|
57
|
+
export class Beast2IntakeError extends Error {
|
|
58
|
+
/**
|
|
59
|
+
* @param message - what is wrong, after the `intake: ` every refusal starts
|
|
60
|
+
* with
|
|
61
|
+
*/
|
|
62
|
+
constructor(message) {
|
|
63
|
+
super(`intake: ${message}`);
|
|
64
|
+
this.name = "Beast2IntakeError";
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
function refuse(message) {
|
|
68
|
+
throw new Beast2IntakeError(message);
|
|
69
|
+
}
|
|
70
|
+
/** The refusal of segment `n`'s frame, for what is wrong with it. */
|
|
71
|
+
function malformed(n, reason) {
|
|
72
|
+
refuse(`segment ${n} of the delivery is malformed: ${reason}`);
|
|
73
|
+
}
|
|
74
|
+
/** Whether a type holds a function anywhere. */
|
|
75
|
+
function holdsFunction(type, seen = new Set()) {
|
|
76
|
+
if (seen.has(type))
|
|
77
|
+
return false;
|
|
78
|
+
seen.add(type);
|
|
79
|
+
switch (type.type) {
|
|
80
|
+
case "Function":
|
|
81
|
+
case "AsyncFunction":
|
|
82
|
+
return true;
|
|
83
|
+
case "Array":
|
|
84
|
+
case "Set":
|
|
85
|
+
case "Ref":
|
|
86
|
+
case "Vector":
|
|
87
|
+
case "Matrix":
|
|
88
|
+
return holdsFunction(type.value, seen);
|
|
89
|
+
case "Dict":
|
|
90
|
+
return holdsFunction(type.value.key, seen) || holdsFunction(type.value.value, seen);
|
|
91
|
+
case "Struct":
|
|
92
|
+
case "Variant":
|
|
93
|
+
return type.value.some((field) => holdsFunction(field.type, seen));
|
|
94
|
+
case "Recursive": {
|
|
95
|
+
const node = type.value;
|
|
96
|
+
return node.type === "wrapper" && holdsFunction(node.value.inner, seen);
|
|
97
|
+
}
|
|
98
|
+
default:
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Builds an intake: `intake(delivery, sink)` reads a delivered collection of
|
|
104
|
+
* `type` and writes it through the Writer as a manifest directory.
|
|
105
|
+
*
|
|
106
|
+
* @param type - the declared collection type (Array/Set/Dict); the delivery's
|
|
107
|
+
* header must name exactly it
|
|
108
|
+
* @returns a function taking the delivery, the sink its manifest directory goes
|
|
109
|
+
* to, and the options, and returning what the intake came to
|
|
110
|
+
* @throws {Beast2IntakeError} When the declared type is not a collection, or
|
|
111
|
+
* holds a function.
|
|
112
|
+
*
|
|
113
|
+
* @remarks
|
|
114
|
+
* The returned function throws a {@link Beast2IntakeError} when the delivery is
|
|
115
|
+
* refused: not a beast2 blob of version 4 or 5, another type, a segment larger
|
|
116
|
+
* than {@link RUN_MAX_BYTES}, a malformed frame, a row the decoder cannot read,
|
|
117
|
+
* or keys that do not strictly ascend. What it wrote to the sink before then
|
|
118
|
+
* has no manifest, so no reader takes it as complete.
|
|
119
|
+
*
|
|
120
|
+
* @example
|
|
121
|
+
* ```ts
|
|
122
|
+
* const type = DictType(StringType, IntegerType);
|
|
123
|
+
* const delivery = encodeBeast2PagedFor(type)(new Map([["a", 1n], ["b", 2n]]));
|
|
124
|
+
* const files = new Map<string, Uint8Array>();
|
|
125
|
+
* intakeBeast2For(type)({ size: delivery.length, read: (at, n) => delivery.subarray(at, at + n) }, {
|
|
126
|
+
* object: (hash, bytes) => files.set(`${hash}.beast2`, bytes),
|
|
127
|
+
* manifest: (bytes) => files.set("manifest.beast2", bytes),
|
|
128
|
+
* });
|
|
129
|
+
* // files holds the manifest the Writer writes for the value, and its segments
|
|
130
|
+
* ```
|
|
131
|
+
*/
|
|
132
|
+
export function intakeBeast2For(type) {
|
|
133
|
+
const typeValue = asTypeValue(type);
|
|
134
|
+
if (typeValue.type !== "Array" && typeValue.type !== "Set" && typeValue.type !== "Dict") {
|
|
135
|
+
refuse(`a delivery is an Array, Set or Dict, not ${typeValue.type}`);
|
|
136
|
+
}
|
|
137
|
+
if (holdsFunction(typeValue))
|
|
138
|
+
refuse("the declared type holds a function, which a delivery does not carry");
|
|
139
|
+
const kind = typeValue.type;
|
|
140
|
+
const keyType = kind === "Array" ? null
|
|
141
|
+
: kind === "Set" ? typeValue.value : typeValue.value.key;
|
|
142
|
+
const printType = printFor(EastTypeValueType);
|
|
143
|
+
const printKey = keyType === null ? null : printFor(keyType);
|
|
144
|
+
const cmp = keyType === null ? null : compareFor(keyType);
|
|
145
|
+
const decodeKey = keyType === null ? null : decodeBeast2FenceFor(keyType);
|
|
146
|
+
const noun = kind === "Set" ? "Set elements" : "Dict keys";
|
|
147
|
+
// Rows that encode to no bytes: their count is bounded as every decoder
|
|
148
|
+
// bounds it, since the bytes left bound nothing.
|
|
149
|
+
const zeroRows = kind === "Dict"
|
|
150
|
+
? zeroWidth(typeValue.value.key) && zeroWidth(typeValue.value.value)
|
|
151
|
+
: zeroWidth(typeValue.value);
|
|
152
|
+
// A row's skippers, strict and lenient: a Dict's key and then its value.
|
|
153
|
+
const skippers = (lenient) => kind === "Dict"
|
|
154
|
+
? {
|
|
155
|
+
key: canonicalSkipperFor(typeValue.value.key, { lenient }),
|
|
156
|
+
value: canonicalSkipperFor(typeValue.value.value, { lenient }),
|
|
157
|
+
}
|
|
158
|
+
: { key: canonicalSkipperFor(typeValue.value, { lenient }), value: null };
|
|
159
|
+
const strict = skippers(false);
|
|
160
|
+
const lenient = skippers(true);
|
|
161
|
+
// A row's decoder, for a segment read and written again.
|
|
162
|
+
const typeCtx = new Map();
|
|
163
|
+
const decodeRow = kind === "Dict"
|
|
164
|
+
? (() => {
|
|
165
|
+
const key = buildV5Decoder(typeValue.value.key, typeCtx);
|
|
166
|
+
const value = buildV5Decoder(typeValue.value.value, typeCtx);
|
|
167
|
+
return (reader, ctx) => [key(reader, ctx), value(reader, ctx)];
|
|
168
|
+
})()
|
|
169
|
+
: buildV5Decoder(typeValue.value, typeCtx);
|
|
170
|
+
return (delivery, sink, options) => {
|
|
171
|
+
// Opened at the first row, or at the end for an empty collection, so a
|
|
172
|
+
// delivery refused by its header writes nothing.
|
|
173
|
+
let opened = null;
|
|
174
|
+
const writer = () => opened ??= new Beast2ManifestWriter(typeValue, sink, { parallel: options?.parallel ?? false });
|
|
175
|
+
const encodeRow = elementEncoderFor(typeValue, null);
|
|
176
|
+
const scratch = new BufferWriter();
|
|
177
|
+
const spans = [];
|
|
178
|
+
const defs = [];
|
|
179
|
+
let previous;
|
|
180
|
+
let hasPrevious = false;
|
|
181
|
+
let rows = 0;
|
|
182
|
+
let segments = 0;
|
|
183
|
+
let rewritten = 0;
|
|
184
|
+
/** Holds a row's key to strict ascent from the last. */
|
|
185
|
+
const ascend = (key) => {
|
|
186
|
+
if (hasPrevious && cmp(previous, key) >= 0) {
|
|
187
|
+
refuse(`the delivery's ${noun} must ascend strictly in East order, and ${printKey(key)} follows ${printKey(previous)}`);
|
|
188
|
+
}
|
|
189
|
+
previous = key;
|
|
190
|
+
hasPrevious = true;
|
|
191
|
+
};
|
|
192
|
+
/** Adds a row that is already the Writer's bytes. */
|
|
193
|
+
const addBytes = (bytes, keyLength) => {
|
|
194
|
+
if (decodeKey !== null)
|
|
195
|
+
ascend(decodeKey(bytes.subarray(0, keyLength)));
|
|
196
|
+
writer().addEncoded(bytes, keyLength);
|
|
197
|
+
rows++;
|
|
198
|
+
};
|
|
199
|
+
/** Adds a row decoded from bytes the Writer would write otherwise. */
|
|
200
|
+
const addValue = (row) => {
|
|
201
|
+
if (kind !== "Array")
|
|
202
|
+
ascend(kind === "Dict" ? row[0] : row);
|
|
203
|
+
scratch.pop();
|
|
204
|
+
const keyLength = encodeRow(row, scratch);
|
|
205
|
+
writer().addEncoded(scratch.toUint8Array(), keyLength);
|
|
206
|
+
rows++;
|
|
207
|
+
};
|
|
208
|
+
/** Walks a row with a pair of skippers, and returns its key's length. */
|
|
209
|
+
const walk = (reader, pair, rowDefs) => {
|
|
210
|
+
const start = reader.offset;
|
|
211
|
+
pair.key(reader, rowDefs);
|
|
212
|
+
const keyLength = reader.offset - start;
|
|
213
|
+
pair.value?.(reader, rowDefs);
|
|
214
|
+
return kind === "Array" ? 0 : keyLength;
|
|
215
|
+
};
|
|
216
|
+
/**
|
|
217
|
+
* Takes segment `n` in: `count` rows from `start` in a frame's logical
|
|
218
|
+
* bytes. Returns where the segment ends.
|
|
219
|
+
*/
|
|
220
|
+
const segment = (n, logical, start, count) => {
|
|
221
|
+
segments++;
|
|
222
|
+
if (zeroRows && count > BEAST2_ZERO_WIDTH_MAX)
|
|
223
|
+
malformed(n, "its element count is more than a reader takes");
|
|
224
|
+
const reader = new BufferReader(logical, start);
|
|
225
|
+
spans.length = 0;
|
|
226
|
+
let canonical = true;
|
|
227
|
+
try {
|
|
228
|
+
for (let i = 0; i < count; i++) {
|
|
229
|
+
const at = reader.offset;
|
|
230
|
+
defs.length = 0;
|
|
231
|
+
const keyLength = walk(reader, strict, defs);
|
|
232
|
+
spans.push(at, reader.offset, keyLength);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
catch (err) {
|
|
236
|
+
if (!(err instanceof Beast2NotCanonicalError))
|
|
237
|
+
throw err;
|
|
238
|
+
canonical = false;
|
|
239
|
+
}
|
|
240
|
+
if (canonical) {
|
|
241
|
+
for (let i = 0; i < spans.length; i += 3)
|
|
242
|
+
addBytes(logical.subarray(spans[i], spans[i + 1]), spans[i + 2]);
|
|
243
|
+
return reader.offset;
|
|
244
|
+
}
|
|
245
|
+
// A row the Writer would write otherwise: the segment is held to what
|
|
246
|
+
// the decoder reads, its rows sharing one definition table as a
|
|
247
|
+
// decoder's do, and then read and written again.
|
|
248
|
+
rewritten++;
|
|
249
|
+
const loose = new BufferReader(logical, start);
|
|
250
|
+
const shared = [];
|
|
251
|
+
try {
|
|
252
|
+
for (let i = 0; i < count; i++)
|
|
253
|
+
walk(loose, lenient, shared);
|
|
254
|
+
}
|
|
255
|
+
catch (err) {
|
|
256
|
+
if (err instanceof Beast2NotCanonicalError)
|
|
257
|
+
refuse(`segment ${n} of the delivery holds a row that does not decode: ${err.reason}`);
|
|
258
|
+
throw err;
|
|
259
|
+
}
|
|
260
|
+
const decoding = new BufferReader(logical, start);
|
|
261
|
+
const ctx = { containers: [], sourceMap: new SourceMap(), frozen: false, ...buildPlatformContext() };
|
|
262
|
+
for (let i = 0; i < count; i++)
|
|
263
|
+
addValue(decodeRow(decoding, ctx));
|
|
264
|
+
return loose.offset;
|
|
265
|
+
};
|
|
266
|
+
/** A frame at `at`, no further than `end`: the segment it holds is `n`.
|
|
267
|
+
* Returns its logical bytes and where the next frame starts. */
|
|
268
|
+
const frame = (n, at, end) => {
|
|
269
|
+
if (at >= end)
|
|
270
|
+
malformed(n, "its frame runs past the end of the delivery");
|
|
271
|
+
const head = new BufferReader(readExact(delivery, at, Math.min(FRAME_HEADER_MAX, end - at)), 0);
|
|
272
|
+
let codec;
|
|
273
|
+
let logicalBytes;
|
|
274
|
+
let payloadBytes;
|
|
275
|
+
try {
|
|
276
|
+
codec = head.readVarint();
|
|
277
|
+
logicalBytes = head.readVarint();
|
|
278
|
+
payloadBytes = head.readVarint();
|
|
279
|
+
}
|
|
280
|
+
catch {
|
|
281
|
+
malformed(n, "its frame runs past the end of the delivery");
|
|
282
|
+
}
|
|
283
|
+
if (logicalBytes > RUN_MAX_BYTES) {
|
|
284
|
+
refuse(`segment ${n} of the delivery, at offset ${at}, holds ${logicalBytes} bytes, more than the ${RUN_MAX_BYTES} a ` +
|
|
285
|
+
`segment is read in — write it again with a current Writer, whose segments stay under ${SEGMENT_MAX_BYTES} ` +
|
|
286
|
+
`bytes: it was encoded whole, or cut by an older Writer that bounded a segment by its element count alone`);
|
|
287
|
+
}
|
|
288
|
+
if (codec !== CODEC_NONE && codec !== CODEC_DEFLATE)
|
|
289
|
+
malformed(n, `its frame's codec, ${codec}, is not one every runner reads`);
|
|
290
|
+
if (codec === CODEC_NONE && payloadBytes !== logicalBytes)
|
|
291
|
+
malformed(n, "its frame's lengths disagree");
|
|
292
|
+
const payloadAt = at + head.offset;
|
|
293
|
+
if (payloadBytes > end - payloadAt)
|
|
294
|
+
malformed(n, "its frame runs past the end of the delivery");
|
|
295
|
+
const payload = readExact(delivery, payloadAt, payloadBytes);
|
|
296
|
+
let logical;
|
|
297
|
+
if (codec === CODEC_NONE) {
|
|
298
|
+
logical = payload;
|
|
299
|
+
}
|
|
300
|
+
else {
|
|
301
|
+
try {
|
|
302
|
+
logical = inflateRawSync(payload, logicalBytes);
|
|
303
|
+
}
|
|
304
|
+
catch {
|
|
305
|
+
malformed(n, "its frame does not inflate to the length its header declares");
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
return { logical, next: payloadAt + payloadBytes };
|
|
309
|
+
};
|
|
310
|
+
/** A segment's element count, at the front of its frame's logical bytes. */
|
|
311
|
+
const countOf = (n, reader) => {
|
|
312
|
+
try {
|
|
313
|
+
return reader.readVarint();
|
|
314
|
+
}
|
|
315
|
+
catch {
|
|
316
|
+
malformed(n, "its element count runs past the end of its frame");
|
|
317
|
+
}
|
|
318
|
+
};
|
|
319
|
+
const size = delivery.size;
|
|
320
|
+
const magic = size >= 8 ? readExact(delivery, 0, 8) : new Uint8Array(0);
|
|
321
|
+
const beast2 = magic.length === 8 && magic.subarray(0, 7).every((byte, i) => byte === MAGIC_BYTES_V5[i]);
|
|
322
|
+
if (!beast2 || (magic[7] !== MAGIC_BYTES[7] && magic[7] !== MAGIC_BYTES_V5[7])) {
|
|
323
|
+
refuse("the delivery is not a beast2 blob of version 4 or 5");
|
|
324
|
+
}
|
|
325
|
+
const checkType = (wire) => {
|
|
326
|
+
if (!isTypeValueEqual(wire, typeValue))
|
|
327
|
+
refuse(`the delivery holds ${printType(wire)}, not ${printType(typeValue)}`);
|
|
328
|
+
};
|
|
329
|
+
if (magic[7] === MAGIC_BYTES[7]) {
|
|
330
|
+
// Version 4 has no segments: the delivery is read whole, within the
|
|
331
|
+
// limit a segment is read in.
|
|
332
|
+
if (options?.segments !== undefined)
|
|
333
|
+
refuse("the delivery is a version 4 blob, which has no segments to take a range of");
|
|
334
|
+
if (size > RUN_MAX_BYTES) {
|
|
335
|
+
refuse(`the delivery is a version 4 blob longer than ${RUN_MAX_BYTES} bytes, which has no segments to read it in — write it again with a current Writer`);
|
|
336
|
+
}
|
|
337
|
+
const bytes = readExact(delivery, 0, size);
|
|
338
|
+
let wire;
|
|
339
|
+
try {
|
|
340
|
+
wire = readBeast2V4Type(bytes);
|
|
341
|
+
}
|
|
342
|
+
catch {
|
|
343
|
+
refuse("the delivery's header does not read");
|
|
344
|
+
}
|
|
345
|
+
checkType(wire);
|
|
346
|
+
let value;
|
|
347
|
+
try {
|
|
348
|
+
value = decodeBeast2V4For(typeValue)(bytes);
|
|
349
|
+
}
|
|
350
|
+
catch {
|
|
351
|
+
refuse("the delivery is a version 4 blob that does not decode as its type");
|
|
352
|
+
}
|
|
353
|
+
segments = 1;
|
|
354
|
+
rewritten = 1;
|
|
355
|
+
if (kind === "Array") {
|
|
356
|
+
for (const row of value)
|
|
357
|
+
addValue(row);
|
|
358
|
+
}
|
|
359
|
+
else if (kind === "Set") {
|
|
360
|
+
for (const row of value instanceof SortedSet ? value : [...value].sort(cmp))
|
|
361
|
+
addValue(row);
|
|
362
|
+
}
|
|
363
|
+
else {
|
|
364
|
+
const entries = value instanceof SortedMap
|
|
365
|
+
? value.entries()
|
|
366
|
+
: [...value.entries()].sort((a, b) => cmp(a[0], b[0]));
|
|
367
|
+
for (const entry of entries)
|
|
368
|
+
addValue(entry);
|
|
369
|
+
}
|
|
370
|
+
writer().finish();
|
|
371
|
+
return { rows, segments, rewritten };
|
|
372
|
+
}
|
|
373
|
+
// The header: its sections say how long they are only once parsed.
|
|
374
|
+
let rootType = null;
|
|
375
|
+
let headerEnd = 0;
|
|
376
|
+
for (const probe of HEAD_PROBE_BYTES) {
|
|
377
|
+
const length = Math.min(size, probe);
|
|
378
|
+
try {
|
|
379
|
+
const head = new BufferReader(readExact(delivery, 0, length), MAGIC_BYTES_V5.length);
|
|
380
|
+
rootType = readTypeSection(head).rootType;
|
|
381
|
+
readSourceMapSectionV5(head);
|
|
382
|
+
headerEnd = head.offset;
|
|
383
|
+
break;
|
|
384
|
+
}
|
|
385
|
+
catch {
|
|
386
|
+
if (length === size)
|
|
387
|
+
break;
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
if (rootType === null)
|
|
391
|
+
refuse("the delivery's header does not read");
|
|
392
|
+
checkType(rootType);
|
|
393
|
+
const range = options?.segments;
|
|
394
|
+
if (range !== undefined) {
|
|
395
|
+
// A piece: the segments the index names, each its own frame.
|
|
396
|
+
const footer = size >= 16 ? readExact(delivery, size - 8, 8) : new Uint8Array(0);
|
|
397
|
+
if (footer.length !== 8 || !footer.every((byte, i) => byte === FOOTER_MAGIC_V5[i])) {
|
|
398
|
+
refuse("the delivery has no index, so it has no segments to take a range of");
|
|
399
|
+
}
|
|
400
|
+
let extents;
|
|
401
|
+
try {
|
|
402
|
+
extents = readBeast2ExtentsSync(delivery);
|
|
403
|
+
}
|
|
404
|
+
catch {
|
|
405
|
+
refuse("the delivery's index does not read");
|
|
406
|
+
}
|
|
407
|
+
const count = extents.offsets.length;
|
|
408
|
+
if (!Number.isInteger(range.from) || !Number.isInteger(range.to) || range.from < 0 || range.to <= range.from || range.to > count) {
|
|
409
|
+
refuse(`segments [${range.from}, ${range.to}) are not a range of the delivery's ${count}`);
|
|
410
|
+
}
|
|
411
|
+
if (!extents.selfContained)
|
|
412
|
+
refuse("the delivery's segments alias one another, so none is taken in apart from the rest");
|
|
413
|
+
for (let i = range.from; i < range.to; i++) {
|
|
414
|
+
const at = extents.offsets[i];
|
|
415
|
+
const end = i + 1 < count ? extents.offsets[i + 1] : extents.segmentsEnd;
|
|
416
|
+
const { logical, next } = frame(i, at, end);
|
|
417
|
+
if (next !== end)
|
|
418
|
+
malformed(i, "its frame is not the length the delivery's index gives it");
|
|
419
|
+
const reader = new BufferReader(logical, 0);
|
|
420
|
+
const rowsIn = countOf(i, reader);
|
|
421
|
+
if (rowsIn !== extents.counts[i])
|
|
422
|
+
malformed(i, "its element count disagrees with the delivery's index");
|
|
423
|
+
if (segment(i, logical, reader.offset, rowsIn) !== logical.length)
|
|
424
|
+
malformed(i, "its frame holds bytes after its last row");
|
|
425
|
+
}
|
|
426
|
+
writer().finish();
|
|
427
|
+
return { rows, segments, rewritten };
|
|
428
|
+
}
|
|
429
|
+
// The whole delivery: its value stream front to back, a frame at a time.
|
|
430
|
+
// The first frame opens the root; each segment is its count and its rows,
|
|
431
|
+
// within one frame; a count of zero ends the root.
|
|
432
|
+
let at = headerEnd;
|
|
433
|
+
let n = 0;
|
|
434
|
+
let current = frame(n, at, size);
|
|
435
|
+
at = current.next;
|
|
436
|
+
let reader = new BufferReader(current.logical, 0);
|
|
437
|
+
while (reader.offset === reader.buffer.length) {
|
|
438
|
+
current = frame(n, at, size);
|
|
439
|
+
at = current.next;
|
|
440
|
+
reader = new BufferReader(current.logical, 0);
|
|
441
|
+
}
|
|
442
|
+
if (reader.readUint8() !== TAG_NEW)
|
|
443
|
+
refuse("the delivery's value stream does not open a collection");
|
|
444
|
+
for (;;) {
|
|
445
|
+
while (reader.offset === reader.buffer.length) {
|
|
446
|
+
current = frame(n, at, size);
|
|
447
|
+
at = current.next;
|
|
448
|
+
reader = new BufferReader(current.logical, 0);
|
|
449
|
+
}
|
|
450
|
+
const rowsIn = countOf(n, reader);
|
|
451
|
+
if (rowsIn === 0)
|
|
452
|
+
break;
|
|
453
|
+
reader.offset = segment(n, reader.buffer, reader.offset, rowsIn);
|
|
454
|
+
n++;
|
|
455
|
+
}
|
|
456
|
+
if (reader.offset !== reader.buffer.length)
|
|
457
|
+
refuse("the delivery's value stream holds bytes after its last segment");
|
|
458
|
+
writer().finish();
|
|
459
|
+
return { rows, segments, rewritten };
|
|
460
|
+
};
|
|
461
|
+
}
|
|
462
|
+
//# sourceMappingURL=intake.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intake.js","sourceRoot":"","sources":["../../../../../src/serialization/beast2/v5/intake.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intake.spec.d.ts","sourceRoot":"","sources":["../../../../../src/serialization/beast2/v5/intake.spec.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|