shortid-extend
Version:
Alternative versión with options from Dylan Greene ShortId
67 lines (55 loc) • 1.71 kB
JavaScript
;
var generate = require('./generate');
var alphabet = require('./alphabet');
// Ignore all milliseconds before a certain time to reduce the size of the date entropy without sacrificing uniqueness.
// This number should be updated every year or so to keep the generated id short.
// To regenerate `new Date() - 0` and bump the version. Always bump the version!
var REDUCE_TIME = 1459707606518;
// don't change unless we change the algos or REDUCE_TIME
// must be an integer and less than 16
var version = 6;
// Counter is used when shortid is called multiple times in one second.
var counter;
// Remember the last time shortid was called in case counter is needed.
var previousSeconds;
// Default Length;
var _defaultLength = true;
var _configLength;
function setDefaults(config) {
if(config.disableDefault) {
_defaultLength = false;
_configLength = config.configLength
}
}
/**
* Generate unique id
* Returns string id
*/
function build(clusterWorkerId) {
var str = '';
if(_defaultLength) {
var seconds = Math.floor((Date.now() - REDUCE_TIME) * 0.001);
if (seconds === previousSeconds) {
counter++;
} else {
counter = 0;
previousSeconds = seconds;
}
str = str + generate(version);
str = str + generate(clusterWorkerId);
if (counter > 0) {
str = str + generate(counter);
}
str = str + generate(seconds);
return str;
} else {
for(var i = 0; i < _configLength; i++){
str = str + generate(version);
}
return str
}
}
module.exports = {
build: build,
setDefaults: setDefaults
};