{"version":3,"file":"main.mjs","sources":["../../source/type.ts","../../source/Error/InvalidInput.ts","../../source/Error/DuplicateCharacter.ts","../../source/main.ts"],"sourcesContent":["/**\n * Simple type detection\n *\n * @param {*} input\n * @return {string} type\n */\nexport function type(input: unknown): string {\n\treturn input === null ? 'null' : Array.isArray(input) ? 'array' : typeof input;\n}\n","import { type } from '../type';\n\n/**\n * Error thrown if an Alphabet receives less characters than needed\n *\n * @class InvalidInputError\n * @extends {Error}\n */\nexport class InvalidInputError extends Error {\n\t/**\n\t * Creates an instance of InvalidInputError\n\t *\n\t * @memberof InvalidInputError\n\t */\n\tconstructor(source: unknown) {\n\t\tsuper(\n\t\t\t`Alphabets requires a string(able), got (${type(source)}) ${source}`\n\t\t);\n\n\t\tconst {\n\t\t\tconstructor,\n\t\t\tconstructor: { name }\n\t\t} = this;\n\t\tthis.name = name;\n\n\t\tError.captureStackTrace(this, constructor);\n\t}\n}\n","/**\n * Error thrown if an Alphabet receives duplicate characters\n *\n * @class DuplicateCharacterError\n * @extends {Error}\n */\nexport class DuplicateCharacterError extends Error {\n\t/**\n\t * Creates an instance of DuplicateCharacterError\n\t *\n\t * @param {object} [meta={source, duplicate}]\n\t * @memberof DuplicateCharacterError\n\t */\n\tconstructor(source: string, duplicate: string) {\n\t\tsuper(\n\t\t\t`Alphabets cannot contain duplicate characters, found \"${duplicate}\" in \"${source}\"`\n\t\t);\n\n\t\tconst {\n\t\t\tconstructor,\n\t\t\tconstructor: { name }\n\t\t} = this;\n\t\tthis.name = name;\n\n\t\tError.captureStackTrace(this, constructor);\n\t}\n}\n","import { InvalidInputError as InvalidInput } from './Error/InvalidInput';\nimport { DuplicateCharacterError as DuplicateCharacter } from './Error/DuplicateCharacter';\nimport { type } from './type';\n\nconst storage = new WeakMap();\nconst defaultCharacters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';\nconst stringable = (input: unknown): boolean => /string|object/.test(type(input));\n\nexport const InvalidInputError = InvalidInput;\nexport const DuplicateCharacterError = DuplicateCharacter;\n\n/**\n * Immutable alphabet\n *\n * @class Alphabet\n */\nexport class Alphabet {\n\tconstructor(source: string = defaultCharacters) {\n\t\tconst characters = stringable(source) ? String(source) : '';\n\t\tconst alphabet = Array.from(characters);\n\t\tconst duplicate = alphabet.filter((v, i, a) => a.indexOf(v) !== i).join('');\n\n\t\tif (!characters.length) {\n\t\t\tthrow new InvalidInput(source);\n\t\t}\n\n\t\tif (duplicate.length) {\n\t\t\tthrow new DuplicateCharacter(characters, duplicate);\n\t\t}\n\n\t\tstorage.set(this, { characters, alphabet });\n\t}\n\n\t/**\n\t * Obtain the configured characters\n\t *\n\t * @readonly\n\t * @memberof Alphabet\n\t */\n\tget characters(): string {\n\t\tconst { characters } = storage.get(this);\n\n\t\treturn characters;\n\t}\n\n\t/**\n\t * Get the number of bytes of the alphabet\n\t *\n\t * @readonly\n\t * @memberof Alphabet\n\t */\n\tget byteLength(): number {\n\t\treturn this.characters.length;\n\t}\n\n\t/**\n\t * Get the character length of the alphabet\n\t *\n\t * @readonly\n\t * @memberof Alphabet\n\t */\n\tget length(): number {\n\t\tconst { alphabet: { length } } = storage.get(this);\n\n\t\treturn length;\n\t}\n\n\t/**\n\t * Extract part of the alphabet and return it as a (singleton) instance of alphabet\n\t *\n\t * @param {number} start\n\t * @param {number} end\n\t * @returns {Alphabet} instance\n\t * @memberof Alphabet\n\t */\n\tslice(start: number, end: number): Alphabet {\n\t\tconst { alphabet } = storage.get(this);\n\t\tconst { constructor: Ctor } = Object.getPrototypeOf(this);\n\n\t\treturn Ctor.from(alphabet.slice(start, end).join(''));\n\t}\n\n\t/**\n\t * Get the character at given index\n\t *\n\t * @param {number} index\n\t * @returns {string} char\n\t * @memberof Alphabet\n\t */\n\tcharAt(index: number): string {\n\t\tconst { alphabet } = storage.get(this);\n\n\t\treturn alphabet[index];\n\t}\n\n\t/**\n\t * Get the character code at given index\n\t *\n\t * @param {numer} index\n\t * @returns {number} charcode\n\t * @memberof Alphabet\n\t */\n\tcharCodeAt(index: number): number | undefined {\n\t\tconst { characters, length } = this;\n\n\t\treturn index >= 0 && index < length ? characters.charCodeAt(index) : undefined;\n\t}\n\n\t/**\n\t * Get the code point at given index\n\t *\n\t * @param {numer} index\n\t * @returns {number} codepoint\n\t * @memberof Alphabet\n\t */\n\tcodePointAt(index: number): number | undefined {\n\t\tconst char = this.charAt(index);\n\n\t\treturn char ? char.codePointAt(0) : undefined;\n\t}\n\n\t/**\n\t * Get the index of the given character\n\t *\n\t * @param {string} char\n\t * @returns {number} index\n\t * @memberof Alphabet\n\t */\n\tindexOf(char: string): number {\n\t\tconst { alphabet } = storage.get(this);\n\n\t\treturn alphabet.indexOf(char);\n\t}\n\n\t/**\n\t * Map any amount of indices to the corresponding characters (wrapping the\n\t * indices around if they exceed the length of the alphabet)\n\t *\n\t * @param {number} ...list\n\t * @returns {string} [char]\n\t * @memberof Alphabet\n\t */\n\tmap(...list: Array<number>): Array<string> {\n\t\tconst { length } = this;\n\t\tconst normal = (index: number): number => index < 0 ? normal(length + index) : index;\n\n\t\treturn list.map((index) => this.charAt(normal(index) % length));\n\t}\n\n\t/**\n\t * Convert the Alphabet into a string\n\t *\n\t * @returns {string} chars\n\t * @memberof Alphabet\n\t */\n\ttoString(): string {\n\t\treturn this.characters;\n\t}\n\n\t/**\n\t * Ensure the Alphabet is properly JSON-stringified\n\t *\n\t * @returns\n\t * @memberof Alphabet\n\t */\n\ttoJSON(): string {\n\t\treturn String(this);\n\t}\n\n\t/**\n\t * Obtain a singleton instance of Alphabet representing the provided characters\n\t *\n\t * @static\n\t * @param {*} characters\n\t * @returns\n\t * @memberof Alphabet\n\t */\n\tstatic from(characters: string): Alphabet {\n\t\tif (!storage.has(this)) {\n\t\t\tstorage.set(this, new Map());\n\t\t}\n\n\t\tconst map = storage.get(this);\n\n\t\tif (!map.has(characters)) {\n\t\t\tmap.set(characters, new this(characters));\n\t\t}\n\n\t\treturn map.get(characters);\n\t}\n}\n"],"names":["InvalidInput","DuplicateCharacter"],"mappings":"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"}