bufferbase 1.1.12 → 1.2.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 CHANGED
@@ -24,6 +24,7 @@ npm install bufferbase
24
24
 
25
25
  See [src/sample.ts](/src/sample.ts)
26
26
 
27
+
27
28
  ## Contributing
28
29
 
29
30
  Contributions to bufferbase are welcome! Please read our contributing guidelines for more information.
@@ -21,6 +21,9 @@ export declare const Chars: {
21
21
  export declare class InvalidCharacterError extends Error {
22
22
  message: string;
23
23
  }
24
+ export declare class BufferSizeError extends Error {
25
+ message: string;
26
+ }
24
27
  /**
25
28
  * Encodes and decodes buffers to and from a base.
26
29
  */
@@ -34,7 +37,7 @@ export declare class BufferEncoder {
34
37
  /**
35
38
  * Decodes a string to a buffer.
36
39
  */
37
- decode(encoded: string): Buffer;
40
+ decode(encoded: string, bufferSize?: undefined): Buffer;
38
41
  }
39
42
  /**
40
43
  * Creates a converter function that can convert between two bases.
@@ -1 +1 @@
1
- {"version":3,"file":"bufferbase.d.ts","sourceRoot":"","sources":["../src/bufferbase.ts"],"names":[],"mappings":";AAAA;;GAEG;AACH,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;CAqBjB,CAAC;AAEF,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,OAAO,SAA6B;CACrC;AACD;;GAEG;AACH,qBAAa,aAAa;IACZ,OAAO,CAAC,SAAS;gBAAT,SAAS,EAAE,MAAM;IAErC;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IA2B9B;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;CAqBhC;AAED;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,EAAE,aAAa,CAAC;IACvB,OAAO,EAAE,aAAa,CAAC;gBAEX,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAKjD;;OAEG;IACH,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;CAG/B;AAED,qBAAa,SAAS;IACpB,QAAQ,EAAE,aAAa,CAAC;gBAEZ,SAAS,EAAE,MAAM;IAI7B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;CAWjC;AAED,eAAO,MAAM,QAAQ,UAAW,MAAM,QAAQ,MAAM,KAAG,OAEtD,CAAC"}
1
+ {"version":3,"file":"bufferbase.d.ts","sourceRoot":"","sources":["../src/bufferbase.ts"],"names":[],"mappings":";AAAA;;GAEG;AACH,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;CAqBjB,CAAC;AAEF,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,OAAO,SAA6B;CACrC;AAED,qBAAa,eAAgB,SAAQ,KAAK;IACxC,OAAO,SAAwC;CAChD;AAED;;GAEG;AACH,qBAAa,aAAa;IACZ,OAAO,CAAC,SAAS;gBAAT,SAAS,EAAE,MAAM;IAErC;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IA2B9B;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,YAAY,GAAG,MAAM;CAgCxD;AAED;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,EAAE,aAAa,CAAC;IACvB,OAAO,EAAE,aAAa,CAAC;gBAEX,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAKjD;;OAEG;IACH,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;CAG/B;AAED,qBAAa,SAAS;IACpB,QAAQ,EAAE,aAAa,CAAC;gBAEZ,SAAS,EAAE,MAAM;IAI7B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;CAWjC;AAED,eAAO,MAAM,QAAQ,UAAW,MAAM,QAAQ,MAAM,KAAG,OAEtD,CAAC"}
@@ -23,6 +23,12 @@ export class InvalidCharacterError extends Error {
23
23
  this.message = 'Invalid character found';
24
24
  }
25
25
  }
26
+ export class BufferSizeError extends Error {
27
+ constructor() {
28
+ super(...arguments);
29
+ this.message = 'Buffer size exceeds specified size';
30
+ }
31
+ }
26
32
  /**
27
33
  * Encodes and decodes buffers to and from a base.
28
34
  */
@@ -63,7 +69,7 @@ export class BufferEncoder {
63
69
  /**
64
70
  * Decodes a string to a buffer.
65
71
  */
66
- decode(encoded) {
72
+ decode(encoded, bufferSize = undefined) {
67
73
  let result = Buffer.alloc(0);
68
74
  for (const char of encoded) {
69
75
  const value = this.baseChars.indexOf(char);
@@ -83,7 +89,18 @@ export class BufferEncoder {
83
89
  }
84
90
  result = tempResult;
85
91
  }
86
- return result.reverse();
92
+ // buffer size
93
+ if (bufferSize && result.length < bufferSize) {
94
+ result = Buffer.concat([
95
+ result,
96
+ Buffer.from(Array(bufferSize - result.length).fill(0)),
97
+ ]);
98
+ }
99
+ if (bufferSize && result.length !== bufferSize) {
100
+ throw new BufferSizeError();
101
+ }
102
+ result.reverse();
103
+ return result;
87
104
  }
88
105
  }
89
106
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"bufferbase.js","sourceRoot":"","sources":["../src/bufferbase.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bufferbase.js","sourceRoot":"","sources":["../src/bufferbase.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=example.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"example.d.ts","sourceRoot":"","sources":["../src/example.ts"],"names":[],"mappings":""}
@@ -0,0 +1,37 @@
1
+ import { Chars, BufferEncoder, Converter, Validator } from './bufferbase.js';
2
+ // Example buffer
3
+ const bytes = Buffer.from('Hello, World!', 'utf8');
4
+ // Encoding buffer to Base32
5
+ const encoder = new BufferEncoder(Chars.Base32Crockford);
6
+ const base32encoded = encoder.encode(bytes);
7
+ // Converting Base32 to Base58
8
+ const converter_32to58 = new Converter(Chars.Base32Crockford, Chars.Base58);
9
+ const base58encoded = converter_32to58.convert(base32encoded);
10
+ // Converting Base32 to Base58
11
+ const converter_58to64 = new Converter(Chars.Base58, Chars.Base64_URL_SAFE);
12
+ const base64encoded = converter_58to64.convert(base58encoded);
13
+ // Validating Base64
14
+ const validatorB64 = new Validator(Chars.Base64_URL_SAFE);
15
+ const isValidAsBase64 = validatorB64.validate(base64encoded);
16
+ // Decoding Base64
17
+ const decoder = new BufferEncoder(Chars.Base64_URL_SAFE);
18
+ const decoded = decoder.decode(base64encoded);
19
+ console.table({
20
+ bytes: bytes.toString('utf8'),
21
+ base32encoded,
22
+ base58encoded,
23
+ base64encoded,
24
+ isValidAsBase64,
25
+ decoded: decoded.toString('utf8'),
26
+ });
27
+ // ┌─────────────────┬─────────────────────────┐
28
+ // │ (index) │ Values │
29
+ // ├─────────────────┼─────────────────────────┤
30
+ // │ bytes │ 'Hello, World!' │
31
+ // │ base32encoded │ '4GSBCDHQJR82QDXS6RS11' │
32
+ // │ base58encoded │ '72k1xXWG59fYdzSNoA' │
33
+ // │ base64encoded │ 'BIZWxsbywgV29ybGQh' │
34
+ // │ isValidAsBase64 │ true │
35
+ // │ decoded │ 'Hello, World!' │
36
+ // └─────────────────┴─────────────────────────┘
37
+ //# sourceMappingURL=example.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"example.js","sourceRoot":"","sources":["../src/example.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE7E,iBAAiB;AACjB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;AAEnD,4BAA4B;AAC5B,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;AACzD,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAE5C,8BAA8B;AAC9B,MAAM,gBAAgB,GAAG,IAAI,SAAS,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;AAC5E,MAAM,aAAa,GAAG,gBAAgB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;AAE9D,8BAA8B;AAC9B,MAAM,gBAAgB,GAAG,IAAI,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,eAAe,CAAC,CAAC;AAC5E,MAAM,aAAa,GAAG,gBAAgB,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;AAE9D,oBAAoB;AACpB,MAAM,YAAY,GAAG,IAAI,SAAS,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;AAC1D,MAAM,eAAe,GAAG,YAAY,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;AAE7D,kBAAkB;AAClB,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;AACzD,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;AAE9C,OAAO,CAAC,KAAK,CAAC;IACZ,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;IAC7B,aAAa;IACb,aAAa;IACb,aAAa;IACb,eAAe;IACf,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC;CAClC,CAAC,CAAC;AACH,gDAAgD;AAChD,gDAAgD;AAChD,gDAAgD;AAChD,gDAAgD;AAChD,gDAAgD;AAChD,gDAAgD;AAChD,gDAAgD;AAChD,gDAAgD;AAChD,gDAAgD;AAChD,gDAAgD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bufferbase",
3
- "version": "1.1.12",
3
+ "version": "1.2.0",
4
4
  "description": "Buffer-to-BaseN Encoder, Decoder, Converter, and Validator",
5
5
  "type": "module",
6
6
  "types": "./dist/index.d.ts",
@@ -10,7 +10,8 @@
10
10
  "scripts": {
11
11
  "build": "tsc",
12
12
  "prepublishOnly": "npm run build",
13
- "test": "node --loader tsx --test src/*.test.ts"
13
+ "example": "tsx src/example.ts",
14
+ "test": "tsx --test src/*.test.ts"
14
15
  },
15
16
  "devDependencies": {
16
17
  "@types/node": "^20.11.5",
@@ -18,9 +19,6 @@
18
19
  "tsx": "^4.7.0",
19
20
  "typescript": "^5.3.3"
20
21
  },
21
- "peerDependencies": {
22
- "node": ">=12.0.0"
23
- },
24
22
  "repository": {
25
23
  "type": "git",
26
24
  "url": "git+https://github.com/misebox/bufferbase.git"
@@ -1,58 +1,81 @@
1
- import { Chars, BufferEncoder } from "./bufferbase.js";
2
- import { Buffer } from "node:buffer";
3
- import test from "node:test"; // ①
4
- import assert from "node:assert";
1
+ import { Chars, BufferEncoder } from './bufferbase.js';
2
+ import { Buffer } from 'node:buffer';
3
+ import test from 'node:test'; // ①
4
+ import assert from 'node:assert';
5
5
 
6
- test("anybase", async (t) => {
6
+ test('BufferEncoder', async (t) => {
7
7
  await t.test(
8
- "encodes and decodes a string correctly with base58chars",
8
+ 'encodes and decodes a string correctly with base58chars',
9
9
  () => {
10
10
  const encoder = new BufferEncoder(Chars.Base58);
11
- const buffer = Buffer.from("Hello, World!", "utf8");
11
+ const buffer = Buffer.from('Hello, World!', 'utf8');
12
12
 
13
13
  const encoded = encoder.encode(buffer);
14
14
  const decoded = encoder.decode(encoded);
15
15
 
16
- assert.strictEqual(decoded.toString("utf8"), "Hello, World!");
16
+ assert.strictEqual(decoded.toString('utf8'), 'Hello, World!');
17
17
  }
18
18
  );
19
19
 
20
- await t.test("handles empty buffer correctly", () => {
20
+ await t.test('handles empty buffer correctly', () => {
21
21
  const encoder = new BufferEncoder(Chars.Base58);
22
22
  const buffer = Buffer.alloc(0);
23
23
 
24
24
  const encoded = encoder.encode(buffer);
25
25
  const decoded = encoder.decode(encoded);
26
26
 
27
- assert.strictEqual(decoded.toString("utf8"), "");
27
+ assert.strictEqual(decoded.toString('utf8'), '');
28
28
  });
29
29
 
30
- await t.test("handles long buffer correctly", () => {
30
+ await t.test('handles long buffer correctly', () => {
31
31
  const encoder = new BufferEncoder(Chars.Base58);
32
- const buffer = Buffer.from("Hello, World!".repeat(100), "utf8");
32
+ const buffer = Buffer.from('Hello, World!'.repeat(100), 'utf8');
33
33
 
34
34
  const encoded = encoder.encode(buffer);
35
35
  const decoded = encoder.decode(encoded);
36
36
 
37
- assert.strictEqual(decoded.toString("utf8"), "Hello, World!".repeat(100));
37
+ assert.strictEqual(decoded.toString('utf8'), 'Hello, World!'.repeat(100));
38
38
  });
39
39
 
40
- await t.test("encode and decode various chars correctly", () => {
40
+ await t.test('handles bufferSize argument correctly', () => {
41
+ const encoder = new BufferEncoder(Chars.Base58);
42
+ const buffer = Buffer.alloc(0);
43
+
44
+ const encoded = encoder.encode(buffer);
45
+ const decoded = encoder.decode(encoded, 4);
46
+
47
+ assert.strictEqual(decoded.toString('hex'), '00000000');
48
+ });
49
+
50
+ await t.test('encode and decode various chars correctly', () => {
41
51
  for (const charTable of Object.values(Chars)) {
42
52
  const encoder = new BufferEncoder(charTable);
43
- const buffer = Buffer.from("Hello, World!", "utf8");
53
+ const buffer = Buffer.from('Hello, World!', 'utf8');
44
54
 
45
55
  const encoded = encoder.encode(buffer);
46
56
  const decoded = encoder.decode(encoded);
47
57
 
48
- assert.strictEqual(decoded.toString("utf8"), "Hello, World!");
58
+ assert.strictEqual(decoded.toString('utf8'), 'Hello, World!');
49
59
  }
50
60
  });
51
61
 
52
- await t.test("throws error on invalid characters in decode", () => {
62
+ await t.test('handles binary powers from 1 to 63 correctly', () => {
63
+ const encoder = new BufferEncoder(Chars.Base58);
64
+ for (let i = 0; i < 64; i++) {
65
+ const buffer = Buffer.alloc(8);
66
+ const num = BigInt(2) ** BigInt(i) - BigInt(1);
67
+ buffer.writeBigInt64BE(num);
68
+ const encoded = encoder.encode(buffer);
69
+ const decoded = encoder.decode(encoded, 8);
70
+ const result = decoded.readBigInt64BE();
71
+ console.log(encoded, result);
72
+ assert.strictEqual(result, num);
73
+ }
74
+ });
75
+ await t.test('throws error on invalid characters in decode', () => {
53
76
  assert.throws(() => {
54
77
  const encoder = new BufferEncoder(Chars.Base58);
55
- encoder.decode("InvalidString!");
56
- }, new Error("Invalid character found"));
78
+ encoder.decode('InvalidString!');
79
+ }, new Error('Invalid character found'));
57
80
  });
58
81
  });
package/src/bufferbase.ts CHANGED
@@ -27,6 +27,11 @@ export const Chars = {
27
27
  export class InvalidCharacterError extends Error {
28
28
  message = 'Invalid character found';
29
29
  }
30
+
31
+ export class BufferSizeError extends Error {
32
+ message = 'Buffer size exceeds specified size';
33
+ }
34
+
30
35
  /**
31
36
  * Encodes and decodes buffers to and from a base.
32
37
  */
@@ -66,7 +71,7 @@ export class BufferEncoder {
66
71
  /**
67
72
  * Decodes a string to a buffer.
68
73
  */
69
- decode(encoded: string): Buffer {
74
+ decode(encoded: string, bufferSize = undefined): Buffer {
70
75
  let result = Buffer.alloc(0);
71
76
  for (const char of encoded) {
72
77
  const value = this.baseChars.indexOf(char);
@@ -85,7 +90,18 @@ export class BufferEncoder {
85
90
  }
86
91
  result = tempResult;
87
92
  }
88
- return result.reverse();
93
+ // buffer size
94
+ if (bufferSize && result.length < bufferSize) {
95
+ result = Buffer.concat([
96
+ result,
97
+ Buffer.from(Array(bufferSize - result.length).fill(0)),
98
+ ]);
99
+ }
100
+ if (bufferSize && result.length !== bufferSize) {
101
+ throw new BufferSizeError();
102
+ }
103
+ result.reverse();
104
+ return result;
89
105
  }
90
106
  }
91
107
 
@@ -1,7 +1,7 @@
1
- import { Chars, BufferEncoder, Converter, Validator } from "./bufferbase.js";
1
+ import { Chars, BufferEncoder, Converter, Validator } from './bufferbase.js';
2
2
 
3
3
  // Example buffer
4
- const bytes = Buffer.from("Hello, World!", "utf8");
4
+ const bytes = Buffer.from('Hello, World!', 'utf8');
5
5
 
6
6
  // Encoding buffer to Base32
7
7
  const encoder = new BufferEncoder(Chars.Base32Crockford);
@@ -24,12 +24,12 @@ const decoder = new BufferEncoder(Chars.Base64_URL_SAFE);
24
24
  const decoded = decoder.decode(base64encoded);
25
25
 
26
26
  console.table({
27
- bytes: bytes.toString("utf8"),
27
+ bytes: bytes.toString('utf8'),
28
28
  base32encoded,
29
29
  base58encoded,
30
30
  base64encoded,
31
31
  isValidAsBase64,
32
- decoded: decoded.toString("utf8"),
32
+ decoded: decoded.toString('utf8'),
33
33
  });
34
34
  // ┌─────────────────┬─────────────────────────┐
35
35
  // │ (index) │ Values │