cluster-id
Version:
Database cluster friendly object id with great query isolation.
39 lines (32 loc) • 827 B
JavaScript
var ref = require('./base64');
var encode = ref.encode;
var maxNum = ref.maxNum;
// return string in reverse order to increase variability of first symbols
function reverse (str) {
return str.split('').reverse().join('')
}
function createCounter (counterLen) {
var maxCounter = maxNum(counterLen)
var counter
var counterStartSecond
function updateCounter (seconds, time) {
if (counterStartSecond === seconds) {
counter += 1
if (counter > maxCounter) {
counter = 0
}
} else {
counter = time % maxCounter
counterStartSecond = seconds
}
return counter
}
function encodeCounter (counter) {
return reverse(encode(counter, counterLen))
}
return {
updateCounter: updateCounter,
encodeCounter: encodeCounter
}
}
module.exports = createCounter