Package Exports
- basepura
- basepura/dist/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (basepura) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
Basepura
Introduction
Basepura is an encoding scheme that converts integers into human-readable strings while preventing accidental offensive words in Latin alphabet languages. This npm package provides a dependency-free TypeScript implementation.
Problem
Standard base-N encoding schemes (Base32, Base36, Base64 etc.) can inadvertently generate offensive substrings when creating public-facing identifiers. Crockford's Base32 partially addresses this but still permits problematic words like twat and merde. Removing vowels is insufficient as obscenities like zmrd (fucker in Czech/Slovak) and acronyms like BDSM remain possible. Digits also enable leetspeak variants (sh1t, 0rg4sm).
Solution
Basepura uses a carefully selected character set to minimize offensive word generation. The encoding has been verified against offensive terms in over 20 languages.
Basepura character set
BCDGHJKLNPQRSTWZbcdghjklnpqrstwz (32 characters)
Excluded characters
| Characters | Reason for exclusion |
|---|---|
A, a |
fag, twat... |
E, e |
sex, merde... |
F, f |
WTF, af... |
I, i |
clit, dick... |
M, m |
BDSM, zmrd... |
O, o |
homo, sodomy... |
U, u |
fuck, cunt... |
V, v |
Resemble U, u |
X, x |
xxx, shxt... |
Y, y |
dirty, doggy... |
Installation
npm i basepura
Usage
import { encode, decode, isBasepura } from 'basepura';
// Encoding a bigint
const numberToEncode = 12345678901234567890n;
const encodedString = encode(numberToEncode);
console.log(`Encoded ${numberToEncode} to: ${encodedString}`);
// Encoded 12345678901234567890n to: QkjJPcgjcwDkd
// Validating a string
const validString = 'QkjJPcgjcwDkd';
const invalidString = 'Hello123';
console.log(`Is ${validString} valid Basepura? ${isBasepura(validString)}`);
// Is QkjJPcgjcwDkd valid Basepura? true
console.log(`Is ${invalidString} valid Basepura? ${isBasepura(invalidString)}`);
// Is Hello123 valid Basepura? false
// Decoding a string
const stringToDecode = 'QkjJPcgjcwDkd';
const decodedNumber = decode(stringToDecode);
console.log(`Decoded ${stringToDecode} to: ${decodedNumber}`);
// Decoded QkjJPcgjcwDkd to: 12345678901234567890n
// Handling errors
try {
decode('Invalid');
} catch (e) {
console.error(e);
// RangeError: Invalid character in input.
}
try {
encode(-1n);
} catch (e) {
console.error(e);
// RangeError: Input must be a non-negative integer.
}License
MIT