@packet-net/pdn-aprs 0.0.1

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 (120) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/LICENSE +661 -0
  3. package/README.md +192 -0
  4. package/THIRD-PARTY-NOTICES.md +5 -0
  5. package/dist/builder.d.ts +232 -0
  6. package/dist/builder.d.ts.map +1 -0
  7. package/dist/builder.js +508 -0
  8. package/dist/builder.js.map +1 -0
  9. package/dist/bytes.d.ts +19 -0
  10. package/dist/bytes.d.ts.map +1 -0
  11. package/dist/bytes.js +120 -0
  12. package/dist/bytes.js.map +1 -0
  13. package/dist/codes.d.ts +13 -0
  14. package/dist/codes.d.ts.map +1 -0
  15. package/dist/codes.js +112 -0
  16. package/dist/codes.js.map +1 -0
  17. package/dist/decode/context.d.ts +33 -0
  18. package/dist/decode/context.d.ts.map +1 -0
  19. package/dist/decode/context.js +65 -0
  20. package/dist/decode/context.js.map +1 -0
  21. package/dist/decode/index.d.ts +10 -0
  22. package/dist/decode/index.d.ts.map +1 -0
  23. package/dist/decode/index.js +121 -0
  24. package/dist/decode/index.js.map +1 -0
  25. package/dist/decode/message.d.ts +5 -0
  26. package/dist/decode/message.d.ts.map +1 -0
  27. package/dist/decode/message.js +190 -0
  28. package/dist/decode/message.js.map +1 -0
  29. package/dist/decode/other.d.ts +25 -0
  30. package/dist/decode/other.d.ts.map +1 -0
  31. package/dist/decode/other.js +326 -0
  32. package/dist/decode/other.js.map +1 -0
  33. package/dist/decode/positioned.d.ts +132 -0
  34. package/dist/decode/positioned.d.ts.map +1 -0
  35. package/dist/decode/positioned.js +1063 -0
  36. package/dist/decode/positioned.js.map +1 -0
  37. package/dist/decode/reports.d.ts +13 -0
  38. package/dist/decode/reports.d.ts.map +1 -0
  39. package/dist/decode/reports.js +375 -0
  40. package/dist/decode/reports.js.map +1 -0
  41. package/dist/decoder.d.ts +23 -0
  42. package/dist/decoder.d.ts.map +1 -0
  43. package/dist/decoder.js +75 -0
  44. package/dist/decoder.js.map +1 -0
  45. package/dist/deviceid-data.d.ts +33 -0
  46. package/dist/deviceid-data.d.ts.map +1 -0
  47. package/dist/deviceid-data.js +2941 -0
  48. package/dist/deviceid-data.js.map +1 -0
  49. package/dist/deviceid.d.ts +12 -0
  50. package/dist/deviceid.d.ts.map +1 -0
  51. package/dist/deviceid.js +86 -0
  52. package/dist/deviceid.js.map +1 -0
  53. package/dist/diagnostics.d.ts +48 -0
  54. package/dist/diagnostics.d.ts.map +1 -0
  55. package/dist/diagnostics.js +65 -0
  56. package/dist/diagnostics.js.map +1 -0
  57. package/dist/encode/common.d.ts +19 -0
  58. package/dist/encode/common.d.ts.map +1 -0
  59. package/dist/encode/common.js +84 -0
  60. package/dist/encode/common.js.map +1 -0
  61. package/dist/encode/index.d.ts +35 -0
  62. package/dist/encode/index.d.ts.map +1 -0
  63. package/dist/encode/index.js +248 -0
  64. package/dist/encode/index.js.map +1 -0
  65. package/dist/encode/other.d.ts +21 -0
  66. package/dist/encode/other.d.ts.map +1 -0
  67. package/dist/encode/other.js +253 -0
  68. package/dist/encode/other.js.map +1 -0
  69. package/dist/encode/position.d.ts +31 -0
  70. package/dist/encode/position.d.ts.map +1 -0
  71. package/dist/encode/position.js +729 -0
  72. package/dist/encode/position.js.map +1 -0
  73. package/dist/header.d.ts +42 -0
  74. package/dist/header.d.ts.map +1 -0
  75. package/dist/header.js +206 -0
  76. package/dist/header.js.map +1 -0
  77. package/dist/index.d.ts +13 -0
  78. package/dist/index.d.ts.map +1 -0
  79. package/dist/index.js +14 -0
  80. package/dist/index.js.map +1 -0
  81. package/dist/neutral.d.ts +22 -0
  82. package/dist/neutral.d.ts.map +1 -0
  83. package/dist/neutral.js +593 -0
  84. package/dist/neutral.js.map +1 -0
  85. package/dist/symbols-data.d.ts +832 -0
  86. package/dist/symbols-data.d.ts.map +1 -0
  87. package/dist/symbols-data.js +173 -0
  88. package/dist/symbols-data.js.map +1 -0
  89. package/dist/symbols.d.ts +35 -0
  90. package/dist/symbols.d.ts.map +1 -0
  91. package/dist/symbols.js +71 -0
  92. package/dist/symbols.js.map +1 -0
  93. package/dist/types.d.ts +458 -0
  94. package/dist/types.d.ts.map +1 -0
  95. package/dist/types.js +4 -0
  96. package/dist/types.js.map +1 -0
  97. package/package.json +68 -0
  98. package/src/builder.ts +617 -0
  99. package/src/bytes.ts +118 -0
  100. package/src/codes.ts +218 -0
  101. package/src/decode/context.ts +63 -0
  102. package/src/decode/index.ts +135 -0
  103. package/src/decode/message.ts +194 -0
  104. package/src/decode/other.ts +307 -0
  105. package/src/decode/positioned.ts +1161 -0
  106. package/src/decode/reports.ts +378 -0
  107. package/src/decoder.ts +76 -0
  108. package/src/deviceid-data.ts +2954 -0
  109. package/src/deviceid.ts +83 -0
  110. package/src/diagnostics.ts +86 -0
  111. package/src/encode/common.ts +87 -0
  112. package/src/encode/index.ts +280 -0
  113. package/src/encode/other.ts +247 -0
  114. package/src/encode/position.ts +656 -0
  115. package/src/header.ts +221 -0
  116. package/src/index.ts +57 -0
  117. package/src/neutral.ts +595 -0
  118. package/src/symbols-data.ts +181 -0
  119. package/src/symbols.ts +85 -0
  120. package/src/types.ts +571 -0
