@mxjp/binary 1.0.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.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Max J. Polster
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,10 @@
1
+ import { Bytes } from "./bytes.js";
2
+ /**
3
+ * Base32 encode bytes without padding.
4
+ *
5
+ * See RFC 3548 for more info.
6
+ *
7
+ * @param bytes The bytes to encode.
8
+ * @param pad True, to include padding. Default is false.
9
+ */
10
+ export declare function base32Encode(bytes: Bytes, pad?: boolean): string;
package/dist/base32.js ADDED
@@ -0,0 +1,59 @@
1
+ import { asUint8Array } from "./bytes.js";
2
+ const BASE32_TO_ASCII = new TextEncoder().encode("ABCDEFGHIJKLMNOPQRSTUVWXYZ234567");
3
+ const MASK = 0b11111;
4
+ const PAD_ASCII = "=".charCodeAt(0);
5
+ /**
6
+ * Base32 encode bytes without padding.
7
+ *
8
+ * See RFC 3548 for more info.
9
+ *
10
+ * @param bytes The bytes to encode.
11
+ * @param pad True, to include padding. Default is false.
12
+ */
13
+ export function base32Encode(bytes, pad = false) {
14
+ const array = asUint8Array(bytes);
15
+ const rest = array.byteLength % 5;
16
+ const comp = array.byteLength - rest;
17
+ const base32Length = pad ? Math.ceil(array.byteLength / 5) * 8 : Math.ceil(array.byteLength / 5 * 8);
18
+ const base32 = new Uint8Array(base32Length);
19
+ let b = 0;
20
+ for (let i = 0; i < comp; i += 5) {
21
+ base32[b++] = BASE32_TO_ASCII[array[i] >>> 3];
22
+ base32[b++] = BASE32_TO_ASCII[((array[i] << 2) & MASK) | (array[i + 1] >>> 6)];
23
+ base32[b++] = BASE32_TO_ASCII[((array[i + 1] >>> 1) & MASK)];
24
+ base32[b++] = BASE32_TO_ASCII[((array[i + 1] << 4) & MASK) | (array[i + 2] >>> 4)];
25
+ base32[b++] = BASE32_TO_ASCII[((array[i + 2] << 1) & MASK) | (array[i + 3] >>> 7)];
26
+ base32[b++] = BASE32_TO_ASCII[((array[i + 3] >>> 2) & MASK)];
27
+ base32[b++] = BASE32_TO_ASCII[((array[i + 3] << 3) & MASK) | (array[i + 4] >>> 5)];
28
+ base32[b++] = BASE32_TO_ASCII[array[i + 4] & MASK];
29
+ }
30
+ if (rest > 0) {
31
+ base32[b++] = BASE32_TO_ASCII[array[comp] >>> 3];
32
+ if (rest > 1) {
33
+ base32[b++] = BASE32_TO_ASCII[((array[comp] << 2) & MASK) | (array[comp + 1] >>> 6)];
34
+ base32[b++] = BASE32_TO_ASCII[(array[comp + 1] >>> 1) & MASK];
35
+ if (rest > 2) {
36
+ base32[b++] = BASE32_TO_ASCII[((array[comp + 1] << 4) & MASK) | (array[comp + 2] >>> 4)];
37
+ if (rest > 3) {
38
+ base32[b++] = BASE32_TO_ASCII[((array[comp + 2] << 1) & MASK) | (array[comp + 3] >>> 7)];
39
+ base32[b++] = BASE32_TO_ASCII[(array[comp + 3] >>> 2) & MASK];
40
+ base32[b++] = BASE32_TO_ASCII[(array[comp + 3] << 3) & MASK];
41
+ }
42
+ else {
43
+ base32[b++] = BASE32_TO_ASCII[(array[comp + 2] << 1) & MASK];
44
+ }
45
+ }
46
+ else {
47
+ base32[b++] = BASE32_TO_ASCII[(array[comp + 1] << 4) & MASK];
48
+ }
49
+ }
50
+ else {
51
+ base32[b++] = BASE32_TO_ASCII[(array[comp] << 2) & MASK];
52
+ }
53
+ base32.fill(PAD_ASCII, b);
54
+ }
55
+ const value = new TextDecoder().decode(base32);
56
+ base32.fill(0);
57
+ return value;
58
+ }
59
+ //# sourceMappingURL=base32.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base32.js","sourceRoot":"","sources":["../src/base32.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAS,MAAM,YAAY,CAAC;AAEjD,MAAM,eAAe,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC;AACrF,MAAM,IAAI,GAAG,OAAO,CAAC;AACrB,MAAM,SAAS,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAEpC;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,KAAY,EAAE,GAAG,GAAG,KAAK;IACrD,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC;IACrC,MAAM,YAAY,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACrG,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,YAAY,CAAC,CAAC;IAC5C,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAClC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9C,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC/E,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAC7D,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACnF,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACnF,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAC7D,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACnF,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACpD,CAAC;IACD,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;QACd,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACjD,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;YACd,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACrF,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YAC9D,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;gBACd,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACzF,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;oBACd,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBACzF,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;oBAC9D,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;gBAC9D,CAAC;qBAAM,CAAC;oBACP,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;gBAC9D,CAAC;YACF,CAAC;iBAAM,CAAC;gBACP,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YAC9D,CAAC;QACF,CAAC;aAAM,CAAC;YACP,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QAC1D,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAC3B,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACf,OAAO,KAAK,CAAC;AACd,CAAC"}
@@ -0,0 +1,39 @@
1
+ import { Bytes } from "./bytes.js";
2
+ export declare class DecodeBase64Error extends SyntaxError {
3
+ }
4
+ /**
5
+ * Base64 encode bytes.
6
+ *
7
+ * See RFC 3548 for more info.
8
+ *
9
+ * @param bytes The bytes to encode.
10
+ * @param padding True, to include padding. Default is true.
11
+ */
12
+ export declare function base64Encode(bytes: Bytes, padding?: boolean): string;
13
+ /**
14
+ * Base64url encode bytes.
15
+ *
16
+ * See RFC 3548 for more info.
17
+ *
18
+ * @param bytes The bytes to encode.
19
+ * @param padding True, to include padding. Default is false.
20
+ */
21
+ export declare function base64UrlEncode(bytes: Bytes, padding?: boolean): string;
22
+ /**
23
+ * Decode a base64 encoded text with optional trailing padding.
24
+ *
25
+ * See RFC 3548 for more info.
26
+ *
27
+ * @param value The text to decode.
28
+ */
29
+ export declare function base64Decode(value: string): Uint8Array;
30
+ /**
31
+ * Decode a base64 url encoded text with optional trailing padding.
32
+ *
33
+ * This does ignore padding characters, but not concatenated base64url strings.
34
+ *
35
+ * See RFC 3548 for more info.
36
+ *
37
+ * @param value The text to decode.
38
+ */
39
+ export declare function base64UrlDecode(value: string): Uint8Array;
package/dist/base64.js ADDED
@@ -0,0 +1,143 @@
1
+ import { asUint8Array } from "./bytes.js";
2
+ const BASE64_TO_ASCII = new TextEncoder().encode("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/");
3
+ const BASE64URL_TO_ASCII = new TextEncoder().encode("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_");
4
+ const ASCII_TO_BASE64 = new Uint16Array(123);
5
+ const ASCII_TO_BASE64URL = new Uint16Array(123);
6
+ for (let i = 0; i < 64; i++) {
7
+ ASCII_TO_BASE64[BASE64_TO_ASCII[i]] = i | 0x8000;
8
+ ASCII_TO_BASE64URL[BASE64URL_TO_ASCII[i]] = i | 0x8000;
9
+ }
10
+ const PAD_ASCII = "=".charCodeAt(0);
11
+ function encode(bytes, map, padding) {
12
+ const base64Length = padding ? Math.ceil(bytes.byteLength / 3) * 4 : Math.ceil(bytes.byteLength * 4 / 3);
13
+ const base64 = new Uint8Array(base64Length);
14
+ for (let i = 0, x = 0; i < bytes.byteLength;) {
15
+ const a = bytes[i];
16
+ base64[x++] = map[a >>> 2];
17
+ if (++i < bytes.byteLength) {
18
+ const b = bytes[i];
19
+ base64[x++] = map[((a & 3) << 4) | (b >>> 4)];
20
+ if (++i < bytes.byteLength) {
21
+ const c = bytes[i];
22
+ base64[x++] = map[((b & 0xf) << 2) | (c >>> 6)];
23
+ base64[x++] = map[c & 0x3f];
24
+ i++;
25
+ }
26
+ else {
27
+ base64[x++] = map[(b & 0xf) << 2];
28
+ if (padding) {
29
+ base64[x++] = PAD_ASCII;
30
+ }
31
+ }
32
+ }
33
+ else {
34
+ base64[x++] = map[(a & 3) << 4];
35
+ if (padding) {
36
+ base64[x++] = PAD_ASCII;
37
+ base64[x++] = PAD_ASCII;
38
+ }
39
+ }
40
+ }
41
+ const value = new TextDecoder().decode(base64);
42
+ base64.fill(0);
43
+ return value;
44
+ }
45
+ function decode(value, map) {
46
+ if (typeof value !== "string") {
47
+ throw new TypeError();
48
+ }
49
+ const base64 = new TextEncoder().encode(value);
50
+ let padding = 0;
51
+ for (let i = value.length - 1; i >= 0; i--) {
52
+ if (base64[i] === PAD_ASCII) {
53
+ padding++;
54
+ }
55
+ else {
56
+ break;
57
+ }
58
+ }
59
+ const base64Length = value.length - padding;
60
+ if (padding > 0 && ((value.length & 3) !== 0 || padding > 2)) {
61
+ throw new DecodeBase64Error();
62
+ }
63
+ const partial = base64Length & 3;
64
+ const byteLength = ((base64Length >>> 2) * 3) + (partial >>> 1) + (partial & 1);
65
+ const bytes = new Uint8Array(byteLength);
66
+ for (let i = 0, x = 0; i < byteLength;) {
67
+ const a = map[base64[x++]];
68
+ const b = map[base64[x++]];
69
+ if (a === 0 || a === undefined || b === 0 || b === undefined) {
70
+ throw new DecodeBase64Error();
71
+ }
72
+ bytes[i++] = (a << 2) | (b >>> 4);
73
+ if (i < byteLength) {
74
+ const c = map[base64[x++]];
75
+ if (c === 0 || c === undefined) {
76
+ throw new DecodeBase64Error();
77
+ }
78
+ bytes[i++] = (b << 4) | (c >>> 2);
79
+ if (i < byteLength) {
80
+ const d = map[base64[x++]];
81
+ if (d === 0 || d === undefined) {
82
+ throw new DecodeBase64Error();
83
+ }
84
+ bytes[i++] = (c << 6) | d;
85
+ }
86
+ else if ((c & 3) > 0) {
87
+ throw new DecodeBase64Error();
88
+ }
89
+ }
90
+ else if ((b & 7) > 0) {
91
+ throw new DecodeBase64Error();
92
+ }
93
+ }
94
+ base64.fill(0);
95
+ return bytes;
96
+ }
97
+ export class DecodeBase64Error extends SyntaxError {
98
+ }
99
+ /**
100
+ * Base64 encode bytes.
101
+ *
102
+ * See RFC 3548 for more info.
103
+ *
104
+ * @param bytes The bytes to encode.
105
+ * @param padding True, to include padding. Default is true.
106
+ */
107
+ export function base64Encode(bytes, padding = true) {
108
+ return encode(asUint8Array(bytes), BASE64_TO_ASCII, padding);
109
+ }
110
+ /**
111
+ * Base64url encode bytes.
112
+ *
113
+ * See RFC 3548 for more info.
114
+ *
115
+ * @param bytes The bytes to encode.
116
+ * @param padding True, to include padding. Default is false.
117
+ */
118
+ export function base64UrlEncode(bytes, padding = false) {
119
+ return encode(asUint8Array(bytes), BASE64URL_TO_ASCII, padding);
120
+ }
121
+ /**
122
+ * Decode a base64 encoded text with optional trailing padding.
123
+ *
124
+ * See RFC 3548 for more info.
125
+ *
126
+ * @param value The text to decode.
127
+ */
128
+ export function base64Decode(value) {
129
+ return decode(value, ASCII_TO_BASE64);
130
+ }
131
+ /**
132
+ * Decode a base64 url encoded text with optional trailing padding.
133
+ *
134
+ * This does ignore padding characters, but not concatenated base64url strings.
135
+ *
136
+ * See RFC 3548 for more info.
137
+ *
138
+ * @param value The text to decode.
139
+ */
140
+ export function base64UrlDecode(value) {
141
+ return decode(value, ASCII_TO_BASE64URL);
142
+ }
143
+ //# sourceMappingURL=base64.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base64.js","sourceRoot":"","sources":["../src/base64.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export type Bytes = ArrayBuffer | Uint8Array<ArrayBuffer>;
2
+ export declare function asUint8Array(value: Bytes): Uint8Array<ArrayBuffer>;
3
+ /**
4
+ * Check if the specified value is exactly an {@link ArrayBuffer `ArrayBuffer`}.
5
+ */
6
+ export declare function isArrayBuffer(value: unknown): value is ArrayBuffer;
7
+ /**
8
+ * Check if the specified value is exactly a {@link Uint8Array `Uint8Array<ArrayBuffer>`}.
9
+ */
10
+ export declare function isUint8Array(value: unknown): value is Uint8Array<ArrayBuffer>;
package/dist/bytes.js ADDED
@@ -0,0 +1,24 @@
1
+ export function asUint8Array(value) {
2
+ if (isArrayBuffer(value)) {
3
+ return new Uint8Array(value);
4
+ }
5
+ else if (isUint8Array(value)) {
6
+ return value;
7
+ }
8
+ else {
9
+ throw new TypeError();
10
+ }
11
+ }
12
+ /**
13
+ * Check if the specified value is exactly an {@link ArrayBuffer `ArrayBuffer`}.
14
+ */
15
+ export function isArrayBuffer(value) {
16
+ return value instanceof ArrayBuffer && value.constructor === ArrayBuffer;
17
+ }
18
+ /**
19
+ * Check if the specified value is exactly a {@link Uint8Array `Uint8Array<ArrayBuffer>`}.
20
+ */
21
+ export function isUint8Array(value) {
22
+ return value instanceof Uint8Array && value.constructor === Uint8Array && isArrayBuffer(value.buffer);
23
+ }
24
+ //# sourceMappingURL=bytes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bytes.js","sourceRoot":"","sources":["../src/bytes.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,YAAY,CAAC,KAAY;IACxC,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;SAAM,IAAI,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,OAAO,KAAK,CAAC;IACd,CAAC;SAAM,CAAC;QACP,MAAM,IAAI,SAAS,EAAE,CAAC;IACvB,CAAC;AACF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,KAAc;IAC3C,OAAO,KAAK,YAAY,WAAW,IAAI,KAAK,CAAC,WAAW,KAAK,WAAW,CAAC;AAC1E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,KAAc;IAC1C,OAAO,KAAK,YAAY,UAAU,IAAI,KAAK,CAAC,WAAW,KAAK,UAAU,IAAI,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AACvG,CAAC"}
@@ -0,0 +1,48 @@
1
+ export declare class Deserializer {
2
+ #private;
3
+ constructor(buffer: ArrayBuffer, byteOffset: number, byteLength: number, littleEndian?: boolean);
4
+ static from(source: ArrayBuffer | Uint8Array<ArrayBuffer>, littleEndian?: boolean): Deserializer;
5
+ get bytesAvailable(): number;
6
+ /**
7
+ * Create a copy of this deserializer in it's current state that views the same underlying data.
8
+ *
9
+ * @param littleEndian True to use little endian byte order. Default is this deserializer's byte order.
10
+ */
11
+ fork(littleEndian?: boolean): Deserializer;
12
+ /** Deserialize an unsigned 8 bit int. */
13
+ u8(): number;
14
+ /** Deserialize an unsigned 16 bit int in the deserializer's endianess. */
15
+ u16(): number;
16
+ /** Deserialize an unsigned 32 bit int in the deserializer's endianess. */
17
+ u32(): number;
18
+ /** Deserialize an unsigned 64 bit int in the deserializer's endianess. */
19
+ u64(): number;
20
+ /** Deserialize an unsigned 64 bit int in the deserializer's endianess. */
21
+ bigU64(): bigint;
22
+ /** Deserialize a 32-bit IEEE 754 floating point number in the deserializer's endianess. */
23
+ f32(): number;
24
+ /** Deserialize a 64-bit IEEE 754 floating point number in the deserializer's endianess. */
25
+ f64(): number;
26
+ /**
27
+ * Deserialize a boolean.
28
+ *
29
+ * + `false` is represented as `0x00`.
30
+ * + `true` is represented as `0x01`.
31
+ */
32
+ bool(): boolean;
33
+ /**
34
+ * Deserialize bytes by creating a view into the underlying data.
35
+ *
36
+ * @example
37
+ * ```js
38
+ * let array = d.unsafeViewBytes(7, Uint8Array);
39
+ * ```
40
+ */
41
+ unsafeViewBytes<T extends typeof Uint8Array<ArrayBuffer> | typeof DataView<ArrayBuffer>>(byteLength: number, ctor: T): InstanceType<T>;
42
+ /**
43
+ * Deserialize bytes by copying.
44
+ */
45
+ copyBytes(byteLength: number): ArrayBuffer;
46
+ }
47
+ export declare class DeserializerEndError extends Error {
48
+ }
@@ -0,0 +1,125 @@
1
+ import { isArrayBuffer, isUint8Array } from "./bytes.js";
2
+ export class Deserializer {
3
+ #littleEndian;
4
+ #buffer;
5
+ #byteOffset;
6
+ #byteEnd;
7
+ #view;
8
+ constructor(buffer, byteOffset, byteLength, littleEndian) {
9
+ this.#littleEndian = littleEndian ?? true;
10
+ if (typeof this.#littleEndian !== "boolean" || !isArrayBuffer(buffer) || !Number.isSafeInteger(byteOffset) || !Number.isSafeInteger(byteLength)) {
11
+ throw new TypeError();
12
+ }
13
+ if (byteOffset < 0 || byteLength < 0 || (byteOffset + byteLength) > buffer.byteLength) {
14
+ throw new RangeError();
15
+ }
16
+ this.#buffer = buffer;
17
+ this.#byteOffset = byteOffset;
18
+ this.#byteEnd = byteOffset + byteLength;
19
+ this.#view = new DataView(buffer);
20
+ }
21
+ static from(source, littleEndian) {
22
+ if (isArrayBuffer(source)) {
23
+ return new Deserializer(source, 0, source.byteLength, littleEndian);
24
+ }
25
+ else if (isUint8Array(source)) {
26
+ return new Deserializer(source.buffer, source.byteOffset, source.byteLength, littleEndian);
27
+ }
28
+ else {
29
+ throw new TypeError();
30
+ }
31
+ }
32
+ get bytesAvailable() {
33
+ return this.#byteEnd - this.#byteOffset;
34
+ }
35
+ #advanceBy(byteLength) {
36
+ const byteOffset = this.#byteOffset;
37
+ const next = byteOffset + byteLength;
38
+ if (next > this.#byteEnd) {
39
+ throw new DeserializerEndError();
40
+ }
41
+ this.#byteOffset = next;
42
+ return byteOffset;
43
+ }
44
+ /**
45
+ * Create a copy of this deserializer in it's current state that views the same underlying data.
46
+ *
47
+ * @param littleEndian True to use little endian byte order. Default is this deserializer's byte order.
48
+ */
49
+ fork(littleEndian) {
50
+ return new Deserializer(this.#buffer, this.#byteOffset, this.bytesAvailable, littleEndian ?? this.#littleEndian);
51
+ }
52
+ /** Deserialize an unsigned 8 bit int. */
53
+ u8() {
54
+ return this.#view.getUint8(this.#advanceBy(1));
55
+ }
56
+ /** Deserialize an unsigned 16 bit int in the deserializer's endianess. */
57
+ u16() {
58
+ return this.#view.getUint16(this.#advanceBy(2), this.#littleEndian);
59
+ }
60
+ /** Deserialize an unsigned 32 bit int in the deserializer's endianess. */
61
+ u32() {
62
+ return this.#view.getUint32(this.#advanceBy(4), this.#littleEndian);
63
+ }
64
+ /** Deserialize an unsigned 64 bit int in the deserializer's endianess. */
65
+ u64() {
66
+ const value = this.bigU64();
67
+ if (value > BigInt(Number.MAX_SAFE_INTEGER)) {
68
+ throw new RangeError();
69
+ }
70
+ return Number(value);
71
+ }
72
+ /** Deserialize an unsigned 64 bit int in the deserializer's endianess. */
73
+ bigU64() {
74
+ return this.#view.getBigUint64(this.#advanceBy(8), this.#littleEndian);
75
+ }
76
+ /** Deserialize a 32-bit IEEE 754 floating point number in the deserializer's endianess. */
77
+ f32() {
78
+ return this.#view.getFloat32(this.#advanceBy(4), this.#littleEndian);
79
+ }
80
+ /** Deserialize a 64-bit IEEE 754 floating point number in the deserializer's endianess. */
81
+ f64() {
82
+ return this.#view.getFloat64(this.#advanceBy(8), this.#littleEndian);
83
+ }
84
+ /**
85
+ * Deserialize a boolean.
86
+ *
87
+ * + `false` is represented as `0x00`.
88
+ * + `true` is represented as `0x01`.
89
+ */
90
+ bool() {
91
+ switch (this.u8()) {
92
+ case 0x00: return false;
93
+ case 0x01: return true;
94
+ default: throw new RangeError();
95
+ }
96
+ }
97
+ /**
98
+ * Deserialize bytes by creating a view into the underlying data.
99
+ *
100
+ * @example
101
+ * ```js
102
+ * let array = d.unsafeViewBytes(7, Uint8Array);
103
+ * ```
104
+ */
105
+ unsafeViewBytes(byteLength, ctor) {
106
+ if (!Number.isSafeInteger(byteLength) || ctor !== Uint8Array && ctor !== DataView) {
107
+ throw new TypeError();
108
+ }
109
+ const byteOffset = this.#advanceBy(byteLength);
110
+ return new ctor(this.#buffer, byteOffset, byteLength);
111
+ }
112
+ /**
113
+ * Deserialize bytes by copying.
114
+ */
115
+ copyBytes(byteLength) {
116
+ if (!Number.isSafeInteger(byteLength)) {
117
+ throw new TypeError();
118
+ }
119
+ const byteOffset = this.#advanceBy(byteLength);
120
+ return this.#buffer.slice(byteOffset, byteOffset + byteLength);
121
+ }
122
+ }
123
+ export class DeserializerEndError extends Error {
124
+ }
125
+ //# sourceMappingURL=deserializer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deserializer.js","sourceRoot":"","sources":["../src/deserializer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEzD,MAAM,OAAO,YAAY;IACxB,aAAa,CAAU;IACvB,OAAO,CAAc;IACrB,WAAW,CAAS;IACpB,QAAQ,CAAS;IACjB,KAAK,CAAW;IAEhB,YAAY,MAAmB,EAAE,UAAkB,EAAE,UAAkB,EAAE,YAAsB;QAC9F,IAAI,CAAC,aAAa,GAAG,YAAY,IAAI,IAAI,CAAC;QAC1C,IAAI,OAAO,IAAI,CAAC,aAAa,KAAK,SAAS,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC;YACjJ,MAAM,IAAI,SAAS,EAAE,CAAC;QACvB,CAAC;QACD,IAAI,UAAU,GAAG,CAAC,IAAI,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;YACvF,MAAM,IAAI,UAAU,EAAE,CAAC;QACxB,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAC;QACxC,IAAI,CAAC,KAAK,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,MAA6C,EAAE,YAAsB;QAChF,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,OAAO,IAAI,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QACrE,CAAC;aAAM,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;YACjC,OAAO,IAAI,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QAC5F,CAAC;aAAM,CAAC;YACP,MAAM,IAAI,SAAS,EAAE,CAAC;QACvB,CAAC;IACF,CAAC;IAED,IAAI,cAAc;QACjB,OAAO,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC;IACzC,CAAC;IAED,UAAU,CAAC,UAAkB;QAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;QACpC,MAAM,IAAI,GAAG,UAAU,GAAG,UAAU,CAAC;QACrC,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC1B,MAAM,IAAI,oBAAoB,EAAE,CAAC;QAClC,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,OAAO,UAAU,CAAC;IACnB,CAAC;IAED;;;;OAIG;IACH,IAAI,CAAC,YAAsB;QAC1B,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,cAAc,EAAE,YAAY,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC;IAClH,CAAC;IAED,yCAAyC;IACzC,EAAE;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,0EAA0E;IAC1E,GAAG;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IACrE,CAAC;IAED,0EAA0E;IAC1E,GAAG;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IACrE,CAAC;IAED,0EAA0E;IAC1E,GAAG;QACF,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAC5B,IAAI,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC7C,MAAM,IAAI,UAAU,EAAE,CAAC;QACxB,CAAC;QACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;IAED,0EAA0E;IAC1E,MAAM;QACL,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IACxE,CAAC;IAED,2FAA2F;IAC3F,GAAG;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IACtE,CAAC;IAED,2FAA2F;IAC3F,GAAG;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IACtE,CAAC;IAED;;;;;OAKG;IACH,IAAI;QACH,QAAQ,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC;YACnB,KAAK,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC;YACxB,KAAK,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC;YACvB,OAAO,CAAC,CAAC,MAAM,IAAI,UAAU,EAAE,CAAC;QACjC,CAAC;IACF,CAAC;IAED;;;;;;;OAOG;IACH,eAAe,CAA0E,UAAkB,EAAE,IAAO;QACnH,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,IAAe,KAAK,UAAU,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC9F,MAAM,IAAI,SAAS,EAAE,CAAC;QACvB,CAAC;QACD,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAC/C,OAAO,IAAK,IAA0B,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,CAAoB,CAAC;IACjG,CAAC;IAED;;OAEG;IACH,SAAS,CAAC,UAAkB;QAC3B,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,SAAS,EAAE,CAAC;QACvB,CAAC;QACD,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,UAAU,GAAG,UAAU,CAAC,CAAC;IAChE,CAAC;CACD;AAED,MAAM,OAAO,oBAAqB,SAAQ,KAAK;CAAG"}
@@ -0,0 +1,5 @@
1
+ export * from "./base32.js";
2
+ export * from "./base64.js";
3
+ export * from "./bytes.js";
4
+ export * from "./deserializer.js";
5
+ export * from "./serializer.js";
package/dist/index.js ADDED
@@ -0,0 +1,6 @@
1
+ export * from "./base32.js";
2
+ export * from "./base64.js";
3
+ export * from "./bytes.js";
4
+ export * from "./deserializer.js";
5
+ export * from "./serializer.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,61 @@
1
+ export declare class Serializer {
2
+ #private;
3
+ constructor(littleEndian?: boolean);
4
+ get byteLength(): number;
5
+ /** Serialize an unsigned 8 bit int. */
6
+ u8(value: number): void;
7
+ /** Serialize an unsigned 16 bit int in the serializer's endianess. */
8
+ u16(value: number): void;
9
+ /** Serialize an unsigned 32 bit int in the serializer's endianess. */
10
+ u32(value: number): void;
11
+ /** Serialize an unsigned 64 bit int in the serializer's endianess. */
12
+ u64(value: number): void;
13
+ /** Serialize an unsigned 64 bit int in the serializer's endianess. */
14
+ bigU64(value: bigint): void;
15
+ /** Serialize a 32-bit IEEE 754 floating point number in the serializer's endianess. */
16
+ f32(value: number): void;
17
+ /** Serialize a 64-bit IEEE 754 floating point number in the serializer's endianess. */
18
+ f64(value: number): void;
19
+ /**
20
+ * Serialize a boolean.
21
+ *
22
+ * + `false` is represented as `0x00`.
23
+ * + `true` is represented as `0x01`.
24
+ */
25
+ bool(value: boolean): void;
26
+ /**
27
+ * Serialize an optional value.
28
+ *
29
+ * + `null` and `undefined` are serialized using {@link boolean `boolean(false)`}.
30
+ * + All other values are serialized using {@link boolean `boolean(true)`} followed by immediately calling the specified function.
31
+ */
32
+ option<T>(value: T | null | undefined, fn: SerializeFn<T>): void;
33
+ /**
34
+ * Serialize bytes by copying them when {@link serialize serializing}.
35
+ */
36
+ unsafeBytes(value: ArrayBuffer | Uint8Array<ArrayBuffer>): void;
37
+ /**
38
+ * Serialize bytes by copying them when {@link serialize serializing} prefixed by their byte length.
39
+ *
40
+ * See {@link unsafeBytes}.
41
+ */
42
+ prefixedUnsafeBytes(prefix: SerializePrefixFn, value: ArrayBuffer | Uint8Array<ArrayBuffer>): void;
43
+ /**
44
+ * Serialize a utf-8 encoded string.
45
+ */
46
+ utf8(value: string): void;
47
+ /**
48
+ * Serialize a utf-8 encoded string prefixed by it's byte length.
49
+ */
50
+ prefixedUtf8(prefix: SerializePrefixFn, value: string): void;
51
+ /**
52
+ * Write all parts in this serializer to an array buffer.
53
+ */
54
+ serialize(): ArrayBuffer;
55
+ }
56
+ export interface SerializePrefixFn {
57
+ (this: Serializer, value: number): void;
58
+ }
59
+ export interface SerializeFn<T> {
60
+ (value: T, serializer: Serializer): void;
61
+ }