dns-message 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1492 @@
1
+ let t = function(t) {
2
+ t[t.QUERY = 0] = "QUERY";
3
+ t[t.RESPONSE = 32768] = "RESPONSE";
4
+ return t;
5
+ }({});
6
+
7
+ let e = function(t) {
8
+ t[t.A = 1] = "A";
9
+ t[t.NS = 2] = "NS";
10
+ t[t.CNAME = 5] = "CNAME";
11
+ t[t.SOA = 6] = "SOA";
12
+ t[t.NULL = 10] = "NULL";
13
+ t[t.PTR = 12] = "PTR";
14
+ t[t.HINFO = 13] = "HINFO";
15
+ t[t.MX = 15] = "MX";
16
+ t[t.TXT = 16] = "TXT";
17
+ t[t.RP = 17] = "RP";
18
+ t[t.AFSDB = 18] = "AFSDB";
19
+ t[t.SIG = 24] = "SIG";
20
+ t[t.KEY = 25] = "KEY";
21
+ t[t.AAAA = 28] = "AAAA";
22
+ t[t.LOC = 29] = "LOC";
23
+ t[t.SRV = 33] = "SRV";
24
+ t[t.NAPTR = 35] = "NAPTR";
25
+ t[t.KX = 36] = "KX";
26
+ t[t.CERT = 37] = "CERT";
27
+ t[t.DNAME = 39] = "DNAME";
28
+ t[t.OPT = 41] = "OPT";
29
+ t[t.APL = 42] = "APL";
30
+ t[t.DS = 43] = "DS";
31
+ t[t.SSHFP = 44] = "SSHFP";
32
+ t[t.IPSECKEY = 45] = "IPSECKEY";
33
+ t[t.RRSIG = 46] = "RRSIG";
34
+ t[t.NSEC = 47] = "NSEC";
35
+ t[t.DNSKEY = 48] = "DNSKEY";
36
+ t[t.DHCID = 49] = "DHCID";
37
+ t[t.NSEC3 = 50] = "NSEC3";
38
+ t[t.NSEC3PARAM = 51] = "NSEC3PARAM";
39
+ t[t.TLSA = 52] = "TLSA";
40
+ t[t.HIP = 55] = "HIP";
41
+ t[t.CDS = 59] = "CDS";
42
+ t[t.CDNSKEY = 60] = "CDNSKEY";
43
+ t[t.SVCB = 64] = "SVCB";
44
+ t[t.HTTPS = 65] = "HTTPS";
45
+ t[t.SPF = 99] = "SPF";
46
+ t[t.TKEY = 249] = "TKEY";
47
+ t[t.TSIG = 250] = "TSIG";
48
+ t[t.IXFR = 251] = "IXFR";
49
+ t[t.AXFR = 252] = "AXFR";
50
+ t[t.ANY = 255] = "ANY";
51
+ t[t.CAA = 257] = "CAA";
52
+ t[t.TA = 32768] = "TA";
53
+ t[t.DLV = 32769] = "DLV";
54
+ return t;
55
+ }({});
56
+
57
+ let n = function(t) {
58
+ t[t.IN = 1] = "IN";
59
+ t[t.CS = 2] = "CS";
60
+ t[t.CH = 3] = "CH";
61
+ t[t.HS = 4] = "HS";
62
+ t[t.ANY = 255] = "ANY";
63
+ return t;
64
+ }({});
65
+
66
+ let r = function(t) {
67
+ t[t.NOERR = 0] = "NOERR";
68
+ t[t.FORMERR = 1] = "FORMERR";
69
+ t[t.SERVFAIL = 2] = "SERVFAIL";
70
+ t[t.NXDOMAIN = 3] = "NXDOMAIN";
71
+ t[t.NOTIMP = 4] = "NOTIMP";
72
+ t[t.REFUSED = 5] = "REFUSED";
73
+ t[t.YXDOMAIN = 6] = "YXDOMAIN";
74
+ t[t.YXRRSET = 7] = "YXRRSET";
75
+ t[t.NXRRSET = 8] = "NXRRSET";
76
+ t[t.NOTAUTH = 9] = "NOTAUTH";
77
+ t[t.NOTZONE = 10] = "NOTZONE";
78
+ t[t.CHECKING_DISABLED = 16] = "CHECKING_DISABLED";
79
+ t[t.AUTHENTIC_DATA = 32] = "AUTHENTIC_DATA";
80
+ t[t.RECURSION_AVAILABLE = 128] = "RECURSION_AVAILABLE";
81
+ t[t.RECURSION_DESIRED = 256] = "RECURSION_DESIRED";
82
+ t[t.TRUNCATED_RESPONSE = 512] = "TRUNCATED_RESPONSE";
83
+ t[t.AUTHORITATIVE_ANSWER = 1024] = "AUTHORITATIVE_ANSWER";
84
+ return t;
85
+ }({});
86
+
87
+ let s = function(t) {
88
+ t[t.OPTION_0 = 0] = "OPTION_0";
89
+ t[t.LLQ = 1] = "LLQ";
90
+ t[t.UL = 2] = "UL";
91
+ t[t.NSID = 3] = "NSID";
92
+ t[t.OPTION_4 = 4] = "OPTION_4";
93
+ t[t.DAU = 5] = "DAU";
94
+ t[t.DHU = 6] = "DHU";
95
+ t[t.N3U = 7] = "N3U";
96
+ t[t.CLIENT_SUBNET = 8] = "CLIENT_SUBNET";
97
+ t[t.EXPIRE = 9] = "EXPIRE";
98
+ t[t.COOKIE = 10] = "COOKIE";
99
+ t[t.TCP_KEEPALIVE = 11] = "TCP_KEEPALIVE";
100
+ t[t.PADDING = 12] = "PADDING";
101
+ t[t.CHAIN = 13] = "CHAIN";
102
+ t[t.KEY_TAG = 14] = "KEY_TAG";
103
+ t[t.DEVICEID = 26946] = "DEVICEID";
104
+ t[t.OPTION_65535 = 65535] = "OPTION_65535";
105
+ return t;
106
+ }({});
107
+
108
+ const a = new TextEncoder;
109
+
110
+ const i = new TextDecoder;
111
+
112
+ const o = "undefined" != typeof Buffer ? t => Buffer.byteLength(t) : t => {
113
+ let e = t.length;
114
+ for (let n = e - 1; n >= 0; n--) {
115
+ const r = t.charCodeAt(n);
116
+ if (r > 127 && r <= 2047) {
117
+ e++;
118
+ } else if (r > 2047 && r <= 65535) {
119
+ e += 2;
120
+ }
121
+ if (r >= 56320 && r <= 57343) {
122
+ n--;
123
+ }
124
+ }
125
+ return e;
126
+ };
127
+
128
+ const c = {
129
+ bytes(t) {
130
+ let e = 2;
131
+ switch (t) {
132
+ case "":
133
+ case ".":
134
+ case "..":
135
+ return 1;
136
+
137
+ default:
138
+ if ("." === t[0]) {
139
+ e--;
140
+ }
141
+ if ("." === t[t.length - 1]) {
142
+ e--;
143
+ }
144
+ return e + t.replace(/\\\./g, ".").length;
145
+ }
146
+ },
147
+ write(t, e, n) {
148
+ const r = a.encode(n);
149
+ for (let n = 46 === r[0] ? 1 : 0, s = 0; n < r.byteLength; n = s + 1) {
150
+ s = r.indexOf(46, n);
151
+ while (s > -1 && 92 === r[s - 1]) {
152
+ s = r.indexOf(46, s + 1);
153
+ }
154
+ if (-1 === s) {
155
+ s = r.byteLength;
156
+ }
157
+ if (s === n) {
158
+ continue;
159
+ }
160
+ let a = e + 1;
161
+ for (let e = n; e < s; e++) {
162
+ if (92 === r[e] && 46 === r[e + 1]) {
163
+ e++;
164
+ }
165
+ t.setUint8(a++, r[e]);
166
+ }
167
+ t.setUint8(e, a - e - 1);
168
+ e = a;
169
+ n = s + 1;
170
+ }
171
+ return e + 1;
172
+ },
173
+ read(t, e) {
174
+ let {offset: n, length: r} = e;
175
+ const s = [];
176
+ while (e.offset - n < r) {
177
+ const a = t.getUint8(e.offset);
178
+ advance(e, 1);
179
+ if (0 === a) {
180
+ break;
181
+ } else if (!(192 & a)) {
182
+ const n = i.decode(sliceView(t, e, a));
183
+ s.push(n.replace(/\./g, "\\."));
184
+ } else if (!(192 & ~a)) {
185
+ const a = e.offset - n;
186
+ n = e.offset;
187
+ r = e.length;
188
+ e.offset = t.getUint16(e.offset - 1) - 49152;
189
+ e.length = r - a;
190
+ const i = c.read(t, e);
191
+ if (i && "." !== i) {
192
+ s.push(i);
193
+ }
194
+ e.offset = n;
195
+ e.length = r;
196
+ break;
197
+ }
198
+ }
199
+ return s.join(".") || ".";
200
+ }
201
+ };
202
+
203
+ const f = {
204
+ bytes: t => "string" == typeof t ? o(t) : t.byteLength,
205
+ write(t, e, n) {
206
+ const r = "string" == typeof n ? a.encode(n) : n;
207
+ new Uint8Array(t.buffer, t.byteOffset + e, r.byteLength).set(r);
208
+ return e += r.byteLength;
209
+ },
210
+ read: (t, e) => sliceView(t, e)
211
+ };
212
+
213
+ const d = {
214
+ bytes: t => o(t) + 1,
215
+ write(t, e, n) {
216
+ const r = a.encode(n);
217
+ t.setUint8(e++, r.byteLength);
218
+ return f.write(t, e, r);
219
+ },
220
+ read(t, e) {
221
+ const n = t.getUint8(e.offset);
222
+ advance(e, 1);
223
+ return i.decode(sliceView(t, e, n));
224
+ }
225
+ };
226
+
227
+ const u = {
228
+ bytes(t) {
229
+ const e = [];
230
+ for (let n = 0; n < t.length; n++) {
231
+ e[t[n] >> 8] = Math.max(e[t[n] >> 8] || 0, 255 & t[n]);
232
+ }
233
+ let n = 0;
234
+ for (let t = 0; t < e.length; t++) {
235
+ if (null != e[t]) {
236
+ n += 2 + Math.ceil((e[t] + 1) / 8);
237
+ }
238
+ }
239
+ return n;
240
+ },
241
+ write(t, e, n) {
242
+ const r = [];
243
+ for (let t = 0; t < n.length; t++) {
244
+ (r[n[t] >> 8] || (r[n[t] >> 8] = []))[n[t] >> 3 & 31] |= 1 << 7 - (7 & n[t]);
245
+ }
246
+ for (let n = 0; n < r.length; n++) {
247
+ const s = r[n];
248
+ if (null != s) {
249
+ t.setUint8(e++, n);
250
+ t.setUint8(e++, s.length);
251
+ for (let n = 0; n < s.length; n++) {
252
+ t.setUint8(e++, s[n]);
253
+ }
254
+ }
255
+ }
256
+ return e;
257
+ },
258
+ read(t, e) {
259
+ const {offset: n, length: r} = e;
260
+ const s = [];
261
+ while (e.offset - n < r) {
262
+ const n = t.getUint8(e.offset);
263
+ const r = t.getUint8(e.offset + 1);
264
+ for (let a = 0; a < r; a++) {
265
+ const r = t.getUint8(e.offset + 2 + a);
266
+ for (let t = 0; t < 8; t++) {
267
+ if (r & 1 << 7 - t) {
268
+ s.push(n << 8 | a << 3 | t);
269
+ }
270
+ }
271
+ }
272
+ advance(e, 2 + r);
273
+ }
274
+ return s;
275
+ }
276
+ };
277
+
278
+ const l = {
279
+ bytes: () => 4,
280
+ write(t, e, n) {
281
+ const r = n.split(".", 4);
282
+ for (let n = 0; n < 4; n++) {
283
+ t.setUint8(e++, parseInt(r[n], 10));
284
+ }
285
+ return e;
286
+ },
287
+ read(t, e) {
288
+ const n = Math.min(e.length, 4);
289
+ const r = new Array(4).fill(0).map((r, s) => s < n ? t.getUint8(e.offset + s) : 0).join(".");
290
+ advance(e, n);
291
+ return r;
292
+ }
293
+ };
294
+
295
+ const g = {
296
+ bytes: () => 2,
297
+ write(t, e, n) {
298
+ t.setUint16(e, n);
299
+ return e + 2;
300
+ },
301
+ read(t, e) {
302
+ const n = t.getUint16(e.offset);
303
+ advance(e, 2);
304
+ return n;
305
+ }
306
+ };
307
+
308
+ const y = {
309
+ bytes: () => 16,
310
+ write(t, e, n) {
311
+ const r = n.indexOf("::");
312
+ const s = (r > -1 ? n.slice(0, r) : n).split(":");
313
+ const a = r > -1 ? n.slice(r + 2).split(":") : [];
314
+ const i = a.length > 0 && a[a.length - 1].includes(".") ? a.pop() : void 0;
315
+ for (let n = 0; n < s.length; n++) {
316
+ t.setUint16(e, parseInt(s[n], 16));
317
+ e += 2;
318
+ }
319
+ for (let n = 8 - (s.length + a.length + (i ? 2 : 0)); n > 0; n--) {
320
+ t.setUint16(e, 0);
321
+ e += 2;
322
+ }
323
+ for (let n = 0; n < a.length; n++) {
324
+ t.setUint16(e, parseInt(a[n], 16));
325
+ e += 2;
326
+ }
327
+ if (i) {
328
+ const n = i.split(".", 4).map(t => parseInt(t, 10));
329
+ t.setUint16(e, n[0] << 8 | n[1]);
330
+ t.setUint16(e + 2, n[2] << 8 | n[3]);
331
+ e += 4;
332
+ }
333
+ return e;
334
+ },
335
+ read(t, e) {
336
+ let n = "";
337
+ const r = Math.min(e.length, 16);
338
+ for (let s = 0; s < r; s += 2) {
339
+ if (0 !== s) {
340
+ n += ":";
341
+ }
342
+ n += t.getUint16(e.offset + s).toString(16);
343
+ }
344
+ advance(e, r);
345
+ return n.replace(/(^|:)0(:0)*:0(:|$)/, "$1::$3").replace(/:{3,4}/, "::");
346
+ }
347
+ };
348
+
349
+ const withRDLength = t => ({
350
+ bytes: e => t.bytes(e) + 2,
351
+ write(e, n, r) {
352
+ const s = n;
353
+ n = t.write(e, n + 2, r);
354
+ e.setUint16(s, n - s - 2);
355
+ return n;
356
+ },
357
+ read(e, n) {
358
+ const {offset: r, length: s} = n;
359
+ const a = n.length = e.getUint16(n.offset);
360
+ n.offset += 2;
361
+ const i = t.read(e, n);
362
+ n.offset = r + 2 + a;
363
+ n.length = s;
364
+ return i;
365
+ }
366
+ });
367
+
368
+ const array = t => ({
369
+ bytes(e) {
370
+ let n = 0;
371
+ for (let r = 0; null != e && r < e.length; r++) {
372
+ n += t.bytes(e[r]);
373
+ }
374
+ return n;
375
+ },
376
+ write(e, n, r) {
377
+ for (let s = 0; null != r && s < r.length; s++) {
378
+ n = t.write(e, n, r[s]);
379
+ }
380
+ return n;
381
+ },
382
+ read(e, n) {
383
+ const {offset: r, length: s} = n;
384
+ const a = [];
385
+ while (n.offset - r < s) {
386
+ a.push(t.read(e, n));
387
+ }
388
+ return a;
389
+ }
390
+ });
391
+
392
+ const advance = (t, e) => {
393
+ t.offset += e;
394
+ t.length -= e;
395
+ };
396
+
397
+ const sliceView = (t, e, n = e.length) => {
398
+ const r = new Uint8Array(t.buffer, t.byteOffset + e.offset, n);
399
+ advance(e, n);
400
+ return r;
401
+ };
402
+
403
+ const U = 32768;
404
+
405
+ const h = {
406
+ bytes: t => c.bytes(t.name) + 4,
407
+ write(t, e, r) {
408
+ let s = r.class || n.IN;
409
+ if (r.qu) {
410
+ s |= U;
411
+ }
412
+ e = c.write(t, e, r.name);
413
+ t.setUint16(e, r.type);
414
+ t.setUint16(e + 2, s);
415
+ return e += 4;
416
+ },
417
+ read(t, e) {
418
+ const r = c.read(t, e);
419
+ const s = t.getUint16(e.offset);
420
+ let a = t.getUint16(e.offset + 2) || n.ANY;
421
+ let i = !1;
422
+ if (a !== n.ANY && a & U) {
423
+ a &= -32769;
424
+ i = !0;
425
+ }
426
+ advance(e, 4);
427
+ return {
428
+ name: r,
429
+ type: s,
430
+ class: a,
431
+ qu: i
432
+ };
433
+ }
434
+ };
435
+
436
+ let w = function(t) {
437
+ t[t.v4 = 1] = "v4";
438
+ t[t.v6 = 2] = "v6";
439
+ return t;
440
+ }({});
441
+
442
+ const b = withRDLength({
443
+ bytes: t => f.bytes(t.data),
444
+ write: (t, e, n) => f.write(t, e, n.data),
445
+ read: (t, e) => ({
446
+ code: s.OPTION_0,
447
+ data: f.read(t, e)
448
+ })
449
+ });
450
+
451
+ const p = "(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])";
452
+
453
+ const E = new RegExp(`^${`(?:${p}\\.){3}${p}`}$`);
454
+
455
+ const A = withRDLength({
456
+ bytes: t => Math.ceil((t.sourcePrefixLength || 0) / 8) + 4,
457
+ write(t, e, n) {
458
+ const r = n.sourcePrefixLength || 0;
459
+ const s = n.scopePrefixLength || 0;
460
+ const a = n.family || (E.test(n.ip) ? w.v4 : w.v6);
461
+ const i = Math.ceil(r / 8);
462
+ t.setUint16(e, a);
463
+ t.setUint8(e + 2, r);
464
+ t.setUint8(e + 3, s);
465
+ e += 4;
466
+ const o = ((t, e) => {
467
+ const n = new ArrayBuffer(t.bytes(e));
468
+ const r = t.write(new DataView(n), 0, e);
469
+ return new Uint8Array(n, 0, r);
470
+ })(a === w.v4 ? l : y, n.ip);
471
+ for (let n = 0; n < i; n++) {
472
+ t.setUint8(e++, o[n]);
473
+ }
474
+ return e;
475
+ },
476
+ read(t, e) {
477
+ const n = t.getUint16(e.offset);
478
+ const r = t.getUint8(e.offset + 2);
479
+ const a = t.getUint8(e.offset + 3);
480
+ advance(e, 4);
481
+ return {
482
+ code: s.CLIENT_SUBNET,
483
+ family: n,
484
+ sourcePrefixLength: r,
485
+ scopePrefixLength: a,
486
+ ip: n === w.v4 ? l.read(t, e) : y.read(t, e)
487
+ };
488
+ }
489
+ });
490
+
491
+ const S = withRDLength({
492
+ bytes: t => t.timeout ? 2 : 0,
493
+ write(t, e, n) {
494
+ if (n.timeout) {
495
+ t.setUint16(e, n.timeout);
496
+ e += 2;
497
+ }
498
+ return e;
499
+ },
500
+ read(t, e) {
501
+ if (e.length) {
502
+ const n = t.getUint16(e.offset);
503
+ advance(e, 2);
504
+ return {
505
+ code: s.TCP_KEEPALIVE,
506
+ timeout: n
507
+ };
508
+ } else {
509
+ return {
510
+ code: s.TCP_KEEPALIVE,
511
+ timeout: void 0
512
+ };
513
+ }
514
+ }
515
+ });
516
+
517
+ const N = withRDLength({
518
+ bytes: t => t.length || 0,
519
+ write: (t, e, n) => e + (n.length || 0),
520
+ read(t, e) {
521
+ const {length: n} = e;
522
+ advance(e, n);
523
+ return {
524
+ code: s.PADDING,
525
+ length: n
526
+ };
527
+ }
528
+ });
529
+
530
+ const T = withRDLength({
531
+ bytes: t => 2 * t.tags.length,
532
+ write(t, e, n) {
533
+ for (let r = 0; r < n.tags.length; r++) {
534
+ t.setUint16(e, n.tags[r]);
535
+ e += 2;
536
+ }
537
+ return e;
538
+ },
539
+ read(t, e) {
540
+ const {offset: n, length: r} = e;
541
+ const a = [];
542
+ while (e.offset - n < r) {
543
+ a.push(t.getUint16(e.offset));
544
+ advance(e, 2);
545
+ }
546
+ return {
547
+ code: s.KEY_TAG,
548
+ tags: a
549
+ };
550
+ }
551
+ });
552
+
553
+ const isUnknownOpt = t => !!t.data;
554
+
555
+ const I = {
556
+ bytes(t) {
557
+ if (isUnknownOpt(t)) {
558
+ return b.bytes(t) + 2;
559
+ }
560
+ switch (t.code) {
561
+ case s.CLIENT_SUBNET:
562
+ return A.bytes(t) + 2;
563
+
564
+ case s.TCP_KEEPALIVE:
565
+ return S.bytes(t) + 2;
566
+
567
+ case s.PADDING:
568
+ return N.bytes(t) + 2;
569
+
570
+ case s.KEY_TAG:
571
+ return T.bytes(t) + 2;
572
+ }
573
+ },
574
+ write(t, e, n) {
575
+ t.setUint16(e, n.code);
576
+ e += 2;
577
+ if (isUnknownOpt(n)) {
578
+ return b.write(t, e, n);
579
+ }
580
+ switch (n.code) {
581
+ case s.CLIENT_SUBNET:
582
+ return A.write(t, e, n);
583
+
584
+ case s.TCP_KEEPALIVE:
585
+ return S.write(t, e, n);
586
+
587
+ case s.PADDING:
588
+ return N.write(t, e, n);
589
+
590
+ case s.KEY_TAG:
591
+ return T.write(t, e, n);
592
+ }
593
+ },
594
+ read(t, e) {
595
+ const n = t.getUint16(e.offset);
596
+ advance(e, 2);
597
+ switch (n) {
598
+ case s.CLIENT_SUBNET:
599
+ return A.read(t, e);
600
+
601
+ case s.TCP_KEEPALIVE:
602
+ return S.read(t, e);
603
+
604
+ case s.PADDING:
605
+ return N.read(t, e);
606
+
607
+ case s.KEY_TAG:
608
+ return T.read(t, e);
609
+
610
+ default:
611
+ const r = b.read(t, e);
612
+ r.code = n;
613
+ return r;
614
+ }
615
+ }
616
+ };
617
+
618
+ let P = function(t) {
619
+ t[t.Mandatory = 0] = "Mandatory";
620
+ t[t.Alpn = 1] = "Alpn";
621
+ t[t.NoDefaultAlpn = 2] = "NoDefaultAlpn";
622
+ t[t.Port = 3] = "Port";
623
+ t[t.Ipv4Hint = 4] = "Ipv4Hint";
624
+ t[t.EchConfig = 5] = "EchConfig";
625
+ t[t.Ipv6Hint = 6] = "Ipv6Hint";
626
+ t[t.DohPath = 7] = "DohPath";
627
+ t[t.Odoh = 32769] = "Odoh";
628
+ return t;
629
+ }({});
630
+
631
+ const D = withRDLength(array(g));
632
+
633
+ const R = withRDLength(array(d));
634
+
635
+ const C = withRDLength(g);
636
+
637
+ const m = withRDLength(array(l));
638
+
639
+ const O = withRDLength(array(y));
640
+
641
+ const L = withRDLength(f);
642
+
643
+ const v = {
644
+ bytes(t) {
645
+ let e = 0;
646
+ if (null != t.mandatory) {
647
+ e += D.bytes(t.mandatory) + 2;
648
+ }
649
+ if (null != t.alpn) {
650
+ e += R.bytes(t.alpn) + 2;
651
+ }
652
+ if (t["no-default-alpn"]) {
653
+ e += 4;
654
+ }
655
+ if (null != t.port) {
656
+ e += C.bytes(t.port) + 2;
657
+ }
658
+ if (t.ipv4hint) {
659
+ e += m.bytes(t.ipv4hint) + 2;
660
+ }
661
+ if (t.ipv6hint) {
662
+ e += O.bytes(t.ipv6hint) + 2;
663
+ }
664
+ if (t.echconfig) {
665
+ e += L.bytes(t.echconfig) + 2;
666
+ }
667
+ if (t.dohpath) {
668
+ e += L.bytes(t.dohpath) + 2;
669
+ }
670
+ if (t.odoh) {
671
+ e += L.bytes(t.odoh) + 2;
672
+ }
673
+ return e;
674
+ },
675
+ write(t, e, n) {
676
+ if (null != n.mandatory) {
677
+ t.setUint16(e, P.Mandatory);
678
+ e = D.write(t, e + 2, n.mandatory);
679
+ }
680
+ if (null != n.alpn) {
681
+ t.setUint16(e, P.Alpn);
682
+ e = R.write(t, e + 2, n.alpn);
683
+ }
684
+ if (n["no-default-alpn"]) {
685
+ t.setUint16(e, P.NoDefaultAlpn);
686
+ e += 4;
687
+ }
688
+ if (null != n.port) {
689
+ t.setUint16(e, P.Port);
690
+ e = C.write(t, e + 2, n.port);
691
+ }
692
+ if (n.ipv4hint) {
693
+ t.setUint16(e, P.Ipv4Hint);
694
+ e = m.write(t, e + 2, n.ipv4hint);
695
+ }
696
+ if (n.ipv6hint) {
697
+ t.setUint16(e, P.Ipv6Hint);
698
+ e = O.write(t, e + 2, n.ipv6hint);
699
+ }
700
+ if (n.echconfig) {
701
+ t.setUint16(e, P.EchConfig);
702
+ e = L.write(t, e + 2, n.echconfig);
703
+ }
704
+ if (n.dohpath) {
705
+ t.setUint16(e, P.DohPath);
706
+ e = L.write(t, e + 2, n.dohpath);
707
+ }
708
+ if (n.odoh) {
709
+ t.setUint16(e, P.Odoh);
710
+ e = L.write(t, e + 2, n.odoh);
711
+ }
712
+ return e;
713
+ },
714
+ read(t, e) {
715
+ const {length: n, offset: r} = e;
716
+ const s = {
717
+ mandatory: void 0,
718
+ alpn: void 0,
719
+ "no-default-alpn": !1,
720
+ port: void 0,
721
+ ipv4hint: void 0,
722
+ ipv6hint: void 0,
723
+ echconfig: void 0,
724
+ dohpath: void 0,
725
+ odoh: void 0
726
+ };
727
+ while (e.offset - r < n) {
728
+ const n = t.getUint16(e.offset);
729
+ advance(e, 2);
730
+ switch (n) {
731
+ case P.Mandatory:
732
+ s.mandatory = D.read(t, e);
733
+ break;
734
+
735
+ case P.Alpn:
736
+ s.alpn = R.read(t, e);
737
+ break;
738
+
739
+ case P.NoDefaultAlpn:
740
+ s["no-default-alpn"] = !0;
741
+ advance(e, 2);
742
+ break;
743
+
744
+ case P.Port:
745
+ s.port = C.read(t, e);
746
+ break;
747
+
748
+ case P.Ipv4Hint:
749
+ s.ipv4hint = m.read(t, e);
750
+ break;
751
+
752
+ case P.Ipv6Hint:
753
+ s.ipv6hint = O.read(t, e);
754
+ break;
755
+
756
+ case P.EchConfig:
757
+ s.echconfig = L.read(t, e);
758
+ break;
759
+
760
+ case P.DohPath:
761
+ s.dohpath = i.decode(L.read(t, e));
762
+ break;
763
+
764
+ case P.Odoh:
765
+ s.odoh = L.read(t, e);
766
+ break;
767
+
768
+ default:
769
+ L.read(t, e);
770
+ }
771
+ }
772
+ return s;
773
+ }
774
+ };
775
+
776
+ const H = withRDLength(f);
777
+
778
+ const x = withRDLength(c);
779
+
780
+ const _ = withRDLength(l);
781
+
782
+ const V = withRDLength(y);
783
+
784
+ const Y = withRDLength(array(d));
785
+
786
+ const K = withRDLength({
787
+ bytes: t => c.bytes(t.target) + 6,
788
+ write(t, e, n) {
789
+ t.setUint16(e, n.priority || 0);
790
+ t.setUint16(e + 2, n.weight || 0);
791
+ t.setUint16(e + 4, n.port || 0);
792
+ return c.write(t, e + 6, n.target);
793
+ },
794
+ read(t, e) {
795
+ const n = {
796
+ priority: 0,
797
+ weight: 0,
798
+ port: 0,
799
+ target: ""
800
+ };
801
+ n.priority = t.getUint16(e.offset);
802
+ n.weight = t.getUint16(e.offset + 2);
803
+ n.port = t.getUint16(e.offset + 4);
804
+ advance(e, 6);
805
+ n.target = c.read(t, e);
806
+ return n;
807
+ }
808
+ });
809
+
810
+ const M = withRDLength({
811
+ bytes: t => d.bytes(t.cpu) + d.bytes(t.os),
812
+ write(t, e, n) {
813
+ e = d.write(t, e, n.cpu);
814
+ return e = d.write(t, e, n.os);
815
+ },
816
+ read: (t, e) => ({
817
+ cpu: d.read(t, e),
818
+ os: d.read(t, e)
819
+ })
820
+ });
821
+
822
+ const toCaaTag = t => {
823
+ switch (t) {
824
+ case "issue":
825
+ case "issuewild":
826
+ case "iodef":
827
+ return t;
828
+
829
+ default:
830
+ return "issue";
831
+ }
832
+ };
833
+
834
+ const X = withRDLength({
835
+ bytes: t => d.bytes(t.tag) + f.bytes(t.value) + 1,
836
+ write(t, e, n) {
837
+ let r = n.flags || 0;
838
+ if (n.issuerCritical) {
839
+ r = 128;
840
+ }
841
+ t.setUint8(e, r);
842
+ e = d.write(t, e + 1, n.tag);
843
+ return e = f.write(t, e, n.value);
844
+ },
845
+ read(t, e) {
846
+ const n = t.getUint8(e.offset);
847
+ advance(e, 1);
848
+ return {
849
+ flags: n,
850
+ tag: toCaaTag(d.read(t, e)),
851
+ value: f.read(t, e),
852
+ issuerCritical: !!(128 & n)
853
+ };
854
+ }
855
+ });
856
+
857
+ const F = withRDLength({
858
+ bytes: t => c.bytes(t.mname) + c.bytes(t.rname) + 20,
859
+ write(t, e, n) {
860
+ e = c.write(t, e, n.mname);
861
+ e = c.write(t, e, n.rname);
862
+ t.setUint32(e, n.serial || 0);
863
+ t.setUint32(e + 4, n.refresh || 0);
864
+ t.setUint32(e + 8, n.retry || 0);
865
+ t.setUint32(e + 12, n.expire || 0);
866
+ t.setUint32(e + 16, n.minimum || 0);
867
+ return e + 20;
868
+ },
869
+ read(t, e) {
870
+ const n = {
871
+ mname: c.read(t, e),
872
+ rname: c.read(t, e),
873
+ serial: t.getUint32(e.offset),
874
+ refresh: t.getUint32(e.offset + 4),
875
+ retry: t.getUint32(e.offset + 8),
876
+ expire: t.getUint32(e.offset + 12),
877
+ minimum: t.getUint32(e.offset + 16)
878
+ };
879
+ e.offset += 20;
880
+ e.length -= 20;
881
+ return n;
882
+ }
883
+ });
884
+
885
+ const G = withRDLength({
886
+ bytes: t => c.bytes(t.exchange) + 2,
887
+ write(t, e, n) {
888
+ t.setUint16(e, n.preference || 0);
889
+ return c.write(t, e + 2, n.exchange);
890
+ },
891
+ read(t, e) {
892
+ const n = {
893
+ preference: t.getUint16(e.offset),
894
+ exchange: ""
895
+ };
896
+ advance(e, 2);
897
+ n.exchange = c.read(t, e);
898
+ return n;
899
+ }
900
+ });
901
+
902
+ const B = withRDLength({
903
+ bytes: t => f.bytes(t.key) + 4,
904
+ write(t, e, n) {
905
+ t.setUint16(e, n.flags);
906
+ t.setUint8(e + 2, 3);
907
+ t.setUint8(e + 3, n.algorithm);
908
+ return f.write(t, e + 4, n.key);
909
+ },
910
+ read(t, e) {
911
+ const n = t.getUint16(e.offset);
912
+ const r = t.getUint8(e.offset + 3);
913
+ advance(e, 4);
914
+ return {
915
+ flags: n,
916
+ algorithm: r,
917
+ key: f.read(t, e)
918
+ };
919
+ }
920
+ });
921
+
922
+ const k = withRDLength({
923
+ bytes: t => 18 + c.bytes(t.signersName) + f.bytes(t.signature),
924
+ write(t, e, n) {
925
+ t.setUint16(e, n.typeCovered);
926
+ t.setUint8(e + 2, n.algorithm);
927
+ t.setUint8(e + 3, n.labels);
928
+ t.setUint32(e + 4, n.originalTTL);
929
+ t.setUint32(e + 8, n.expiration);
930
+ t.setUint32(e + 12, n.inception);
931
+ t.setUint16(e + 16, n.keyTag);
932
+ e = c.write(t, e + 18, n.signersName);
933
+ return e = f.write(t, e, n.signature);
934
+ },
935
+ read(t, e) {
936
+ const n = t.getUint16(e.offset);
937
+ const r = t.getUint8(e.offset + 2);
938
+ const s = t.getUint8(e.offset + 3);
939
+ const a = t.getUint32(e.offset + 4);
940
+ const i = t.getUint32(e.offset + 8);
941
+ const o = t.getUint32(e.offset + 12);
942
+ const d = t.getUint16(e.offset + 16);
943
+ advance(e, 18);
944
+ return {
945
+ typeCovered: n,
946
+ algorithm: r,
947
+ labels: s,
948
+ originalTTL: a,
949
+ expiration: i,
950
+ inception: o,
951
+ keyTag: d,
952
+ signersName: c.read(t, e),
953
+ signature: f.read(t, e)
954
+ };
955
+ }
956
+ });
957
+
958
+ const $ = withRDLength({
959
+ bytes: t => c.bytes(t.mbox) + c.bytes(t.txt),
960
+ write(t, e, n) {
961
+ e = c.write(t, e, n.mbox);
962
+ return e = c.write(t, e, n.txt);
963
+ },
964
+ read: (t, e) => ({
965
+ mbox: c.read(t, e),
966
+ txt: c.read(t, e)
967
+ })
968
+ });
969
+
970
+ const q = withRDLength({
971
+ bytes: t => c.bytes(t.nextDomain) + u.bytes(t.rrtypes),
972
+ write(t, e, n) {
973
+ e = c.write(t, e, n.nextDomain);
974
+ return e = u.write(t, e, n.rrtypes);
975
+ },
976
+ read: (t, e) => ({
977
+ nextDomain: c.read(t, e),
978
+ rrtypes: u.read(t, e)
979
+ })
980
+ });
981
+
982
+ const Q = withRDLength({
983
+ bytes: t => d.bytes(t.salt) + d.bytes(t.nextDomain) + u.bytes(t.rrtypes) + 4,
984
+ write(t, e, n) {
985
+ t.setUint8(e, n.algorithm);
986
+ t.setUint8(e + 1, n.flags);
987
+ t.setUint16(e + 2, n.iterations);
988
+ e = d.write(t, e + 4, n.salt);
989
+ e = d.write(t, e, n.nextDomain);
990
+ return e = u.write(t, e, n.rrtypes);
991
+ },
992
+ read(t, e) {
993
+ const n = t.getUint8(e.offset);
994
+ const r = t.getUint8(e.offset + 1);
995
+ const s = t.getUint16(e.offset + 2);
996
+ advance(e, 4);
997
+ return {
998
+ algorithm: n,
999
+ flags: r,
1000
+ iterations: s,
1001
+ salt: d.read(t, e),
1002
+ nextDomain: d.read(t, e),
1003
+ rrtypes: u.read(t, e)
1004
+ };
1005
+ }
1006
+ });
1007
+
1008
+ const j = withRDLength({
1009
+ bytes: t => f.bytes(t.fingerprint) + 2,
1010
+ write(t, e, n) {
1011
+ t.setUint8(e, n.algorithm);
1012
+ t.setUint8(e + 1, n.hash);
1013
+ return f.write(t, e + 2, n.fingerprint);
1014
+ },
1015
+ read(t, e) {
1016
+ const n = t.getUint8(e.offset);
1017
+ const r = t.getUint8(e.offset + 1);
1018
+ advance(e, 2);
1019
+ return {
1020
+ algorithm: n,
1021
+ hash: r,
1022
+ fingerprint: f.read(t, e)
1023
+ };
1024
+ }
1025
+ });
1026
+
1027
+ const z = withRDLength({
1028
+ bytes: t => f.bytes(t.digest) + 4,
1029
+ write(t, e, n) {
1030
+ t.setUint16(e, n.keyTag);
1031
+ t.setUint8(e + 2, n.algorithm);
1032
+ t.setUint8(e + 3, n.digestType);
1033
+ return e = f.write(t, e + 4, n.digest);
1034
+ },
1035
+ read(t, e) {
1036
+ const n = t.getUint16(e.offset);
1037
+ const r = t.getUint8(e.offset + 2);
1038
+ const s = t.getUint8(e.offset + 3);
1039
+ advance(e, 4);
1040
+ return {
1041
+ keyTag: n,
1042
+ algorithm: r,
1043
+ digestType: s,
1044
+ digest: f.read(t, e)
1045
+ };
1046
+ }
1047
+ });
1048
+
1049
+ const W = withRDLength({
1050
+ bytes: t => d.bytes(t.flags) + d.bytes(t.services) + d.bytes(t.regexp) + c.bytes(t.replacement) + 4,
1051
+ write(t, e, n) {
1052
+ t.setUint16(e, n.order);
1053
+ t.setUint16(e + 2, n.preference);
1054
+ e = d.write(t, e + 4, n.flags);
1055
+ e = d.write(t, e, n.services);
1056
+ e = d.write(t, e, n.regexp);
1057
+ return e = c.write(t, e, n.replacement);
1058
+ },
1059
+ read(t, e) {
1060
+ const n = t.getUint16(e.offset);
1061
+ const r = t.getUint16(e.offset + 2);
1062
+ advance(e, 4);
1063
+ return {
1064
+ order: n,
1065
+ preference: r,
1066
+ flags: d.read(t, e),
1067
+ services: d.read(t, e),
1068
+ regexp: d.read(t, e),
1069
+ replacement: c.read(t, e)
1070
+ };
1071
+ }
1072
+ });
1073
+
1074
+ const Z = withRDLength({
1075
+ bytes: t => f.bytes(t.certificate) + 3,
1076
+ write(t, e, n) {
1077
+ t.setUint8(e, n.usage);
1078
+ t.setUint8(e + 1, n.selector);
1079
+ t.setUint8(e + 2, n.matchingType);
1080
+ return f.write(t, e + 3, n.certificate);
1081
+ },
1082
+ read(t, e) {
1083
+ const n = t.getUint8(e.offset);
1084
+ const r = t.getUint8(e.offset + 1);
1085
+ const s = t.getUint8(e.offset + 2);
1086
+ advance(e, 3);
1087
+ return {
1088
+ usage: n,
1089
+ selector: r,
1090
+ matchingType: s,
1091
+ certificate: f.read(t, e)
1092
+ };
1093
+ }
1094
+ });
1095
+
1096
+ const J = withRDLength({
1097
+ bytes: t => c.bytes(t.name) + v.bytes(t.params) + 2,
1098
+ write(t, e, n) {
1099
+ t.setUint16(e, n.priority || 0);
1100
+ e = c.write(t, e + 2, n.name);
1101
+ return e = v.write(t, e, n.params);
1102
+ },
1103
+ read(t, e) {
1104
+ const n = t.getUint16(e.offset);
1105
+ advance(e, 2);
1106
+ return {
1107
+ name: c.read(t, e),
1108
+ priority: n,
1109
+ params: v.read(t, e)
1110
+ };
1111
+ }
1112
+ });
1113
+
1114
+ const tt = withRDLength(array(I));
1115
+
1116
+ const et = 32768;
1117
+
1118
+ const nt = {
1119
+ bytes(t) {
1120
+ const n = 8 + c.bytes(t.type === e.OPT ? "." : t.name);
1121
+ switch (t.type) {
1122
+ case e.A:
1123
+ return n + _.bytes(t.data);
1124
+
1125
+ case e.NS:
1126
+ return n + x.bytes(t.data);
1127
+
1128
+ case e.SOA:
1129
+ return n + F.bytes(t.data);
1130
+
1131
+ case e.HINFO:
1132
+ return n + M.bytes(t.data);
1133
+
1134
+ case e.MX:
1135
+ return n + G.bytes(t.data);
1136
+
1137
+ case e.TXT:
1138
+ return n + Y.bytes(t.data);
1139
+
1140
+ case e.RP:
1141
+ return n + $.bytes(t.data);
1142
+
1143
+ case e.AAAA:
1144
+ return n + V.bytes(t.data);
1145
+
1146
+ case e.SRV:
1147
+ return n + K.bytes(t.data);
1148
+
1149
+ case e.NAPTR:
1150
+ return n + W.bytes(t.data);
1151
+
1152
+ case e.OPT:
1153
+ return n + tt.bytes(t.data);
1154
+
1155
+ case e.DS:
1156
+ return n + z.bytes(t.data);
1157
+
1158
+ case e.SSHFP:
1159
+ return n + j.bytes(t.data);
1160
+
1161
+ case e.RRSIG:
1162
+ return n + k.bytes(t.data);
1163
+
1164
+ case e.NSEC:
1165
+ return n + q.bytes(t.data);
1166
+
1167
+ case e.DNSKEY:
1168
+ return n + B.bytes(t.data);
1169
+
1170
+ case e.NSEC3:
1171
+ return n + Q.bytes(t.data);
1172
+
1173
+ case e.TLSA:
1174
+ return n + Z.bytes(t.data);
1175
+
1176
+ case e.SVCB:
1177
+ case e.HTTPS:
1178
+ return n + J.bytes(t.data);
1179
+
1180
+ case e.CAA:
1181
+ return n + X.bytes(t.data);
1182
+
1183
+ default:
1184
+ return n + H.bytes(t.data);
1185
+ }
1186
+ },
1187
+ write(t, n, r) {
1188
+ if (r.type === e.OPT) {
1189
+ n = c.write(t, n, ".");
1190
+ t.setUint16(n, r.type);
1191
+ t.setUint16(n + 2, r.udpPayloadSize || 4096);
1192
+ t.setUint8(n + 4, r.extendedRcode || 0);
1193
+ t.setUint8(n + 5, r.ednsVersion || 0);
1194
+ t.setUint16(n + 6, r.flags || 0);
1195
+ return tt.write(t, n += 8, r.data);
1196
+ }
1197
+ n = c.write(t, n, r.name);
1198
+ t.setUint16(n, r.type);
1199
+ t.setUint16(n + 2, (r.class || 0) | (r.flush ? et : 0));
1200
+ t.setUint32(n + 4, r.ttl || 0);
1201
+ n += 8;
1202
+ switch (r.type) {
1203
+ case e.A:
1204
+ return _.write(t, n, r.data);
1205
+
1206
+ case e.NS:
1207
+ return x.write(t, n, r.data);
1208
+
1209
+ case e.SOA:
1210
+ return F.write(t, n, r.data);
1211
+
1212
+ case e.HINFO:
1213
+ return M.write(t, n, r.data);
1214
+
1215
+ case e.MX:
1216
+ return G.write(t, n, r.data);
1217
+
1218
+ case e.TXT:
1219
+ return Y.write(t, n, r.data);
1220
+
1221
+ case e.RP:
1222
+ return $.write(t, n, r.data);
1223
+
1224
+ case e.AAAA:
1225
+ return V.write(t, n, r.data);
1226
+
1227
+ case e.SRV:
1228
+ return K.write(t, n, r.data);
1229
+
1230
+ case e.NAPTR:
1231
+ return W.write(t, n, r.data);
1232
+
1233
+ case e.DS:
1234
+ return z.write(t, n, r.data);
1235
+
1236
+ case e.SSHFP:
1237
+ return j.write(t, n, r.data);
1238
+
1239
+ case e.RRSIG:
1240
+ return k.write(t, n, r.data);
1241
+
1242
+ case e.NSEC:
1243
+ return q.write(t, n, r.data);
1244
+
1245
+ case e.DNSKEY:
1246
+ return B.write(t, n, r.data);
1247
+
1248
+ case e.NSEC3:
1249
+ return Q.write(t, n, r.data);
1250
+
1251
+ case e.TLSA:
1252
+ return Z.write(t, n, r.data);
1253
+
1254
+ case e.SVCB:
1255
+ case e.HTTPS:
1256
+ return J.write(t, n, r.data);
1257
+
1258
+ case e.CAA:
1259
+ return X.write(t, n, r.data);
1260
+
1261
+ default:
1262
+ return H.write(t, n, r.data);
1263
+ }
1264
+ },
1265
+ read(t, n) {
1266
+ const r = c.read(t, n);
1267
+ const s = t.getUint16(n.offset);
1268
+ if (s === e.OPT) {
1269
+ const e = t.getUint16(n.offset + 2) || 4096;
1270
+ const r = t.getUint8(n.offset + 4);
1271
+ const a = t.getUint8(n.offset + 5);
1272
+ const i = t.getUint16(n.offset + 6);
1273
+ advance(n, 8);
1274
+ return {
1275
+ type: s,
1276
+ udpPayloadSize: e,
1277
+ extendedRcode: r,
1278
+ ednsVersion: a,
1279
+ flags: i,
1280
+ data: tt.read(t, n)
1281
+ };
1282
+ }
1283
+ const a = t.getUint16(n.offset + 2);
1284
+ const i = t.getUint32(n.offset + 4);
1285
+ advance(n, 8);
1286
+ const o = {
1287
+ name: r,
1288
+ type: s,
1289
+ class: -32769 & a,
1290
+ flush: !!(a & et),
1291
+ ttl: i,
1292
+ data: null
1293
+ };
1294
+ switch (o.type) {
1295
+ case e.A:
1296
+ o.data = _.read(t, n);
1297
+ return o;
1298
+
1299
+ case e.NS:
1300
+ o.data = x.read(t, n);
1301
+ return o;
1302
+
1303
+ case e.SOA:
1304
+ o.data = F.read(t, n);
1305
+ return o;
1306
+
1307
+ case e.HINFO:
1308
+ o.data = M.read(t, n);
1309
+ return o;
1310
+
1311
+ case e.MX:
1312
+ o.data = G.read(t, n);
1313
+ return o;
1314
+
1315
+ case e.TXT:
1316
+ o.data = Y.read(t, n);
1317
+ return o;
1318
+
1319
+ case e.RP:
1320
+ o.data = $.read(t, n);
1321
+ return o;
1322
+
1323
+ case e.AAAA:
1324
+ o.data = V.read(t, n);
1325
+ return o;
1326
+
1327
+ case e.SRV:
1328
+ o.data = K.read(t, n);
1329
+ return o;
1330
+
1331
+ case e.NAPTR:
1332
+ o.data = W.read(t, n);
1333
+ return o;
1334
+
1335
+ case e.DS:
1336
+ o.data = z.read(t, n);
1337
+ return o;
1338
+
1339
+ case e.SSHFP:
1340
+ o.data = j.read(t, n);
1341
+ return o;
1342
+
1343
+ case e.RRSIG:
1344
+ o.data = k.read(t, n);
1345
+ return o;
1346
+
1347
+ case e.NSEC:
1348
+ o.data = q.read(t, n);
1349
+ return o;
1350
+
1351
+ case e.DNSKEY:
1352
+ o.data = B.read(t, n);
1353
+ return o;
1354
+
1355
+ case e.NSEC3:
1356
+ o.data = Q.read(t, n);
1357
+ return o;
1358
+
1359
+ case e.TLSA:
1360
+ o.data = Z.read(t, n);
1361
+ return o;
1362
+
1363
+ case e.SVCB:
1364
+ case e.HTTPS:
1365
+ o.data = J.read(t, n);
1366
+ return o;
1367
+
1368
+ case e.CAA:
1369
+ o.data = X.read(t, n);
1370
+ return o;
1371
+
1372
+ default:
1373
+ o.data = H.read(t, n);
1374
+ return o;
1375
+ }
1376
+ }
1377
+ };
1378
+
1379
+ const readList = (t, e, n, r) => {
1380
+ if (!r) {
1381
+ return;
1382
+ }
1383
+ const {offset: s, length: a} = n;
1384
+ const i = [];
1385
+ for (let o = 0; o < r && n.offset - s < a; o++) {
1386
+ i.push(t.read(e, n));
1387
+ }
1388
+ return i;
1389
+ };
1390
+
1391
+ const rt = {
1392
+ bytes(t) {
1393
+ const {questions: e, answers: n, authorities: r, additionals: s} = t;
1394
+ let a = 12;
1395
+ let i = 0;
1396
+ for (i = 0; e && i < e.length; i++) {
1397
+ a += h.bytes(e[i]);
1398
+ }
1399
+ for (i = 0; n && i < n.length; i++) {
1400
+ a += nt.bytes(n[i]);
1401
+ }
1402
+ for (i = 0; r && i < r.length; i++) {
1403
+ a += nt.bytes(r[i]);
1404
+ }
1405
+ for (i = 0; s && i < s.length; i++) {
1406
+ a += nt.bytes(s[i]);
1407
+ }
1408
+ return a;
1409
+ },
1410
+ write(e, n, r) {
1411
+ const {questions: s, answers: a, authorities: i, additionals: o} = r;
1412
+ let c = 32767 & (r.flags || 0) | (r.type || t.QUERY) | (r.rtype || 0);
1413
+ e.setUint16(n, r.id || 0);
1414
+ e.setUint16(n + 2, c);
1415
+ e.setUint16(n + 4, r.questions?.length || 0);
1416
+ e.setUint16(n + 6, r.answers?.length || 0);
1417
+ e.setUint16(n + 8, r.authorities?.length || 0);
1418
+ e.setUint16(n + 10, r.additionals?.length || 0);
1419
+ n += 12;
1420
+ let f = 0;
1421
+ for (f = 0; s && f < s.length; f++) {
1422
+ n = h.write(e, n, s[f]);
1423
+ }
1424
+ for (f = 0; a && f < a.length; f++) {
1425
+ n = nt.write(e, n, a[f]);
1426
+ }
1427
+ for (f = 0; i && f < i.length; f++) {
1428
+ n = nt.write(e, n, i[f]);
1429
+ }
1430
+ for (f = 0; o && f < o.length; f++) {
1431
+ n = nt.write(e, n, o[f]);
1432
+ }
1433
+ return n;
1434
+ },
1435
+ read(e, n) {
1436
+ const r = e.getUint16(n.offset);
1437
+ const s = e.getUint16(n.offset + 2);
1438
+ const a = e.getUint16(n.offset + 4);
1439
+ const i = e.getUint16(n.offset + 6);
1440
+ const o = e.getUint16(n.offset + 8);
1441
+ const c = e.getUint16(n.offset + 10);
1442
+ advance(n, 12);
1443
+ return {
1444
+ id: r,
1445
+ flags: s,
1446
+ rtype: 15 & s,
1447
+ type: s & t.RESPONSE ? t.RESPONSE : t.QUERY,
1448
+ questions: readList(h, e, n, a),
1449
+ answers: readList(nt, e, n, i),
1450
+ authorities: readList(nt, e, n, o),
1451
+ additionals: readList(nt, e, n, c)
1452
+ };
1453
+ }
1454
+ };
1455
+
1456
+ function decode(t) {
1457
+ const e = "buffer" in t ? new DataView(t.buffer, t.byteOffset, t.byteLength) : new DataView(t);
1458
+ return rt.read(e, {
1459
+ offset: 0,
1460
+ length: e.byteLength
1461
+ });
1462
+ }
1463
+
1464
+ function streamDecode(t) {
1465
+ const e = "buffer" in t ? new DataView(t.buffer, t.byteOffset, t.byteLength) : new DataView(t);
1466
+ const n = Math.min(e.byteLength, e.getUint16(0)) - 2;
1467
+ return rt.read(e, {
1468
+ offset: 2,
1469
+ length: n
1470
+ });
1471
+ }
1472
+
1473
+ function encodingLength(t) {
1474
+ return rt.bytes(t);
1475
+ }
1476
+
1477
+ function encode(t) {
1478
+ const e = new ArrayBuffer(rt.bytes(t));
1479
+ const n = rt.write(new DataView(e), 0, t);
1480
+ return new Uint8Array(e, 0, n);
1481
+ }
1482
+
1483
+ function streamEncode(t) {
1484
+ const e = new ArrayBuffer(rt.bytes(t) + 2);
1485
+ const n = new DataView(e);
1486
+ const r = rt.write(n, 2, t);
1487
+ n.setUint16(0, r);
1488
+ return new Uint8Array(e, 0, r);
1489
+ }
1490
+
1491
+ export { s as OptCode, r as PacketFlag, t as PacketType, n as RecordClass, e as RecordType, decode, encode, encodingLength, streamDecode, streamEncode };
1492
+ //# sourceMappingURL=dns-message.mjs.map