mirror of
https://github.com/knex/knex.git
synced 2025-07-14 20:40:38 +00:00
30 lines
859 B
JavaScript
30 lines
859 B
JavaScript
![]() |
// This alphabet uses `A-Za-z0-9_-` symbols. The genetic algorithm helped
|
||
|
// optimize the gzip compression for this alphabet.
|
||
|
const urlAlphabet =
|
||
|
'ModuleSymbhasOwnPr-0123456789ABCDEFGHNRVfgctiUvz_KqYTJkLxpZXIjQW';
|
||
|
|
||
|
/**
|
||
|
* Generate URL-friendly unique ID. This method uses the non-secure
|
||
|
* predictable random generator with bigger collision probability.
|
||
|
* Based on https://github.com/ai/nanoid
|
||
|
*
|
||
|
* ```js
|
||
|
* model.id = nanoid() //=> "Uakgb_J5m9g-0JDMbcJqL"
|
||
|
* ```
|
||
|
*
|
||
|
* @param size Size of the ID. The default size is 21.
|
||
|
* @returns A random string.
|
||
|
*/
|
||
|
function nanoid(size = 21) {
|
||
|
let id = '';
|
||
|
// A compact alternative for `for (var i = 0; i < step; i++)`.
|
||
|
let i = size;
|
||
|
while (i--) {
|
||
|
// `| 0` is more compact and faster than `Math.floor()`.
|
||
|
id += urlAlphabet[(Math.random() * 64) | 0];
|
||
|
}
|
||
|
return id;
|
||
|
}
|
||
|
|
||
|
module.exports = { nanoid };
|