@@ -0,0 +1,248 @@
1
+ // The encoder: writes only what the spec allows and refuses anything else with a reason. Free
2
+ // text is checked by decoding what was written: if the result does not read back as the same
3
+ // data (a comment that would read as an altitude, say), a `/` delimiter is tried, and if that
4
+ // does not help either the encoder refuses.
5
+ import { binaryToBytes, bytesToBinary, decodeUtf8 } from '../bytes.js';
6
+ import { decodeInformation } from '../decode/index.js';
7
+ import { formatDiagnostic, ParseOptions } from '../diagnostics.js';
8
+ import { isAprsIsAddress } from '../header.js';
9
+ import { toNeutralData } from '../neutral.js';
10
+ import { AprsEncodeError, refuse } from './common.js';
11
+ import { encodeAck, encodeAgrelo, encodeBulletin, encodeCapabilities, encodeDirectedQuery, encodeMaidenhead, encodeMessage, encodeNmea, encodeQuery, encodeRawWeather, encodeStatus, encodeTelemetryBits, encodeTelemetryCoefficients, encodeTelemetryNames, encodeTelemetryReport, encodeTest, encodeThirdParty, encodeUserDefined, } from './other.js';
12
+ import { encodeItem, encodeMicE, encodeObject, encodePositionReport, encodeWeatherReport } from './position.js';
13
+ export { AprsEncodeError } from './common.js';
14
+ function withCompression(b) {
15
+ return b.compression ? { binary: b.text, compression: b.compression } : { binary: b.text };
16
+ }
17
+ function attempt(data, mode) {
18
+ switch (data.type) {
19
+ case 'position':
20
+ return withCompression(encodePositionReport(data, mode));
21
+ case 'object':
22
+ return withCompression(encodeObject(data, mode));
23
+ case 'item':
24
+ return withCompression(encodeItem(data, mode));
25
+ case 'mic-e': {
26
+ const m = encodeMicE(data, mode);
27
+ return { binary: m.text, destination: m.destination };
28
+ }
29
+ case 'weather':
30
+ return { binary: encodeWeatherReport(data) };
31
+ case 'message':
32
+ return { binary: encodeMessage(data) };
33
+ case 'ack':
34
+ case 'reject':
35
+ return { binary: encodeAck(data) };
36
+ case 'bulletin':
37
+ case 'nws-bulletin':
38
+ return { binary: encodeBulletin(data) };
39
+ case 'telemetry-names':
40
+ case 'telemetry-units':
41
+ return { binary: encodeTelemetryNames(data) };
42
+ case 'telemetry-coefficients':
43
+ return { binary: encodeTelemetryCoefficients(data) };
44
+ case 'telemetry-bits':
45
+ return { binary: encodeTelemetryBits(data) };
46
+ case 'directed-query':
47
+ return { binary: encodeDirectedQuery(data) };
48
+ case 'status':
49
+ return { binary: encodeStatus(data) };
50
+ case 'telemetry':
51
+ return { binary: encodeTelemetryReport(data) };
52
+ case 'raw-weather':
53
+ return { binary: encodeRawWeather(data) };
54
+ case 'nmea':
55
+ return { binary: encodeNmea(data) };
56
+ case 'maidenhead-beacon':
57
+ return { binary: encodeMaidenhead(data) };
58
+ case 'query':
59
+ return { binary: encodeQuery(data) };
60
+ case 'capabilities':
61
+ return { binary: encodeCapabilities(data) };
62
+ case 'third-party': {
63
+ // The original information field must not be changed (APRS12c ch. 17).
64
+ const original = data.packet.information;
65
+ const inner = original.length > 0 ? original : encodeInformation(data.packet.data).info;
66
+ return { binary: encodeThirdParty(data, bytesToBinary(inner)) };
67
+ }
68
+ case 'user-defined':
69
+ return { binary: encodeUserDefined(data) };
70
+ case 'test':
71
+ return { binary: encodeTest(data) };
72
+ case 'agrelo-df':
73
+ return { binary: encodeAgrelo(data) };
74
+ case 'unrecognized':
75
+ return refuse('unrecognized data has nothing to encode');
76
+ }
77
+ }
78
+ /** Where the written data would read back differently: strings, booleans and which fields are present. */
79
+ function shapeDifferences(a, b, path, out) {
80
+ if (typeof a === 'number' && typeof b === 'number')
81
+ return;
82
+ if (Array.isArray(a) && Array.isArray(b)) {
83
+ if (a.length !== b.length)
84
+ out.push(`${path.replace(/\.$/, '')} would have ${a.length} items, not ${b.length}`);
85
+ else
86
+ a.forEach((x, i) => shapeDifferences(x, b[i], `${path}${i}.`, out));
87
+ return;
88
+ }
89
+ if (a !== null && b !== null && typeof a === 'object' && typeof b === 'object') {
90
+ const ao = a;
91
+ const bo = b;
92
+ for (const k of new Set([...Object.keys(ao), ...Object.keys(bo)])) {
93
+ if (!(k in ao))
94
+ out.push(`${path}${k} would be lost`);
95
+ else if (!(k in bo))
96
+ out.push(`${path}${k} would appear`);
97
+ else
98
+ shapeDifferences(ao[k], bo[k], `${path}${k}.`, out);
99
+ }
100
+ return;
101
+ }
102
+ if (a !== b)
103
+ out.push(`${path.replace(/\.$/, '')} would read back as ${JSON.stringify(a)}`);
104
+ }
105
+ /** The data as it should read back: what the encoder fills in that the input may leave out. */
106
+ function expected(data, a) {
107
+ let d = data;
108
+ if ((d.type === 'position' || d.type === 'object' || d.type === 'item') && d.compressed && a.compression) {
109
+ if (!d.compression)
110
+ d = { ...d, compression: a.compression };
111
+ if (d.courseDegrees !== undefined && d.speedKnots === undefined)
112
+ d = { ...d, speedKnots: 0 };
113
+ }
114
+ if (d.type === 'mic-e') {
115
+ if (d.speedKnots === undefined)
116
+ d = { ...d, speedKnots: 0 };
117
+ if (d.courseDegrees === 0) {
118
+ const copy = { ...d };
119
+ delete copy.courseDegrees;
120
+ d = copy;
121
+ }
122
+ }
123
+ return d;
124
+ }
125
+ function check(data, a) {
126
+ const decoded = decodeInformation(binaryToBytes(a.binary), a.destination ?? 'APZ001', ParseOptions.lenient);
127
+ const problems = [];
128
+ const bad = decoded.diagnostics.filter((d) => d.severity !== 'info');
129
+ if (bad.length > 0)
130
+ problems.push(`it would read back with ${bad.map(formatDiagnostic).join(', ')}`);
131
+ if (decoded.data.type !== data.type) {
132
+ problems.push(`it would read back as ${decoded.data.type}`);
133
+ return problems;
134
+ }
135
+ shapeDifferences(toNeutralData(decoded.data), toNeutralData(expected(data, a)), '', problems);
136
+ return problems;
137
+ }
138
+ /**
139
+ * Encodes data as an information field. Mic-E also gives the destination address it computed.
140
+ * Throws `AprsEncodeError`, with the reason, for anything the spec does not allow.
141
+ */
142
+ export function encodeInformation(data) {
143
+ const first = attempt(data, 'plain');
144
+ let problems = check(data, first);
145
+ let chosen = first;
146
+ if (problems.length > 0 && typeof data.comment === 'string') {
147
+ // The comment would read as something else: try it straight after a frequency, then after a /.
148
+ for (const mode of ['joined', 'delimited']) {
149
+ let next;
150
+ try {
151
+ next = attempt(data, mode);
152
+ }
153
+ catch (e) {
154
+ if (!(e instanceof AprsEncodeError))
155
+ throw e;
156
+ }
157
+ if (next && next.binary !== first.binary && check(data, next).length === 0) {
158
+ chosen = next;
159
+ problems = [];
160
+ break;
161
+ }
162
+ }
163
+ }
164
+ if (problems.length > 0)
165
+ refuse(`it would not read back the same: ${problems.join('; ')}`);
166
+ const out = { info: binaryToBytes(chosen.binary) };
167
+ if (chosen.destination !== undefined)
168
+ out.destination = chosen.destination;
169
+ return out;
170
+ }
171
+ function pathText(entry) {
172
+ return typeof entry === 'string' ? entry : entry.used ? `${entry.address}*` : entry.address;
173
+ }
174
+ function resolve(p) {
175
+ const encoded = encodeInformation(p.data);
176
+ const destination = encoded.destination ?? p.destination ?? 'APZ001';
177
+ return { destination, info: encoded.info, path: (p.path ?? []).map(pathText) };
178
+ }
179
+ /** Encodes a packet as the bytes of a TNC2 / APRS-IS line (the information field as sent). */
180
+ export function encodeTnc2Bytes(p) {
181
+ const r = resolve(p);
182
+ if (!isAprsIsAddress(p.source))
183
+ refuse(`the source ${JSON.stringify(p.source)} is not a valid address`);
184
+ if (!isAprsIsAddress(r.destination))
185
+ refuse(`the destination ${JSON.stringify(r.destination)} is not a valid address`);
186
+ for (const e of r.path)
187
+ if (!isAprsIsAddress(e.replace(/\*$/, '')))
188
+ refuse(`the path entry ${JSON.stringify(e)} is not a valid address`);
189
+ const header = [`${p.source}>${r.destination}`, ...r.path].join(',') + ':';
190
+ const out = new Uint8Array(header.length + r.info.length);
191
+ out.set(binaryToBytes(header), 0);
192
+ out.set(r.info, header.length);
193
+ return out;
194
+ }
195
+ /**
196
+ * Encodes a packet as a TNC2 / APRS-IS line of text. User-defined data that is not UTF-8 has no
197
+ * text form; use `encodeTnc2Bytes` for that.
198
+ */
199
+ export function encodeTnc2(p) {
200
+ const text = decodeUtf8(encodeTnc2Bytes(p));
201
+ if (text === undefined)
202
+ refuse('the information field is not UTF-8 text; use encodeTnc2Bytes');
203
+ return text;
204
+ }
205
+ function ax25Address(text, last, flag) {
206
+ const m = /^([A-Z0-9]{1,6})(?:-([0-9]{1,2}))?$/.exec(text);
207
+ if (!m)
208
+ refuse(`${JSON.stringify(text)} is not an AX.25 address`);
209
+ const ssid = m[2] === undefined ? 0 : Number(m[2]);
210
+ if (ssid > 15)
211
+ refuse(`${JSON.stringify(text)} has an SSID over 15`);
212
+ const call = m[1].padEnd(6, ' ');
213
+ const out = Array.from(call, (c) => c.charCodeAt(0) << 1);
214
+ out.push(0x60 | (ssid << 1) | (flag ? 0x80 : 0) | (last ? 1 : 0));
215
+ return out;
216
+ }
217
+ /** Encodes a packet as an AX.25 UI frame in KISS form (no flags, no FCS). */
218
+ export function encodeAx25(p) {
219
+ const r = resolve(p);
220
+ const path = p.path ?? [];
221
+ if (path.length > 8)
222
+ refuse('AX.25 allows at most 8 digipeaters');
223
+ const bytes = [];
224
+ bytes.push(...ax25Address(r.destination, false, true));
225
+ bytes.push(...ax25Address(p.source, path.length === 0, false));
226
+ path.forEach((e, i) => {
227
+ const address = typeof e === 'string' ? e.replace(/\*$/, '') : e.address;
228
+ const used = typeof e === 'string' ? e.endsWith('*') : e.used;
229
+ bytes.push(...ax25Address(address, i === path.length - 1, used));
230
+ });
231
+ bytes.push(0x03, 0xf0, ...r.info);
232
+ return Uint8Array.from(bytes);
233
+ }
234
+ /** Wraps an AX.25 frame for a KISS TNC: FEND, a data command on `port`, escaping, FEND. */
235
+ export function wrapKiss(frame, port = 0) {
236
+ const out = [0xc0, (port & 0x0f) << 4];
237
+ for (const b of frame) {
238
+ if (b === 0xc0)
239
+ out.push(0xdb, 0xdc);
240
+ else if (b === 0xdb)
241
+ out.push(0xdb, 0xdd);
242
+ else
243
+ out.push(b);
244
+ }
245
+ out.push(0xc0);
246
+ return Uint8Array.from(out);
247
+ }
248
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/encode/index.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,6FAA6F;AAC7F,8FAA8F;AAC9F,4CAA4C;AAE5C,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EACL,SAAS,EACT,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,aAAa,EACb,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,mBAAmB,EACnB,2BAA2B,EAC3B,oBAAoB,EACpB,qBAAqB,EACrB,UAAU,EACV,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,oBAAoB,EAAE,mBAAmB,EAAoB,MAAM,eAAe,CAAC;AAElI,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAgB9C,SAAS,eAAe,CAAC,CAAkD;IACzE,OAAO,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AAC7F,CAAC;AAED,SAAS,OAAO,CAAC,IAAc,EAAE,IAAiB;IAChD,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,UAAU;YACb,OAAO,eAAe,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QAC3D,KAAK,QAAQ;YACX,OAAO,eAAe,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QACnD,KAAK,MAAM;YACT,OAAO,eAAe,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QACjD,KAAK,OAAO,EAAE,CAAC;YACb,MAAM,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACjC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QACxD,CAAC;QACD,KAAK,SAAS;YACZ,OAAO,EAAE,MAAM,EAAE,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/C,KAAK,SAAS;YACZ,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,KAAK,KAAK,CAAC;QACX,KAAK,QAAQ;YACX,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,KAAK,UAAU,CAAC;QAChB,KAAK,cAAc;YACjB,OAAO,EAAE,MAAM,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1C,KAAK,iBAAiB,CAAC;QACvB,KAAK,iBAAiB;YACpB,OAAO,EAAE,MAAM,EAAE,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;QAChD,KAAK,wBAAwB;YAC3B,OAAO,EAAE,MAAM,EAAE,2BAA2B,CAAC,IAAI,CAAC,EAAE,CAAC;QACvD,KAAK,gBAAgB;YACnB,OAAO,EAAE,MAAM,EAAE,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/C,KAAK,gBAAgB;YACnB,OAAO,EAAE,MAAM,EAAE,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/C,KAAK,QAAQ;YACX,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,KAAK,WAAW;YACd,OAAO,EAAE,MAAM,EAAE,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;QACjD,KAAK,aAAa;YAChB,OAAO,EAAE,MAAM,EAAE,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5C,KAAK,MAAM;YACT,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,KAAK,mBAAmB;YACtB,OAAO,EAAE,MAAM,EAAE,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5C,KAAK,OAAO;YACV,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,KAAK,cAAc;YACjB,OAAO,EAAE,MAAM,EAAE,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9C,KAAK,aAAa,EAAE,CAAC;YACnB,uEAAuE;YACvE,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;YACzC,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;YACxF,OAAO,EAAE,MAAM,EAAE,gBAAgB,CAAC,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QAClE,CAAC;QACD,KAAK,cAAc;YACjB,OAAO,EAAE,MAAM,EAAE,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7C,KAAK,MAAM;YACT,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtC,KAAK,WAAW;YACd,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,KAAK,cAAc;YACjB,OAAO,MAAM,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC;AAED,0GAA0G;AAC1G,SAAS,gBAAgB,CAAC,CAAU,EAAE,CAAU,EAAE,IAAY,EAAE,GAAa;IAC3E,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO;IAC3D,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;YAAE,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,MAAM,eAAe,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;;YAC3G,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QACzE,OAAO;IACT,CAAC;IACD,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;QAC/E,MAAM,EAAE,GAAG,CAA4B,CAAC;QACxC,MAAM,EAAE,GAAG,CAA4B,CAAC;QACxC,KAAK,MAAM,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClE,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC;iBACjD,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAAE,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC;;gBACrD,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC3D,CAAC;QACD,OAAO;IACT,CAAC;IACD,IAAI,CAAC,KAAK,CAAC;QAAE,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,uBAAuB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAC9F,CAAC;AAED,+FAA+F;AAC/F,SAAS,QAAQ,CAAC,IAAc,EAAE,CAAU;IAC1C,IAAI,CAAC,GAAG,IAAI,CAAC;IACb,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;QACzG,IAAI,CAAC,CAAC,CAAC,WAAW;YAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QAC7D,IAAI,CAAC,CAAC,aAAa,KAAK,SAAS,IAAI,CAAC,CAAC,UAAU,KAAK,SAAS;YAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;IAC/F,CAAC;IACD,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QACvB,IAAI,CAAC,CAAC,UAAU,KAAK,SAAS;YAAE,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;QAC5D,IAAI,CAAC,CAAC,aAAa,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,GAA4B,EAAE,GAAG,CAAC,EAAE,CAAC;YAC/C,OAAO,IAAI,CAAC,aAAa,CAAC;YAC1B,CAAC,GAAG,IAA2B,CAAC;QAClC,CAAC;IACH,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,KAAK,CAAC,IAAc,EAAE,CAAU;IACvC,MAAM,OAAO,GAAG,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,WAAW,IAAI,QAAQ,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;IAC5G,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC;IACrE,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC;QAAE,QAAQ,CAAC,IAAI,CAAC,2BAA2B,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrG,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;QACpC,QAAQ,CAAC,IAAI,CAAC,yBAAyB,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5D,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,gBAAgB,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC9F,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAc;IAC9C,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACrC,IAAI,QAAQ,GAAG,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAClC,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,OAAQ,IAA8B,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACvF,+FAA+F;QAC/F,KAAK,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAU,EAAE,CAAC;YACpD,IAAI,IAAyB,CAAC;YAC9B,IAAI,CAAC;gBACH,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAC7B,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,IAAI,CAAC,CAAC,CAAC,YAAY,eAAe,CAAC;oBAAE,MAAM,CAAC,CAAC;YAC/C,CAAC;YACD,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3E,MAAM,GAAG,IAAI,CAAC;gBACd,QAAQ,GAAG,EAAE,CAAC;gBACd,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,CAAC,oCAAoC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3F,MAAM,GAAG,GAAuB,EAAE,IAAI,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;IACvE,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS;QAAE,GAAG,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;IAC3E,OAAO,GAAG,CAAC;AACb,CAAC;AAYD,SAAS,QAAQ,CAAC,KAAyB;IACzC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;AAC9F,CAAC;AAED,SAAS,OAAO,CAAC,CAAiB;IAChC,MAAM,OAAO,GAAG,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC1C,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC,WAAW,IAAI,QAAQ,CAAC;IACrE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;AACjF,CAAC;AAED,8FAA8F;AAC9F,MAAM,UAAU,eAAe,CAAC,CAAiB;IAC/C,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACrB,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC;QAAE,MAAM,CAAC,cAAc,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC;IACxG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,WAAW,CAAC;QAAE,MAAM,CAAC,mBAAmB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,yBAAyB,CAAC,CAAC;IACvH,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI;QAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAAE,MAAM,CAAC,kBAAkB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC;IACzI,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IAC3E,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1D,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAClC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/B,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,CAAiB;IAC1C,MAAM,IAAI,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,IAAI,IAAI,KAAK,SAAS;QAAE,MAAM,CAAC,8DAA8D,CAAC,CAAC;IAC/F,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,WAAW,CAAC,IAAY,EAAE,IAAa,EAAE,IAAa;IAC7D,MAAM,CAAC,GAAG,qCAAqC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3D,IAAI,CAAC,CAAC;QAAE,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IAClE,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,IAAI,IAAI,GAAG,EAAE;QAAE,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACrE,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAClC,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1D,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClE,OAAO,GAAG,CAAC;AACb,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,UAAU,CAAC,CAAiB;IAC1C,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACrB,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;IAC1B,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,CAAC,oCAAoC,CAAC,CAAC;IAClE,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;IACvD,KAAK,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IAC/D,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACpB,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QACzE,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9D,KAAK,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,OAAO,EAAE,CAAC,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IACH,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IAClC,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAChC,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,QAAQ,CAAC,KAAiB,EAAE,IAAI,GAAG,CAAC;IAClD,MAAM,GAAG,GAAa,CAAC,IAAI,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACjD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,KAAK,IAAI;YAAE,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;aAChC,IAAI,CAAC,KAAK,IAAI;YAAE,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;;YACrC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IACD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC9B,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { Ack, AgreloDf, Bulletin, Capabilities, DirectedQuery, MaidenheadBeacon, Message, NmeaSentence, NwsBulletin, Query, RawWeather, Reject, StatusReport, TelemetryBits, TelemetryCoefficients, TelemetryNames, TelemetryReport, TelemetryUnits, TestData, ThirdParty, UserDefined } from '../types.js';
2
+ export declare function encodeMessage(d: Message): string;
3
+ export declare function encodeAck(d: Ack | Reject): string;
4
+ export declare function encodeBulletin(d: Bulletin | NwsBulletin): string;
5
+ export declare function encodeTelemetryNames(d: TelemetryNames | TelemetryUnits): string;
6
+ export declare function encodeTelemetryCoefficients(d: TelemetryCoefficients): string;
7
+ export declare function encodeTelemetryBits(d: TelemetryBits): string;
8
+ export declare function encodeDirectedQuery(d: DirectedQuery): string;
9
+ export declare function encodeStatus(d: StatusReport): string;
10
+ export declare function encodeTelemetryReport(d: TelemetryReport): string;
11
+ export declare function encodeRawWeather(d: RawWeather): string;
12
+ export declare function encodeNmea(d: NmeaSentence): string;
13
+ export declare function encodeMaidenhead(d: MaidenheadBeacon): string;
14
+ export declare function encodeQuery(d: Query): string;
15
+ export declare function encodeCapabilities(d: Capabilities): string;
16
+ export declare function encodeUserDefined(d: UserDefined): string;
17
+ export declare function encodeTest(d: TestData): string;
18
+ export declare function encodeAgrelo(d: AgreloDf): string;
19
+ /** The third-party header and the encapsulated packet's information field. */
20
+ export declare function encodeThirdParty(d: ThirdParty, innerInfo: string): string;
21
+ //# sourceMappingURL=other.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"other.d.ts","sourceRoot":"","sources":["../../src/encode/other.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,GAAG,EACH,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,OAAO,EACP,YAAY,EACZ,WAAW,EACX,KAAK,EACL,UAAU,EACV,MAAM,EACN,YAAY,EACZ,aAAa,EACb,qBAAqB,EACrB,cAAc,EACd,eAAe,EACf,cAAc,EACd,QAAQ,EACR,UAAU,EACV,WAAW,EACZ,MAAM,aAAa,CAAC;AA6BrB,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAEhD;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,GAAG,MAAM,CAUjD;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,MAAM,CAUhE;AAOD,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,cAAc,GAAG,cAAc,GAAG,MAAM,CAQ/E;AAED,wBAAgB,2BAA2B,CAAC,CAAC,EAAE,qBAAqB,GAAG,MAAM,CAQ5E;AAED,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,aAAa,GAAG,MAAM,CAS5D;AAED,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,aAAa,GAAG,MAAM,CAQ5D;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,YAAY,GAAG,MAAM,CA0BpD;AAED,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,eAAe,GAAG,MAAM,CAahE;AASD,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM,CAItD;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,YAAY,GAAG,MAAM,CAKlD;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAG5D;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,GAAG,MAAM,CAU5C;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,YAAY,GAAG,MAAM,CAW1D;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,WAAW,GAAG,MAAM,CAMxD;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,QAAQ,GAAG,MAAM,CAE9C;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,QAAQ,GAAG,MAAM,CAEhD;AAED,8EAA8E;AAC9E,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAKzE"}
@@ -0,0 +1,253 @@
1
+ // Encoding everything that is not a position: messages and what is sent in message form, status,
2
+ // telemetry, queries, capabilities, and the rest.
3
+ import { encodeUtf8Binary } from '../bytes.js';
4
+ import { nmeaChecksumOk } from '../decode/other.js';
5
+ import { formatPath } from '../header.js';
6
+ import { checkSymbol, freeText, isValidTimestamp, numberText, pad, refuse, whole } from './common.js';
7
+ const MESSAGE_ID = /^[A-Za-z0-9]{1,5}$/;
8
+ const REPLY_ACK = /^[A-Za-z0-9]{0,5}$/;
9
+ function addressee(a) {
10
+ if (a.length === 0 || a.length > 9)
11
+ refuse(`the addressee ${JSON.stringify(a)} is not 1-9 characters`);
12
+ if (!/^[\x21-\x7e]+$/.test(a) || a.includes(':'))
13
+ refuse('the addressee has characters that cannot appear in one');
14
+ return a.padEnd(9, ' ');
15
+ }
16
+ function messageId(id, replyAck) {
17
+ if (id === undefined) {
18
+ if (replyAck !== undefined)
19
+ refuse('a reply-ack goes with a message ID');
20
+ return '';
21
+ }
22
+ if (!MESSAGE_ID.test(id))
23
+ refuse('a message ID is 1-5 letters or digits');
24
+ if (replyAck === undefined)
25
+ return `{${id}`;
26
+ if (!REPLY_ACK.test(replyAck))
27
+ refuse('a reply-ack is 0-5 letters or digits');
28
+ return `{${id}}${replyAck}`;
29
+ }
30
+ function messageText(text, what = 'message text') {
31
+ if (text.includes('{'))
32
+ refuse(`${what} cannot contain {, which starts a message ID`);
33
+ if ([...text].length > 67)
34
+ refuse(`${what} is over 67 characters`);
35
+ return freeText(text, what);
36
+ }
37
+ export function encodeMessage(d) {
38
+ return `:${addressee(d.addressee)}:${messageText(d.text)}${messageId(d.messageId, d.replyAck)}`;
39
+ }
40
+ export function encodeAck(d) {
41
+ if (d.messageId !== undefined)
42
+ refuse('an ack or rej has no message ID of its own');
43
+ const id = d.type === 'ack' ? d.ackedId : d.rejectedId;
44
+ if (!MESSAGE_ID.test(id))
45
+ refuse('the acked message ID is 1-5 letters or digits');
46
+ let out = `:${addressee(d.addressee)}:${d.type === 'ack' ? 'ack' : 'rej'}${id}`;
47
+ if (d.replyAck !== undefined) {
48
+ if (!REPLY_ACK.test(d.replyAck))
49
+ refuse('a reply-ack is 0-5 letters or digits');
50
+ out += `}${d.replyAck}`;
51
+ }
52
+ return out;
53
+ }
54
+ export function encodeBulletin(d) {
55
+ if (d.type === 'bulletin') {
56
+ if (!/^BLN[0-9A-Z]/.test(d.addressee))
57
+ refuse('a bulletin addressee is BLN then a digit or letter');
58
+ if (/^BLN[A-Z]./.test(d.addressee))
59
+ refuse('a group bulletin has a digit after BLN');
60
+ if (d.text.includes('{') || [...d.text].length > 67)
61
+ refuse('bulletin text is up to 67 characters, without {');
62
+ }
63
+ else {
64
+ if (!/^NWS[-_]/.test(d.addressee))
65
+ refuse('an NWS bulletin addressee starts NWS-');
66
+ if (d.text.includes('{'))
67
+ refuse('bulletin text cannot contain {');
68
+ }
69
+ return `:${addressee(d.addressee)}:${freeText(d.text, 'bulletin text')}${messageId(d.messageId, undefined)}`;
70
+ }
71
+ function listItem(item, what) {
72
+ if (item.includes(','))
73
+ refuse(`a telemetry ${what} cannot contain a comma`);
74
+ return item;
75
+ }
76
+ export function encodeTelemetryNames(d) {
77
+ const list = d.type === 'telemetry-names' ? d.names : d.units;
78
+ const what = d.type === 'telemetry-names' ? 'name' : 'unit';
79
+ if (list.length === 0)
80
+ refuse(`telemetry ${what}s need at least one`);
81
+ if (list.length > 13)
82
+ refuse(`telemetry ${what}s are at most 13 (5 analog, 8 digital)`);
83
+ const body = (d.type === 'telemetry-names' ? 'PARM.' : 'UNIT.') + list.map((n) => listItem(n, what)).join(',');
84
+ if (body.includes('{'))
85
+ refuse('telemetry metadata cannot contain {');
86
+ return `:${addressee(d.addressee)}:${freeText(body, 'telemetry metadata')}${messageId(d.messageId, undefined)}`;
87
+ }
88
+ export function encodeTelemetryCoefficients(d) {
89
+ const list = d.coefficients;
90
+ if (list.length === 0 || list.length > 15)
91
+ refuse('telemetry coefficients are 1-15 numbers (a, b, c for five channels)');
92
+ const texts = list.map((v, i) => {
93
+ const t = d.coefficientsText?.[i];
94
+ return t !== undefined && Number(t) === v ? t : numberText(v);
95
+ });
96
+ return `:${addressee(d.addressee)}:EQNS.${texts.join(',')}${messageId(d.messageId, undefined)}`;
97
+ }
98
+ export function encodeTelemetryBits(d) {
99
+ if (!/^[01]{8}$/.test(d.bits))
100
+ refuse('telemetry bit sense is eight 0/1 characters');
101
+ let body = `BITS.${d.bits}`;
102
+ if (d.project !== undefined && d.project.length > 0) {
103
+ if ([...d.project].length > 23)
104
+ refuse('a telemetry project title is at most 23 characters');
105
+ if (d.project.includes('{'))
106
+ refuse('a telemetry project title cannot contain {');
107
+ body += `,${d.project}`;
108
+ }
109
+ return `:${addressee(d.addressee)}:${freeText(body, 'the project title')}${messageId(d.messageId, undefined)}`;
110
+ }
111
+ export function encodeDirectedQuery(d) {
112
+ if (!/^(?:[A-Z]+|PING\?)$/.test(d.queryType))
113
+ refuse('a query type is upper-case letters');
114
+ let out = `:${addressee(d.addressee)}:?${d.queryType}`;
115
+ if (d.target !== undefined) {
116
+ if (!/^[A-Za-z0-9-]{1,9}$/.test(d.target))
117
+ refuse('a query target is one callsign');
118
+ out += d.target;
119
+ }
120
+ return out;
121
+ }
122
+ export function encodeStatus(d) {
123
+ let out = '>';
124
+ if (d.timestamp) {
125
+ if (d.timestamp.kind !== 'dhm-zulu')
126
+ refuse('a status timestamp is day/hour/minute zulu');
127
+ if (!isValidTimestamp(d.timestamp))
128
+ refuse('the timestamp is out of range');
129
+ if (d.locator !== undefined)
130
+ refuse('a status report with a locator has no timestamp');
131
+ const t = d.timestamp;
132
+ out += `${pad(t.day, 2)}${pad(t.hour, 2)}${pad(t.minute, 2)}z`;
133
+ }
134
+ const text = d.text ?? '';
135
+ if (d.locator !== undefined) {
136
+ if (!/^[A-R]{2}[0-9]{2}(?:[A-X]{2})?$/.test(d.locator))
137
+ refuse('the locator is 4 or 6 characters, upper case');
138
+ if (!d.symbol)
139
+ refuse('a status locator is followed by a symbol');
140
+ checkSymbol(d.symbol);
141
+ out += d.locator + d.symbol.table + d.symbol.code;
142
+ if (text.length > 0 || d.beam)
143
+ out += ' ';
144
+ }
145
+ else if (d.symbol) {
146
+ refuse('a status symbol goes with a locator');
147
+ }
148
+ out += freeText(text, 'status text');
149
+ if (d.beam) {
150
+ if (!/^[0-9A-Z]$/.test(d.beam.headingCode) || !/^[0-9:;<=>?@A-K]$/.test(d.beam.powerCode))
151
+ refuse('beam heading is 0-9 or A-Z, and power 1-9 or :-K');
152
+ out += `^${d.beam.headingCode}${d.beam.powerCode}`;
153
+ }
154
+ return out;
155
+ }
156
+ export function encodeTelemetryReport(d) {
157
+ if (d.sequence !== 'MIC' && !/^[A-Za-z0-9]+$/.test(d.sequence))
158
+ refuse('a telemetry sequence is letters and digits, or MIC');
159
+ if (d.analog.length !== 5)
160
+ refuse('a telemetry report has five analog values');
161
+ if (d.bits === undefined || !/^[01]{8}$/.test(d.bits))
162
+ refuse('a telemetry report has eight 0/1 bits');
163
+ const values = d.analog.map((v, i) => {
164
+ if (v === null)
165
+ return '';
166
+ const t = d.analogText?.[i];
167
+ if (t !== undefined && t !== null && Number(t) === v)
168
+ return t;
169
+ // The classic form: three digits, 000-999 (APRS12c ch. 13).
170
+ return Number.isInteger(v) && v >= 0 && v <= 999 ? pad(v, 3) : numberText(v);
171
+ });
172
+ const seq = d.sequence === 'MIC' ? 'MIC' : `${d.sequence},`;
173
+ return `T#${seq}${values.join(',')},${d.bits}${freeText(d.comment ?? '', 'the comment')}`;
174
+ }
175
+ const RAW_PREFIX = {
176
+ 'peet-bros-hash': '#',
177
+ 'peet-bros-star': '*',
178
+ 'ultimeter-packet': '$ULTW',
179
+ 'ultimeter-logging': '!!',
180
+ };
181
+ export function encodeRawWeather(d) {
182
+ const data = d.data ?? '';
183
+ if (!/^[\x20-\x7e]*$/.test(data))
184
+ refuse('raw weather data is printable ASCII');
185
+ return RAW_PREFIX[d.format] + data;
186
+ }
187
+ export function encodeNmea(d) {
188
+ if (!/^[A-Z]{5},[\x20-\x7e]*$/.test(d.sentence))
189
+ refuse('not an NMEA sentence');
190
+ const checksum = nmeaChecksumOk(d.sentence);
191
+ if (checksum === false)
192
+ refuse("the NMEA sentence's checksum does not match");
193
+ return `$${d.sentence}`;
194
+ }
195
+ export function encodeMaidenhead(d) {
196
+ if (!/^[A-R]{2}[0-9]{2}(?:[A-X]{2})?$/.test(d.locator))
197
+ refuse('the locator is 4 or 6 characters, upper case');
198
+ return `[${d.locator}]${freeText(d.comment ?? '', 'the comment')}`;
199
+ }
200
+ export function encodeQuery(d) {
201
+ if (!/^[A-Z]+$/.test(d.queryType))
202
+ refuse('a query type is upper-case letters');
203
+ let out = `?${d.queryType}?`;
204
+ if (d.footprint) {
205
+ const f = d.footprint;
206
+ if (!(f.latitude >= -90 && f.latitude <= 90) || !(f.longitude >= -180 && f.longitude <= 180))
207
+ refuse('the footprint is out of range');
208
+ const coord = (v) => (v < 0 ? numberText(v) : ` ${numberText(v)}`);
209
+ out += `${coord(f.latitude)},${numberText(f.longitude)},${pad(whole(f.radiusMiles, 0, 9999, 'radius'), 4)}`;
210
+ }
211
+ return out;
212
+ }
213
+ export function encodeCapabilities(d) {
214
+ if (d.capabilities.length === 0)
215
+ refuse('capabilities need at least one item');
216
+ const items = d.capabilities.map((c) => {
217
+ const token = c[0];
218
+ if (token.length === 0 || /[\s,=]/.test(token))
219
+ refuse('a capability token has no space, comma or =');
220
+ if (c.length === 1)
221
+ return token;
222
+ const value = c[1];
223
+ if (value.includes(',') || /^\s|\s$/.test(value))
224
+ refuse('a capability value has no comma or edge spaces');
225
+ return `${token}=${value}`;
226
+ });
227
+ return '<' + encodeUtf8Binary(items.join(','));
228
+ }
229
+ export function encodeUserDefined(d) {
230
+ if (d.userId.length !== 1 || d.packetType.length !== 1)
231
+ refuse('a user ID and packet type are one character each');
232
+ const data = d.data ?? '';
233
+ if (/[^\x00-\xff]/.test(data))
234
+ refuse('user-defined data is bytes (U+0000-U+00FF)');
235
+ if (/[\r\n]$/.test(data))
236
+ refuse('user-defined data cannot end in a line break');
237
+ return `{${d.userId}${d.packetType}${data}`;
238
+ }
239
+ export function encodeTest(d) {
240
+ return `,${freeText(d.data ?? '', 'test data')}`;
241
+ }
242
+ export function encodeAgrelo(d) {
243
+ return `%${pad(whole(d.bearingDegrees, 0, 360, 'bearing'), 3)}/${whole(d.quality, 0, 9, 'quality')}`;
244
+ }
245
+ /** The third-party header and the encapsulated packet's information field. */
246
+ export function encodeThirdParty(d, innerInfo) {
247
+ const p = d.packet;
248
+ const header = p.path.length > 0 ? `${p.source}>${p.destination},${formatPath(p.path)}` : `${p.source}>${p.destination}`;
249
+ if (!/^[\x21-\x7e]+$/.test(header) || header.includes(':'))
250
+ refuse('the third-party header is not printable');
251
+ return `}${header}:${innerInfo}`;
252
+ }
253
+ //# sourceMappingURL=other.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"other.js","sourceRoot":"","sources":["../../src/encode/other.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import type { AprsSymbol, CommentTelemetry, CompressionType, ItemReport, MicEReport, ObjectReport, PositionReport, VoiceFrequency, WeatherReport } from '../types.js';
2
+ /** Negative, or negative zero: a zero coordinate keeps its hemisphere as the sign of zero. */
3
+ export declare function isNegative(v: number): boolean;
4
+ export declare const DEFAULT_COMPRESSION: CompressionType;
5
+ export declare function frequencyText(f: VoiceFrequency): string;
6
+ export declare function telemetryText(t: CommentTelemetry): string;
7
+ /** A positionless weather report (`_`). */
8
+ export declare function encodeWeatherReport(d: WeatherReport): string;
9
+ interface Body {
10
+ /** Everything after the DTI (and timestamp / name): position, extension, comment... */
11
+ text: string;
12
+ /** The compression type written, if any (the round-trip check expects it back). */
13
+ compression?: CompressionType;
14
+ }
15
+ /**
16
+ * How the comment is joined on: `plain` (after a space when it follows a frequency), `joined`
17
+ * (straight after a frequency, with no space) or `delimited` (after a `/`), for when it would
18
+ * otherwise read as something else.
19
+ */
20
+ export type CommentMode = 'plain' | 'joined' | 'delimited';
21
+ export declare function encodePositionReport(d: PositionReport, mode: CommentMode): Body;
22
+ export declare function encodeObject(d: ObjectReport, mode: CommentMode): Body;
23
+ export declare function encodeItem(d: ItemReport, mode: CommentMode): Body;
24
+ export declare function micEAltitude(feet: number): string | undefined;
25
+ /** A Mic-E report: the information field and the destination address. */
26
+ export declare function encodeMicE(d: MicEReport, mode: CommentMode): {
27
+ text: string;
28
+ destination: string;
29
+ };
30
+ export type { AprsSymbol };
31
+ //# sourceMappingURL=position.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"position.d.ts","sourceRoot":"","sources":["../../src/encode/position.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,UAAU,EACV,gBAAgB,EAChB,eAAe,EACf,UAAU,EAEV,UAAU,EACV,YAAY,EAEZ,cAAc,EACd,cAAc,EAEd,aAAa,EACd,MAAM,aAAa,CAAC;AAKrB,8FAA8F;AAC9F,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAE7C;AA6DD,eAAO,MAAM,mBAAmB,EAAE,eAAyE,CAAC;AAmD5G,wBAAgB,aAAa,CAAC,CAAC,EAAE,cAAc,GAAG,MAAM,CA+CvD;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAQzD;AAuED,2CAA2C;AAC3C,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,aAAa,GAAG,MAAM,CAQ5D;AAID,UAAU,IAAI;IACZ,uFAAuF;IACvF,IAAI,EAAE,MAAM,CAAC;IACb,mFAAmF;IACnF,WAAW,CAAC,EAAE,eAAe,CAAC;CAC/B;AAWD;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,WAAW,CAAC;AAyL3D,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI,CAW/E;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI,CAOrE;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,GAAG,IAAI,CAKjE;AA8CD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAM7D;AAED,yEAAyE;AACzE,wBAAgB,UAAU,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAsFlG;AAED,YAAY,EAAE,UAAU,EAAE,CAAC"}