@cosyte/astm 0.0.19 → 0.0.21

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/index.d.ts CHANGED
@@ -182,9 +182,12 @@ declare const WARNING_CODES: {
182
182
  * Two escape alignments of the same bytes disagreed about a **field** boundary, the reading taken
183
183
  * kept it, and the escape character that reading resumes on **heads no sequence this codec can
184
184
  * interpret**, so the boundary was bought with bytes this reading cannot read while the competing
185
- * alignment is exactly the reading that can. Every field after that point sits one place further
186
- * right than the competing alignment puts it, **except on the one class named at the end of this
187
- * entry**, where the two readings instead read the same number of fields in different places.
185
+ * alignment is exactly the reading that can. Every field after that point sits further
186
+ * right than the competing alignment puts it, by a displacement that is **not fixed**: one place
187
+ * on a record carrying a single contested construct, one more for each additional one, and none
188
+ * at all **on the one class named at the end of this entry**, where the two readings instead read
189
+ * the same number of fields in different places. Counting these warnings does not give it; see
190
+ * {@link ShiftedFieldsSink}.
188
191
  *
189
192
  * **The shift is the harm, and on a result record it reaches the status slot.** Measured on the
190
193
  * canonical set, `R|1|^^^687|28.6&F&|&U/L||||F` reads **9** fields under the reading taken and
@@ -229,7 +232,8 @@ declare const WARNING_CODES: {
229
232
  * taken interprets a construct and leaves nothing unread: under a set naming the field separator
230
233
  * `F`, `28.6&F&F&F&U/L` is that separator escaped, written, and escaped again, entirely well
231
234
  * formed, and refusing it would be an over-refusal. That is the only tail on which a stream's
232
- * escaping can be clean, which is why it is the only exclusion. Where the tail heads a sequence
235
+ * escaping can be clean, on the declarations {@link ShiftedFieldsSink} scopes that to, which is
236
+ * why it is the only exclusion. Where the tail heads a sequence
233
237
  * whose body is *unrecognized*, the reading taken consumes a triple it cannot read, preserved
234
238
  * verbatim and never guessed at, the field shift is the same shift, and **this reports it**.
235
239
  * Consuming a triple is not interpreting one.
@@ -307,8 +311,8 @@ declare const WARNING_CODES: {
307
311
  *
308
312
  * **Two further deliberate bounds, both stated rather than left to be found.**
309
313
  * - **Only the repeat role.** The **component** role reaches a modeled slot too, and differently:
310
- * there the components stay in the record and move one slot along, so a local code reads as a
311
- * coding scheme and a given name as a middle name. That is measured and is now reported by
314
+ * there the components stay in the record and move along the component list, so a local code
315
+ * reads as a coding scheme and a given name as a middle name. That is measured and is now reported by
312
316
  * {@link WARNING_CODES.ASTM_RECORD_ALIGNMENT_SHIFTED_COMPONENTS}, a third code on the same tail
313
317
  * test wired to the component split. It is still not covered **here**, because wiring a sink to
314
318
  * another split is another criterion, which is why it took its own population measurement.
@@ -317,8 +321,8 @@ declare const WARNING_CODES: {
317
321
  * this codec *recognizes*, it interprets a construct and the repeats are the ones the sender
318
322
  * wrote: under a set naming the repeat separator `F`, `28.6&F&F&F&U/L` is that separator
319
323
  * escaped, written, and escaped again, entirely well formed, and refusing it would be an
320
- * over-refusal. That is the only tail on which a stream's escaping can be clean, which is why it
321
- * is the only exclusion. Where the tail heads a sequence whose body is *unrecognized*, the
324
+ * over-refusal. That is the only tail on which a stream's escaping can be clean, on the
325
+ * declarations {@link ShiftedFieldsSink} scopes that to, which is why it is the only exclusion. Where the tail heads a sequence whose body is *unrecognized*, the
322
326
  * reading taken consumes a triple it cannot read, preserved verbatim and never guessed at, the
323
327
  * truncation is the same truncation, and **this reports it**.
324
328
  * - **That remaining silence is a TRADE, not a claim that nothing was lost.** On the excluded tail
@@ -353,10 +357,11 @@ declare const WARNING_CODES: {
353
357
  * {@link WARNING_CODES.ASTM_RECORD_ALIGNMENT_TRUNCATED_FIELD}, on the third and last splitting
354
358
  * role, and what it costs is a third thing again, which is why it is a third code.
355
359
  *
356
- * **The components are neither shifted out of the record nor dropped from it: they MOVE one slot
357
- * along.** A field's components are modeled *inside* it, so a gained component boundary shifts
358
- * every component after it exactly as a gained field boundary shifts every later field, **except
359
- * on the one class named at the end of this entry**, where the two readings instead read the same
360
+ * **The components are neither shifted out of the record nor dropped from it: they MOVE along the
361
+ * component list.** A field's components are modeled *inside* it, so a gained component boundary shifts
362
+ * every component after it exactly as a gained field boundary shifts every later field, by the
363
+ * displacement {@link ShiftedFieldsSink} states, **except on the one class named at the end of
364
+ * this entry**, where the two readings instead read the same
360
365
  * number of components in different places. Nothing leaves the record and nothing changes field
361
366
  * number; what changes is which modeled slot each component lands in, and those slots are named
362
367
  * things:
@@ -408,7 +413,8 @@ declare const WARNING_CODES: {
408
413
  * *recognizes*, it interprets a construct and the components are the ones the sender wrote: under
409
414
  * a set naming the component separator `F`, `GLU&F&F&F&L` is that separator escaped, written, and
410
415
  * escaped again, entirely well formed, and refusing it would be an over-refusal. That is the only
411
- * tail on which a stream's escaping can be clean, which is why it is the only exclusion. Where the
416
+ * tail on which a stream's escaping can be clean, on the declarations
417
+ * {@link ShiftedFieldsSink} scopes that to, which is why it is the only exclusion. Where the
412
418
  * tail heads a sequence whose body is *unrecognized*, the reading taken consumes a triple it
413
419
  * cannot read, preserved verbatim and never guessed at, the slots move exactly as far, and **this
414
420
  * reports it**.
@@ -694,21 +700,19 @@ declare function ambiguousEscapeAlignment(position: AstmPosition): AstmRecordWar
694
700
  /**
695
701
  * Build an `ASTM_RECORD_ALIGNMENT_SHIFTED_FIELDS` warning. Emitted when a competing escape
696
702
  * alignment decided a **field** boundary and the escape character the reading taken resumes on
697
- * heads no sequence this codec can interpret, so every field after that point sits one place further
698
- * right than
699
- * the competing alignment puts it. On a result record that reaches the units and the **result
703
+ * heads no sequence this codec can interpret, so every field after that point sits further right
704
+ * than the competing alignment puts it. On a result record that reaches the units and the **result
700
705
  * status**: a trailing status letter lands in field 9 under the reading taken and in no field at
701
- * all under the competing one. **Except where the sequence past the boundary carries the field
702
- * separator itself**, where the two readings read the same number of fields in different places and
703
- * no field index moves; see {@link WARNING_CODES.ASTM_RECORD_ALIGNMENT_SHIFTED_FIELDS}.
706
+ * all under the competing one. **How far the fields are displaced, and why counting these warnings
707
+ * does not give it, is stated once on {@link ShiftedFieldsSink}**; it is not fixed.
704
708
  *
705
709
  * A profile may **not** tolerate this code. **Which tolerable escape report accompanies it depends
706
710
  * on the tail**: {@link WARNING_CODES.ASTM_UNPAIRED_ESCAPE_CHARACTER} where the tail heads no
707
711
  * sequence at all, and {@link WARNING_CODES.ASTM_UNKNOWN_ESCAPE_SEQUENCE} where it heads one whose
708
- * body is unrecognized. Both report strictly weaker facts, and wherever the escape role is a
709
- * character distinct from the three splitting roles one of them always fires beside this code. It
710
- * fires alongside {@link WARNING_CODES.ASTM_RECORD_AMBIGUOUS_ESCAPE_ALIGNMENT} where that also
711
- * applies. The reading
712
+ * body is unrecognized. Both report strictly weaker facts. **Which of them accompanies this code,
713
+ * and the declaration under which neither does, is stated once on the tail test itself**; see
714
+ * {@link ShiftedFieldsSink}. It fires alongside
715
+ * {@link WARNING_CODES.ASTM_RECORD_AMBIGUOUS_ESCAPE_ALIGNMENT} where that also applies. The reading
712
716
  * is unchanged: this reports the shift, it does not repair it.
713
717
  *
714
718
  * @example
@@ -729,18 +733,17 @@ declare function alignmentShiftedFields(position: AstmPosition): AstmRecordWarni
729
733
  * repeat alone: everything past the boundary stays in `repeats` and leaves every modeled slot, so a
730
734
  * result value truncates and a Universal Test ID or a patient name loses the components that sat
731
735
  * after it. At a **later** boundary nothing modeled moves and this still fires, which is
732
- * over-reporting relative to those slots and never under-reporting, and **where the sequence past
733
- * the boundary carries the repeat separator itself** the two readings read the same number of
734
- * repeats in different places, so the field is not read as more repeats at all; see
735
- * {@link WARNING_CODES.ASTM_RECORD_ALIGNMENT_TRUNCATED_FIELD}.
736
+ * over-reporting relative to those slots and never under-reporting. **By how many repeats the two
737
+ * readings differ, including the tie class where they do not differ at all, is stated once on
738
+ * {@link ShiftedFieldsSink}.**
736
739
  *
737
740
  * A profile may **not** tolerate this code. **Which tolerable escape report accompanies it depends
738
741
  * on the tail**: {@link WARNING_CODES.ASTM_UNPAIRED_ESCAPE_CHARACTER} where the tail heads no
739
742
  * sequence at all, and {@link WARNING_CODES.ASTM_UNKNOWN_ESCAPE_SEQUENCE} where it heads one whose
740
- * body is unrecognized. Both report strictly weaker facts, and wherever the escape role is a
741
- * character distinct from the three splitting roles one of them always fires beside this code. It
742
- * fires alongside {@link WARNING_CODES.ASTM_RECORD_AMBIGUOUS_ESCAPE_ALIGNMENT} where that also
743
- * applies. The reading
743
+ * body is unrecognized. Both report strictly weaker facts. **Which of them accompanies this code,
744
+ * and the declaration under which neither does, is stated once on the tail test itself**; see
745
+ * {@link ShiftedFieldsSink}. It fires alongside
746
+ * {@link WARNING_CODES.ASTM_RECORD_AMBIGUOUS_ESCAPE_ALIGNMENT} where that also applies. The reading
744
747
  * is unchanged: this reports the gained boundary, it does not repair it.
745
748
  *
746
749
  * @example
@@ -753,26 +756,24 @@ declare function alignmentTruncatedField(position: AstmPosition): AstmRecordWarn
753
756
  /**
754
757
  * Build an `ASTM_RECORD_ALIGNMENT_SHIFTED_COMPONENTS` warning. Emitted when a competing escape
755
758
  * alignment decided a **component** boundary and the escape character the reading taken resumes on
756
- * heads no sequence this codec can interpret, so every component after that point sits one place
757
- * further right
759
+ * heads no sequence this codec can interpret, so every component after that point sits further right
758
760
  * than the competing alignment puts it. No field number changes and nothing leaves the record, and
759
761
  * that is the difference from {@link alignmentShiftedFields} and {@link alignmentTruncatedField}:
760
762
  * what moves is which modeled slot each component lands in, so a Universal Test ID's coding scheme
761
763
  * and local code, or a patient's given and middle names, are read out of positions the competing
762
764
  * alignment does not put them in. **Every gained boundary at or before the last modeled component
763
765
  * index moves those slots, not only the first**; past that index, and inside a **later repeat**,
764
- * nothing named moves and this still fires, which is over-reporting and never under-reporting, and
765
- * **where the sequence past the boundary carries the component separator itself** the two readings
766
- * read the same number of components in different places, so no component index moves at all. See
767
- * {@link WARNING_CODES.ASTM_RECORD_ALIGNMENT_SHIFTED_COMPONENTS}.
766
+ * nothing named moves and this still fires, which is over-reporting and never under-reporting.
767
+ * **How far the components are displaced, including the tie class where they do not move at all, is
768
+ * stated once on {@link ShiftedFieldsSink}**; it is not fixed.
768
769
  *
769
770
  * A profile may **not** tolerate this code. **Which tolerable escape report accompanies it depends
770
771
  * on the tail**: {@link WARNING_CODES.ASTM_UNPAIRED_ESCAPE_CHARACTER} where the tail heads no
771
772
  * sequence at all, and {@link WARNING_CODES.ASTM_UNKNOWN_ESCAPE_SEQUENCE} where it heads one whose
772
- * body is unrecognized. Both report strictly weaker facts, and wherever the escape role is a
773
- * character distinct from the three splitting roles one of them always fires beside this code. It
774
- * fires alongside {@link WARNING_CODES.ASTM_RECORD_AMBIGUOUS_ESCAPE_ALIGNMENT} where that also
775
- * applies. The reading
773
+ * body is unrecognized. Both report strictly weaker facts. **Which of them accompanies this code,
774
+ * and the declaration under which neither does, is stated once on the tail test itself**; see
775
+ * {@link ShiftedFieldsSink}. It fires alongside
776
+ * {@link WARNING_CODES.ASTM_RECORD_AMBIGUOUS_ESCAPE_ALIGNMENT} where that also applies. The reading
776
777
  * is unchanged: this reports the moved components, it does not repair them.
777
778
  *
778
779
  * @example
@@ -3768,7 +3769,7 @@ declare class AstmParseError extends Error {
3768
3769
  * mnemonic and is therefore preserved verbatim rather than read), the boundary was
3769
3770
  * bought with bytes this reading cannot read, while the competing alignment is
3770
3771
  * precisely the reading that can. On the **field** separator that gained boundary
3771
- * shifts every later field one place, so a result record's units and **result
3772
+ * shifts every later field, so a result record's units and **result
3772
3773
  * status** are read out of slots the competing alignment does not put them in, and
3773
3774
  * a status of `final` can be a consequence of the alignment rather than something
3774
3775
  * the sender wrote there. That is `ASTM_RECORD_ALIGNMENT_SHIFTED_FIELDS`; see
@@ -3787,7 +3788,7 @@ declare class AstmParseError extends Error {
3787
3788
  *
3788
3789
  * **The same question asked on the component separator has a third answer again, and
3789
3790
  * so a third code.** There the components neither leave the record nor change field
3790
- * number: they move one slot along, because components are modeled *inside* a field.
3791
+ * number: they move along the component list, because components are modeled *inside* a field.
3791
3792
  * A Universal Test ID's coding scheme and local code, and a patient's given and middle
3792
3793
  * names, are then read out of positions the competing alignment does not put them in.
3793
3794
  * That is `ASTM_RECORD_ALIGNMENT_SHIFTED_COMPONENTS`; see {@link ShiftedComponentsSink},
@@ -3892,7 +3893,7 @@ type AmbiguousAlignmentSink = (segmentIndex: number) => void;
3892
3893
  * and the boundary is bought with bytes this reading cannot read either way.
3893
3894
  *
3894
3895
  * Wired **only to the split taken on the field separator**, because that is the
3895
- * whole of its claim: a gained *field* boundary shifts every later field one place,
3896
+ * whole of its claim: a gained *field* boundary shifts every later field,
3896
3897
  * so a record's modeled slots after it are decided by the alignment rather than by
3897
3898
  * the sender's own positions. On a result record that is the units slot and the
3898
3899
  * **result status** slot: the sender's trailing letter lands in field 9 under the
@@ -3907,8 +3908,8 @@ type AmbiguousAlignmentSink = (segmentIndex: number) => void;
3907
3908
  * reported by {@link TruncatedFieldSink}, on the same tail test and under its own
3908
3909
  * code, because what it costs is a different thing. The **component** half is
3909
3910
  * reported by {@link ShiftedComponentsSink}, on that same tail test and under a code of
3910
- * its own again, because what it costs is a third thing: there the components move one
3911
- * slot along rather than leaving the record. The
3911
+ * its own again, because what it costs is a third thing: there the components move along the
3912
+ * component list rather than leaving the record. The
3912
3913
  * callback lets the parser surface a value-free
3913
3914
  * `ASTM_RECORD_ALIGNMENT_SHIFTED_FIELDS` warning. Optional so the split can be used
3914
3915
  * purely.
@@ -3935,9 +3936,10 @@ type AmbiguousAlignmentSink = (segmentIndex: number) => void;
3935
3936
  * for this family.
3936
3937
  *
3937
3938
  * **That exclusion is not a matter of degree, which is why it is the only one.** It
3938
- * is the sole tail on which a stream's escaping can be clean at all: on the other
3939
- * two the package already reports a deviation, so this report can never be the
3940
- * reason a well-formed stream is refused. A tail comparison that instead weighs
3939
+ * is the sole tail on which a stream's escaping can be clean at all, wherever the
3940
+ * escape role is a character distinct from the three splitting roles: on the other two
3941
+ * the package already reports a deviation. **Where the escape role is NOT distinct that
3942
+ * reasoning does not hold**; see the companion paragraph on {@link ShiftedFieldsSink}. A tail comparison that instead weighs
3941
3943
  * which alignment the bytes *prefer* would exclude the unrecognized body too (the
3942
3944
  * competing alignment leaves two escape characters bare there against the reading
3943
3945
  * taken's one unreadable body) and it is the wrong question: these codes report a
@@ -3952,25 +3954,68 @@ type AmbiguousAlignmentSink = (segmentIndex: number) => void;
3952
3954
  * this bound makes. **Read the raw line when an escape character sits next to a
3953
3955
  * delimiter, whether or not anything fired.**
3954
3956
  *
3955
- * **⚠️ THE SHIFT IS NOT UNIVERSAL OVER THE FIRING POPULATION, AND THE EXCEPTION IS
3956
- * NAMED RATHER THAN LEFT TO BE FOUND.** Where the sequence past the boundary carries
3957
- * the **field separator itself** as its body, the reading taken holds that character
3958
- * inside an opaque atom while the competing alignment splits on it, so the two
3959
- * readings return the **same number** of fields in **different places**: no field
3960
- * index moves, and what differs is the **contents** of the fields at and after the
3961
- * boundary. Under the canonical set `R|1|^^^687|28.6&F&|&|&U/L||||F` reads nine
3962
- * fields under both, with the status `F` in field 9 under both, and units of `&|&U/L`
3963
- * against `&U/L`. That class is bounded and costs no stream its disposition: the tail
3964
- * body is then a splitting delimiter in force, so
3965
- * `ASTM_RECORD_DELIMITER_SWALLOWED_BY_ESCAPE` has already refused the record. What
3966
- * holds on **every** firing tuple is that the two readings disagree and that both
3967
- * consume every byte, so neither is forced.
3957
+ * **⚠️ HOW FAR THE DISPLACEMENT RUNS. Every other surface names the KIND of cost and
3958
+ * leaves the magnitude to this paragraph**, because a restatement is a separate claim
3959
+ * that goes stale on its own, and on this family they have.
3960
+ *
3961
+ * **The displacement is not fixed, and "one place" describes only the single-construct
3962
+ * case the three codes were first measured on.** It takes three values, and two of them
3963
+ * were left out of every surface that quoted a figure:
3964
+ *
3965
+ * - **Zero, on the tie class.** Where the sequence past the boundary carries the
3966
+ * **field separator itself** as its body, the reading taken holds that character
3967
+ * inside an opaque atom while the competing alignment splits on it, so the two
3968
+ * readings return the **same number** of fields in **different places**: no field
3969
+ * index moves and what differs is the **contents**. `R|1|^^^687|28.6&F&|&|&U/L||||F`
3970
+ * reads nine fields under both, status `F` in field 9 under both, units `&|&U/L`
3971
+ * against `&U/L`. That class costs no stream its disposition: the tail body is a
3972
+ * splitting delimiter in force, so `ASTM_RECORD_DELIMITER_SWALLOWED_BY_ESCAPE` has
3973
+ * already refused the record.
3974
+ * - **One, on a record carrying exactly one contested construct.** This is the case
3975
+ * every corpus in this family was built on, and the only one "one place" was ever
3976
+ * true of.
3977
+ * - **One more for each additional contested construct.** The competing reading resumes
3978
+ * a character further on at each contested position, so it falls further out of step
3979
+ * with the reading taken and the gap widens once per construct.
3980
+ * `A&Z&|&BX&Z&|&F&C` reads **three** fields against **one**.
3981
+ *
3982
+ * **The number of these warnings is not the displacement either, in either
3983
+ * direction.** A gained boundary whose tail is a recognized mnemonic is excluded from
3984
+ * the report and still displaces, so one warning can sit on a displacement of two; and
3985
+ * where one of several constructs is a tie, two warnings can sit on a displacement of
3986
+ * one. A consumer cannot recover the offset by counting. **Read the raw line.**
3987
+ *
3988
+ * What holds on **every** firing tuple is that the two readings disagree, that both
3989
+ * consume every byte so neither is forced, and that the reading taken never reads
3990
+ * **fewer** segments than the competing one. Measured in
3991
+ * `test/records/alignment-offset-rephasing.test.ts`.
3992
+ *
3993
+ * **⚠️ WHICH REPORTS ACCOMPANY THIS ONE, AND THE DECLARATION ON WHICH NONE DOES.** The
3994
+ * exclusion above rests on a defence against over-refusal: firing requires an escape
3995
+ * character heading no sequence this codec can interpret, and the package reports each
3996
+ * of those in its own right, so a stream whose escaping raises nothing is never refused
3997
+ * because of these codes. **That defence is true wherever the escape role is a
3998
+ * character distinct from the three splitting roles, and it is FALSE where it is not.**
3999
+ * On a set naming the escape character in a splitting role too, one byte both opens a
4000
+ * sequence and ends a segment, the split claims it first, and neither
4001
+ * `ASTM_UNPAIRED_ESCAPE_CHARACTER` nor `ASTM_UNKNOWN_ESCAPE_SEQUENCE` ever sees a
4002
+ * sequence to raise: this fires with **neither** companion. What refuses the stream
4003
+ * there is the declaration itself, as `ASTM_RECORD_DELIMITER_ROLE_COLLISION`, which no
4004
+ * profile may tolerate. So the defence survives only in the form **no stream whose
4005
+ * escaping AND whose declaration are both clean is refused by one of these codes.**
4006
+ *
4007
+ * **That replacement is scoped to the STREAM and does not hold per message**: the
4008
+ * collision is reported once per set change rather than once per record, so a second
4009
+ * header re-declaring the same colliding set raises nothing while these codes fire
4010
+ * again in its message. A consumer scoping warnings to a message can therefore see one
4011
+ * of them standing entirely alone. The **field** role cannot collide with the escape
4012
+ * role at all: the declaration is the three characters after the field separator and
4013
+ * stops at the next one, so such a header terminates itself one character short and is
4014
+ * refused. Measured in `test/records/alignment-companion-universal.test.ts`.
3968
4015
  *
3969
4016
  * @param segmentIndex - The 0-based index of the field being accumulated when the
3970
- * contested boundary was taken. Every field after it is one place further right
3971
- * than the competing alignment puts it, **except** where the sequence past the
3972
- * boundary carries the field separator as its body, where the two readings return
3973
- * the same number of fields with different contents instead.
4017
+ * contested boundary was taken. For how far the fields after it are displaced, see
4018
+ * the displacement paragraph above: it is not a fixed one place.
3974
4019
  */
3975
4020
  type ShiftedFieldsSink = (segmentIndex: number) => void;
3976
4021
  /**
@@ -4025,7 +4070,8 @@ type ShiftedFieldsSink = (segmentIndex: number) => void;
4025
4070
  * the repeat separator `F`, `28.6&F&F&F&U/L` is that separator escaped, written, and
4026
4071
  * escaped again, with nothing reported at all. Refusing that is the over-refusal that
4027
4072
  * sank an earlier candidate criterion for this family, and that tail is the only one
4028
- * on which a stream's escaping can be clean. Where the tail heads a sequence whose
4073
+ * on which a stream's escaping can be clean, on the declarations the companion
4074
+ * paragraph on {@link ShiftedFieldsSink} scopes that to. Where the tail heads a sequence whose
4029
4075
  * body is *unrecognized*, the reading taken consumes a triple it cannot read, the
4030
4076
  * truncation is the same truncation, and this reports it.
4031
4077
  *
@@ -4052,7 +4098,9 @@ type ShiftedFieldsSink = (segmentIndex: number) => void;
4052
4098
  * contested boundary was taken, so `0` is the boundary that ends the first repeat
4053
4099
  * and is the one that reaches a modeled slot. It is **not** a field index: the
4054
4100
  * caller splitting one field into repeats already knows which field it is in, and
4055
- * reports that.
4101
+ * reports that. For how many repeats the two readings differ by, and why the count
4102
+ * of these warnings does not give it, see the displacement paragraph on
4103
+ * {@link ShiftedFieldsSink}.
4056
4104
  */
4057
4105
  type TruncatedFieldSink = (segmentIndex: number) => void;
4058
4106
  /**
@@ -4067,8 +4115,8 @@ type TruncatedFieldSink = (segmentIndex: number) => void;
4067
4115
  * **What a gained component boundary costs, and it is neither of the other two.** No
4068
4116
  * field number changes, so nothing shifts between field-indexed slots, and nothing
4069
4117
  * leaves the record, so nothing truncates. Components are modeled **inside** a field,
4070
- * so what happens is that every component after the gained boundary is one place
4071
- * further right than the competing alignment puts it, and the slots that indexes into
4118
+ * so what happens is that every component after the gained boundary sits further right
4119
+ * than the competing alignment puts it, and the slots that indexes into
4072
4120
  * are named things: a Universal Test ID's LOINC-candidate slot, test name, **coding
4073
4121
  * scheme** and **local code**; a patient name's last, first and middle. Under the
4074
4122
  * canonical set `&F&^&GLU^L^687` reads four components, so `L` is the coding scheme
@@ -4115,7 +4163,8 @@ type TruncatedFieldSink = (segmentIndex: number) => void;
4115
4163
  * separator `F`, `GLU&F&F&F&L` is that separator escaped, written, and escaped again,
4116
4164
  * with nothing reported at all. Refusing that is the over-refusal that sank an earlier
4117
4165
  * candidate criterion for this family, and that tail is the only one on which a
4118
- * stream's escaping can be clean. Where the tail heads a sequence whose body is
4166
+ * stream's escaping can be clean, on the declarations the companion paragraph on
4167
+ * {@link ShiftedFieldsSink} scopes that to. Where the tail heads a sequence whose body is
4119
4168
  * *unrecognized*, the reading taken consumes a triple it cannot read, the slots move
4120
4169
  * exactly as far, and this reports it.
4121
4170
  *
@@ -4126,28 +4175,24 @@ type TruncatedFieldSink = (segmentIndex: number) => void;
4126
4175
  * still sit where an alignment guess put them. Reporting it would refuse a stream whose
4127
4176
  * escaping is working.
4128
4177
  *
4129
- * **⚠️ THE MOVE IS NOT UNIVERSAL OVER THE FIRING POPULATION, AND THE EXCEPTION IS NAMED
4130
- * RATHER THAN LEFT TO BE FOUND.** It is a **third** bound running the other way, and it
4131
- * differs from the two above: those two fire where nothing named moves because of where
4132
- * the boundary sits, while this one is about the bytes past it. Where the sequence past
4133
- * the boundary carries the **component separator itself** as its body, the reading taken
4134
- * holds that character inside an opaque atom while the competing alignment splits on it,
4135
- * so the two readings return the **same number** of components in **different places**:
4136
- * no component index moves, and what differs is the **contents**. Under the canonical
4137
- * set `DOE&F&^&^&JANE^A` reads three components under both, with `A` the middle name
4138
- * under both. That class is bounded and costs no stream its disposition: the tail body
4139
- * is then a splitting delimiter in force, so
4140
- * `ASTM_RECORD_DELIMITER_SWALLOWED_BY_ESCAPE` has already refused the record. What holds
4141
- * on **every** firing tuple is that the two readings disagree and that both consume
4142
- * every byte, so neither is forced.
4178
+ * **⚠️ HOW FAR THE COMPONENTS MOVE IS THE DISPLACEMENT {@link ShiftedFieldsSink}
4179
+ * STATES, READ ON THE COMPONENT SEPARATOR.** It is not fixed, and it takes three values
4180
+ * and not one: zero on the tie class (`DOE&F&^&^&JANE^A` reads three
4181
+ * components under both, with `A` the middle name under both, and
4182
+ * `ASTM_RECORD_DELIMITER_SWALLOWED_BY_ESCAPE` has already refused that record), and
4183
+ * more than one once a field carries more than one contested construct. That paragraph
4184
+ * is not repeated here on purpose: it is one claim, stated where the link points.
4185
+ *
4186
+ * This third bound differs from the two above in what it is about: those two fire where
4187
+ * nothing named moves because of where the boundary **sits**, while the tie class is
4188
+ * about the bytes **past** it. What holds on **every** firing tuple is that the two
4189
+ * readings disagree and that both consume every byte, so neither is forced.
4143
4190
  *
4144
4191
  * @param segmentIndex - The 0-based index of the component being accumulated when the
4145
- * contested boundary was taken. Every component after it is one place further right
4146
- * than the competing alignment puts it, **except** where the sequence past the
4147
- * boundary carries the component separator as its body, where the two readings return
4148
- * the same number of components with different contents instead. It is **not** a field
4149
- * index, and it is **not** a repeat index: the caller splitting one repeat into
4150
- * components already knows both, and reports the field.
4192
+ * contested boundary was taken. It is **not** a field index, and it is **not** a
4193
+ * repeat index: the caller splitting one repeat into components already knows both,
4194
+ * and reports the field. For how far the components after it move, see the
4195
+ * displacement paragraph on {@link ShiftedFieldsSink}.
4151
4196
  */
4152
4197
  type ShiftedComponentsSink = (segmentIndex: number) => void;
4153
4198
  /**
@@ -4606,10 +4651,12 @@ declare function resolveProfileTransport(profile: AstmProfile | undefined): Astm
4606
4651
  * the first one that reaches a MODELED SLOT rather than a boundary.** It reports
4607
4652
  * that a contested alignment decided a **field** boundary while the reading taken
4608
4653
  * resumes on an escape character heading no sequence this codec can interpret, so
4609
- * every later field sits one place further right than the competing alignment puts
4610
- * it (**except where the sequence past the boundary carries the field separator
4611
- * itself**, where the two readings read the same number of fields in different
4612
- * places). On a result record that
4654
+ * every later field sits further right than the competing alignment puts it, by a
4655
+ * displacement that is not fixed (**except where the sequence past the boundary carries
4656
+ * the field separator itself**, where the two readings read the same number of fields in
4657
+ * different places, and further still where the record carries a second contested
4658
+ * construct).
4659
+ * On a result record that
4613
4660
  * moves the units and the **result status**: the sender's trailing letter is read out
4614
4661
  * of field 9 under the reading taken and out of no field at all under the other, so a
4615
4662
  * status of `final` can be a consequence of the alignment rather than something the
@@ -4651,10 +4698,11 @@ declare function resolveProfileTransport(profile: AstmProfile | undefined): Astm
4651
4698
  * role.** It reports a contested alignment deciding a **component** boundary. Nothing
4652
4699
  * shifts between fields and nothing leaves the record, which is why neither of the two
4653
4700
  * above could cover it: components are modeled **inside** a field, so every component
4654
- * after the gained boundary is one place further right than the competing alignment
4655
- * puts it (**except where the sequence past the boundary carries the component
4656
- * separator itself**, where the two readings read the same number of components in
4657
- * different places). That indexes into named slots. A Universal Test ID's four components are the
4701
+ * after the gained boundary sits further right than the competing alignment puts it, by
4702
+ * a displacement that is not fixed (**except where the sequence past the boundary carries
4703
+ * the component separator itself**, where the two readings read the same number of
4704
+ * components in different places, and further still where the field carries a second
4705
+ * contested construct). That indexes into named slots. A Universal Test ID's four components are the
4658
4706
  * LOINC-candidate slot, the test name, the **coding scheme** and the **local code**, so
4659
4707
  * `&F&^&GLU^L^687` reads `687` as the vendor's local code under the reading taken and
4660
4708
  * as the **coding scheme** under the competing one; a patient name's three are last,
@@ -4873,7 +4921,7 @@ declare function resolveProfileTransport(profile: AstmProfile | undefined): Astm
4873
4921
  * `ASTM_RECORD_ALIGNMENT_SHIFTED_COMPONENTS` is not on this list and must not be added
4874
4922
  * to it either. It reports the same contested alignment deciding a **component**
4875
4923
  * boundary, where nothing leaves the record and no field number changes, and every
4876
- * component after it moves one slot along instead: a Universal Test ID's coding scheme
4924
+ * component after it moves along the component list instead: a Universal Test ID's coding scheme
4877
4925
  * and local code, and a patient's given and middle names, are read out of positions the
4878
4926
  * competing alignment does not put them in. Reporting a code system, a vendor's local
4879
4927
  * code or a given name that the bytes do not unambiguously carry fails the first half of
package/dist/index.mjs CHANGED
@@ -271,9 +271,12 @@ var WARNING_CODES = {
271
271
  * Two escape alignments of the same bytes disagreed about a **field** boundary, the reading taken
272
272
  * kept it, and the escape character that reading resumes on **heads no sequence this codec can
273
273
  * interpret**, so the boundary was bought with bytes this reading cannot read while the competing
274
- * alignment is exactly the reading that can. Every field after that point sits one place further
275
- * right than the competing alignment puts it, **except on the one class named at the end of this
276
- * entry**, where the two readings instead read the same number of fields in different places.
274
+ * alignment is exactly the reading that can. Every field after that point sits further
275
+ * right than the competing alignment puts it, by a displacement that is **not fixed**: one place
276
+ * on a record carrying a single contested construct, one more for each additional one, and none
277
+ * at all **on the one class named at the end of this entry**, where the two readings instead read
278
+ * the same number of fields in different places. Counting these warnings does not give it; see
279
+ * {@link ShiftedFieldsSink}.
277
280
  *
278
281
  * **The shift is the harm, and on a result record it reaches the status slot.** Measured on the
279
282
  * canonical set, `R|1|^^^687|28.6&F&|&U/L||||F` reads **9** fields under the reading taken and
@@ -318,7 +321,8 @@ var WARNING_CODES = {
318
321
  * taken interprets a construct and leaves nothing unread: under a set naming the field separator
319
322
  * `F`, `28.6&F&F&F&U/L` is that separator escaped, written, and escaped again, entirely well
320
323
  * formed, and refusing it would be an over-refusal. That is the only tail on which a stream's
321
- * escaping can be clean, which is why it is the only exclusion. Where the tail heads a sequence
324
+ * escaping can be clean, on the declarations {@link ShiftedFieldsSink} scopes that to, which is
325
+ * why it is the only exclusion. Where the tail heads a sequence
322
326
  * whose body is *unrecognized*, the reading taken consumes a triple it cannot read, preserved
323
327
  * verbatim and never guessed at, the field shift is the same shift, and **this reports it**.
324
328
  * Consuming a triple is not interpreting one.
@@ -396,8 +400,8 @@ var WARNING_CODES = {
396
400
  *
397
401
  * **Two further deliberate bounds, both stated rather than left to be found.**
398
402
  * - **Only the repeat role.** The **component** role reaches a modeled slot too, and differently:
399
- * there the components stay in the record and move one slot along, so a local code reads as a
400
- * coding scheme and a given name as a middle name. That is measured and is now reported by
403
+ * there the components stay in the record and move along the component list, so a local code
404
+ * reads as a coding scheme and a given name as a middle name. That is measured and is now reported by
401
405
  * {@link WARNING_CODES.ASTM_RECORD_ALIGNMENT_SHIFTED_COMPONENTS}, a third code on the same tail
402
406
  * test wired to the component split. It is still not covered **here**, because wiring a sink to
403
407
  * another split is another criterion, which is why it took its own population measurement.
@@ -406,8 +410,8 @@ var WARNING_CODES = {
406
410
  * this codec *recognizes*, it interprets a construct and the repeats are the ones the sender
407
411
  * wrote: under a set naming the repeat separator `F`, `28.6&F&F&F&U/L` is that separator
408
412
  * escaped, written, and escaped again, entirely well formed, and refusing it would be an
409
- * over-refusal. That is the only tail on which a stream's escaping can be clean, which is why it
410
- * is the only exclusion. Where the tail heads a sequence whose body is *unrecognized*, the
413
+ * over-refusal. That is the only tail on which a stream's escaping can be clean, on the
414
+ * declarations {@link ShiftedFieldsSink} scopes that to, which is why it is the only exclusion. Where the tail heads a sequence whose body is *unrecognized*, the
411
415
  * reading taken consumes a triple it cannot read, preserved verbatim and never guessed at, the
412
416
  * truncation is the same truncation, and **this reports it**.
413
417
  * - **That remaining silence is a TRADE, not a claim that nothing was lost.** On the excluded tail
@@ -442,10 +446,11 @@ var WARNING_CODES = {
442
446
  * {@link WARNING_CODES.ASTM_RECORD_ALIGNMENT_TRUNCATED_FIELD}, on the third and last splitting
443
447
  * role, and what it costs is a third thing again, which is why it is a third code.
444
448
  *
445
- * **The components are neither shifted out of the record nor dropped from it: they MOVE one slot
446
- * along.** A field's components are modeled *inside* it, so a gained component boundary shifts
447
- * every component after it exactly as a gained field boundary shifts every later field, **except
448
- * on the one class named at the end of this entry**, where the two readings instead read the same
449
+ * **The components are neither shifted out of the record nor dropped from it: they MOVE along the
450
+ * component list.** A field's components are modeled *inside* it, so a gained component boundary shifts
451
+ * every component after it exactly as a gained field boundary shifts every later field, by the
452
+ * displacement {@link ShiftedFieldsSink} states, **except on the one class named at the end of
453
+ * this entry**, where the two readings instead read the same
449
454
  * number of components in different places. Nothing leaves the record and nothing changes field
450
455
  * number; what changes is which modeled slot each component lands in, and those slots are named
451
456
  * things:
@@ -497,7 +502,8 @@ var WARNING_CODES = {
497
502
  * *recognizes*, it interprets a construct and the components are the ones the sender wrote: under
498
503
  * a set naming the component separator `F`, `GLU&F&F&F&L` is that separator escaped, written, and
499
504
  * escaped again, entirely well formed, and refusing it would be an over-refusal. That is the only
500
- * tail on which a stream's escaping can be clean, which is why it is the only exclusion. Where the
505
+ * tail on which a stream's escaping can be clean, on the declarations
506
+ * {@link ShiftedFieldsSink} scopes that to, which is why it is the only exclusion. Where the
501
507
  * tail heads a sequence whose body is *unrecognized*, the reading taken consumes a triple it
502
508
  * cannot read, preserved verbatim and never guessed at, the slots move exactly as far, and **this
503
509
  * reports it**.
@@ -683,21 +689,21 @@ function ambiguousEscapeAlignment(position) {
683
689
  function alignmentShiftedFields(position) {
684
690
  return {
685
691
  code: WARNING_CODES.ASTM_RECORD_ALIGNMENT_SHIFTED_FIELDS,
686
- message: "A field boundary here is one of two escape alignments the bytes carry, and the reading that took it resumes on an escape character heading no sequence this reader can interpret, which the other alignment uses to close one. The two readings disagree, and both consume every byte, so neither is forced. Usually every later field is one place further right than the other reading puts it, so a result's units and status may be read out of slots the sender did not put them in; one measured class does not shift at all, where the sequence past the boundary carries the field separator itself and the two readings read the same number of fields with different contents. The reading was kept and every byte is preserved.",
692
+ message: "A field boundary here is one of two escape alignments the bytes carry, and the reading that took it resumes on an escape character heading no sequence this reader can interpret, which the other alignment uses to close one. The two readings disagree, and both consume every byte, so neither is forced. How far the later fields are displaced is NOT fixed: one place where the record carries a single contested construct, one more for each additional one, and none at all on one measured class, where the sequence past the boundary carries the field separator itself and the two readings read the same number of fields with different contents. So a result's units and status may be read out of slots the sender did not put them in. Counting these warnings does not give the displacement. Read the raw line. The reading was kept and every byte is preserved.",
687
693
  position
688
694
  };
689
695
  }
690
696
  function alignmentTruncatedField(position) {
691
697
  return {
692
698
  code: WARNING_CODES.ASTM_RECORD_ALIGNMENT_TRUNCATED_FIELD,
693
- message: "A repeat boundary here is one of two escape alignments the bytes carry, and the reading that took it resumes on an escape character heading no sequence this reader can interpret, which the other alignment uses to close one. The two readings disagree, and both consume every byte, so neither is forced. Usually this field is read as more repeats than the other reading gives it, and its modeled value and components are taken from the first repeat alone, so where that boundary is the first one the rest of the field leaves every modeled slot; one measured class reads the same number of repeats, where the sequence past the boundary carries the repeat separator itself. The reading was kept and every byte is preserved.",
699
+ message: "A repeat boundary here is one of two escape alignments the bytes carry, and the reading that took it resumes on an escape character heading no sequence this reader can interpret, which the other alignment uses to close one. The two readings disagree, and both consume every byte, so neither is forced. How many more repeats this field is read as is NOT fixed: one where the record carries a single contested construct, one more for each additional one, and none at all on one measured class, where the sequence past the boundary carries the repeat separator itself. Its modeled value and components are taken from the first repeat alone, so where that boundary is the first one the rest of the field leaves every modeled slot. Counting these warnings does not give the difference. Read the raw line. The reading was kept and every byte is preserved.",
694
700
  position
695
701
  };
696
702
  }
697
703
  function alignmentShiftedComponents(position) {
698
704
  return {
699
705
  code: WARNING_CODES.ASTM_RECORD_ALIGNMENT_SHIFTED_COMPONENTS,
700
- message: "A component boundary here is one of two escape alignments the bytes carry, and the reading that took it resumes on an escape character heading no sequence this reader can interpret, which the other alignment uses to close one. The two readings disagree, and both consume every byte, so neither is forced. Usually every later component of this field sits one place further right than the other reading puts it, so a test identity's coding scheme and local code, or a patient's given and middle names, may be read out of slots the sender did not put them in; one measured class does not move at all, where the sequence past the boundary carries the component separator itself and the two readings read the same number of components with different contents. The reading was kept and every byte is preserved.",
706
+ message: "A component boundary here is one of two escape alignments the bytes carry, and the reading that took it resumes on an escape character heading no sequence this reader can interpret, which the other alignment uses to close one. The two readings disagree, and both consume every byte, so neither is forced. How far the later components of this field are displaced is NOT fixed: one place where the field carries a single contested construct, one more for each additional one, and none at all on one measured class, where the sequence past the boundary carries the component separator itself and the two readings read the same number of components with different contents. So a test identity's coding scheme and local code, or a patient's given and middle names, may be read out of slots the sender did not put them in. Counting these warnings does not give the displacement. Read the raw line. The reading was kept and every byte is preserved.",
701
707
  position
702
708
  };
703
709
  }
@@ -1326,7 +1332,7 @@ var referenceCorpus = defineAstmProfile({
1326
1332
  tolerate: [
1327
1333
  {
1328
1334
  code: "ASTM_UNKNOWN_ESCAPE_SEQUENCE",
1329
- rationale: "The OSS reference stack (python-astm codec.py, firsthand-verified) treats '&' as literal data and never decodes escape sequences, so streams from that ecosystem carry non-standard '&\u2026&' bodies our escape-aware tokenizer flags. The body is preserved byte-for-byte in the value. NOT always non-clinical, and this is measured rather than assumed: where the body is a delimiter, that delimiter never became a field boundary, so `28.6&|&U/L` reads as one value with no units and no final status. That subset now also raises ASTM_RECORD_DELIMITER_SWALLOWED_BY_ESCAPE, which this profile cannot tolerate, so tolerating this code no longer hides it. The same holds for the mirror case, where a sequence ends where another could have begun and a delimiter splits that the other alignment would have held: that raises ASTM_RECORD_AMBIGUOUS_ESCAPE_ALIGNMENT, which this profile cannot tolerate either. Where that gained boundary is a field boundary and the reading taken resumes on an escape character heading no sequence this reader can interpret, every later field shifts and a result's units and status move with it, which raises ASTM_RECORD_ALIGNMENT_SHIFTED_FIELDS, untolerable here as well. Where that same gained boundary is a repeat boundary, nothing shifts but the field is read out of its first repeat alone, so a value truncates and a test identity empties, which raises ASTM_RECORD_ALIGNMENT_TRUNCATED_FIELD, untolerable here too. Where it is a component boundary, nothing leaves the record and no field number changes, and every component after it moves one slot along, so a test identity's coding scheme and local code and a patient's given and middle names are read out of positions the other alignment does not put them in, which raises ASTM_RECORD_ALIGNMENT_SHIFTED_COMPONENTS, untolerable here as well. Each of those three shift claims has one measured exception, where the sequence past the boundary carries the splitting delimiter itself: the two readings then read the same number of segments in different places, nothing moves index, and the record was already refused by ASTM_RECORD_DELIMITER_SWALLOWED_BY_ESCAPE. All three carry the same tail bound and stay silent in exactly one case, where the escape character past the boundary heads a sequence this reader RECOGNIZES, which is the escape mechanism working. How often that happens on this corpus is NOT measured and must not be guessed at: the firsthand grounding above is of the DECODE path only, and a relayed stream can still carry a device-written mnemonic. Tolerating this code does not quiet those three, and their absence is not a statement that nothing was lost."
1335
+ rationale: "The OSS reference stack (python-astm codec.py, firsthand-verified) treats '&' as literal data and never decodes escape sequences, so streams from that ecosystem carry non-standard '&\u2026&' bodies our escape-aware tokenizer flags. The body is preserved byte-for-byte in the value. NOT always non-clinical, and this is measured rather than assumed: where the body is a delimiter, that delimiter never became a field boundary, so `28.6&|&U/L` reads as one value with no units and no final status. That subset now also raises ASTM_RECORD_DELIMITER_SWALLOWED_BY_ESCAPE, which this profile cannot tolerate, so tolerating this code no longer hides it. The same holds for the mirror case, where a sequence ends where another could have begun and a delimiter splits that the other alignment would have held: that raises ASTM_RECORD_AMBIGUOUS_ESCAPE_ALIGNMENT, which this profile cannot tolerate either. Where that gained boundary is a field boundary and the reading taken resumes on an escape character heading no sequence this reader can interpret, every later field shifts and a result's units and status move with it, which raises ASTM_RECORD_ALIGNMENT_SHIFTED_FIELDS, untolerable here as well. Where that same gained boundary is a repeat boundary, nothing shifts but the field is read out of its first repeat alone, so a value truncates and a test identity empties, which raises ASTM_RECORD_ALIGNMENT_TRUNCATED_FIELD, untolerable here too. Where it is a component boundary, nothing leaves the record and no field number changes, and every component after it moves along the component list, so a test identity's coding scheme and local code and a patient's given and middle names are read out of positions the other alignment does not put them in, which raises ASTM_RECORD_ALIGNMENT_SHIFTED_COMPONENTS, untolerable here as well. Each of those three shift claims has one measured exception, where the sequence past the boundary carries the splitting delimiter itself: the two readings then read the same number of segments in different places, nothing moves index, and the record was already refused by ASTM_RECORD_DELIMITER_SWALLOWED_BY_ESCAPE. All three carry the same tail bound and stay silent in exactly one case, where the escape character past the boundary heads a sequence this reader RECOGNIZES, which is the escape mechanism working. How often that happens on this corpus is NOT measured and must not be guessed at: the firsthand grounding above is of the DECODE path only, and a relayed stream can still carry a device-written mnemonic. Tolerating this code does not quiet those three, and their absence is not a statement that nothing was lost."
1330
1336
  }
1331
1337
  ]
1332
1338
  });
@@ -2900,7 +2906,7 @@ function concatBytes3(chunks) {
2900
2906
  }
2901
2907
 
2902
2908
  // src/index.ts
2903
- var VERSION = "0.0.19";
2909
+ var VERSION = "0.0.21";
2904
2910
 
2905
2911
  export { ALL_ASTM_WARNING_CODES, AMBIGUOUS_CODES, ACK as ASTM_ACK, ENQ as ASTM_ENQ, EOT as ASTM_EOT, NAK as ASTM_NAK, AstmAmbiguousStreamError, AstmFrameEncodeError, AstmFrameStrictError, AstmParseError, AstmProfileDefinitionError, AstmSerializeError, AstmStrictError, CANONICAL_DELIMITERS, FATAL_CODES, FRAME_WARNING_CODES, LIVD_WARNING_CODES, LTP_WARNING_CODES, SAFETY_CRITICAL_CODES, TOLERABLE_CODES, VERSION, WARNING_CODES, alignmentShiftedComponents, alignmentShiftedFields, alignmentTruncatedField, ambiguousEscapeAlignment, ambiguousMessageKind, ambiguousValueSplit, applyAstmProfile, applyAstmProfileToWarnings, applyLivd, astmDateToLocalISO, astmProfiles, attachComments, buildAstmMessage, classifyMessage, comments, commentsFor, composeAstmFrames, computeChecksum, decodeAstmFrames, decodeEscapes, deepFreeze, defineAstmProfile, defineLivdCatalog, delimiterRoleCollision, delimiterSwallowedByEscape, delimitersRedeclared, detectFraming, encodeComponent, fieldScalar, fieldsUnseparated, frameBadChecksum, frameOversize, frameSequenceGap, frameUnterminated, getAstmProfile, getDefaultAstmProfile, hasCollidingRoles, interpretAbnormalFlag, interpretResultStatus, isNonStandard, isSafetyCriticalCode, listAstmProfiles, livdAmbiguousMapping, livdUnmappedCode, lookupLivdForRecord, ltpAmbiguousTransport, ltpFrameRejected, ltpInitialState, ltpReduce, ltpUnexpectedEvent, messages, nonStandardDelimiters, orders, orphanComment, parseAstmDate, parseAstmRecords, parseChecksumHex, parseFramedAstm, parseReferenceRange, partialTimestamp, patient, primaryCode, profileQuirkApplied, query, readDelimiterDeclaration, readDelimiters, recognizeUniversalTestId, resolveProfileTransport, results, serializeAstmRecord, serializeAstmRecords, serializeField, serializeFramedAstm, setDefaultAstmProfile, splitEscapeAware, toChecksumHex, tokenizeHeader, tokenizeRecord, undefinedAbnormalFlag, undefinedResultStatus, uninterpretedQueryStatus, unitsAbsent, unknownEscapeSequence, unknownRecordType, unpairedEscapeCharacter, unparseableReferenceRange, unreadableRedeclaration };
2906
2912
  //# sourceMappingURL=index.mjs.map