@amritk/nish-aarch64-darwin 0.35.0 → 0.36.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/INSTALL.md +6 -1
  2. package/bin/nish +0 -0
  3. package/docs/AI.md +9 -2
  4. package/package.json +1 -1
  5. package/runtime/nish.d.ts +4612 -430
  6. package/runtime/vite.d.ts +30 -0
  7. package/runtime/vite.mjs +150 -0
  8. package/scripts/build.sh +108 -13
  9. package/std/base64.ts +34 -5
  10. package/std/bytes.ts +256 -40
  11. package/std/cli-args.ts +296 -70
  12. package/std/cli-flags.ts +184 -19
  13. package/std/cli.ts +475 -54
  14. package/std/collections.ts +121 -23
  15. package/std/compress/checksum.ts +44 -14
  16. package/std/compress/deflate.ts +224 -111
  17. package/std/compress/gzip.ts +217 -53
  18. package/std/compress/zlib.ts +63 -7
  19. package/std/crypto/aes.ts +80 -9
  20. package/std/crypto/base64url.ts +22 -0
  21. package/std/crypto/bcrypt-batch.ts +88 -21
  22. package/std/crypto/bcrypt.ts +60 -0
  23. package/std/crypto/chacha20poly1305.ts +53 -0
  24. package/std/crypto/ct.ts +32 -13
  25. package/std/crypto/ed25519.ts +47 -0
  26. package/std/crypto/hkdf.ts +198 -13
  27. package/std/crypto/hmac.ts +235 -31
  28. package/std/crypto/jwt.ts +192 -63
  29. package/std/crypto/p256.ts +159 -16
  30. package/std/crypto/p384.ts +28 -3
  31. package/std/crypto/pki-roots.ts +32 -2
  32. package/std/crypto/pki.ts +81 -15
  33. package/std/crypto/rsa.ts +33 -3
  34. package/std/crypto/sha1.ts +3 -0
  35. package/std/crypto/sha256.ts +24 -1
  36. package/std/crypto/sha512.ts +99 -14
  37. package/std/crypto/x25519.ts +152 -14
  38. package/std/crypto/x509-random.ts +10 -0
  39. package/std/crypto/x509.ts +67 -7
  40. package/std/json-equal.ts +19 -0
  41. package/std/json-format.ts +112 -13
  42. package/std/json-number.ts +64 -14
  43. package/std/json-pointer.ts +23 -1
  44. package/std/json-tokenizer.ts +100 -29
  45. package/std/json-typed.ts +713 -66
  46. package/std/json-value.ts +400 -124
  47. package/std/json.ts +138 -10
  48. package/std/map.ts +25 -7
  49. package/std/math.ts +36 -4
  50. package/std/net/buffer-pool.ts +42 -11
  51. package/std/net/dns-config.ts +109 -23
  52. package/std/net/dns-message.ts +62 -7
  53. package/std/net/dns-resolver.ts +247 -53
  54. package/std/net/dns.ts +203 -35
  55. package/std/net/fetch.ts +151 -61
  56. package/std/net/handler.ts +278 -80
  57. package/std/net/hpack.ts +262 -52
  58. package/std/net/http-compress.ts +125 -15
  59. package/std/net/http-fields.ts +85 -9
  60. package/std/net/http1-client-codec.ts +100 -19
  61. package/std/net/http1-codec.ts +235 -27
  62. package/std/net/http1-server.ts +343 -85
  63. package/std/net/http2-frame.ts +272 -35
  64. package/std/net/http2-tls.ts +135 -34
  65. package/std/net/http2.ts +247 -106
  66. package/std/net/http3-frame.ts +154 -17
  67. package/std/net/http3-server.ts +246 -96
  68. package/std/net/http3.ts +307 -115
  69. package/std/net/outbound.ts +37 -3
  70. package/std/net/postgres-carrier.ts +144 -8
  71. package/std/net/postgres.ts +723 -103
  72. package/std/net/prefork.ts +164 -31
  73. package/std/net/qpack.ts +105 -18
  74. package/std/net/quic-conn-ack.ts +59 -12
  75. package/std/net/quic-conn-cid.ts +124 -27
  76. package/std/net/quic-conn-params.ts +70 -10
  77. package/std/net/quic-datagram.ts +43 -3
  78. package/std/net/quic-frame.ts +286 -12
  79. package/std/net/quic-listener.ts +101 -32
  80. package/std/net/quic-packet.ts +302 -21
  81. package/std/net/quic-recovery.ts +228 -44
  82. package/std/net/quic-stream.ts +353 -91
  83. package/std/net/quic.ts +489 -171
  84. package/std/net/router.ts +87 -40
  85. package/std/net/tls/client.ts +166 -51
  86. package/std/net/tls/codec.ts +413 -56
  87. package/std/net/tls/record-client.ts +110 -55
  88. package/std/net/tls/record-server.ts +159 -59
  89. package/std/net/tls/record.ts +109 -12
  90. package/std/net/tls/schedule.ts +235 -26
  91. package/std/net/tls/ticket.ts +159 -40
  92. package/std/net/tls/verify.ts +49 -3
  93. package/std/net/tls-tcp.ts +250 -45
  94. package/std/net/tls.ts +221 -59
  95. package/std/net/upstream.ts +81 -45
  96. package/std/net/url.ts +97 -13
  97. package/std/net/websocket.ts +122 -12
  98. package/std/net/webtransport.ts +220 -89
  99. package/std/pair.ts +10 -2
  100. package/std/random.ts +34 -9
  101. package/std/regex.ts +352 -198
  102. package/std/region.ts +70 -15
  103. package/std/secret.ts +52 -11
  104. package/std/sort.ts +17 -2
  105. package/std/sqlite.ts +256 -35
  106. package/std/sync/ring.ts +205 -35
  107. package/std/sync/shm.ts +194 -16
  108. package/std/term-io.ts +137 -64
  109. package/std/term-pixels.ts +144 -19
  110. package/std/term-probe.ts +66 -25
  111. package/std/term-rate.ts +128 -57
  112. package/std/term.ts +332 -121
  113. package/std/testing.ts +130 -32
  114. package/std/text.ts +73 -7
  115. package/std/threads.ts +229 -41
  116. package/std/yaml-json.ts +94 -82
  117. package/std/yaml-lines.ts +47 -15
  118. package/std/yaml-write.ts +24 -16
  119. package/std/yaml.ts +764 -384
