@aeroswarm/codec 0.0.0-stage → 0.1.9

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 (93) hide show
  1. package/README.md +182 -3
  2. package/dist/index.d.ts +2 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +1249 -0
  5. package/dist/surveillance/adsb/index.d.ts +16 -0
  6. package/dist/surveillance/adsb/index.d.ts.map +1 -0
  7. package/dist/surveillance/aftn/index.d.ts +3 -0
  8. package/dist/surveillance/aftn/index.d.ts.map +1 -0
  9. package/dist/surveillance/aftn/parser.d.ts +16 -0
  10. package/dist/surveillance/aftn/parser.d.ts.map +1 -0
  11. package/dist/surveillance/aftn/parser.test.d.ts +2 -0
  12. package/dist/surveillance/aftn/parser.test.d.ts.map +1 -0
  13. package/dist/surveillance/aftn/types.d.ts +75 -0
  14. package/dist/surveillance/aftn/types.d.ts.map +1 -0
  15. package/dist/surveillance/ais/index.d.ts +17 -0
  16. package/dist/surveillance/ais/index.d.ts.map +1 -0
  17. package/dist/surveillance/asmgcs/index.d.ts +14 -0
  18. package/dist/surveillance/asmgcs/index.d.ts.map +1 -0
  19. package/dist/surveillance/asterix/cat10/index.d.ts +3 -0
  20. package/dist/surveillance/asterix/cat10/index.d.ts.map +1 -0
  21. package/dist/surveillance/asterix/cat21/index.d.ts +5 -0
  22. package/dist/surveillance/asterix/cat21/index.d.ts.map +1 -0
  23. package/dist/surveillance/asterix/cat48/index.d.ts +5 -0
  24. package/dist/surveillance/asterix/cat48/index.d.ts.map +1 -0
  25. package/dist/surveillance/asterix/cat62/index.d.ts +3 -0
  26. package/dist/surveillance/asterix/cat62/index.d.ts.map +1 -0
  27. package/dist/surveillance/asterix/decoder.d.ts +14 -0
  28. package/dist/surveillance/asterix/decoder.d.ts.map +1 -0
  29. package/dist/surveillance/asterix/fields.d.ts +4 -0
  30. package/dist/surveillance/asterix/fields.d.ts.map +1 -0
  31. package/dist/surveillance/asterix/index.d.ts +5 -0
  32. package/dist/surveillance/asterix/index.d.ts.map +1 -0
  33. package/dist/surveillance/asterix/parser.d.ts +16 -0
  34. package/dist/surveillance/asterix/parser.d.ts.map +1 -0
  35. package/dist/surveillance/asterix/parser.test.d.ts +2 -0
  36. package/dist/surveillance/asterix/parser.test.d.ts.map +1 -0
  37. package/dist/surveillance/asterix/resolvers.d.ts +17 -0
  38. package/dist/surveillance/asterix/resolvers.d.ts.map +1 -0
  39. package/dist/surveillance/asterix/types.d.ts +56 -0
  40. package/dist/surveillance/asterix/types.d.ts.map +1 -0
  41. package/dist/surveillance/asterix/values.d.ts +10 -0
  42. package/dist/surveillance/asterix/values.d.ts.map +1 -0
  43. package/dist/surveillance/asterix/xml-loader.d.ts +46 -0
  44. package/dist/surveillance/asterix/xml-loader.d.ts.map +1 -0
  45. package/dist/surveillance/index.d.ts +7 -0
  46. package/dist/surveillance/index.d.ts.map +1 -0
  47. package/dist/surveillance/mlat/index.d.ts +16 -0
  48. package/dist/surveillance/mlat/index.d.ts.map +1 -0
  49. package/package.json +40 -6
  50. package/src/config/asterix.dtd +78 -0
  51. package/src/config/asterix.ini +17 -0
  52. package/src/config/asterix_bds.xml +462 -0
  53. package/src/config/asterix_cat001_1_1.xml +872 -0
  54. package/src/config/asterix_cat001_1_2.xml +836 -0
  55. package/src/config/asterix_cat002_1_0.xml +258 -0
  56. package/src/config/asterix_cat004_1_12.xml +1713 -0
  57. package/src/config/asterix_cat008_1_0.xml +353 -0
  58. package/src/config/asterix_cat010_1_1.xml +791 -0
  59. package/src/config/asterix_cat011_1_2.xml +1691 -0
  60. package/src/config/asterix_cat019_1_2.xml +293 -0
  61. package/src/config/asterix_cat020_1_7.xml +1256 -0
  62. package/src/config/asterix_cat021_0_26.xml +902 -0
  63. package/src/config/asterix_cat021_1_4.xml +1594 -0
  64. package/src/config/asterix_cat021_1_8.xml +1594 -0
  65. package/src/config/asterix_cat021_2_4.xml +2191 -0
  66. package/src/config/asterix_cat023_1_2.xml +357 -0
  67. package/src/config/asterix_cat025_1_2.xml +306 -0
  68. package/src/config/asterix_cat030_6_2.xml +1387 -0
  69. package/src/config/asterix_cat031_6_2.xml +214 -0
  70. package/src/config/asterix_cat032_6_2.xml +465 -0
  71. package/src/config/asterix_cat032_7_0.xml +702 -0
  72. package/src/config/asterix_cat034_1_26.xml +586 -0
  73. package/src/config/asterix_cat034_1_27.xml +683 -0
  74. package/src/config/asterix_cat048_1_14.xml +1142 -0
  75. package/src/config/asterix_cat048_1_21.xml +1241 -0
  76. package/src/config/asterix_cat062_0_17.xml +1442 -0
  77. package/src/config/asterix_cat062_1_16.xml +3031 -0
  78. package/src/config/asterix_cat062_1_18.xml +3303 -0
  79. package/src/config/asterix_cat062_1_7.xml +2817 -0
  80. package/src/config/asterix_cat062_1_9.xml +737 -0
  81. package/src/config/asterix_cat063_1_3.xml +298 -0
  82. package/src/config/asterix_cat065_1_2.xml +168 -0
  83. package/src/config/asterix_cat065_1_3.xml +183 -0
  84. package/src/config/asterix_cat094_0_1.xml +1103 -0
  85. package/src/config/asterix_cat205_1_0.xml +385 -0
  86. package/src/config/asterix_cat240_1_3.xml +289 -0
  87. package/src/config/asterix_cat242_1_0.xml +644 -0
  88. package/src/config/asterix_cat247_1_2.xml +92 -0
  89. package/src/config/asterix_cat252_6_1.xml +1826 -0
  90. package/src/config/asterix_cat252_6_2.xml +1831 -0
  91. package/src/config/asterix_cat252_7_0.xml +1867 -0
  92. package/src/config/eurocontroll_version/asterix-spec.xsd +343 -0
  93. package/src/config/eurocontroll_version/asterix_cat094.xml +457 -0
