@benev/slate
Version:
frontend web stuff
49 lines • 1.93 kB
JavaScript
import { Bytes } from "../bytes.js";
import { prefixes } from "./utils/prefixes.js";
import { suffixes } from "./utils/suffixes.js";
const wordSeparator = "_";
const groupSeparator = " ";
const defaultWordsPerGroup = 4;
export const Barname = {
random(byteCount) {
return this.string(Bytes.random(byteCount));
},
string(bytes, options) {
const groupSize = options?.wordsPerGroup ?? defaultWordsPerGroup;
const words = [];
let currentWord = [];
bytes.forEach((byte, index) => {
const source = ((index % 2) === 0) ? prefixes : suffixes;
currentWord.push(source[byte]);
if (currentWord.length === 2) {
words.push(currentWord.join(""));
currentWord = [];
}
});
if (currentWord.length)
words.push(currentWord.join(""));
const grouped = [];
for (let i = 0; i < words.length; i += groupSize)
grouped.push(words.slice(i, i + groupSize).join(wordSeparator));
return grouped.join(groupSeparator);
},
bytes(string) {
const letters = string
.toLowerCase()
.replace(/[^a-z]/g, ""); // strip everything except letters
const count = letters.length / 3;
if ((count % 1) !== 0)
throw new Error(`invalid triplet count, ${letters.length} does not divide into triplets`);
const triplets = [];
for (let i = 0; i < letters.length; i += 3)
triplets.push(letters.slice(i, i + 3));
return new Uint8Array(triplets.map((triplet, index) => {
const source = ((index % 2) === 0) ? prefixes : suffixes;
const number = source.findIndex(t => t === triplet);
if (number === -1)
throw new Error(`unknown triplet ${triplet}`);
return number;
}));
},
};
//# sourceMappingURL=barname.js.map