Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | 42x 42x 42x 42x 42x 12x 30x 30x 30x 32x 32x 42x 42x 42x 42x 42x 42x 42x 32x 42x | import { base64ToBytes, bytesToBase64 } from 'micro-stacks/common';
function padString(input: string): string {
const segmentLength = 4;
const stringLength = input.length;
const diff = stringLength % segmentLength;
if (!diff) {
return input;
}
const padLength = segmentLength - diff;
const paddedStringLength = stringLength + padLength;
return input.padEnd(paddedStringLength, '=');
}
function encode(input: string | Uint8Array): string {
Iif (input instanceof Uint8Array) {
return fromBase64(bytesToBase64(input));
}
return fromBase64(bytesToBase64(new TextEncoder().encode(input)));
}
function decode(base64url: string): string {
const bytes = base64ToBytes(toBase64(base64url));
return new TextDecoder().decode(bytes);
}
export function toBase64(base64url: string | Uint8Array): string {
// We this to be a string so we can do .replace on it. If it's
// already a string, this is a noop.
let str: string;
Iif (base64url instanceof Uint8Array) {
str = new TextDecoder().decode(base64url);
} else {
str = base64url;
}
return padString(str).replace(/\-/g, '+').replace(/_/g, '/');
}
export function fromBase64(base64: string): string {
return base64.replace(/=/g, '').replace(/\+/g, '-').replace(/\//g, '_');
}
export default {
encode,
decode,
};
|