diff --git a/dist/hashids.js b/dist/hashids.js index 0e87d34..183999e 100644 --- a/dist/hashids.js +++ b/dist/hashids.js @@ -58,12 +58,9 @@ throw new TypeError("Hashids: Provided alphabet has to be a string (is " + typeof alphabet + ")"); } - var saltChars = _toConsumableArray(salt); - - var alphabetChars = _toConsumableArray(alphabet); - - var sepsChars = _toConsumableArray(seps); - + var saltChars = Array.from(salt); + var alphabetChars = Array.from(alphabet); + var sepsChars = Array.from(seps); this.salt = saltChars; var uniqueAlphabet = keepUnique(alphabetChars); @@ -106,9 +103,9 @@ this.alphabet = this.alphabet.slice(guardCount); } - this.guardsRegExp = makeAnyCharRegExp(this.guards); - this.sepsRegExp = makeAnyCharRegExp(this.seps); - this.allowedCharsRegExp = makeEveryCharRegExp([].concat(_toConsumableArray(this.alphabet), _toConsumableArray(this.guards), _toConsumableArray(this.seps))); + this.guardsRegExp = makeAnyOfCharsRegExp(this.guards); + this.sepsRegExp = makeAnyOfCharsRegExp(this.seps); + this.allowedCharsRegExp = makeAtLeastSomeCharRegExp([].concat(_toConsumableArray(this.alphabet), _toConsumableArray(this.guards), _toConsumableArray(this.seps))); } var _proto = Hashids.prototype; @@ -205,8 +202,7 @@ numbers.forEach(function (number, i) { var _ret; - var buffer = lottery.concat(_this.salt, alphabet); // const buffer = [...lottery, ...this.salt, ...alphabet] - + var buffer = lottery.concat(_this.salt, alphabet); alphabet = shuffle(alphabet, buffer); var last = toAlphabet(number, alphabet); @@ -252,34 +248,20 @@ }; _proto.isValidId = function isValidId(id) { - return this.allowedCharsRegExp.test(id); // return this._isValidId([...id]) - } // private _isValidId(idChars: string[]): boolean { - // return idChars.every( - // (char) => - // this.alphabet.includes(char) || - // this.guards.includes(char) || - // this.seps.includes(char), - // ) - // } - ; + return this.allowedCharsRegExp.test(id); + }; _proto._decode = function _decode(id) { if (!this.isValidId(id)) { throw new Error("The provided ID (" + id + ") is invalid, as it contains characters that do not exist in the alphabet (" + this.guards.join('') + this.seps.join('') + this.alphabet.join('') + ")"); } - var idGuardsArray = id.split(this.guardsRegExp); // splitAtMatch(idChars, (char) => - // this.guards.includes(char), - // ) - + var idGuardsArray = id.split(this.guardsRegExp); var splitIndex = idGuardsArray.length === 3 || idGuardsArray.length === 2 ? 1 : 0; var idBreakdown = idGuardsArray[splitIndex]; if (idBreakdown.length === 0) return []; var lotteryChar = idBreakdown[Symbol.iterator]().next().value; - var idArray = idBreakdown.slice(lotteryChar.length).split(this.sepsRegExp); // const idBreakdownArray = [...idBreakdown] - // const [lotteryChar, ...rest] = idBreakdownArray - // const idArray = rest.join('').split(this.sepsRegExp) - + var idArray = idBreakdown.slice(lotteryChar.length).split(this.sepsRegExp); var lastAlphabet = this.alphabet; var result = []; @@ -298,15 +280,12 @@ var subId = _ref; var buffer = [lotteryChar].concat(_toConsumableArray(this.salt), _toConsumableArray(lastAlphabet)); var nextAlphabet = shuffle(lastAlphabet, buffer.slice(0, lastAlphabet.length)); - result.push(fromAlphabet(_toConsumableArray(subId), nextAlphabet)); + result.push(fromAlphabet(Array.from(subId), nextAlphabet)); lastAlphabet = nextAlphabet; } // if the result is different from what we'd expect, we return an empty result (malformed input): - if (this._encode(result).join('') !== id) return []; // if (this._encode(result).some((char, index) => idChars[index] !== char)) { - // return [] - // } - + if (this._encode(result).join('') !== id) return []; return result; }; @@ -432,7 +411,7 @@ }); }; - var makeAnyCharRegExp = function makeAnyCharRegExp(chars) { + var makeAnyOfCharsRegExp = function makeAnyOfCharsRegExp(chars) { return new RegExp(chars.map(function (char) { return escapeRegExp(char); }) // we need to sort these from longest to shortest, @@ -442,7 +421,7 @@ }).join('|')); }; - var makeEveryCharRegExp = function makeEveryCharRegExp(chars) { + var makeAtLeastSomeCharRegExp = function makeAtLeastSomeCharRegExp(chars) { return new RegExp("^[" + chars.map(function (char) { return escapeRegExp(char); }) // we need to sort these from longest to shortest, diff --git a/dist/hashids.js.map b/dist/hashids.js.map index a37b51a..512bb6e 100644 --- a/dist/hashids.js.map +++ b/dist/hashids.js.map @@ -1 +1 @@ -{"version":3,"sources":["../lib/hashids.ts"],"names":[],"mappings":"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","file":"hashids.js","sourcesContent":["type NumberLike = number | bigint\n\nexport default class Hashids {\n private alphabet: string[]\n private seps: string[]\n private guards: string[]\n private salt: string[]\n private guardsRegExp: RegExp\n private sepsRegExp: RegExp\n private allowedCharsRegExp: RegExp\n\n public constructor(\n salt = '',\n private minLength = 0,\n alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890',\n seps = 'cfhistuCFHISTU',\n ) {\n if (typeof minLength !== 'number') {\n throw new TypeError(\n `Hashids: Provided 'minLength' has to be a number (is ${typeof minLength})`,\n )\n }\n if (typeof salt !== 'string') {\n throw new TypeError(\n `Hashids: Provided 'salt' has to be a string (is ${typeof salt})`,\n )\n }\n if (typeof alphabet !== 'string') {\n throw new TypeError(\n `Hashids: Provided alphabet has to be a string (is ${typeof alphabet})`,\n )\n }\n\n const saltChars = [...salt]\n const alphabetChars = [...alphabet]\n const sepsChars = [...seps]\n\n this.salt = saltChars\n\n const uniqueAlphabet = keepUnique(alphabetChars)\n\n if (uniqueAlphabet.length < minAlphabetLength) {\n throw new Error(\n `Hashids: alphabet must contain at least ${minAlphabetLength} unique characters, provided: ${uniqueAlphabet}`,\n )\n }\n\n /** `alphabet` should not contains `seps` */\n this.alphabet = withoutChars(uniqueAlphabet, sepsChars)\n /** `seps` should contain only characters present in `alphabet` */\n const filteredSeps = onlyChars(sepsChars, uniqueAlphabet)\n this.seps = shuffle(filteredSeps, saltChars)\n\n let sepsLength\n let diff\n\n if (\n this.seps.length === 0 ||\n this.alphabet.length / this.seps.length > sepDiv\n ) {\n sepsLength = Math.ceil(this.alphabet.length / sepDiv)\n\n if (sepsLength > this.seps.length) {\n diff = sepsLength - this.seps.length\n this.seps.push(...this.alphabet.slice(0, diff))\n this.alphabet = this.alphabet.slice(diff)\n }\n }\n\n this.alphabet = shuffle(this.alphabet, saltChars)\n const guardCount = Math.ceil(this.alphabet.length / guardDiv)\n\n if (this.alphabet.length < 3) {\n this.guards = this.seps.slice(0, guardCount)\n this.seps = this.seps.slice(guardCount)\n } else {\n this.guards = this.alphabet.slice(0, guardCount)\n this.alphabet = this.alphabet.slice(guardCount)\n }\n\n this.guardsRegExp = makeAnyCharRegExp(this.guards)\n this.sepsRegExp = makeAnyCharRegExp(this.seps)\n this.allowedCharsRegExp = makeEveryCharRegExp([\n ...this.alphabet,\n ...this.guards,\n ...this.seps,\n ])\n }\n\n public encode(numbers: string): string\n public encode(numbers: NumberLike[]): string\n public encode(...numbers: NumberLike[]): string\n public encode(numbers: string[]): string\n public encode(...numbers: string[]): string\n public encode(\n first: T[] | T,\n ...numbers: T[]\n ): string {\n const ret = ''\n\n if (Array.isArray(first)) {\n numbers = first\n } else {\n // eslint-disable-next-line eqeqeq\n numbers = [...(first != null ? [first] : []), ...numbers]\n }\n\n if (!numbers.length) {\n return ret\n }\n\n if (!numbers.every(isIntegerNumber)) {\n numbers = numbers.map((n) =>\n typeof n === 'bigint' || typeof n === 'number'\n ? n\n : safeParseInt10(String(n)),\n ) as T[]\n }\n\n if (!(numbers as NumberLike[]).every(isPositiveAndFinite)) {\n return ret\n }\n\n return this._encode(numbers as number[]).join('')\n }\n\n public decode(id: string): NumberLike[] {\n if (!id || typeof id !== 'string' || id.length === 0) return []\n return this._decode(id)\n }\n\n /**\n * @description Splits a hex string into groups of 12-digit hexadecimal numbers,\n * then prefixes each with '1' and encodes the resulting array of numbers\n *\n * Encoding '00000000000f00000000000f000f' would be the equivalent of:\n * Hashids.encode([0x100000000000f, 0x100000000000f, 0x1000f])\n *\n * This means that if your environment supports BigInts,\n * you will get different (shorter) results if you provide\n * a BigInt representation of your hex and use `encode` directly, e.g.:\n * Hashids.encode(BigInt(`0x${hex}`))\n *\n * To decode such a representation back to a hex string, use the following snippet:\n * Hashids.decode(id)[0].toString(16)\n */\n public encodeHex(hex: string | bigint): string {\n switch (typeof hex) {\n case 'bigint':\n hex = hex.toString(16)\n break\n case 'string':\n if (!/^[0-9a-fA-F]+$/.test(hex)) return ''\n break\n default:\n throw new Error(\n `Hashids: The provided value is neither a string, nor a BigInt (got: ${typeof hex})`,\n )\n }\n\n const numbers = splitAtIntervalAndMap(hex, 12, (part) =>\n parseInt(`1${part}`, 16),\n )\n return this.encode(numbers)\n }\n\n public decodeHex(id: string) {\n return this.decode(id)\n .map((number) => number.toString(16).slice(1))\n .join('')\n }\n\n private _encode(numbers: NumberLike[]): string[] {\n let alphabet = this.alphabet\n\n const numbersIdInt = numbers.reduce(\n (last, number, i) =>\n last +\n (typeof number === 'bigint'\n ? Number(number % BigInt(i + 100))\n : number % (i + 100)),\n 0,\n )\n\n let ret: string[] = [alphabet[numbersIdInt % alphabet.length]]\n const lottery = ret.slice()\n\n const seps = this.seps\n const guards = this.guards\n\n numbers.forEach((number, i) => {\n const buffer = lottery.concat(this.salt, alphabet)\n // const buffer = [...lottery, ...this.salt, ...alphabet]\n\n alphabet = shuffle(alphabet, buffer)\n const last = toAlphabet(number, alphabet)\n\n ret.push(...last)\n\n if (i + 1 < numbers.length) {\n const charCode = last[0].codePointAt(0)! + i\n const extraNumber =\n typeof number === 'bigint'\n ? Number(number % BigInt(charCode))\n : number % charCode\n ret.push(seps[extraNumber % seps.length])\n }\n })\n\n if (ret.length < this.minLength) {\n const prefixGuardIndex =\n (numbersIdInt + ret[0].codePointAt(0)!) % guards.length\n ret.unshift(guards[prefixGuardIndex])\n\n if (ret.length < this.minLength) {\n const suffixGuardIndex =\n (numbersIdInt + ret[2].codePointAt(0)!) % guards.length\n ret.push(guards[suffixGuardIndex])\n }\n }\n\n const halfLength = Math.floor(alphabet.length / 2)\n while (ret.length < this.minLength) {\n alphabet = shuffle(alphabet, alphabet)\n ret.unshift(...alphabet.slice(halfLength))\n ret.push(...alphabet.slice(0, halfLength))\n\n const excess = ret.length - this.minLength\n if (excess > 0) {\n const halfOfExcess = excess / 2\n ret = ret.slice(halfOfExcess, halfOfExcess + this.minLength)\n }\n }\n\n return ret\n }\n\n public isValidId(id: string): boolean {\n return this.allowedCharsRegExp.test(id)\n // return this._isValidId([...id])\n }\n\n // private _isValidId(idChars: string[]): boolean {\n // return idChars.every(\n // (char) =>\n // this.alphabet.includes(char) ||\n // this.guards.includes(char) ||\n // this.seps.includes(char),\n // )\n // }\n\n private _decode(id: string): NumberLike[] {\n if (!this.isValidId(id)) {\n throw new Error(\n `The provided ID (${id}) is invalid, as it contains characters that do not exist in the alphabet (${this.guards.join(\n '',\n )}${this.seps.join('')}${this.alphabet.join('')})`,\n )\n }\n const idGuardsArray = id.split(this.guardsRegExp)\n // splitAtMatch(idChars, (char) =>\n // this.guards.includes(char),\n // )\n const splitIndex =\n idGuardsArray.length === 3 || idGuardsArray.length === 2 ? 1 : 0\n\n const idBreakdown = idGuardsArray[splitIndex]\n if (idBreakdown.length === 0) return []\n\n const lotteryChar = idBreakdown[Symbol.iterator]().next().value as string\n const idArray = idBreakdown.slice(lotteryChar.length).split(this.sepsRegExp)\n\n // const idBreakdownArray = [...idBreakdown]\n // const [lotteryChar, ...rest] = idBreakdownArray\n // const idArray = rest.join('').split(this.sepsRegExp)\n\n let lastAlphabet: string[] = this.alphabet\n const result: NumberLike[] = []\n\n for (const subId of idArray) {\n const buffer = [lotteryChar, ...this.salt, ...lastAlphabet]\n const nextAlphabet = shuffle(\n lastAlphabet,\n buffer.slice(0, lastAlphabet.length),\n )\n result.push(fromAlphabet([...subId], nextAlphabet))\n lastAlphabet = nextAlphabet\n }\n\n // if the result is different from what we'd expect, we return an empty result (malformed input):\n if (this._encode(result).join('') !== id) return []\n // if (this._encode(result).some((char, index) => idChars[index] !== char)) {\n // return []\n // }\n return result\n }\n}\n\nconst minAlphabetLength = 16\nconst sepDiv = 3.5\nconst guardDiv = 12\n\nexport const keepUnique = (content: Iterable): T[] =>\n Array.from(new Set(content))\n\nexport const withoutChars = (\n chars: string[],\n withoutChars: string[],\n): string[] => chars.filter((char) => !withoutChars.includes(char))\n\nexport const onlyChars = (chars: string[], keepChars: string[]): string[] =>\n chars.filter((char) => keepChars.includes(char))\n\nconst isIntegerNumber = (n: NumberLike | string) =>\n typeof n === 'bigint' ||\n (!Number.isNaN(Number(n)) && Math.floor(Number(n)) === n)\n\nconst isPositiveAndFinite = (n: NumberLike) =>\n typeof n === 'bigint' || (n >= 0 && Number.isSafeInteger(n))\n\nfunction shuffle(alphabetChars: string[], saltChars: string[]): string[] {\n if (saltChars.length === 0) {\n return alphabetChars\n }\n\n let integer: number\n const transformed = alphabetChars.slice()\n\n for (let i = transformed.length - 1, v = 0, p = 0; i > 0; i--, v++) {\n v %= saltChars.length\n p += integer = saltChars[v].codePointAt(0)!\n const j = (integer + v + p) % i\n\n // swap characters at positions i and j\n const a = transformed[i]\n const b = transformed[j]\n transformed[j] = a\n transformed[i] = b\n }\n\n return transformed\n}\n\nconst toAlphabet = (input: NumberLike, alphabetChars: string[]): string[] => {\n const id: string[] = []\n\n if (typeof input === 'bigint') {\n const alphabetLength = BigInt(alphabetChars.length)\n do {\n id.unshift(alphabetChars[Number(input % alphabetLength)])\n input = input / alphabetLength\n } while (input > BigInt(0))\n } else {\n do {\n id.unshift(alphabetChars[input % alphabetChars.length])\n input = Math.floor(input / alphabetChars.length)\n } while (input > 0)\n }\n\n return id\n}\n\nconst fromAlphabet = (\n inputChars: string[],\n alphabetChars: string[],\n): NumberLike =>\n inputChars.reduce((carry, item) => {\n const index = alphabetChars.indexOf(item)\n if (index === -1) {\n throw new Error(\n `The provided ID (${inputChars.join(\n '',\n )}) is invalid, as it contains characters that do not exist in the alphabet (${alphabetChars.join(\n '',\n )})`,\n )\n }\n if (typeof carry === 'bigint') {\n return carry * BigInt(alphabetChars.length) + BigInt(index)\n }\n const value = carry * alphabetChars.length + index\n const isSafeValue = Number.isSafeInteger(value)\n if (isSafeValue) {\n return value\n } else {\n if (typeof BigInt === 'function') {\n return BigInt(carry) * BigInt(alphabetChars.length) + BigInt(index)\n } else {\n // we do not have support for BigInt:\n throw new Error(\n `Unable to decode the provided string, due to lack of support for BigInt numbers in the current environment`,\n )\n }\n }\n }, 0 as NumberLike)\n\nconst safeToParseNumberRegExp = /^\\+?[0-9]+$/\nconst safeParseInt10 = (str: string) =>\n safeToParseNumberRegExp.test(str) ? parseInt(str, 10) : NaN\n\nconst splitAtIntervalAndMap = (\n str: string,\n nth: number,\n map: (n: string) => T,\n): T[] =>\n Array.from({length: Math.ceil(str.length / nth)}, (_, index) =>\n map(str.slice(index * nth, (index + 1) * nth)),\n )\n\nconst makeAnyCharRegExp = (chars: string[]) =>\n new RegExp(\n chars\n .map((char) => escapeRegExp(char))\n // we need to sort these from longest to shortest,\n // as they may contain multibyte unicode characters (these should come first)\n .sort((a, b) => b.length - a.length)\n .join('|'),\n )\n\nconst makeEveryCharRegExp = (chars: string[]) =>\n new RegExp(\n `^[${chars\n .map((char) => escapeRegExp(char))\n // we need to sort these from longest to shortest,\n // as they may contain multibyte unicode characters (these should come first)\n .sort((a, b) => b.length - a.length)\n .join('')}]+$`,\n )\n\nconst escapeRegExp = (text: string) =>\n text.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&')\n"]} \ No newline at end of file +{"version":3,"sources":["../lib/hashids.ts"],"names":[],"mappings":"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","file":"hashids.js","sourcesContent":["type NumberLike = number | bigint\n\nexport default class Hashids {\n private alphabet: string[]\n private seps: string[]\n private guards: string[]\n private salt: string[]\n private guardsRegExp: RegExp\n private sepsRegExp: RegExp\n private allowedCharsRegExp: RegExp\n\n public constructor(\n salt = '',\n private minLength = 0,\n alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890',\n seps = 'cfhistuCFHISTU',\n ) {\n if (typeof minLength !== 'number') {\n throw new TypeError(\n `Hashids: Provided 'minLength' has to be a number (is ${typeof minLength})`,\n )\n }\n if (typeof salt !== 'string') {\n throw new TypeError(\n `Hashids: Provided 'salt' has to be a string (is ${typeof salt})`,\n )\n }\n if (typeof alphabet !== 'string') {\n throw new TypeError(\n `Hashids: Provided alphabet has to be a string (is ${typeof alphabet})`,\n )\n }\n\n const saltChars = Array.from(salt)\n const alphabetChars = Array.from(alphabet)\n const sepsChars = Array.from(seps)\n\n this.salt = saltChars\n\n const uniqueAlphabet = keepUnique(alphabetChars)\n\n if (uniqueAlphabet.length < minAlphabetLength) {\n throw new Error(\n `Hashids: alphabet must contain at least ${minAlphabetLength} unique characters, provided: ${uniqueAlphabet}`,\n )\n }\n\n /** `alphabet` should not contains `seps` */\n this.alphabet = withoutChars(uniqueAlphabet, sepsChars)\n /** `seps` should contain only characters present in `alphabet` */\n const filteredSeps = onlyChars(sepsChars, uniqueAlphabet)\n this.seps = shuffle(filteredSeps, saltChars)\n\n let sepsLength\n let diff\n\n if (\n this.seps.length === 0 ||\n this.alphabet.length / this.seps.length > sepDiv\n ) {\n sepsLength = Math.ceil(this.alphabet.length / sepDiv)\n\n if (sepsLength > this.seps.length) {\n diff = sepsLength - this.seps.length\n this.seps.push(...this.alphabet.slice(0, diff))\n this.alphabet = this.alphabet.slice(diff)\n }\n }\n\n this.alphabet = shuffle(this.alphabet, saltChars)\n const guardCount = Math.ceil(this.alphabet.length / guardDiv)\n\n if (this.alphabet.length < 3) {\n this.guards = this.seps.slice(0, guardCount)\n this.seps = this.seps.slice(guardCount)\n } else {\n this.guards = this.alphabet.slice(0, guardCount)\n this.alphabet = this.alphabet.slice(guardCount)\n }\n\n this.guardsRegExp = makeAnyOfCharsRegExp(this.guards)\n this.sepsRegExp = makeAnyOfCharsRegExp(this.seps)\n this.allowedCharsRegExp = makeAtLeastSomeCharRegExp([\n ...this.alphabet,\n ...this.guards,\n ...this.seps,\n ])\n }\n\n public encode(numbers: string): string\n public encode(numbers: NumberLike[]): string\n public encode(...numbers: NumberLike[]): string\n public encode(numbers: string[]): string\n public encode(...numbers: string[]): string\n public encode(\n first: T[] | T,\n ...numbers: T[]\n ): string {\n const ret = ''\n\n if (Array.isArray(first)) {\n numbers = first\n } else {\n // eslint-disable-next-line eqeqeq\n numbers = [...(first != null ? [first] : []), ...numbers]\n }\n\n if (!numbers.length) {\n return ret\n }\n\n if (!numbers.every(isIntegerNumber)) {\n numbers = numbers.map((n) =>\n typeof n === 'bigint' || typeof n === 'number'\n ? n\n : safeParseInt10(String(n)),\n ) as T[]\n }\n\n if (!(numbers as NumberLike[]).every(isPositiveAndFinite)) {\n return ret\n }\n\n return this._encode(numbers as number[]).join('')\n }\n\n public decode(id: string): NumberLike[] {\n if (!id || typeof id !== 'string' || id.length === 0) return []\n return this._decode(id)\n }\n\n /**\n * @description Splits a hex string into groups of 12-digit hexadecimal numbers,\n * then prefixes each with '1' and encodes the resulting array of numbers\n *\n * Encoding '00000000000f00000000000f000f' would be the equivalent of:\n * Hashids.encode([0x100000000000f, 0x100000000000f, 0x1000f])\n *\n * This means that if your environment supports BigInts,\n * you will get different (shorter) results if you provide\n * a BigInt representation of your hex and use `encode` directly, e.g.:\n * Hashids.encode(BigInt(`0x${hex}`))\n *\n * To decode such a representation back to a hex string, use the following snippet:\n * Hashids.decode(id)[0].toString(16)\n */\n public encodeHex(hex: string | bigint): string {\n switch (typeof hex) {\n case 'bigint':\n hex = hex.toString(16)\n break\n case 'string':\n if (!/^[0-9a-fA-F]+$/.test(hex)) return ''\n break\n default:\n throw new Error(\n `Hashids: The provided value is neither a string, nor a BigInt (got: ${typeof hex})`,\n )\n }\n\n const numbers = splitAtIntervalAndMap(hex, 12, (part) =>\n parseInt(`1${part}`, 16),\n )\n return this.encode(numbers)\n }\n\n public decodeHex(id: string) {\n return this.decode(id)\n .map((number) => number.toString(16).slice(1))\n .join('')\n }\n\n private _encode(numbers: NumberLike[]): string[] {\n let alphabet = this.alphabet\n\n const numbersIdInt = numbers.reduce(\n (last, number, i) =>\n last +\n (typeof number === 'bigint'\n ? Number(number % BigInt(i + 100))\n : number % (i + 100)),\n 0,\n )\n\n let ret: string[] = [alphabet[numbersIdInt % alphabet.length]]\n const lottery = ret.slice()\n\n const seps = this.seps\n const guards = this.guards\n\n numbers.forEach((number, i) => {\n const buffer = lottery.concat(this.salt, alphabet)\n\n alphabet = shuffle(alphabet, buffer)\n const last = toAlphabet(number, alphabet)\n\n ret.push(...last)\n\n if (i + 1 < numbers.length) {\n const charCode = last[0].codePointAt(0)! + i\n const extraNumber =\n typeof number === 'bigint'\n ? Number(number % BigInt(charCode))\n : number % charCode\n ret.push(seps[extraNumber % seps.length])\n }\n })\n\n if (ret.length < this.minLength) {\n const prefixGuardIndex =\n (numbersIdInt + ret[0].codePointAt(0)!) % guards.length\n ret.unshift(guards[prefixGuardIndex])\n\n if (ret.length < this.minLength) {\n const suffixGuardIndex =\n (numbersIdInt + ret[2].codePointAt(0)!) % guards.length\n ret.push(guards[suffixGuardIndex])\n }\n }\n\n const halfLength = Math.floor(alphabet.length / 2)\n while (ret.length < this.minLength) {\n alphabet = shuffle(alphabet, alphabet)\n ret.unshift(...alphabet.slice(halfLength))\n ret.push(...alphabet.slice(0, halfLength))\n\n const excess = ret.length - this.minLength\n if (excess > 0) {\n const halfOfExcess = excess / 2\n ret = ret.slice(halfOfExcess, halfOfExcess + this.minLength)\n }\n }\n\n return ret\n }\n\n public isValidId(id: string): boolean {\n return this.allowedCharsRegExp.test(id)\n }\n\n private _decode(id: string): NumberLike[] {\n if (!this.isValidId(id)) {\n throw new Error(\n `The provided ID (${id}) is invalid, as it contains characters that do not exist in the alphabet (${this.guards.join(\n '',\n )}${this.seps.join('')}${this.alphabet.join('')})`,\n )\n }\n const idGuardsArray = id.split(this.guardsRegExp)\n const splitIndex =\n idGuardsArray.length === 3 || idGuardsArray.length === 2 ? 1 : 0\n\n const idBreakdown = idGuardsArray[splitIndex]\n if (idBreakdown.length === 0) return []\n\n const lotteryChar = idBreakdown[Symbol.iterator]().next().value as string\n const idArray = idBreakdown.slice(lotteryChar.length).split(this.sepsRegExp)\n\n let lastAlphabet: string[] = this.alphabet\n const result: NumberLike[] = []\n\n for (const subId of idArray) {\n const buffer = [lotteryChar, ...this.salt, ...lastAlphabet]\n const nextAlphabet = shuffle(\n lastAlphabet,\n buffer.slice(0, lastAlphabet.length),\n )\n result.push(fromAlphabet(Array.from(subId), nextAlphabet))\n lastAlphabet = nextAlphabet\n }\n\n // if the result is different from what we'd expect, we return an empty result (malformed input):\n if (this._encode(result).join('') !== id) return []\n return result\n }\n}\n\nconst minAlphabetLength = 16\nconst sepDiv = 3.5\nconst guardDiv = 12\n\nexport const keepUnique = (content: Iterable): T[] =>\n Array.from(new Set(content))\n\nexport const withoutChars = (\n chars: string[],\n withoutChars: string[],\n): string[] => chars.filter((char) => !withoutChars.includes(char))\n\nexport const onlyChars = (chars: string[], keepChars: string[]): string[] =>\n chars.filter((char) => keepChars.includes(char))\n\nconst isIntegerNumber = (n: NumberLike | string) =>\n typeof n === 'bigint' ||\n (!Number.isNaN(Number(n)) && Math.floor(Number(n)) === n)\n\nconst isPositiveAndFinite = (n: NumberLike) =>\n typeof n === 'bigint' || (n >= 0 && Number.isSafeInteger(n))\n\nfunction shuffle(alphabetChars: string[], saltChars: string[]): string[] {\n if (saltChars.length === 0) {\n return alphabetChars\n }\n\n let integer: number\n const transformed = alphabetChars.slice()\n\n for (let i = transformed.length - 1, v = 0, p = 0; i > 0; i--, v++) {\n v %= saltChars.length\n p += integer = saltChars[v].codePointAt(0)!\n const j = (integer + v + p) % i\n\n // swap characters at positions i and j\n const a = transformed[i]\n const b = transformed[j]\n transformed[j] = a\n transformed[i] = b\n }\n\n return transformed\n}\n\nconst toAlphabet = (input: NumberLike, alphabetChars: string[]): string[] => {\n const id: string[] = []\n\n if (typeof input === 'bigint') {\n const alphabetLength = BigInt(alphabetChars.length)\n do {\n id.unshift(alphabetChars[Number(input % alphabetLength)])\n input = input / alphabetLength\n } while (input > BigInt(0))\n } else {\n do {\n id.unshift(alphabetChars[input % alphabetChars.length])\n input = Math.floor(input / alphabetChars.length)\n } while (input > 0)\n }\n\n return id\n}\n\nconst fromAlphabet = (\n inputChars: string[],\n alphabetChars: string[],\n): NumberLike =>\n inputChars.reduce((carry, item) => {\n const index = alphabetChars.indexOf(item)\n if (index === -1) {\n throw new Error(\n `The provided ID (${inputChars.join(\n '',\n )}) is invalid, as it contains characters that do not exist in the alphabet (${alphabetChars.join(\n '',\n )})`,\n )\n }\n if (typeof carry === 'bigint') {\n return carry * BigInt(alphabetChars.length) + BigInt(index)\n }\n const value = carry * alphabetChars.length + index\n const isSafeValue = Number.isSafeInteger(value)\n if (isSafeValue) {\n return value\n } else {\n if (typeof BigInt === 'function') {\n return BigInt(carry) * BigInt(alphabetChars.length) + BigInt(index)\n } else {\n // we do not have support for BigInt:\n throw new Error(\n `Unable to decode the provided string, due to lack of support for BigInt numbers in the current environment`,\n )\n }\n }\n }, 0 as NumberLike)\n\nconst safeToParseNumberRegExp = /^\\+?[0-9]+$/\nconst safeParseInt10 = (str: string) =>\n safeToParseNumberRegExp.test(str) ? parseInt(str, 10) : NaN\n\nconst splitAtIntervalAndMap = (\n str: string,\n nth: number,\n map: (n: string) => T,\n): T[] =>\n Array.from({length: Math.ceil(str.length / nth)}, (_, index) =>\n map(str.slice(index * nth, (index + 1) * nth)),\n )\n\nconst makeAnyOfCharsRegExp = (chars: string[]) =>\n new RegExp(\n chars\n .map((char) => escapeRegExp(char))\n // we need to sort these from longest to shortest,\n // as they may contain multibyte unicode characters (these should come first)\n .sort((a, b) => b.length - a.length)\n .join('|'),\n )\n\nconst makeAtLeastSomeCharRegExp = (chars: string[]) =>\n new RegExp(\n `^[${chars\n .map((char) => escapeRegExp(char))\n // we need to sort these from longest to shortest,\n // as they may contain multibyte unicode characters (these should come first)\n .sort((a, b) => b.length - a.length)\n .join('')}]+$`,\n )\n\nconst escapeRegExp = (text: string) =>\n text.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&')\n"]} \ No newline at end of file diff --git a/dist/hashids.min.js b/dist/hashids.min.js index 8ffe330..b5a1320 100644 --- a/dist/hashids.min.js +++ b/dist/hashids.min.js @@ -1,2 +1,2 @@ -!function(t,e){if("function"==typeof define&&define.amd)define("Hashids",["exports"],e);else if("undefined"!=typeof exports)e(exports);else{var n={exports:{}};e(n.exports),t.Hashids=n.exports}}("undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:this,(function(t){"use strict";function e(t){return function(t){if(Array.isArray(t)){for(var e=0,n=new Array(t.length);er)&&((b=Math.ceil(this.alphabet.length/r))>this.seps.length&&(m=b-this.seps.length,(w=this.seps).push.apply(w,e(this.alphabet.slice(0,m))),this.alphabet=this.alphabet.slice(m)));this.alphabet=f(this.alphabet,p);var x=Math.ceil(this.alphabet.length/s);this.alphabet.length<3?(this.guards=this.seps.slice(0,x),this.seps=this.seps.slice(x)):(this.guards=this.alphabet.slice(0,x),this.alphabet=this.alphabet.slice(x)),this.guardsRegExp=v(this.guards),this.sepsRegExp=v(this.seps),this.allowedCharsRegExp=y([].concat(e(this.alphabet),e(this.guards),e(this.seps)))}var n=t.prototype;return n.encode=function(t){for(var n=arguments.length,i=new Array(n>1?n-1:0),r=1;r0){var v=b/2;s=s.slice(v,v+this.minLength)}}return s},n.isValidId=function(t){return this.allowedCharsRegExp.test(t)},n._decode=function(t){if(!this.isValidId(t))throw new Error("The provided ID ("+t+") is invalid, as it contains characters that do not exist in the alphabet ("+this.guards.join("")+this.seps.join("")+this.alphabet.join("")+")");var n=t.split(this.guardsRegExp),i=n[3===n.length||2===n.length?1:0];if(0===i.length)return[];var r=i[Symbol.iterator]().next().value,s=i.slice(r.length).split(this.sepsRegExp),o=this.alphabet,a=[],h=s,l=Array.isArray(h),u=0;for(h=l?h:h[Symbol.iterator]();;){var p;if(l){if(u>=h.length)break;p=h[u++]}else{if((u=h.next()).done)break;p=u.value}var g=p,d=f(o,[r].concat(e(this.salt),e(o)).slice(0,o.length));a.push(c(e(g),d)),o=d}return this._encode(a).join("")!==t?[]:a},t}();t.default=n;var i=16,r=3.5,s=12,o=function(t){return Array.from(new Set(t))};t.keepUnique=o;var a=function(t,e){return t.filter((function(t){return!e.includes(t)}))};t.withoutChars=a;var h=function(t,e){return t.filter((function(t){return e.includes(t)}))};t.onlyChars=h;var l=function(t){return"bigint"==typeof t||!Number.isNaN(Number(t))&&Math.floor(Number(t))===t},u=function(t){return"bigint"==typeof t||t>=0&&Number.isSafeInteger(t)};function f(t,e){if(0===e.length)return t;for(var n,i=t.slice(),r=i.length-1,s=0,o=0;r>0;r--,s++){o+=n=e[s%=e.length].codePointAt(0);var a=(n+s+o)%r,h=i[r],l=i[a];i[a]=h,i[r]=l}return i}var p=function(t,e){var n=[];if("bigint"==typeof t){var i=BigInt(e.length);do{n.unshift(e[Number(t%i)]),t/=i}while(t>BigInt(0))}else do{n.unshift(e[t%e.length]),t=Math.floor(t/e.length)}while(t>0);return n},c=function(t,e){return t.reduce((function(n,i){var r=e.indexOf(i);if(-1===r)throw new Error("The provided ID ("+t.join("")+") is invalid, as it contains characters that do not exist in the alphabet ("+e.join("")+")");if("bigint"==typeof n)return n*BigInt(e.length)+BigInt(r);var s=n*e.length+r;if(Number.isSafeInteger(s))return s;if("function"==typeof BigInt)return BigInt(n)*BigInt(e.length)+BigInt(r);throw new Error("Unable to decode the provided string, due to lack of support for BigInt numbers in the current environment")}),0)},g=/^\+?[0-9]+$/,d=function(t){return g.test(t)?parseInt(t,10):NaN},b=function(t,e,n){return Array.from({length:Math.ceil(t.length/e)},(function(i,r){return n(t.slice(r*e,(r+1)*e))}))},v=function(t){return new RegExp(t.map((function(t){return m(t)})).sort((function(t,e){return e.length-t.length})).join("|"))},y=function(t){return new RegExp("^["+t.map((function(t){return m(t)})).sort((function(t,e){return e.length-t.length})).join("")+"]+$")},m=function(t){return t.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")}})); +!function(t,e){if("function"==typeof define&&define.amd)define("Hashids",["exports"],e);else if("undefined"!=typeof exports)e(exports);else{var n={exports:{}};e(n.exports),t.Hashids=n.exports}}("undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:this,(function(t){"use strict";function e(t){return function(t){if(Array.isArray(t)){for(var e=0,n=new Array(t.length);ei)&&((b=Math.ceil(this.alphabet.length/i))>this.seps.length&&(m=b-this.seps.length,(w=this.seps).push.apply(w,e(this.alphabet.slice(0,m))),this.alphabet=this.alphabet.slice(m)));this.alphabet=f(this.alphabet,p);var x=Math.ceil(this.alphabet.length/s);this.alphabet.length<3?(this.guards=this.seps.slice(0,x),this.seps=this.seps.slice(x)):(this.guards=this.alphabet.slice(0,x),this.alphabet=this.alphabet.slice(x)),this.guardsRegExp=v(this.guards),this.sepsRegExp=v(this.seps),this.allowedCharsRegExp=y([].concat(e(this.alphabet),e(this.guards),e(this.seps)))}var n=t.prototype;return n.encode=function(t){for(var n=arguments.length,r=new Array(n>1?n-1:0),i=1;i0){var v=b/2;s=s.slice(v,v+this.minLength)}}return s},n.isValidId=function(t){return this.allowedCharsRegExp.test(t)},n._decode=function(t){if(!this.isValidId(t))throw new Error("The provided ID ("+t+") is invalid, as it contains characters that do not exist in the alphabet ("+this.guards.join("")+this.seps.join("")+this.alphabet.join("")+")");var n=t.split(this.guardsRegExp),r=n[3===n.length||2===n.length?1:0];if(0===r.length)return[];var i=r[Symbol.iterator]().next().value,s=r.slice(i.length).split(this.sepsRegExp),o=this.alphabet,a=[],h=s,l=Array.isArray(h),u=0;for(h=l?h:h[Symbol.iterator]();;){var p;if(l){if(u>=h.length)break;p=h[u++]}else{if((u=h.next()).done)break;p=u.value}var g=p,d=f(o,[i].concat(e(this.salt),e(o)).slice(0,o.length));a.push(c(Array.from(g),d)),o=d}return this._encode(a).join("")!==t?[]:a},t}();t.default=n;var r=16,i=3.5,s=12,o=function(t){return Array.from(new Set(t))};t.keepUnique=o;var a=function(t,e){return t.filter((function(t){return!e.includes(t)}))};t.withoutChars=a;var h=function(t,e){return t.filter((function(t){return e.includes(t)}))};t.onlyChars=h;var l=function(t){return"bigint"==typeof t||!Number.isNaN(Number(t))&&Math.floor(Number(t))===t},u=function(t){return"bigint"==typeof t||t>=0&&Number.isSafeInteger(t)};function f(t,e){if(0===e.length)return t;for(var n,r=t.slice(),i=r.length-1,s=0,o=0;i>0;i--,s++){o+=n=e[s%=e.length].codePointAt(0);var a=(n+s+o)%i,h=r[i],l=r[a];r[a]=h,r[i]=l}return r}var p=function(t,e){var n=[];if("bigint"==typeof t){var r=BigInt(e.length);do{n.unshift(e[Number(t%r)]),t/=r}while(t>BigInt(0))}else do{n.unshift(e[t%e.length]),t=Math.floor(t/e.length)}while(t>0);return n},c=function(t,e){return t.reduce((function(n,r){var i=e.indexOf(r);if(-1===i)throw new Error("The provided ID ("+t.join("")+") is invalid, as it contains characters that do not exist in the alphabet ("+e.join("")+")");if("bigint"==typeof n)return n*BigInt(e.length)+BigInt(i);var s=n*e.length+i;if(Number.isSafeInteger(s))return s;if("function"==typeof BigInt)return BigInt(n)*BigInt(e.length)+BigInt(i);throw new Error("Unable to decode the provided string, due to lack of support for BigInt numbers in the current environment")}),0)},g=/^\+?[0-9]+$/,d=function(t){return g.test(t)?parseInt(t,10):NaN},b=function(t,e,n){return Array.from({length:Math.ceil(t.length/e)},(function(r,i){return n(t.slice(i*e,(i+1)*e))}))},v=function(t){return new RegExp(t.map((function(t){return m(t)})).sort((function(t,e){return e.length-t.length})).join("|"))},y=function(t){return new RegExp("^["+t.map((function(t){return m(t)})).sort((function(t,e){return e.length-t.length})).join("")+"]+$")},m=function(t){return t.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")}})); //# sourceMappingURL=hashids.min.js.map \ No newline at end of file diff --git a/dist/hashids.min.js.map b/dist/hashids.min.js.map index bb81c47..0669751 100644 --- a/dist/hashids.min.js.map +++ b/dist/hashids.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["hashids.js"],"names":["global","factory","define","amd","exports","mod","Hashids","globalThis","self","this","_exports","_toConsumableArray","arr","Array","isArray","i","arr2","length","_arrayWithoutHoles","iter","Symbol","iterator","Object","prototype","toString","call","from","_iterableToArray","TypeError","_nonIterableSpread","__esModule","onlyChars","withoutChars","keepUnique","default","salt","minLength","alphabet","seps","saltChars","alphabetChars","sepsChars","uniqueAlphabet","minAlphabetLength","Error","sepsLength","diff","_this$seps","filteredSeps","shuffle","sepDiv","Math","ceil","push","apply","slice","guardCount","guardDiv","guards","guardsRegExp","makeAnyCharRegExp","sepsRegExp","allowedCharsRegExp","makeEveryCharRegExp","concat","_proto","encode","first","_len","arguments","numbers","_key","ret","every","isIntegerNumber","map","n","safeParseInt10","String","isPositiveAndFinite","_encode","join","decode","id","_decode","encodeHex","hex","test","splitAtIntervalAndMap","part","parseInt","decodeHex","number","_this","numbersIdInt","reduce","last","Number","BigInt","lottery","forEach","_ret","buffer","toAlphabet","charCode","codePointAt","extraNumber","prefixGuardIndex","unshift","suffixGuardIndex","halfLength","floor","_ret2","_ret3","excess","halfOfExcess","isValidId","idGuardsArray","split","idBreakdown","lotteryChar","next","value","idArray","lastAlphabet","result","_iterator","_isArray","_i","_ref","done","subId","nextAlphabet","fromAlphabet","content","Set","chars","_withoutChars","filter","char","includes","keepChars","isNaN","isSafeInteger","integer","transformed","v","p","j","a","b","input","alphabetLength","inputChars","carry","item","index","indexOf","safeToParseNumberRegExp","str","NaN","nth","_","RegExp","escapeRegExp","sort","text","replace"],"mappings":"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"} \ No newline at end of file +{"version":3,"sources":["hashids.js"],"names":["global","factory","define","amd","exports","mod","Hashids","globalThis","self","this","_exports","_toConsumableArray","arr","Array","isArray","i","arr2","length","_arrayWithoutHoles","iter","Symbol","iterator","Object","prototype","toString","call","from","_iterableToArray","TypeError","_nonIterableSpread","__esModule","onlyChars","withoutChars","keepUnique","default","salt","minLength","alphabet","seps","saltChars","alphabetChars","sepsChars","uniqueAlphabet","minAlphabetLength","Error","sepsLength","diff","_this$seps","filteredSeps","shuffle","sepDiv","Math","ceil","push","apply","slice","guardCount","guardDiv","guards","guardsRegExp","makeAnyOfCharsRegExp","sepsRegExp","allowedCharsRegExp","makeAtLeastSomeCharRegExp","concat","_proto","encode","first","_len","arguments","numbers","_key","ret","every","isIntegerNumber","map","n","safeParseInt10","String","isPositiveAndFinite","_encode","join","decode","id","_decode","encodeHex","hex","test","splitAtIntervalAndMap","part","parseInt","decodeHex","number","_this","numbersIdInt","reduce","last","Number","BigInt","lottery","forEach","_ret","buffer","toAlphabet","charCode","codePointAt","extraNumber","prefixGuardIndex","unshift","suffixGuardIndex","halfLength","floor","_ret2","_ret3","excess","halfOfExcess","isValidId","idGuardsArray","split","idBreakdown","lotteryChar","next","value","idArray","lastAlphabet","result","_iterator","_isArray","_i","_ref","done","subId","nextAlphabet","fromAlphabet","content","Set","chars","_withoutChars","filter","char","includes","keepChars","isNaN","isSafeInteger","integer","transformed","v","p","j","a","b","input","alphabetLength","inputChars","carry","item","index","indexOf","safeToParseNumberRegExp","str","NaN","nth","_","RegExp","escapeRegExp","sort","text","replace"],"mappings":"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"} \ No newline at end of file diff --git a/esm/index.js b/esm/index.js index 154fee3..7b318e6 100644 --- a/esm/index.js +++ b/esm/index.js @@ -40,12 +40,9 @@ function () { throw new TypeError("Hashids: Provided alphabet has to be a string (is " + typeof alphabet + ")"); } - var saltChars = _toConsumableArray(salt); - - var alphabetChars = _toConsumableArray(alphabet); - - var sepsChars = _toConsumableArray(seps); - + var saltChars = Array.from(salt); + var alphabetChars = Array.from(alphabet); + var sepsChars = Array.from(seps); this.salt = saltChars; var uniqueAlphabet = keepUnique(alphabetChars); @@ -88,9 +85,9 @@ function () { this.alphabet = this.alphabet.slice(guardCount); } - this.guardsRegExp = makeAnyCharRegExp(this.guards); - this.sepsRegExp = makeAnyCharRegExp(this.seps); - this.allowedCharsRegExp = makeEveryCharRegExp([].concat(_toConsumableArray(this.alphabet), _toConsumableArray(this.guards), _toConsumableArray(this.seps))); + this.guardsRegExp = makeAnyOfCharsRegExp(this.guards); + this.sepsRegExp = makeAnyOfCharsRegExp(this.seps); + this.allowedCharsRegExp = makeAtLeastSomeCharRegExp([].concat(_toConsumableArray(this.alphabet), _toConsumableArray(this.guards), _toConsumableArray(this.seps))); } var _proto = Hashids.prototype; @@ -187,8 +184,7 @@ function () { numbers.forEach(function (number, i) { var _ret; - var buffer = lottery.concat(_this.salt, alphabet); // const buffer = [...lottery, ...this.salt, ...alphabet] - + var buffer = lottery.concat(_this.salt, alphabet); alphabet = shuffle(alphabet, buffer); var last = toAlphabet(number, alphabet); @@ -234,34 +230,20 @@ function () { }; _proto.isValidId = function isValidId(id) { - return this.allowedCharsRegExp.test(id); // return this._isValidId([...id]) - } // private _isValidId(idChars: string[]): boolean { - // return idChars.every( - // (char) => - // this.alphabet.includes(char) || - // this.guards.includes(char) || - // this.seps.includes(char), - // ) - // } - ; + return this.allowedCharsRegExp.test(id); + }; _proto._decode = function _decode(id) { if (!this.isValidId(id)) { throw new Error("The provided ID (" + id + ") is invalid, as it contains characters that do not exist in the alphabet (" + this.guards.join('') + this.seps.join('') + this.alphabet.join('') + ")"); } - var idGuardsArray = id.split(this.guardsRegExp); // splitAtMatch(idChars, (char) => - // this.guards.includes(char), - // ) - + var idGuardsArray = id.split(this.guardsRegExp); var splitIndex = idGuardsArray.length === 3 || idGuardsArray.length === 2 ? 1 : 0; var idBreakdown = idGuardsArray[splitIndex]; if (idBreakdown.length === 0) return []; var lotteryChar = idBreakdown[Symbol.iterator]().next().value; - var idArray = idBreakdown.slice(lotteryChar.length).split(this.sepsRegExp); // const idBreakdownArray = [...idBreakdown] - // const [lotteryChar, ...rest] = idBreakdownArray - // const idArray = rest.join('').split(this.sepsRegExp) - + var idArray = idBreakdown.slice(lotteryChar.length).split(this.sepsRegExp); var lastAlphabet = this.alphabet; var result = []; @@ -280,15 +262,12 @@ function () { var subId = _ref; var buffer = [lotteryChar].concat(_toConsumableArray(this.salt), _toConsumableArray(lastAlphabet)); var nextAlphabet = shuffle(lastAlphabet, buffer.slice(0, lastAlphabet.length)); - result.push(fromAlphabet(_toConsumableArray(subId), nextAlphabet)); + result.push(fromAlphabet(Array.from(subId), nextAlphabet)); lastAlphabet = nextAlphabet; } // if the result is different from what we'd expect, we return an empty result (malformed input): - if (this._encode(result).join('') !== id) return []; // if (this._encode(result).some((char, index) => idChars[index] !== char)) { - // return [] - // } - + if (this._encode(result).join('') !== id) return []; return result; }; @@ -405,7 +384,7 @@ var splitAtIntervalAndMap = function splitAtIntervalAndMap(str, nth, map) { }); }; -var makeAnyCharRegExp = function makeAnyCharRegExp(chars) { +var makeAnyOfCharsRegExp = function makeAnyOfCharsRegExp(chars) { return new RegExp(chars.map(function (char) { return escapeRegExp(char); }) // we need to sort these from longest to shortest, @@ -415,7 +394,7 @@ var makeAnyCharRegExp = function makeAnyCharRegExp(chars) { }).join('|')); }; -var makeEveryCharRegExp = function makeEveryCharRegExp(chars) { +var makeAtLeastSomeCharRegExp = function makeAtLeastSomeCharRegExp(chars) { return new RegExp("^[" + chars.map(function (char) { return escapeRegExp(char); }) // we need to sort these from longest to shortest, diff --git a/esm/index.js.map b/esm/index.js.map index 95e9df6..f6dfbc0 100644 --- a/esm/index.js.map +++ b/esm/index.js.map @@ -1 +1 @@ -{"version":3,"sources":["../lib/hashids.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["type NumberLike = number | bigint\n\nexport default class Hashids {\n private alphabet: string[]\n private seps: string[]\n private guards: string[]\n private salt: string[]\n private guardsRegExp: RegExp\n private sepsRegExp: RegExp\n private allowedCharsRegExp: RegExp\n\n public constructor(\n salt = '',\n private minLength = 0,\n alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890',\n seps = 'cfhistuCFHISTU',\n ) {\n if (typeof minLength !== 'number') {\n throw new TypeError(\n `Hashids: Provided 'minLength' has to be a number (is ${typeof minLength})`,\n )\n }\n if (typeof salt !== 'string') {\n throw new TypeError(\n `Hashids: Provided 'salt' has to be a string (is ${typeof salt})`,\n )\n }\n if (typeof alphabet !== 'string') {\n throw new TypeError(\n `Hashids: Provided alphabet has to be a string (is ${typeof alphabet})`,\n )\n }\n\n const saltChars = [...salt]\n const alphabetChars = [...alphabet]\n const sepsChars = [...seps]\n\n this.salt = saltChars\n\n const uniqueAlphabet = keepUnique(alphabetChars)\n\n if (uniqueAlphabet.length < minAlphabetLength) {\n throw new Error(\n `Hashids: alphabet must contain at least ${minAlphabetLength} unique characters, provided: ${uniqueAlphabet}`,\n )\n }\n\n /** `alphabet` should not contains `seps` */\n this.alphabet = withoutChars(uniqueAlphabet, sepsChars)\n /** `seps` should contain only characters present in `alphabet` */\n const filteredSeps = onlyChars(sepsChars, uniqueAlphabet)\n this.seps = shuffle(filteredSeps, saltChars)\n\n let sepsLength\n let diff\n\n if (\n this.seps.length === 0 ||\n this.alphabet.length / this.seps.length > sepDiv\n ) {\n sepsLength = Math.ceil(this.alphabet.length / sepDiv)\n\n if (sepsLength > this.seps.length) {\n diff = sepsLength - this.seps.length\n this.seps.push(...this.alphabet.slice(0, diff))\n this.alphabet = this.alphabet.slice(diff)\n }\n }\n\n this.alphabet = shuffle(this.alphabet, saltChars)\n const guardCount = Math.ceil(this.alphabet.length / guardDiv)\n\n if (this.alphabet.length < 3) {\n this.guards = this.seps.slice(0, guardCount)\n this.seps = this.seps.slice(guardCount)\n } else {\n this.guards = this.alphabet.slice(0, guardCount)\n this.alphabet = this.alphabet.slice(guardCount)\n }\n\n this.guardsRegExp = makeAnyCharRegExp(this.guards)\n this.sepsRegExp = makeAnyCharRegExp(this.seps)\n this.allowedCharsRegExp = makeEveryCharRegExp([\n ...this.alphabet,\n ...this.guards,\n ...this.seps,\n ])\n }\n\n public encode(numbers: string): string\n public encode(numbers: NumberLike[]): string\n public encode(...numbers: NumberLike[]): string\n public encode(numbers: string[]): string\n public encode(...numbers: string[]): string\n public encode(\n first: T[] | T,\n ...numbers: T[]\n ): string {\n const ret = ''\n\n if (Array.isArray(first)) {\n numbers = first\n } else {\n // eslint-disable-next-line eqeqeq\n numbers = [...(first != null ? [first] : []), ...numbers]\n }\n\n if (!numbers.length) {\n return ret\n }\n\n if (!numbers.every(isIntegerNumber)) {\n numbers = numbers.map((n) =>\n typeof n === 'bigint' || typeof n === 'number'\n ? n\n : safeParseInt10(String(n)),\n ) as T[]\n }\n\n if (!(numbers as NumberLike[]).every(isPositiveAndFinite)) {\n return ret\n }\n\n return this._encode(numbers as number[]).join('')\n }\n\n public decode(id: string): NumberLike[] {\n if (!id || typeof id !== 'string' || id.length === 0) return []\n return this._decode(id)\n }\n\n /**\n * @description Splits a hex string into groups of 12-digit hexadecimal numbers,\n * then prefixes each with '1' and encodes the resulting array of numbers\n *\n * Encoding '00000000000f00000000000f000f' would be the equivalent of:\n * Hashids.encode([0x100000000000f, 0x100000000000f, 0x1000f])\n *\n * This means that if your environment supports BigInts,\n * you will get different (shorter) results if you provide\n * a BigInt representation of your hex and use `encode` directly, e.g.:\n * Hashids.encode(BigInt(`0x${hex}`))\n *\n * To decode such a representation back to a hex string, use the following snippet:\n * Hashids.decode(id)[0].toString(16)\n */\n public encodeHex(hex: string | bigint): string {\n switch (typeof hex) {\n case 'bigint':\n hex = hex.toString(16)\n break\n case 'string':\n if (!/^[0-9a-fA-F]+$/.test(hex)) return ''\n break\n default:\n throw new Error(\n `Hashids: The provided value is neither a string, nor a BigInt (got: ${typeof hex})`,\n )\n }\n\n const numbers = splitAtIntervalAndMap(hex, 12, (part) =>\n parseInt(`1${part}`, 16),\n )\n return this.encode(numbers)\n }\n\n public decodeHex(id: string) {\n return this.decode(id)\n .map((number) => number.toString(16).slice(1))\n .join('')\n }\n\n private _encode(numbers: NumberLike[]): string[] {\n let alphabet = this.alphabet\n\n const numbersIdInt = numbers.reduce(\n (last, number, i) =>\n last +\n (typeof number === 'bigint'\n ? Number(number % BigInt(i + 100))\n : number % (i + 100)),\n 0,\n )\n\n let ret: string[] = [alphabet[numbersIdInt % alphabet.length]]\n const lottery = ret.slice()\n\n const seps = this.seps\n const guards = this.guards\n\n numbers.forEach((number, i) => {\n const buffer = lottery.concat(this.salt, alphabet)\n // const buffer = [...lottery, ...this.salt, ...alphabet]\n\n alphabet = shuffle(alphabet, buffer)\n const last = toAlphabet(number, alphabet)\n\n ret.push(...last)\n\n if (i + 1 < numbers.length) {\n const charCode = last[0].codePointAt(0)! + i\n const extraNumber =\n typeof number === 'bigint'\n ? Number(number % BigInt(charCode))\n : number % charCode\n ret.push(seps[extraNumber % seps.length])\n }\n })\n\n if (ret.length < this.minLength) {\n const prefixGuardIndex =\n (numbersIdInt + ret[0].codePointAt(0)!) % guards.length\n ret.unshift(guards[prefixGuardIndex])\n\n if (ret.length < this.minLength) {\n const suffixGuardIndex =\n (numbersIdInt + ret[2].codePointAt(0)!) % guards.length\n ret.push(guards[suffixGuardIndex])\n }\n }\n\n const halfLength = Math.floor(alphabet.length / 2)\n while (ret.length < this.minLength) {\n alphabet = shuffle(alphabet, alphabet)\n ret.unshift(...alphabet.slice(halfLength))\n ret.push(...alphabet.slice(0, halfLength))\n\n const excess = ret.length - this.minLength\n if (excess > 0) {\n const halfOfExcess = excess / 2\n ret = ret.slice(halfOfExcess, halfOfExcess + this.minLength)\n }\n }\n\n return ret\n }\n\n public isValidId(id: string): boolean {\n return this.allowedCharsRegExp.test(id)\n // return this._isValidId([...id])\n }\n\n // private _isValidId(idChars: string[]): boolean {\n // return idChars.every(\n // (char) =>\n // this.alphabet.includes(char) ||\n // this.guards.includes(char) ||\n // this.seps.includes(char),\n // )\n // }\n\n private _decode(id: string): NumberLike[] {\n if (!this.isValidId(id)) {\n throw new Error(\n `The provided ID (${id}) is invalid, as it contains characters that do not exist in the alphabet (${this.guards.join(\n '',\n )}${this.seps.join('')}${this.alphabet.join('')})`,\n )\n }\n const idGuardsArray = id.split(this.guardsRegExp)\n // splitAtMatch(idChars, (char) =>\n // this.guards.includes(char),\n // )\n const splitIndex =\n idGuardsArray.length === 3 || idGuardsArray.length === 2 ? 1 : 0\n\n const idBreakdown = idGuardsArray[splitIndex]\n if (idBreakdown.length === 0) return []\n\n const lotteryChar = idBreakdown[Symbol.iterator]().next().value as string\n const idArray = idBreakdown.slice(lotteryChar.length).split(this.sepsRegExp)\n\n // const idBreakdownArray = [...idBreakdown]\n // const [lotteryChar, ...rest] = idBreakdownArray\n // const idArray = rest.join('').split(this.sepsRegExp)\n\n let lastAlphabet: string[] = this.alphabet\n const result: NumberLike[] = []\n\n for (const subId of idArray) {\n const buffer = [lotteryChar, ...this.salt, ...lastAlphabet]\n const nextAlphabet = shuffle(\n lastAlphabet,\n buffer.slice(0, lastAlphabet.length),\n )\n result.push(fromAlphabet([...subId], nextAlphabet))\n lastAlphabet = nextAlphabet\n }\n\n // if the result is different from what we'd expect, we return an empty result (malformed input):\n if (this._encode(result).join('') !== id) return []\n // if (this._encode(result).some((char, index) => idChars[index] !== char)) {\n // return []\n // }\n return result\n }\n}\n\nconst minAlphabetLength = 16\nconst sepDiv = 3.5\nconst guardDiv = 12\n\nexport const keepUnique = (content: Iterable): T[] =>\n Array.from(new Set(content))\n\nexport const withoutChars = (\n chars: string[],\n withoutChars: string[],\n): string[] => chars.filter((char) => !withoutChars.includes(char))\n\nexport const onlyChars = (chars: string[], keepChars: string[]): string[] =>\n chars.filter((char) => keepChars.includes(char))\n\nconst isIntegerNumber = (n: NumberLike | string) =>\n typeof n === 'bigint' ||\n (!Number.isNaN(Number(n)) && Math.floor(Number(n)) === n)\n\nconst isPositiveAndFinite = (n: NumberLike) =>\n typeof n === 'bigint' || (n >= 0 && Number.isSafeInteger(n))\n\nfunction shuffle(alphabetChars: string[], saltChars: string[]): string[] {\n if (saltChars.length === 0) {\n return alphabetChars\n }\n\n let integer: number\n const transformed = alphabetChars.slice()\n\n for (let i = transformed.length - 1, v = 0, p = 0; i > 0; i--, v++) {\n v %= saltChars.length\n p += integer = saltChars[v].codePointAt(0)!\n const j = (integer + v + p) % i\n\n // swap characters at positions i and j\n const a = transformed[i]\n const b = transformed[j]\n transformed[j] = a\n transformed[i] = b\n }\n\n return transformed\n}\n\nconst toAlphabet = (input: NumberLike, alphabetChars: string[]): string[] => {\n const id: string[] = []\n\n if (typeof input === 'bigint') {\n const alphabetLength = BigInt(alphabetChars.length)\n do {\n id.unshift(alphabetChars[Number(input % alphabetLength)])\n input = input / alphabetLength\n } while (input > BigInt(0))\n } else {\n do {\n id.unshift(alphabetChars[input % alphabetChars.length])\n input = Math.floor(input / alphabetChars.length)\n } while (input > 0)\n }\n\n return id\n}\n\nconst fromAlphabet = (\n inputChars: string[],\n alphabetChars: string[],\n): NumberLike =>\n inputChars.reduce((carry, item) => {\n const index = alphabetChars.indexOf(item)\n if (index === -1) {\n throw new Error(\n `The provided ID (${inputChars.join(\n '',\n )}) is invalid, as it contains characters that do not exist in the alphabet (${alphabetChars.join(\n '',\n )})`,\n )\n }\n if (typeof carry === 'bigint') {\n return carry * BigInt(alphabetChars.length) + BigInt(index)\n }\n const value = carry * alphabetChars.length + index\n const isSafeValue = Number.isSafeInteger(value)\n if (isSafeValue) {\n return value\n } else {\n if (typeof BigInt === 'function') {\n return BigInt(carry) * BigInt(alphabetChars.length) + BigInt(index)\n } else {\n // we do not have support for BigInt:\n throw new Error(\n `Unable to decode the provided string, due to lack of support for BigInt numbers in the current environment`,\n )\n }\n }\n }, 0 as NumberLike)\n\nconst safeToParseNumberRegExp = /^\\+?[0-9]+$/\nconst safeParseInt10 = (str: string) =>\n safeToParseNumberRegExp.test(str) ? parseInt(str, 10) : NaN\n\nconst splitAtIntervalAndMap = (\n str: string,\n nth: number,\n map: (n: string) => T,\n): T[] =>\n Array.from({length: Math.ceil(str.length / nth)}, (_, index) =>\n map(str.slice(index * nth, (index + 1) * nth)),\n )\n\nconst makeAnyCharRegExp = (chars: string[]) =>\n new RegExp(\n chars\n .map((char) => escapeRegExp(char))\n // we need to sort these from longest to shortest,\n // as they may contain multibyte unicode characters (these should come first)\n .sort((a, b) => b.length - a.length)\n .join('|'),\n )\n\nconst makeEveryCharRegExp = (chars: string[]) =>\n new RegExp(\n `^[${chars\n .map((char) => escapeRegExp(char))\n // we need to sort these from longest to shortest,\n // as they may contain multibyte unicode characters (these should come first)\n .sort((a, b) => b.length - a.length)\n .join('')}]+$`,\n )\n\nconst escapeRegExp = (text: string) =>\n text.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&')\n"]} \ No newline at end of file +{"version":3,"sources":["../lib/hashids.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["type NumberLike = number | bigint\n\nexport default class Hashids {\n private alphabet: string[]\n private seps: string[]\n private guards: string[]\n private salt: string[]\n private guardsRegExp: RegExp\n private sepsRegExp: RegExp\n private allowedCharsRegExp: RegExp\n\n public constructor(\n salt = '',\n private minLength = 0,\n alphabet = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890',\n seps = 'cfhistuCFHISTU',\n ) {\n if (typeof minLength !== 'number') {\n throw new TypeError(\n `Hashids: Provided 'minLength' has to be a number (is ${typeof minLength})`,\n )\n }\n if (typeof salt !== 'string') {\n throw new TypeError(\n `Hashids: Provided 'salt' has to be a string (is ${typeof salt})`,\n )\n }\n if (typeof alphabet !== 'string') {\n throw new TypeError(\n `Hashids: Provided alphabet has to be a string (is ${typeof alphabet})`,\n )\n }\n\n const saltChars = Array.from(salt)\n const alphabetChars = Array.from(alphabet)\n const sepsChars = Array.from(seps)\n\n this.salt = saltChars\n\n const uniqueAlphabet = keepUnique(alphabetChars)\n\n if (uniqueAlphabet.length < minAlphabetLength) {\n throw new Error(\n `Hashids: alphabet must contain at least ${minAlphabetLength} unique characters, provided: ${uniqueAlphabet}`,\n )\n }\n\n /** `alphabet` should not contains `seps` */\n this.alphabet = withoutChars(uniqueAlphabet, sepsChars)\n /** `seps` should contain only characters present in `alphabet` */\n const filteredSeps = onlyChars(sepsChars, uniqueAlphabet)\n this.seps = shuffle(filteredSeps, saltChars)\n\n let sepsLength\n let diff\n\n if (\n this.seps.length === 0 ||\n this.alphabet.length / this.seps.length > sepDiv\n ) {\n sepsLength = Math.ceil(this.alphabet.length / sepDiv)\n\n if (sepsLength > this.seps.length) {\n diff = sepsLength - this.seps.length\n this.seps.push(...this.alphabet.slice(0, diff))\n this.alphabet = this.alphabet.slice(diff)\n }\n }\n\n this.alphabet = shuffle(this.alphabet, saltChars)\n const guardCount = Math.ceil(this.alphabet.length / guardDiv)\n\n if (this.alphabet.length < 3) {\n this.guards = this.seps.slice(0, guardCount)\n this.seps = this.seps.slice(guardCount)\n } else {\n this.guards = this.alphabet.slice(0, guardCount)\n this.alphabet = this.alphabet.slice(guardCount)\n }\n\n this.guardsRegExp = makeAnyOfCharsRegExp(this.guards)\n this.sepsRegExp = makeAnyOfCharsRegExp(this.seps)\n this.allowedCharsRegExp = makeAtLeastSomeCharRegExp([\n ...this.alphabet,\n ...this.guards,\n ...this.seps,\n ])\n }\n\n public encode(numbers: string): string\n public encode(numbers: NumberLike[]): string\n public encode(...numbers: NumberLike[]): string\n public encode(numbers: string[]): string\n public encode(...numbers: string[]): string\n public encode(\n first: T[] | T,\n ...numbers: T[]\n ): string {\n const ret = ''\n\n if (Array.isArray(first)) {\n numbers = first\n } else {\n // eslint-disable-next-line eqeqeq\n numbers = [...(first != null ? [first] : []), ...numbers]\n }\n\n if (!numbers.length) {\n return ret\n }\n\n if (!numbers.every(isIntegerNumber)) {\n numbers = numbers.map((n) =>\n typeof n === 'bigint' || typeof n === 'number'\n ? n\n : safeParseInt10(String(n)),\n ) as T[]\n }\n\n if (!(numbers as NumberLike[]).every(isPositiveAndFinite)) {\n return ret\n }\n\n return this._encode(numbers as number[]).join('')\n }\n\n public decode(id: string): NumberLike[] {\n if (!id || typeof id !== 'string' || id.length === 0) return []\n return this._decode(id)\n }\n\n /**\n * @description Splits a hex string into groups of 12-digit hexadecimal numbers,\n * then prefixes each with '1' and encodes the resulting array of numbers\n *\n * Encoding '00000000000f00000000000f000f' would be the equivalent of:\n * Hashids.encode([0x100000000000f, 0x100000000000f, 0x1000f])\n *\n * This means that if your environment supports BigInts,\n * you will get different (shorter) results if you provide\n * a BigInt representation of your hex and use `encode` directly, e.g.:\n * Hashids.encode(BigInt(`0x${hex}`))\n *\n * To decode such a representation back to a hex string, use the following snippet:\n * Hashids.decode(id)[0].toString(16)\n */\n public encodeHex(hex: string | bigint): string {\n switch (typeof hex) {\n case 'bigint':\n hex = hex.toString(16)\n break\n case 'string':\n if (!/^[0-9a-fA-F]+$/.test(hex)) return ''\n break\n default:\n throw new Error(\n `Hashids: The provided value is neither a string, nor a BigInt (got: ${typeof hex})`,\n )\n }\n\n const numbers = splitAtIntervalAndMap(hex, 12, (part) =>\n parseInt(`1${part}`, 16),\n )\n return this.encode(numbers)\n }\n\n public decodeHex(id: string) {\n return this.decode(id)\n .map((number) => number.toString(16).slice(1))\n .join('')\n }\n\n private _encode(numbers: NumberLike[]): string[] {\n let alphabet = this.alphabet\n\n const numbersIdInt = numbers.reduce(\n (last, number, i) =>\n last +\n (typeof number === 'bigint'\n ? Number(number % BigInt(i + 100))\n : number % (i + 100)),\n 0,\n )\n\n let ret: string[] = [alphabet[numbersIdInt % alphabet.length]]\n const lottery = ret.slice()\n\n const seps = this.seps\n const guards = this.guards\n\n numbers.forEach((number, i) => {\n const buffer = lottery.concat(this.salt, alphabet)\n\n alphabet = shuffle(alphabet, buffer)\n const last = toAlphabet(number, alphabet)\n\n ret.push(...last)\n\n if (i + 1 < numbers.length) {\n const charCode = last[0].codePointAt(0)! + i\n const extraNumber =\n typeof number === 'bigint'\n ? Number(number % BigInt(charCode))\n : number % charCode\n ret.push(seps[extraNumber % seps.length])\n }\n })\n\n if (ret.length < this.minLength) {\n const prefixGuardIndex =\n (numbersIdInt + ret[0].codePointAt(0)!) % guards.length\n ret.unshift(guards[prefixGuardIndex])\n\n if (ret.length < this.minLength) {\n const suffixGuardIndex =\n (numbersIdInt + ret[2].codePointAt(0)!) % guards.length\n ret.push(guards[suffixGuardIndex])\n }\n }\n\n const halfLength = Math.floor(alphabet.length / 2)\n while (ret.length < this.minLength) {\n alphabet = shuffle(alphabet, alphabet)\n ret.unshift(...alphabet.slice(halfLength))\n ret.push(...alphabet.slice(0, halfLength))\n\n const excess = ret.length - this.minLength\n if (excess > 0) {\n const halfOfExcess = excess / 2\n ret = ret.slice(halfOfExcess, halfOfExcess + this.minLength)\n }\n }\n\n return ret\n }\n\n public isValidId(id: string): boolean {\n return this.allowedCharsRegExp.test(id)\n }\n\n private _decode(id: string): NumberLike[] {\n if (!this.isValidId(id)) {\n throw new Error(\n `The provided ID (${id}) is invalid, as it contains characters that do not exist in the alphabet (${this.guards.join(\n '',\n )}${this.seps.join('')}${this.alphabet.join('')})`,\n )\n }\n const idGuardsArray = id.split(this.guardsRegExp)\n const splitIndex =\n idGuardsArray.length === 3 || idGuardsArray.length === 2 ? 1 : 0\n\n const idBreakdown = idGuardsArray[splitIndex]\n if (idBreakdown.length === 0) return []\n\n const lotteryChar = idBreakdown[Symbol.iterator]().next().value as string\n const idArray = idBreakdown.slice(lotteryChar.length).split(this.sepsRegExp)\n\n let lastAlphabet: string[] = this.alphabet\n const result: NumberLike[] = []\n\n for (const subId of idArray) {\n const buffer = [lotteryChar, ...this.salt, ...lastAlphabet]\n const nextAlphabet = shuffle(\n lastAlphabet,\n buffer.slice(0, lastAlphabet.length),\n )\n result.push(fromAlphabet(Array.from(subId), nextAlphabet))\n lastAlphabet = nextAlphabet\n }\n\n // if the result is different from what we'd expect, we return an empty result (malformed input):\n if (this._encode(result).join('') !== id) return []\n return result\n }\n}\n\nconst minAlphabetLength = 16\nconst sepDiv = 3.5\nconst guardDiv = 12\n\nexport const keepUnique = (content: Iterable): T[] =>\n Array.from(new Set(content))\n\nexport const withoutChars = (\n chars: string[],\n withoutChars: string[],\n): string[] => chars.filter((char) => !withoutChars.includes(char))\n\nexport const onlyChars = (chars: string[], keepChars: string[]): string[] =>\n chars.filter((char) => keepChars.includes(char))\n\nconst isIntegerNumber = (n: NumberLike | string) =>\n typeof n === 'bigint' ||\n (!Number.isNaN(Number(n)) && Math.floor(Number(n)) === n)\n\nconst isPositiveAndFinite = (n: NumberLike) =>\n typeof n === 'bigint' || (n >= 0 && Number.isSafeInteger(n))\n\nfunction shuffle(alphabetChars: string[], saltChars: string[]): string[] {\n if (saltChars.length === 0) {\n return alphabetChars\n }\n\n let integer: number\n const transformed = alphabetChars.slice()\n\n for (let i = transformed.length - 1, v = 0, p = 0; i > 0; i--, v++) {\n v %= saltChars.length\n p += integer = saltChars[v].codePointAt(0)!\n const j = (integer + v + p) % i\n\n // swap characters at positions i and j\n const a = transformed[i]\n const b = transformed[j]\n transformed[j] = a\n transformed[i] = b\n }\n\n return transformed\n}\n\nconst toAlphabet = (input: NumberLike, alphabetChars: string[]): string[] => {\n const id: string[] = []\n\n if (typeof input === 'bigint') {\n const alphabetLength = BigInt(alphabetChars.length)\n do {\n id.unshift(alphabetChars[Number(input % alphabetLength)])\n input = input / alphabetLength\n } while (input > BigInt(0))\n } else {\n do {\n id.unshift(alphabetChars[input % alphabetChars.length])\n input = Math.floor(input / alphabetChars.length)\n } while (input > 0)\n }\n\n return id\n}\n\nconst fromAlphabet = (\n inputChars: string[],\n alphabetChars: string[],\n): NumberLike =>\n inputChars.reduce((carry, item) => {\n const index = alphabetChars.indexOf(item)\n if (index === -1) {\n throw new Error(\n `The provided ID (${inputChars.join(\n '',\n )}) is invalid, as it contains characters that do not exist in the alphabet (${alphabetChars.join(\n '',\n )})`,\n )\n }\n if (typeof carry === 'bigint') {\n return carry * BigInt(alphabetChars.length) + BigInt(index)\n }\n const value = carry * alphabetChars.length + index\n const isSafeValue = Number.isSafeInteger(value)\n if (isSafeValue) {\n return value\n } else {\n if (typeof BigInt === 'function') {\n return BigInt(carry) * BigInt(alphabetChars.length) + BigInt(index)\n } else {\n // we do not have support for BigInt:\n throw new Error(\n `Unable to decode the provided string, due to lack of support for BigInt numbers in the current environment`,\n )\n }\n }\n }, 0 as NumberLike)\n\nconst safeToParseNumberRegExp = /^\\+?[0-9]+$/\nconst safeParseInt10 = (str: string) =>\n safeToParseNumberRegExp.test(str) ? parseInt(str, 10) : NaN\n\nconst splitAtIntervalAndMap = (\n str: string,\n nth: number,\n map: (n: string) => T,\n): T[] =>\n Array.from({length: Math.ceil(str.length / nth)}, (_, index) =>\n map(str.slice(index * nth, (index + 1) * nth)),\n )\n\nconst makeAnyOfCharsRegExp = (chars: string[]) =>\n new RegExp(\n chars\n .map((char) => escapeRegExp(char))\n // we need to sort these from longest to shortest,\n // as they may contain multibyte unicode characters (these should come first)\n .sort((a, b) => b.length - a.length)\n .join('|'),\n )\n\nconst makeAtLeastSomeCharRegExp = (chars: string[]) =>\n new RegExp(\n `^[${chars\n .map((char) => escapeRegExp(char))\n // we need to sort these from longest to shortest,\n // as they may contain multibyte unicode characters (these should come first)\n .sort((a, b) => b.length - a.length)\n .join('')}]+$`,\n )\n\nconst escapeRegExp = (text: string) =>\n text.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&')\n"]} \ No newline at end of file diff --git a/lib/hashids.ts b/lib/hashids.ts index 10db305..5a21b10 100644 --- a/lib/hashids.ts +++ b/lib/hashids.ts @@ -31,9 +31,9 @@ export default class Hashids { ) } - const saltChars = [...salt] - const alphabetChars = [...alphabet] - const sepsChars = [...seps] + const saltChars = Array.from(salt) + const alphabetChars = Array.from(alphabet) + const sepsChars = Array.from(seps) this.salt = saltChars @@ -265,7 +265,7 @@ export default class Hashids { lastAlphabet, buffer.slice(0, lastAlphabet.length), ) - result.push(fromAlphabet([...subId], nextAlphabet)) + result.push(fromAlphabet(Array.from(subId), nextAlphabet)) lastAlphabet = nextAlphabet } diff --git a/package.json b/package.json index c845c38..1e5be39 100644 --- a/package.json +++ b/package.json @@ -27,9 +27,20 @@ "module": "esm/index.js", "browser": "dist/hashids.min", "exports": { - "import": "./esm/index.js", - "require": "./cjs/index.js", - "browser": "dist/hashids.min" + ".": { + "import": "./esm/index.js", + "require": "./cjs/index.js", + "browser": "./dist/hashids.min.js" + }, + "./cjs": { + "require": "./cjs/index.js" + }, + "./cjs/": { + "require": "./cjs/" + }, + "./esm/": { + "import": "./esm/" + } }, "scripts": { "lint": "eslint lib/* tests/*", diff --git a/tests-mjs/requiring.cjs b/tests-mjs/requiring.cjs new file mode 100644 index 0000000..81dc8ad --- /dev/null +++ b/tests-mjs/requiring.cjs @@ -0,0 +1,18 @@ +const Hashids = require('hashids') +const Hashids2 = require('hashids/cjs') +const Hashids3 = require('hashids/cjs/index') +const Hashids4 = require('hashids/cjs/index.js') + +if (Hashids !== Hashids2 || Hashids !== Hashids3 || Hashids !== Hashids4) { + throw new Error('Hashids was not loaded properly') +} + +if (typeof Hashids !== 'function') { + throw new Error('Hashids is not a function') +} + +const instance = new Hashids('Not Real', 5, 'ABCDEFGHJKMNPQRTWXY234689') + +if (!(instance instanceof Hashids)) { + throw new Error('new Hashids(...) did not result in an instance of Hashids') +} diff --git a/tests-mjs/requiring.test.ts b/tests-mjs/requiring.test.ts new file mode 100644 index 0000000..7c4848d --- /dev/null +++ b/tests-mjs/requiring.test.ts @@ -0,0 +1,34 @@ +// this will only parse and run if you're using node >= 12 with the --experimental-modules flag +// alternatively, if you use something like webpack +// that's why it is in a separate file + +import childProcess from 'child_process' + +const supportsConditional = /^v\d[3-9]/.test(process.version) +const describeIfEsm = supportsConditional ? describe : describe.skip + +// only run on node >= v13: +describeIfEsm('conditional requires', () => { + test('loads via .cjs', async () => { + expect.assertions(1) + const p = childProcess.spawn('node', ['./requiring.cjs'], { + cwd: __dirname, + env: { + PATH: process.env.PATH, + }, + }) + + p.stderr.on('data', (d) => { + if (!d.toString().includes('ExperimentalWarning:')) { + // eslint-disable-next-line no-console + console.log(d.toString()) + } + }) + + const code = await new Promise((resolve) => { + p.on('close', (code, _signal) => resolve(code)) + }) + + expect(code).toBe(0) + }) +})