kasten-js 0.3.0 → 0.4.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
@@ -50,9 +50,10 @@ All codecs available in Kasten are below.
50
50
  |Base 32|RFC4648|`base32`|`rfc4648`|The latest Base 32 specification.|
51
51
  |Base 32|RFC4648 (HEX)|`base32`|`rfc4648-hex`|The latest Base 32 specification for hexadecimal encoding.|
52
52
  |Base 16|RFC4648|`base16`|`rfc4648`|The latest Base 16 specification.|
53
+ |Base 16|AsciiHexDecode (PDF1.7)|`base16`|`ascii`|The Base 16 specification of PDF1.7.|
53
54
  |Run-Length|Basic|`runLength`|`basic`|The basic and old Run-Length encoding.|
54
55
  |Run-Length|PackBits|`runLength`|`pack-bits`|The old Run-Length encoding accepted by [MacPrint of Apple](https://web.archive.org/web/20080705155158/http://developer.apple.com/technotes/tn/tn1023.html).|
55
- |Run-Length|RunLengthDecode (PDF1.7)|`runLength`|`pdf`|The Run-Length specofication of [PDF1.7](https://opensource.adobe.com/dc-acrobat-sdk-docs/pdfstandards/PDF32000_2008.pdf).|
56
+ |Run-Length|RunLengthDecode (PDF1.7)|`runLength`|`pdf`|The Run-Length specofication of PDF1.7.|
56
57
 
57
58
  ## License
58
59
 
package/dist/index.cjs CHANGED
@@ -5,13 +5,22 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
5
5
  */
6
6
  var Base16 = class {};
7
7
  //#endregion
8
- //#region src/char-codes.ts
8
+ //#region src/utils/char-codes.ts
9
9
  var CharCodes = class {
10
- static CR = 13;
10
+ static HT = 9;
11
11
  static LF = 10;
12
+ static VT = 11;
13
+ static FF = 12;
14
+ static CR = 13;
12
15
  static SP = 32;
13
- static HT = 9;
14
16
  constructor() {}
17
+ static isWhitespace = (c) => {
18
+ const type = typeof c;
19
+ if (type !== "string" && type !== "number") throw new Error("invalid argument type.");
20
+ if (type === "string" && c.length !== 1) throw new Error("inalid argument: not a character");
21
+ const code = typeof c === "string" ? c.charCodeAt(0) : c;
22
+ return this.HT <= code && code <= this.CR || code === this.SP;
23
+ };
15
24
  };
16
25
  //#endregion
17
26
  //#region src/errors.ts
@@ -51,13 +60,12 @@ var RFC4648Base16 = class RFC4648Base16 extends Base16 {
51
60
  }
52
61
  decode(base16) {
53
62
  const DECODED_TABLE = RFC4648Base16.DECODED_TABLE;
54
- const { CR, LF, SP, HT } = CharCodes;
55
63
  const upper = base16.toUpperCase();
56
64
  const chars = new Uint8Array(base16.length);
57
65
  let charCount = 0;
58
66
  for (let i = 0; i < base16.length; i++) {
59
67
  const c = upper.charCodeAt(i);
60
- if (c === CR || c === LF || c === SP || c === HT) continue;
68
+ if (CharCodes.isWhitespace(c)) continue;
61
69
  if (!DECODED_TABLE[c] || DECODED_TABLE[c] == 255) throw new KastenBase16DecodeError(`Invalid Base16 character: ${base16.charAt(i)}`);
62
70
  chars[charCount++] = c;
63
71
  }
@@ -76,6 +84,43 @@ var RFC4648Base16 = class RFC4648Base16 extends Base16 {
76
84
  }
77
85
  };
78
86
  //#endregion
87
+ //#region src/base16/ascii/ascii.ts
88
+ /**
89
+ * AsciiHexDecode codec of PDF1.7
90
+ */
91
+ var AsciiHexDecode = class extends Base16 {
92
+ encode(bytes) {
93
+ if (bytes.length === 0) return ">";
94
+ const chars = [];
95
+ for (const byte of bytes) {
96
+ const char = byte.toString(16).padStart(2, "0");
97
+ chars.push(char);
98
+ }
99
+ chars.push(">");
100
+ return chars.join("");
101
+ }
102
+ decode(base16) {
103
+ const chars = [];
104
+ for (const c of base16) {
105
+ if (c === ">") break;
106
+ if (CharCodes.isWhitespace(c)) continue;
107
+ const code = c.charCodeAt(0);
108
+ if (!(48 <= code && code <= 57) && !(65 <= code && code <= 70) && !(97 <= code && code <= 102)) throw new KastenBase16DecodeError(`invalid char: ${c}`);
109
+ chars.push(c);
110
+ }
111
+ if (chars.length % 2 !== 0) chars.push("0");
112
+ const strLength = chars.length;
113
+ const bytes = new Uint8Array(Math.ceil(strLength / 2));
114
+ let byteCount = 0;
115
+ for (let i = 0, j = 0; i < strLength; i += 2, j++) {
116
+ const hex = chars[i] + chars[i + 1];
117
+ const byte = Number.parseInt(hex, 16);
118
+ bytes[byteCount++] = byte;
119
+ }
120
+ return bytes.subarray(0, byteCount);
121
+ }
122
+ };
123
+ //#endregion
79
124
  //#region src/base32/index.ts
80
125
  /**
81
126
  * Base32 codec.
@@ -143,12 +188,11 @@ var RFC4648Base32 = class RFC4648Base32 extends Base32 {
143
188
  const upper = base32.toUpperCase();
144
189
  const DECODED_TABLE = RFC4648Base32.DECODED_TABLE;
145
190
  const PADDING = RFC4648Base32.PADDING_CHAR_CODE;
146
- const { CR, LF, SP, HT } = CharCodes;
147
191
  const chars = new Uint8Array(base32.length);
148
192
  let charCount = 0;
149
193
  for (let i = 0; i < base32.length; i++) {
150
194
  const c = upper.charCodeAt(i);
151
- if (c !== CR && c !== LF && c !== SP && c !== HT) chars[charCount++] = c;
195
+ if (!CharCodes.isWhitespace(c)) chars[charCount++] = c;
152
196
  }
153
197
  if (charCount % 8 !== 0) throw new KastenBase32DecodeError("Invalid length string.");
154
198
  let firstPad = -1;
@@ -252,12 +296,11 @@ var RFC4648Base32Hex = class RFC4648Base32Hex extends Base32 {
252
296
  const upper = base32.toUpperCase();
253
297
  const DECODED_TABLE = RFC4648Base32Hex.DECODED_TABLE;
254
298
  const PADDING = RFC4648Base32Hex.PADDING_CHAR_CODE;
255
- const { CR, LF, SP, HT } = CharCodes;
256
299
  const chars = new Uint8Array(base32.length);
257
300
  let charCount = 0;
258
301
  for (let i = 0; i < base32.length; i++) {
259
302
  const c = upper.charCodeAt(i);
260
- if (c !== CR && c !== LF && c !== SP && c !== HT) chars[charCount++] = c;
303
+ if (!CharCodes.isWhitespace(c)) chars[charCount++] = c;
261
304
  }
262
305
  if (charCount % 8 !== 0) throw new KastenBase32DecodeError("Invalid length string.");
263
306
  let firstPad = -1;
@@ -341,6 +384,7 @@ var RFC2045Base64 = class RFC2045Base64 extends Base64 {
341
384
  encode = (bytes) => {
342
385
  if (bytes.length === 0) return "";
343
386
  const ENCODE_TABLE = RFC2045Base64.ENCODE_TABLE;
387
+ const { CR, LF } = CharCodes;
344
388
  const baseSize = Math.ceil(bytes.length / 3) * 4;
345
389
  const linebreaks = Math.floor((baseSize - 1) / 76);
346
390
  const chars = new Uint8Array(baseSize + linebreaks * 2);
@@ -361,8 +405,8 @@ var RFC2045Base64 = class RFC2045Base64 extends Base64 {
361
405
  charCout += 4;
362
406
  if (charCout === 76 && ci < chars.length) {
363
407
  charCout = 0;
364
- chars[ci++] = CharCodes.CR;
365
- chars[ci++] = CharCodes.LF;
408
+ chars[ci++] = CR;
409
+ chars[ci++] = LF;
366
410
  }
367
411
  }
368
412
  const remain = bytes.length % 3;
@@ -461,7 +505,7 @@ var RFC4648Base64 = class RFC4648Base64 extends Base64 {
461
505
  let lineCharCount = 0;
462
506
  for (let i = 0; i < base64.length; i++) {
463
507
  const c = base64.charCodeAt(i);
464
- if (c !== CharCodes.CR && c !== CharCodes.LF && c !== CharCodes.SP && c !== CharCodes.HT) line[lineCharCount++] = c;
508
+ if (!CharCodes.isWhitespace(c)) line[lineCharCount++] = c;
465
509
  }
466
510
  if (lineCharCount % 4 !== 0) throw new KastenBase64DecodeError("Invalid length string");
467
511
  let firstPad = -1;
@@ -544,7 +588,7 @@ var RFC4648Base64URL = class RFC4648Base64URL extends Base64 {
544
588
  let lineCharCount = 0;
545
589
  for (let i = 0; i < base64.length; i++) {
546
590
  const c = base64.charCodeAt(i);
547
- if (c !== CharCodes.CR && c !== CharCodes.LF && c !== CharCodes.SP && c !== CharCodes.HT) line[lineCharCount++] = c;
591
+ if (!CharCodes.isWhitespace(c)) line[lineCharCount++] = c;
548
592
  }
549
593
  if (lineCharCount % 4 !== 0) throw new KastenBase64DecodeError("Invalid length string");
550
594
  let firstPad = -1;
@@ -590,6 +634,9 @@ var RFC4648Base64URL = class RFC4648Base64URL extends Base64 {
590
634
  var RunLength = class {};
591
635
  //#endregion
592
636
  //#region src/run-length/basic/basic-run-length.ts
637
+ /**
638
+ * Basic Run-Length codec.
639
+ */
593
640
  var BasicRunLength = class extends RunLength {
594
641
  encode(bytes) {
595
642
  const encoded = new Uint8Array(bytes.length * 2);
@@ -637,6 +684,9 @@ var KastenRunLengthEncodeError = class extends KastenRunLengthError {};
637
684
  var KastenRunLengthDecodeError = class extends KastenRunLengthError {};
638
685
  //#endregion
639
686
  //#region src/run-length/pack-bits/pack-bits.ts
687
+ /**
688
+ * PackBits codec.
689
+ */
640
690
  var PackBits = class extends RunLength {
641
691
  encode(bytes) {
642
692
  if (bytes.length === 0) return new Uint8Array([]);
@@ -807,6 +857,7 @@ var Kasten = class {
807
857
  */
808
858
  static base16 = (category) => {
809
859
  switch (category) {
860
+ case "ascii": return new AsciiHexDecode();
810
861
  default: return new RFC4648Base16();
811
862
  }
812
863
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":[],"sources":["../src/base16/index.ts","../src/char-codes.ts","../src/errors.ts","../src/base16/errors.ts","../src/base16/rfc4648/rfc4648.ts","../src/base32/index.ts","../src/base32/errors.ts","../src/base32/rfc4648/rfc4648.ts","../src/base32/rfc4648/rfc4648hex.ts","../src/base64/index.ts","../src/base64/errors.ts","../src/base64/rfc2045/rfc2045.ts","../src/base64/rfc4648/rfc4648.ts","../src/base64/rfc4648/rfc4648url.ts","../src/run-length/index.ts","../src/run-length/basic/basic-run-length.ts","../src/run-length/errors.ts","../src/run-length/pack-bits/pack-bits.ts","../src/run-length/pdf/pdf.ts","../src/kasten.ts"],"sourcesContent":["export const Base16Categories = ['rfc4648'] as const;\n\nexport type Base16Category = typeof Base16Categories[number];\n\n/**\n * Base16 codec.\n */\nexport abstract class Base16 {\n\n /**\n * Encodes bytes to Base16 string.\n * @param bytes Bytes to be encoded.\n */\n public abstract encode(bytes: Uint8Array): string;\n\n /**\n * Decodes Base16 string to bytes.\n * @param base16 Base16 string to be decoded.\n */\n public abstract decode(base16: string): Uint8Array;\n}","export class CharCodes {\n\n public static CR = 13;\n\n public static LF = 10;\n\n public static SP = 32;\n\n public static HT = 9;\n\n private constructor() {}\n}","export class KastenError extends Error {}","import { KastenError } from '@/errors';\n\nexport class KastenBase16Error extends KastenError {}\n\nexport class KastenBase16EncodeError extends KastenBase16Error {}\n\nexport class KastenBase16DecodeError extends KastenBase16Error {}","import { Base16 } from '@/base16';\nimport { CharCodes } from '@/char-codes';\nimport { KastenBase16DecodeError } from '../errors';\n\n/**\n * RFC 4648 Base 16 encoding.\n */\nexport class RFC4648Base16 extends Base16 {\n\n private static readonly textDecoder = new TextDecoder();\n\n private static readonly TABLE = '0123456789ABCDEF';\n\n private static readonly ENCODED_TABLE = new Uint8Array(\n [...this.TABLE].map(c => c.charCodeAt(0))\n );\n\n private static readonly DECODED_TABLE = new Uint8Array(256);\n\n static {\n this.DECODED_TABLE.fill(255);\n\n for (let i = 0; i < this.TABLE.length; i++) {\n this.DECODED_TABLE[this.TABLE.charCodeAt(i)] = i;\n }\n }\n\n public override encode(bytes: Uint8Array): string {\n\n const ENCODED_TABLE = RFC4648Base16.ENCODED_TABLE;\n\n const chars = new Uint8Array(bytes.length * 2);\n\n let charCount = 0;\n\n for (const byte of bytes) {\n \n const ci1 = (byte & 0xF0) >> 4;\n const ci2 = byte & 0x0F;\n\n const c1 = ENCODED_TABLE[ci1]!;\n const c2 = ENCODED_TABLE[ci2]!;\n\n chars[charCount++] = c1;\n chars[charCount++] = c2;\n }\n\n return RFC4648Base16.textDecoder.decode(chars);\n }\n \n public override decode(base16: string): Uint8Array {\n\n const DECODED_TABLE = RFC4648Base16.DECODED_TABLE;\n const { CR, LF, SP, HT, } = CharCodes;\n\n const upper = base16.toUpperCase();\n const chars = new Uint8Array(base16.length);\n\n let charCount = 0;\n\n for (let i = 0; i < base16.length; i++) {\n const c = upper.charCodeAt(i);\n\n if (c === CR || c === LF || c === SP || c === HT)\n continue;\n\n if (!DECODED_TABLE[c] || DECODED_TABLE[c] == 255)\n throw new KastenBase16DecodeError(`Invalid Base16 character: ${base16.charAt(i)}`);\n\n chars[charCount++] = c;\n }\n\n if (charCount % 2 !== 0)\n throw new KastenBase16DecodeError('Invalid Base16');\n\n const bytes = new Uint8Array(Math.ceil(base16.length / 2));\n\n let byteCount = 0;\n\n for (let i = 0; i < charCount; i += 2) {\n \n const c1 = chars[i]!;\n const c2 = chars[i + 1]!;\n\n const ci1 = DECODED_TABLE[c1]!;\n const ci2 = DECODED_TABLE[c2]!;\n\n const byte = ((ci1 & 0x0F) << 4) | (ci2 & 0x0F);\n\n bytes[byteCount++] = byte;\n }\n\n return bytes.subarray(0, byteCount);\n }\n}","export type Base32Category = typeof Base32Categories[number];\n\nexport const Base32Categories = ['rfc4648', 'rfc468-hex'] as const;\n\n/**\n * Base32 codec.\n */\nexport abstract class Base32 {\n\n protected static readonly textDecoder = new TextDecoder();\n\n /**\n * Encodes bytes to Base32 string\n * @param bytes Bytes to be encoded.\n */\n public abstract encode(bytes: Uint8Array): string;\n\n /**\n * Decodes Base32 string to bytes.\n * @param base32 Base32 string to be decoded.\n */\n public abstract decode(base32: string): Uint8Array;\n}","import { KastenError } from '@/errors';\n\nexport class KastenBase32Error extends KastenError {}\n\nexport class KastenBase32EncodeError extends KastenBase32Error {}\n\nexport class KastenBase32DecodeError extends KastenBase32Error {}","import { Base32 } from '@/base32';\nimport { CharCodes } from '@/char-codes';\nimport { KastenBase32DecodeError } from '@/base32/errors';\n\nexport class RFC4648Base32 extends Base32 {\n\n private static readonly PADDING_CHAR_CODE: number = '='.charCodeAt(0);\n\n private static readonly TABLE: string\n = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567';\n\n private static readonly ENCODED_TABLE = new Uint8Array(\n [...this.TABLE].map(c => c.charCodeAt(0))\n );\n\n private static readonly DECODED_TABLE = new Uint8Array(256);\n\n static {\n this.DECODED_TABLE.fill(255);\n\n for (let i = 0; i < this.TABLE.length; i++) {\n this.DECODED_TABLE[this.TABLE.charCodeAt(i)] = i;\n }\n }\n\n public override encode(bytes: Uint8Array): string {\n\n const ENCODED_TABLE = RFC4648Base32.ENCODED_TABLE;\n\n const chars = new Uint8Array(Math.ceil(bytes.length / 5) * 8);\n\n let count = 0;\n\n for (let i = 0; i < bytes.length; i += 5) {\n\n const b1 = bytes[i]!;\n const b2 = bytes[i + 1] ?? 0;\n const b3 = bytes[i + 2] ?? 0;\n const b4 = bytes[i + 3] ?? 0;\n const b5 = bytes[i + 4] ?? 0;\n\n const ci1 = (b1 & 0xFF) >> 3;\n const ci2 = ((b1 & 0x07) << 2) | ((b2 & 0xC0) >> 6);\n const ci3 = (b2 & 0x3E) >> 1;\n const ci4 = ((b2 & 0x01) << 4) | ((b3 & 0xF0) >> 4);\n const ci5 = ((b3 & 0x0F) << 1) | ((b4 & 0x80) >> 7);\n const ci6 = (b4 & 0x7C) >> 2;\n const ci7 = ((b4 & 0x03) << 3) | ((b5 & 0xE0) >> 5);\n const ci8 = b5 & 0x1F;\n\n const c1 = ENCODED_TABLE[ci1]!;\n const c2 = ENCODED_TABLE[ci2]!;\n const c3 = ENCODED_TABLE[ci3]!;\n const c4 = ENCODED_TABLE[ci4]!;\n const c5 = ENCODED_TABLE[ci5]!;\n const c6 = ENCODED_TABLE[ci6]!;\n const c7 = ENCODED_TABLE[ci7]!;\n const c8 = ENCODED_TABLE[ci8]!;\n\n chars[count++] = c1;\n chars[count++] = c2;\n chars[count++] = c3;\n chars[count++] = c4;\n chars[count++] = c5;\n chars[count++] = c6;\n chars[count++] = c7;\n chars[count++] = c8;\n }\n\n const remain = bytes.length % 5;\n\n const padding =\n remain === 4 ? 1 :\n remain === 3 ? 3 :\n remain === 2 ? 4 :\n remain === 1 ? 6 : 0;\n\n for (let i = padding; i > 0; i--) {\n chars[count - i] = RFC4648Base32.PADDING_CHAR_CODE;\n }\n\n return Base32.textDecoder.decode(chars.subarray(0, count));\n }\n \n public override decode(base32: string): Uint8Array {\n\n const upper = base32.toUpperCase();\n\n const DECODED_TABLE = RFC4648Base32.DECODED_TABLE;\n const PADDING = RFC4648Base32.PADDING_CHAR_CODE;\n const { CR, LF, SP, HT } = CharCodes;\n\n const chars = new Uint8Array(base32.length);\n\n let charCount = 0;\n\n for (let i = 0; i < base32.length; i++) {\n\n const c = upper.charCodeAt(i);\n\n if (c !== CR &&\n c !== LF &&\n c !== SP &&\n c !== HT) {\n\n chars[charCount++] = c;\n }\n }\n\n if (charCount % 8 !== 0)\n throw new KastenBase32DecodeError('Invalid length string.');\n\n let firstPad = -1;\n\n for (let i = 0; i < charCount; i++) {\n if (chars[i] === PADDING) {\n firstPad = i;\n break;\n }\n }\n\n let padCount = 0;\n\n if (firstPad !== -1) {\n\n if (firstPad < charCount - 6)\n throw new KastenBase32DecodeError('Invalid padding position.');\n\n for (let i = firstPad; i < charCount; i++) {\n if (chars[i] !== PADDING) {\n throw new KastenBase32DecodeError('Invalid padding');\n }\n }\n\n padCount = charCount - firstPad;\n\n if (padCount !== 1 && padCount !== 3 && padCount !== 4 && padCount !== 6) {\n throw new KastenBase32DecodeError('Invalid padding');\n }\n }\n\n const bytes = new Uint8Array(Math.floor(((charCount - padCount) * 5) / 8));\n\n let byteCount = 0;\n\n for (let i = 0; i < charCount; i += 8) {\n\n const c1 = chars[i]!;\n const c2 = chars[i + 1]!;\n const c3 = chars[i + 2]!;\n const c4 = chars[i + 3]!;\n const c5 = chars[i + 4]!;\n const c6 = chars[i + 5]!;\n const c7 = chars[i + 6]!;\n const c8 = chars[i + 7]!;\n\n const ci1 = DECODED_TABLE[c1]!;\n const ci2 = DECODED_TABLE[c2]!;\n const ci3 = c3 !== PADDING ? DECODED_TABLE[c3]! : 0;\n const ci4 = c4 !== PADDING ? DECODED_TABLE[c4]! : 0;\n const ci5 = c5 !== PADDING ? DECODED_TABLE[c5]! : 0;\n const ci6 = c6 !== PADDING ? DECODED_TABLE[c6]! : 0;\n const ci7 = c7 !== PADDING ? DECODED_TABLE[c7]! : 0;\n const ci8 = c8 !== PADDING ? DECODED_TABLE[c8]! : 0;\n\n if (ci1 === 255 ||\n ci2 === 255 ||\n ci3 === 255 ||\n ci4 === 255 ||\n ci5 === 255 ||\n ci6 === 255 ||\n ci7 === 255 ||\n ci8 === 255) {\n\n throw new KastenBase32DecodeError('Invalid Base32');\n }\n\n const b1 = ((ci1 & 0x1F) << 3) | ((ci2 & 0x1C) >> 2);\n const b2 = ((ci2 & 0x03) << 6) | ((ci3 & 0x1F) << 1) | ((ci4 & 0x10) >> 4);\n const b3 = ((ci4 & 0x0F) << 4) | ((ci5 & 0x1E) >> 1);\n const b4 = ((ci5 & 0x01) << 7) | ((ci6 & 0x1F) << 2) | ((ci7 & 0x18) >> 3);\n const b5 = ((ci7 & 0x07) << 5) | (ci8 & 0x1F);\n\n bytes[byteCount++] = b1;\n\n if (byteCount < bytes.length)\n bytes[byteCount++] = b2;\n\n if (byteCount < bytes.length)\n bytes[byteCount++] = b3;\n\n if (byteCount < bytes.length && c5 !== PADDING)\n bytes[byteCount++] = b4;\n\n if (byteCount < bytes.length && c7 != PADDING)\n bytes[byteCount++] = b5;\n }\n\n return bytes.subarray(0, byteCount);\n }\n}","import { Base32 } from '@/base32';\nimport { CharCodes } from '@/char-codes';\nimport { KastenBase32DecodeError } from '@/base32/errors';\n\nexport class RFC4648Base32Hex extends Base32 {\n\n private static readonly PADDING_CHAR_CODE: number = '='.charCodeAt(0);\n\n private static readonly TABLE: string\n = '0123456789ABCDEFGHIJKLMNOPQRSTUV';\n\n private static readonly ENCODED_TABLE = new Uint8Array(\n [...this.TABLE].map(c => c.charCodeAt(0))\n );\n\n private static readonly DECODED_TABLE = new Uint8Array(256);\n\n static {\n this.DECODED_TABLE.fill(255);\n\n for (let i = 0; i < this.TABLE.length; i++) {\n this.DECODED_TABLE[this.TABLE.charCodeAt(i)] = i;\n }\n }\n\n public override encode(bytes: Uint8Array): string {\n\n const ENCODED_TABLE = RFC4648Base32Hex.ENCODED_TABLE;\n\n const chars = new Uint8Array(Math.ceil(bytes.length / 5) * 8);\n\n let count = 0;\n\n for (let i = 0; i < bytes.length; i += 5) {\n\n const b1 = bytes[i]!;\n const b2 = bytes[i + 1] ?? 0;\n const b3 = bytes[i + 2] ?? 0;\n const b4 = bytes[i + 3] ?? 0;\n const b5 = bytes[i + 4] ?? 0;\n\n const ci1 = (b1 & 0xFF) >> 3;\n const ci2 = ((b1 & 0x07) << 2) | ((b2 & 0xC0) >> 6);\n const ci3 = (b2 & 0x3E) >> 1;\n const ci4 = ((b2 & 0x01) << 4) | ((b3 & 0xF0) >> 4);\n const ci5 = ((b3 & 0x0F) << 1) | ((b4 & 0x80) >> 7);\n const ci6 = (b4 & 0x7C) >> 2;\n const ci7 = ((b4 & 0x03) << 3) | ((b5 & 0xE0) >> 5);\n const ci8 = b5 & 0x1F;\n\n const c1 = ENCODED_TABLE[ci1]!;\n const c2 = ENCODED_TABLE[ci2]!;\n const c3 = ENCODED_TABLE[ci3]!;\n const c4 = ENCODED_TABLE[ci4]!;\n const c5 = ENCODED_TABLE[ci5]!;\n const c6 = ENCODED_TABLE[ci6]!;\n const c7 = ENCODED_TABLE[ci7]!;\n const c8 = ENCODED_TABLE[ci8]!;\n\n chars[count++] = c1;\n chars[count++] = c2;\n chars[count++] = c3;\n chars[count++] = c4;\n chars[count++] = c5;\n chars[count++] = c6;\n chars[count++] = c7;\n chars[count++] = c8;\n }\n\n const remain = bytes.length % 5;\n\n const padding =\n remain === 4 ? 1 :\n remain === 3 ? 3 :\n remain === 2 ? 4 :\n remain === 1 ? 6 : 0;\n\n for (let i = padding; i > 0; i--) {\n chars[count - i] = RFC4648Base32Hex.PADDING_CHAR_CODE;\n }\n\n return Base32.textDecoder.decode(chars.subarray(0, count));\n }\n \n public override decode(base32: string): Uint8Array {\n\n const upper = base32.toUpperCase();\n\n const DECODED_TABLE = RFC4648Base32Hex.DECODED_TABLE;\n const PADDING = RFC4648Base32Hex.PADDING_CHAR_CODE;\n const { CR, LF, SP, HT } = CharCodes;\n\n const chars = new Uint8Array(base32.length);\n\n let charCount = 0;\n\n for (let i = 0; i < base32.length; i++) {\n\n const c = upper.charCodeAt(i);\n\n if (c !== CR &&\n c !== LF &&\n c !== SP &&\n c !== HT) {\n\n chars[charCount++] = c;\n }\n }\n\n if (charCount % 8 !== 0)\n throw new KastenBase32DecodeError('Invalid length string.');\n\n let firstPad = -1;\n\n for (let i = 0; i < charCount; i++) {\n if (chars[i] === PADDING) {\n firstPad = i;\n break;\n }\n }\n\n let padCount = 0;\n\n if (firstPad !== -1) {\n\n if (firstPad < charCount - 6)\n throw new KastenBase32DecodeError('Invalid padding position.');\n\n for (let i = firstPad; i < charCount; i++) {\n if (chars[i] !== PADDING) {\n throw new KastenBase32DecodeError('Invalid padding');\n }\n }\n\n padCount = charCount - firstPad;\n\n if (padCount !== 1 && padCount !== 3 && padCount !== 4 && padCount !== 6) {\n throw new KastenBase32DecodeError('Invalid padding');\n }\n }\n\n const bytes = new Uint8Array(Math.floor(((charCount - padCount) * 5) / 8));\n\n let byteCount = 0;\n\n for (let i = 0; i < charCount; i += 8) {\n\n const c1 = chars[i]!;\n const c2 = chars[i + 1]!;\n const c3 = chars[i + 2]!;\n const c4 = chars[i + 3]!;\n const c5 = chars[i + 4]!;\n const c6 = chars[i + 5]!;\n const c7 = chars[i + 6]!;\n const c8 = chars[i + 7]!;\n\n const ci1 = DECODED_TABLE[c1]!;\n const ci2 = DECODED_TABLE[c2]!;\n const ci3 = c3 !== PADDING ? DECODED_TABLE[c3]! : 0;\n const ci4 = c4 !== PADDING ? DECODED_TABLE[c4]! : 0;\n const ci5 = c5 !== PADDING ? DECODED_TABLE[c5]! : 0;\n const ci6 = c6 !== PADDING ? DECODED_TABLE[c6]! : 0;\n const ci7 = c7 !== PADDING ? DECODED_TABLE[c7]! : 0;\n const ci8 = c8 !== PADDING ? DECODED_TABLE[c8]! : 0;\n\n if (ci1 === 255 ||\n ci2 === 255 ||\n ci3 === 255 ||\n ci4 === 255 ||\n ci5 === 255 ||\n ci6 === 255 ||\n ci7 === 255 ||\n ci8 === 255) {\n\n throw new KastenBase32DecodeError('Invalid Base32');\n }\n\n const b1 = ((ci1 & 0x1F) << 3) | ((ci2 & 0x1C) >> 2);\n const b2 = ((ci2 & 0x03) << 6) | ((ci3 & 0x1F) << 1) | ((ci4 & 0x10) >> 4);\n const b3 = ((ci4 & 0x0F) << 4) | ((ci5 & 0x1E) >> 1);\n const b4 = ((ci5 & 0x01) << 7) | ((ci6 & 0x1F) << 2) | ((ci7 & 0x18) >> 3);\n const b5 = ((ci7 & 0x07) << 5) | (ci8 & 0x1F);\n\n bytes[byteCount++] = b1;\n\n if (byteCount < bytes.length)\n bytes[byteCount++] = b2;\n\n if (byteCount < bytes.length)\n bytes[byteCount++] = b3;\n\n if (byteCount < bytes.length && c5 !== PADDING)\n bytes[byteCount++] = b4;\n\n if (byteCount < bytes.length && c7 != PADDING)\n bytes[byteCount++] = b5;\n }\n\n return bytes.subarray(0, byteCount);\n }\n}","export type Base64Category = typeof Base64Categories[number];\n\nexport const Base64Categories = ['rfc4648', 'rfc4648-url', 'rfc2025'] as const;\n\n/**\n * Base64 codec.\n */\nexport abstract class Base64 {\n\n /**\n * Encodes byte array to string.\n */\n public abstract encode(bytes: Uint8Array): string;\n\n /**\n * Decodes string to byte array.\n * @param base64 Base64 string\n */\n public abstract decode(base64: string): Uint8Array;\n}","import { KastenError } from '@/errors';\n\n/**\n * Base error type of Base64.\n */\nexport class KastenBase64Error extends KastenError {}\n\n/**\n * Thrown when error occurs on Base64 encoding.\n */\nexport class KastenBase64EncodeError extends KastenBase64Error {};\n\n/**\n * Thrown when error occurs on Base64 decoding.\n */\nexport class KastenBase64DecodeError extends KastenBase64Error {};","import { Base64 } from '@/base64';\nimport { CharCodes } from '@/char-codes';\nimport { KastenBase64DecodeError } from '@/base64/errors';\n\nexport class RFC2045Base64 extends Base64 {\n\n private static readonly PADDING_CHAR_CODE = '='.charCodeAt(0);\n\n private static readonly TABLE: string\n = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n private static readonly DECODE_TABLE = new Uint8Array(256);\n\n private static readonly ENCODE_TABLE = new Uint8Array(\n [...this.TABLE].map(c => c.charCodeAt(0))\n );\n\n private static readonly decoder = new TextDecoder();\n\n static {\n\n this.DECODE_TABLE.fill(255);\n\n for (let i = 0; i < this.TABLE.length; i++) {\n this.DECODE_TABLE[this.TABLE.charCodeAt(i)] = i;\n }\n }\n\n public override encode = (bytes: Uint8Array): string => {\n\n if (bytes.length === 0) return '';\n\n const ENCODE_TABLE = RFC2045Base64.ENCODE_TABLE;\n\n const baseSize = Math.ceil(bytes.length / 3) * 4;\n const linebreaks = Math.floor((baseSize - 1) / 76);\n\n const chars = new Uint8Array(baseSize + linebreaks * 2);\n\n let ci = 0;\n\n let charCout = 0;\n\n for (let i = 0; i < bytes.length; i += 3) {\n\n const b1 = bytes[i]!;\n const b2 = bytes[i + 1] ?? 0;\n const b3 = bytes[i + 2] ?? 0;\n\n const c1 = b1 >> 2;\n const c2 = ((b1 & 0b00000011) << 4) | b2 >> 4;\n const c3 = ((b2 & 0b00001111) << 2) | b3 >> 6;\n const c4 = b3 & 0b00111111;\n\n chars[ci++] = ENCODE_TABLE[c1]!;\n chars[ci++] = ENCODE_TABLE[c2]!;\n chars[ci++] = ENCODE_TABLE[c3]!;\n chars[ci++] = ENCODE_TABLE[c4]!;\n\n charCout += 4;\n\n if (charCout === 76 && ci < chars.length) {\n charCout = 0;\n chars[ci++] = CharCodes.CR;\n chars[ci++] = CharCodes.LF;\n }\n }\n\n const remain = bytes.length % 3;\n\n if (remain === 1) {\n chars[ci - 2] = RFC2045Base64.PADDING_CHAR_CODE;\n chars[ci - 1] = RFC2045Base64.PADDING_CHAR_CODE;\n } else if (remain === 2) {\n chars[ci - 1] = RFC2045Base64.PADDING_CHAR_CODE;\n }\n\n return RFC2045Base64.decoder.decode(chars.subarray(0, ci));\n }\n \n public override decode = (base64: string): Uint8Array => {\n\n const DECODE_TABLE = RFC2045Base64.DECODE_TABLE;\n\n const line = new Uint8Array(base64.length);\n let lineCharCount = 0;\n\n for (let i = 0; i < base64.length; i++) {\n const c = base64.charCodeAt(i);\n if (c !== CharCodes.CR\n && c !== CharCodes.LF\n && c !== CharCodes.SP\n && c !== CharCodes.HT) {\n \n line[lineCharCount++] = c;\n }\n }\n\n if (lineCharCount % 4 !== 0)\n throw new KastenBase64DecodeError('Invalid length string');\n\n let firstPad = -1;\n\n for (let i = 0; i < lineCharCount; i++) {\n if (line[i] === RFC2045Base64.PADDING_CHAR_CODE) {\n firstPad = i;\n break;\n }\n }\n\n if (firstPad !== -1) {\n\n if (firstPad < lineCharCount - 2) {\n throw new KastenBase64DecodeError('Invalid padding position');\n }\n\n for (let i = firstPad; i < lineCharCount; i++) {\n if (line[i] !== RFC2045Base64.PADDING_CHAR_CODE) {\n throw new KastenBase64DecodeError('Invalid padding');\n }\n }\n\n const padCount = lineCharCount - firstPad;\n\n if (padCount !== 1 && padCount !== 2) {\n throw new KastenBase64DecodeError('Invalid padding');\n }\n }\n\n const lineLength = lineCharCount;\n\n const padding = \n line[lineLength - 1] === RFC2045Base64.PADDING_CHAR_CODE\n ? (line[lineLength - 2] === RFC2045Base64.PADDING_CHAR_CODE ? 2 : 1)\n : 0;\n\n const bytes = new Uint8Array((lineCharCount / 4) * 3 - padding);\n\n let writtenOffset = 0;\n\n for (let i = 0; i < lineCharCount; i += 4) {\n\n const code1 = line[i]!;\n const code2 = line[i + 1]!;\n const code3 = line[i + 2]!;\n const code4 = line[i + 3]!;\n\n const ci1 = DECODE_TABLE[code1]!;\n const ci2 = DECODE_TABLE[code2]!;\n const ci3 = code3 !== RFC2045Base64.PADDING_CHAR_CODE ? DECODE_TABLE[code3]! : 0;\n const ci4 = code4 !== RFC2045Base64.PADDING_CHAR_CODE ? DECODE_TABLE[code4]! : 0;\n\n if (ci1 === 255 ||\n ci2 === 255 ||\n (code3 !== RFC2045Base64.PADDING_CHAR_CODE && ci3 === 255) ||\n (code4 !== RFC2045Base64.PADDING_CHAR_CODE && ci4 === 255)) {\n\n throw new KastenBase64DecodeError(\"Invalid Base64\");\n }\n\n const b1 = (ci1 << 2) | (ci2 >> 4);\n const b2 = ((ci2 & 15) << 4) | (ci3 >> 2);\n const b3 = ((ci3 & 3) << 6) | ci4;\n\n bytes[writtenOffset++] = b1;\n \n if (code3 !== RFC2045Base64.PADDING_CHAR_CODE) {\n bytes[writtenOffset++] = b2;\n }\n\n if (code4 !== RFC2045Base64.PADDING_CHAR_CODE) {\n bytes[writtenOffset++] = b3;\n }\n }\n\n return bytes;\n }\n}","import { Base64 } from '@/base64';\nimport { KastenBase64DecodeError } from '@/base64/errors';\nimport { CharCodes } from '@/char-codes';\n\nexport class RFC4648Base64 extends Base64 {\n\n private static readonly PADDING_CHAR_CODE = '='.charCodeAt(0);\n\n private static readonly TABLE: string\n = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n private static readonly DECODE_TABLE = new Uint8Array(256);\n\n private static readonly ENCODE_TABLE = new Uint8Array(\n [...this.TABLE].map(c => c.charCodeAt(0))\n );\n\n private static readonly decoder = new TextDecoder();\n\n static {\n\n this.DECODE_TABLE.fill(255);\n\n for (let i = 0; i < this.TABLE.length; i++) {\n this.DECODE_TABLE[this.TABLE.charCodeAt(i)] = i;\n }\n }\n\n public override encode = (bytes: Uint8Array): string => {\n\n if (bytes.length === 0) return '';\n\n const ENCODE_TABLE = RFC4648Base64.ENCODE_TABLE;\n\n const baseSize = Math.ceil(bytes.length / 3) * 4;\n const linebreaks = Math.floor((baseSize - 1) / 76);\n\n const chars = new Uint8Array(baseSize + linebreaks * 2);\n\n let ci = 0;\n\n for (let i = 0; i < bytes.length; i += 3) {\n\n const b1 = bytes[i]!;\n const b2 = bytes[i + 1] ?? 0;\n const b3 = bytes[i + 2] ?? 0;\n\n const c1 = b1 >> 2;\n const c2 = ((b1 & 0b00000011) << 4) | b2 >> 4;\n const c3 = ((b2 & 0b00001111) << 2) | b3 >> 6;\n const c4 = b3 & 0b00111111;\n\n chars[ci++] = ENCODE_TABLE[c1]!;\n chars[ci++] = ENCODE_TABLE[c2]!;\n chars[ci++] = ENCODE_TABLE[c3]!;\n chars[ci++] = ENCODE_TABLE[c4]!;\n }\n\n const remain = bytes.length % 3;\n\n if (remain === 1) {\n chars[ci - 2] = RFC4648Base64.PADDING_CHAR_CODE;\n chars[ci - 1] = RFC4648Base64.PADDING_CHAR_CODE;\n } else if (remain === 2) {\n chars[ci - 1] = RFC4648Base64.PADDING_CHAR_CODE;\n }\n\n return RFC4648Base64.decoder.decode(chars.subarray(0, ci));\n }\n \n public override decode = (base64: string): Uint8Array => {\n\n const DECODE_TABLE = RFC4648Base64.DECODE_TABLE;\n\n const line = new Uint8Array(base64.length);\n let lineCharCount = 0;\n\n for (let i = 0; i < base64.length; i++) {\n const c = base64.charCodeAt(i);\n if (c !== CharCodes.CR\n && c !== CharCodes.LF\n && c !== CharCodes.SP\n && c !== CharCodes.HT) {\n \n line[lineCharCount++] = c;\n }\n }\n\n if (lineCharCount % 4 !== 0)\n throw new KastenBase64DecodeError('Invalid length string');\n\n let firstPad = -1;\n\n for (let i = 0; i < lineCharCount; i++) {\n if (line[i] === RFC4648Base64.PADDING_CHAR_CODE) {\n firstPad = i;\n break;\n }\n }\n\n if (firstPad !== -1) {\n\n if (firstPad < lineCharCount - 2) {\n throw new KastenBase64DecodeError('Invalid padding position');\n }\n\n for (let i = firstPad; i < lineCharCount; i++) {\n if (line[i] !== RFC4648Base64.PADDING_CHAR_CODE) {\n throw new KastenBase64DecodeError('Invalid padding');\n }\n }\n\n const padCount = lineCharCount - firstPad;\n\n if (padCount !== 1 && padCount !== 2) {\n throw new KastenBase64DecodeError('Invalid padding');\n }\n }\n\n const lineLength = lineCharCount;\n\n const padding = \n line[lineLength - 1] === RFC4648Base64.PADDING_CHAR_CODE\n ? (line[lineLength - 2] === RFC4648Base64.PADDING_CHAR_CODE ? 2 : 1)\n : 0;\n\n const bytes = new Uint8Array((lineCharCount / 4) * 3 - padding);\n\n let writtenOffset = 0;\n\n for (let i = 0; i < lineCharCount; i += 4) {\n\n const code1 = line[i]!;\n const code2 = line[i + 1]!;\n const code3 = line[i + 2]!;\n const code4 = line[i + 3]!;\n\n const ci1 = DECODE_TABLE[code1]!;\n const ci2 = DECODE_TABLE[code2]!;\n const ci3 = code3 !== RFC4648Base64.PADDING_CHAR_CODE ? DECODE_TABLE[code3]! : 0;\n const ci4 = code4 !== RFC4648Base64.PADDING_CHAR_CODE ? DECODE_TABLE[code4]! : 0;\n\n if (ci1 === 255 ||\n ci2 === 255 ||\n (code3 !== RFC4648Base64.PADDING_CHAR_CODE && ci3 === 255) ||\n (code4 !== RFC4648Base64.PADDING_CHAR_CODE && ci4 === 255)) {\n\n throw new KastenBase64DecodeError(\"Invalid Base64\");\n }\n\n const b1 = (ci1 << 2) | (ci2 >> 4);\n const b2 = ((ci2 & 15) << 4) | (ci3 >> 2);\n const b3 = ((ci3 & 3) << 6) | ci4;\n\n bytes[writtenOffset++] = b1;\n \n if (code3 !== RFC4648Base64.PADDING_CHAR_CODE) {\n bytes[writtenOffset++] = b2;\n }\n\n if (code4 !== RFC4648Base64.PADDING_CHAR_CODE) {\n bytes[writtenOffset++] = b3;\n }\n }\n\n return bytes;\n }\n}","import { CharCodes } from '@/char-codes';\nimport { KastenBase64DecodeError } from '@/base64/errors';\nimport { Base64 } from '@/base64';\n\nexport class RFC4648Base64URL extends Base64 {\n \n private static readonly PADDING_CHAR_CODE = '='.charCodeAt(0);\n\n private static readonly TABLE: string\n = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';\n\n private static readonly DECODE_TABLE = new Uint8Array(256);\n\n private static readonly ENCODE_TABLE = new Uint8Array(\n [...this.TABLE].map(c => c.charCodeAt(0))\n );\n\n private static readonly decoder = new TextDecoder();\n\n static {\n \n this.DECODE_TABLE.fill(255);\n\n for (let i = 0; i < this.TABLE.length; i++) {\n this.DECODE_TABLE[this.TABLE.charCodeAt(i)] = i;\n }\n }\n\n public override encode = (bytes: Uint8Array): string => {\n\n if (bytes.length === 0) return '';\n\n const ENCODE_TABLE = RFC4648Base64URL.ENCODE_TABLE;\n\n const baseSize = Math.ceil(bytes.length / 3) * 4;\n const linebreaks = Math.floor((baseSize - 1) / 76);\n\n const chars = new Uint8Array(baseSize + linebreaks * 2);\n\n let ci = 0;\n\n for (let i = 0; i < bytes.length; i += 3) {\n\n const b1 = bytes[i]!;\n const b2 = bytes[i + 1] ?? 0;\n const b3 = bytes[i + 2] ?? 0;\n\n const c1 = b1 >> 2;\n const c2 = ((b1 & 0b00000011) << 4) | b2 >> 4;\n const c3 = ((b2 & 0b00001111) << 2) | b3 >> 6;\n const c4 = b3 & 0b00111111;\n\n chars[ci++] = ENCODE_TABLE[c1]!;\n chars[ci++] = ENCODE_TABLE[c2]!;\n chars[ci++] = ENCODE_TABLE[c3]!;\n chars[ci++] = ENCODE_TABLE[c4]!;\n }\n\n const remain = bytes.length % 3;\n\n if (remain === 1) {\n chars[ci - 2] = RFC4648Base64URL.PADDING_CHAR_CODE;\n chars[ci - 1] = RFC4648Base64URL.PADDING_CHAR_CODE;\n } else if (remain === 2) {\n chars[ci - 1] = RFC4648Base64URL.PADDING_CHAR_CODE;\n }\n\n return RFC4648Base64URL.decoder.decode(chars.subarray(0, ci));\n }\n \n public override decode = (base64: string): Uint8Array => {\n\n const DECODE_TABLE = RFC4648Base64URL.DECODE_TABLE;\n\n const line = new Uint8Array(base64.length);\n let lineCharCount = 0;\n\n for (let i = 0; i < base64.length; i++) {\n const c = base64.charCodeAt(i);\n if (c !== CharCodes.CR\n && c !== CharCodes.LF\n && c !== CharCodes.SP\n && c !== CharCodes.HT) {\n \n line[lineCharCount++] = c;\n }\n }\n\n if (lineCharCount % 4 !== 0)\n throw new KastenBase64DecodeError('Invalid length string');\n\n let firstPad = -1;\n\n for (let i = 0; i < lineCharCount; i++) {\n if (line[i] === RFC4648Base64URL.PADDING_CHAR_CODE) {\n firstPad = i;\n break;\n }\n }\n\n if (firstPad !== -1) {\n\n if (firstPad < lineCharCount - 2) {\n throw new KastenBase64DecodeError('Invalid padding position');\n }\n\n for (let i = firstPad; i < lineCharCount; i++) {\n if (line[i] !== RFC4648Base64URL.PADDING_CHAR_CODE) {\n throw new KastenBase64DecodeError('Invalid padding');\n }\n }\n\n const padCount = lineCharCount - firstPad;\n\n if (padCount !== 1 && padCount !== 2) {\n throw new KastenBase64DecodeError('Invalid padding');\n }\n }\n\n const lineLength = lineCharCount;\n\n const padding = \n line[lineLength - 1] === RFC4648Base64URL.PADDING_CHAR_CODE\n ? (line[lineLength - 2] === RFC4648Base64URL.PADDING_CHAR_CODE ? 2 : 1)\n : 0;\n\n const bytes = new Uint8Array((lineCharCount / 4) * 3 - padding);\n\n let writtenOffset = 0;\n\n for (let i = 0; i < lineCharCount; i += 4) {\n\n const code1 = line[i]!;\n const code2 = line[i + 1]!;\n const code3 = line[i + 2]!;\n const code4 = line[i + 3]!;\n\n const ci1 = DECODE_TABLE[code1]!;\n const ci2 = DECODE_TABLE[code2]!;\n const ci3 = code3 !== RFC4648Base64URL.PADDING_CHAR_CODE ? DECODE_TABLE[code3]! : 0;\n const ci4 = code4 !== RFC4648Base64URL.PADDING_CHAR_CODE ? DECODE_TABLE[code4]! : 0;\n\n if (ci1 === 255 ||\n ci2 === 255 ||\n (code3 !== RFC4648Base64URL.PADDING_CHAR_CODE && ci3 === 255) ||\n (code4 !== RFC4648Base64URL.PADDING_CHAR_CODE && ci4 === 255)) {\n\n throw new KastenBase64DecodeError(\"Invalid Base64\");\n }\n\n const b1 = (ci1 << 2) | (ci2 >> 4);\n const b2 = ((ci2 & 15) << 4) | (ci3 >> 2);\n const b3 = ((ci3 & 3) << 6) | ci4;\n\n bytes[writtenOffset++] = b1;\n \n if (code3 !== RFC4648Base64URL.PADDING_CHAR_CODE) {\n bytes[writtenOffset++] = b2;\n }\n\n if (code4 !== RFC4648Base64URL.PADDING_CHAR_CODE) {\n bytes[writtenOffset++] = b3;\n }\n }\n\n return bytes;\n }\n}","export const RunLengthCatgories = ['basic', 'pack-bits', 'pdf'] as const;\n\nexport type RunLengthCatgory = typeof RunLengthCatgories[number];\n\n/**\n * Run-Length encoding and decoding.\n */\nexport abstract class RunLength {\n\n /**\n * Encodes bytes to Run-Length encoded bytes.\n * @param bytes \n */\n public abstract encode(bytes: Uint8Array): Uint8Array;\n\n /**\n * Decodes Run-Length encoded bytes to original bytes.\n * @param runLength \n */\n public abstract decode(runLength: Uint8Array): Uint8Array;\n}","import { RunLength } from '@/run-length';\n\nexport class BasicRunLength extends RunLength {\n \n public override encode(bytes: Uint8Array): Uint8Array {\n\n const encoded = new Uint8Array(bytes.length * 2);\n\n let byteCount = 0;\n\n let prev: number | null = null;\n\n let count = 0;\n\n for(let i = 0; i < bytes.length; i++) {\n\n const byte = bytes[i]!;\n\n if (prev === null) {\n prev = byte;\n count = 1;\n continue;\n }\n\n if (prev === byte) {\n\n if (count < 255) {\n count++;\n continue;\n }\n }\n\n encoded[byteCount++] = count;\n encoded[byteCount++] = prev;\n\n prev = byte;\n count = 1;\n }\n\n if (prev !== null) {\n encoded[byteCount++] = count;\n encoded[byteCount++] = prev;\n }\n\n return encoded.subarray(0, byteCount);\n }\n \n public override decode(runLength: Uint8Array): Uint8Array {\n\n const decoded: number[] = [];\n\n for (let i = 0; i < runLength.length; i += 2) {\n\n const count = runLength[i]!;\n\n const byte = runLength[i + 1]!;\n\n for (let j = 0; j < count; j++) {\n decoded.push(byte);\n }\n }\n\n return new Uint8Array(decoded);\n }\n}","import { KastenError } from '@/errors';\n\nexport class KastenRunLengthError extends KastenError {}\n\nexport class KastenRunLengthEncodeError extends KastenRunLengthError {}\n\nexport class KastenRunLengthDecodeError extends KastenRunLengthError {}","import { RunLength } from '@/run-length';\nimport { KastenRunLengthDecodeError } from '../errors';\n\nexport class PackBits extends RunLength {\n\n public override encode(bytes: Uint8Array): Uint8Array {\n\n if (bytes.length === 0) return new Uint8Array([]);\n\n const byteLength = bytes.length;\n\n const encoded: number[] = [];\n\n let i = 0;\n\n while(i < byteLength) {\n\n const byte = bytes[i]!;\n\n let j = 1;\n\n while (i + j < byteLength && byte === bytes[i + j] && j < 128) {\n j++;\n }\n\n if (j >= 3) {\n encoded.push(256 - (j - 1));\n encoded.push(byte);\n i += j;\n continue;\n }\n\n while (i + j < byteLength && j < 128) {\n\n const pos = i + j;\n\n const _byte = bytes[pos]!;\n\n if (bytes[pos - 1] === _byte && _byte === bytes[pos + 1]) {\n j--;\n break;\n }\n\n j++;\n }\n\n encoded.push(j - 1);\n\n for (let k = i; k < i + j; k++) {\n encoded.push(bytes[k]!);\n }\n\n i += j;\n }\n\n return new Uint8Array(encoded);\n }\n \n public override decode(runLength: Uint8Array): Uint8Array {\n\n const decoded: number[] = [];\n\n const byteLength = runLength.length;\n\n let i = 0;\n\n while(i < byteLength) {\n\n const header = runLength[i]!;\n\n if (header === 0x80) continue;\n\n if (0 <= header && header <= 0x7F) {\n \n const end = i + header + 2;\n\n for (let j = i + 1; j < end; j++) {\n\n const byte = runLength[j];\n\n if (byte === undefined)\n throw new KastenRunLengthDecodeError('Invalid PackBits encoding');\n\n decoded.push(byte);\n }\n\n i = end;\n continue;\n }\n\n if (0x81 <= header && header <= 0xFF) {\n\n const count = 0x101 - header;\n\n const byte = runLength[i + 1];\n\n if (byte === undefined)\n throw new KastenRunLengthDecodeError('Invalid PackBits encoding');\n\n for (let j = 0; j < count; j++) {\n decoded.push(byte); \n }\n\n i += 2;\n continue;\n }\n }\n\n return new Uint8Array(decoded);\n }\n}","import { RunLength } from '@/run-length';\nimport { KastenRunLengthDecodeError } from '@/run-length/errors';\n\nexport class Pdf extends RunLength {\n \n public override encode(bytes: Uint8Array): Uint8Array {\n\n if (bytes.length === 0) return new Uint8Array([]);\n\n const byteLength = bytes.length;\n\n const encoded: number[] = [];\n\n let i = 0;\n\n while(i < byteLength) {\n\n const byte = bytes[i]!;\n\n let j = 1;\n\n while (i + j < byteLength && byte === bytes[i + j] && j < 128) {\n j++;\n }\n\n if (j >= 2) {\n encoded.push(257 - j);\n encoded.push(byte);\n i += j;\n continue;\n }\n\n while (i + j < byteLength && j < 128) {\n\n const pos = i + j;\n\n const _byte = bytes[pos]!;\n\n if (bytes[pos - 1] === _byte && _byte === bytes[pos + 1]) {\n j--;\n break;\n }\n\n j++;\n }\n\n encoded.push(j - 1);\n\n for (let k = i; k < i + j; k++) {\n encoded.push(bytes[k]!);\n }\n\n i += j;\n }\n\n return new Uint8Array(encoded);\n }\n\n public override decode(runLength: Uint8Array): Uint8Array {\n\n const decoded: number[] = [];\n \n const byteLength = runLength.length;\n\n let i = 0;\n\n while(i < byteLength) {\n\n const header = runLength[i]!;\n\n if (header === 0x80) continue;\n\n if (0 <= header && header <= 0x7F) {\n \n const end = i + header + 2;\n\n for (let j = i + 1; j < end; j++) {\n\n const byte = runLength[j];\n\n if (byte === undefined)\n throw new KastenRunLengthDecodeError('Invalid PackBits encoding');\n\n decoded.push(byte);\n }\n\n i = end;\n continue;\n }\n\n if (0x81 <= header && header <= 0xFF) {\n\n const count = 0x101 - header;\n\n const byte = runLength[i + 1];\n\n if (byte === undefined)\n throw new KastenRunLengthDecodeError('Invalid PackBits encoding');\n\n for (let j = 0; j < count; j++) {\n decoded.push(byte); \n }\n\n i += 2;\n continue;\n }\n }\n\n return new Uint8Array(decoded);\n }\n}","import type { Base16, Base16Category } from '@/base16';\nimport type { Base32, Base32Category } from '@/base32';\nimport type { Base64, Base64Category } from '@/base64';\nimport type { RunLength, RunLengthCatgory } from '@/run-length';\nimport { RFC4648Base16 } from '@/base16/rfc4648/rfc4648';\nimport { RFC4648Base32 } from '@/base32/rfc4648/rfc4648';\nimport { RFC4648Base32Hex } from '@/base32/rfc4648/rfc4648hex';\nimport { RFC2045Base64 } from '@/base64/rfc2045/rfc2045';\nimport { RFC4648Base64 } from '@/base64/rfc4648/rfc4648';\nimport { RFC4648Base64URL } from '@/base64/rfc4648/rfc4648url';\nimport { BasicRunLength } from '@/run-length/basic/basic-run-length';\nimport { PackBits } from '@/run-length/pack-bits/pack-bits';\nimport { Pdf } from '@/run-length/pdf/pdf';\n\n/**\n * Entry point of the Kasten library.\n * All encoding/decoding feature implementations are created through this class.\n *\n * @example\n * const base64 = Kasten.base64('rfc4648');\n * const encoded = base64.encode(data);\n *\n * @example\n * const base32 = Kasten.base32('rfc464hex');\n * const decoded = base32.decode(text);\n *\n * @example\n * const base16 = Kasten.base16();\n *\n * @example\n * const runLength = Kasten.runLength('pack-bits');\n */\nclass Kasten {\n\n private constructor() {}\n\n /**\n * Creates Base 64 codec instance.\n * @param category Base 64 category.\n */\n public static base64 = (category?: Base64Category): Base64 => {\n\n switch(category) {\n case 'rfc4648-url':\n return new RFC4648Base64URL();\n case 'rfc2025':\n return new RFC2045Base64();\n case 'rfc4648':\n default:\n return new RFC4648Base64();\n }\n }\n\n /**\n * Creates Base 32 codec instance.\n * @param category Base 32 category.\n */\n public static base32 = (category?: Base32Category): Base32 => {\n\n switch(category) {\n case 'rfc468-hex':\n return new RFC4648Base32Hex();\n case 'rfc4648':\n default:\n return new RFC4648Base32();\n }\n }\n\n /**\n * Create Base 16 codec instance.\n */\n public static base16 = (category?: Base16Category): Base16 => {\n\n switch(category) {\n case 'rfc4648':\n default:\n return new RFC4648Base16();\n }\n }\n\n /**\n * Creates Run-Length codec instance.\n */\n public static runLength = (category?: RunLengthCatgory): RunLength => {\n\n switch(category) {\n case 'pack-bits':\n return new PackBits();\n case 'pdf':\n return new Pdf();\n case 'basic':\n default:\n return new BasicRunLength();\n }\n }\n}\n\nexport {\n Kasten,\n type Base64,\n type Base64Category as Base64Catgory,\n type Base32,\n type Base32Category,\n type Base16,\n type Base16Category,\n type RunLength,\n type RunLengthCatgory\n}"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","names":[],"sources":["../src/base16/index.ts","../src/utils/char-codes.ts","../src/errors.ts","../src/base16/errors.ts","../src/base16/rfc4648/rfc4648.ts","../src/base16/ascii/ascii.ts","../src/base32/index.ts","../src/base32/errors.ts","../src/base32/rfc4648/rfc4648.ts","../src/base32/rfc4648/rfc4648hex.ts","../src/base64/index.ts","../src/base64/errors.ts","../src/base64/rfc2045/rfc2045.ts","../src/base64/rfc4648/rfc4648.ts","../src/base64/rfc4648/rfc4648url.ts","../src/run-length/index.ts","../src/run-length/basic/basic-run-length.ts","../src/run-length/errors.ts","../src/run-length/pack-bits/pack-bits.ts","../src/run-length/pdf/pdf.ts","../src/kasten.ts"],"sourcesContent":["export const Base16Categories = ['rfc4648', 'ascii'] as const;\n\nexport type Base16Category = typeof Base16Categories[number];\n\n/**\n * Base16 codec.\n */\nexport abstract class Base16 {\n\n /**\n * Encodes bytes to Base16 string.\n * @param bytes Bytes to be encoded.\n */\n public abstract encode(bytes: Uint8Array): string;\n\n /**\n * Decodes Base16 string to bytes.\n * @param base16 Base16 string to be decoded.\n */\n public abstract decode(base16: string): Uint8Array;\n}","export class CharCodes {\n\n public static HT = 9;\n \n public static LF = 10;\n \n public static VT = 11;\n \n public static FF = 12;\n \n public static CR = 13;\n \n public static SP = 32;\n\n private constructor() {}\n\n public static isWhitespace = (c: string | number) => {\n\n const type = typeof c;\n\n if (type !== 'string' && type !== 'number')\n throw new Error('invalid argument type.');\n\n if (type === 'string' && (c as string).length !== 1)\n throw new Error('inalid argument: not a character');\n\n const code = typeof c === 'string'\n ? c.charCodeAt(0)\n : c as number;\n\n return (this.HT <= code && code <= this.CR) || code === this.SP;\n }\n}","export class KastenError extends Error {}","import { KastenError } from '@/errors';\n\nexport class KastenBase16Error extends KastenError {}\n\nexport class KastenBase16EncodeError extends KastenBase16Error {}\n\nexport class KastenBase16DecodeError extends KastenBase16Error {}","import { Base16 } from '@/base16';\nimport { CharCodes } from '@/utils/char-codes';\nimport { KastenBase16DecodeError } from '../errors';\n\n/**\n * RFC 4648 Base 16 encoding.\n */\nexport class RFC4648Base16 extends Base16 {\n\n private static readonly textDecoder = new TextDecoder();\n\n private static readonly TABLE = '0123456789ABCDEF';\n\n private static readonly ENCODED_TABLE = new Uint8Array(\n [...this.TABLE].map(c => c.charCodeAt(0))\n );\n\n private static readonly DECODED_TABLE = new Uint8Array(256);\n\n static {\n this.DECODED_TABLE.fill(255);\n\n for (let i = 0; i < this.TABLE.length; i++) {\n this.DECODED_TABLE[this.TABLE.charCodeAt(i)] = i;\n }\n }\n\n public override encode(bytes: Uint8Array): string {\n\n const ENCODED_TABLE = RFC4648Base16.ENCODED_TABLE;\n\n const chars = new Uint8Array(bytes.length * 2);\n\n let charCount = 0;\n\n for (const byte of bytes) {\n \n const ci1 = (byte & 0xF0) >> 4;\n const ci2 = byte & 0x0F;\n\n const c1 = ENCODED_TABLE[ci1]!;\n const c2 = ENCODED_TABLE[ci2]!;\n\n chars[charCount++] = c1;\n chars[charCount++] = c2;\n }\n\n return RFC4648Base16.textDecoder.decode(chars);\n }\n \n public override decode(base16: string): Uint8Array {\n\n const DECODED_TABLE = RFC4648Base16.DECODED_TABLE;\n\n const upper = base16.toUpperCase();\n const chars = new Uint8Array(base16.length);\n\n let charCount = 0;\n\n for (let i = 0; i < base16.length; i++) {\n const c = upper.charCodeAt(i);\n\n if (CharCodes.isWhitespace(c))\n continue;\n\n if (!DECODED_TABLE[c] || DECODED_TABLE[c] == 255)\n throw new KastenBase16DecodeError(`Invalid Base16 character: ${base16.charAt(i)}`);\n\n chars[charCount++] = c;\n }\n\n if (charCount % 2 !== 0)\n throw new KastenBase16DecodeError('Invalid Base16');\n\n const bytes = new Uint8Array(Math.ceil(base16.length / 2));\n\n let byteCount = 0;\n\n for (let i = 0; i < charCount; i += 2) {\n \n const c1 = chars[i]!;\n const c2 = chars[i + 1]!;\n\n const ci1 = DECODED_TABLE[c1]!;\n const ci2 = DECODED_TABLE[c2]!;\n\n const byte = ((ci1 & 0x0F) << 4) | (ci2 & 0x0F);\n\n bytes[byteCount++] = byte;\n }\n\n return bytes.subarray(0, byteCount);\n }\n}","import { Base16 } from '@/base16';\nimport { CharCodes } from '@/utils/char-codes';\nimport { KastenBase16DecodeError } from '@/base16/errors';\n\n/**\n * AsciiHexDecode codec of PDF1.7\n */\nexport class AsciiHexDecode extends Base16 {\n \n public override encode(bytes: Uint8Array): string {\n\n if (bytes.length === 0) return '>';\n\n const chars: string[] = [];\n\n for (const byte of bytes) {\n const char = byte.toString(16).padStart(2, '0');\n chars.push(char);\n }\n\n chars.push('>');\n\n return chars.join('');\n }\n\n public override decode(base16: string): Uint8Array {\n\n const chars: string[] = [];\n\n for (const c of base16) {\n\n if (c === '>') break;\n \n if (CharCodes.isWhitespace(c)) continue;\n \n const code = c.charCodeAt(0);\n \n if (!(48 <= code && code <= 57) && !(65 <= code && code <= 70) && !(97<= code && code <= 102))\n throw new KastenBase16DecodeError(`invalid char: ${c}`);\n\n chars.push(c);\n }\n\n if (chars.length % 2 !== 0) chars.push('0');\n\n const strLength = chars.length;\n\n const bytes = new Uint8Array(Math.ceil(strLength / 2));\n\n let byteCount = 0;\n\n for (let i = 0, j = 0; i < strLength; i += 2, j++) {\n \n const hex = chars[i]! + chars[i + 1]!;\n\n const byte = Number.parseInt(hex, 16);\n\n bytes[byteCount++] = byte;\n }\n\n return bytes.subarray(0, byteCount);\n }\n}","export type Base32Category = typeof Base32Categories[number];\n\nexport const Base32Categories = ['rfc4648', 'rfc468-hex'] as const;\n\n/**\n * Base32 codec.\n */\nexport abstract class Base32 {\n\n protected static readonly textDecoder = new TextDecoder();\n\n /**\n * Encodes bytes to Base32 string\n * @param bytes Bytes to be encoded.\n */\n public abstract encode(bytes: Uint8Array): string;\n\n /**\n * Decodes Base32 string to bytes.\n * @param base32 Base32 string to be decoded.\n */\n public abstract decode(base32: string): Uint8Array;\n}","import { KastenError } from '@/errors';\n\nexport class KastenBase32Error extends KastenError {}\n\nexport class KastenBase32EncodeError extends KastenBase32Error {}\n\nexport class KastenBase32DecodeError extends KastenBase32Error {}","import { Base32 } from '@/base32';\nimport { CharCodes } from '@/utils/char-codes';\nimport { KastenBase32DecodeError } from '@/base32/errors';\n\nexport class RFC4648Base32 extends Base32 {\n\n private static readonly PADDING_CHAR_CODE: number = '='.charCodeAt(0);\n\n private static readonly TABLE: string\n = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567';\n\n private static readonly ENCODED_TABLE = new Uint8Array(\n [...this.TABLE].map(c => c.charCodeAt(0))\n );\n\n private static readonly DECODED_TABLE = new Uint8Array(256);\n\n static {\n this.DECODED_TABLE.fill(255);\n\n for (let i = 0; i < this.TABLE.length; i++) {\n this.DECODED_TABLE[this.TABLE.charCodeAt(i)] = i;\n }\n }\n\n public override encode(bytes: Uint8Array): string {\n\n const ENCODED_TABLE = RFC4648Base32.ENCODED_TABLE;\n\n const chars = new Uint8Array(Math.ceil(bytes.length / 5) * 8);\n\n let count = 0;\n\n for (let i = 0; i < bytes.length; i += 5) {\n\n const b1 = bytes[i]!;\n const b2 = bytes[i + 1] ?? 0;\n const b3 = bytes[i + 2] ?? 0;\n const b4 = bytes[i + 3] ?? 0;\n const b5 = bytes[i + 4] ?? 0;\n\n const ci1 = (b1 & 0xFF) >> 3;\n const ci2 = ((b1 & 0x07) << 2) | ((b2 & 0xC0) >> 6);\n const ci3 = (b2 & 0x3E) >> 1;\n const ci4 = ((b2 & 0x01) << 4) | ((b3 & 0xF0) >> 4);\n const ci5 = ((b3 & 0x0F) << 1) | ((b4 & 0x80) >> 7);\n const ci6 = (b4 & 0x7C) >> 2;\n const ci7 = ((b4 & 0x03) << 3) | ((b5 & 0xE0) >> 5);\n const ci8 = b5 & 0x1F;\n\n const c1 = ENCODED_TABLE[ci1]!;\n const c2 = ENCODED_TABLE[ci2]!;\n const c3 = ENCODED_TABLE[ci3]!;\n const c4 = ENCODED_TABLE[ci4]!;\n const c5 = ENCODED_TABLE[ci5]!;\n const c6 = ENCODED_TABLE[ci6]!;\n const c7 = ENCODED_TABLE[ci7]!;\n const c8 = ENCODED_TABLE[ci8]!;\n\n chars[count++] = c1;\n chars[count++] = c2;\n chars[count++] = c3;\n chars[count++] = c4;\n chars[count++] = c5;\n chars[count++] = c6;\n chars[count++] = c7;\n chars[count++] = c8;\n }\n\n const remain = bytes.length % 5;\n\n const padding =\n remain === 4 ? 1 :\n remain === 3 ? 3 :\n remain === 2 ? 4 :\n remain === 1 ? 6 : 0;\n\n for (let i = padding; i > 0; i--) {\n chars[count - i] = RFC4648Base32.PADDING_CHAR_CODE;\n }\n\n return Base32.textDecoder.decode(chars.subarray(0, count));\n }\n \n public override decode(base32: string): Uint8Array {\n\n const upper = base32.toUpperCase();\n\n const DECODED_TABLE = RFC4648Base32.DECODED_TABLE;\n const PADDING = RFC4648Base32.PADDING_CHAR_CODE;\n\n const chars = new Uint8Array(base32.length);\n\n let charCount = 0;\n\n for (let i = 0; i < base32.length; i++) {\n\n const c = upper.charCodeAt(i);\n\n if (!CharCodes.isWhitespace(c)) {\n\n chars[charCount++] = c;\n }\n }\n\n if (charCount % 8 !== 0)\n throw new KastenBase32DecodeError('Invalid length string.');\n\n let firstPad = -1;\n\n for (let i = 0; i < charCount; i++) {\n if (chars[i] === PADDING) {\n firstPad = i;\n break;\n }\n }\n\n let padCount = 0;\n\n if (firstPad !== -1) {\n\n if (firstPad < charCount - 6)\n throw new KastenBase32DecodeError('Invalid padding position.');\n\n for (let i = firstPad; i < charCount; i++) {\n if (chars[i] !== PADDING) {\n throw new KastenBase32DecodeError('Invalid padding');\n }\n }\n\n padCount = charCount - firstPad;\n\n if (padCount !== 1 && padCount !== 3 && padCount !== 4 && padCount !== 6) {\n throw new KastenBase32DecodeError('Invalid padding');\n }\n }\n\n const bytes = new Uint8Array(Math.floor(((charCount - padCount) * 5) / 8));\n\n let byteCount = 0;\n\n for (let i = 0; i < charCount; i += 8) {\n\n const c1 = chars[i]!;\n const c2 = chars[i + 1]!;\n const c3 = chars[i + 2]!;\n const c4 = chars[i + 3]!;\n const c5 = chars[i + 4]!;\n const c6 = chars[i + 5]!;\n const c7 = chars[i + 6]!;\n const c8 = chars[i + 7]!;\n\n const ci1 = DECODED_TABLE[c1]!;\n const ci2 = DECODED_TABLE[c2]!;\n const ci3 = c3 !== PADDING ? DECODED_TABLE[c3]! : 0;\n const ci4 = c4 !== PADDING ? DECODED_TABLE[c4]! : 0;\n const ci5 = c5 !== PADDING ? DECODED_TABLE[c5]! : 0;\n const ci6 = c6 !== PADDING ? DECODED_TABLE[c6]! : 0;\n const ci7 = c7 !== PADDING ? DECODED_TABLE[c7]! : 0;\n const ci8 = c8 !== PADDING ? DECODED_TABLE[c8]! : 0;\n\n if (ci1 === 255 ||\n ci2 === 255 ||\n ci3 === 255 ||\n ci4 === 255 ||\n ci5 === 255 ||\n ci6 === 255 ||\n ci7 === 255 ||\n ci8 === 255) {\n\n throw new KastenBase32DecodeError('Invalid Base32');\n }\n\n const b1 = ((ci1 & 0x1F) << 3) | ((ci2 & 0x1C) >> 2);\n const b2 = ((ci2 & 0x03) << 6) | ((ci3 & 0x1F) << 1) | ((ci4 & 0x10) >> 4);\n const b3 = ((ci4 & 0x0F) << 4) | ((ci5 & 0x1E) >> 1);\n const b4 = ((ci5 & 0x01) << 7) | ((ci6 & 0x1F) << 2) | ((ci7 & 0x18) >> 3);\n const b5 = ((ci7 & 0x07) << 5) | (ci8 & 0x1F);\n\n bytes[byteCount++] = b1;\n\n if (byteCount < bytes.length)\n bytes[byteCount++] = b2;\n\n if (byteCount < bytes.length)\n bytes[byteCount++] = b3;\n\n if (byteCount < bytes.length && c5 !== PADDING)\n bytes[byteCount++] = b4;\n\n if (byteCount < bytes.length && c7 != PADDING)\n bytes[byteCount++] = b5;\n }\n\n return bytes.subarray(0, byteCount);\n }\n}","import { Base32 } from '@/base32';\nimport { CharCodes } from '@/utils/char-codes';\nimport { KastenBase32DecodeError } from '@/base32/errors';\n\nexport class RFC4648Base32Hex extends Base32 {\n\n private static readonly PADDING_CHAR_CODE: number = '='.charCodeAt(0);\n\n private static readonly TABLE: string\n = '0123456789ABCDEFGHIJKLMNOPQRSTUV';\n\n private static readonly ENCODED_TABLE = new Uint8Array(\n [...this.TABLE].map(c => c.charCodeAt(0))\n );\n\n private static readonly DECODED_TABLE = new Uint8Array(256);\n\n static {\n this.DECODED_TABLE.fill(255);\n\n for (let i = 0; i < this.TABLE.length; i++) {\n this.DECODED_TABLE[this.TABLE.charCodeAt(i)] = i;\n }\n }\n\n public override encode(bytes: Uint8Array): string {\n\n const ENCODED_TABLE = RFC4648Base32Hex.ENCODED_TABLE;\n\n const chars = new Uint8Array(Math.ceil(bytes.length / 5) * 8);\n\n let count = 0;\n\n for (let i = 0; i < bytes.length; i += 5) {\n\n const b1 = bytes[i]!;\n const b2 = bytes[i + 1] ?? 0;\n const b3 = bytes[i + 2] ?? 0;\n const b4 = bytes[i + 3] ?? 0;\n const b5 = bytes[i + 4] ?? 0;\n\n const ci1 = (b1 & 0xFF) >> 3;\n const ci2 = ((b1 & 0x07) << 2) | ((b2 & 0xC0) >> 6);\n const ci3 = (b2 & 0x3E) >> 1;\n const ci4 = ((b2 & 0x01) << 4) | ((b3 & 0xF0) >> 4);\n const ci5 = ((b3 & 0x0F) << 1) | ((b4 & 0x80) >> 7);\n const ci6 = (b4 & 0x7C) >> 2;\n const ci7 = ((b4 & 0x03) << 3) | ((b5 & 0xE0) >> 5);\n const ci8 = b5 & 0x1F;\n\n const c1 = ENCODED_TABLE[ci1]!;\n const c2 = ENCODED_TABLE[ci2]!;\n const c3 = ENCODED_TABLE[ci3]!;\n const c4 = ENCODED_TABLE[ci4]!;\n const c5 = ENCODED_TABLE[ci5]!;\n const c6 = ENCODED_TABLE[ci6]!;\n const c7 = ENCODED_TABLE[ci7]!;\n const c8 = ENCODED_TABLE[ci8]!;\n\n chars[count++] = c1;\n chars[count++] = c2;\n chars[count++] = c3;\n chars[count++] = c4;\n chars[count++] = c5;\n chars[count++] = c6;\n chars[count++] = c7;\n chars[count++] = c8;\n }\n\n const remain = bytes.length % 5;\n\n const padding =\n remain === 4 ? 1 :\n remain === 3 ? 3 :\n remain === 2 ? 4 :\n remain === 1 ? 6 : 0;\n\n for (let i = padding; i > 0; i--) {\n chars[count - i] = RFC4648Base32Hex.PADDING_CHAR_CODE;\n }\n\n return Base32.textDecoder.decode(chars.subarray(0, count));\n }\n \n public override decode(base32: string): Uint8Array {\n\n const upper = base32.toUpperCase();\n\n const DECODED_TABLE = RFC4648Base32Hex.DECODED_TABLE;\n const PADDING = RFC4648Base32Hex.PADDING_CHAR_CODE;\n\n const chars = new Uint8Array(base32.length);\n\n let charCount = 0;\n\n for (let i = 0; i < base32.length; i++) {\n\n const c = upper.charCodeAt(i);\n\n if (!CharCodes.isWhitespace(c)) {\n\n chars[charCount++] = c;\n }\n }\n\n if (charCount % 8 !== 0)\n throw new KastenBase32DecodeError('Invalid length string.');\n\n let firstPad = -1;\n\n for (let i = 0; i < charCount; i++) {\n if (chars[i] === PADDING) {\n firstPad = i;\n break;\n }\n }\n\n let padCount = 0;\n\n if (firstPad !== -1) {\n\n if (firstPad < charCount - 6)\n throw new KastenBase32DecodeError('Invalid padding position.');\n\n for (let i = firstPad; i < charCount; i++) {\n if (chars[i] !== PADDING) {\n throw new KastenBase32DecodeError('Invalid padding');\n }\n }\n\n padCount = charCount - firstPad;\n\n if (padCount !== 1 && padCount !== 3 && padCount !== 4 && padCount !== 6) {\n throw new KastenBase32DecodeError('Invalid padding');\n }\n }\n\n const bytes = new Uint8Array(Math.floor(((charCount - padCount) * 5) / 8));\n\n let byteCount = 0;\n\n for (let i = 0; i < charCount; i += 8) {\n\n const c1 = chars[i]!;\n const c2 = chars[i + 1]!;\n const c3 = chars[i + 2]!;\n const c4 = chars[i + 3]!;\n const c5 = chars[i + 4]!;\n const c6 = chars[i + 5]!;\n const c7 = chars[i + 6]!;\n const c8 = chars[i + 7]!;\n\n const ci1 = DECODED_TABLE[c1]!;\n const ci2 = DECODED_TABLE[c2]!;\n const ci3 = c3 !== PADDING ? DECODED_TABLE[c3]! : 0;\n const ci4 = c4 !== PADDING ? DECODED_TABLE[c4]! : 0;\n const ci5 = c5 !== PADDING ? DECODED_TABLE[c5]! : 0;\n const ci6 = c6 !== PADDING ? DECODED_TABLE[c6]! : 0;\n const ci7 = c7 !== PADDING ? DECODED_TABLE[c7]! : 0;\n const ci8 = c8 !== PADDING ? DECODED_TABLE[c8]! : 0;\n\n if (ci1 === 255 ||\n ci2 === 255 ||\n ci3 === 255 ||\n ci4 === 255 ||\n ci5 === 255 ||\n ci6 === 255 ||\n ci7 === 255 ||\n ci8 === 255) {\n\n throw new KastenBase32DecodeError('Invalid Base32');\n }\n\n const b1 = ((ci1 & 0x1F) << 3) | ((ci2 & 0x1C) >> 2);\n const b2 = ((ci2 & 0x03) << 6) | ((ci3 & 0x1F) << 1) | ((ci4 & 0x10) >> 4);\n const b3 = ((ci4 & 0x0F) << 4) | ((ci5 & 0x1E) >> 1);\n const b4 = ((ci5 & 0x01) << 7) | ((ci6 & 0x1F) << 2) | ((ci7 & 0x18) >> 3);\n const b5 = ((ci7 & 0x07) << 5) | (ci8 & 0x1F);\n\n bytes[byteCount++] = b1;\n\n if (byteCount < bytes.length)\n bytes[byteCount++] = b2;\n\n if (byteCount < bytes.length)\n bytes[byteCount++] = b3;\n\n if (byteCount < bytes.length && c5 !== PADDING)\n bytes[byteCount++] = b4;\n\n if (byteCount < bytes.length && c7 != PADDING)\n bytes[byteCount++] = b5;\n }\n\n return bytes.subarray(0, byteCount);\n }\n}","export type Base64Category = typeof Base64Categories[number];\n\nexport const Base64Categories = ['rfc4648', 'rfc4648-url', 'rfc2025'] as const;\n\n/**\n * Base64 codec.\n */\nexport abstract class Base64 {\n\n /**\n * Encodes byte array to string.\n */\n public abstract encode(bytes: Uint8Array): string;\n\n /**\n * Decodes string to byte array.\n * @param base64 Base64 string\n */\n public abstract decode(base64: string): Uint8Array;\n}","import { KastenError } from '@/errors';\n\n/**\n * Base error type of Base64.\n */\nexport class KastenBase64Error extends KastenError {}\n\n/**\n * Thrown when error occurs on Base64 encoding.\n */\nexport class KastenBase64EncodeError extends KastenBase64Error {};\n\n/**\n * Thrown when error occurs on Base64 decoding.\n */\nexport class KastenBase64DecodeError extends KastenBase64Error {};","import { Base64 } from '@/base64';\nimport { CharCodes } from '@/utils/char-codes';\nimport { KastenBase64DecodeError } from '@/base64/errors';\n\nexport class RFC2045Base64 extends Base64 {\n\n private static readonly PADDING_CHAR_CODE = '='.charCodeAt(0);\n\n private static readonly TABLE: string\n = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n private static readonly DECODE_TABLE = new Uint8Array(256);\n\n private static readonly ENCODE_TABLE = new Uint8Array(\n [...this.TABLE].map(c => c.charCodeAt(0))\n );\n\n private static readonly decoder = new TextDecoder();\n\n static {\n\n this.DECODE_TABLE.fill(255);\n\n for (let i = 0; i < this.TABLE.length; i++) {\n this.DECODE_TABLE[this.TABLE.charCodeAt(i)] = i;\n }\n }\n\n public override encode = (bytes: Uint8Array): string => {\n\n if (bytes.length === 0) return '';\n\n const ENCODE_TABLE = RFC2045Base64.ENCODE_TABLE;\n const { CR, LF } = CharCodes;\n\n const baseSize = Math.ceil(bytes.length / 3) * 4;\n const linebreaks = Math.floor((baseSize - 1) / 76);\n\n const chars = new Uint8Array(baseSize + linebreaks * 2);\n\n let ci = 0;\n\n let charCout = 0;\n\n for (let i = 0; i < bytes.length; i += 3) {\n\n const b1 = bytes[i]!;\n const b2 = bytes[i + 1] ?? 0;\n const b3 = bytes[i + 2] ?? 0;\n\n const c1 = b1 >> 2;\n const c2 = ((b1 & 0b00000011) << 4) | b2 >> 4;\n const c3 = ((b2 & 0b00001111) << 2) | b3 >> 6;\n const c4 = b3 & 0b00111111;\n\n chars[ci++] = ENCODE_TABLE[c1]!;\n chars[ci++] = ENCODE_TABLE[c2]!;\n chars[ci++] = ENCODE_TABLE[c3]!;\n chars[ci++] = ENCODE_TABLE[c4]!;\n\n charCout += 4;\n\n if (charCout === 76 && ci < chars.length) {\n charCout = 0;\n chars[ci++] = CR;\n chars[ci++] = LF;\n }\n }\n\n const remain = bytes.length % 3;\n\n if (remain === 1) {\n chars[ci - 2] = RFC2045Base64.PADDING_CHAR_CODE;\n chars[ci - 1] = RFC2045Base64.PADDING_CHAR_CODE;\n } else if (remain === 2) {\n chars[ci - 1] = RFC2045Base64.PADDING_CHAR_CODE;\n }\n\n return RFC2045Base64.decoder.decode(chars.subarray(0, ci));\n }\n \n public override decode = (base64: string): Uint8Array => {\n\n const DECODE_TABLE = RFC2045Base64.DECODE_TABLE;\n\n const line = new Uint8Array(base64.length);\n let lineCharCount = 0;\n\n for (let i = 0; i < base64.length; i++) {\n const c = base64.charCodeAt(i);\n if (c !== CharCodes.CR\n && c !== CharCodes.LF\n && c !== CharCodes.SP\n && c !== CharCodes.HT) {\n \n line[lineCharCount++] = c;\n }\n }\n\n if (lineCharCount % 4 !== 0)\n throw new KastenBase64DecodeError('Invalid length string');\n\n let firstPad = -1;\n\n for (let i = 0; i < lineCharCount; i++) {\n if (line[i] === RFC2045Base64.PADDING_CHAR_CODE) {\n firstPad = i;\n break;\n }\n }\n\n if (firstPad !== -1) {\n\n if (firstPad < lineCharCount - 2) {\n throw new KastenBase64DecodeError('Invalid padding position');\n }\n\n for (let i = firstPad; i < lineCharCount; i++) {\n if (line[i] !== RFC2045Base64.PADDING_CHAR_CODE) {\n throw new KastenBase64DecodeError('Invalid padding');\n }\n }\n\n const padCount = lineCharCount - firstPad;\n\n if (padCount !== 1 && padCount !== 2) {\n throw new KastenBase64DecodeError('Invalid padding');\n }\n }\n\n const lineLength = lineCharCount;\n\n const padding = \n line[lineLength - 1] === RFC2045Base64.PADDING_CHAR_CODE\n ? (line[lineLength - 2] === RFC2045Base64.PADDING_CHAR_CODE ? 2 : 1)\n : 0;\n\n const bytes = new Uint8Array((lineCharCount / 4) * 3 - padding);\n\n let writtenOffset = 0;\n\n for (let i = 0; i < lineCharCount; i += 4) {\n\n const code1 = line[i]!;\n const code2 = line[i + 1]!;\n const code3 = line[i + 2]!;\n const code4 = line[i + 3]!;\n\n const ci1 = DECODE_TABLE[code1]!;\n const ci2 = DECODE_TABLE[code2]!;\n const ci3 = code3 !== RFC2045Base64.PADDING_CHAR_CODE ? DECODE_TABLE[code3]! : 0;\n const ci4 = code4 !== RFC2045Base64.PADDING_CHAR_CODE ? DECODE_TABLE[code4]! : 0;\n\n if (ci1 === 255 ||\n ci2 === 255 ||\n (code3 !== RFC2045Base64.PADDING_CHAR_CODE && ci3 === 255) ||\n (code4 !== RFC2045Base64.PADDING_CHAR_CODE && ci4 === 255)) {\n\n throw new KastenBase64DecodeError(\"Invalid Base64\");\n }\n\n const b1 = (ci1 << 2) | (ci2 >> 4);\n const b2 = ((ci2 & 15) << 4) | (ci3 >> 2);\n const b3 = ((ci3 & 3) << 6) | ci4;\n\n bytes[writtenOffset++] = b1;\n \n if (code3 !== RFC2045Base64.PADDING_CHAR_CODE) {\n bytes[writtenOffset++] = b2;\n }\n\n if (code4 !== RFC2045Base64.PADDING_CHAR_CODE) {\n bytes[writtenOffset++] = b3;\n }\n }\n\n return bytes;\n }\n}","import { Base64 } from '@/base64';\nimport { KastenBase64DecodeError } from '@/base64/errors';\nimport { CharCodes } from '@/utils/char-codes';\n\nexport class RFC4648Base64 extends Base64 {\n\n private static readonly PADDING_CHAR_CODE = '='.charCodeAt(0);\n\n private static readonly TABLE: string\n = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n private static readonly DECODE_TABLE = new Uint8Array(256);\n\n private static readonly ENCODE_TABLE = new Uint8Array(\n [...this.TABLE].map(c => c.charCodeAt(0))\n );\n\n private static readonly decoder = new TextDecoder();\n\n static {\n\n this.DECODE_TABLE.fill(255);\n\n for (let i = 0; i < this.TABLE.length; i++) {\n this.DECODE_TABLE[this.TABLE.charCodeAt(i)] = i;\n }\n }\n\n public override encode = (bytes: Uint8Array): string => {\n\n if (bytes.length === 0) return '';\n\n const ENCODE_TABLE = RFC4648Base64.ENCODE_TABLE;\n\n const baseSize = Math.ceil(bytes.length / 3) * 4;\n const linebreaks = Math.floor((baseSize - 1) / 76);\n\n const chars = new Uint8Array(baseSize + linebreaks * 2);\n\n let ci = 0;\n\n for (let i = 0; i < bytes.length; i += 3) {\n\n const b1 = bytes[i]!;\n const b2 = bytes[i + 1] ?? 0;\n const b3 = bytes[i + 2] ?? 0;\n\n const c1 = b1 >> 2;\n const c2 = ((b1 & 0b00000011) << 4) | b2 >> 4;\n const c3 = ((b2 & 0b00001111) << 2) | b3 >> 6;\n const c4 = b3 & 0b00111111;\n\n chars[ci++] = ENCODE_TABLE[c1]!;\n chars[ci++] = ENCODE_TABLE[c2]!;\n chars[ci++] = ENCODE_TABLE[c3]!;\n chars[ci++] = ENCODE_TABLE[c4]!;\n }\n\n const remain = bytes.length % 3;\n\n if (remain === 1) {\n chars[ci - 2] = RFC4648Base64.PADDING_CHAR_CODE;\n chars[ci - 1] = RFC4648Base64.PADDING_CHAR_CODE;\n } else if (remain === 2) {\n chars[ci - 1] = RFC4648Base64.PADDING_CHAR_CODE;\n }\n\n return RFC4648Base64.decoder.decode(chars.subarray(0, ci));\n }\n \n public override decode = (base64: string): Uint8Array => {\n\n const DECODE_TABLE = RFC4648Base64.DECODE_TABLE;\n\n const line = new Uint8Array(base64.length);\n let lineCharCount = 0;\n\n for (let i = 0; i < base64.length; i++) {\n const c = base64.charCodeAt(i);\n if (!CharCodes.isWhitespace(c)) {\n \n line[lineCharCount++] = c;\n }\n }\n\n if (lineCharCount % 4 !== 0)\n throw new KastenBase64DecodeError('Invalid length string');\n\n let firstPad = -1;\n\n for (let i = 0; i < lineCharCount; i++) {\n if (line[i] === RFC4648Base64.PADDING_CHAR_CODE) {\n firstPad = i;\n break;\n }\n }\n\n if (firstPad !== -1) {\n\n if (firstPad < lineCharCount - 2) {\n throw new KastenBase64DecodeError('Invalid padding position');\n }\n\n for (let i = firstPad; i < lineCharCount; i++) {\n if (line[i] !== RFC4648Base64.PADDING_CHAR_CODE) {\n throw new KastenBase64DecodeError('Invalid padding');\n }\n }\n\n const padCount = lineCharCount - firstPad;\n\n if (padCount !== 1 && padCount !== 2) {\n throw new KastenBase64DecodeError('Invalid padding');\n }\n }\n\n const lineLength = lineCharCount;\n\n const padding = \n line[lineLength - 1] === RFC4648Base64.PADDING_CHAR_CODE\n ? (line[lineLength - 2] === RFC4648Base64.PADDING_CHAR_CODE ? 2 : 1)\n : 0;\n\n const bytes = new Uint8Array((lineCharCount / 4) * 3 - padding);\n\n let writtenOffset = 0;\n\n for (let i = 0; i < lineCharCount; i += 4) {\n\n const code1 = line[i]!;\n const code2 = line[i + 1]!;\n const code3 = line[i + 2]!;\n const code4 = line[i + 3]!;\n\n const ci1 = DECODE_TABLE[code1]!;\n const ci2 = DECODE_TABLE[code2]!;\n const ci3 = code3 !== RFC4648Base64.PADDING_CHAR_CODE ? DECODE_TABLE[code3]! : 0;\n const ci4 = code4 !== RFC4648Base64.PADDING_CHAR_CODE ? DECODE_TABLE[code4]! : 0;\n\n if (ci1 === 255 ||\n ci2 === 255 ||\n (code3 !== RFC4648Base64.PADDING_CHAR_CODE && ci3 === 255) ||\n (code4 !== RFC4648Base64.PADDING_CHAR_CODE && ci4 === 255)) {\n\n throw new KastenBase64DecodeError(\"Invalid Base64\");\n }\n\n const b1 = (ci1 << 2) | (ci2 >> 4);\n const b2 = ((ci2 & 15) << 4) | (ci3 >> 2);\n const b3 = ((ci3 & 3) << 6) | ci4;\n\n bytes[writtenOffset++] = b1;\n \n if (code3 !== RFC4648Base64.PADDING_CHAR_CODE) {\n bytes[writtenOffset++] = b2;\n }\n\n if (code4 !== RFC4648Base64.PADDING_CHAR_CODE) {\n bytes[writtenOffset++] = b3;\n }\n }\n\n return bytes;\n }\n}","import { CharCodes } from '@/utils/char-codes';\nimport { KastenBase64DecodeError } from '@/base64/errors';\nimport { Base64 } from '@/base64';\n\nexport class RFC4648Base64URL extends Base64 {\n \n private static readonly PADDING_CHAR_CODE = '='.charCodeAt(0);\n\n private static readonly TABLE: string\n = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';\n\n private static readonly DECODE_TABLE = new Uint8Array(256);\n\n private static readonly ENCODE_TABLE = new Uint8Array(\n [...this.TABLE].map(c => c.charCodeAt(0))\n );\n\n private static readonly decoder = new TextDecoder();\n\n static {\n \n this.DECODE_TABLE.fill(255);\n\n for (let i = 0; i < this.TABLE.length; i++) {\n this.DECODE_TABLE[this.TABLE.charCodeAt(i)] = i;\n }\n }\n\n public override encode = (bytes: Uint8Array): string => {\n\n if (bytes.length === 0) return '';\n\n const ENCODE_TABLE = RFC4648Base64URL.ENCODE_TABLE;\n\n const baseSize = Math.ceil(bytes.length / 3) * 4;\n const linebreaks = Math.floor((baseSize - 1) / 76);\n\n const chars = new Uint8Array(baseSize + linebreaks * 2);\n\n let ci = 0;\n\n for (let i = 0; i < bytes.length; i += 3) {\n\n const b1 = bytes[i]!;\n const b2 = bytes[i + 1] ?? 0;\n const b3 = bytes[i + 2] ?? 0;\n\n const c1 = b1 >> 2;\n const c2 = ((b1 & 0b00000011) << 4) | b2 >> 4;\n const c3 = ((b2 & 0b00001111) << 2) | b3 >> 6;\n const c4 = b3 & 0b00111111;\n\n chars[ci++] = ENCODE_TABLE[c1]!;\n chars[ci++] = ENCODE_TABLE[c2]!;\n chars[ci++] = ENCODE_TABLE[c3]!;\n chars[ci++] = ENCODE_TABLE[c4]!;\n }\n\n const remain = bytes.length % 3;\n\n if (remain === 1) {\n chars[ci - 2] = RFC4648Base64URL.PADDING_CHAR_CODE;\n chars[ci - 1] = RFC4648Base64URL.PADDING_CHAR_CODE;\n } else if (remain === 2) {\n chars[ci - 1] = RFC4648Base64URL.PADDING_CHAR_CODE;\n }\n\n return RFC4648Base64URL.decoder.decode(chars.subarray(0, ci));\n }\n \n public override decode = (base64: string): Uint8Array => {\n\n const DECODE_TABLE = RFC4648Base64URL.DECODE_TABLE;\n\n const line = new Uint8Array(base64.length);\n let lineCharCount = 0;\n\n for (let i = 0; i < base64.length; i++) {\n const c = base64.charCodeAt(i);\n if (!CharCodes.isWhitespace(c)) {\n \n line[lineCharCount++] = c;\n }\n }\n\n if (lineCharCount % 4 !== 0)\n throw new KastenBase64DecodeError('Invalid length string');\n\n let firstPad = -1;\n\n for (let i = 0; i < lineCharCount; i++) {\n if (line[i] === RFC4648Base64URL.PADDING_CHAR_CODE) {\n firstPad = i;\n break;\n }\n }\n\n if (firstPad !== -1) {\n\n if (firstPad < lineCharCount - 2) {\n throw new KastenBase64DecodeError('Invalid padding position');\n }\n\n for (let i = firstPad; i < lineCharCount; i++) {\n if (line[i] !== RFC4648Base64URL.PADDING_CHAR_CODE) {\n throw new KastenBase64DecodeError('Invalid padding');\n }\n }\n\n const padCount = lineCharCount - firstPad;\n\n if (padCount !== 1 && padCount !== 2) {\n throw new KastenBase64DecodeError('Invalid padding');\n }\n }\n\n const lineLength = lineCharCount;\n\n const padding = \n line[lineLength - 1] === RFC4648Base64URL.PADDING_CHAR_CODE\n ? (line[lineLength - 2] === RFC4648Base64URL.PADDING_CHAR_CODE ? 2 : 1)\n : 0;\n\n const bytes = new Uint8Array((lineCharCount / 4) * 3 - padding);\n\n let writtenOffset = 0;\n\n for (let i = 0; i < lineCharCount; i += 4) {\n\n const code1 = line[i]!;\n const code2 = line[i + 1]!;\n const code3 = line[i + 2]!;\n const code4 = line[i + 3]!;\n\n const ci1 = DECODE_TABLE[code1]!;\n const ci2 = DECODE_TABLE[code2]!;\n const ci3 = code3 !== RFC4648Base64URL.PADDING_CHAR_CODE ? DECODE_TABLE[code3]! : 0;\n const ci4 = code4 !== RFC4648Base64URL.PADDING_CHAR_CODE ? DECODE_TABLE[code4]! : 0;\n\n if (ci1 === 255 ||\n ci2 === 255 ||\n (code3 !== RFC4648Base64URL.PADDING_CHAR_CODE && ci3 === 255) ||\n (code4 !== RFC4648Base64URL.PADDING_CHAR_CODE && ci4 === 255)) {\n\n throw new KastenBase64DecodeError(\"Invalid Base64\");\n }\n\n const b1 = (ci1 << 2) | (ci2 >> 4);\n const b2 = ((ci2 & 15) << 4) | (ci3 >> 2);\n const b3 = ((ci3 & 3) << 6) | ci4;\n\n bytes[writtenOffset++] = b1;\n \n if (code3 !== RFC4648Base64URL.PADDING_CHAR_CODE) {\n bytes[writtenOffset++] = b2;\n }\n\n if (code4 !== RFC4648Base64URL.PADDING_CHAR_CODE) {\n bytes[writtenOffset++] = b3;\n }\n }\n\n return bytes;\n }\n}","export const RunLengthCatgories = ['basic', 'pack-bits', 'pdf'] as const;\n\nexport type RunLengthCatgory = typeof RunLengthCatgories[number];\n\n/**\n * Run-Length encoding and decoding.\n */\nexport abstract class RunLength {\n\n /**\n * Encodes bytes to Run-Length encoded bytes.\n * @param bytes \n */\n public abstract encode(bytes: Uint8Array): Uint8Array;\n\n /**\n * Decodes Run-Length encoded bytes to original bytes.\n * @param runLength \n */\n public abstract decode(runLength: Uint8Array): Uint8Array;\n}","import { RunLength } from '@/run-length';\n\n/**\n * Basic Run-Length codec.\n */\nexport class BasicRunLength extends RunLength {\n \n public override encode(bytes: Uint8Array): Uint8Array {\n\n const encoded = new Uint8Array(bytes.length * 2);\n\n let byteCount = 0;\n\n let prev: number | null = null;\n\n let count = 0;\n\n for(let i = 0; i < bytes.length; i++) {\n\n const byte = bytes[i]!;\n\n if (prev === null) {\n prev = byte;\n count = 1;\n continue;\n }\n\n if (prev === byte) {\n\n if (count < 255) {\n count++;\n continue;\n }\n }\n\n encoded[byteCount++] = count;\n encoded[byteCount++] = prev;\n\n prev = byte;\n count = 1;\n }\n\n if (prev !== null) {\n encoded[byteCount++] = count;\n encoded[byteCount++] = prev;\n }\n\n return encoded.subarray(0, byteCount);\n }\n \n public override decode(runLength: Uint8Array): Uint8Array {\n\n const decoded: number[] = [];\n\n for (let i = 0; i < runLength.length; i += 2) {\n\n const count = runLength[i]!;\n\n const byte = runLength[i + 1]!;\n\n for (let j = 0; j < count; j++) {\n decoded.push(byte);\n }\n }\n\n return new Uint8Array(decoded);\n }\n}","import { KastenError } from '@/errors';\n\nexport class KastenRunLengthError extends KastenError {}\n\nexport class KastenRunLengthEncodeError extends KastenRunLengthError {}\n\nexport class KastenRunLengthDecodeError extends KastenRunLengthError {}","import { RunLength } from '@/run-length';\nimport { KastenRunLengthDecodeError } from '../errors';\n\n/**\n * PackBits codec.\n */\nexport class PackBits extends RunLength {\n\n public override encode(bytes: Uint8Array): Uint8Array {\n\n if (bytes.length === 0) return new Uint8Array([]);\n\n const byteLength = bytes.length;\n\n const encoded: number[] = [];\n\n let i = 0;\n\n while(i < byteLength) {\n\n const byte = bytes[i]!;\n\n let j = 1;\n\n while (i + j < byteLength && byte === bytes[i + j] && j < 128) {\n j++;\n }\n\n if (j >= 3) {\n encoded.push(256 - (j - 1));\n encoded.push(byte);\n i += j;\n continue;\n }\n\n while (i + j < byteLength && j < 128) {\n\n const pos = i + j;\n\n const _byte = bytes[pos]!;\n\n if (bytes[pos - 1] === _byte && _byte === bytes[pos + 1]) {\n j--;\n break;\n }\n\n j++;\n }\n\n encoded.push(j - 1);\n\n for (let k = i; k < i + j; k++) {\n encoded.push(bytes[k]!);\n }\n\n i += j;\n }\n\n return new Uint8Array(encoded);\n }\n \n public override decode(runLength: Uint8Array): Uint8Array {\n\n const decoded: number[] = [];\n\n const byteLength = runLength.length;\n\n let i = 0;\n\n while(i < byteLength) {\n\n const header = runLength[i]!;\n\n if (header === 0x80) continue;\n\n if (0 <= header && header <= 0x7F) {\n \n const end = i + header + 2;\n\n for (let j = i + 1; j < end; j++) {\n\n const byte = runLength[j];\n\n if (byte === undefined)\n throw new KastenRunLengthDecodeError('Invalid PackBits encoding');\n\n decoded.push(byte);\n }\n\n i = end;\n continue;\n }\n\n if (0x81 <= header && header <= 0xFF) {\n\n const count = 0x101 - header;\n\n const byte = runLength[i + 1];\n\n if (byte === undefined)\n throw new KastenRunLengthDecodeError('Invalid PackBits encoding');\n\n for (let j = 0; j < count; j++) {\n decoded.push(byte); \n }\n\n i += 2;\n continue;\n }\n }\n\n return new Uint8Array(decoded);\n }\n}","import { RunLength } from '@/run-length';\nimport { KastenRunLengthDecodeError } from '@/run-length/errors';\n\nexport class Pdf extends RunLength {\n \n public override encode(bytes: Uint8Array): Uint8Array {\n\n if (bytes.length === 0) return new Uint8Array([]);\n\n const byteLength = bytes.length;\n\n const encoded: number[] = [];\n\n let i = 0;\n\n while(i < byteLength) {\n\n const byte = bytes[i]!;\n\n let j = 1;\n\n while (i + j < byteLength && byte === bytes[i + j] && j < 128) {\n j++;\n }\n\n if (j >= 2) {\n encoded.push(257 - j);\n encoded.push(byte);\n i += j;\n continue;\n }\n\n while (i + j < byteLength && j < 128) {\n\n const pos = i + j;\n\n const _byte = bytes[pos]!;\n\n if (bytes[pos - 1] === _byte && _byte === bytes[pos + 1]) {\n j--;\n break;\n }\n\n j++;\n }\n\n encoded.push(j - 1);\n\n for (let k = i; k < i + j; k++) {\n encoded.push(bytes[k]!);\n }\n\n i += j;\n }\n\n return new Uint8Array(encoded);\n }\n\n public override decode(runLength: Uint8Array): Uint8Array {\n\n const decoded: number[] = [];\n \n const byteLength = runLength.length;\n\n let i = 0;\n\n while(i < byteLength) {\n\n const header = runLength[i]!;\n\n if (header === 0x80) continue;\n\n if (0 <= header && header <= 0x7F) {\n \n const end = i + header + 2;\n\n for (let j = i + 1; j < end; j++) {\n\n const byte = runLength[j];\n\n if (byte === undefined)\n throw new KastenRunLengthDecodeError('Invalid PackBits encoding');\n\n decoded.push(byte);\n }\n\n i = end;\n continue;\n }\n\n if (0x81 <= header && header <= 0xFF) {\n\n const count = 0x101 - header;\n\n const byte = runLength[i + 1];\n\n if (byte === undefined)\n throw new KastenRunLengthDecodeError('Invalid PackBits encoding');\n\n for (let j = 0; j < count; j++) {\n decoded.push(byte); \n }\n\n i += 2;\n continue;\n }\n }\n\n return new Uint8Array(decoded);\n }\n}","import type { Base16, Base16Category } from '@/base16';\nimport type { Base32, Base32Category } from '@/base32';\nimport type { Base64, Base64Category } from '@/base64';\nimport type { RunLength, RunLengthCatgory } from '@/run-length';\nimport { RFC4648Base16 } from '@/base16/rfc4648/rfc4648';\nimport { AsciiHexDecode } from '@/base16/ascii/ascii';\nimport { RFC4648Base32 } from '@/base32/rfc4648/rfc4648';\nimport { RFC4648Base32Hex } from '@/base32/rfc4648/rfc4648hex';\nimport { RFC2045Base64 } from '@/base64/rfc2045/rfc2045';\nimport { RFC4648Base64 } from '@/base64/rfc4648/rfc4648';\nimport { RFC4648Base64URL } from '@/base64/rfc4648/rfc4648url';\nimport { BasicRunLength } from '@/run-length/basic/basic-run-length';\nimport { PackBits } from '@/run-length/pack-bits/pack-bits';\nimport { Pdf } from '@/run-length/pdf/pdf';\n\n/**\n * Entry point of the Kasten library.\n * All encoding/decoding feature implementations are created through this class.\n *\n * @example\n * const base64 = Kasten.base64('rfc4648');\n * const encoded = base64.encode(data);\n *\n * @example\n * const base32 = Kasten.base32('rfc464hex');\n * const decoded = base32.decode(text);\n *\n * @example\n * const base16 = Kasten.base16();\n *\n * @example\n * const runLength = Kasten.runLength('pack-bits');\n */\nclass Kasten {\n\n private constructor() {}\n\n /**\n * Creates Base 64 codec instance.\n * @param category Base 64 category.\n */\n public static base64 = (category?: Base64Category): Base64 => {\n\n switch(category) {\n case 'rfc4648-url':\n return new RFC4648Base64URL();\n case 'rfc2025':\n return new RFC2045Base64();\n case 'rfc4648':\n default:\n return new RFC4648Base64();\n }\n }\n\n /**\n * Creates Base 32 codec instance.\n * @param category Base 32 category.\n */\n public static base32 = (category?: Base32Category): Base32 => {\n\n switch(category) {\n case 'rfc468-hex':\n return new RFC4648Base32Hex();\n case 'rfc4648':\n default:\n return new RFC4648Base32();\n }\n }\n\n /**\n * Create Base 16 codec instance.\n */\n public static base16 = (category?: Base16Category): Base16 => {\n\n switch(category) {\n case 'ascii':\n return new AsciiHexDecode();\n case 'rfc4648':\n default:\n return new RFC4648Base16();\n }\n }\n\n /**\n * Creates Run-Length codec instance.\n */\n public static runLength = (category?: RunLengthCatgory): RunLength => {\n\n switch(category) {\n case 'pack-bits':\n return new PackBits();\n case 'pdf':\n return new Pdf();\n case 'basic':\n default:\n return new BasicRunLength();\n }\n }\n}\n\nexport {\n Kasten,\n type Base64,\n type Base64Category as Base64Catgory,\n type Base32,\n type Base32Category,\n type Base16,\n type Base16Category,\n type RunLength,\n type RunLengthCatgory\n}"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  //#region src/base16/index.d.ts
2
- declare const Base16Categories: readonly ["rfc4648"];
2
+ declare const Base16Categories: readonly ["rfc4648", "ascii"];
3
3
  type Base16Category = typeof Base16Categories[number];
4
4
  /**
5
5
  * Base16 codec.
package/dist/index.js CHANGED
@@ -4,13 +4,22 @@
4
4
  */
5
5
  var Base16 = class {};
6
6
  //#endregion
7
- //#region src/char-codes.ts
7
+ //#region src/utils/char-codes.ts
8
8
  var CharCodes = class {
9
- static CR = 13;
9
+ static HT = 9;
10
10
  static LF = 10;
11
+ static VT = 11;
12
+ static FF = 12;
13
+ static CR = 13;
11
14
  static SP = 32;
12
- static HT = 9;
13
15
  constructor() {}
16
+ static isWhitespace = (c) => {
17
+ const type = typeof c;
18
+ if (type !== "string" && type !== "number") throw new Error("invalid argument type.");
19
+ if (type === "string" && c.length !== 1) throw new Error("inalid argument: not a character");
20
+ const code = typeof c === "string" ? c.charCodeAt(0) : c;
21
+ return this.HT <= code && code <= this.CR || code === this.SP;
22
+ };
14
23
  };
15
24
  //#endregion
16
25
  //#region src/errors.ts
@@ -50,13 +59,12 @@ var RFC4648Base16 = class RFC4648Base16 extends Base16 {
50
59
  }
51
60
  decode(base16) {
52
61
  const DECODED_TABLE = RFC4648Base16.DECODED_TABLE;
53
- const { CR, LF, SP, HT } = CharCodes;
54
62
  const upper = base16.toUpperCase();
55
63
  const chars = new Uint8Array(base16.length);
56
64
  let charCount = 0;
57
65
  for (let i = 0; i < base16.length; i++) {
58
66
  const c = upper.charCodeAt(i);
59
- if (c === CR || c === LF || c === SP || c === HT) continue;
67
+ if (CharCodes.isWhitespace(c)) continue;
60
68
  if (!DECODED_TABLE[c] || DECODED_TABLE[c] == 255) throw new KastenBase16DecodeError(`Invalid Base16 character: ${base16.charAt(i)}`);
61
69
  chars[charCount++] = c;
62
70
  }
@@ -75,6 +83,43 @@ var RFC4648Base16 = class RFC4648Base16 extends Base16 {
75
83
  }
76
84
  };
77
85
  //#endregion
86
+ //#region src/base16/ascii/ascii.ts
87
+ /**
88
+ * AsciiHexDecode codec of PDF1.7
89
+ */
90
+ var AsciiHexDecode = class extends Base16 {
91
+ encode(bytes) {
92
+ if (bytes.length === 0) return ">";
93
+ const chars = [];
94
+ for (const byte of bytes) {
95
+ const char = byte.toString(16).padStart(2, "0");
96
+ chars.push(char);
97
+ }
98
+ chars.push(">");
99
+ return chars.join("");
100
+ }
101
+ decode(base16) {
102
+ const chars = [];
103
+ for (const c of base16) {
104
+ if (c === ">") break;
105
+ if (CharCodes.isWhitespace(c)) continue;
106
+ const code = c.charCodeAt(0);
107
+ if (!(48 <= code && code <= 57) && !(65 <= code && code <= 70) && !(97 <= code && code <= 102)) throw new KastenBase16DecodeError(`invalid char: ${c}`);
108
+ chars.push(c);
109
+ }
110
+ if (chars.length % 2 !== 0) chars.push("0");
111
+ const strLength = chars.length;
112
+ const bytes = new Uint8Array(Math.ceil(strLength / 2));
113
+ let byteCount = 0;
114
+ for (let i = 0, j = 0; i < strLength; i += 2, j++) {
115
+ const hex = chars[i] + chars[i + 1];
116
+ const byte = Number.parseInt(hex, 16);
117
+ bytes[byteCount++] = byte;
118
+ }
119
+ return bytes.subarray(0, byteCount);
120
+ }
121
+ };
122
+ //#endregion
78
123
  //#region src/base32/index.ts
79
124
  /**
80
125
  * Base32 codec.
@@ -142,12 +187,11 @@ var RFC4648Base32 = class RFC4648Base32 extends Base32 {
142
187
  const upper = base32.toUpperCase();
143
188
  const DECODED_TABLE = RFC4648Base32.DECODED_TABLE;
144
189
  const PADDING = RFC4648Base32.PADDING_CHAR_CODE;
145
- const { CR, LF, SP, HT } = CharCodes;
146
190
  const chars = new Uint8Array(base32.length);
147
191
  let charCount = 0;
148
192
  for (let i = 0; i < base32.length; i++) {
149
193
  const c = upper.charCodeAt(i);
150
- if (c !== CR && c !== LF && c !== SP && c !== HT) chars[charCount++] = c;
194
+ if (!CharCodes.isWhitespace(c)) chars[charCount++] = c;
151
195
  }
152
196
  if (charCount % 8 !== 0) throw new KastenBase32DecodeError("Invalid length string.");
153
197
  let firstPad = -1;
@@ -251,12 +295,11 @@ var RFC4648Base32Hex = class RFC4648Base32Hex extends Base32 {
251
295
  const upper = base32.toUpperCase();
252
296
  const DECODED_TABLE = RFC4648Base32Hex.DECODED_TABLE;
253
297
  const PADDING = RFC4648Base32Hex.PADDING_CHAR_CODE;
254
- const { CR, LF, SP, HT } = CharCodes;
255
298
  const chars = new Uint8Array(base32.length);
256
299
  let charCount = 0;
257
300
  for (let i = 0; i < base32.length; i++) {
258
301
  const c = upper.charCodeAt(i);
259
- if (c !== CR && c !== LF && c !== SP && c !== HT) chars[charCount++] = c;
302
+ if (!CharCodes.isWhitespace(c)) chars[charCount++] = c;
260
303
  }
261
304
  if (charCount % 8 !== 0) throw new KastenBase32DecodeError("Invalid length string.");
262
305
  let firstPad = -1;
@@ -340,6 +383,7 @@ var RFC2045Base64 = class RFC2045Base64 extends Base64 {
340
383
  encode = (bytes) => {
341
384
  if (bytes.length === 0) return "";
342
385
  const ENCODE_TABLE = RFC2045Base64.ENCODE_TABLE;
386
+ const { CR, LF } = CharCodes;
343
387
  const baseSize = Math.ceil(bytes.length / 3) * 4;
344
388
  const linebreaks = Math.floor((baseSize - 1) / 76);
345
389
  const chars = new Uint8Array(baseSize + linebreaks * 2);
@@ -360,8 +404,8 @@ var RFC2045Base64 = class RFC2045Base64 extends Base64 {
360
404
  charCout += 4;
361
405
  if (charCout === 76 && ci < chars.length) {
362
406
  charCout = 0;
363
- chars[ci++] = CharCodes.CR;
364
- chars[ci++] = CharCodes.LF;
407
+ chars[ci++] = CR;
408
+ chars[ci++] = LF;
365
409
  }
366
410
  }
367
411
  const remain = bytes.length % 3;
@@ -460,7 +504,7 @@ var RFC4648Base64 = class RFC4648Base64 extends Base64 {
460
504
  let lineCharCount = 0;
461
505
  for (let i = 0; i < base64.length; i++) {
462
506
  const c = base64.charCodeAt(i);
463
- if (c !== CharCodes.CR && c !== CharCodes.LF && c !== CharCodes.SP && c !== CharCodes.HT) line[lineCharCount++] = c;
507
+ if (!CharCodes.isWhitespace(c)) line[lineCharCount++] = c;
464
508
  }
465
509
  if (lineCharCount % 4 !== 0) throw new KastenBase64DecodeError("Invalid length string");
466
510
  let firstPad = -1;
@@ -543,7 +587,7 @@ var RFC4648Base64URL = class RFC4648Base64URL extends Base64 {
543
587
  let lineCharCount = 0;
544
588
  for (let i = 0; i < base64.length; i++) {
545
589
  const c = base64.charCodeAt(i);
546
- if (c !== CharCodes.CR && c !== CharCodes.LF && c !== CharCodes.SP && c !== CharCodes.HT) line[lineCharCount++] = c;
590
+ if (!CharCodes.isWhitespace(c)) line[lineCharCount++] = c;
547
591
  }
548
592
  if (lineCharCount % 4 !== 0) throw new KastenBase64DecodeError("Invalid length string");
549
593
  let firstPad = -1;
@@ -589,6 +633,9 @@ var RFC4648Base64URL = class RFC4648Base64URL extends Base64 {
589
633
  var RunLength = class {};
590
634
  //#endregion
591
635
  //#region src/run-length/basic/basic-run-length.ts
636
+ /**
637
+ * Basic Run-Length codec.
638
+ */
592
639
  var BasicRunLength = class extends RunLength {
593
640
  encode(bytes) {
594
641
  const encoded = new Uint8Array(bytes.length * 2);
@@ -636,6 +683,9 @@ var KastenRunLengthEncodeError = class extends KastenRunLengthError {};
636
683
  var KastenRunLengthDecodeError = class extends KastenRunLengthError {};
637
684
  //#endregion
638
685
  //#region src/run-length/pack-bits/pack-bits.ts
686
+ /**
687
+ * PackBits codec.
688
+ */
639
689
  var PackBits = class extends RunLength {
640
690
  encode(bytes) {
641
691
  if (bytes.length === 0) return new Uint8Array([]);
@@ -806,6 +856,7 @@ var Kasten = class {
806
856
  */
807
857
  static base16 = (category) => {
808
858
  switch (category) {
859
+ case "ascii": return new AsciiHexDecode();
809
860
  default: return new RFC4648Base16();
810
861
  }
811
862
  };
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../src/base16/index.ts","../src/char-codes.ts","../src/errors.ts","../src/base16/errors.ts","../src/base16/rfc4648/rfc4648.ts","../src/base32/index.ts","../src/base32/errors.ts","../src/base32/rfc4648/rfc4648.ts","../src/base32/rfc4648/rfc4648hex.ts","../src/base64/index.ts","../src/base64/errors.ts","../src/base64/rfc2045/rfc2045.ts","../src/base64/rfc4648/rfc4648.ts","../src/base64/rfc4648/rfc4648url.ts","../src/run-length/index.ts","../src/run-length/basic/basic-run-length.ts","../src/run-length/errors.ts","../src/run-length/pack-bits/pack-bits.ts","../src/run-length/pdf/pdf.ts","../src/kasten.ts"],"sourcesContent":["export const Base16Categories = ['rfc4648'] as const;\n\nexport type Base16Category = typeof Base16Categories[number];\n\n/**\n * Base16 codec.\n */\nexport abstract class Base16 {\n\n /**\n * Encodes bytes to Base16 string.\n * @param bytes Bytes to be encoded.\n */\n public abstract encode(bytes: Uint8Array): string;\n\n /**\n * Decodes Base16 string to bytes.\n * @param base16 Base16 string to be decoded.\n */\n public abstract decode(base16: string): Uint8Array;\n}","export class CharCodes {\n\n public static CR = 13;\n\n public static LF = 10;\n\n public static SP = 32;\n\n public static HT = 9;\n\n private constructor() {}\n}","export class KastenError extends Error {}","import { KastenError } from '@/errors';\n\nexport class KastenBase16Error extends KastenError {}\n\nexport class KastenBase16EncodeError extends KastenBase16Error {}\n\nexport class KastenBase16DecodeError extends KastenBase16Error {}","import { Base16 } from '@/base16';\nimport { CharCodes } from '@/char-codes';\nimport { KastenBase16DecodeError } from '../errors';\n\n/**\n * RFC 4648 Base 16 encoding.\n */\nexport class RFC4648Base16 extends Base16 {\n\n private static readonly textDecoder = new TextDecoder();\n\n private static readonly TABLE = '0123456789ABCDEF';\n\n private static readonly ENCODED_TABLE = new Uint8Array(\n [...this.TABLE].map(c => c.charCodeAt(0))\n );\n\n private static readonly DECODED_TABLE = new Uint8Array(256);\n\n static {\n this.DECODED_TABLE.fill(255);\n\n for (let i = 0; i < this.TABLE.length; i++) {\n this.DECODED_TABLE[this.TABLE.charCodeAt(i)] = i;\n }\n }\n\n public override encode(bytes: Uint8Array): string {\n\n const ENCODED_TABLE = RFC4648Base16.ENCODED_TABLE;\n\n const chars = new Uint8Array(bytes.length * 2);\n\n let charCount = 0;\n\n for (const byte of bytes) {\n \n const ci1 = (byte & 0xF0) >> 4;\n const ci2 = byte & 0x0F;\n\n const c1 = ENCODED_TABLE[ci1]!;\n const c2 = ENCODED_TABLE[ci2]!;\n\n chars[charCount++] = c1;\n chars[charCount++] = c2;\n }\n\n return RFC4648Base16.textDecoder.decode(chars);\n }\n \n public override decode(base16: string): Uint8Array {\n\n const DECODED_TABLE = RFC4648Base16.DECODED_TABLE;\n const { CR, LF, SP, HT, } = CharCodes;\n\n const upper = base16.toUpperCase();\n const chars = new Uint8Array(base16.length);\n\n let charCount = 0;\n\n for (let i = 0; i < base16.length; i++) {\n const c = upper.charCodeAt(i);\n\n if (c === CR || c === LF || c === SP || c === HT)\n continue;\n\n if (!DECODED_TABLE[c] || DECODED_TABLE[c] == 255)\n throw new KastenBase16DecodeError(`Invalid Base16 character: ${base16.charAt(i)}`);\n\n chars[charCount++] = c;\n }\n\n if (charCount % 2 !== 0)\n throw new KastenBase16DecodeError('Invalid Base16');\n\n const bytes = new Uint8Array(Math.ceil(base16.length / 2));\n\n let byteCount = 0;\n\n for (let i = 0; i < charCount; i += 2) {\n \n const c1 = chars[i]!;\n const c2 = chars[i + 1]!;\n\n const ci1 = DECODED_TABLE[c1]!;\n const ci2 = DECODED_TABLE[c2]!;\n\n const byte = ((ci1 & 0x0F) << 4) | (ci2 & 0x0F);\n\n bytes[byteCount++] = byte;\n }\n\n return bytes.subarray(0, byteCount);\n }\n}","export type Base32Category = typeof Base32Categories[number];\n\nexport const Base32Categories = ['rfc4648', 'rfc468-hex'] as const;\n\n/**\n * Base32 codec.\n */\nexport abstract class Base32 {\n\n protected static readonly textDecoder = new TextDecoder();\n\n /**\n * Encodes bytes to Base32 string\n * @param bytes Bytes to be encoded.\n */\n public abstract encode(bytes: Uint8Array): string;\n\n /**\n * Decodes Base32 string to bytes.\n * @param base32 Base32 string to be decoded.\n */\n public abstract decode(base32: string): Uint8Array;\n}","import { KastenError } from '@/errors';\n\nexport class KastenBase32Error extends KastenError {}\n\nexport class KastenBase32EncodeError extends KastenBase32Error {}\n\nexport class KastenBase32DecodeError extends KastenBase32Error {}","import { Base32 } from '@/base32';\nimport { CharCodes } from '@/char-codes';\nimport { KastenBase32DecodeError } from '@/base32/errors';\n\nexport class RFC4648Base32 extends Base32 {\n\n private static readonly PADDING_CHAR_CODE: number = '='.charCodeAt(0);\n\n private static readonly TABLE: string\n = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567';\n\n private static readonly ENCODED_TABLE = new Uint8Array(\n [...this.TABLE].map(c => c.charCodeAt(0))\n );\n\n private static readonly DECODED_TABLE = new Uint8Array(256);\n\n static {\n this.DECODED_TABLE.fill(255);\n\n for (let i = 0; i < this.TABLE.length; i++) {\n this.DECODED_TABLE[this.TABLE.charCodeAt(i)] = i;\n }\n }\n\n public override encode(bytes: Uint8Array): string {\n\n const ENCODED_TABLE = RFC4648Base32.ENCODED_TABLE;\n\n const chars = new Uint8Array(Math.ceil(bytes.length / 5) * 8);\n\n let count = 0;\n\n for (let i = 0; i < bytes.length; i += 5) {\n\n const b1 = bytes[i]!;\n const b2 = bytes[i + 1] ?? 0;\n const b3 = bytes[i + 2] ?? 0;\n const b4 = bytes[i + 3] ?? 0;\n const b5 = bytes[i + 4] ?? 0;\n\n const ci1 = (b1 & 0xFF) >> 3;\n const ci2 = ((b1 & 0x07) << 2) | ((b2 & 0xC0) >> 6);\n const ci3 = (b2 & 0x3E) >> 1;\n const ci4 = ((b2 & 0x01) << 4) | ((b3 & 0xF0) >> 4);\n const ci5 = ((b3 & 0x0F) << 1) | ((b4 & 0x80) >> 7);\n const ci6 = (b4 & 0x7C) >> 2;\n const ci7 = ((b4 & 0x03) << 3) | ((b5 & 0xE0) >> 5);\n const ci8 = b5 & 0x1F;\n\n const c1 = ENCODED_TABLE[ci1]!;\n const c2 = ENCODED_TABLE[ci2]!;\n const c3 = ENCODED_TABLE[ci3]!;\n const c4 = ENCODED_TABLE[ci4]!;\n const c5 = ENCODED_TABLE[ci5]!;\n const c6 = ENCODED_TABLE[ci6]!;\n const c7 = ENCODED_TABLE[ci7]!;\n const c8 = ENCODED_TABLE[ci8]!;\n\n chars[count++] = c1;\n chars[count++] = c2;\n chars[count++] = c3;\n chars[count++] = c4;\n chars[count++] = c5;\n chars[count++] = c6;\n chars[count++] = c7;\n chars[count++] = c8;\n }\n\n const remain = bytes.length % 5;\n\n const padding =\n remain === 4 ? 1 :\n remain === 3 ? 3 :\n remain === 2 ? 4 :\n remain === 1 ? 6 : 0;\n\n for (let i = padding; i > 0; i--) {\n chars[count - i] = RFC4648Base32.PADDING_CHAR_CODE;\n }\n\n return Base32.textDecoder.decode(chars.subarray(0, count));\n }\n \n public override decode(base32: string): Uint8Array {\n\n const upper = base32.toUpperCase();\n\n const DECODED_TABLE = RFC4648Base32.DECODED_TABLE;\n const PADDING = RFC4648Base32.PADDING_CHAR_CODE;\n const { CR, LF, SP, HT } = CharCodes;\n\n const chars = new Uint8Array(base32.length);\n\n let charCount = 0;\n\n for (let i = 0; i < base32.length; i++) {\n\n const c = upper.charCodeAt(i);\n\n if (c !== CR &&\n c !== LF &&\n c !== SP &&\n c !== HT) {\n\n chars[charCount++] = c;\n }\n }\n\n if (charCount % 8 !== 0)\n throw new KastenBase32DecodeError('Invalid length string.');\n\n let firstPad = -1;\n\n for (let i = 0; i < charCount; i++) {\n if (chars[i] === PADDING) {\n firstPad = i;\n break;\n }\n }\n\n let padCount = 0;\n\n if (firstPad !== -1) {\n\n if (firstPad < charCount - 6)\n throw new KastenBase32DecodeError('Invalid padding position.');\n\n for (let i = firstPad; i < charCount; i++) {\n if (chars[i] !== PADDING) {\n throw new KastenBase32DecodeError('Invalid padding');\n }\n }\n\n padCount = charCount - firstPad;\n\n if (padCount !== 1 && padCount !== 3 && padCount !== 4 && padCount !== 6) {\n throw new KastenBase32DecodeError('Invalid padding');\n }\n }\n\n const bytes = new Uint8Array(Math.floor(((charCount - padCount) * 5) / 8));\n\n let byteCount = 0;\n\n for (let i = 0; i < charCount; i += 8) {\n\n const c1 = chars[i]!;\n const c2 = chars[i + 1]!;\n const c3 = chars[i + 2]!;\n const c4 = chars[i + 3]!;\n const c5 = chars[i + 4]!;\n const c6 = chars[i + 5]!;\n const c7 = chars[i + 6]!;\n const c8 = chars[i + 7]!;\n\n const ci1 = DECODED_TABLE[c1]!;\n const ci2 = DECODED_TABLE[c2]!;\n const ci3 = c3 !== PADDING ? DECODED_TABLE[c3]! : 0;\n const ci4 = c4 !== PADDING ? DECODED_TABLE[c4]! : 0;\n const ci5 = c5 !== PADDING ? DECODED_TABLE[c5]! : 0;\n const ci6 = c6 !== PADDING ? DECODED_TABLE[c6]! : 0;\n const ci7 = c7 !== PADDING ? DECODED_TABLE[c7]! : 0;\n const ci8 = c8 !== PADDING ? DECODED_TABLE[c8]! : 0;\n\n if (ci1 === 255 ||\n ci2 === 255 ||\n ci3 === 255 ||\n ci4 === 255 ||\n ci5 === 255 ||\n ci6 === 255 ||\n ci7 === 255 ||\n ci8 === 255) {\n\n throw new KastenBase32DecodeError('Invalid Base32');\n }\n\n const b1 = ((ci1 & 0x1F) << 3) | ((ci2 & 0x1C) >> 2);\n const b2 = ((ci2 & 0x03) << 6) | ((ci3 & 0x1F) << 1) | ((ci4 & 0x10) >> 4);\n const b3 = ((ci4 & 0x0F) << 4) | ((ci5 & 0x1E) >> 1);\n const b4 = ((ci5 & 0x01) << 7) | ((ci6 & 0x1F) << 2) | ((ci7 & 0x18) >> 3);\n const b5 = ((ci7 & 0x07) << 5) | (ci8 & 0x1F);\n\n bytes[byteCount++] = b1;\n\n if (byteCount < bytes.length)\n bytes[byteCount++] = b2;\n\n if (byteCount < bytes.length)\n bytes[byteCount++] = b3;\n\n if (byteCount < bytes.length && c5 !== PADDING)\n bytes[byteCount++] = b4;\n\n if (byteCount < bytes.length && c7 != PADDING)\n bytes[byteCount++] = b5;\n }\n\n return bytes.subarray(0, byteCount);\n }\n}","import { Base32 } from '@/base32';\nimport { CharCodes } from '@/char-codes';\nimport { KastenBase32DecodeError } from '@/base32/errors';\n\nexport class RFC4648Base32Hex extends Base32 {\n\n private static readonly PADDING_CHAR_CODE: number = '='.charCodeAt(0);\n\n private static readonly TABLE: string\n = '0123456789ABCDEFGHIJKLMNOPQRSTUV';\n\n private static readonly ENCODED_TABLE = new Uint8Array(\n [...this.TABLE].map(c => c.charCodeAt(0))\n );\n\n private static readonly DECODED_TABLE = new Uint8Array(256);\n\n static {\n this.DECODED_TABLE.fill(255);\n\n for (let i = 0; i < this.TABLE.length; i++) {\n this.DECODED_TABLE[this.TABLE.charCodeAt(i)] = i;\n }\n }\n\n public override encode(bytes: Uint8Array): string {\n\n const ENCODED_TABLE = RFC4648Base32Hex.ENCODED_TABLE;\n\n const chars = new Uint8Array(Math.ceil(bytes.length / 5) * 8);\n\n let count = 0;\n\n for (let i = 0; i < bytes.length; i += 5) {\n\n const b1 = bytes[i]!;\n const b2 = bytes[i + 1] ?? 0;\n const b3 = bytes[i + 2] ?? 0;\n const b4 = bytes[i + 3] ?? 0;\n const b5 = bytes[i + 4] ?? 0;\n\n const ci1 = (b1 & 0xFF) >> 3;\n const ci2 = ((b1 & 0x07) << 2) | ((b2 & 0xC0) >> 6);\n const ci3 = (b2 & 0x3E) >> 1;\n const ci4 = ((b2 & 0x01) << 4) | ((b3 & 0xF0) >> 4);\n const ci5 = ((b3 & 0x0F) << 1) | ((b4 & 0x80) >> 7);\n const ci6 = (b4 & 0x7C) >> 2;\n const ci7 = ((b4 & 0x03) << 3) | ((b5 & 0xE0) >> 5);\n const ci8 = b5 & 0x1F;\n\n const c1 = ENCODED_TABLE[ci1]!;\n const c2 = ENCODED_TABLE[ci2]!;\n const c3 = ENCODED_TABLE[ci3]!;\n const c4 = ENCODED_TABLE[ci4]!;\n const c5 = ENCODED_TABLE[ci5]!;\n const c6 = ENCODED_TABLE[ci6]!;\n const c7 = ENCODED_TABLE[ci7]!;\n const c8 = ENCODED_TABLE[ci8]!;\n\n chars[count++] = c1;\n chars[count++] = c2;\n chars[count++] = c3;\n chars[count++] = c4;\n chars[count++] = c5;\n chars[count++] = c6;\n chars[count++] = c7;\n chars[count++] = c8;\n }\n\n const remain = bytes.length % 5;\n\n const padding =\n remain === 4 ? 1 :\n remain === 3 ? 3 :\n remain === 2 ? 4 :\n remain === 1 ? 6 : 0;\n\n for (let i = padding; i > 0; i--) {\n chars[count - i] = RFC4648Base32Hex.PADDING_CHAR_CODE;\n }\n\n return Base32.textDecoder.decode(chars.subarray(0, count));\n }\n \n public override decode(base32: string): Uint8Array {\n\n const upper = base32.toUpperCase();\n\n const DECODED_TABLE = RFC4648Base32Hex.DECODED_TABLE;\n const PADDING = RFC4648Base32Hex.PADDING_CHAR_CODE;\n const { CR, LF, SP, HT } = CharCodes;\n\n const chars = new Uint8Array(base32.length);\n\n let charCount = 0;\n\n for (let i = 0; i < base32.length; i++) {\n\n const c = upper.charCodeAt(i);\n\n if (c !== CR &&\n c !== LF &&\n c !== SP &&\n c !== HT) {\n\n chars[charCount++] = c;\n }\n }\n\n if (charCount % 8 !== 0)\n throw new KastenBase32DecodeError('Invalid length string.');\n\n let firstPad = -1;\n\n for (let i = 0; i < charCount; i++) {\n if (chars[i] === PADDING) {\n firstPad = i;\n break;\n }\n }\n\n let padCount = 0;\n\n if (firstPad !== -1) {\n\n if (firstPad < charCount - 6)\n throw new KastenBase32DecodeError('Invalid padding position.');\n\n for (let i = firstPad; i < charCount; i++) {\n if (chars[i] !== PADDING) {\n throw new KastenBase32DecodeError('Invalid padding');\n }\n }\n\n padCount = charCount - firstPad;\n\n if (padCount !== 1 && padCount !== 3 && padCount !== 4 && padCount !== 6) {\n throw new KastenBase32DecodeError('Invalid padding');\n }\n }\n\n const bytes = new Uint8Array(Math.floor(((charCount - padCount) * 5) / 8));\n\n let byteCount = 0;\n\n for (let i = 0; i < charCount; i += 8) {\n\n const c1 = chars[i]!;\n const c2 = chars[i + 1]!;\n const c3 = chars[i + 2]!;\n const c4 = chars[i + 3]!;\n const c5 = chars[i + 4]!;\n const c6 = chars[i + 5]!;\n const c7 = chars[i + 6]!;\n const c8 = chars[i + 7]!;\n\n const ci1 = DECODED_TABLE[c1]!;\n const ci2 = DECODED_TABLE[c2]!;\n const ci3 = c3 !== PADDING ? DECODED_TABLE[c3]! : 0;\n const ci4 = c4 !== PADDING ? DECODED_TABLE[c4]! : 0;\n const ci5 = c5 !== PADDING ? DECODED_TABLE[c5]! : 0;\n const ci6 = c6 !== PADDING ? DECODED_TABLE[c6]! : 0;\n const ci7 = c7 !== PADDING ? DECODED_TABLE[c7]! : 0;\n const ci8 = c8 !== PADDING ? DECODED_TABLE[c8]! : 0;\n\n if (ci1 === 255 ||\n ci2 === 255 ||\n ci3 === 255 ||\n ci4 === 255 ||\n ci5 === 255 ||\n ci6 === 255 ||\n ci7 === 255 ||\n ci8 === 255) {\n\n throw new KastenBase32DecodeError('Invalid Base32');\n }\n\n const b1 = ((ci1 & 0x1F) << 3) | ((ci2 & 0x1C) >> 2);\n const b2 = ((ci2 & 0x03) << 6) | ((ci3 & 0x1F) << 1) | ((ci4 & 0x10) >> 4);\n const b3 = ((ci4 & 0x0F) << 4) | ((ci5 & 0x1E) >> 1);\n const b4 = ((ci5 & 0x01) << 7) | ((ci6 & 0x1F) << 2) | ((ci7 & 0x18) >> 3);\n const b5 = ((ci7 & 0x07) << 5) | (ci8 & 0x1F);\n\n bytes[byteCount++] = b1;\n\n if (byteCount < bytes.length)\n bytes[byteCount++] = b2;\n\n if (byteCount < bytes.length)\n bytes[byteCount++] = b3;\n\n if (byteCount < bytes.length && c5 !== PADDING)\n bytes[byteCount++] = b4;\n\n if (byteCount < bytes.length && c7 != PADDING)\n bytes[byteCount++] = b5;\n }\n\n return bytes.subarray(0, byteCount);\n }\n}","export type Base64Category = typeof Base64Categories[number];\n\nexport const Base64Categories = ['rfc4648', 'rfc4648-url', 'rfc2025'] as const;\n\n/**\n * Base64 codec.\n */\nexport abstract class Base64 {\n\n /**\n * Encodes byte array to string.\n */\n public abstract encode(bytes: Uint8Array): string;\n\n /**\n * Decodes string to byte array.\n * @param base64 Base64 string\n */\n public abstract decode(base64: string): Uint8Array;\n}","import { KastenError } from '@/errors';\n\n/**\n * Base error type of Base64.\n */\nexport class KastenBase64Error extends KastenError {}\n\n/**\n * Thrown when error occurs on Base64 encoding.\n */\nexport class KastenBase64EncodeError extends KastenBase64Error {};\n\n/**\n * Thrown when error occurs on Base64 decoding.\n */\nexport class KastenBase64DecodeError extends KastenBase64Error {};","import { Base64 } from '@/base64';\nimport { CharCodes } from '@/char-codes';\nimport { KastenBase64DecodeError } from '@/base64/errors';\n\nexport class RFC2045Base64 extends Base64 {\n\n private static readonly PADDING_CHAR_CODE = '='.charCodeAt(0);\n\n private static readonly TABLE: string\n = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n private static readonly DECODE_TABLE = new Uint8Array(256);\n\n private static readonly ENCODE_TABLE = new Uint8Array(\n [...this.TABLE].map(c => c.charCodeAt(0))\n );\n\n private static readonly decoder = new TextDecoder();\n\n static {\n\n this.DECODE_TABLE.fill(255);\n\n for (let i = 0; i < this.TABLE.length; i++) {\n this.DECODE_TABLE[this.TABLE.charCodeAt(i)] = i;\n }\n }\n\n public override encode = (bytes: Uint8Array): string => {\n\n if (bytes.length === 0) return '';\n\n const ENCODE_TABLE = RFC2045Base64.ENCODE_TABLE;\n\n const baseSize = Math.ceil(bytes.length / 3) * 4;\n const linebreaks = Math.floor((baseSize - 1) / 76);\n\n const chars = new Uint8Array(baseSize + linebreaks * 2);\n\n let ci = 0;\n\n let charCout = 0;\n\n for (let i = 0; i < bytes.length; i += 3) {\n\n const b1 = bytes[i]!;\n const b2 = bytes[i + 1] ?? 0;\n const b3 = bytes[i + 2] ?? 0;\n\n const c1 = b1 >> 2;\n const c2 = ((b1 & 0b00000011) << 4) | b2 >> 4;\n const c3 = ((b2 & 0b00001111) << 2) | b3 >> 6;\n const c4 = b3 & 0b00111111;\n\n chars[ci++] = ENCODE_TABLE[c1]!;\n chars[ci++] = ENCODE_TABLE[c2]!;\n chars[ci++] = ENCODE_TABLE[c3]!;\n chars[ci++] = ENCODE_TABLE[c4]!;\n\n charCout += 4;\n\n if (charCout === 76 && ci < chars.length) {\n charCout = 0;\n chars[ci++] = CharCodes.CR;\n chars[ci++] = CharCodes.LF;\n }\n }\n\n const remain = bytes.length % 3;\n\n if (remain === 1) {\n chars[ci - 2] = RFC2045Base64.PADDING_CHAR_CODE;\n chars[ci - 1] = RFC2045Base64.PADDING_CHAR_CODE;\n } else if (remain === 2) {\n chars[ci - 1] = RFC2045Base64.PADDING_CHAR_CODE;\n }\n\n return RFC2045Base64.decoder.decode(chars.subarray(0, ci));\n }\n \n public override decode = (base64: string): Uint8Array => {\n\n const DECODE_TABLE = RFC2045Base64.DECODE_TABLE;\n\n const line = new Uint8Array(base64.length);\n let lineCharCount = 0;\n\n for (let i = 0; i < base64.length; i++) {\n const c = base64.charCodeAt(i);\n if (c !== CharCodes.CR\n && c !== CharCodes.LF\n && c !== CharCodes.SP\n && c !== CharCodes.HT) {\n \n line[lineCharCount++] = c;\n }\n }\n\n if (lineCharCount % 4 !== 0)\n throw new KastenBase64DecodeError('Invalid length string');\n\n let firstPad = -1;\n\n for (let i = 0; i < lineCharCount; i++) {\n if (line[i] === RFC2045Base64.PADDING_CHAR_CODE) {\n firstPad = i;\n break;\n }\n }\n\n if (firstPad !== -1) {\n\n if (firstPad < lineCharCount - 2) {\n throw new KastenBase64DecodeError('Invalid padding position');\n }\n\n for (let i = firstPad; i < lineCharCount; i++) {\n if (line[i] !== RFC2045Base64.PADDING_CHAR_CODE) {\n throw new KastenBase64DecodeError('Invalid padding');\n }\n }\n\n const padCount = lineCharCount - firstPad;\n\n if (padCount !== 1 && padCount !== 2) {\n throw new KastenBase64DecodeError('Invalid padding');\n }\n }\n\n const lineLength = lineCharCount;\n\n const padding = \n line[lineLength - 1] === RFC2045Base64.PADDING_CHAR_CODE\n ? (line[lineLength - 2] === RFC2045Base64.PADDING_CHAR_CODE ? 2 : 1)\n : 0;\n\n const bytes = new Uint8Array((lineCharCount / 4) * 3 - padding);\n\n let writtenOffset = 0;\n\n for (let i = 0; i < lineCharCount; i += 4) {\n\n const code1 = line[i]!;\n const code2 = line[i + 1]!;\n const code3 = line[i + 2]!;\n const code4 = line[i + 3]!;\n\n const ci1 = DECODE_TABLE[code1]!;\n const ci2 = DECODE_TABLE[code2]!;\n const ci3 = code3 !== RFC2045Base64.PADDING_CHAR_CODE ? DECODE_TABLE[code3]! : 0;\n const ci4 = code4 !== RFC2045Base64.PADDING_CHAR_CODE ? DECODE_TABLE[code4]! : 0;\n\n if (ci1 === 255 ||\n ci2 === 255 ||\n (code3 !== RFC2045Base64.PADDING_CHAR_CODE && ci3 === 255) ||\n (code4 !== RFC2045Base64.PADDING_CHAR_CODE && ci4 === 255)) {\n\n throw new KastenBase64DecodeError(\"Invalid Base64\");\n }\n\n const b1 = (ci1 << 2) | (ci2 >> 4);\n const b2 = ((ci2 & 15) << 4) | (ci3 >> 2);\n const b3 = ((ci3 & 3) << 6) | ci4;\n\n bytes[writtenOffset++] = b1;\n \n if (code3 !== RFC2045Base64.PADDING_CHAR_CODE) {\n bytes[writtenOffset++] = b2;\n }\n\n if (code4 !== RFC2045Base64.PADDING_CHAR_CODE) {\n bytes[writtenOffset++] = b3;\n }\n }\n\n return bytes;\n }\n}","import { Base64 } from '@/base64';\nimport { KastenBase64DecodeError } from '@/base64/errors';\nimport { CharCodes } from '@/char-codes';\n\nexport class RFC4648Base64 extends Base64 {\n\n private static readonly PADDING_CHAR_CODE = '='.charCodeAt(0);\n\n private static readonly TABLE: string\n = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n private static readonly DECODE_TABLE = new Uint8Array(256);\n\n private static readonly ENCODE_TABLE = new Uint8Array(\n [...this.TABLE].map(c => c.charCodeAt(0))\n );\n\n private static readonly decoder = new TextDecoder();\n\n static {\n\n this.DECODE_TABLE.fill(255);\n\n for (let i = 0; i < this.TABLE.length; i++) {\n this.DECODE_TABLE[this.TABLE.charCodeAt(i)] = i;\n }\n }\n\n public override encode = (bytes: Uint8Array): string => {\n\n if (bytes.length === 0) return '';\n\n const ENCODE_TABLE = RFC4648Base64.ENCODE_TABLE;\n\n const baseSize = Math.ceil(bytes.length / 3) * 4;\n const linebreaks = Math.floor((baseSize - 1) / 76);\n\n const chars = new Uint8Array(baseSize + linebreaks * 2);\n\n let ci = 0;\n\n for (let i = 0; i < bytes.length; i += 3) {\n\n const b1 = bytes[i]!;\n const b2 = bytes[i + 1] ?? 0;\n const b3 = bytes[i + 2] ?? 0;\n\n const c1 = b1 >> 2;\n const c2 = ((b1 & 0b00000011) << 4) | b2 >> 4;\n const c3 = ((b2 & 0b00001111) << 2) | b3 >> 6;\n const c4 = b3 & 0b00111111;\n\n chars[ci++] = ENCODE_TABLE[c1]!;\n chars[ci++] = ENCODE_TABLE[c2]!;\n chars[ci++] = ENCODE_TABLE[c3]!;\n chars[ci++] = ENCODE_TABLE[c4]!;\n }\n\n const remain = bytes.length % 3;\n\n if (remain === 1) {\n chars[ci - 2] = RFC4648Base64.PADDING_CHAR_CODE;\n chars[ci - 1] = RFC4648Base64.PADDING_CHAR_CODE;\n } else if (remain === 2) {\n chars[ci - 1] = RFC4648Base64.PADDING_CHAR_CODE;\n }\n\n return RFC4648Base64.decoder.decode(chars.subarray(0, ci));\n }\n \n public override decode = (base64: string): Uint8Array => {\n\n const DECODE_TABLE = RFC4648Base64.DECODE_TABLE;\n\n const line = new Uint8Array(base64.length);\n let lineCharCount = 0;\n\n for (let i = 0; i < base64.length; i++) {\n const c = base64.charCodeAt(i);\n if (c !== CharCodes.CR\n && c !== CharCodes.LF\n && c !== CharCodes.SP\n && c !== CharCodes.HT) {\n \n line[lineCharCount++] = c;\n }\n }\n\n if (lineCharCount % 4 !== 0)\n throw new KastenBase64DecodeError('Invalid length string');\n\n let firstPad = -1;\n\n for (let i = 0; i < lineCharCount; i++) {\n if (line[i] === RFC4648Base64.PADDING_CHAR_CODE) {\n firstPad = i;\n break;\n }\n }\n\n if (firstPad !== -1) {\n\n if (firstPad < lineCharCount - 2) {\n throw new KastenBase64DecodeError('Invalid padding position');\n }\n\n for (let i = firstPad; i < lineCharCount; i++) {\n if (line[i] !== RFC4648Base64.PADDING_CHAR_CODE) {\n throw new KastenBase64DecodeError('Invalid padding');\n }\n }\n\n const padCount = lineCharCount - firstPad;\n\n if (padCount !== 1 && padCount !== 2) {\n throw new KastenBase64DecodeError('Invalid padding');\n }\n }\n\n const lineLength = lineCharCount;\n\n const padding = \n line[lineLength - 1] === RFC4648Base64.PADDING_CHAR_CODE\n ? (line[lineLength - 2] === RFC4648Base64.PADDING_CHAR_CODE ? 2 : 1)\n : 0;\n\n const bytes = new Uint8Array((lineCharCount / 4) * 3 - padding);\n\n let writtenOffset = 0;\n\n for (let i = 0; i < lineCharCount; i += 4) {\n\n const code1 = line[i]!;\n const code2 = line[i + 1]!;\n const code3 = line[i + 2]!;\n const code4 = line[i + 3]!;\n\n const ci1 = DECODE_TABLE[code1]!;\n const ci2 = DECODE_TABLE[code2]!;\n const ci3 = code3 !== RFC4648Base64.PADDING_CHAR_CODE ? DECODE_TABLE[code3]! : 0;\n const ci4 = code4 !== RFC4648Base64.PADDING_CHAR_CODE ? DECODE_TABLE[code4]! : 0;\n\n if (ci1 === 255 ||\n ci2 === 255 ||\n (code3 !== RFC4648Base64.PADDING_CHAR_CODE && ci3 === 255) ||\n (code4 !== RFC4648Base64.PADDING_CHAR_CODE && ci4 === 255)) {\n\n throw new KastenBase64DecodeError(\"Invalid Base64\");\n }\n\n const b1 = (ci1 << 2) | (ci2 >> 4);\n const b2 = ((ci2 & 15) << 4) | (ci3 >> 2);\n const b3 = ((ci3 & 3) << 6) | ci4;\n\n bytes[writtenOffset++] = b1;\n \n if (code3 !== RFC4648Base64.PADDING_CHAR_CODE) {\n bytes[writtenOffset++] = b2;\n }\n\n if (code4 !== RFC4648Base64.PADDING_CHAR_CODE) {\n bytes[writtenOffset++] = b3;\n }\n }\n\n return bytes;\n }\n}","import { CharCodes } from '@/char-codes';\nimport { KastenBase64DecodeError } from '@/base64/errors';\nimport { Base64 } from '@/base64';\n\nexport class RFC4648Base64URL extends Base64 {\n \n private static readonly PADDING_CHAR_CODE = '='.charCodeAt(0);\n\n private static readonly TABLE: string\n = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';\n\n private static readonly DECODE_TABLE = new Uint8Array(256);\n\n private static readonly ENCODE_TABLE = new Uint8Array(\n [...this.TABLE].map(c => c.charCodeAt(0))\n );\n\n private static readonly decoder = new TextDecoder();\n\n static {\n \n this.DECODE_TABLE.fill(255);\n\n for (let i = 0; i < this.TABLE.length; i++) {\n this.DECODE_TABLE[this.TABLE.charCodeAt(i)] = i;\n }\n }\n\n public override encode = (bytes: Uint8Array): string => {\n\n if (bytes.length === 0) return '';\n\n const ENCODE_TABLE = RFC4648Base64URL.ENCODE_TABLE;\n\n const baseSize = Math.ceil(bytes.length / 3) * 4;\n const linebreaks = Math.floor((baseSize - 1) / 76);\n\n const chars = new Uint8Array(baseSize + linebreaks * 2);\n\n let ci = 0;\n\n for (let i = 0; i < bytes.length; i += 3) {\n\n const b1 = bytes[i]!;\n const b2 = bytes[i + 1] ?? 0;\n const b3 = bytes[i + 2] ?? 0;\n\n const c1 = b1 >> 2;\n const c2 = ((b1 & 0b00000011) << 4) | b2 >> 4;\n const c3 = ((b2 & 0b00001111) << 2) | b3 >> 6;\n const c4 = b3 & 0b00111111;\n\n chars[ci++] = ENCODE_TABLE[c1]!;\n chars[ci++] = ENCODE_TABLE[c2]!;\n chars[ci++] = ENCODE_TABLE[c3]!;\n chars[ci++] = ENCODE_TABLE[c4]!;\n }\n\n const remain = bytes.length % 3;\n\n if (remain === 1) {\n chars[ci - 2] = RFC4648Base64URL.PADDING_CHAR_CODE;\n chars[ci - 1] = RFC4648Base64URL.PADDING_CHAR_CODE;\n } else if (remain === 2) {\n chars[ci - 1] = RFC4648Base64URL.PADDING_CHAR_CODE;\n }\n\n return RFC4648Base64URL.decoder.decode(chars.subarray(0, ci));\n }\n \n public override decode = (base64: string): Uint8Array => {\n\n const DECODE_TABLE = RFC4648Base64URL.DECODE_TABLE;\n\n const line = new Uint8Array(base64.length);\n let lineCharCount = 0;\n\n for (let i = 0; i < base64.length; i++) {\n const c = base64.charCodeAt(i);\n if (c !== CharCodes.CR\n && c !== CharCodes.LF\n && c !== CharCodes.SP\n && c !== CharCodes.HT) {\n \n line[lineCharCount++] = c;\n }\n }\n\n if (lineCharCount % 4 !== 0)\n throw new KastenBase64DecodeError('Invalid length string');\n\n let firstPad = -1;\n\n for (let i = 0; i < lineCharCount; i++) {\n if (line[i] === RFC4648Base64URL.PADDING_CHAR_CODE) {\n firstPad = i;\n break;\n }\n }\n\n if (firstPad !== -1) {\n\n if (firstPad < lineCharCount - 2) {\n throw new KastenBase64DecodeError('Invalid padding position');\n }\n\n for (let i = firstPad; i < lineCharCount; i++) {\n if (line[i] !== RFC4648Base64URL.PADDING_CHAR_CODE) {\n throw new KastenBase64DecodeError('Invalid padding');\n }\n }\n\n const padCount = lineCharCount - firstPad;\n\n if (padCount !== 1 && padCount !== 2) {\n throw new KastenBase64DecodeError('Invalid padding');\n }\n }\n\n const lineLength = lineCharCount;\n\n const padding = \n line[lineLength - 1] === RFC4648Base64URL.PADDING_CHAR_CODE\n ? (line[lineLength - 2] === RFC4648Base64URL.PADDING_CHAR_CODE ? 2 : 1)\n : 0;\n\n const bytes = new Uint8Array((lineCharCount / 4) * 3 - padding);\n\n let writtenOffset = 0;\n\n for (let i = 0; i < lineCharCount; i += 4) {\n\n const code1 = line[i]!;\n const code2 = line[i + 1]!;\n const code3 = line[i + 2]!;\n const code4 = line[i + 3]!;\n\n const ci1 = DECODE_TABLE[code1]!;\n const ci2 = DECODE_TABLE[code2]!;\n const ci3 = code3 !== RFC4648Base64URL.PADDING_CHAR_CODE ? DECODE_TABLE[code3]! : 0;\n const ci4 = code4 !== RFC4648Base64URL.PADDING_CHAR_CODE ? DECODE_TABLE[code4]! : 0;\n\n if (ci1 === 255 ||\n ci2 === 255 ||\n (code3 !== RFC4648Base64URL.PADDING_CHAR_CODE && ci3 === 255) ||\n (code4 !== RFC4648Base64URL.PADDING_CHAR_CODE && ci4 === 255)) {\n\n throw new KastenBase64DecodeError(\"Invalid Base64\");\n }\n\n const b1 = (ci1 << 2) | (ci2 >> 4);\n const b2 = ((ci2 & 15) << 4) | (ci3 >> 2);\n const b3 = ((ci3 & 3) << 6) | ci4;\n\n bytes[writtenOffset++] = b1;\n \n if (code3 !== RFC4648Base64URL.PADDING_CHAR_CODE) {\n bytes[writtenOffset++] = b2;\n }\n\n if (code4 !== RFC4648Base64URL.PADDING_CHAR_CODE) {\n bytes[writtenOffset++] = b3;\n }\n }\n\n return bytes;\n }\n}","export const RunLengthCatgories = ['basic', 'pack-bits', 'pdf'] as const;\n\nexport type RunLengthCatgory = typeof RunLengthCatgories[number];\n\n/**\n * Run-Length encoding and decoding.\n */\nexport abstract class RunLength {\n\n /**\n * Encodes bytes to Run-Length encoded bytes.\n * @param bytes \n */\n public abstract encode(bytes: Uint8Array): Uint8Array;\n\n /**\n * Decodes Run-Length encoded bytes to original bytes.\n * @param runLength \n */\n public abstract decode(runLength: Uint8Array): Uint8Array;\n}","import { RunLength } from '@/run-length';\n\nexport class BasicRunLength extends RunLength {\n \n public override encode(bytes: Uint8Array): Uint8Array {\n\n const encoded = new Uint8Array(bytes.length * 2);\n\n let byteCount = 0;\n\n let prev: number | null = null;\n\n let count = 0;\n\n for(let i = 0; i < bytes.length; i++) {\n\n const byte = bytes[i]!;\n\n if (prev === null) {\n prev = byte;\n count = 1;\n continue;\n }\n\n if (prev === byte) {\n\n if (count < 255) {\n count++;\n continue;\n }\n }\n\n encoded[byteCount++] = count;\n encoded[byteCount++] = prev;\n\n prev = byte;\n count = 1;\n }\n\n if (prev !== null) {\n encoded[byteCount++] = count;\n encoded[byteCount++] = prev;\n }\n\n return encoded.subarray(0, byteCount);\n }\n \n public override decode(runLength: Uint8Array): Uint8Array {\n\n const decoded: number[] = [];\n\n for (let i = 0; i < runLength.length; i += 2) {\n\n const count = runLength[i]!;\n\n const byte = runLength[i + 1]!;\n\n for (let j = 0; j < count; j++) {\n decoded.push(byte);\n }\n }\n\n return new Uint8Array(decoded);\n }\n}","import { KastenError } from '@/errors';\n\nexport class KastenRunLengthError extends KastenError {}\n\nexport class KastenRunLengthEncodeError extends KastenRunLengthError {}\n\nexport class KastenRunLengthDecodeError extends KastenRunLengthError {}","import { RunLength } from '@/run-length';\nimport { KastenRunLengthDecodeError } from '../errors';\n\nexport class PackBits extends RunLength {\n\n public override encode(bytes: Uint8Array): Uint8Array {\n\n if (bytes.length === 0) return new Uint8Array([]);\n\n const byteLength = bytes.length;\n\n const encoded: number[] = [];\n\n let i = 0;\n\n while(i < byteLength) {\n\n const byte = bytes[i]!;\n\n let j = 1;\n\n while (i + j < byteLength && byte === bytes[i + j] && j < 128) {\n j++;\n }\n\n if (j >= 3) {\n encoded.push(256 - (j - 1));\n encoded.push(byte);\n i += j;\n continue;\n }\n\n while (i + j < byteLength && j < 128) {\n\n const pos = i + j;\n\n const _byte = bytes[pos]!;\n\n if (bytes[pos - 1] === _byte && _byte === bytes[pos + 1]) {\n j--;\n break;\n }\n\n j++;\n }\n\n encoded.push(j - 1);\n\n for (let k = i; k < i + j; k++) {\n encoded.push(bytes[k]!);\n }\n\n i += j;\n }\n\n return new Uint8Array(encoded);\n }\n \n public override decode(runLength: Uint8Array): Uint8Array {\n\n const decoded: number[] = [];\n\n const byteLength = runLength.length;\n\n let i = 0;\n\n while(i < byteLength) {\n\n const header = runLength[i]!;\n\n if (header === 0x80) continue;\n\n if (0 <= header && header <= 0x7F) {\n \n const end = i + header + 2;\n\n for (let j = i + 1; j < end; j++) {\n\n const byte = runLength[j];\n\n if (byte === undefined)\n throw new KastenRunLengthDecodeError('Invalid PackBits encoding');\n\n decoded.push(byte);\n }\n\n i = end;\n continue;\n }\n\n if (0x81 <= header && header <= 0xFF) {\n\n const count = 0x101 - header;\n\n const byte = runLength[i + 1];\n\n if (byte === undefined)\n throw new KastenRunLengthDecodeError('Invalid PackBits encoding');\n\n for (let j = 0; j < count; j++) {\n decoded.push(byte); \n }\n\n i += 2;\n continue;\n }\n }\n\n return new Uint8Array(decoded);\n }\n}","import { RunLength } from '@/run-length';\nimport { KastenRunLengthDecodeError } from '@/run-length/errors';\n\nexport class Pdf extends RunLength {\n \n public override encode(bytes: Uint8Array): Uint8Array {\n\n if (bytes.length === 0) return new Uint8Array([]);\n\n const byteLength = bytes.length;\n\n const encoded: number[] = [];\n\n let i = 0;\n\n while(i < byteLength) {\n\n const byte = bytes[i]!;\n\n let j = 1;\n\n while (i + j < byteLength && byte === bytes[i + j] && j < 128) {\n j++;\n }\n\n if (j >= 2) {\n encoded.push(257 - j);\n encoded.push(byte);\n i += j;\n continue;\n }\n\n while (i + j < byteLength && j < 128) {\n\n const pos = i + j;\n\n const _byte = bytes[pos]!;\n\n if (bytes[pos - 1] === _byte && _byte === bytes[pos + 1]) {\n j--;\n break;\n }\n\n j++;\n }\n\n encoded.push(j - 1);\n\n for (let k = i; k < i + j; k++) {\n encoded.push(bytes[k]!);\n }\n\n i += j;\n }\n\n return new Uint8Array(encoded);\n }\n\n public override decode(runLength: Uint8Array): Uint8Array {\n\n const decoded: number[] = [];\n \n const byteLength = runLength.length;\n\n let i = 0;\n\n while(i < byteLength) {\n\n const header = runLength[i]!;\n\n if (header === 0x80) continue;\n\n if (0 <= header && header <= 0x7F) {\n \n const end = i + header + 2;\n\n for (let j = i + 1; j < end; j++) {\n\n const byte = runLength[j];\n\n if (byte === undefined)\n throw new KastenRunLengthDecodeError('Invalid PackBits encoding');\n\n decoded.push(byte);\n }\n\n i = end;\n continue;\n }\n\n if (0x81 <= header && header <= 0xFF) {\n\n const count = 0x101 - header;\n\n const byte = runLength[i + 1];\n\n if (byte === undefined)\n throw new KastenRunLengthDecodeError('Invalid PackBits encoding');\n\n for (let j = 0; j < count; j++) {\n decoded.push(byte); \n }\n\n i += 2;\n continue;\n }\n }\n\n return new Uint8Array(decoded);\n }\n}","import type { Base16, Base16Category } from '@/base16';\nimport type { Base32, Base32Category } from '@/base32';\nimport type { Base64, Base64Category } from '@/base64';\nimport type { RunLength, RunLengthCatgory } from '@/run-length';\nimport { RFC4648Base16 } from '@/base16/rfc4648/rfc4648';\nimport { RFC4648Base32 } from '@/base32/rfc4648/rfc4648';\nimport { RFC4648Base32Hex } from '@/base32/rfc4648/rfc4648hex';\nimport { RFC2045Base64 } from '@/base64/rfc2045/rfc2045';\nimport { RFC4648Base64 } from '@/base64/rfc4648/rfc4648';\nimport { RFC4648Base64URL } from '@/base64/rfc4648/rfc4648url';\nimport { BasicRunLength } from '@/run-length/basic/basic-run-length';\nimport { PackBits } from '@/run-length/pack-bits/pack-bits';\nimport { Pdf } from '@/run-length/pdf/pdf';\n\n/**\n * Entry point of the Kasten library.\n * All encoding/decoding feature implementations are created through this class.\n *\n * @example\n * const base64 = Kasten.base64('rfc4648');\n * const encoded = base64.encode(data);\n *\n * @example\n * const base32 = Kasten.base32('rfc464hex');\n * const decoded = base32.decode(text);\n *\n * @example\n * const base16 = Kasten.base16();\n *\n * @example\n * const runLength = Kasten.runLength('pack-bits');\n */\nclass Kasten {\n\n private constructor() {}\n\n /**\n * Creates Base 64 codec instance.\n * @param category Base 64 category.\n */\n public static base64 = (category?: Base64Category): Base64 => {\n\n switch(category) {\n case 'rfc4648-url':\n return new RFC4648Base64URL();\n case 'rfc2025':\n return new RFC2045Base64();\n case 'rfc4648':\n default:\n return new RFC4648Base64();\n }\n }\n\n /**\n * Creates Base 32 codec instance.\n * @param category Base 32 category.\n */\n public static base32 = (category?: Base32Category): Base32 => {\n\n switch(category) {\n case 'rfc468-hex':\n return new RFC4648Base32Hex();\n case 'rfc4648':\n default:\n return new RFC4648Base32();\n }\n }\n\n /**\n * Create Base 16 codec instance.\n */\n public static base16 = (category?: Base16Category): Base16 => {\n\n switch(category) {\n case 'rfc4648':\n default:\n return new RFC4648Base16();\n }\n }\n\n /**\n * Creates Run-Length codec instance.\n */\n public static runLength = (category?: RunLengthCatgory): RunLength => {\n\n switch(category) {\n case 'pack-bits':\n return new PackBits();\n case 'pdf':\n return new Pdf();\n case 'basic':\n default:\n return new BasicRunLength();\n }\n }\n}\n\nexport {\n Kasten,\n type Base64,\n type Base64Category as Base64Catgory,\n type Base32,\n type Base32Category,\n type Base16,\n type Base16Category,\n type RunLength,\n type RunLengthCatgory\n}"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/base16/index.ts","../src/utils/char-codes.ts","../src/errors.ts","../src/base16/errors.ts","../src/base16/rfc4648/rfc4648.ts","../src/base16/ascii/ascii.ts","../src/base32/index.ts","../src/base32/errors.ts","../src/base32/rfc4648/rfc4648.ts","../src/base32/rfc4648/rfc4648hex.ts","../src/base64/index.ts","../src/base64/errors.ts","../src/base64/rfc2045/rfc2045.ts","../src/base64/rfc4648/rfc4648.ts","../src/base64/rfc4648/rfc4648url.ts","../src/run-length/index.ts","../src/run-length/basic/basic-run-length.ts","../src/run-length/errors.ts","../src/run-length/pack-bits/pack-bits.ts","../src/run-length/pdf/pdf.ts","../src/kasten.ts"],"sourcesContent":["export const Base16Categories = ['rfc4648', 'ascii'] as const;\n\nexport type Base16Category = typeof Base16Categories[number];\n\n/**\n * Base16 codec.\n */\nexport abstract class Base16 {\n\n /**\n * Encodes bytes to Base16 string.\n * @param bytes Bytes to be encoded.\n */\n public abstract encode(bytes: Uint8Array): string;\n\n /**\n * Decodes Base16 string to bytes.\n * @param base16 Base16 string to be decoded.\n */\n public abstract decode(base16: string): Uint8Array;\n}","export class CharCodes {\n\n public static HT = 9;\n \n public static LF = 10;\n \n public static VT = 11;\n \n public static FF = 12;\n \n public static CR = 13;\n \n public static SP = 32;\n\n private constructor() {}\n\n public static isWhitespace = (c: string | number) => {\n\n const type = typeof c;\n\n if (type !== 'string' && type !== 'number')\n throw new Error('invalid argument type.');\n\n if (type === 'string' && (c as string).length !== 1)\n throw new Error('inalid argument: not a character');\n\n const code = typeof c === 'string'\n ? c.charCodeAt(0)\n : c as number;\n\n return (this.HT <= code && code <= this.CR) || code === this.SP;\n }\n}","export class KastenError extends Error {}","import { KastenError } from '@/errors';\n\nexport class KastenBase16Error extends KastenError {}\n\nexport class KastenBase16EncodeError extends KastenBase16Error {}\n\nexport class KastenBase16DecodeError extends KastenBase16Error {}","import { Base16 } from '@/base16';\nimport { CharCodes } from '@/utils/char-codes';\nimport { KastenBase16DecodeError } from '../errors';\n\n/**\n * RFC 4648 Base 16 encoding.\n */\nexport class RFC4648Base16 extends Base16 {\n\n private static readonly textDecoder = new TextDecoder();\n\n private static readonly TABLE = '0123456789ABCDEF';\n\n private static readonly ENCODED_TABLE = new Uint8Array(\n [...this.TABLE].map(c => c.charCodeAt(0))\n );\n\n private static readonly DECODED_TABLE = new Uint8Array(256);\n\n static {\n this.DECODED_TABLE.fill(255);\n\n for (let i = 0; i < this.TABLE.length; i++) {\n this.DECODED_TABLE[this.TABLE.charCodeAt(i)] = i;\n }\n }\n\n public override encode(bytes: Uint8Array): string {\n\n const ENCODED_TABLE = RFC4648Base16.ENCODED_TABLE;\n\n const chars = new Uint8Array(bytes.length * 2);\n\n let charCount = 0;\n\n for (const byte of bytes) {\n \n const ci1 = (byte & 0xF0) >> 4;\n const ci2 = byte & 0x0F;\n\n const c1 = ENCODED_TABLE[ci1]!;\n const c2 = ENCODED_TABLE[ci2]!;\n\n chars[charCount++] = c1;\n chars[charCount++] = c2;\n }\n\n return RFC4648Base16.textDecoder.decode(chars);\n }\n \n public override decode(base16: string): Uint8Array {\n\n const DECODED_TABLE = RFC4648Base16.DECODED_TABLE;\n\n const upper = base16.toUpperCase();\n const chars = new Uint8Array(base16.length);\n\n let charCount = 0;\n\n for (let i = 0; i < base16.length; i++) {\n const c = upper.charCodeAt(i);\n\n if (CharCodes.isWhitespace(c))\n continue;\n\n if (!DECODED_TABLE[c] || DECODED_TABLE[c] == 255)\n throw new KastenBase16DecodeError(`Invalid Base16 character: ${base16.charAt(i)}`);\n\n chars[charCount++] = c;\n }\n\n if (charCount % 2 !== 0)\n throw new KastenBase16DecodeError('Invalid Base16');\n\n const bytes = new Uint8Array(Math.ceil(base16.length / 2));\n\n let byteCount = 0;\n\n for (let i = 0; i < charCount; i += 2) {\n \n const c1 = chars[i]!;\n const c2 = chars[i + 1]!;\n\n const ci1 = DECODED_TABLE[c1]!;\n const ci2 = DECODED_TABLE[c2]!;\n\n const byte = ((ci1 & 0x0F) << 4) | (ci2 & 0x0F);\n\n bytes[byteCount++] = byte;\n }\n\n return bytes.subarray(0, byteCount);\n }\n}","import { Base16 } from '@/base16';\nimport { CharCodes } from '@/utils/char-codes';\nimport { KastenBase16DecodeError } from '@/base16/errors';\n\n/**\n * AsciiHexDecode codec of PDF1.7\n */\nexport class AsciiHexDecode extends Base16 {\n \n public override encode(bytes: Uint8Array): string {\n\n if (bytes.length === 0) return '>';\n\n const chars: string[] = [];\n\n for (const byte of bytes) {\n const char = byte.toString(16).padStart(2, '0');\n chars.push(char);\n }\n\n chars.push('>');\n\n return chars.join('');\n }\n\n public override decode(base16: string): Uint8Array {\n\n const chars: string[] = [];\n\n for (const c of base16) {\n\n if (c === '>') break;\n \n if (CharCodes.isWhitespace(c)) continue;\n \n const code = c.charCodeAt(0);\n \n if (!(48 <= code && code <= 57) && !(65 <= code && code <= 70) && !(97<= code && code <= 102))\n throw new KastenBase16DecodeError(`invalid char: ${c}`);\n\n chars.push(c);\n }\n\n if (chars.length % 2 !== 0) chars.push('0');\n\n const strLength = chars.length;\n\n const bytes = new Uint8Array(Math.ceil(strLength / 2));\n\n let byteCount = 0;\n\n for (let i = 0, j = 0; i < strLength; i += 2, j++) {\n \n const hex = chars[i]! + chars[i + 1]!;\n\n const byte = Number.parseInt(hex, 16);\n\n bytes[byteCount++] = byte;\n }\n\n return bytes.subarray(0, byteCount);\n }\n}","export type Base32Category = typeof Base32Categories[number];\n\nexport const Base32Categories = ['rfc4648', 'rfc468-hex'] as const;\n\n/**\n * Base32 codec.\n */\nexport abstract class Base32 {\n\n protected static readonly textDecoder = new TextDecoder();\n\n /**\n * Encodes bytes to Base32 string\n * @param bytes Bytes to be encoded.\n */\n public abstract encode(bytes: Uint8Array): string;\n\n /**\n * Decodes Base32 string to bytes.\n * @param base32 Base32 string to be decoded.\n */\n public abstract decode(base32: string): Uint8Array;\n}","import { KastenError } from '@/errors';\n\nexport class KastenBase32Error extends KastenError {}\n\nexport class KastenBase32EncodeError extends KastenBase32Error {}\n\nexport class KastenBase32DecodeError extends KastenBase32Error {}","import { Base32 } from '@/base32';\nimport { CharCodes } from '@/utils/char-codes';\nimport { KastenBase32DecodeError } from '@/base32/errors';\n\nexport class RFC4648Base32 extends Base32 {\n\n private static readonly PADDING_CHAR_CODE: number = '='.charCodeAt(0);\n\n private static readonly TABLE: string\n = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567';\n\n private static readonly ENCODED_TABLE = new Uint8Array(\n [...this.TABLE].map(c => c.charCodeAt(0))\n );\n\n private static readonly DECODED_TABLE = new Uint8Array(256);\n\n static {\n this.DECODED_TABLE.fill(255);\n\n for (let i = 0; i < this.TABLE.length; i++) {\n this.DECODED_TABLE[this.TABLE.charCodeAt(i)] = i;\n }\n }\n\n public override encode(bytes: Uint8Array): string {\n\n const ENCODED_TABLE = RFC4648Base32.ENCODED_TABLE;\n\n const chars = new Uint8Array(Math.ceil(bytes.length / 5) * 8);\n\n let count = 0;\n\n for (let i = 0; i < bytes.length; i += 5) {\n\n const b1 = bytes[i]!;\n const b2 = bytes[i + 1] ?? 0;\n const b3 = bytes[i + 2] ?? 0;\n const b4 = bytes[i + 3] ?? 0;\n const b5 = bytes[i + 4] ?? 0;\n\n const ci1 = (b1 & 0xFF) >> 3;\n const ci2 = ((b1 & 0x07) << 2) | ((b2 & 0xC0) >> 6);\n const ci3 = (b2 & 0x3E) >> 1;\n const ci4 = ((b2 & 0x01) << 4) | ((b3 & 0xF0) >> 4);\n const ci5 = ((b3 & 0x0F) << 1) | ((b4 & 0x80) >> 7);\n const ci6 = (b4 & 0x7C) >> 2;\n const ci7 = ((b4 & 0x03) << 3) | ((b5 & 0xE0) >> 5);\n const ci8 = b5 & 0x1F;\n\n const c1 = ENCODED_TABLE[ci1]!;\n const c2 = ENCODED_TABLE[ci2]!;\n const c3 = ENCODED_TABLE[ci3]!;\n const c4 = ENCODED_TABLE[ci4]!;\n const c5 = ENCODED_TABLE[ci5]!;\n const c6 = ENCODED_TABLE[ci6]!;\n const c7 = ENCODED_TABLE[ci7]!;\n const c8 = ENCODED_TABLE[ci8]!;\n\n chars[count++] = c1;\n chars[count++] = c2;\n chars[count++] = c3;\n chars[count++] = c4;\n chars[count++] = c5;\n chars[count++] = c6;\n chars[count++] = c7;\n chars[count++] = c8;\n }\n\n const remain = bytes.length % 5;\n\n const padding =\n remain === 4 ? 1 :\n remain === 3 ? 3 :\n remain === 2 ? 4 :\n remain === 1 ? 6 : 0;\n\n for (let i = padding; i > 0; i--) {\n chars[count - i] = RFC4648Base32.PADDING_CHAR_CODE;\n }\n\n return Base32.textDecoder.decode(chars.subarray(0, count));\n }\n \n public override decode(base32: string): Uint8Array {\n\n const upper = base32.toUpperCase();\n\n const DECODED_TABLE = RFC4648Base32.DECODED_TABLE;\n const PADDING = RFC4648Base32.PADDING_CHAR_CODE;\n\n const chars = new Uint8Array(base32.length);\n\n let charCount = 0;\n\n for (let i = 0; i < base32.length; i++) {\n\n const c = upper.charCodeAt(i);\n\n if (!CharCodes.isWhitespace(c)) {\n\n chars[charCount++] = c;\n }\n }\n\n if (charCount % 8 !== 0)\n throw new KastenBase32DecodeError('Invalid length string.');\n\n let firstPad = -1;\n\n for (let i = 0; i < charCount; i++) {\n if (chars[i] === PADDING) {\n firstPad = i;\n break;\n }\n }\n\n let padCount = 0;\n\n if (firstPad !== -1) {\n\n if (firstPad < charCount - 6)\n throw new KastenBase32DecodeError('Invalid padding position.');\n\n for (let i = firstPad; i < charCount; i++) {\n if (chars[i] !== PADDING) {\n throw new KastenBase32DecodeError('Invalid padding');\n }\n }\n\n padCount = charCount - firstPad;\n\n if (padCount !== 1 && padCount !== 3 && padCount !== 4 && padCount !== 6) {\n throw new KastenBase32DecodeError('Invalid padding');\n }\n }\n\n const bytes = new Uint8Array(Math.floor(((charCount - padCount) * 5) / 8));\n\n let byteCount = 0;\n\n for (let i = 0; i < charCount; i += 8) {\n\n const c1 = chars[i]!;\n const c2 = chars[i + 1]!;\n const c3 = chars[i + 2]!;\n const c4 = chars[i + 3]!;\n const c5 = chars[i + 4]!;\n const c6 = chars[i + 5]!;\n const c7 = chars[i + 6]!;\n const c8 = chars[i + 7]!;\n\n const ci1 = DECODED_TABLE[c1]!;\n const ci2 = DECODED_TABLE[c2]!;\n const ci3 = c3 !== PADDING ? DECODED_TABLE[c3]! : 0;\n const ci4 = c4 !== PADDING ? DECODED_TABLE[c4]! : 0;\n const ci5 = c5 !== PADDING ? DECODED_TABLE[c5]! : 0;\n const ci6 = c6 !== PADDING ? DECODED_TABLE[c6]! : 0;\n const ci7 = c7 !== PADDING ? DECODED_TABLE[c7]! : 0;\n const ci8 = c8 !== PADDING ? DECODED_TABLE[c8]! : 0;\n\n if (ci1 === 255 ||\n ci2 === 255 ||\n ci3 === 255 ||\n ci4 === 255 ||\n ci5 === 255 ||\n ci6 === 255 ||\n ci7 === 255 ||\n ci8 === 255) {\n\n throw new KastenBase32DecodeError('Invalid Base32');\n }\n\n const b1 = ((ci1 & 0x1F) << 3) | ((ci2 & 0x1C) >> 2);\n const b2 = ((ci2 & 0x03) << 6) | ((ci3 & 0x1F) << 1) | ((ci4 & 0x10) >> 4);\n const b3 = ((ci4 & 0x0F) << 4) | ((ci5 & 0x1E) >> 1);\n const b4 = ((ci5 & 0x01) << 7) | ((ci6 & 0x1F) << 2) | ((ci7 & 0x18) >> 3);\n const b5 = ((ci7 & 0x07) << 5) | (ci8 & 0x1F);\n\n bytes[byteCount++] = b1;\n\n if (byteCount < bytes.length)\n bytes[byteCount++] = b2;\n\n if (byteCount < bytes.length)\n bytes[byteCount++] = b3;\n\n if (byteCount < bytes.length && c5 !== PADDING)\n bytes[byteCount++] = b4;\n\n if (byteCount < bytes.length && c7 != PADDING)\n bytes[byteCount++] = b5;\n }\n\n return bytes.subarray(0, byteCount);\n }\n}","import { Base32 } from '@/base32';\nimport { CharCodes } from '@/utils/char-codes';\nimport { KastenBase32DecodeError } from '@/base32/errors';\n\nexport class RFC4648Base32Hex extends Base32 {\n\n private static readonly PADDING_CHAR_CODE: number = '='.charCodeAt(0);\n\n private static readonly TABLE: string\n = '0123456789ABCDEFGHIJKLMNOPQRSTUV';\n\n private static readonly ENCODED_TABLE = new Uint8Array(\n [...this.TABLE].map(c => c.charCodeAt(0))\n );\n\n private static readonly DECODED_TABLE = new Uint8Array(256);\n\n static {\n this.DECODED_TABLE.fill(255);\n\n for (let i = 0; i < this.TABLE.length; i++) {\n this.DECODED_TABLE[this.TABLE.charCodeAt(i)] = i;\n }\n }\n\n public override encode(bytes: Uint8Array): string {\n\n const ENCODED_TABLE = RFC4648Base32Hex.ENCODED_TABLE;\n\n const chars = new Uint8Array(Math.ceil(bytes.length / 5) * 8);\n\n let count = 0;\n\n for (let i = 0; i < bytes.length; i += 5) {\n\n const b1 = bytes[i]!;\n const b2 = bytes[i + 1] ?? 0;\n const b3 = bytes[i + 2] ?? 0;\n const b4 = bytes[i + 3] ?? 0;\n const b5 = bytes[i + 4] ?? 0;\n\n const ci1 = (b1 & 0xFF) >> 3;\n const ci2 = ((b1 & 0x07) << 2) | ((b2 & 0xC0) >> 6);\n const ci3 = (b2 & 0x3E) >> 1;\n const ci4 = ((b2 & 0x01) << 4) | ((b3 & 0xF0) >> 4);\n const ci5 = ((b3 & 0x0F) << 1) | ((b4 & 0x80) >> 7);\n const ci6 = (b4 & 0x7C) >> 2;\n const ci7 = ((b4 & 0x03) << 3) | ((b5 & 0xE0) >> 5);\n const ci8 = b5 & 0x1F;\n\n const c1 = ENCODED_TABLE[ci1]!;\n const c2 = ENCODED_TABLE[ci2]!;\n const c3 = ENCODED_TABLE[ci3]!;\n const c4 = ENCODED_TABLE[ci4]!;\n const c5 = ENCODED_TABLE[ci5]!;\n const c6 = ENCODED_TABLE[ci6]!;\n const c7 = ENCODED_TABLE[ci7]!;\n const c8 = ENCODED_TABLE[ci8]!;\n\n chars[count++] = c1;\n chars[count++] = c2;\n chars[count++] = c3;\n chars[count++] = c4;\n chars[count++] = c5;\n chars[count++] = c6;\n chars[count++] = c7;\n chars[count++] = c8;\n }\n\n const remain = bytes.length % 5;\n\n const padding =\n remain === 4 ? 1 :\n remain === 3 ? 3 :\n remain === 2 ? 4 :\n remain === 1 ? 6 : 0;\n\n for (let i = padding; i > 0; i--) {\n chars[count - i] = RFC4648Base32Hex.PADDING_CHAR_CODE;\n }\n\n return Base32.textDecoder.decode(chars.subarray(0, count));\n }\n \n public override decode(base32: string): Uint8Array {\n\n const upper = base32.toUpperCase();\n\n const DECODED_TABLE = RFC4648Base32Hex.DECODED_TABLE;\n const PADDING = RFC4648Base32Hex.PADDING_CHAR_CODE;\n\n const chars = new Uint8Array(base32.length);\n\n let charCount = 0;\n\n for (let i = 0; i < base32.length; i++) {\n\n const c = upper.charCodeAt(i);\n\n if (!CharCodes.isWhitespace(c)) {\n\n chars[charCount++] = c;\n }\n }\n\n if (charCount % 8 !== 0)\n throw new KastenBase32DecodeError('Invalid length string.');\n\n let firstPad = -1;\n\n for (let i = 0; i < charCount; i++) {\n if (chars[i] === PADDING) {\n firstPad = i;\n break;\n }\n }\n\n let padCount = 0;\n\n if (firstPad !== -1) {\n\n if (firstPad < charCount - 6)\n throw new KastenBase32DecodeError('Invalid padding position.');\n\n for (let i = firstPad; i < charCount; i++) {\n if (chars[i] !== PADDING) {\n throw new KastenBase32DecodeError('Invalid padding');\n }\n }\n\n padCount = charCount - firstPad;\n\n if (padCount !== 1 && padCount !== 3 && padCount !== 4 && padCount !== 6) {\n throw new KastenBase32DecodeError('Invalid padding');\n }\n }\n\n const bytes = new Uint8Array(Math.floor(((charCount - padCount) * 5) / 8));\n\n let byteCount = 0;\n\n for (let i = 0; i < charCount; i += 8) {\n\n const c1 = chars[i]!;\n const c2 = chars[i + 1]!;\n const c3 = chars[i + 2]!;\n const c4 = chars[i + 3]!;\n const c5 = chars[i + 4]!;\n const c6 = chars[i + 5]!;\n const c7 = chars[i + 6]!;\n const c8 = chars[i + 7]!;\n\n const ci1 = DECODED_TABLE[c1]!;\n const ci2 = DECODED_TABLE[c2]!;\n const ci3 = c3 !== PADDING ? DECODED_TABLE[c3]! : 0;\n const ci4 = c4 !== PADDING ? DECODED_TABLE[c4]! : 0;\n const ci5 = c5 !== PADDING ? DECODED_TABLE[c5]! : 0;\n const ci6 = c6 !== PADDING ? DECODED_TABLE[c6]! : 0;\n const ci7 = c7 !== PADDING ? DECODED_TABLE[c7]! : 0;\n const ci8 = c8 !== PADDING ? DECODED_TABLE[c8]! : 0;\n\n if (ci1 === 255 ||\n ci2 === 255 ||\n ci3 === 255 ||\n ci4 === 255 ||\n ci5 === 255 ||\n ci6 === 255 ||\n ci7 === 255 ||\n ci8 === 255) {\n\n throw new KastenBase32DecodeError('Invalid Base32');\n }\n\n const b1 = ((ci1 & 0x1F) << 3) | ((ci2 & 0x1C) >> 2);\n const b2 = ((ci2 & 0x03) << 6) | ((ci3 & 0x1F) << 1) | ((ci4 & 0x10) >> 4);\n const b3 = ((ci4 & 0x0F) << 4) | ((ci5 & 0x1E) >> 1);\n const b4 = ((ci5 & 0x01) << 7) | ((ci6 & 0x1F) << 2) | ((ci7 & 0x18) >> 3);\n const b5 = ((ci7 & 0x07) << 5) | (ci8 & 0x1F);\n\n bytes[byteCount++] = b1;\n\n if (byteCount < bytes.length)\n bytes[byteCount++] = b2;\n\n if (byteCount < bytes.length)\n bytes[byteCount++] = b3;\n\n if (byteCount < bytes.length && c5 !== PADDING)\n bytes[byteCount++] = b4;\n\n if (byteCount < bytes.length && c7 != PADDING)\n bytes[byteCount++] = b5;\n }\n\n return bytes.subarray(0, byteCount);\n }\n}","export type Base64Category = typeof Base64Categories[number];\n\nexport const Base64Categories = ['rfc4648', 'rfc4648-url', 'rfc2025'] as const;\n\n/**\n * Base64 codec.\n */\nexport abstract class Base64 {\n\n /**\n * Encodes byte array to string.\n */\n public abstract encode(bytes: Uint8Array): string;\n\n /**\n * Decodes string to byte array.\n * @param base64 Base64 string\n */\n public abstract decode(base64: string): Uint8Array;\n}","import { KastenError } from '@/errors';\n\n/**\n * Base error type of Base64.\n */\nexport class KastenBase64Error extends KastenError {}\n\n/**\n * Thrown when error occurs on Base64 encoding.\n */\nexport class KastenBase64EncodeError extends KastenBase64Error {};\n\n/**\n * Thrown when error occurs on Base64 decoding.\n */\nexport class KastenBase64DecodeError extends KastenBase64Error {};","import { Base64 } from '@/base64';\nimport { CharCodes } from '@/utils/char-codes';\nimport { KastenBase64DecodeError } from '@/base64/errors';\n\nexport class RFC2045Base64 extends Base64 {\n\n private static readonly PADDING_CHAR_CODE = '='.charCodeAt(0);\n\n private static readonly TABLE: string\n = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n private static readonly DECODE_TABLE = new Uint8Array(256);\n\n private static readonly ENCODE_TABLE = new Uint8Array(\n [...this.TABLE].map(c => c.charCodeAt(0))\n );\n\n private static readonly decoder = new TextDecoder();\n\n static {\n\n this.DECODE_TABLE.fill(255);\n\n for (let i = 0; i < this.TABLE.length; i++) {\n this.DECODE_TABLE[this.TABLE.charCodeAt(i)] = i;\n }\n }\n\n public override encode = (bytes: Uint8Array): string => {\n\n if (bytes.length === 0) return '';\n\n const ENCODE_TABLE = RFC2045Base64.ENCODE_TABLE;\n const { CR, LF } = CharCodes;\n\n const baseSize = Math.ceil(bytes.length / 3) * 4;\n const linebreaks = Math.floor((baseSize - 1) / 76);\n\n const chars = new Uint8Array(baseSize + linebreaks * 2);\n\n let ci = 0;\n\n let charCout = 0;\n\n for (let i = 0; i < bytes.length; i += 3) {\n\n const b1 = bytes[i]!;\n const b2 = bytes[i + 1] ?? 0;\n const b3 = bytes[i + 2] ?? 0;\n\n const c1 = b1 >> 2;\n const c2 = ((b1 & 0b00000011) << 4) | b2 >> 4;\n const c3 = ((b2 & 0b00001111) << 2) | b3 >> 6;\n const c4 = b3 & 0b00111111;\n\n chars[ci++] = ENCODE_TABLE[c1]!;\n chars[ci++] = ENCODE_TABLE[c2]!;\n chars[ci++] = ENCODE_TABLE[c3]!;\n chars[ci++] = ENCODE_TABLE[c4]!;\n\n charCout += 4;\n\n if (charCout === 76 && ci < chars.length) {\n charCout = 0;\n chars[ci++] = CR;\n chars[ci++] = LF;\n }\n }\n\n const remain = bytes.length % 3;\n\n if (remain === 1) {\n chars[ci - 2] = RFC2045Base64.PADDING_CHAR_CODE;\n chars[ci - 1] = RFC2045Base64.PADDING_CHAR_CODE;\n } else if (remain === 2) {\n chars[ci - 1] = RFC2045Base64.PADDING_CHAR_CODE;\n }\n\n return RFC2045Base64.decoder.decode(chars.subarray(0, ci));\n }\n \n public override decode = (base64: string): Uint8Array => {\n\n const DECODE_TABLE = RFC2045Base64.DECODE_TABLE;\n\n const line = new Uint8Array(base64.length);\n let lineCharCount = 0;\n\n for (let i = 0; i < base64.length; i++) {\n const c = base64.charCodeAt(i);\n if (c !== CharCodes.CR\n && c !== CharCodes.LF\n && c !== CharCodes.SP\n && c !== CharCodes.HT) {\n \n line[lineCharCount++] = c;\n }\n }\n\n if (lineCharCount % 4 !== 0)\n throw new KastenBase64DecodeError('Invalid length string');\n\n let firstPad = -1;\n\n for (let i = 0; i < lineCharCount; i++) {\n if (line[i] === RFC2045Base64.PADDING_CHAR_CODE) {\n firstPad = i;\n break;\n }\n }\n\n if (firstPad !== -1) {\n\n if (firstPad < lineCharCount - 2) {\n throw new KastenBase64DecodeError('Invalid padding position');\n }\n\n for (let i = firstPad; i < lineCharCount; i++) {\n if (line[i] !== RFC2045Base64.PADDING_CHAR_CODE) {\n throw new KastenBase64DecodeError('Invalid padding');\n }\n }\n\n const padCount = lineCharCount - firstPad;\n\n if (padCount !== 1 && padCount !== 2) {\n throw new KastenBase64DecodeError('Invalid padding');\n }\n }\n\n const lineLength = lineCharCount;\n\n const padding = \n line[lineLength - 1] === RFC2045Base64.PADDING_CHAR_CODE\n ? (line[lineLength - 2] === RFC2045Base64.PADDING_CHAR_CODE ? 2 : 1)\n : 0;\n\n const bytes = new Uint8Array((lineCharCount / 4) * 3 - padding);\n\n let writtenOffset = 0;\n\n for (let i = 0; i < lineCharCount; i += 4) {\n\n const code1 = line[i]!;\n const code2 = line[i + 1]!;\n const code3 = line[i + 2]!;\n const code4 = line[i + 3]!;\n\n const ci1 = DECODE_TABLE[code1]!;\n const ci2 = DECODE_TABLE[code2]!;\n const ci3 = code3 !== RFC2045Base64.PADDING_CHAR_CODE ? DECODE_TABLE[code3]! : 0;\n const ci4 = code4 !== RFC2045Base64.PADDING_CHAR_CODE ? DECODE_TABLE[code4]! : 0;\n\n if (ci1 === 255 ||\n ci2 === 255 ||\n (code3 !== RFC2045Base64.PADDING_CHAR_CODE && ci3 === 255) ||\n (code4 !== RFC2045Base64.PADDING_CHAR_CODE && ci4 === 255)) {\n\n throw new KastenBase64DecodeError(\"Invalid Base64\");\n }\n\n const b1 = (ci1 << 2) | (ci2 >> 4);\n const b2 = ((ci2 & 15) << 4) | (ci3 >> 2);\n const b3 = ((ci3 & 3) << 6) | ci4;\n\n bytes[writtenOffset++] = b1;\n \n if (code3 !== RFC2045Base64.PADDING_CHAR_CODE) {\n bytes[writtenOffset++] = b2;\n }\n\n if (code4 !== RFC2045Base64.PADDING_CHAR_CODE) {\n bytes[writtenOffset++] = b3;\n }\n }\n\n return bytes;\n }\n}","import { Base64 } from '@/base64';\nimport { KastenBase64DecodeError } from '@/base64/errors';\nimport { CharCodes } from '@/utils/char-codes';\n\nexport class RFC4648Base64 extends Base64 {\n\n private static readonly PADDING_CHAR_CODE = '='.charCodeAt(0);\n\n private static readonly TABLE: string\n = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n private static readonly DECODE_TABLE = new Uint8Array(256);\n\n private static readonly ENCODE_TABLE = new Uint8Array(\n [...this.TABLE].map(c => c.charCodeAt(0))\n );\n\n private static readonly decoder = new TextDecoder();\n\n static {\n\n this.DECODE_TABLE.fill(255);\n\n for (let i = 0; i < this.TABLE.length; i++) {\n this.DECODE_TABLE[this.TABLE.charCodeAt(i)] = i;\n }\n }\n\n public override encode = (bytes: Uint8Array): string => {\n\n if (bytes.length === 0) return '';\n\n const ENCODE_TABLE = RFC4648Base64.ENCODE_TABLE;\n\n const baseSize = Math.ceil(bytes.length / 3) * 4;\n const linebreaks = Math.floor((baseSize - 1) / 76);\n\n const chars = new Uint8Array(baseSize + linebreaks * 2);\n\n let ci = 0;\n\n for (let i = 0; i < bytes.length; i += 3) {\n\n const b1 = bytes[i]!;\n const b2 = bytes[i + 1] ?? 0;\n const b3 = bytes[i + 2] ?? 0;\n\n const c1 = b1 >> 2;\n const c2 = ((b1 & 0b00000011) << 4) | b2 >> 4;\n const c3 = ((b2 & 0b00001111) << 2) | b3 >> 6;\n const c4 = b3 & 0b00111111;\n\n chars[ci++] = ENCODE_TABLE[c1]!;\n chars[ci++] = ENCODE_TABLE[c2]!;\n chars[ci++] = ENCODE_TABLE[c3]!;\n chars[ci++] = ENCODE_TABLE[c4]!;\n }\n\n const remain = bytes.length % 3;\n\n if (remain === 1) {\n chars[ci - 2] = RFC4648Base64.PADDING_CHAR_CODE;\n chars[ci - 1] = RFC4648Base64.PADDING_CHAR_CODE;\n } else if (remain === 2) {\n chars[ci - 1] = RFC4648Base64.PADDING_CHAR_CODE;\n }\n\n return RFC4648Base64.decoder.decode(chars.subarray(0, ci));\n }\n \n public override decode = (base64: string): Uint8Array => {\n\n const DECODE_TABLE = RFC4648Base64.DECODE_TABLE;\n\n const line = new Uint8Array(base64.length);\n let lineCharCount = 0;\n\n for (let i = 0; i < base64.length; i++) {\n const c = base64.charCodeAt(i);\n if (!CharCodes.isWhitespace(c)) {\n \n line[lineCharCount++] = c;\n }\n }\n\n if (lineCharCount % 4 !== 0)\n throw new KastenBase64DecodeError('Invalid length string');\n\n let firstPad = -1;\n\n for (let i = 0; i < lineCharCount; i++) {\n if (line[i] === RFC4648Base64.PADDING_CHAR_CODE) {\n firstPad = i;\n break;\n }\n }\n\n if (firstPad !== -1) {\n\n if (firstPad < lineCharCount - 2) {\n throw new KastenBase64DecodeError('Invalid padding position');\n }\n\n for (let i = firstPad; i < lineCharCount; i++) {\n if (line[i] !== RFC4648Base64.PADDING_CHAR_CODE) {\n throw new KastenBase64DecodeError('Invalid padding');\n }\n }\n\n const padCount = lineCharCount - firstPad;\n\n if (padCount !== 1 && padCount !== 2) {\n throw new KastenBase64DecodeError('Invalid padding');\n }\n }\n\n const lineLength = lineCharCount;\n\n const padding = \n line[lineLength - 1] === RFC4648Base64.PADDING_CHAR_CODE\n ? (line[lineLength - 2] === RFC4648Base64.PADDING_CHAR_CODE ? 2 : 1)\n : 0;\n\n const bytes = new Uint8Array((lineCharCount / 4) * 3 - padding);\n\n let writtenOffset = 0;\n\n for (let i = 0; i < lineCharCount; i += 4) {\n\n const code1 = line[i]!;\n const code2 = line[i + 1]!;\n const code3 = line[i + 2]!;\n const code4 = line[i + 3]!;\n\n const ci1 = DECODE_TABLE[code1]!;\n const ci2 = DECODE_TABLE[code2]!;\n const ci3 = code3 !== RFC4648Base64.PADDING_CHAR_CODE ? DECODE_TABLE[code3]! : 0;\n const ci4 = code4 !== RFC4648Base64.PADDING_CHAR_CODE ? DECODE_TABLE[code4]! : 0;\n\n if (ci1 === 255 ||\n ci2 === 255 ||\n (code3 !== RFC4648Base64.PADDING_CHAR_CODE && ci3 === 255) ||\n (code4 !== RFC4648Base64.PADDING_CHAR_CODE && ci4 === 255)) {\n\n throw new KastenBase64DecodeError(\"Invalid Base64\");\n }\n\n const b1 = (ci1 << 2) | (ci2 >> 4);\n const b2 = ((ci2 & 15) << 4) | (ci3 >> 2);\n const b3 = ((ci3 & 3) << 6) | ci4;\n\n bytes[writtenOffset++] = b1;\n \n if (code3 !== RFC4648Base64.PADDING_CHAR_CODE) {\n bytes[writtenOffset++] = b2;\n }\n\n if (code4 !== RFC4648Base64.PADDING_CHAR_CODE) {\n bytes[writtenOffset++] = b3;\n }\n }\n\n return bytes;\n }\n}","import { CharCodes } from '@/utils/char-codes';\nimport { KastenBase64DecodeError } from '@/base64/errors';\nimport { Base64 } from '@/base64';\n\nexport class RFC4648Base64URL extends Base64 {\n \n private static readonly PADDING_CHAR_CODE = '='.charCodeAt(0);\n\n private static readonly TABLE: string\n = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';\n\n private static readonly DECODE_TABLE = new Uint8Array(256);\n\n private static readonly ENCODE_TABLE = new Uint8Array(\n [...this.TABLE].map(c => c.charCodeAt(0))\n );\n\n private static readonly decoder = new TextDecoder();\n\n static {\n \n this.DECODE_TABLE.fill(255);\n\n for (let i = 0; i < this.TABLE.length; i++) {\n this.DECODE_TABLE[this.TABLE.charCodeAt(i)] = i;\n }\n }\n\n public override encode = (bytes: Uint8Array): string => {\n\n if (bytes.length === 0) return '';\n\n const ENCODE_TABLE = RFC4648Base64URL.ENCODE_TABLE;\n\n const baseSize = Math.ceil(bytes.length / 3) * 4;\n const linebreaks = Math.floor((baseSize - 1) / 76);\n\n const chars = new Uint8Array(baseSize + linebreaks * 2);\n\n let ci = 0;\n\n for (let i = 0; i < bytes.length; i += 3) {\n\n const b1 = bytes[i]!;\n const b2 = bytes[i + 1] ?? 0;\n const b3 = bytes[i + 2] ?? 0;\n\n const c1 = b1 >> 2;\n const c2 = ((b1 & 0b00000011) << 4) | b2 >> 4;\n const c3 = ((b2 & 0b00001111) << 2) | b3 >> 6;\n const c4 = b3 & 0b00111111;\n\n chars[ci++] = ENCODE_TABLE[c1]!;\n chars[ci++] = ENCODE_TABLE[c2]!;\n chars[ci++] = ENCODE_TABLE[c3]!;\n chars[ci++] = ENCODE_TABLE[c4]!;\n }\n\n const remain = bytes.length % 3;\n\n if (remain === 1) {\n chars[ci - 2] = RFC4648Base64URL.PADDING_CHAR_CODE;\n chars[ci - 1] = RFC4648Base64URL.PADDING_CHAR_CODE;\n } else if (remain === 2) {\n chars[ci - 1] = RFC4648Base64URL.PADDING_CHAR_CODE;\n }\n\n return RFC4648Base64URL.decoder.decode(chars.subarray(0, ci));\n }\n \n public override decode = (base64: string): Uint8Array => {\n\n const DECODE_TABLE = RFC4648Base64URL.DECODE_TABLE;\n\n const line = new Uint8Array(base64.length);\n let lineCharCount = 0;\n\n for (let i = 0; i < base64.length; i++) {\n const c = base64.charCodeAt(i);\n if (!CharCodes.isWhitespace(c)) {\n \n line[lineCharCount++] = c;\n }\n }\n\n if (lineCharCount % 4 !== 0)\n throw new KastenBase64DecodeError('Invalid length string');\n\n let firstPad = -1;\n\n for (let i = 0; i < lineCharCount; i++) {\n if (line[i] === RFC4648Base64URL.PADDING_CHAR_CODE) {\n firstPad = i;\n break;\n }\n }\n\n if (firstPad !== -1) {\n\n if (firstPad < lineCharCount - 2) {\n throw new KastenBase64DecodeError('Invalid padding position');\n }\n\n for (let i = firstPad; i < lineCharCount; i++) {\n if (line[i] !== RFC4648Base64URL.PADDING_CHAR_CODE) {\n throw new KastenBase64DecodeError('Invalid padding');\n }\n }\n\n const padCount = lineCharCount - firstPad;\n\n if (padCount !== 1 && padCount !== 2) {\n throw new KastenBase64DecodeError('Invalid padding');\n }\n }\n\n const lineLength = lineCharCount;\n\n const padding = \n line[lineLength - 1] === RFC4648Base64URL.PADDING_CHAR_CODE\n ? (line[lineLength - 2] === RFC4648Base64URL.PADDING_CHAR_CODE ? 2 : 1)\n : 0;\n\n const bytes = new Uint8Array((lineCharCount / 4) * 3 - padding);\n\n let writtenOffset = 0;\n\n for (let i = 0; i < lineCharCount; i += 4) {\n\n const code1 = line[i]!;\n const code2 = line[i + 1]!;\n const code3 = line[i + 2]!;\n const code4 = line[i + 3]!;\n\n const ci1 = DECODE_TABLE[code1]!;\n const ci2 = DECODE_TABLE[code2]!;\n const ci3 = code3 !== RFC4648Base64URL.PADDING_CHAR_CODE ? DECODE_TABLE[code3]! : 0;\n const ci4 = code4 !== RFC4648Base64URL.PADDING_CHAR_CODE ? DECODE_TABLE[code4]! : 0;\n\n if (ci1 === 255 ||\n ci2 === 255 ||\n (code3 !== RFC4648Base64URL.PADDING_CHAR_CODE && ci3 === 255) ||\n (code4 !== RFC4648Base64URL.PADDING_CHAR_CODE && ci4 === 255)) {\n\n throw new KastenBase64DecodeError(\"Invalid Base64\");\n }\n\n const b1 = (ci1 << 2) | (ci2 >> 4);\n const b2 = ((ci2 & 15) << 4) | (ci3 >> 2);\n const b3 = ((ci3 & 3) << 6) | ci4;\n\n bytes[writtenOffset++] = b1;\n \n if (code3 !== RFC4648Base64URL.PADDING_CHAR_CODE) {\n bytes[writtenOffset++] = b2;\n }\n\n if (code4 !== RFC4648Base64URL.PADDING_CHAR_CODE) {\n bytes[writtenOffset++] = b3;\n }\n }\n\n return bytes;\n }\n}","export const RunLengthCatgories = ['basic', 'pack-bits', 'pdf'] as const;\n\nexport type RunLengthCatgory = typeof RunLengthCatgories[number];\n\n/**\n * Run-Length encoding and decoding.\n */\nexport abstract class RunLength {\n\n /**\n * Encodes bytes to Run-Length encoded bytes.\n * @param bytes \n */\n public abstract encode(bytes: Uint8Array): Uint8Array;\n\n /**\n * Decodes Run-Length encoded bytes to original bytes.\n * @param runLength \n */\n public abstract decode(runLength: Uint8Array): Uint8Array;\n}","import { RunLength } from '@/run-length';\n\n/**\n * Basic Run-Length codec.\n */\nexport class BasicRunLength extends RunLength {\n \n public override encode(bytes: Uint8Array): Uint8Array {\n\n const encoded = new Uint8Array(bytes.length * 2);\n\n let byteCount = 0;\n\n let prev: number | null = null;\n\n let count = 0;\n\n for(let i = 0; i < bytes.length; i++) {\n\n const byte = bytes[i]!;\n\n if (prev === null) {\n prev = byte;\n count = 1;\n continue;\n }\n\n if (prev === byte) {\n\n if (count < 255) {\n count++;\n continue;\n }\n }\n\n encoded[byteCount++] = count;\n encoded[byteCount++] = prev;\n\n prev = byte;\n count = 1;\n }\n\n if (prev !== null) {\n encoded[byteCount++] = count;\n encoded[byteCount++] = prev;\n }\n\n return encoded.subarray(0, byteCount);\n }\n \n public override decode(runLength: Uint8Array): Uint8Array {\n\n const decoded: number[] = [];\n\n for (let i = 0; i < runLength.length; i += 2) {\n\n const count = runLength[i]!;\n\n const byte = runLength[i + 1]!;\n\n for (let j = 0; j < count; j++) {\n decoded.push(byte);\n }\n }\n\n return new Uint8Array(decoded);\n }\n}","import { KastenError } from '@/errors';\n\nexport class KastenRunLengthError extends KastenError {}\n\nexport class KastenRunLengthEncodeError extends KastenRunLengthError {}\n\nexport class KastenRunLengthDecodeError extends KastenRunLengthError {}","import { RunLength } from '@/run-length';\nimport { KastenRunLengthDecodeError } from '../errors';\n\n/**\n * PackBits codec.\n */\nexport class PackBits extends RunLength {\n\n public override encode(bytes: Uint8Array): Uint8Array {\n\n if (bytes.length === 0) return new Uint8Array([]);\n\n const byteLength = bytes.length;\n\n const encoded: number[] = [];\n\n let i = 0;\n\n while(i < byteLength) {\n\n const byte = bytes[i]!;\n\n let j = 1;\n\n while (i + j < byteLength && byte === bytes[i + j] && j < 128) {\n j++;\n }\n\n if (j >= 3) {\n encoded.push(256 - (j - 1));\n encoded.push(byte);\n i += j;\n continue;\n }\n\n while (i + j < byteLength && j < 128) {\n\n const pos = i + j;\n\n const _byte = bytes[pos]!;\n\n if (bytes[pos - 1] === _byte && _byte === bytes[pos + 1]) {\n j--;\n break;\n }\n\n j++;\n }\n\n encoded.push(j - 1);\n\n for (let k = i; k < i + j; k++) {\n encoded.push(bytes[k]!);\n }\n\n i += j;\n }\n\n return new Uint8Array(encoded);\n }\n \n public override decode(runLength: Uint8Array): Uint8Array {\n\n const decoded: number[] = [];\n\n const byteLength = runLength.length;\n\n let i = 0;\n\n while(i < byteLength) {\n\n const header = runLength[i]!;\n\n if (header === 0x80) continue;\n\n if (0 <= header && header <= 0x7F) {\n \n const end = i + header + 2;\n\n for (let j = i + 1; j < end; j++) {\n\n const byte = runLength[j];\n\n if (byte === undefined)\n throw new KastenRunLengthDecodeError('Invalid PackBits encoding');\n\n decoded.push(byte);\n }\n\n i = end;\n continue;\n }\n\n if (0x81 <= header && header <= 0xFF) {\n\n const count = 0x101 - header;\n\n const byte = runLength[i + 1];\n\n if (byte === undefined)\n throw new KastenRunLengthDecodeError('Invalid PackBits encoding');\n\n for (let j = 0; j < count; j++) {\n decoded.push(byte); \n }\n\n i += 2;\n continue;\n }\n }\n\n return new Uint8Array(decoded);\n }\n}","import { RunLength } from '@/run-length';\nimport { KastenRunLengthDecodeError } from '@/run-length/errors';\n\nexport class Pdf extends RunLength {\n \n public override encode(bytes: Uint8Array): Uint8Array {\n\n if (bytes.length === 0) return new Uint8Array([]);\n\n const byteLength = bytes.length;\n\n const encoded: number[] = [];\n\n let i = 0;\n\n while(i < byteLength) {\n\n const byte = bytes[i]!;\n\n let j = 1;\n\n while (i + j < byteLength && byte === bytes[i + j] && j < 128) {\n j++;\n }\n\n if (j >= 2) {\n encoded.push(257 - j);\n encoded.push(byte);\n i += j;\n continue;\n }\n\n while (i + j < byteLength && j < 128) {\n\n const pos = i + j;\n\n const _byte = bytes[pos]!;\n\n if (bytes[pos - 1] === _byte && _byte === bytes[pos + 1]) {\n j--;\n break;\n }\n\n j++;\n }\n\n encoded.push(j - 1);\n\n for (let k = i; k < i + j; k++) {\n encoded.push(bytes[k]!);\n }\n\n i += j;\n }\n\n return new Uint8Array(encoded);\n }\n\n public override decode(runLength: Uint8Array): Uint8Array {\n\n const decoded: number[] = [];\n \n const byteLength = runLength.length;\n\n let i = 0;\n\n while(i < byteLength) {\n\n const header = runLength[i]!;\n\n if (header === 0x80) continue;\n\n if (0 <= header && header <= 0x7F) {\n \n const end = i + header + 2;\n\n for (let j = i + 1; j < end; j++) {\n\n const byte = runLength[j];\n\n if (byte === undefined)\n throw new KastenRunLengthDecodeError('Invalid PackBits encoding');\n\n decoded.push(byte);\n }\n\n i = end;\n continue;\n }\n\n if (0x81 <= header && header <= 0xFF) {\n\n const count = 0x101 - header;\n\n const byte = runLength[i + 1];\n\n if (byte === undefined)\n throw new KastenRunLengthDecodeError('Invalid PackBits encoding');\n\n for (let j = 0; j < count; j++) {\n decoded.push(byte); \n }\n\n i += 2;\n continue;\n }\n }\n\n return new Uint8Array(decoded);\n }\n}","import type { Base16, Base16Category } from '@/base16';\nimport type { Base32, Base32Category } from '@/base32';\nimport type { Base64, Base64Category } from '@/base64';\nimport type { RunLength, RunLengthCatgory } from '@/run-length';\nimport { RFC4648Base16 } from '@/base16/rfc4648/rfc4648';\nimport { AsciiHexDecode } from '@/base16/ascii/ascii';\nimport { RFC4648Base32 } from '@/base32/rfc4648/rfc4648';\nimport { RFC4648Base32Hex } from '@/base32/rfc4648/rfc4648hex';\nimport { RFC2045Base64 } from '@/base64/rfc2045/rfc2045';\nimport { RFC4648Base64 } from '@/base64/rfc4648/rfc4648';\nimport { RFC4648Base64URL } from '@/base64/rfc4648/rfc4648url';\nimport { BasicRunLength } from '@/run-length/basic/basic-run-length';\nimport { PackBits } from '@/run-length/pack-bits/pack-bits';\nimport { Pdf } from '@/run-length/pdf/pdf';\n\n/**\n * Entry point of the Kasten library.\n * All encoding/decoding feature implementations are created through this class.\n *\n * @example\n * const base64 = Kasten.base64('rfc4648');\n * const encoded = base64.encode(data);\n *\n * @example\n * const base32 = Kasten.base32('rfc464hex');\n * const decoded = base32.decode(text);\n *\n * @example\n * const base16 = Kasten.base16();\n *\n * @example\n * const runLength = Kasten.runLength('pack-bits');\n */\nclass Kasten {\n\n private constructor() {}\n\n /**\n * Creates Base 64 codec instance.\n * @param category Base 64 category.\n */\n public static base64 = (category?: Base64Category): Base64 => {\n\n switch(category) {\n case 'rfc4648-url':\n return new RFC4648Base64URL();\n case 'rfc2025':\n return new RFC2045Base64();\n case 'rfc4648':\n default:\n return new RFC4648Base64();\n }\n }\n\n /**\n * Creates Base 32 codec instance.\n * @param category Base 32 category.\n */\n public static base32 = (category?: Base32Category): Base32 => {\n\n switch(category) {\n case 'rfc468-hex':\n return new RFC4648Base32Hex();\n case 'rfc4648':\n default:\n return new RFC4648Base32();\n }\n }\n\n /**\n * Create Base 16 codec instance.\n */\n public static base16 = (category?: Base16Category): Base16 => {\n\n switch(category) {\n case 'ascii':\n return new AsciiHexDecode();\n case 'rfc4648':\n default:\n return new RFC4648Base16();\n }\n }\n\n /**\n * Creates Run-Length codec instance.\n */\n public static runLength = (category?: RunLengthCatgory): RunLength => {\n\n switch(category) {\n case 'pack-bits':\n return new PackBits();\n case 'pdf':\n return new Pdf();\n case 'basic':\n default:\n return new BasicRunLength();\n }\n }\n}\n\nexport {\n Kasten,\n type Base64,\n type Base64Category as Base64Catgory,\n type Base32,\n type Base32Category,\n type Base16,\n type Base16Category,\n type RunLength,\n type RunLengthCatgory\n}"],"mappings":";;;;AAOA,IAAsB,SAAtB,MAA6B;;;ACP7B,IAAa,YAAb,MAAuB;CAEnB,OAAc,KAAK;CAEnB,OAAc,KAAK;CAEnB,OAAc,KAAK;CAEnB,OAAc,KAAK;CAEnB,OAAc,KAAK;CAEnB,OAAc,KAAK;CAEnB,cAAsB;CAEtB,OAAc,gBAAgB,MAAuB;EAEjD,MAAM,OAAO,OAAO;AAEpB,MAAI,SAAS,YAAY,SAAS,SAC9B,OAAM,IAAI,MAAM,yBAAyB;AAE7C,MAAI,SAAS,YAAa,EAAa,WAAW,EAC9C,OAAM,IAAI,MAAM,mCAAmC;EAEvD,MAAM,OAAO,OAAO,MAAM,WACpB,EAAE,WAAW,EAAE,GACf;AAEN,SAAQ,KAAK,MAAM,QAAQ,QAAQ,KAAK,MAAO,SAAS,KAAK;;;;;AC9BrE,IAAa,cAAb,cAAiC,MAAM;;;ACEvC,IAAa,oBAAb,cAAuC,YAAY;AAEnD,IAAa,0BAAb,cAA6C,kBAAkB;AAE/D,IAAa,0BAAb,cAA6C,kBAAkB;;;;;;ACC/D,IAAa,gBAAb,MAAa,sBAAsB,OAAO;CAEtC,OAAwB,cAAc,IAAI,aAAa;CAEvD,OAAwB,QAAQ;CAEhC,OAAwB,gBAAgB,IAAI,WACxC,CAAC,GAAG,KAAK,MAAM,CAAC,KAAI,MAAK,EAAE,WAAW,EAAE,CAAC,CAC5C;CAED,OAAwB,gBAAgB,IAAI,WAAW,IAAI;CAE3D;AACI,OAAK,cAAc,KAAK,IAAI;AAE5B,OAAK,IAAI,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,IACnC,MAAK,cAAc,KAAK,MAAM,WAAW,EAAE,IAAI;;CAIvD,OAAuB,OAA2B;EAE9C,MAAM,gBAAgB,cAAc;EAEpC,MAAM,QAAQ,IAAI,WAAW,MAAM,SAAS,EAAE;EAE9C,IAAI,YAAY;AAEhB,OAAK,MAAM,QAAQ,OAAO;GAEtB,MAAM,OAAO,OAAO,QAAS;GAC7B,MAAM,MAAM,OAAO;GAEnB,MAAM,KAAK,cAAc;GACzB,MAAM,KAAK,cAAc;AAEzB,SAAM,eAAe;AACrB,SAAM,eAAe;;AAGzB,SAAO,cAAc,YAAY,OAAO,MAAM;;CAGlD,OAAuB,QAA4B;EAE/C,MAAM,gBAAgB,cAAc;EAEpC,MAAM,QAAQ,OAAO,aAAa;EAClC,MAAM,QAAQ,IAAI,WAAW,OAAO,OAAO;EAE3C,IAAI,YAAY;AAEhB,OAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;GACpC,MAAM,IAAI,MAAM,WAAW,EAAE;AAE7B,OAAI,UAAU,aAAa,EAAE,CACzB;AAEJ,OAAI,CAAC,cAAc,MAAM,cAAc,MAAM,IACzC,OAAM,IAAI,wBAAwB,6BAA6B,OAAO,OAAO,EAAE,GAAG;AAEtF,SAAM,eAAe;;AAGzB,MAAI,YAAY,MAAM,EAClB,OAAM,IAAI,wBAAwB,iBAAiB;EAEvD,MAAM,QAAQ,IAAI,WAAW,KAAK,KAAK,OAAO,SAAS,EAAE,CAAC;EAE1D,IAAI,YAAY;AAEhB,OAAK,IAAI,IAAI,GAAG,IAAI,WAAW,KAAK,GAAG;GAEnC,MAAM,KAAK,MAAM;GACjB,MAAM,KAAK,MAAM,IAAI;GAErB,MAAM,MAAM,cAAc;GAC1B,MAAM,MAAM,cAAc;GAE1B,MAAM,QAAS,MAAM,OAAS,IAAM,MAAM;AAE1C,SAAM,eAAe;;AAGzB,SAAO,MAAM,SAAS,GAAG,UAAU;;;;;;;;ACpF3C,IAAa,iBAAb,cAAoC,OAAO;CAEvC,OAAuB,OAA2B;AAE9C,MAAI,MAAM,WAAW,EAAG,QAAO;EAE/B,MAAM,QAAkB,EAAE;AAE1B,OAAK,MAAM,QAAQ,OAAO;GACtB,MAAM,OAAO,KAAK,SAAS,GAAG,CAAC,SAAS,GAAG,IAAI;AAC/C,SAAM,KAAK,KAAK;;AAGpB,QAAM,KAAK,IAAI;AAEf,SAAO,MAAM,KAAK,GAAG;;CAGzB,OAAuB,QAA4B;EAE/C,MAAM,QAAkB,EAAE;AAE1B,OAAK,MAAM,KAAK,QAAQ;AAEpB,OAAI,MAAM,IAAK;AAEf,OAAI,UAAU,aAAa,EAAE,CAAE;GAE/B,MAAM,OAAO,EAAE,WAAW,EAAE;AAE5B,OAAI,EAAE,MAAM,QAAQ,QAAQ,OAAO,EAAE,MAAM,QAAQ,QAAQ,OAAO,EAAE,MAAK,QAAQ,QAAQ,KACrF,OAAM,IAAI,wBAAwB,iBAAiB,IAAI;AAE3D,SAAM,KAAK,EAAE;;AAGjB,MAAI,MAAM,SAAS,MAAM,EAAG,OAAM,KAAK,IAAI;EAE3C,MAAM,YAAY,MAAM;EAExB,MAAM,QAAQ,IAAI,WAAW,KAAK,KAAK,YAAY,EAAE,CAAC;EAEtD,IAAI,YAAY;AAEhB,OAAK,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,WAAW,KAAK,GAAG,KAAK;GAE/C,MAAM,MAAM,MAAM,KAAM,MAAM,IAAI;GAElC,MAAM,OAAO,OAAO,SAAS,KAAK,GAAG;AAErC,SAAM,eAAe;;AAGzB,SAAO,MAAM,SAAS,GAAG,UAAU;;;;;;;;ACrD3C,IAAsB,SAAtB,MAA6B;CAEzB,OAA0B,cAAc,IAAI,aAAa;;;;ACP7D,IAAa,oBAAb,cAAuC,YAAY;AAEnD,IAAa,0BAAb,cAA6C,kBAAkB;AAE/D,IAAa,0BAAb,cAA6C,kBAAkB;;;ACF/D,IAAa,gBAAb,MAAa,sBAAsB,OAAO;CAEtC,OAAwB,oBAA4B,IAAI,WAAW,EAAE;CAErE,OAAwB,QAClB;CAEN,OAAwB,gBAAgB,IAAI,WACxC,CAAC,GAAG,KAAK,MAAM,CAAC,KAAI,MAAK,EAAE,WAAW,EAAE,CAAC,CAC5C;CAED,OAAwB,gBAAgB,IAAI,WAAW,IAAI;CAE3D;AACI,OAAK,cAAc,KAAK,IAAI;AAE5B,OAAK,IAAI,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,IACnC,MAAK,cAAc,KAAK,MAAM,WAAW,EAAE,IAAI;;CAIvD,OAAuB,OAA2B;EAE9C,MAAM,gBAAgB,cAAc;EAEpC,MAAM,QAAQ,IAAI,WAAW,KAAK,KAAK,MAAM,SAAS,EAAE,GAAG,EAAE;EAE7D,IAAI,QAAQ;AAEZ,OAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;GAEtC,MAAM,KAAK,MAAM;GACjB,MAAM,KAAK,MAAM,IAAI,MAAM;GAC3B,MAAM,KAAK,MAAM,IAAI,MAAM;GAC3B,MAAM,KAAK,MAAM,IAAI,MAAM;GAC3B,MAAM,KAAK,MAAM,IAAI,MAAM;GAE3B,MAAM,OAAO,KAAK,QAAS;GAC3B,MAAM,OAAQ,KAAK,MAAS,KAAO,KAAK,QAAS;GACjD,MAAM,OAAO,KAAK,OAAS;GAC3B,MAAM,OAAQ,KAAK,MAAS,KAAO,KAAK,QAAS;GACjD,MAAM,OAAQ,KAAK,OAAS,KAAO,KAAK,QAAS;GACjD,MAAM,OAAO,KAAK,QAAS;GAC3B,MAAM,OAAQ,KAAK,MAAS,KAAO,KAAK,QAAS;GACjD,MAAM,MAAM,KAAK;GAEjB,MAAM,KAAK,cAAc;GACzB,MAAM,KAAK,cAAc;GACzB,MAAM,KAAK,cAAc;GACzB,MAAM,KAAK,cAAc;GACzB,MAAM,KAAK,cAAc;GACzB,MAAM,KAAK,cAAc;GACzB,MAAM,KAAK,cAAc;GACzB,MAAM,KAAK,cAAc;AAEzB,SAAM,WAAW;AACjB,SAAM,WAAW;AACjB,SAAM,WAAW;AACjB,SAAM,WAAW;AACjB,SAAM,WAAW;AACjB,SAAM,WAAW;AACjB,SAAM,WAAW;AACjB,SAAM,WAAW;;EAGrB,MAAM,SAAS,MAAM,SAAS;EAE9B,MAAM,UACF,WAAW,IAAI,IACf,WAAW,IAAI,IACf,WAAW,IAAI,IACf,WAAW,IAAI,IAAI;AAEvB,OAAK,IAAI,IAAI,SAAS,IAAI,GAAG,IACzB,OAAM,QAAQ,KAAK,cAAc;AAGrC,SAAO,OAAO,YAAY,OAAO,MAAM,SAAS,GAAG,MAAM,CAAC;;CAG9D,OAAuB,QAA4B;EAE/C,MAAM,QAAQ,OAAO,aAAa;EAElC,MAAM,gBAAgB,cAAc;EACpC,MAAM,UAAU,cAAc;EAE9B,MAAM,QAAQ,IAAI,WAAW,OAAO,OAAO;EAE3C,IAAI,YAAY;AAEhB,OAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;GAEpC,MAAM,IAAI,MAAM,WAAW,EAAE;AAE7B,OAAI,CAAC,UAAU,aAAa,EAAE,CAE1B,OAAM,eAAe;;AAI7B,MAAI,YAAY,MAAM,EAClB,OAAM,IAAI,wBAAwB,yBAAyB;EAE/D,IAAI,WAAW;AAEf,OAAK,IAAI,IAAI,GAAG,IAAI,WAAW,IAC3B,KAAI,MAAM,OAAO,SAAS;AACtB,cAAW;AACX;;EAIR,IAAI,WAAW;AAEf,MAAI,aAAa,IAAI;AAEjB,OAAI,WAAW,YAAY,EACvB,OAAM,IAAI,wBAAwB,4BAA4B;AAElE,QAAK,IAAI,IAAI,UAAU,IAAI,WAAW,IAClC,KAAI,MAAM,OAAO,QACb,OAAM,IAAI,wBAAwB,kBAAkB;AAI5D,cAAW,YAAY;AAEvB,OAAI,aAAa,KAAK,aAAa,KAAK,aAAa,KAAK,aAAa,EACnE,OAAM,IAAI,wBAAwB,kBAAkB;;EAI5D,MAAM,QAAQ,IAAI,WAAW,KAAK,OAAQ,YAAY,YAAY,IAAK,EAAE,CAAC;EAE1E,IAAI,YAAY;AAEhB,OAAK,IAAI,IAAI,GAAG,IAAI,WAAW,KAAK,GAAG;GAEnC,MAAM,KAAK,MAAM;GACjB,MAAM,KAAK,MAAM,IAAI;GACrB,MAAM,KAAK,MAAM,IAAI;GACrB,MAAM,KAAK,MAAM,IAAI;GACrB,MAAM,KAAK,MAAM,IAAI;GACrB,MAAM,KAAK,MAAM,IAAI;GACrB,MAAM,KAAK,MAAM,IAAI;GACrB,MAAM,KAAK,MAAM,IAAI;GAErB,MAAM,MAAM,cAAc;GAC1B,MAAM,MAAM,cAAc;GAC1B,MAAM,MAAM,OAAO,UAAU,cAAc,MAAO;GAClD,MAAM,MAAM,OAAO,UAAU,cAAc,MAAO;GAClD,MAAM,MAAM,OAAO,UAAU,cAAc,MAAO;GAClD,MAAM,MAAM,OAAO,UAAU,cAAc,MAAO;GAClD,MAAM,MAAM,OAAO,UAAU,cAAc,MAAO;GAClD,MAAM,MAAM,OAAO,UAAU,cAAc,MAAO;AAElD,OAAI,QAAQ,OACR,QAAQ,OACR,QAAQ,OACR,QAAQ,OACR,QAAQ,OACR,QAAQ,OACR,QAAQ,OACR,QAAQ,IAER,OAAM,IAAI,wBAAwB,iBAAiB;GAGvD,MAAM,MAAO,MAAM,OAAS,KAAO,MAAM,OAAS;GAClD,MAAM,MAAO,MAAM,MAAS,KAAO,MAAM,OAAS,KAAO,MAAM,OAAS;GACxE,MAAM,MAAO,MAAM,OAAS,KAAO,MAAM,OAAS;GAClD,MAAM,MAAO,MAAM,MAAS,KAAO,MAAM,OAAS,KAAO,MAAM,OAAS;GACxE,MAAM,MAAO,MAAM,MAAS,IAAM,MAAM;AAExC,SAAM,eAAe;AAErB,OAAI,YAAY,MAAM,OAClB,OAAM,eAAe;AAEzB,OAAI,YAAY,MAAM,OAClB,OAAM,eAAe;AAEzB,OAAI,YAAY,MAAM,UAAU,OAAO,QACnC,OAAM,eAAe;AAEzB,OAAI,YAAY,MAAM,UAAU,MAAM,QAClC,OAAM,eAAe;;AAG7B,SAAO,MAAM,SAAS,GAAG,UAAU;;;;;AC9L3C,IAAa,mBAAb,MAAa,yBAAyB,OAAO;CAEzC,OAAwB,oBAA4B,IAAI,WAAW,EAAE;CAErE,OAAwB,QAClB;CAEN,OAAwB,gBAAgB,IAAI,WACxC,CAAC,GAAG,KAAK,MAAM,CAAC,KAAI,MAAK,EAAE,WAAW,EAAE,CAAC,CAC5C;CAED,OAAwB,gBAAgB,IAAI,WAAW,IAAI;CAE3D;AACI,OAAK,cAAc,KAAK,IAAI;AAE5B,OAAK,IAAI,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,IACnC,MAAK,cAAc,KAAK,MAAM,WAAW,EAAE,IAAI;;CAIvD,OAAuB,OAA2B;EAE9C,MAAM,gBAAgB,iBAAiB;EAEvC,MAAM,QAAQ,IAAI,WAAW,KAAK,KAAK,MAAM,SAAS,EAAE,GAAG,EAAE;EAE7D,IAAI,QAAQ;AAEZ,OAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;GAEtC,MAAM,KAAK,MAAM;GACjB,MAAM,KAAK,MAAM,IAAI,MAAM;GAC3B,MAAM,KAAK,MAAM,IAAI,MAAM;GAC3B,MAAM,KAAK,MAAM,IAAI,MAAM;GAC3B,MAAM,KAAK,MAAM,IAAI,MAAM;GAE3B,MAAM,OAAO,KAAK,QAAS;GAC3B,MAAM,OAAQ,KAAK,MAAS,KAAO,KAAK,QAAS;GACjD,MAAM,OAAO,KAAK,OAAS;GAC3B,MAAM,OAAQ,KAAK,MAAS,KAAO,KAAK,QAAS;GACjD,MAAM,OAAQ,KAAK,OAAS,KAAO,KAAK,QAAS;GACjD,MAAM,OAAO,KAAK,QAAS;GAC3B,MAAM,OAAQ,KAAK,MAAS,KAAO,KAAK,QAAS;GACjD,MAAM,MAAM,KAAK;GAEjB,MAAM,KAAK,cAAc;GACzB,MAAM,KAAK,cAAc;GACzB,MAAM,KAAK,cAAc;GACzB,MAAM,KAAK,cAAc;GACzB,MAAM,KAAK,cAAc;GACzB,MAAM,KAAK,cAAc;GACzB,MAAM,KAAK,cAAc;GACzB,MAAM,KAAK,cAAc;AAEzB,SAAM,WAAW;AACjB,SAAM,WAAW;AACjB,SAAM,WAAW;AACjB,SAAM,WAAW;AACjB,SAAM,WAAW;AACjB,SAAM,WAAW;AACjB,SAAM,WAAW;AACjB,SAAM,WAAW;;EAGrB,MAAM,SAAS,MAAM,SAAS;EAE9B,MAAM,UACF,WAAW,IAAI,IACf,WAAW,IAAI,IACf,WAAW,IAAI,IACf,WAAW,IAAI,IAAI;AAEvB,OAAK,IAAI,IAAI,SAAS,IAAI,GAAG,IACzB,OAAM,QAAQ,KAAK,iBAAiB;AAGxC,SAAO,OAAO,YAAY,OAAO,MAAM,SAAS,GAAG,MAAM,CAAC;;CAG9D,OAAuB,QAA4B;EAE/C,MAAM,QAAQ,OAAO,aAAa;EAElC,MAAM,gBAAgB,iBAAiB;EACvC,MAAM,UAAU,iBAAiB;EAEjC,MAAM,QAAQ,IAAI,WAAW,OAAO,OAAO;EAE3C,IAAI,YAAY;AAEhB,OAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;GAEpC,MAAM,IAAI,MAAM,WAAW,EAAE;AAE7B,OAAI,CAAC,UAAU,aAAa,EAAE,CAE1B,OAAM,eAAe;;AAI7B,MAAI,YAAY,MAAM,EAClB,OAAM,IAAI,wBAAwB,yBAAyB;EAE/D,IAAI,WAAW;AAEf,OAAK,IAAI,IAAI,GAAG,IAAI,WAAW,IAC3B,KAAI,MAAM,OAAO,SAAS;AACtB,cAAW;AACX;;EAIR,IAAI,WAAW;AAEf,MAAI,aAAa,IAAI;AAEjB,OAAI,WAAW,YAAY,EACvB,OAAM,IAAI,wBAAwB,4BAA4B;AAElE,QAAK,IAAI,IAAI,UAAU,IAAI,WAAW,IAClC,KAAI,MAAM,OAAO,QACb,OAAM,IAAI,wBAAwB,kBAAkB;AAI5D,cAAW,YAAY;AAEvB,OAAI,aAAa,KAAK,aAAa,KAAK,aAAa,KAAK,aAAa,EACnE,OAAM,IAAI,wBAAwB,kBAAkB;;EAI5D,MAAM,QAAQ,IAAI,WAAW,KAAK,OAAQ,YAAY,YAAY,IAAK,EAAE,CAAC;EAE1E,IAAI,YAAY;AAEhB,OAAK,IAAI,IAAI,GAAG,IAAI,WAAW,KAAK,GAAG;GAEnC,MAAM,KAAK,MAAM;GACjB,MAAM,KAAK,MAAM,IAAI;GACrB,MAAM,KAAK,MAAM,IAAI;GACrB,MAAM,KAAK,MAAM,IAAI;GACrB,MAAM,KAAK,MAAM,IAAI;GACrB,MAAM,KAAK,MAAM,IAAI;GACrB,MAAM,KAAK,MAAM,IAAI;GACrB,MAAM,KAAK,MAAM,IAAI;GAErB,MAAM,MAAM,cAAc;GAC1B,MAAM,MAAM,cAAc;GAC1B,MAAM,MAAM,OAAO,UAAU,cAAc,MAAO;GAClD,MAAM,MAAM,OAAO,UAAU,cAAc,MAAO;GAClD,MAAM,MAAM,OAAO,UAAU,cAAc,MAAO;GAClD,MAAM,MAAM,OAAO,UAAU,cAAc,MAAO;GAClD,MAAM,MAAM,OAAO,UAAU,cAAc,MAAO;GAClD,MAAM,MAAM,OAAO,UAAU,cAAc,MAAO;AAElD,OAAI,QAAQ,OACR,QAAQ,OACR,QAAQ,OACR,QAAQ,OACR,QAAQ,OACR,QAAQ,OACR,QAAQ,OACR,QAAQ,IAER,OAAM,IAAI,wBAAwB,iBAAiB;GAGvD,MAAM,MAAO,MAAM,OAAS,KAAO,MAAM,OAAS;GAClD,MAAM,MAAO,MAAM,MAAS,KAAO,MAAM,OAAS,KAAO,MAAM,OAAS;GACxE,MAAM,MAAO,MAAM,OAAS,KAAO,MAAM,OAAS;GAClD,MAAM,MAAO,MAAM,MAAS,KAAO,MAAM,OAAS,KAAO,MAAM,OAAS;GACxE,MAAM,MAAO,MAAM,MAAS,IAAM,MAAM;AAExC,SAAM,eAAe;AAErB,OAAI,YAAY,MAAM,OAClB,OAAM,eAAe;AAEzB,OAAI,YAAY,MAAM,OAClB,OAAM,eAAe;AAEzB,OAAI,YAAY,MAAM,UAAU,OAAO,QACnC,OAAM,eAAe;AAEzB,OAAI,YAAY,MAAM,UAAU,MAAM,QAClC,OAAM,eAAe;;AAG7B,SAAO,MAAM,SAAS,GAAG,UAAU;;;;;;;;AC3L3C,IAAsB,SAAtB,MAA6B;;;;;;ACF7B,IAAa,oBAAb,cAAuC,YAAY;;;;AAKnD,IAAa,0BAAb,cAA6C,kBAAkB;;;;AAK/D,IAAa,0BAAb,cAA6C,kBAAkB;;;ACX/D,IAAa,gBAAb,MAAa,sBAAsB,OAAO;CAEtC,OAAwB,oBAAoB,IAAI,WAAW,EAAE;CAE7D,OAAwB,QAClB;CAEN,OAAwB,eAAe,IAAI,WAAW,IAAI;CAE1D,OAAwB,eAAe,IAAI,WACvC,CAAC,GAAG,KAAK,MAAM,CAAC,KAAI,MAAK,EAAE,WAAW,EAAE,CAAC,CAC5C;CAED,OAAwB,UAAU,IAAI,aAAa;CAEnD;AAEI,OAAK,aAAa,KAAK,IAAI;AAE3B,OAAK,IAAI,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,IACnC,MAAK,aAAa,KAAK,MAAM,WAAW,EAAE,IAAI;;CAItD,UAA0B,UAA8B;AAEpD,MAAI,MAAM,WAAW,EAAG,QAAO;EAE/B,MAAM,eAAe,cAAc;EACnC,MAAM,EAAE,IAAI,OAAO;EAEnB,MAAM,WAAW,KAAK,KAAK,MAAM,SAAS,EAAE,GAAG;EAC/C,MAAM,aAAa,KAAK,OAAO,WAAW,KAAK,GAAG;EAElD,MAAM,QAAQ,IAAI,WAAW,WAAW,aAAa,EAAE;EAEvD,IAAI,KAAK;EAET,IAAI,WAAW;AAEf,OAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;GAEtC,MAAM,KAAK,MAAM;GACjB,MAAM,KAAK,MAAM,IAAI,MAAM;GAC3B,MAAM,KAAK,MAAM,IAAI,MAAM;GAE3B,MAAM,KAAK,MAAM;GACjB,MAAM,MAAO,KAAK,MAAe,IAAK,MAAM;GAC5C,MAAM,MAAO,KAAK,OAAe,IAAK,MAAM;GAC5C,MAAM,KAAK,KAAK;AAEhB,SAAM,QAAQ,aAAa;AAC3B,SAAM,QAAQ,aAAa;AAC3B,SAAM,QAAQ,aAAa;AAC3B,SAAM,QAAQ,aAAa;AAE3B,eAAY;AAEZ,OAAI,aAAa,MAAM,KAAK,MAAM,QAAQ;AACtC,eAAW;AACX,UAAM,QAAQ;AACd,UAAM,QAAQ;;;EAItB,MAAM,SAAS,MAAM,SAAS;AAE9B,MAAI,WAAW,GAAG;AACd,SAAM,KAAK,KAAK,cAAc;AAC9B,SAAM,KAAK,KAAK,cAAc;aACvB,WAAW,EAClB,OAAM,KAAK,KAAK,cAAc;AAGlC,SAAO,cAAc,QAAQ,OAAO,MAAM,SAAS,GAAG,GAAG,CAAC;;CAG9D,UAA0B,WAA+B;EAErD,MAAM,eAAe,cAAc;EAEnC,MAAM,OAAO,IAAI,WAAW,OAAO,OAAO;EAC1C,IAAI,gBAAgB;AAEpB,OAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;GACpC,MAAM,IAAI,OAAO,WAAW,EAAE;AAC9B,OAAI,MAAM,UAAU,MACb,MAAM,UAAU,MAChB,MAAM,UAAU,MAChB,MAAM,UAAU,GAEnB,MAAK,mBAAmB;;AAIhC,MAAI,gBAAgB,MAAM,EACtB,OAAM,IAAI,wBAAwB,wBAAwB;EAE9D,IAAI,WAAW;AAEf,OAAK,IAAI,IAAI,GAAG,IAAI,eAAe,IAC/B,KAAI,KAAK,OAAO,cAAc,mBAAmB;AAC7C,cAAW;AACX;;AAIR,MAAI,aAAa,IAAI;AAEjB,OAAI,WAAW,gBAAgB,EAC3B,OAAM,IAAI,wBAAwB,2BAA2B;AAGjE,QAAK,IAAI,IAAI,UAAU,IAAI,eAAe,IACtC,KAAI,KAAK,OAAO,cAAc,kBAC1B,OAAM,IAAI,wBAAwB,kBAAkB;GAI5D,MAAM,WAAW,gBAAgB;AAEjC,OAAI,aAAa,KAAK,aAAa,EAC/B,OAAM,IAAI,wBAAwB,kBAAkB;;EAI5D,MAAM,aAAa;EAEnB,MAAM,UACF,KAAK,aAAa,OAAO,cAAc,oBACpC,KAAK,aAAa,OAAO,cAAc,oBAAoB,IAAI,IAChE;EAEN,MAAM,QAAQ,IAAI,WAAY,gBAAgB,IAAK,IAAI,QAAQ;EAE/D,IAAI,gBAAgB;AAEpB,OAAK,IAAI,IAAI,GAAG,IAAI,eAAe,KAAK,GAAG;GAEvC,MAAM,QAAQ,KAAK;GACnB,MAAM,QAAQ,KAAK,IAAI;GACvB,MAAM,QAAQ,KAAK,IAAI;GACvB,MAAM,QAAQ,KAAK,IAAI;GAEvB,MAAM,MAAM,aAAa;GACzB,MAAM,MAAM,aAAa;GACzB,MAAM,MAAM,UAAU,cAAc,oBAAoB,aAAa,SAAU;GAC/E,MAAM,MAAM,UAAU,cAAc,oBAAoB,aAAa,SAAU;AAE/E,OAAI,QAAQ,OACR,QAAQ,OACP,UAAU,cAAc,qBAAqB,QAAQ,OACrD,UAAU,cAAc,qBAAqB,QAAQ,IAEtD,OAAM,IAAI,wBAAwB,iBAAiB;GAGvD,MAAM,KAAM,OAAO,IAAM,OAAO;GAChC,MAAM,MAAO,MAAM,OAAO,IAAM,OAAO;GACvC,MAAM,MAAO,MAAM,MAAM,IAAK;AAE9B,SAAM,mBAAmB;AAEzB,OAAI,UAAU,cAAc,kBACxB,OAAM,mBAAmB;AAG7B,OAAI,UAAU,cAAc,kBACxB,OAAM,mBAAmB;;AAIjC,SAAO;;;;;AC5Kf,IAAa,gBAAb,MAAa,sBAAsB,OAAO;CAEtC,OAAwB,oBAAoB,IAAI,WAAW,EAAE;CAE7D,OAAwB,QAClB;CAEN,OAAwB,eAAe,IAAI,WAAW,IAAI;CAE1D,OAAwB,eAAe,IAAI,WACvC,CAAC,GAAG,KAAK,MAAM,CAAC,KAAI,MAAK,EAAE,WAAW,EAAE,CAAC,CAC5C;CAED,OAAwB,UAAU,IAAI,aAAa;CAEnD;AAEI,OAAK,aAAa,KAAK,IAAI;AAE3B,OAAK,IAAI,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,IACnC,MAAK,aAAa,KAAK,MAAM,WAAW,EAAE,IAAI;;CAItD,UAA0B,UAA8B;AAEpD,MAAI,MAAM,WAAW,EAAG,QAAO;EAE/B,MAAM,eAAe,cAAc;EAEnC,MAAM,WAAW,KAAK,KAAK,MAAM,SAAS,EAAE,GAAG;EAC/C,MAAM,aAAa,KAAK,OAAO,WAAW,KAAK,GAAG;EAElD,MAAM,QAAQ,IAAI,WAAW,WAAW,aAAa,EAAE;EAEvD,IAAI,KAAK;AAET,OAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;GAEtC,MAAM,KAAK,MAAM;GACjB,MAAM,KAAK,MAAM,IAAI,MAAM;GAC3B,MAAM,KAAK,MAAM,IAAI,MAAM;GAE3B,MAAM,KAAK,MAAM;GACjB,MAAM,MAAO,KAAK,MAAe,IAAK,MAAM;GAC5C,MAAM,MAAO,KAAK,OAAe,IAAK,MAAM;GAC5C,MAAM,KAAK,KAAK;AAEhB,SAAM,QAAQ,aAAa;AAC3B,SAAM,QAAQ,aAAa;AAC3B,SAAM,QAAQ,aAAa;AAC3B,SAAM,QAAQ,aAAa;;EAG/B,MAAM,SAAS,MAAM,SAAS;AAE9B,MAAI,WAAW,GAAG;AACd,SAAM,KAAK,KAAK,cAAc;AAC9B,SAAM,KAAK,KAAK,cAAc;aACvB,WAAW,EAClB,OAAM,KAAK,KAAK,cAAc;AAGlC,SAAO,cAAc,QAAQ,OAAO,MAAM,SAAS,GAAG,GAAG,CAAC;;CAG9D,UAA0B,WAA+B;EAErD,MAAM,eAAe,cAAc;EAEnC,MAAM,OAAO,IAAI,WAAW,OAAO,OAAO;EAC1C,IAAI,gBAAgB;AAEpB,OAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;GACpC,MAAM,IAAI,OAAO,WAAW,EAAE;AAC9B,OAAI,CAAC,UAAU,aAAa,EAAE,CAE1B,MAAK,mBAAmB;;AAIhC,MAAI,gBAAgB,MAAM,EACtB,OAAM,IAAI,wBAAwB,wBAAwB;EAE9D,IAAI,WAAW;AAEf,OAAK,IAAI,IAAI,GAAG,IAAI,eAAe,IAC/B,KAAI,KAAK,OAAO,cAAc,mBAAmB;AAC7C,cAAW;AACX;;AAIR,MAAI,aAAa,IAAI;AAEjB,OAAI,WAAW,gBAAgB,EAC3B,OAAM,IAAI,wBAAwB,2BAA2B;AAGjE,QAAK,IAAI,IAAI,UAAU,IAAI,eAAe,IACtC,KAAI,KAAK,OAAO,cAAc,kBAC1B,OAAM,IAAI,wBAAwB,kBAAkB;GAI5D,MAAM,WAAW,gBAAgB;AAEjC,OAAI,aAAa,KAAK,aAAa,EAC/B,OAAM,IAAI,wBAAwB,kBAAkB;;EAI5D,MAAM,aAAa;EAEnB,MAAM,UACF,KAAK,aAAa,OAAO,cAAc,oBACpC,KAAK,aAAa,OAAO,cAAc,oBAAoB,IAAI,IAChE;EAEN,MAAM,QAAQ,IAAI,WAAY,gBAAgB,IAAK,IAAI,QAAQ;EAE/D,IAAI,gBAAgB;AAEpB,OAAK,IAAI,IAAI,GAAG,IAAI,eAAe,KAAK,GAAG;GAEvC,MAAM,QAAQ,KAAK;GACnB,MAAM,QAAQ,KAAK,IAAI;GACvB,MAAM,QAAQ,KAAK,IAAI;GACvB,MAAM,QAAQ,KAAK,IAAI;GAEvB,MAAM,MAAM,aAAa;GACzB,MAAM,MAAM,aAAa;GACzB,MAAM,MAAM,UAAU,cAAc,oBAAoB,aAAa,SAAU;GAC/E,MAAM,MAAM,UAAU,cAAc,oBAAoB,aAAa,SAAU;AAE/E,OAAI,QAAQ,OACR,QAAQ,OACP,UAAU,cAAc,qBAAqB,QAAQ,OACrD,UAAU,cAAc,qBAAqB,QAAQ,IAEtD,OAAM,IAAI,wBAAwB,iBAAiB;GAGvD,MAAM,KAAM,OAAO,IAAM,OAAO;GAChC,MAAM,MAAO,MAAM,OAAO,IAAM,OAAO;GACvC,MAAM,MAAO,MAAM,MAAM,IAAK;AAE9B,SAAM,mBAAmB;AAEzB,OAAI,UAAU,cAAc,kBACxB,OAAM,mBAAmB;AAG7B,OAAI,UAAU,cAAc,kBACxB,OAAM,mBAAmB;;AAIjC,SAAO;;;;;AC9Jf,IAAa,mBAAb,MAAa,yBAAyB,OAAO;CAEzC,OAAwB,oBAAoB,IAAI,WAAW,EAAE;CAE7D,OAAwB,QAClB;CAEN,OAAwB,eAAe,IAAI,WAAW,IAAI;CAE1D,OAAwB,eAAe,IAAI,WACvC,CAAC,GAAG,KAAK,MAAM,CAAC,KAAI,MAAK,EAAE,WAAW,EAAE,CAAC,CAC5C;CAED,OAAwB,UAAU,IAAI,aAAa;CAEnD;AAEI,OAAK,aAAa,KAAK,IAAI;AAE3B,OAAK,IAAI,IAAI,GAAG,IAAI,KAAK,MAAM,QAAQ,IACnC,MAAK,aAAa,KAAK,MAAM,WAAW,EAAE,IAAI;;CAItD,UAA0B,UAA8B;AAEpD,MAAI,MAAM,WAAW,EAAG,QAAO;EAE/B,MAAM,eAAe,iBAAiB;EAEtC,MAAM,WAAW,KAAK,KAAK,MAAM,SAAS,EAAE,GAAG;EAC/C,MAAM,aAAa,KAAK,OAAO,WAAW,KAAK,GAAG;EAElD,MAAM,QAAQ,IAAI,WAAW,WAAW,aAAa,EAAE;EAEvD,IAAI,KAAK;AAET,OAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;GAEtC,MAAM,KAAK,MAAM;GACjB,MAAM,KAAK,MAAM,IAAI,MAAM;GAC3B,MAAM,KAAK,MAAM,IAAI,MAAM;GAE3B,MAAM,KAAK,MAAM;GACjB,MAAM,MAAO,KAAK,MAAe,IAAK,MAAM;GAC5C,MAAM,MAAO,KAAK,OAAe,IAAK,MAAM;GAC5C,MAAM,KAAK,KAAK;AAEhB,SAAM,QAAQ,aAAa;AAC3B,SAAM,QAAQ,aAAa;AAC3B,SAAM,QAAQ,aAAa;AAC3B,SAAM,QAAQ,aAAa;;EAG/B,MAAM,SAAS,MAAM,SAAS;AAE9B,MAAI,WAAW,GAAG;AACd,SAAM,KAAK,KAAK,iBAAiB;AACjC,SAAM,KAAK,KAAK,iBAAiB;aAC1B,WAAW,EAClB,OAAM,KAAK,KAAK,iBAAiB;AAGrC,SAAO,iBAAiB,QAAQ,OAAO,MAAM,SAAS,GAAG,GAAG,CAAC;;CAGjE,UAA0B,WAA+B;EAErD,MAAM,eAAe,iBAAiB;EAEtC,MAAM,OAAO,IAAI,WAAW,OAAO,OAAO;EAC1C,IAAI,gBAAgB;AAEpB,OAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;GACpC,MAAM,IAAI,OAAO,WAAW,EAAE;AAC9B,OAAI,CAAC,UAAU,aAAa,EAAE,CAE1B,MAAK,mBAAmB;;AAIhC,MAAI,gBAAgB,MAAM,EACtB,OAAM,IAAI,wBAAwB,wBAAwB;EAE9D,IAAI,WAAW;AAEf,OAAK,IAAI,IAAI,GAAG,IAAI,eAAe,IAC/B,KAAI,KAAK,OAAO,iBAAiB,mBAAmB;AAChD,cAAW;AACX;;AAIR,MAAI,aAAa,IAAI;AAEjB,OAAI,WAAW,gBAAgB,EAC3B,OAAM,IAAI,wBAAwB,2BAA2B;AAGjE,QAAK,IAAI,IAAI,UAAU,IAAI,eAAe,IACtC,KAAI,KAAK,OAAO,iBAAiB,kBAC7B,OAAM,IAAI,wBAAwB,kBAAkB;GAI5D,MAAM,WAAW,gBAAgB;AAEjC,OAAI,aAAa,KAAK,aAAa,EAC/B,OAAM,IAAI,wBAAwB,kBAAkB;;EAI5D,MAAM,aAAa;EAEnB,MAAM,UACF,KAAK,aAAa,OAAO,iBAAiB,oBACvC,KAAK,aAAa,OAAO,iBAAiB,oBAAoB,IAAI,IACnE;EAEN,MAAM,QAAQ,IAAI,WAAY,gBAAgB,IAAK,IAAI,QAAQ;EAE/D,IAAI,gBAAgB;AAEpB,OAAK,IAAI,IAAI,GAAG,IAAI,eAAe,KAAK,GAAG;GAEvC,MAAM,QAAQ,KAAK;GACnB,MAAM,QAAQ,KAAK,IAAI;GACvB,MAAM,QAAQ,KAAK,IAAI;GACvB,MAAM,QAAQ,KAAK,IAAI;GAEvB,MAAM,MAAM,aAAa;GACzB,MAAM,MAAM,aAAa;GACzB,MAAM,MAAM,UAAU,iBAAiB,oBAAoB,aAAa,SAAU;GAClF,MAAM,MAAM,UAAU,iBAAiB,oBAAoB,aAAa,SAAU;AAElF,OAAI,QAAQ,OACR,QAAQ,OACP,UAAU,iBAAiB,qBAAqB,QAAQ,OACxD,UAAU,iBAAiB,qBAAqB,QAAQ,IAEzD,OAAM,IAAI,wBAAwB,iBAAiB;GAGvD,MAAM,KAAM,OAAO,IAAM,OAAO;GAChC,MAAM,MAAO,MAAM,OAAO,IAAM,OAAO;GACvC,MAAM,MAAO,MAAM,MAAM,IAAK;AAE9B,SAAM,mBAAmB;AAEzB,OAAI,UAAU,iBAAiB,kBAC3B,OAAM,mBAAmB;AAG7B,OAAI,UAAU,iBAAiB,kBAC3B,OAAM,mBAAmB;;AAIjC,SAAO;;;;;;;;AC3Jf,IAAsB,YAAtB,MAAgC;;;;;;ACFhC,IAAa,iBAAb,cAAoC,UAAU;CAE1C,OAAuB,OAA+B;EAElD,MAAM,UAAU,IAAI,WAAW,MAAM,SAAS,EAAE;EAEhD,IAAI,YAAY;EAEhB,IAAI,OAAsB;EAE1B,IAAI,QAAQ;AAEZ,OAAI,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;GAElC,MAAM,OAAO,MAAM;AAEnB,OAAI,SAAS,MAAM;AACf,WAAO;AACP,YAAQ;AACR;;AAGJ,OAAI,SAAS;QAEL,QAAQ,KAAK;AACb;AACA;;;AAIR,WAAQ,eAAe;AACvB,WAAQ,eAAe;AAEvB,UAAO;AACP,WAAQ;;AAGZ,MAAI,SAAS,MAAM;AACf,WAAQ,eAAe;AACvB,WAAQ,eAAe;;AAG3B,SAAO,QAAQ,SAAS,GAAG,UAAU;;CAGzC,OAAuB,WAAmC;EAEtD,MAAM,UAAoB,EAAE;AAE5B,OAAK,IAAI,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK,GAAG;GAE1C,MAAM,QAAQ,UAAU;GAExB,MAAM,OAAO,UAAU,IAAI;AAE3B,QAAK,IAAI,IAAI,GAAG,IAAI,OAAO,IACvB,SAAQ,KAAK,KAAK;;AAI1B,SAAO,IAAI,WAAW,QAAQ;;;;;AC/DtC,IAAa,uBAAb,cAA0C,YAAY;AAEtD,IAAa,6BAAb,cAAgD,qBAAqB;AAErE,IAAa,6BAAb,cAAgD,qBAAqB;;;;;;ACArE,IAAa,WAAb,cAA8B,UAAU;CAEpC,OAAuB,OAA+B;AAElD,MAAI,MAAM,WAAW,EAAG,QAAO,IAAI,WAAW,EAAE,CAAC;EAEjD,MAAM,aAAa,MAAM;EAEzB,MAAM,UAAoB,EAAE;EAE5B,IAAI,IAAI;AAER,SAAM,IAAI,YAAY;GAElB,MAAM,OAAO,MAAM;GAEnB,IAAI,IAAI;AAER,UAAO,IAAI,IAAI,cAAc,SAAS,MAAM,IAAI,MAAM,IAAI,IACtD;AAGJ,OAAI,KAAK,GAAG;AACR,YAAQ,KAAK,OAAO,IAAI,GAAG;AAC3B,YAAQ,KAAK,KAAK;AAClB,SAAK;AACL;;AAGJ,UAAO,IAAI,IAAI,cAAc,IAAI,KAAK;IAElC,MAAM,MAAM,IAAI;IAEhB,MAAM,QAAQ,MAAM;AAEpB,QAAI,MAAM,MAAM,OAAO,SAAS,UAAU,MAAM,MAAM,IAAI;AACtD;AACA;;AAGJ;;AAGJ,WAAQ,KAAK,IAAI,EAAE;AAEnB,QAAK,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IACvB,SAAQ,KAAK,MAAM,GAAI;AAG3B,QAAK;;AAGT,SAAO,IAAI,WAAW,QAAQ;;CAGlC,OAAuB,WAAmC;EAEtD,MAAM,UAAoB,EAAE;EAE5B,MAAM,aAAa,UAAU;EAE7B,IAAI,IAAI;AAER,SAAM,IAAI,YAAY;GAElB,MAAM,SAAS,UAAU;AAEzB,OAAI,WAAW,IAAM;AAErB,OAAI,KAAK,UAAU,UAAU,KAAM;IAE/B,MAAM,MAAM,IAAI,SAAS;AAEzB,SAAK,IAAI,IAAI,IAAI,GAAG,IAAI,KAAK,KAAK;KAE9B,MAAM,OAAO,UAAU;AAEvB,SAAI,SAAS,KAAA,EACT,OAAM,IAAI,2BAA2B,4BAA4B;AAErE,aAAQ,KAAK,KAAK;;AAGtB,QAAI;AACJ;;AAGJ,OAAI,OAAQ,UAAU,UAAU,KAAM;IAElC,MAAM,QAAQ,MAAQ;IAEtB,MAAM,OAAO,UAAU,IAAI;AAE3B,QAAI,SAAS,KAAA,EACT,OAAM,IAAI,2BAA2B,4BAA4B;AAErE,SAAK,IAAI,IAAI,GAAG,IAAI,OAAO,IACvB,SAAQ,KAAK,KAAK;AAGtB,SAAK;AACL;;;AAIR,SAAO,IAAI,WAAW,QAAQ;;;;;AC5GtC,IAAa,MAAb,cAAyB,UAAU;CAE/B,OAAuB,OAA+B;AAElD,MAAI,MAAM,WAAW,EAAG,QAAO,IAAI,WAAW,EAAE,CAAC;EAEjD,MAAM,aAAa,MAAM;EAEzB,MAAM,UAAoB,EAAE;EAE5B,IAAI,IAAI;AAER,SAAM,IAAI,YAAY;GAElB,MAAM,OAAO,MAAM;GAEnB,IAAI,IAAI;AAER,UAAO,IAAI,IAAI,cAAc,SAAS,MAAM,IAAI,MAAM,IAAI,IACtD;AAGJ,OAAI,KAAK,GAAG;AACR,YAAQ,KAAK,MAAM,EAAE;AACrB,YAAQ,KAAK,KAAK;AAClB,SAAK;AACL;;AAGJ,UAAO,IAAI,IAAI,cAAc,IAAI,KAAK;IAElC,MAAM,MAAM,IAAI;IAEhB,MAAM,QAAQ,MAAM;AAEpB,QAAI,MAAM,MAAM,OAAO,SAAS,UAAU,MAAM,MAAM,IAAI;AACtD;AACA;;AAGJ;;AAGJ,WAAQ,KAAK,IAAI,EAAE;AAEnB,QAAK,IAAI,IAAI,GAAG,IAAI,IAAI,GAAG,IACvB,SAAQ,KAAK,MAAM,GAAI;AAG3B,QAAK;;AAGT,SAAO,IAAI,WAAW,QAAQ;;CAGlC,OAAuB,WAAmC;EAEtD,MAAM,UAAoB,EAAE;EAE5B,MAAM,aAAa,UAAU;EAE7B,IAAI,IAAI;AAER,SAAM,IAAI,YAAY;GAElB,MAAM,SAAS,UAAU;AAEzB,OAAI,WAAW,IAAM;AAErB,OAAI,KAAK,UAAU,UAAU,KAAM;IAE/B,MAAM,MAAM,IAAI,SAAS;AAEzB,SAAK,IAAI,IAAI,IAAI,GAAG,IAAI,KAAK,KAAK;KAE9B,MAAM,OAAO,UAAU;AAEvB,SAAI,SAAS,KAAA,EACT,OAAM,IAAI,2BAA2B,4BAA4B;AAErE,aAAQ,KAAK,KAAK;;AAGtB,QAAI;AACJ;;AAGJ,OAAI,OAAQ,UAAU,UAAU,KAAM;IAElC,MAAM,QAAQ,MAAQ;IAEtB,MAAM,OAAO,UAAU,IAAI;AAE3B,QAAI,SAAS,KAAA,EACT,OAAM,IAAI,2BAA2B,4BAA4B;AAErE,SAAK,IAAI,IAAI,GAAG,IAAI,OAAO,IACvB,SAAQ,KAAK,KAAK;AAGtB,SAAK;AACL;;;AAIR,SAAO,IAAI,WAAW,QAAQ;;;;;;;;;;;;;;;;;;;;;;;AC3EtC,IAAM,SAAN,MAAa;CAET,cAAsB;;;;;CAMtB,OAAc,UAAU,aAAsC;AAE1D,UAAO,UAAP;GACI,KAAK,cACD,QAAO,IAAI,kBAAkB;GACjC,KAAK,UACD,QAAO,IAAI,eAAe;GAE9B,QACI,QAAO,IAAI,eAAe;;;;;;;CAQtC,OAAc,UAAU,aAAsC;AAE1D,UAAO,UAAP;GACI,KAAK,aACD,QAAO,IAAI,kBAAkB;GAEjC,QACI,QAAO,IAAI,eAAe;;;;;;CAOtC,OAAc,UAAU,aAAsC;AAE1D,UAAO,UAAP;GACI,KAAK,QACD,QAAO,IAAI,gBAAgB;GAE/B,QACI,QAAO,IAAI,eAAe;;;;;;CAOtC,OAAc,aAAa,aAA2C;AAElE,UAAO,UAAP;GACI,KAAK,YACD,QAAO,IAAI,UAAU;GACzB,KAAK,MACD,QAAO,IAAI,KAAK;GAEpB,QACI,QAAO,IAAI,gBAAgB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kasten-js",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "author": "kkatou7209@gmail.com",
5
5
  "repository": {
6
6
  "type": "git",