package/std/bytes.ts CHANGED
@@ -8,18 +8,21 @@
8
8
  *
9
9
  * import { getU32BE, setU16LE } from "nish/bytes";
10
10
  *
11
- * const header: u8[] = [0, 0, 1, 0, 0, 0];
12
- * const length = getU32BE(header, 0); // 256
13
- * setU16LE(header, 4, toU16(513)); // header[4] = 1, header[5] = 2
11
+ * export const main = (): i32 => {
12
+ * const header: u8[] = [0, 0, 1, 0, 0, 0];
13
+ * const length = getU32BE(header, 0); // 256
14
+ * setU16LE(header, 4, toU16(513)); // header[4] = 1, header[5] = 2
15
+ * return toI32(length);
16
+ * };
14
17
  *
15
- * Every function takes the array and the offset of its first byte; the `LE`
18
+ * **Every function takes the array and the offset of its first byte; the `LE`
16
19
  * name puts the least significant byte there, the `BE` name the most
17
- * significant. The widths are `u16`, `u32` and `u64`, the signed `i32` and
20
+ * significant.** The widths are `u16`, `u32` and `u64`, the signed `i32` and
18
21
  * `i64`, which are the same bytes read as two's complement, and `f64`, whose
19
22
  * bytes are its IEEE 754 bits (`f64ToBits`). There is no `f32`: the language
20
23
  * has no bit cast for one.
21
24
  *
22
- * Each access is an ordinary index, so an offset whose bytes do not all lie in
25
+ * **Each access is an ordinary index**, so an offset whose bytes do not all lie in
23
26
  * the array panics `index`, naming the first byte that does not. A guard in
24
27
  * the caller does not yet remove these checks: in a loop guarded by
25
28
  * `off + 3 < b.length`, the checker proves an index it can see but not one
@@ -31,8 +34,8 @@
31
34
  * eight bytes unchecked, which lowers to one load and a byte swap. An offset
32
35
  * outside the range still goes byte by byte, so it panics as the others do.
33
36
  *
