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
50
51
52
53
54
55
56
57
58
// SPDX-License-Identifier: AGPL-3.0-or-later
// Ported from https://codeberg.org/kitten/app/src/branch/main/src/lib/KittenMoji.js
// dprint-ignore
const alphabet = [
"๐Ÿต", "๐Ÿ’", "๐Ÿฆ", "๐Ÿฆง", "๐Ÿถ", "๐Ÿ•", "๐Ÿฆฎ", "๐Ÿฉ", "๐Ÿบ", "๐ŸฆŠ", "๐Ÿฆ",
"๐Ÿฑ", "๐Ÿˆ", "๐Ÿฆ", "๐Ÿฏ", "๐Ÿ…", "๐Ÿ†", "๐Ÿด", "๐Ÿงฎ", "๐Ÿฆ„", "๐Ÿฆ“", "๐ŸฆŒ",
"๐Ÿฆฌ", "๐Ÿฎ", "๐Ÿ‚", "๐Ÿƒ", "๐Ÿ„", "๐Ÿท", "๐Ÿ–", "๐Ÿ—", "๐Ÿฝ", "๐Ÿ", "๐Ÿ‘",
"๐Ÿ", "๐Ÿช", "๐Ÿซ", "๐Ÿฆ™", "๐Ÿฆ’", "๐Ÿ˜", "๐Ÿฆฃ", "๐Ÿฆ", "๐Ÿฆ›", "๐Ÿญ", "๐Ÿ",
"๐Ÿ€", "๐Ÿน", "๐Ÿฐ", "๐Ÿ‡", "๐ŸŽˆ", "๐Ÿฆซ", "๐Ÿฆ”", "๐Ÿฆ‡", "๐Ÿป", "๐Ÿจ", "๐Ÿผ",
"๐Ÿฆฅ", "๐Ÿฆฆ", "๐Ÿฆจ", "๐Ÿฆ˜", "๐Ÿฆก", "๐Ÿพ", "๐Ÿฆƒ", "๐ŸŽน", "๐Ÿ“", "๐Ÿฃ", "๐Ÿค",
"๐Ÿฅ", "๐Ÿฆ", "๐Ÿง", "๐Ÿ’•", "๐Ÿฆ…", "๐Ÿฆ†", "๐Ÿฆข", "๐Ÿฆ‰", "๐Ÿฆค", "๐Ÿชถ", "๐Ÿฆฉ",
"๐Ÿฆš", "๐Ÿฆœ", "๐Ÿšฒ", "๐ŸŠ", "๐Ÿข", "๐ŸฆŽ", "๐Ÿ“š", "๐Ÿ‰", "๐Ÿฆ•", "๐Ÿฆ–", "๐Ÿณ",
"๐Ÿ‹", "๐Ÿฌ", "๐Ÿฆญ", "๐ŸŸ", "๐Ÿ ", "๐Ÿก", "๐Ÿฆˆ", "๐Ÿ™", "๐Ÿš", "๐ŸŒ", "๐Ÿฆ‹",
"๐Ÿ›", "๐Ÿœ", "๐Ÿ", "๐Ÿชฒ", "๐Ÿž", "๐Ÿฆ—", "๐ŸŽญ", "๐ŸŽ", "๐Ÿงฌ", "๐Ÿชฑ", "๐Ÿฆ ",
"๐Ÿ’", "๐ŸŒธ", "๐ŸŽ ", "๐ŸŒˆ", "๐ŸŒน", "๐Ÿงฃ", "๐ŸŒบ", "๐ŸŒป", "๐ŸŒผ", "๐ŸŒท", "๐ŸŒฑ",
"๐Ÿชด", "๐ŸŒฒ", "๐ŸŒณ", "๐ŸŒด", "๐ŸŒต", "๐ŸŒพ", "๐ŸŒฟ", "๐ŸŽค", "๐Ÿ€", "๐Ÿ", "๐Ÿชบ",
"๐Ÿ‘ฝ", "๐Ÿ‡", "๐Ÿˆ", "๐Ÿ‰", "๐ŸŠ", "๐Ÿ‹", "๐ŸŒ", "๐Ÿ", "๐Ÿฅญ", "๐ŸŽ", "๐Ÿ",
"๐Ÿ", "๐Ÿ‘", "๐Ÿ’", "๐Ÿ“", "๐Ÿซ", "๐Ÿฅ", "๐Ÿ…", "๐Ÿซ’", "๐Ÿฅฅ", "๐Ÿฅ‘", "๐Ÿ†",
"๐Ÿฅ”", "๐Ÿฅ•", "๐ŸŒฝ", "๐Ÿงธ", "๐Ÿซ‘", "๐Ÿฅ’", "๐Ÿฅฌ", "๐Ÿฅฆ", "๐Ÿง„", "๐Ÿง…", "๐Ÿ„",
"๐Ÿฅœ", "๐ŸŒฐ", "๐Ÿž", "๐Ÿฅ", "๐Ÿฅ–", "๐Ÿ’ฉ", "๐Ÿฅจ", "๐Ÿฅฏ", "๐Ÿฅž", "๐Ÿง‡", "๐Ÿง€",
"๐ŸŽถ", "๐Ÿธ", "๐ŸŽพ", "๐ŸŽจ", "๐Ÿ”", "๐Ÿ”ญ", "๐Ÿ•", "๐ŸŒญ", "๐Ÿฅช", "๐ŸŒฎ", "๐ŸŒฏ",
"๐Ÿ˜ธ", "๐Ÿ“ท", "๐ŸŒœ", "๐Ÿฅš", "๐Ÿš‚", "๐Ÿ›ผ", "๐Ÿš", "๐Ÿ‘พ", "๐Ÿ‘ป", "๐Ÿฅ—", "๐Ÿฟ",
"๐Ÿงฉ", "๐Ÿ––", "๐Ÿฅซ", "๐ŸŽธ", "๐Ÿ˜", "๐Ÿ™", "๐Ÿš", "๐Ÿƒ", "๐Ÿœ", "๐Ÿ", "๐Ÿ ",
"๐Ÿข", "๐Ÿฃ", "๐Ÿค", "๐Ÿฅ", "๐Ÿฅฎ", "๐Ÿก", "๐ŸฅŸ", "๐Ÿฅ ", "๐Ÿฉฐ", "๐Ÿฆ€", "๐Ÿฆž",
"๐Ÿฆ", "๐Ÿฆ‘", "๐ŸŽก", "๐Ÿฆ", "๐Ÿง", "๐Ÿจ", "๐Ÿฉ", "๐Ÿช", "๐ŸŽ‚", "๐Ÿฐ", "๐Ÿง",
"๐Ÿฅง", "๐Ÿซ", "๐Ÿฌ", "๐Ÿญ", "๐Ÿฎ", "๐ŸŽ“", "๐Ÿผ", "๐ŸŽฎ", "๐Ÿ›น", "๐Ÿซ–", "๐ŸŒ",
"๐ŸŒŽ", "๐ŸŒ", "๐Ÿงญ", "๐ŸŒ ", "๐Ÿช", "๐Ÿช€", "๐Ÿงต", "๐Ÿงถ", "๐Ÿง‹", "๐ŸŽ‰", "๐Ÿช",
"๐Ÿ™ˆ", "๐Ÿ™‰", "๐Ÿ™Š"
];
const alphabetBytesToChars: string[] = alphabet.reduce<string[]>((p, c, i) => {
p[i] = c;
return p;
}, []);
const alphabetCharsToBytes: number[] = alphabet.reduce<number[]>((p, c, i) => {
p[c.codePointAt(0) as number] = i;
return p;
}, []);
export function encode(data: Uint8Array): string {
return data.reduce((p, c) => {
p += alphabetBytesToChars[c];
return p;
}, "");
}
export function decode(str: string): Uint8Array {
const byts = [];
for (const char of str) {
const byt = alphabetCharsToBytes[char.codePointAt(0) as number];
if (byt === undefined) {
throw new Error(`Non-base256kitten character: ${char}`);
}
byts.push(byt);
}
return new Uint8Array(byts);
}
Val Town is a social website to write and deploy JavaScript.
Build APIs and schedule functions from your browser.
Comments
Nobody has commented on this val yet: be the first!
March 6, 2024