@altopelago/aeon-aes 0.12.0 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/README.md +31 -2
  2. package/dist/events.d.ts +5 -0
  3. package/dist/events.d.ts.map +1 -1
  4. package/dist/events.js +3 -0
  5. package/dist/events.js.map +1 -1
  6. package/dist/film-internal.d.ts +137 -0
  7. package/dist/film-internal.d.ts.map +1 -0
  8. package/dist/film-internal.js +702 -0
  9. package/dist/film-internal.js.map +1 -0
  10. package/dist/film.d.ts +64 -0
  11. package/dist/film.d.ts.map +1 -0
  12. package/dist/film.js +22 -0
  13. package/dist/film.js.map +1 -0
  14. package/dist/index.d.ts +3 -0
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +3 -0
  17. package/dist/index.js.map +1 -1
  18. package/dist/modes.d.ts.map +1 -1
  19. package/dist/modes.js +14 -8
  20. package/dist/modes.js.map +1 -1
  21. package/dist/paths.d.ts +1 -0
  22. package/dist/paths.d.ts.map +1 -1
  23. package/dist/paths.js +33 -29
  24. package/dist/paths.js.map +1 -1
  25. package/dist/portable.d.ts +98 -0
  26. package/dist/portable.d.ts.map +1 -0
  27. package/dist/portable.js +524 -0
  28. package/dist/portable.js.map +1 -0
  29. package/dist/references.d.ts.map +1 -1
  30. package/dist/references.js +9 -4
  31. package/dist/references.js.map +1 -1
  32. package/dist/resolve.d.ts.map +1 -1
  33. package/dist/resolve.js +52 -2
  34. package/dist/resolve.js.map +1 -1
  35. package/dist/sha256.d.ts +3 -0
  36. package/dist/sha256.d.ts.map +1 -0
  37. package/dist/sha256.js +82 -0
  38. package/dist/sha256.js.map +1 -0
  39. package/dist/telex-datatype-internal.d.ts +12 -0
  40. package/dist/telex-datatype-internal.d.ts.map +1 -0
  41. package/dist/telex-datatype-internal.js +323 -0
  42. package/dist/telex-datatype-internal.js.map +1 -0
  43. package/dist/telex-incremental-internal.d.ts +50 -0
  44. package/dist/telex-incremental-internal.d.ts.map +1 -0
  45. package/dist/telex-incremental-internal.js +422 -0
  46. package/dist/telex-incremental-internal.js.map +1 -0
  47. package/dist/telex-internal.d.ts +86 -0
  48. package/dist/telex-internal.d.ts.map +1 -0
  49. package/dist/telex-internal.js +1134 -0
  50. package/dist/telex-internal.js.map +1 -0
  51. package/dist/telex-limits-internal.d.ts +35 -0
  52. package/dist/telex-limits-internal.d.ts.map +1 -0
  53. package/dist/telex-limits-internal.js +70 -0
  54. package/dist/telex-limits-internal.js.map +1 -0
  55. package/dist/telex.d.ts +130 -0
  56. package/dist/telex.d.ts.map +1 -0
  57. package/dist/telex.js +46 -0
  58. package/dist/telex.js.map +1 -0
  59. package/package.json +3 -3