34
- * The in-range answers are byte for byte those of the copies `std/` keeps for
35
- * itself: `sha256LoadWord` (`std/crypto/sha256.ts`) for `getU32BE`,
37
+ * **The in-range answers are byte for byte those of the copies `std/` keeps for
38
+ * itself**: `sha256LoadWord` (`std/crypto/sha256.ts`) for `getU32BE`,
36
39
  * `chacha20Word` and `poly1305Le64` (`std/crypto/chacha20poly1305.ts`) for
37
40
  * `getU32LE` and `getU64LE`, `loadWord` and `storeWord` (`std/crypto/sha512.ts`)
38
41
  * for `getU64BE` and `setU64BE`, `http2FramePut32` (`std/net/http2-frame.ts`)
@@ -41,8 +44,8 @@
41
44
  * TLS word helpers read zero past the end and drop bytes written there, which
42
45
  * their callers rely on, where this module panics.
43
46
  *
44
- * Under Node (`docs/RUN_UNDER_NODE.md`) the `u16` and `u32` functions are
45
- * expected to answer as they do natively, because the top byte of a `u32` is
47
+ * **Under Node (`docs/RUN_UNDER_NODE.md`) the `u16` and `u32` functions are
48
+ * expected to answer as they do natively**, because the top byte of a `u32` is
46
49
  * multiplied in rather than shifted and each byte written is masked before
47
50
  * its `toU8`: there `<<` turns bit 31 into a sign and the prelude's `toU8`
48
51
  * and `toU32` saturate, and natively the multiply and the mask fold into the
@@ -52,40 +55,81 @@
52
55
  * 64-bit functions and `f64` meet its BigInt `u64` and `i64`, which `toU8`
53
56
  * refuses.
54
57
  *
55
- * The module also has the runs a parser walks and the copy it makes of them.
58
+ * **The module also has the runs a parser walks and the copy it makes of
59
+ * them.**
56
60
  * `skipBlank`, `skipDigits`, `skipJsonText` and `skipJsonPlain` each answer
57
61
  * the first index in a range whose byte is not in their class — JSON's blanks,
58
62
  * the ASCII digits, the bytes a JSON string holds as themselves, the bytes a
59
63
  * JSON writer copies without an escape — and `copyBytes` copies a
60
64
  * window of one array into another, or into itself, as one move:
61
65
  *
62
- * const text: u8[] = [32, 32, 52, 50, 44]; // " 42,"
63
- * const start = skipBlank(text, 0, 5); // 2
64
- * const end = skipDigits(text, start, 5); // 4
66
+ * import { skipBlank, skipDigits } from "nish/bytes";
65
67
  *
66
- * The four runs clamp their range and never panic; `copyBytes` panics on a
67
- * range outside its array. Natively each is a runtime kernel
68
+ * export const main = (): i32 => {
69
+ * const text: u8[] = [32, 32, 52, 50, 44]; // " 42,"
70
+ * const start = skipBlank(text, 0, 5); // 2
71
+ * const end = skipDigits(text, start, 5); // 4
72
+ * return end - start;
73
+ * };
74
+ *
75
+ * **The four runs clamp their range and never panic; `copyBytes` panics on a
76
+ * range outside its array.** Natively each is a runtime kernel
68
77
  * (docs/LANGUAGE.md, "Byte runs"), and the runs are variable-time: they are
69
78
  * for text, never for secret data.
70
79
  */
71
80
 
72
- /** The `u16` whose low byte is `b[off]` and high byte `b[off + 1]`. */
81
+ /**
82
+ * The `u16` whose low byte is `b[off]` and high byte `b[off + 1]`.
83
+ *
84
+ * @param b The bytes the number is read from; they are not changed.
85
+ * @param off Where in `b` its first byte is; it covers `b[off]` to
86
+ * `b[off + 1]`, and a byte of those outside `b` panics `index`.
87
+ * @returns The number read.
88
+ */
73
89
  export const getU16LE = (b: u8[], off: i32): u16 => toU16(b[off]) | (toU16(b[off + 1]) << 8)
74
90
 
