bufferbase 1.3.0 → 3.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/README.md +186 -17
- package/dist/cjs/bases.d.ts +189 -0
- package/dist/cjs/bases.d.ts.map +1 -0
- package/dist/cjs/bases.js +134 -0
- package/dist/cjs/bases.js.map +1 -0
- package/dist/cjs/bufferbase.d.ts +22 -45
- package/dist/cjs/bufferbase.d.ts.map +1 -1
- package/dist/cjs/bufferbase.js +26 -120
- package/dist/cjs/bufferbase.js.map +1 -1
- package/dist/cjs/codec-base.d.ts +56 -0
- package/dist/cjs/codec-base.d.ts.map +1 -0
- package/dist/cjs/codec-base.js +132 -0
- package/dist/cjs/codec-base.js.map +1 -0
- package/dist/cjs/codec-block.d.ts +47 -0
- package/dist/cjs/codec-block.d.ts.map +1 -0
- package/dist/cjs/codec-block.js +213 -0
- package/dist/cjs/codec-block.js.map +1 -0
- package/dist/cjs/codec-block85.d.ts +56 -0
- package/dist/cjs/codec-block85.d.ts.map +1 -0
- package/dist/cjs/codec-block85.js +271 -0
- package/dist/cjs/codec-block85.js.map +1 -0
- package/dist/cjs/codec-radix.d.ts +46 -0
- package/dist/cjs/codec-radix.d.ts.map +1 -0
- package/dist/cjs/codec-radix.js +181 -0
- package/dist/cjs/codec-radix.js.map +1 -0
- package/dist/cjs/codec.d.ts +38 -0
- package/dist/cjs/codec.d.ts.map +1 -0
- package/dist/cjs/codec.js +69 -0
- package/dist/cjs/codec.js.map +1 -0
- package/dist/cjs/codecs.d.ts +20 -0
- package/dist/cjs/codecs.d.ts.map +1 -0
- package/dist/cjs/codecs.js +19 -0
- package/dist/cjs/codecs.js.map +1 -0
- package/dist/cjs/errors.d.ts +93 -0
- package/dist/cjs/errors.d.ts.map +1 -0
- package/dist/cjs/errors.js +130 -0
- package/dist/cjs/errors.js.map +1 -0
- package/dist/cjs/example.js +49 -33
- package/dist/cjs/example.js.map +1 -1
- package/dist/cjs/functions.d.ts +58 -0
- package/dist/cjs/functions.d.ts.map +1 -0
- package/dist/cjs/functions.js +71 -0
- package/dist/cjs/functions.js.map +1 -0
- package/dist/cjs/index.d.ts +10 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +35 -4
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/package.json +17 -12
- package/dist/cjs/types.d.ts +144 -0
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/types.js +3 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/esm/bases.d.ts +189 -0
- package/dist/esm/bases.d.ts.map +1 -0
- package/dist/esm/bases.js +129 -0
- package/dist/esm/bases.js.map +1 -0
- package/dist/esm/bufferbase.d.ts +22 -45
- package/dist/esm/bufferbase.d.ts.map +1 -1
- package/dist/esm/bufferbase.js +21 -115
- package/dist/esm/bufferbase.js.map +1 -1
- package/dist/esm/codec-base.d.ts +56 -0
- package/dist/esm/codec-base.d.ts.map +1 -0
- package/dist/esm/codec-base.js +127 -0
- package/dist/esm/codec-base.js.map +1 -0
- package/dist/esm/codec-block.d.ts +47 -0
- package/dist/esm/codec-block.d.ts.map +1 -0
- package/dist/esm/codec-block.js +209 -0
- package/dist/esm/codec-block.js.map +1 -0
- package/dist/esm/codec-block85.d.ts +56 -0
- package/dist/esm/codec-block85.d.ts.map +1 -0
- package/dist/esm/codec-block85.js +267 -0
- package/dist/esm/codec-block85.js.map +1 -0
- package/dist/esm/codec-radix.d.ts +46 -0
- package/dist/esm/codec-radix.d.ts.map +1 -0
- package/dist/esm/codec-radix.js +177 -0
- package/dist/esm/codec-radix.js.map +1 -0
- package/dist/esm/codec.d.ts +38 -0
- package/dist/esm/codec.d.ts.map +1 -0
- package/dist/esm/codec.js +60 -0
- package/dist/esm/codec.js.map +1 -0
- package/dist/esm/codecs.d.ts +20 -0
- package/dist/esm/codecs.d.ts.map +1 -0
- package/dist/esm/codecs.js +16 -0
- package/dist/esm/codecs.js.map +1 -0
- package/dist/esm/errors.d.ts +93 -0
- package/dist/esm/errors.d.ts.map +1 -0
- package/dist/esm/errors.js +119 -0
- package/dist/esm/errors.js.map +1 -0
- package/dist/esm/example.js +48 -32
- package/dist/esm/example.js.map +1 -1
- package/dist/esm/functions.d.ts +58 -0
- package/dist/esm/functions.d.ts.map +1 -0
- package/dist/esm/functions.js +65 -0
- package/dist/esm/functions.js.map +1 -0
- package/dist/esm/index.d.ts +10 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +12 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/package.json +17 -12
- package/dist/esm/types.d.ts +144 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +2 -0
- package/dist/esm/types.js.map +1 -0
- package/package.json +19 -14
- package/src/algorithms.test.ts +442 -0
- package/src/bases.ts +142 -0
- package/src/bufferbase.test.ts +44 -27
- package/src/bufferbase.ts +32 -117
- package/src/codec-base.ts +181 -0
- package/src/codec-block.ts +258 -0
- package/src/codec-block85.ts +315 -0
- package/src/codec-radix.ts +206 -0
- package/src/codec.test.ts +328 -0
- package/src/codec.ts +67 -0
- package/src/codecs.ts +24 -0
- package/src/errors.ts +127 -0
- package/src/example.ts +49 -34
- package/src/functions.ts +73 -0
- package/src/index.ts +39 -6
- package/src/types.ts +156 -0
- package/dist/cjs/bufferbase.d.mts +0 -60
- package/dist/cjs/bufferbase.d.mts.map +0 -1
- package/dist/cjs/bufferbase.mjs +0 -150
- package/dist/cjs/bufferbase.mjs.map +0 -1
- package/dist/cjs/example.d.mts +0 -2
- package/dist/cjs/example.d.mts.map +0 -1
- package/dist/cjs/example.mjs +0 -39
- package/dist/cjs/example.mjs.map +0 -1
- package/dist/cjs/index.d.mts +0 -2
- package/dist/cjs/index.d.mts.map +0 -1
- package/dist/cjs/index.mjs +0 -11
- package/dist/cjs/index.mjs.map +0 -1
- package/dist/esm/bufferbase.d.mts +0 -60
- package/dist/esm/bufferbase.d.mts.map +0 -1
- package/dist/esm/bufferbase.mjs +0 -141
- package/dist/esm/bufferbase.mjs.map +0 -1
- package/dist/esm/example.d.mts +0 -2
- package/dist/esm/example.d.mts.map +0 -1
- package/dist/esm/example.mjs +0 -37
- package/dist/esm/example.mjs.map +0 -1
- package/dist/esm/index.d.mts +0 -2
- package/dist/esm/index.d.mts.map +0 -1
- package/dist/esm/index.mjs +0 -2
- package/dist/esm/index.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec-block.js","sourceRoot":"","sources":["../../src/codec-block.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { Buffer } from 'node:buffer';
|
|
2
|
+
import type { Block85Spec, BufferLike, DecodeOptions } from './types.js';
|
|
3
|
+
import { BaseCodec } from './codec-base.js';
|
|
4
|
+
/**
|
|
5
|
+
* Converts each 4-byte block to 5 characters, the Ascii85 and Z85 family.
|
|
6
|
+
*
|
|
7
|
+
* 85^5 is the smallest power of 85 above 2^32, so five characters are enough
|
|
8
|
+
* for four bytes and the expansion is 25% instead of Base64's 33%.
|
|
9
|
+
*
|
|
10
|
+
* Several mutually incompatible encodings share this algorithm and alphabet,
|
|
11
|
+
* differing only in the shortcuts and framing they add. They are options here
|
|
12
|
+
* rather than separate codecs: the btoa form is `zeroShortcut` plus
|
|
13
|
+
* `spaceShortcut`, and the Adobe form is `zeroShortcut` plus `delimiters`. The
|
|
14
|
+
* default, `zeroShortcut` alone, matches Python's `base64.a85encode`.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* import { Codecs } from 'bufferbase';
|
|
19
|
+
*
|
|
20
|
+
* Codecs.ascii85.encode(Buffer.from('Man ')); // '9jqo^'
|
|
21
|
+
* Codecs.ascii85.encode(Buffer.alloc(4)); // 'z'
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export declare class Block85Codec extends BaseCodec {
|
|
25
|
+
readonly algorithm: "block85";
|
|
26
|
+
private readonly zeroShortcut;
|
|
27
|
+
private readonly spaceShortcut;
|
|
28
|
+
private readonly delimiters;
|
|
29
|
+
private readonly requireFullBlocks;
|
|
30
|
+
constructor(spec: Block85Spec);
|
|
31
|
+
encode(input: BufferLike): string;
|
|
32
|
+
decode(encoded: string, options?: DecodeOptions): Buffer;
|
|
33
|
+
validate(input: string): boolean;
|
|
34
|
+
/** Writes an ASCII marker, returning how many bytes it took. */
|
|
35
|
+
private writeAscii;
|
|
36
|
+
/** The character-by-character path, for an alphabet that is not single-byte. */
|
|
37
|
+
private encodeAsText;
|
|
38
|
+
/** Renders a block value as its five characters, most significant first. */
|
|
39
|
+
private digitsOf;
|
|
40
|
+
/** Removes the framing, rejecting input that is missing or misplacing it. */
|
|
41
|
+
private undelimit;
|
|
42
|
+
/**
|
|
43
|
+
* Decodes the body. Everything `decode` can reject other than
|
|
44
|
+
* `DecodeOptions.size` is checked here, so `validate` and `decode` agree.
|
|
45
|
+
*/
|
|
46
|
+
private readBytes;
|
|
47
|
+
/**
|
|
48
|
+
* Decodes a trailing group of 2..4 characters into 1..3 bytes.
|
|
49
|
+
*
|
|
50
|
+
* The group is padded to a whole block with the highest digit so that the
|
|
51
|
+
* missing low-order bytes cannot round the value down, then the bytes the
|
|
52
|
+
* group actually carries are kept.
|
|
53
|
+
*/
|
|
54
|
+
private readPartial;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=codec-block85.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec-block85.d.ts","sourceRoot":"","sources":["../../src/codec-block85.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACzE,OAAO,EAAE,SAAS,EAAY,MAAM,iBAAiB,CAAC;AAqBtD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,YAAa,SAAQ,SAAS;IACzC,QAAQ,CAAC,SAAS,EAAG,SAAS,CAAU;IAExC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAU;IACvC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAU;IACxC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAU;IACrC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAU;gBAEhC,IAAI,EAAE,WAAW;IAuB7B,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM;IAsEjC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,MAAM;IASxD,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAShC,gEAAgE;IAChE,OAAO,CAAC,UAAU;IAOlB,gFAAgF;IAChF,OAAO,CAAC,YAAY;IAmBpB,4EAA4E;IAC5E,OAAO,CAAC,QAAQ;IAUhB,6EAA6E;IAC7E,OAAO,CAAC,SAAS;IAUjB;;;OAGG;IACH,OAAO,CAAC,SAAS;IA8CjB;;;;;;OAMG;IACH,OAAO,CAAC,WAAW;CA6CpB"}
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Block85Codec = void 0;
|
|
4
|
+
const node_buffer_1 = require("node:buffer");
|
|
5
|
+
const codec_base_js_1 = require("./codec-base.js");
|
|
6
|
+
const errors_js_1 = require("./errors.js");
|
|
7
|
+
const BYTES_PER_BLOCK = 4;
|
|
8
|
+
const CHARS_PER_BLOCK = 5;
|
|
9
|
+
const BLOCK_LIMIT = 4294967296;
|
|
10
|
+
const ZERO_CHAR = 'z';
|
|
11
|
+
const ZERO_CODE = ZERO_CHAR.charCodeAt(0);
|
|
12
|
+
const SPACE_CHAR = 'y';
|
|
13
|
+
const SPACE_CODE = SPACE_CHAR.charCodeAt(0);
|
|
14
|
+
const SPACE_BLOCK = 0x20202020;
|
|
15
|
+
const OPEN = '<~';
|
|
16
|
+
const CLOSE = '~>';
|
|
17
|
+
/**
|
|
18
|
+
* Converts each 4-byte block to 5 characters, the Ascii85 and Z85 family.
|
|
19
|
+
*
|
|
20
|
+
* 85^5 is the smallest power of 85 above 2^32, so five characters are enough
|
|
21
|
+
* for four bytes and the expansion is 25% instead of Base64's 33%.
|
|
22
|
+
*
|
|
23
|
+
* Several mutually incompatible encodings share this algorithm and alphabet,
|
|
24
|
+
* differing only in the shortcuts and framing they add. They are options here
|
|
25
|
+
* rather than separate codecs: the btoa form is `zeroShortcut` plus
|
|
26
|
+
* `spaceShortcut`, and the Adobe form is `zeroShortcut` plus `delimiters`. The
|
|
27
|
+
* default, `zeroShortcut` alone, matches Python's `base64.a85encode`.
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* import { Codecs } from 'bufferbase';
|
|
32
|
+
*
|
|
33
|
+
* Codecs.ascii85.encode(Buffer.from('Man ')); // '9jqo^'
|
|
34
|
+
* Codecs.ascii85.encode(Buffer.alloc(4)); // 'z'
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
class Block85Codec extends codec_base_js_1.BaseCodec {
|
|
38
|
+
constructor(spec) {
|
|
39
|
+
super(spec);
|
|
40
|
+
this.algorithm = 'block85';
|
|
41
|
+
if (spec.alphabet.length !== 85) {
|
|
42
|
+
throw new errors_js_1.InvalidCodecError(`'block85' needs an alphabet of exactly 85 characters, got ${spec.alphabet.length}`);
|
|
43
|
+
}
|
|
44
|
+
for (const [enabled, char] of [
|
|
45
|
+
[spec.zeroShortcut, ZERO_CHAR],
|
|
46
|
+
[spec.spaceShortcut, SPACE_CHAR],
|
|
47
|
+
]) {
|
|
48
|
+
if (enabled === true && this.valueOf(char) !== undefined) {
|
|
49
|
+
throw new errors_js_1.InvalidCodecError(`shortcut character '${char}' is part of the alphabet`);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
this.zeroShortcut = spec.zeroShortcut ?? false;
|
|
53
|
+
this.spaceShortcut = spec.spaceShortcut ?? false;
|
|
54
|
+
this.delimiters = spec.delimiters ?? false;
|
|
55
|
+
this.requireFullBlocks = spec.requireFullBlocks ?? false;
|
|
56
|
+
}
|
|
57
|
+
encode(input) {
|
|
58
|
+
const buffer = (0, codec_base_js_1.toBuffer)(input);
|
|
59
|
+
if (this.requireFullBlocks && buffer.length % BYTES_PER_BLOCK !== 0) {
|
|
60
|
+
throw new errors_js_1.InvalidLengthError(buffer.length, `this codec encodes whole ${BYTES_PER_BLOCK}-byte blocks only`);
|
|
61
|
+
}
|
|
62
|
+
const codes = this.codes;
|
|
63
|
+
if (codes === null) {
|
|
64
|
+
return this.encodeAsText(buffer);
|
|
65
|
+
}
|
|
66
|
+
const blocks = Math.ceil(buffer.length / BYTES_PER_BLOCK);
|
|
67
|
+
const written = new Uint8Array(blocks * CHARS_PER_BLOCK + OPEN.length + CLOSE.length);
|
|
68
|
+
let at = 0;
|
|
69
|
+
if (this.delimiters) {
|
|
70
|
+
at += this.writeAscii(written, at, OPEN);
|
|
71
|
+
}
|
|
72
|
+
// Whole blocks, with the five divisions unrolled. Dividing a float by 85
|
|
73
|
+
// and truncating with `>>> 0` is several times quicker than `%` paired
|
|
74
|
+
// with `Math.floor`, because every quotient here still fits in 32 bits.
|
|
75
|
+
const whole = buffer.length - (buffer.length % BYTES_PER_BLOCK);
|
|
76
|
+
for (let from = 0; from < whole; from += BYTES_PER_BLOCK) {
|
|
77
|
+
const value = buffer.readUInt32BE(from);
|
|
78
|
+
if (this.zeroShortcut && value === 0) {
|
|
79
|
+
written[at++] = ZERO_CODE;
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
if (this.spaceShortcut && value === SPACE_BLOCK) {
|
|
83
|
+
written[at++] = SPACE_CODE;
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
const q1 = (value / 85) >>> 0;
|
|
87
|
+
const q2 = (q1 / 85) >>> 0;
|
|
88
|
+
const q3 = (q2 / 85) >>> 0;
|
|
89
|
+
const q4 = (q3 / 85) >>> 0;
|
|
90
|
+
written[at] = codes[q4];
|
|
91
|
+
written[at + 1] = codes[q3 - q4 * 85];
|
|
92
|
+
written[at + 2] = codes[q2 - q3 * 85];
|
|
93
|
+
written[at + 3] = codes[q1 - q2 * 85];
|
|
94
|
+
written[at + 4] = codes[value - q1 * 85];
|
|
95
|
+
at += CHARS_PER_BLOCK;
|
|
96
|
+
}
|
|
97
|
+
// The trailing partial block, encoded as `size + 1` characters.
|
|
98
|
+
if (whole < buffer.length) {
|
|
99
|
+
const size = buffer.length - whole;
|
|
100
|
+
let value = 0;
|
|
101
|
+
for (let i = 0; i < BYTES_PER_BLOCK; i++) {
|
|
102
|
+
value = value * 256 + (whole + i < buffer.length ? buffer[whole + i] : 0);
|
|
103
|
+
}
|
|
104
|
+
const digits = new Uint8Array(CHARS_PER_BLOCK);
|
|
105
|
+
for (let i = CHARS_PER_BLOCK - 1; i >= 0; i--) {
|
|
106
|
+
const quotient = (value / 85) >>> 0;
|
|
107
|
+
digits[i] = codes[value - quotient * 85];
|
|
108
|
+
value = quotient;
|
|
109
|
+
}
|
|
110
|
+
for (let i = 0; i <= size; i++) {
|
|
111
|
+
written[at++] = digits[i];
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
if (this.delimiters) {
|
|
115
|
+
at += this.writeAscii(written, at, CLOSE);
|
|
116
|
+
}
|
|
117
|
+
return this.textFrom(written, at);
|
|
118
|
+
}
|
|
119
|
+
decode(encoded, options) {
|
|
120
|
+
const bytes = this.readBytes(this.undelimit(this.strip(encoded)));
|
|
121
|
+
const size = options?.size;
|
|
122
|
+
if (size !== undefined && bytes.length !== size) {
|
|
123
|
+
throw new errors_js_1.BufferSizeError(bytes.length, size);
|
|
124
|
+
}
|
|
125
|
+
return node_buffer_1.Buffer.from(bytes);
|
|
126
|
+
}
|
|
127
|
+
validate(input) {
|
|
128
|
+
try {
|
|
129
|
+
this.readBytes(this.undelimit(this.strip(input)));
|
|
130
|
+
return true;
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/** Writes an ASCII marker, returning how many bytes it took. */
|
|
137
|
+
writeAscii(into, at, text) {
|
|
138
|
+
for (let i = 0; i < text.length; i++) {
|
|
139
|
+
into[at + i] = text.charCodeAt(i);
|
|
140
|
+
}
|
|
141
|
+
return text.length;
|
|
142
|
+
}
|
|
143
|
+
/** The character-by-character path, for an alphabet that is not single-byte. */
|
|
144
|
+
encodeAsText(buffer) {
|
|
145
|
+
let out = '';
|
|
146
|
+
for (let at = 0; at < buffer.length; at += BYTES_PER_BLOCK) {
|
|
147
|
+
const size = Math.min(BYTES_PER_BLOCK, buffer.length - at);
|
|
148
|
+
let value = 0;
|
|
149
|
+
for (let i = 0; i < BYTES_PER_BLOCK; i++) {
|
|
150
|
+
value = value * 256 + (at + i < buffer.length ? buffer[at + i] : 0);
|
|
151
|
+
}
|
|
152
|
+
if (size === BYTES_PER_BLOCK && this.zeroShortcut && value === 0) {
|
|
153
|
+
out += ZERO_CHAR;
|
|
154
|
+
}
|
|
155
|
+
else if (size === BYTES_PER_BLOCK && this.spaceShortcut && value === SPACE_BLOCK) {
|
|
156
|
+
out += SPACE_CHAR;
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
out += this.digitsOf(value).slice(0, size === BYTES_PER_BLOCK ? CHARS_PER_BLOCK : size + 1);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
return this.delimiters ? OPEN + out + CLOSE : out;
|
|
163
|
+
}
|
|
164
|
+
/** Renders a block value as its five characters, most significant first. */
|
|
165
|
+
digitsOf(value) {
|
|
166
|
+
let rest = value;
|
|
167
|
+
const digits = [];
|
|
168
|
+
for (let i = 0; i < CHARS_PER_BLOCK; i++) {
|
|
169
|
+
digits.unshift(this.chars[rest % 85]);
|
|
170
|
+
rest = Math.floor(rest / 85);
|
|
171
|
+
}
|
|
172
|
+
return digits.join('');
|
|
173
|
+
}
|
|
174
|
+
/** Removes the framing, rejecting input that is missing or misplacing it. */
|
|
175
|
+
undelimit(input) {
|
|
176
|
+
if (!this.delimiters) {
|
|
177
|
+
return input;
|
|
178
|
+
}
|
|
179
|
+
if (!input.startsWith(OPEN) || !input.endsWith(CLOSE) || input.length < OPEN.length + CLOSE.length) {
|
|
180
|
+
throw new errors_js_1.InvalidCharacterError();
|
|
181
|
+
}
|
|
182
|
+
return input.slice(OPEN.length, input.length - CLOSE.length);
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Decodes the body. Everything `decode` can reject other than
|
|
186
|
+
* `DecodeOptions.size` is checked here, so `validate` and `decode` agree.
|
|
187
|
+
*/
|
|
188
|
+
readBytes(body) {
|
|
189
|
+
const bytes = [];
|
|
190
|
+
let held = 0;
|
|
191
|
+
let value = 0;
|
|
192
|
+
let groupAt = 0;
|
|
193
|
+
for (let i = 0; i < body.length; i++) {
|
|
194
|
+
if (held === 0) {
|
|
195
|
+
const code = body.charCodeAt(i);
|
|
196
|
+
if (this.zeroShortcut && code === ZERO_CODE) {
|
|
197
|
+
bytes.push(0, 0, 0, 0);
|
|
198
|
+
continue;
|
|
199
|
+
}
|
|
200
|
+
if (this.spaceShortcut && code === SPACE_CODE) {
|
|
201
|
+
bytes.push(0x20, 0x20, 0x20, 0x20);
|
|
202
|
+
continue;
|
|
203
|
+
}
|
|
204
|
+
groupAt = i;
|
|
205
|
+
}
|
|
206
|
+
const digit = this.valueAt(body, i);
|
|
207
|
+
if (digit < 0) {
|
|
208
|
+
throw new errors_js_1.InvalidCharacterError(body[i]);
|
|
209
|
+
}
|
|
210
|
+
value = value * 85 + digit;
|
|
211
|
+
held++;
|
|
212
|
+
if (held === CHARS_PER_BLOCK) {
|
|
213
|
+
if (value >= BLOCK_LIMIT) {
|
|
214
|
+
throw new errors_js_1.ValueRangeError(body.slice(groupAt, i + 1));
|
|
215
|
+
}
|
|
216
|
+
bytes.push((value / 0x1000000) & 0xff, (value / 0x10000) & 0xff, (value / 0x100) & 0xff, value & 0xff);
|
|
217
|
+
held = 0;
|
|
218
|
+
value = 0;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
if (held > 0) {
|
|
222
|
+
this.readPartial(body.slice(groupAt), bytes);
|
|
223
|
+
}
|
|
224
|
+
return bytes;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Decodes a trailing group of 2..4 characters into 1..3 bytes.
|
|
228
|
+
*
|
|
229
|
+
* The group is padded to a whole block with the highest digit so that the
|
|
230
|
+
* missing low-order bytes cannot round the value down, then the bytes the
|
|
231
|
+
* group actually carries are kept.
|
|
232
|
+
*/
|
|
233
|
+
readPartial(group, bytes) {
|
|
234
|
+
if (this.requireFullBlocks) {
|
|
235
|
+
throw new errors_js_1.InvalidLengthError(group.length, `this codec decodes whole ${CHARS_PER_BLOCK}-character blocks only`);
|
|
236
|
+
}
|
|
237
|
+
if (group.length < 2) {
|
|
238
|
+
throw new errors_js_1.InvalidLengthError(group.length, `a trailing group needs at least 2 characters to carry a byte`);
|
|
239
|
+
}
|
|
240
|
+
const padded = group.padEnd(CHARS_PER_BLOCK, this.chars[84]);
|
|
241
|
+
let value = 0;
|
|
242
|
+
for (let i = 0; i < CHARS_PER_BLOCK; i++) {
|
|
243
|
+
const digit = this.valueAt(padded, i);
|
|
244
|
+
if (digit < 0) {
|
|
245
|
+
throw new errors_js_1.InvalidCharacterError(padded[i]);
|
|
246
|
+
}
|
|
247
|
+
value = value * 85 + digit;
|
|
248
|
+
}
|
|
249
|
+
if (value >= BLOCK_LIMIT) {
|
|
250
|
+
throw new errors_js_1.ValueRangeError(group);
|
|
251
|
+
}
|
|
252
|
+
const carried = group.length - 1;
|
|
253
|
+
const block = [];
|
|
254
|
+
for (let shift = 24; shift >= 0; shift -= 8) {
|
|
255
|
+
block.push((value / 2 ** shift) & 0xff);
|
|
256
|
+
}
|
|
257
|
+
const kept = block.slice(0, carried);
|
|
258
|
+
if (this.strict) {
|
|
259
|
+
let padded = 0;
|
|
260
|
+
for (let i = 0; i < BYTES_PER_BLOCK; i++) {
|
|
261
|
+
padded = padded * 256 + (i < carried ? kept[i] : 0);
|
|
262
|
+
}
|
|
263
|
+
if (this.digitsOf(padded).slice(0, group.length) !== group) {
|
|
264
|
+
throw new errors_js_1.NonCanonicalError(`'${group}' is not the shortest encoding of its bytes`);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
bytes.push(...kept);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
exports.Block85Codec = Block85Codec;
|
|
271
|
+
//# sourceMappingURL=codec-block85.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec-block85.js","sourceRoot":"","sources":["../../src/codec-block85.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { Buffer } from 'node:buffer';
|
|
2
|
+
import type { BufferLike, DecodeOptions, RadixSpec } from './types.js';
|
|
3
|
+
import { BaseCodec } from './codec-base.js';
|
|
4
|
+
/**
|
|
5
|
+
* Reads the buffer as one big integer and rewrites it in base
|
|
6
|
+
* `alphabet.length`.
|
|
7
|
+
*
|
|
8
|
+
* This is the Base58 family of encodings. It accepts any alphabet and any
|
|
9
|
+
* input length, but it is not RFC 4648: the output length is not a fixed
|
|
10
|
+
* function of the input length, so it cannot be streamed, and encoding is
|
|
11
|
+
* O(n²) in the input size.
|
|
12
|
+
*
|
|
13
|
+
* Leading zero bytes carry no value in an integer, so they are recorded
|
|
14
|
+
* separately as leading `alphabet[0]` characters.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* import { RadixCodec } from 'bufferbase';
|
|
19
|
+
*
|
|
20
|
+
* const binary = new RadixCodec({ alphabet: '01', algorithm: 'radix' });
|
|
21
|
+
* binary.encode(Uint8Array.of(5)); // '101'
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export declare class RadixCodec extends BaseCodec {
|
|
25
|
+
readonly algorithm: "radix";
|
|
26
|
+
/** Alphabet plus the extra check symbols, or `null` when unchecked. */
|
|
27
|
+
private readonly checkChars;
|
|
28
|
+
/** Value of every character a check symbol may be written as. */
|
|
29
|
+
private readonly checkValues;
|
|
30
|
+
constructor(spec: RadixSpec);
|
|
31
|
+
encode(input: BufferLike): string;
|
|
32
|
+
decode(encoded: string, options?: DecodeOptions): Buffer;
|
|
33
|
+
validate(input: string): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Decodes the body, verifying the check symbol when the codec carries one.
|
|
36
|
+
*
|
|
37
|
+
* Everything `decode` can reject other than `DecodeOptions.size` is checked
|
|
38
|
+
* here, so `validate` and `decode` always agree.
|
|
39
|
+
*/
|
|
40
|
+
private read;
|
|
41
|
+
/** Rewrites the digits of `body` as bytes, most significant first. */
|
|
42
|
+
private toBytes;
|
|
43
|
+
/** The value the bytes denote, modulo `divisor`. */
|
|
44
|
+
private remainderOf;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=codec-radix.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec-radix.d.ts","sourceRoot":"","sources":["../../src/codec-radix.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvE,OAAO,EAAE,SAAS,EAAY,MAAM,iBAAiB,CAAC;AAStD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,UAAW,SAAQ,SAAS;IACvC,QAAQ,CAAC,SAAS,EAAG,OAAO,CAAU;IAEtC,uEAAuE;IACvE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;IAE3C,iEAAiE;IACjE,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA8B;gBAE9C,IAAI,EAAE,SAAS;IA6B3B,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM;IAgCjC,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,MAAM;IAexD,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAmBhC;;;;;OAKG;IACH,OAAO,CAAC,IAAI;IAmBZ,sEAAsE;IACtE,OAAO,CAAC,OAAO;IAoCf,oDAAoD;IACpD,OAAO,CAAC,WAAW;CAOpB"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RadixCodec = void 0;
|
|
4
|
+
const node_buffer_1 = require("node:buffer");
|
|
5
|
+
const codec_base_js_1 = require("./codec-base.js");
|
|
6
|
+
const errors_js_1 = require("./errors.js");
|
|
7
|
+
/**
|
|
8
|
+
* Reads the buffer as one big integer and rewrites it in base
|
|
9
|
+
* `alphabet.length`.
|
|
10
|
+
*
|
|
11
|
+
* This is the Base58 family of encodings. It accepts any alphabet and any
|
|
12
|
+
* input length, but it is not RFC 4648: the output length is not a fixed
|
|
13
|
+
* function of the input length, so it cannot be streamed, and encoding is
|
|
14
|
+
* O(n²) in the input size.
|
|
15
|
+
*
|
|
16
|
+
* Leading zero bytes carry no value in an integer, so they are recorded
|
|
17
|
+
* separately as leading `alphabet[0]` characters.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* import { RadixCodec } from 'bufferbase';
|
|
22
|
+
*
|
|
23
|
+
* const binary = new RadixCodec({ alphabet: '01', algorithm: 'radix' });
|
|
24
|
+
* binary.encode(Uint8Array.of(5)); // '101'
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
class RadixCodec extends codec_base_js_1.BaseCodec {
|
|
28
|
+
constructor(spec) {
|
|
29
|
+
super(spec);
|
|
30
|
+
this.algorithm = 'radix';
|
|
31
|
+
const extra = spec.checkSymbols;
|
|
32
|
+
if (extra === undefined || extra === '') {
|
|
33
|
+
this.checkChars = null;
|
|
34
|
+
this.checkValues = new Map();
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
const combined = spec.alphabet + extra;
|
|
38
|
+
if (new Set(combined).size !== combined.length) {
|
|
39
|
+
throw new errors_js_1.InvalidCodecError('checkSymbols repeat a character of the alphabet');
|
|
40
|
+
}
|
|
41
|
+
// The symbol is matched by value, so that a case-insensitive codec accepts
|
|
42
|
+
// it in either case just as it does the rest of the string.
|
|
43
|
+
const values = new Map();
|
|
44
|
+
for (let i = 0; i < combined.length; i++) {
|
|
45
|
+
const char = combined[i];
|
|
46
|
+
values.set(char, i);
|
|
47
|
+
if (spec.caseInsensitive === true) {
|
|
48
|
+
values.set(char.toLowerCase(), i);
|
|
49
|
+
values.set(char.toUpperCase(), i);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
this.checkChars = combined;
|
|
53
|
+
this.checkValues = values;
|
|
54
|
+
}
|
|
55
|
+
encode(input) {
|
|
56
|
+
const buffer = (0, codec_base_js_1.toBuffer)(input);
|
|
57
|
+
const base = this.chars.length;
|
|
58
|
+
const digits = [];
|
|
59
|
+
for (const byte of buffer) {
|
|
60
|
+
let carry = byte;
|
|
61
|
+
for (let i = 0; i < digits.length; i++) {
|
|
62
|
+
carry += digits[i] * 256;
|
|
63
|
+
digits[i] = carry % base;
|
|
64
|
+
carry = Math.floor(carry / base);
|
|
65
|
+
}
|
|
66
|
+
while (carry > 0) {
|
|
67
|
+
digits.push(carry % base);
|
|
68
|
+
carry = Math.floor(carry / base);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
for (let i = 0; i < buffer.length && buffer[i] === 0; i++) {
|
|
72
|
+
digits.push(0);
|
|
73
|
+
}
|
|
74
|
+
let out = '';
|
|
75
|
+
for (let i = digits.length - 1; i >= 0; i--) {
|
|
76
|
+
out += this.chars[digits[i]];
|
|
77
|
+
}
|
|
78
|
+
if (this.checkChars !== null) {
|
|
79
|
+
out += this.checkChars[this.remainderOf(buffer, this.checkChars.length)];
|
|
80
|
+
}
|
|
81
|
+
return out;
|
|
82
|
+
}
|
|
83
|
+
decode(encoded, options) {
|
|
84
|
+
const bytes = this.read(this.strip(encoded));
|
|
85
|
+
const size = options?.size;
|
|
86
|
+
if (size === undefined) {
|
|
87
|
+
return node_buffer_1.Buffer.from(bytes);
|
|
88
|
+
}
|
|
89
|
+
if (bytes.length > size) {
|
|
90
|
+
throw new errors_js_1.BufferSizeError(bytes.length, size);
|
|
91
|
+
}
|
|
92
|
+
const padded = node_buffer_1.Buffer.alloc(size);
|
|
93
|
+
node_buffer_1.Buffer.from(bytes).copy(padded, size - bytes.length);
|
|
94
|
+
return padded;
|
|
95
|
+
}
|
|
96
|
+
validate(input) {
|
|
97
|
+
const stripped = this.strip(input);
|
|
98
|
+
if (this.checkChars === null) {
|
|
99
|
+
// Every string over the alphabet decodes, so the characters settle it.
|
|
100
|
+
for (let i = 0; i < stripped.length; i++) {
|
|
101
|
+
if (this.valueAt(stripped, i) < 0) {
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return true;
|
|
106
|
+
}
|
|
107
|
+
try {
|
|
108
|
+
this.read(stripped);
|
|
109
|
+
return true;
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Decodes the body, verifying the check symbol when the codec carries one.
|
|
117
|
+
*
|
|
118
|
+
* Everything `decode` can reject other than `DecodeOptions.size` is checked
|
|
119
|
+
* here, so `validate` and `decode` always agree.
|
|
120
|
+
*/
|
|
121
|
+
read(input) {
|
|
122
|
+
let body = input;
|
|
123
|
+
if (this.checkChars !== null) {
|
|
124
|
+
if (body.length === 0) {
|
|
125
|
+
throw new errors_js_1.InvalidLengthError(0, 'a checked encoding always carries a check symbol');
|
|
126
|
+
}
|
|
127
|
+
const found = body.slice(-1);
|
|
128
|
+
body = body.slice(0, -1);
|
|
129
|
+
const bytes = this.toBytes(body);
|
|
130
|
+
const expected = this.remainderOf(bytes, this.checkChars.length);
|
|
131
|
+
if (this.checkValues.get(found) !== expected) {
|
|
132
|
+
throw new errors_js_1.CheckSymbolError(found, this.checkChars[expected]);
|
|
133
|
+
}
|
|
134
|
+
return bytes;
|
|
135
|
+
}
|
|
136
|
+
return this.toBytes(input);
|
|
137
|
+
}
|
|
138
|
+
/** Rewrites the digits of `body` as bytes, most significant first. */
|
|
139
|
+
toBytes(body) {
|
|
140
|
+
const base = this.chars.length;
|
|
141
|
+
const bytes = [];
|
|
142
|
+
let leadingZeros = 0;
|
|
143
|
+
let stillLeading = true;
|
|
144
|
+
for (let at = 0; at < body.length; at++) {
|
|
145
|
+
const value = this.valueAt(body, at);
|
|
146
|
+
if (value < 0) {
|
|
147
|
+
throw new errors_js_1.InvalidCharacterError(body[at]);
|
|
148
|
+
}
|
|
149
|
+
if (stillLeading && value === 0) {
|
|
150
|
+
leadingZeros++;
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
stillLeading = false;
|
|
154
|
+
let carry = value;
|
|
155
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
156
|
+
carry += bytes[i] * base;
|
|
157
|
+
bytes[i] = carry % 256;
|
|
158
|
+
carry = Math.floor(carry / 256);
|
|
159
|
+
}
|
|
160
|
+
while (carry > 0) {
|
|
161
|
+
bytes.push(carry % 256);
|
|
162
|
+
carry = Math.floor(carry / 256);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
for (let i = 0; i < leadingZeros; i++) {
|
|
166
|
+
bytes.push(0);
|
|
167
|
+
}
|
|
168
|
+
bytes.reverse();
|
|
169
|
+
return bytes;
|
|
170
|
+
}
|
|
171
|
+
/** The value the bytes denote, modulo `divisor`. */
|
|
172
|
+
remainderOf(bytes, divisor) {
|
|
173
|
+
let remainder = 0;
|
|
174
|
+
for (const byte of bytes) {
|
|
175
|
+
remainder = (remainder * 256 + byte) % divisor;
|
|
176
|
+
}
|
|
177
|
+
return remainder;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
exports.RadixCodec = RadixCodec;
|
|
181
|
+
//# sourceMappingURL=codec-radix.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec-radix.js","sourceRoot":"","sources":["../../src/codec-radix.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { CodecSpec, ICodec } from './types.js';
|
|
2
|
+
import { RadixCodec } from './codec-radix.js';
|
|
3
|
+
/**
|
|
4
|
+
* Builds the codec described by a spec.
|
|
5
|
+
*
|
|
6
|
+
* A bare string is read as a custom alphabet for a radix conversion, which is
|
|
7
|
+
* the only algorithm that works with an alphabet of any length.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```typescript
|
|
11
|
+
* import { createCodec } from 'bufferbase';
|
|
12
|
+
*
|
|
13
|
+
* const binary = createCodec('01');
|
|
14
|
+
* binary.encode(Uint8Array.of(5)); // '101'
|
|
15
|
+
*
|
|
16
|
+
* const paddedHex = createCodec({ alphabet: '0123456789abcdef', algorithm: 'block' });
|
|
17
|
+
* paddedHex.encode(Uint8Array.of(0, 1)); // '0001'
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export declare function createCodec(spec: CodecSpec | string): ICodec;
|
|
21
|
+
/**
|
|
22
|
+
* Returns the codec for a spec, building it once per spec object.
|
|
23
|
+
*
|
|
24
|
+
* Named bases always resolve to the same spec object, so they are built once
|
|
25
|
+
* for the lifetime of the process.
|
|
26
|
+
*/
|
|
27
|
+
export declare function getCodec(spec: CodecSpec): ICodec;
|
|
28
|
+
export { RadixCodec } from './codec-radix.js';
|
|
29
|
+
export { BlockCodec } from './codec-block.js';
|
|
30
|
+
export { Block85Codec } from './codec-block85.js';
|
|
31
|
+
/**
|
|
32
|
+
* @deprecated Use `createCodec({ alphabet, algorithm: 'radix' })`, or
|
|
33
|
+
* `createCodec(alphabet)` for the same thing.
|
|
34
|
+
*/
|
|
35
|
+
export declare class Codec extends RadixCodec {
|
|
36
|
+
constructor(chars: string);
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=codec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../../src/codec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAI9C;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,MAAM,CAY5D;AAID;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAQhD;AAED,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD;;;GAGG;AACH,qBAAa,KAAM,SAAQ,UAAU;gBACvB,KAAK,EAAE,MAAM;CAG1B"}
|