@@ -0,0 +1,422 @@
1
+ import { COMPLETE_AES_PROFILE, TELEX_VERSION, } from './telex.js';
2
+ import { TelexSyntaxError as InternalTelexSyntaxError, assertTelexLimit, createTelexValidationState, decodePayloadBounded, decodeWireRecord, finalizeTelexValidationState, hasCanonicalFieldOrder, prepareTelexValidationRecords, } from './telex-internal.js';
3
+ import { normalizeTelexLimits } from './telex-limits-internal.js';
4
+ const VERSION_LINE = 'telex.aes=1';
5
+ const FIELD_NAME = /^[a-z][a-z0-9-]*(?:\.[a-z][a-z0-9-]*)*$/u;
6
+ const UTF8_DECODER = new TextDecoder('utf-8', { fatal: true });
7
+ const EMPTY_BYTES = new Uint8Array(0);
8
+ /**
9
+ * Internal byte-oriented Telex decoder used to verify the language-neutral
10
+ * incremental contract. Records are provisional until AES finalization.
11
+ */
12
+ export class IncrementalTelexDecoder {
13
+ #limits;
14
+ #phase = 'header';
15
+ #line = EMPTY_BYTES;
16
+ #lineOverflowBytes;
17
+ #lineOverflowEndsCr = false;
18
+ #processedLines = 0;
19
+ #totalInputBytes = 0;
20
+ #decodedPayloadBytes = 0;
21
+ #sawInput = false;
22
+ #lastWasLf = false;
23
+ #canonical = true;
24
+ #versionSeen = false;
25
+ #profile = COMPLETE_AES_PROFILE;
26
+ #profileExplicit = false;
27
+ #projection = null;
28
+ #projectionExplicit = false;
29
+ #lastHeaderRank;
30
+ #separatorWidth = 0;
31
+ #fields;
32
+ #datatypeLine;
33
+ #datatypeComponentLine;
34
+ #recordCount = 0;
35
+ #contextAnnounced = false;
36
+ #complete = false;
37
+ #failure;
38
+ constructor(options = {}) {
39
+ this.#limits = normalizeTelexLimits(options);
40
+ }
41
+ push(input, options = {}) {
42
+ if (!(input instanceof Uint8Array)) {
43
+ throw new TypeError('Incremental Telex input must be a Uint8Array');
44
+ }
45
+ if (this.#failure !== undefined)
46
+ throw this.#failure;
47
+ if (this.#complete) {
48
+ throw new InternalTelexSyntaxError('The incremental Telex decoder is already complete', undefined, 'TELEX_DECODER_CLOSED');
49
+ }
50
+ try {
51
+ return this.#push(input, options.final === true);
52
+ }
53
+ catch (error) {
54
+ if (isTelexSyntaxError(error))
55
+ this.#failure = error;
56
+ throw error;
57
+ }
58
+ }
59
+ #push(input, finalChunk) {
60
+ const firstRecord = this.#recordCount;
61
+ const records = [];
62
+ const observedInputBytes = this.#totalInputBytes + input.byteLength;
63
+ assertTelexLimit('max_input_bytes', observedInputBytes, this.#limits.maxInputBytes, undefined);
64
+ this.#totalInputBytes = observedInputBytes;
65
+ if (input.byteLength > 0) {
66
+ this.#sawInput = true;
67
+ this.#lastWasLf = input[input.byteLength - 1] === 0x0a;
68
+ }
69
+ this.#processBytes(input, records);
70
+ if (!finalChunk) {
71
+ return this.#update(firstRecord, records, records.length === 0 ? 'need-more-input' : 'provisional-records');
72
+ }
73
+ if (this.#lineOverflowBytes !== undefined) {
74
+ const observed = this.#lineOverflowBytes - Number(this.#lineOverflowEndsCr);
75
+ this.#lineOverflowBytes = undefined;
76
+ assertTelexLimit('max_line_bytes', observed, this.#limits.maxLineBytes, this.#processedLines + 1);
77
+ }
78
+ if (this.#line.byteLength > 0 || !this.#sawInput) {
79
+ const line = this.#line;
80
+ this.#line = EMPTY_BYTES;
81
+ this.#processLine(line, false, records);
82
+ }
83
+ this.#finish(records);
84
+ this.#complete = true;
85
+ const completion = {
86
+ profile: this.#profile,
87
+ profileExplicit: this.#profileExplicit,
88
+ projection: this.#projection,
89
+ projectionExplicit: this.#projectionExplicit,
90
+ canonical: this.#canonical && this.#lastWasLf,
91
+ };
92
+ return this.#update(firstRecord, records, 'syntax-complete', completion);
93
+ }
94
+ #processBytes(input, records) {
95
+ let cursor = 0;
96
+ while (cursor < input.byteLength) {
97
+ const newline = input.indexOf(0x0a, cursor);
98
+ if (this.#lineOverflowBytes !== undefined) {
99
+ if (newline !== -1) {
100
+ this.#lineOverflowBytes += newline - cursor;
101
+ if (newline > cursor) {
102
+ this.#lineOverflowEndsCr = input[newline - 1] === 0x0d;
103
+ }
104
+ const observed = this.#lineOverflowBytes - Number(this.#lineOverflowEndsCr);
105
+ assertTelexLimit('max_line_bytes', observed, this.#limits.maxLineBytes, this.#processedLines + 1);
106
+ }
107
+ this.#lineOverflowBytes += input.byteLength - cursor;
108
+ this.#lineOverflowEndsCr = input[input.byteLength - 1] === 0x0d;
109
+ return;
110
+ }
111
+ if (this.#line.byteLength === 0 && newline !== -1) {
112
+ const line = input.subarray(cursor, newline);
113
+ this.#checkLineLength(line);
114
+ this.#processLine(line, true, records);
115
+ cursor = newline + 1;
116
+ continue;
117
+ }
118
+ if (newline !== -1) {
119
+ const suffix = input.subarray(cursor, newline);
120
+ const rawLength = this.#line.byteLength + suffix.byteLength;
121
+ const endsCr = suffix.byteLength === 0
122
+ ? this.#line[this.#line.byteLength - 1] === 0x0d
123
+ : suffix[suffix.byteLength - 1] === 0x0d;
124
+ assertTelexLimit('max_line_bytes', rawLength - Number(endsCr), this.#limits.maxLineBytes, this.#processedLines + 1);
125
+ const line = appendBytes(this.#line, suffix);
126
+ this.#line = EMPTY_BYTES;
127
+ this.#processLine(line, true, records);
128
+ cursor = newline + 1;
129
+ continue;
130
+ }
131
+ const suffix = input.subarray(cursor);
132
+ const rawLength = this.#line.byteLength + suffix.byteLength;
133
+ const endsCr = suffix[suffix.byteLength - 1] === 0x0d;
134
+ if (rawLength - Number(endsCr) > this.#limits.maxLineBytes) {
135
+ this.#lineOverflowBytes = rawLength;
136
+ this.#lineOverflowEndsCr = endsCr;
137
+ this.#line = EMPTY_BYTES;
138
+ }
139
+ else {
140
+ this.#line = appendBytes(this.#line, suffix);
141
+ }
142
+ return;
143
+ }
144
+ }
145
+ #checkLineLength(bytes) {
146
+ const endsCr = bytes[bytes.byteLength - 1] === 0x0d;
147
+ assertTelexLimit('max_line_bytes', bytes.byteLength - Number(endsCr), this.#limits.maxLineBytes, this.#processedLines + 1);
148
+ }
149
+ #processLine(bytes, terminated, records) {
150
+ const lineNumber = this.#processedLines + 1;
151
+ const hasSuffixCr = bytes[bytes.byteLength - 1] === 0x0d;
152
+ const physicalLength = bytes.byteLength - Number(hasSuffixCr);
153
+ assertTelexLimit('max_line_bytes', physicalLength, this.#limits.maxLineBytes, lineNumber);
154
+ let logicalBytes = bytes;
155
+ if (terminated && hasSuffixCr) {
156
+ this.#canonical = false;
157
+ logicalBytes = bytes.subarray(0, bytes.byteLength - 1);
158
+ }
159
+ if (logicalBytes.includes(0x0d)) {
160
+ throw new InternalTelexSyntaxError('Bare carriage returns are not allowed', undefined, 'TELEX_BARE_CR');
161
+ }
162
+ let line;
163
+ try {
164
+ line = UTF8_DECODER.decode(logicalBytes);
165
+ }
166
+ catch {
167
+ throw new InternalTelexSyntaxError('Telex input must be valid UTF-8', lineNumber, 'TELEX_INVALID_UTF8');
168
+ }
169
+ if (lineNumber === 1 && line.startsWith('\uFEFF')) {
170
+ throw new InternalTelexSyntaxError('UTF-8 byte-order marks are not allowed', 1, 'TELEX_BOM');
171
+ }
172
+ this.#processedLines += 1;
173
+ if (this.#phase === 'header')
174
+ this.#processHeaderLine(line, lineNumber);
175
+ else
176
+ this.#processRecordLine(line, lineNumber, records);
177
+ }
178
+ #processHeaderLine(line, lineNumber) {
179
+ if (!this.#versionSeen) {
180
+ if (line !== VERSION_LINE) {
181
+ throw new InternalTelexSyntaxError(`Expected ${VERSION_LINE}`, 1, 'TELEX_INVALID_PREAMBLE');
182
+ }
183
+ this.#versionSeen = true;
184
+ return;
185
+ }
186
+ if (line.length === 0) {
187
+ this.#phase = 'records';
188
+ this.#separatorWidth = 1;
189
+ return;
190
+ }
191
+ const delimiter = line.indexOf('=');
192
+ if (delimiter < 0)
193
+ this.#missingHeaderSeparator(lineNumber);
194
+ const field = line.slice(0, delimiter);
195
+ if (field !== 'profile' && field !== 'projection') {
196
+ this.#missingHeaderSeparator(lineNumber);
197
+ }
198
+ const rank = field === 'profile' ? 0 : 1;
199
+ if (this.#lastHeaderRank !== undefined && rank < this.#lastHeaderRank) {
200
+ this.#canonical = false;
201
+ }
202
+ this.#lastHeaderRank = rank;
203
+ const state = { decodedPayloadBytes: this.#decodedPayloadBytes };
204
+ const decoded = decodePayloadBounded(line.slice(delimiter + 1), lineNumber, this.#limits, state);
205
+ this.#decodedPayloadBytes = state.decodedPayloadBytes;
206
+ this.#canonical &&= decoded.canonical;
207
+ if (decoded.value.length === 0) {
208
+ throw new InternalTelexSyntaxError(`${field === 'profile' ? 'Profile' : 'Projection'} identifier must not be empty`, lineNumber, field === 'profile' ? 'TELEX_EMPTY_PROFILE' : 'TELEX_EMPTY_PROJECTION');
209
+ }
210
+ if (field === 'profile') {
211
+ if (this.#profileExplicit) {
212
+ throw new InternalTelexSyntaxError('Duplicate stream field: profile', lineNumber, 'TELEX_DUPLICATE_STREAM_FIELD');
213
+ }
214
+ this.#profile = decoded.value;
215
+ this.#profileExplicit = true;
216
+ }
217
+ else {
218
+ if (this.#projectionExplicit) {
219
+ throw new InternalTelexSyntaxError('Duplicate stream field: projection', lineNumber, 'TELEX_DUPLICATE_STREAM_FIELD');
220
+ }
221
+ this.#projection = decoded.value;
222
+ this.#projectionExplicit = true;
223
+ }
224
+ }
225
+ #missingHeaderSeparator(lineNumber) {
226
+ throw new InternalTelexSyntaxError('Expected a blank line after the stream header', lineNumber, 'TELEX_MISSING_HEADER_SEPARATOR');
227
+ }
228
+ #processRecordLine(line, lineNumber, records) {
229
+ if (line.length === 0) {
230
+ this.#separatorWidth += 1;
231
+ if (this.#fields !== undefined)
232
+ this.#closeRecord(lineNumber, records);
233
+ return;
234
+ }
235
+ if (this.#separatorWidth > 1)
236
+ this.#canonical = false;
237
+ this.#separatorWidth = 0;
238
+ const delimiter = line.indexOf('=');
239
+ if (delimiter < 1) {
240
+ throw new InternalTelexSyntaxError('Expected field=value', lineNumber, 'TELEX_INVALID_FIELD_LINE');
241
+ }
242
+ const field = line.slice(0, delimiter);
243
+ if (!FIELD_NAME.test(field)) {
244
+ throw new InternalTelexSyntaxError(`Invalid field name: ${field}`, lineNumber, 'TELEX_INVALID_FIELD_NAME');
245
+ }
246
+ this.#fields ??= new Map();
247
+ if (this.#fields.has(field)) {
248
+ throw new InternalTelexSyntaxError(`Duplicate field: ${field}`, lineNumber, 'TELEX_DUPLICATE_FIELD');
249
+ }
250
+ assertTelexLimit('max_fields_per_event', this.#fields.size + 1, this.#limits.maxFieldsPerEvent, lineNumber);
251
+ const state = { decodedPayloadBytes: this.#decodedPayloadBytes };
252
+ const decoded = decodePayloadBounded(line.slice(delimiter + 1), lineNumber, this.#limits, state);
253
+ this.#decodedPayloadBytes = state.decodedPayloadBytes;
254
+ this.#canonical &&= decoded.canonical;
255
+ this.#fields.set(field, decoded.value);
256
+ if (field === 'datatype')
257
+ this.#datatypeLine = lineNumber;
258
+ if ((field === 'generics' || field === 'clarifiers')
259
+ && this.#datatypeComponentLine === undefined) {
260
+ this.#datatypeComponentLine = lineNumber;
261
+ }
262
+ }
263
+ #closeRecord(lineNumber, records) {
264
+ assertTelexLimit('max_events', this.#recordCount + 1, this.#limits.maxEvents, lineNumber);
265
+ const fields = this.#fields;
266
+ if (fields === undefined)
267
+ throw new Error('Telex record fields are unavailable');
268
+ const decoded = decodeWireRecord(fields, this.#datatypeLine, this.#datatypeComponentLine, this.#limits);
269
+ this.#fields = undefined;
270
+ this.#datatypeLine = undefined;
271
+ this.#datatypeComponentLine = undefined;
272
+ this.#canonical &&= decoded.canonical && hasCanonicalFieldOrder(fields);
273
+ this.#recordCount += 1;
274
+ records.push(decoded.record);
275
+ }
276
+ #finish(records) {
277
+ if (!this.#versionSeen) {
278
+ throw new InternalTelexSyntaxError(`Expected ${VERSION_LINE}`, 1, 'TELEX_INVALID_PREAMBLE');
279
+ }
280
+ if (this.#phase === 'records') {
281
+ if (this.#fields !== undefined)
282
+ this.#closeRecord(this.#processedLines, records);
283
+ if (this.#separatorWidth > 0)
284
+ this.#canonical = false;
285
+ }
286
+ }
287
+ #update(firstRecord, records, progress, completion) {
288
+ const contextFixed = this.#phase === 'records' || completion !== undefined;
289
+ let context;
290
+ if (contextFixed && !this.#contextAnnounced) {
291
+ this.#contextAnnounced = true;
292
+ context = {
293
+ profile: this.#profile,
294
+ profileExplicit: this.#profileExplicit,
295
+ projection: this.#projection,
296
+ projectionExplicit: this.#projectionExplicit,
297
+ };
298
+ }
299
+ return {
300
+ firstRecord,
301
+ records,
302
+ ...(context === undefined ? {} : { context }),
303
+ totalInputBytes: this.#totalInputBytes,
304
+ decodedPayloadBytes: this.#decodedPayloadBytes,
305
+ canonicalSoFar: this.#canonical,
306
+ progress,
307
+ ...(completion === undefined ? {} : { completion }),
308
+ };
309
+ }
310
+ }
311
+ /** Internal semantic sink for ordered provisional Telex record batches. */
312
+ export class IncrementalAesAccumulator {
313
+ #records = [];
314
+ #state;
315
+ #finished = false;
316
+ constructor(context, options = {}) {
317
+ this.#state = createTelexValidationState({
318
+ ...options,
319
+ profile: context.profile,
320
+ projection: context.projection,
321
+ });
322
+ }
323
+ pushBatch(firstRecord, records) {
324
+ this.#acceptBatch(firstRecord, records.map((record) => structuredClone(record)));
325
+ }
326
+ /** Accept records whose ownership has already crossed an isolation boundary. */
327
+ acceptOwnedBatch(firstRecord, records) {
328
+ this.#acceptBatch(firstRecord, records);
329
+ }
330
+ #acceptBatch(firstRecord, records) {
331
+ if (this.#finished)
332
+ throw new Error('The Telex semantic accumulator is already complete');
333
+ if (!Number.isSafeInteger(firstRecord) || firstRecord < 0) {
334
+ throw new TypeError('AES record batch ordinal must be a non-negative safe integer');
335
+ }
336
+ if (firstRecord !== this.#records.length) {
337
+ throw new Error('AES record batch ordinal is not contiguous');
338
+ }
339
+ if (records.length === 0)
340
+ return;
341
+ prepareTelexValidationRecords(this.#state, records, firstRecord);
342
+ this.#records.push(...records);
343
+ }
344
+ finish() {
345
+ if (this.#finished)
346
+ throw new Error('The Telex semantic accumulator is already complete');
347
+ this.#finished = true;
348
+ const validation = finalizeTelexValidationState(this.#state, this.#records.length);
349
+ return { records: this.#records, validation };
350
+ }
351
+ }
352
+ /** Test helper that assembles an incremental result without exposing it publicly. */
353
+ export function parseTelexInChunks(input, splitPoints, options = {}) {
354
+ const decoder = new IncrementalTelexDecoder(options);
355
+ const records = [];
356
+ let start = 0;
357
+ for (const end of splitPoints) {
358
+ if (!Number.isSafeInteger(end) || end < start || end > input.byteLength) {
359
+ throw new RangeError('Telex split points must be ordered input byte offsets');
360
+ }
361
+ const update = decoder.push(input.subarray(start, end));
362
+ records.push(...update.records);
363
+ start = end;
364
+ }
365
+ const update = decoder.push(input.subarray(start), { final: true });
366
+ records.push(...update.records);
367
+ const completion = update.completion;
368
+ if (completion === undefined)
369
+ throw new Error('Final Telex update did not complete syntax');
370
+ return {
371
+ version: TELEX_VERSION,
372
+ profile: completion.profile,
373
+ profileExplicit: completion.profileExplicit,
374
+ projection: completion.projection,
375
+ projectionExplicit: completion.projectionExplicit,
376
+ records,
377
+ canonical: completion.canonical,
378
+ };
379
+ }
380
+ export function validateTelexInChunks(input, splitPoints, options = {}) {
381
+ const decoder = new IncrementalTelexDecoder(options);
382
+ let accumulator;
383
+ let start = 0;
384
+ const boundaries = splitPoints.at(-1) === input.byteLength
385
+ ? splitPoints
386
+ : [...splitPoints, input.byteLength];
387
+ for (const end of boundaries) {
388
+ if (!Number.isSafeInteger(end) || end < start || end > input.byteLength) {
389
+ throw new RangeError('Telex split points must be ordered input byte offsets');
390
+ }
391
+ const final = end === input.byteLength;
392
+ const update = decoder.push(input.subarray(start, end), { final });
393
+ if (update.context !== undefined) {
394
+ accumulator = new IncrementalAesAccumulator(update.context, options);
395
+ }
396
+ if (update.records.length > 0) {
397
+ if (accumulator === undefined) {
398
+ throw new Error('Telex records arrived before stream context');
399
+ }
400
+ accumulator.acceptOwnedBatch(update.firstRecord, update.records);
401
+ }
402
+ start = end;
403
+ }
404
+ if (accumulator === undefined) {
405
+ throw new Error('Telex syntax completed without stream context');
406
+ }
407
+ return accumulator.finish();
408
+ }
409
+ function appendBytes(left, right) {
410
+ if (left.byteLength === 0)
411
+ return right.slice();
412
+ if (right.byteLength === 0)
413
+ return left;
414
+ const output = new Uint8Array(left.byteLength + right.byteLength);
415
+ output.set(left);
416
+ output.set(right, left.byteLength);
417
+ return output;
418
+ }
419
+ function isTelexSyntaxError(error) {
420
+ return error instanceof Error && 'code' in error && typeof error.code === 'string';
421
+ }
422
+ //# sourceMappingURL=telex-incremental-internal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telex-incremental-internal.js","sourceRoot":"","sources":["../src/telex-incremental-internal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ export { DEFAULT_TELEX_LIMITS, normalizeTelexLimits } from './telex-limits-internal.js';
2
+ export declare const TELEX_VERSION = "1";
3
+ export declare const COMPLETE_AES_PROFILE = "aes.complete.v1";
4
+ export declare const PARTIAL_AES_PROFILE = "aes.partial.v1";
5
+ export declare const AEON_DOCUMENT_PROJECTION = "aeon.document.v1";
6
+ export declare class TelexSyntaxError extends Error {
7
+ constructor(message: any, line: any, code?: string, details?: {});
8
+ }
9
+ export declare function parseTelex(input: any, options?: {}): {
10
+ version: string;
11
+ profile: string;
12
+ profileExplicit: boolean;
13
+ projection: any;
14
+ projectionExplicit: boolean;
15
+ records: {}[];
16
+ canonical: boolean;
17
+ };
18
+ export declare function encodeTelex(records: any, options?: {}): string;
19
+ export declare function canonicalizeTelex(input: any, limitsOptions?: {}): string;
20
+ /**
21
+ * Parse Telex and report whether every non-root path prefix is present.
22
+ * This is a structural convenience check, not full AES profile validation.
23
+ */
24
+ export declare function checkTelexCompleteness(input: any, options?: {}): {
25
+ complete: boolean;
26
+ missing: {
27
+ field?: string;
28
+ path: string;
29
+ requiredBy: any;
30
+ }[];
31
+ };
32
+ export declare function checkPrefixCompleteness(records: any, options?: {}): {
33
+ complete: boolean;
34
+ missing: {
35
+ field?: string;
36
+ path: string;
37
+ requiredBy: any;
38
+ }[];
39
+ };
40
+ /**
41
+ * Validate decoded events against the selected AES profile.
42
+ * Syntax errors still throw from parseTelex; semantic failures are diagnostics.
43
+ */
44
+ export declare function validateTelex(input: any, options?: {}): {
45
+ valid: boolean;
46
+ profile: any;
47
+ diagnostics: any;
48
+ };
49
+ export declare function validateTelexRecords(records: any, options?: {}): {
50
+ valid: boolean;
51
+ profile: any;
52
+ diagnostics: any;
53
+ };
54
+ /** Internal state shared by one-shot and incremental semantic validation. */
55
+ export declare function createTelexValidationState(options?: {}): {
56
+ profile: string;
57
+ projection: any;
58
+ registeredFields: Set<unknown>;
59
+ limits: Readonly<import("./telex.js").TelexLimits>;
60
+ diagnostics: {
61
+ code: any;
62
+ message: any;
63
+ }[];
64
+ events: any[];
65
+ bodySeen: boolean;
66
+ finalized: boolean;
67
+ };
68
+ /** Prepare event-local semantics while retaining final cross-event checks. */
69
+ export declare function prepareTelexValidationRecords(state: any, records: any, firstRecord: any): void;
70
+ /** Perform whole-stream validation after syntax and record ingestion finish. */
71
+ export declare function finalizeTelexValidationState(state: any, recordCount: any): {
72
+ valid: boolean;
73
+ profile: any;
74
+ diagnostics: any;
75
+ };
76
+ export declare function decodePayloadBounded(payload: any, lineNumber: any, limits: any, state: any): {
77
+ value: any;
78
+ canonical: boolean;
79
+ };
80
+ export declare function assertTelexLimit(counter: any, observed: any, limit: any, line: any): void;
81
+ export declare function hasCanonicalFieldOrder(record: any): boolean;
82
+ export declare function decodeWireRecord(fields: any, datatypeLine: any, datatypeComponentLine: any, datatypeLimits: any): {
83
+ record: {};
84
+ canonical: boolean;
85
+ };
86
+ //# sourceMappingURL=telex-internal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telex-internal.d.ts","sourceRoot":"","sources":["../src/telex-internal.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAiExF,eAAO,MAAM,aAAa,MAAM,CAAC;AACjC,eAAO,MAAM,oBAAoB,oBAAoB,CAAC;AACtD,eAAO,MAAM,mBAAmB,mBAAmB,CAAC;AACpD,eAAO,MAAM,wBAAwB,qBAAqB,CAAC;AAE3D,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,YAAY,OAAO,KAAA,EAAE,IAAI,KAAA,EAAE,IAAI,SAAuB,EAAE,OAAO,KAAK,EAMnE;CACF;AAED,wBAAgB,UAAU,CAAC,KAAK,KAAA,EAAE,OAAO,KAAK;;;;;;;;EA8L7C;AAED,wBAAgB,WAAW,CAAC,OAAO,KAAA,EAAE,OAAO,KAAK,UAmEhD;AAED,wBAAgB,iBAAiB,CAAC,KAAK,KAAA,EAAE,aAAa,KAAK,UAQ1D;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,KAAA,EAAE,OAAO,KAAK;;;;;;;EAGzD;AAED,wBAAgB,uBAAuB,CAAC,OAAO,KAAA,EAAE,OAAO,KAAK;;;;;;;EAoC5D;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,KAAK,KAAA,EAAE,OAAO,KAAK;;;;EAUhD;AAED,wBAAgB,oBAAoB,CAAC,OAAO,KAAA,EAAE,OAAO,KAAK;;;;EAOzD;AAED,6EAA6E;AAC7E,wBAAgB,0BAA0B,CAAC,OAAO,KAAK;;;;;;;;;;;;EA2CtD;AAED,8EAA8E;AAC9E,wBAAgB,6BAA6B,CAAC,KAAK,KAAA,EAAE,OAAO,KAAA,EAAE,WAAW,KAAA,QAyGxE;AAED,gFAAgF;AAChF,wBAAgB,4BAA4B,CAAC,KAAK,KAAA,EAAE,WAAW,KAAA;IA+B3D,KAAK;IACL,OAAO;IACP,WAAW;EAEd;AA0ZD,wBAAgB,oBAAoB,CAAC,OAAO,KAAA,EAAE,UAAU,KAAA,EAAE,MAAM,KAAA,EAAE,KAAK,KAAA;;;EAItE;AAQD,wBAAgB,gBAAgB,CAAC,OAAO,KAAA,EAAE,QAAQ,KAAA,EAAE,KAAK,KAAA,EAAE,IAAI,KAAA,QAQ9D;AA4BD,wBAAgB,sBAAsB,CAAC,MAAM,KAAA,WAQ5C;AASD,wBAAgB,gBAAgB,CAAC,MAAM,KAAA,EAAE,YAAY,KAAA,EAAE,qBAAqB,KAAA,EAAE,cAAc,KAAA;;;EAkC3F"}