75
- /** The `u16` whose high byte is `b[off]` and low byte `b[off + 1]`. */
91
+ /**
92
+ * The `u16` whose high byte is `b[off]` and low byte `b[off + 1]`.
93
+ *
94
+ * @param b The bytes the number is read from; they are not changed.
95
+ * @param off Where in `b` its first byte is; it covers `b[off]` to
96
+ * `b[off + 1]`, and a byte of those outside `b` panics `index`.
97
+ * @returns The number read.
98
+ */
76
99
  export const getU16BE = (b: u8[], off: i32): u16 => (toU16(b[off]) << 8) | toU16(b[off + 1])
77
100
 
78
- /** The `u32` whose bytes, least significant first, are `b[off]` to `b[off + 3]`. */
101
+ /**
102
+ * The `u32` whose bytes, least significant first, are `b[off]` to `b[off + 3]`.
103
+ *
104
+ * @param b The bytes the number is read from; they are not changed.
105
+ * @param off Where in `b` its first byte is; it covers `b[off]` to
106
+ * `b[off + 3]`, and a byte of those outside `b` panics `index`.
107
+ * @returns The number read.
108
+ */
79
109
  export const getU32LE = (b: u8[], off: i32): u32 =>
80
110
  (toU32(b[off]) | (toU32(b[off + 1]) << 8) | (toU32(b[off + 2]) << 16)) +
81
111
  toU32(b[off + 3]) * toU32(0x1000000)
82
112
 
83
- /** The `u32` whose bytes, most significant first, are `b[off]` to `b[off + 3]`. */
113
+ /**
114
+ * The `u32` whose bytes, most significant first, are `b[off]` to `b[off + 3]`.
115
+ *
116
+ * @param b The bytes the number is read from; they are not changed.
117
+ * @param off Where in `b` its first byte is; it covers `b[off]` to
118
+ * `b[off + 3]`, and a byte of those outside `b` panics `index`.
119
+ * @returns The number read.
120
+ */
84
121
  export const getU32BE = (b: u8[], off: i32): u32 =>
85
122
  toU32(b[off]) * toU32(0x1000000) +
86
123
  ((toU32(b[off + 1]) << 16) | (toU32(b[off + 2]) << 8) | toU32(b[off + 3]))
87
124
 