@@ -0,0 +1,343 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!--
3
+ ===========================================================================
4
+ asterix-spec.xsd
5
+
6
+ A schema for describing an ASTERIX Category specification.
7
+
8
+ IMPORTANT: EUROCONTROL does NOT publish an official ASTERIX XML schema.
9
+ ASTERIX Categories are published only as free-text PDF documents
10
+ (SPEC-149 Part 1 + one Part per Category). There is therefore no
11
+ authoritative XSD to validate against.
12
+
13
+ This schema is modelled directly on the structural rules of
14
+ EUROCONTROL Specification for Surveillance Data Exchange, Part 1
15
+ (SPEC-149, Ed. 3.0): Data Block / Record / FSPEC / FRN / UAP /
16
+ Data Item, and the five standard Data Field formats
17
+ (Fixed, Extended, Repetitive, Compound, Explicit).
18
+
19
+ It is intentionally minimal: it constrains the ASTERIX *infrastructure*
20
+ and leaves item structure open so a Category under development can be
21
+ filled in incrementally.
22
+ ===========================================================================
23
+ -->
24
+ <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
25
+ xmlns="urn:local:asterix:spec:1.0"
26
+ xmlns:ast="urn:local:asterix:spec:1.0"
27
+ targetNamespace="urn:local:asterix:spec:1.0"
28
+ elementFormDefault="qualified"
29
+ attributeFormDefault="unqualified"
30
+ version="1.0">
31
+
32
+ <!-- =================== simple types =================== -->
33
+
34
+ <xs:simpleType name="CategoryNumber">
35
+ <xs:restriction base="xs:unsignedByte">
36
+ <xs:minInclusive value="0"/>
37
+ <xs:maxInclusive value="255"/>
38
+ </xs:restriction>
39
+ </xs:simpleType>
40
+
41
+ <xs:simpleType name="BitPosition">
42
+ <xs:restriction base="xs:positiveInteger">
43
+ <xs:minInclusive value="1"/>
44
+ <xs:maxInclusive value="8"/>
45
+ </xs:restriction>
46
+ </xs:simpleType>
47
+
48
+ <!-- Item reference, e.g. I094/010, or the two special fields RE / SP -->
49
+ <xs:simpleType name="ItemRef">
50
+ <xs:restriction base="xs:string">
51
+ <xs:pattern value="I[0-9]{3}/[0-9]{3}|RE|SP"/>
52
+ </xs:restriction>
53
+ </xs:simpleType>
54
+
55
+ <xs:simpleType name="CategoryStatus">
56
+ <xs:restriction base="xs:string">
57
+ <xs:enumeration value="working-draft"/>
58
+ <xs:enumeration value="released-issue"/>
59
+ <xs:enumeration value="released-standard"/>
60
+ </xs:restriction>
61
+ </xs:simpleType>
62
+
63
+ <xs:simpleType name="SlotStatus">
64
+ <xs:restriction base="xs:string">
65
+ <!-- item is fully specified in this file -->
66
+ <xs:enumeration value="defined"/>
67
+ <!-- FRN reserved, item structure still TODO -->
68
+ <xs:enumeration value="placeholder"/>
69
+ <!-- FRN not allocated; FSPEC bit shall be set to 0 -->
70
+ <xs:enumeration value="spare"/>
71
+ <!-- Reserved Expansion Field / Special Purpose Field -->
72
+ <xs:enumeration value="special"/>
73
+ </xs:restriction>
74
+ </xs:simpleType>
75
+
76
+ <xs:simpleType name="Presence">
77
+ <xs:restriction base="xs:string">
78
+ <xs:enumeration value="mandatory"/>
79
+ <xs:enumeration value="optional"/>
80
+ <xs:enumeration value="unknown"/>
81
+ </xs:restriction>
82
+ </xs:simpleType>
83
+
84
+ <xs:simpleType name="Encoding">
85
+ <xs:restriction base="xs:string">
86
+ <xs:enumeration value="unsigned"/>
87
+ <xs:enumeration value="signed"/> <!-- two's complement -->
88
+ <xs:enumeration value="octal"/>
89
+ <xs:enumeration value="hex"/>
90
+ <xs:enumeration value="ascii"/>
91
+ <xs:enumeration value="icao6bit"/> <!-- 6-bit char set, Annex 10 -->
92
+ <xs:enumeration value="boolean"/>
93
+ <xs:enumeration value="enumerated"/>
94
+ <xs:enumeration value="spare"/>
95
+ <xs:enumeration value="raw"/>
96
+ </xs:restriction>
97
+ </xs:simpleType>
98
+
99
+ <!-- =================== metadata =================== -->
100
+
101
+ <xs:complexType name="CategoryMetadataType">
102
+ <xs:sequence>
103
+ <xs:element name="CategoryNumber" type="CategoryNumber"/>
104
+ <xs:element name="Name" type="xs:string"/>
105
+ <xs:element name="Part" type="xs:positiveInteger" minOccurs="0"/>
106
+ <xs:element name="DataSource" type="xs:string" minOccurs="0"/>
107
+ <xs:element name="Purpose" type="xs:string" minOccurs="0"/>
108
+ <!-- SPEC-149 Part 1, 5.2.2: blocking of records into one Data Block -->
109
+ <xs:element name="BlockingAllowed" type="xs:boolean"/>
110
+ <xs:element name="Status" type="CategoryStatus"/>
111
+ <xs:element name="Note" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
112
+ </xs:sequence>
113
+ </xs:complexType>
114
+
115
+ <xs:complexType name="ReferenceDocumentType">
116
+ <xs:simpleContent>
117
+ <xs:extension base="xs:string">
118
+ <xs:attribute name="id" type="xs:string" use="required"/>
119
+ <xs:attribute name="href" type="xs:anyURI"/>
120
+ </xs:extension>
121
+ </xs:simpleContent>
122
+ </xs:complexType>
123
+
124
+ <xs:complexType name="ChangeType">
125
+ <xs:simpleContent>
126
+ <xs:extension base="xs:string">
127
+ <xs:attribute name="edition" type="xs:string" use="required"/>
128
+ <xs:attribute name="date" type="xs:date" use="required"/>
129
+ <xs:attribute name="author" type="xs:string"/>
130
+ </xs:extension>
131
+ </xs:simpleContent>
132
+ </xs:complexType>
133
+
134
+ <xs:complexType name="EditionMetadataType">
135
+ <xs:sequence>
136
+ <xs:element name="Edition" type="xs:string"/>
137
+ <xs:element name="Date" type="xs:date"/>
138
+ <xs:element name="ReferenceDocument" type="ReferenceDocumentType"
139
+ minOccurs="0" maxOccurs="unbounded"/>
140
+ <xs:element name="ChangeRecord" minOccurs="0">
141
+ <xs:complexType>
142
+ <xs:sequence>
143
+ <xs:element name="Change" type="ChangeType" maxOccurs="unbounded"/>
144
+ </xs:sequence>
145
+ </xs:complexType>
146
+ </xs:element>
147
+ </xs:sequence>
148
+ </xs:complexType>
149
+
150
+ <!-- =================== FSPEC =================== -->
151
+ <!--
152
+ SPEC-149 Part 1, 4.3: the FSPEC is a variable-length bitmap. Bits 8..2 of
153
+ each octet map to seven consecutive FRNs; bit 1 is the Field Extension
154
+ Indicator (FX). FX=1 means at least one further FSPEC octet follows.
155
+ -->
156
+ <xs:complexType name="FspecType">
157
+ <xs:sequence>
158
+ <xs:element name="Note" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
159
+ </xs:sequence>
160
+ <xs:attribute name="maxOctets" type="xs:positiveInteger" use="required"/>
161
+ <xs:attribute name="frnsPerOctet" type="xs:positiveInteger" default="7"/>
162
+ <xs:attribute name="extensionBit" type="BitPosition" default="1"/>
163
+ </xs:complexType>
164
+
165
+ <!-- =================== UAP =================== -->
166
+
167
+ <xs:complexType name="UapItemType">
168
+ <xs:sequence>
169
+ <xs:element name="Comment" type="xs:string" minOccurs="0"/>
170
+ </xs:sequence>
171
+ <xs:attribute name="frn" type="xs:positiveInteger" use="required"/>
172
+ <xs:attribute name="fspecOctet" type="xs:positiveInteger" use="required"/>
173
+ <xs:attribute name="fspecBit" type="BitPosition" use="required"/>
174
+ <xs:attribute name="itemRef" type="ItemRef"/>
175
+ <xs:attribute name="status" type="SlotStatus" use="required"/>
176
+ <xs:attribute name="presence" type="Presence" default="unknown"/>
177
+ <!-- length in octets, when known and fixed; omit for variable-length items -->
178
+ <xs:attribute name="octets" type="xs:positiveInteger"/>
179
+ </xs:complexType>
180
+
181
+ <xs:complexType name="UapType">
182
+ <xs:sequence>
183
+ <xs:element name="UapItem" type="UapItemType" maxOccurs="unbounded"/>
184
+ </xs:sequence>
185
+ <!-- SPEC-149 Part 1, 4.3.2: the UAP shall be unique per Category -->
186
+ <xs:attribute name="name" type="xs:string" default="default"/>
187
+ </xs:complexType>
188
+
189
+ <!-- =================== data field structures =================== -->
190
+
191
+ <xs:complexType name="ValueType">
192
+ <xs:simpleContent>
193
+ <xs:extension base="xs:string">
194
+ <xs:attribute name="val" type="xs:integer" use="required"/>
195
+ </xs:extension>
196
+ </xs:simpleContent>
197
+ </xs:complexType>
198
+
199
+ <xs:complexType name="FieldType">
200
+ <xs:sequence>
201
+ <xs:element name="Value" type="ValueType" minOccurs="0" maxOccurs="unbounded"/>
202
+ <xs:element name="Note" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
203
+ </xs:sequence>
204
+ <xs:attribute name="name" type="xs:string" use="required"/>
205
+ <xs:attribute name="longName" type="xs:string"/>
206
+ <!-- bit numbering is MSB-first within the data field, per SPEC-149 -->
207
+ <xs:attribute name="from" type="xs:positiveInteger" use="required"/>
208
+ <xs:attribute name="to" type="xs:positiveInteger" use="required"/>
209
+ <xs:attribute name="encoding" type="Encoding" default="unsigned"/>
210
+ <xs:attribute name="lsb" type="xs:double"/>
211
+ <xs:attribute name="unit" type="xs:string"/>
212
+ <xs:attribute name="fx" type="xs:boolean" default="false"/>
213
+ </xs:complexType>
214
+
215
+ <xs:complexType name="FixedType">
216
+ <xs:sequence>
217
+ <xs:element name="Field" type="FieldType" maxOccurs="unbounded"/>
218
+ </xs:sequence>
219
+ <xs:attribute name="octets" type="xs:positiveInteger" use="required"/>
220
+ </xs:complexType>
221
+
222
+ <!-- Extended = variable length with FX-terminated extents -->
223
+ <xs:complexType name="ExtendedType">
224
+ <xs:sequence>
225
+ <xs:element name="Extent" type="FixedType" maxOccurs="unbounded"/>
226
+ </xs:sequence>
227
+ </xs:complexType>
228
+
229
+ <!-- Repetitive = REP counter octet followed by N identical extents -->
230
+ <xs:complexType name="RepetitiveType">
231
+ <xs:sequence>
232
+ <xs:element name="Extent" type="FixedType"/>
233
+ </xs:sequence>
234
+ <xs:attribute name="repOctets" type="xs:positiveInteger" default="1"/>
235
+ </xs:complexType>
236
+
237
+ <!-- Compound = primary subfield bitmap + present subfields, in order -->
238
+ <xs:complexType name="SubfieldType">
239
+ <xs:sequence>
240
+ <xs:choice minOccurs="0">
241
+ <xs:element name="Fixed" type="FixedType"/>
242
+ <xs:element name="Extended" type="ExtendedType"/>
243
+ <xs:element name="Repetitive" type="RepetitiveType"/>
244
+ <xs:element name="Explicit" type="ExplicitType"/>
245
+ <xs:element name="Undefined" type="UndefinedType"/>
246
+ </xs:choice>
247
+ </xs:sequence>
248
+ <xs:attribute name="index" type="xs:positiveInteger" use="required"/>
249
+ <xs:attribute name="name" type="xs:string" use="required"/>
250
+ <xs:attribute name="longName" type="xs:string"/>
251
+ </xs:complexType>
252
+
253
+ <xs:complexType name="CompoundType">
254
+ <xs:sequence>
255
+ <xs:element name="PrimarySubfield" type="ExtendedType"/>
256
+ <xs:element name="Subfield" type="SubfieldType" maxOccurs="unbounded"/>
257
+ </xs:sequence>
258
+ </xs:complexType>
259
+
260
+ <!-- Explicit = one length octet, then opaque contents -->
261
+ <xs:complexType name="ExplicitType">
262
+ <xs:sequence>
263
+ <xs:element name="Note" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
264
+ </xs:sequence>
265
+ <xs:attribute name="lengthOctets" type="xs:positiveInteger" default="1"/>
266
+ </xs:complexType>
267
+
268
+ <!--
269
+ Undefined = the item is allocated but its structure is not yet known.
270
+ A decoder MUST refuse to parse a record whose FSPEC sets an Undefined
271
+ item, because item lengths in ASTERIX are not self-describing and the
272
+ parse would desynchronise.
273
+ -->
274
+ <xs:complexType name="UndefinedType">
275
+ <xs:sequence>
276
+ <xs:element name="Todo" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
277
+ </xs:sequence>
278
+ <xs:attribute name="reason" type="xs:string"/>
279
+ </xs:complexType>
280
+
281
+ <xs:complexType name="StructureType">
282
+ <xs:choice>
283
+ <xs:element name="Fixed" type="FixedType"/>
284
+ <xs:element name="Extended" type="ExtendedType"/>
285
+ <xs:element name="Repetitive" type="RepetitiveType"/>
286
+ <xs:element name="Compound" type="CompoundType"/>
287
+ <xs:element name="Explicit" type="ExplicitType"/>
288
+ <xs:element name="Undefined" type="UndefinedType"/>
289
+ </xs:choice>
290
+ </xs:complexType>
291
+
292
+ <!-- =================== data items =================== -->
293
+
294
+ <xs:complexType name="DataItemType">
295
+ <xs:sequence>
296
+ <xs:element name="Name" type="xs:string"/>
297
+ <xs:element name="Definition" type="xs:string" minOccurs="0"/>
298
+ <xs:element name="Format" type="xs:string" minOccurs="0"/>
299
+ <xs:element name="Structure" type="StructureType"/>
300
+ <xs:element name="EncodingRule" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
301
+ <xs:element name="Note" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
302
+ </xs:sequence>
303
+ <xs:attribute name="ref" type="ItemRef" use="required"/>
304
+ <xs:attribute name="presence" type="Presence" default="unknown"/>
305
+ <xs:attribute name="status" type="SlotStatus" use="required"/>
306
+ </xs:complexType>
307
+
308
+ <xs:complexType name="DataItemsType">
309
+ <xs:sequence>
310
+ <xs:element name="DataItem" type="DataItemType" maxOccurs="unbounded"/>
311
+ </xs:sequence>
312
+ </xs:complexType>
313
+
314
+ <!-- =================== document root =================== -->
315
+
316
+ <xs:element name="AsterixCategory">
317
+ <xs:complexType>
318
+ <xs:sequence>
319
+ <xs:element name="CategoryMetadata" type="CategoryMetadataType"/>
320
+ <xs:element name="EditionMetadata" type="EditionMetadataType"/>
321
+ <xs:element name="Fspec" type="FspecType"/>
322
+ <xs:element name="UAP" type="UapType"/>
323
+ <xs:element name="DataItems" type="DataItemsType"/>
324
+ </xs:sequence>
325
+ </xs:complexType>
326
+
327
+ <!-- every UAP slot that names an item must resolve to a DataItem -->
328
+ <xs:key name="DataItemKey">
329
+ <xs:selector xpath="ast:DataItems/ast:DataItem"/>
330
+ <xs:field xpath="@ref"/>
331
+ </xs:key>
332
+ <xs:keyref name="UapItemRef" refer="DataItemKey">
333
+ <xs:selector xpath="ast:UAP/ast:UapItem"/>
334
+ <xs:field xpath="@itemRef"/>
335
+ </xs:keyref>
336
+ <!-- FRNs must be unique within the UAP -->
337
+ <xs:unique name="UniqueFrn">
338
+ <xs:selector xpath="ast:UAP/ast:UapItem"/>
339
+ <xs:field xpath="@frn"/>
340
+ </xs:unique>
341
+ </xs:element>
342
+
343
+ </xs:schema>