88
- /** The `u64` whose bytes, least significant first, are `b[off]` to `b[off + 7]`. */
125
+ /**
126
+ * The `u64` whose bytes, least significant first, are `b[off]` to `b[off + 7]`.
127
+ *
128
+ * @param b The bytes the number is read from; they are not changed.
129
+ * @param off Where in `b` its first byte is; it covers `b[off]` to
130
+ * `b[off + 7]`, and a byte of those outside `b` panics `index`.
131
+ * @returns The number read.
132
+ */
89
133
  export const getU64LE = (b: u8[], off: i32): u64 => {
90
134
  let v = toU64(0)
91
135
  for (let i: i32 = 0; i < 8; i++) {
@@ -108,6 +152,11 @@ const getU64BEByByte = (b: u8[], off: i32): u64 => {
108
152
  * The fast path's ors are grouped in pairs, which LLVM folds into one load and
109
153
  * a `bswap`; a flat chain of eight `or`s stayed byte by byte. The byte loop is
110
154
  * its own function so its last load is not merged with the fast path's.
155
+ *
156
+ * @param b The bytes the number is read from; they are not changed.
157
+ * @param off Where in `b` its first byte is; it covers `b[off]` to
158
+ * `b[off + 7]`, and a byte of those outside `b` panics `index`.
159
+ * @returns The number read.
111
160
  */
112
161
  export const getU64BE = (b: u8[], off: i32): u64 => {
113
162
  if (off >= 0 && off < 2147483640 && off + 8 <= toI32(b.length)) {
@@ -123,37 +172,100 @@ export const getU64BE = (b: u8[], off: i32): u64 => {
123
172
  return getU64BEByByte(b, off)
124
173
  }
125
174
 
126
- /** `getU32LE`'s bits as a two's-complement `i32`. */
175
+ /**
176
+ * `getU32LE`'s bits as a two's-complement `i32`.
177
+ *
178
+ * @param b The bytes the number is read from; they are not changed.
179
+ * @param off Where in `b` its first byte is; it covers `b[off]` to
180
+ * `b[off + 3]`, and a byte of those outside `b` panics `index`.
181
+ * @returns The number read, from -2^31 to 2^31 - 1.
182
+ */
127
183
  export const getI32LE = (b: u8[], off: i32): i32 => toI32(getU32LE(b, off))
128
184
 
129
- /** `getU32BE`'s bits as a two's-complement `i32`. */
185
+ /**
186
+ * `getU32BE`'s bits as a two's-complement `i32`.
187
+ *
188
+ * @param b The bytes the number is read from; they are not changed.
189
+ * @param off Where in `b` its first byte is; it covers `b[off]` to
190
+ * `b[off + 3]`, and a byte of those outside `b` panics `index`.
191
+ * @returns The number read, from -2^31 to 2^31 - 1.
192
+ */
130
193
  export const getI32BE = (b: u8[], off: i32): i32 => toI32(getU32BE(b, off))
131
194
 
132
- /** `getU64LE`'s bits as a two's-complement `i64`. */
195
+ /**
196
+ * `getU64LE`'s bits as a two's-complement `i64`.
197
+ *
198
+ * @param b The bytes the number is read from; they are not changed.
199
+ * @param off Where in `b` its first byte is; it covers `b[off]` to
200
+ * `b[off + 7]`, and a byte of those outside `b` panics `index`.
201
+ * @returns The number read, from -2^63 to 2^63 - 1.
202
+ */
133
203
  export const getI64LE = (b: u8[], off: i32): i64 => toI64(getU64LE(b, off))
134
204
 
135
- /** `getU64BE`'s bits as a two's-complement `i64`. */
205
+ /**
206
+ * `getU64BE`'s bits as a two's-complement `i64`.
207
+ *
208
+ * @param b The bytes the number is read from; they are not changed.
209
+ * @param off Where in `b` its first byte is; it covers `b[off]` to
210
+ * `b[off + 7]`, and a byte of those outside `b` panics `index`.
211
+ * @returns The number read, from -2^63 to 2^63 - 1.
212
+ */
136
213
  export const getI64BE = (b: u8[], off: i32): i64 => toI64(getU64BE(b, off))
137
214
 
138
- /** The `f64` whose IEEE 754 bits are `getU64LE`'s. */
215
+ /**
216
+ * The `f64` whose IEEE 754 bits are `getU64LE`'s.
217
+ *
218
+ * @param b The bytes the number is read from; they are not changed.
219
+ * @param off Where in `b` its first byte is; it covers `b[off]` to
220
+ * `b[off + 7]`, and a byte of those outside `b` panics `index`.
221
+ * @returns The double whose bits the eight bytes are.
222
+ */
139
223
  export const getF64LE = (b: u8[], off: i32): f64 => bitsToF64(toI64(getU64LE(b, off)))
140
224
 
141
- /** The `f64` whose IEEE 754 bits are `getU64BE`'s. */
225
+ /**
226
+ * The `f64` whose IEEE 754 bits are `getU64BE`'s.
227
+ *
228
+ * @param b The bytes the number is read from; they are not changed.
229
+ * @param off Where in `b` its first byte is; it covers `b[off]` to
230
+ * `b[off + 7]`, and a byte of those outside `b` panics `index`.
231
+ * @returns The double whose bits the eight bytes are.
232
+ */
142
233
  export const getF64BE = (b: u8[], off: i32): f64 => bitsToF64(toI64(getU64BE(b, off)))
143
234
 
144
- /** Writes `v` into `b[off]` and `b[off + 1]`, low byte first. */
235
+ /**
236
+ * Writes `v` into `b[off]` and `b[off + 1]`, low byte first.
237
+ *
238
+ * @param b The bytes written into; only the two at `off` change.
239
+ * @param off Where in `b` the first byte goes; it covers `b[off]` to
240
+ * `b[off + 1]`, and a byte of those outside `b` panics `index`.
241
+ * @param v The number to store.
242
+ */
145
243
  export const setU16LE = (b: u8[], off: i32, v: u16): void => {
146
244
  b[off] = toU8(v & 255)
147
245
  b[off + 1] = toU8((v >> 8) & 255)
148
246
  }
149
247
 
150
- /** Writes `v` into `b[off]` and `b[off + 1]`, high byte first. */
248
+ /**
249
+ * Writes `v` into `b[off]` and `b[off + 1]`, high byte first.
250
+ *
251
+ * @param b The bytes written into; only the two at `off` change.
252
+ * @param off Where in `b` the first byte goes; it covers `b[off]` to
253
+ * `b[off + 1]`, and a byte of those outside `b` panics `index`.
254
+ * @param v The number to store.
255
+ */
151
256
  export const setU16BE = (b: u8[], off: i32, v: u16): void => {
152
257
  b[off] = toU8((v >> 8) & 255)
153
258
  b[off + 1] = toU8(v & 255)
154
259
  }
155
260
 
156
- /** Writes `v` into `b[off]` to `b[off + 3]`, least significant byte first. */
261
+ /**
262
+ * Writes `v` into `b[off]` to `b[off + 3]`, least significant byte first.
263
+ *
264
+ * @param b The bytes written into; only the four at `off` change.
265
+ * @param off Where in `b` the first byte goes; it covers `b[off]` to
266
+ * `b[off + 3]`, and a byte of those outside `b` panics `index`.
267
+ * @param v The number to store.
268
+ */
157
269
  export const setU32LE = (b: u8[], off: i32, v: u32): void => {
158
270
  b[off] = toU8(v & 255)
159
271
  b[off + 1] = toU8((v >> 8) & 255)
@@ -161,7 +273,14 @@ export const setU32LE = (b: u8[], off: i32, v: u32): void => {
161
273
  b[off + 3] = toU8((v >> 24) & 255)
162
274
  }
163
275
 
164
- /** Writes `v` into `b[off]` to `b[off + 3]`, most significant byte first. */
276
+ /**
277
+ * Writes `v` into `b[off]` to `b[off + 3]`, most significant byte first.
278
+ *
279
+ * @param b The bytes written into; only the four at `off` change.
280
+ * @param off Where in `b` the first byte goes; it covers `b[off]` to
281
+ * `b[off + 3]`, and a byte of those outside `b` panics `index`.
282
+ * @param v The number to store.
283
+ */
165
284
  export const setU32BE = (b: u8[], off: i32, v: u32): void => {
166
285
  b[off] = toU8((v >> 24) & 255)
167
286
  b[off + 1] = toU8((v >> 16) & 255)
@@ -169,36 +288,96 @@ export const setU32BE = (b: u8[], off: i32, v: u32): void => {
169
288
  b[off + 3] = toU8(v & 255)
170
289
  }
171
290
 
172
- /** Writes `v` into `b[off]` to `b[off + 7]`, least significant byte first. */
291
+ /**
292
+ * Writes `v` into `b[off]` to `b[off + 7]`, least significant byte first.
293
+ *
294
+ * @param b The bytes written into; only the eight at `off` change.
295
+ * @param off Where in `b` the first byte goes; it covers `b[off]` to
296
+ * `b[off + 7]`, and a byte of those outside `b` panics `index`.
297
+ * @param v The number to store.
298
+ */
173
299
  export const setU64LE = (b: u8[], off: i32, v: u64): void => {
174
300
  for (let i: i32 = 0; i < 8; i++) {
175
301
  b[off + i] = toU8((v >> toU64(i * 8)) & toU64(255))
176
302
  }
177
303
  }
178
304
 
179
- /** Writes `v` into `b[off]` to `b[off + 7]`, most significant byte first. */
305
+ /**
306
+ * Writes `v` into `b[off]` to `b[off + 7]`, most significant byte first.
307
+ *
308
+ * @param b The bytes written into; only the eight at `off` change.
309
+ * @param off Where in `b` the first byte goes; it covers `b[off]` to
310
+ * `b[off + 7]`, and a byte of those outside `b` panics `index`.
311
+ * @param v The number to store.
312
+ */
180
313
  export const setU64BE = (b: u8[], off: i32, v: u64): void => {
181
314
  for (let i: i32 = 0; i < 8; i++) {
182
315
  b[off + i] = toU8((v >> toU64((7 - i) * 8)) & toU64(255))
183
316
  }
184
317
  }
185
318
 
186
- /** Writes `v`'s two's-complement bits as `setU32LE` does. */
319
+ /**
320
+ * Writes `v`'s two's-complement bits as `setU32LE` does.
321
+ *
322
+ * @param b The bytes written into; only the four at `off` change.
323
+ * @param off Where in `b` the first byte goes; it covers `b[off]` to
324
+ * `b[off + 3]`, and a byte of those outside `b` panics `index`.
325
+ * @param v The number to store; a negative one is stored as its two's
326
+ * complement.
327
+ */
187
328
  export const setI32LE = (b: u8[], off: i32, v: i32): void => setU32LE(b, off, toU32(v))
188
329
 
189
- /** Writes `v`'s two's-complement bits as `setU32BE` does. */
330
+ /**
331
+ * Writes `v`'s two's-complement bits as `setU32BE` does.
332
+ *
333
+ * @param b The bytes written into; only the four at `off` change.
334
+ * @param off Where in `b` the first byte goes; it covers `b[off]` to
335
+ * `b[off + 3]`, and a byte of those outside `b` panics `index`.
336
+ * @param v The number to store; a negative one is stored as its two's
337
+ * complement.
338
+ */
190
339
  export const setI32BE = (b: u8[], off: i32, v: i32): void => setU32BE(b, off, toU32(v))
191
340
 
192
- /** Writes `v`'s two's-complement bits as `setU64LE` does. */
341
+ /**
342
+ * Writes `v`'s two's-complement bits as `setU64LE` does.
343
+ *
344
+ * @param b The bytes written into; only the eight at `off` change.
345
+ * @param off Where in `b` the first byte goes; it covers `b[off]` to
346
+ * `b[off + 7]`, and a byte of those outside `b` panics `index`.
347
+ * @param v The number to store; a negative one is stored as its two's
348
+ * complement.
349
+ */
193
350
  export const setI64LE = (b: u8[], off: i32, v: i64): void => setU64LE(b, off, toU64(v))
194
351
 
195
- /** Writes `v`'s two's-complement bits as `setU64BE` does. */
352
+ /**
353
+ * Writes `v`'s two's-complement bits as `setU64BE` does.
354
+ *
355
+ * @param b The bytes written into; only the eight at `off` change.
356
+ * @param off Where in `b` the first byte goes; it covers `b[off]` to
357
+ * `b[off + 7]`, and a byte of those outside `b` panics `index`.
358
+ * @param v The number to store; a negative one is stored as its two's
359
+ * complement.
360
+ */
196
361
  export const setI64BE = (b: u8[], off: i32, v: i64): void => setU64BE(b, off, toU64(v))
197
362
 
198
- /** Writes `v`'s IEEE 754 bits as `setU64LE` does. */
363
+ /**
364
+ * Writes `v`'s IEEE 754 bits as `setU64LE` does.
365
+ *
366
+ * @param b The bytes written into; only the eight at `off` change.
367
+ * @param off Where in `b` the first byte goes; it covers `b[off]` to
368
+ * `b[off + 7]`, and a byte of those outside `b` panics `index`.
369
+ * @param v The double to store, as its IEEE 754 bits.
370
+ */
199
371
  export const setF64LE = (b: u8[], off: i32, v: f64): void => setU64LE(b, off, toU64(f64ToBits(v)))
200
372
 
201
- /** Writes `v`'s IEEE 754 bits as `setU64BE` does. */
373
+ /**
374
+ * Writes `v`'s IEEE 754 bits as `setU64BE` does.
375
+ *
376
+ * @param b The bytes written into; only the eight at `off` change.
377
+ * @param off Where in `b` the first byte goes; it covers `b[off]` to
378
+ * `b[off + 7]`, and a byte of those outside `b` panics `index`.
379
+ * @param v The double to store, as its IEEE 754 bits.
380
+ */
202
381
  export const setF64BE = (b: u8[], off: i32, v: f64): void => setU64BE(b, off, toU64(f64ToBits(v)))
203
382
 
204
383
  // ---- Byte-class runs and the byte copy (WP38 S6a) ----------------------------------------
@@ -245,13 +424,30 @@ const bytesRunStart = (from: i32, end: i32): i32 => {
245
424
  * or 32 bytes at a time (docs/LANGUAGE.md, "Byte runs"). It is
246
425
  * **variable-time**: how long it takes says how long the run is, so it is
247
426
  * never for secret data.
427
+ *
428
+ * @param b The bytes scanned; they are not changed.
429
+ * @param from Where the scan starts, clamped into `[0, to]`.
430
+ * @param to Where the scan stops, exclusive, clamped into `[0, b.length]`.
431
+ * @returns The index of the first byte in the clamped range that is not a
432
+ * blank, or
433
+ * the clamped `to` when there is none.
248
434
  */
249
435
  export const skipBlank = (b: u8[], from: i32, to: i32): i32 => {
250
436
  const end: i32 = bytesRunEnd(b, to)
251
437
  return skipBlankWalk(b, bytesRunStart(from, end), end)
252
438
  }
253
439
 
254
- /** `skipBlank` for the ASCII digits `0` to `9`: the same clamps, the same kernel family, `nish_bytes_skip_digits`. */
440
+ /**
441
+ * `skipBlank` for the ASCII digits `0` to `9`: the same clamps, the same
442
+ * kernel family, `nish_bytes_skip_digits`.
443
+ *
444
+ * @param b The bytes scanned; they are not changed.
445
+ * @param from Where the scan starts, clamped into `[0, to]`.
446
+ * @param to Where the scan stops, exclusive, clamped into `[0, b.length]`.
447
+ * @returns The index of the first byte in the clamped range that is not a
448
+ * digit, or
449
+ * the clamped `to` when there is none.
450
+ */
255
451
  export const skipDigits = (b: u8[], from: i32, to: i32): i32 => {
256
452
  const end: i32 = bytesRunEnd(b, to)
257
453
  return skipDigitsWalk(b, bytesRunStart(from, end), end)
@@ -268,6 +464,13 @@ export const skipDigits = (b: u8[], from: i32, to: i32): i32 => {
268
464
  * the scan is `nish_bytes_skip_json_text`: blocks of ASCII 16 or 32 bytes at a
269
465
  * time, each multi-byte sequence a byte at a time. Variable-time, as
270
466
  * `skipBlank` is.
467
+ *
468
+ * @param b The bytes scanned; they are not changed.
469
+ * @param from Where the scan starts, clamped into `[0, to]`.
470
+ * @param to Where the scan stops, exclusive, clamped into `[0, b.length]`.
471
+ * @returns The index of the first byte in the clamped range that is not in
472
+ * the run, or
473
+ * the clamped `to` when there is none.
271
474
  */
272
475
  export const skipJsonText = (b: u8[], from: i32, to: i32): i32 => {
273
476
  const end: i32 = bytesRunEnd(b, to)
@@ -283,6 +486,13 @@ export const skipJsonText = (b: u8[], from: i32, to: i32): i32 => {
283
486
  * the bytes of a string through as they are. Natively the scan is
284
487
  * `nish_bytes_skip_json_plain`, 16 bytes at a time. Variable-time, as
285
488
  * `skipBlank` is.
489
+ *
490
+ * @param b The bytes scanned; they are not changed.
491
+ * @param from Where the scan starts, clamped into `[0, to]`.
492
+ * @param to Where the scan stops, exclusive, clamped into `[0, b.length]`.
493
+ * @returns The index of the first byte in the clamped range that a JSON
494
+ * writer must escape, or
495
+ * the clamped `to` when there is none.
286
496
  */
287
497
  export const skipJsonPlain = (b: u8[], from: i32, to: i32): i32 => {
288
498
  const end: i32 = bytesRunEnd(b, to)
@@ -300,6 +510,12 @@ export const skipJsonPlain = (b: u8[], from: i32, to: i32): i32 => {
300
510
  * `0 <= from <= from + count <= src.length` and the same for `at` in `dst` —
301
511
  * panics `copyBytes` before any byte is written. Natively the copy is one
302
512
  * `llvm.memmove`.
513
+ *
514
+ * @param dst The array written into; only `dst[at..at+count)` changes.
515
+ * @param at Where in `dst` the first copied byte goes.
516
+ * @param src The array copied from, which may be `dst` itself.
517
+ * @param from Where in `src` the copied bytes start.
518
+ * @param count How many bytes to copy; zero copies nothing.
303
519
  */
304
520
  export const copyBytes = (dst: u8[], at: i32, src: readonly u8[], from: i32, count: i32): void => {
305
521
  if (count < 0 || at < 0 || from < 0 || at > toI32(dst.length) - count || from > toI32(src.length) - count) {