build.js 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. 'use strict';
  2. var generate = require('./generate');
  3. var alphabet = require('./alphabet');
  4. // Ignore all milliseconds before a certain time to reduce the size of the date entropy without sacrificing uniqueness.
  5. // This number should be updated every year or so to keep the generated id short.
  6. // To regenerate `new Date() - 0` and bump the version. Always bump the version!
  7. var REDUCE_TIME = 1567752802062;
  8. // don't change unless we change the algos or REDUCE_TIME
  9. // must be an integer and less than 16
  10. var version = 7;
  11. // Counter is used when shortid is called multiple times in one second.
  12. var counter;
  13. // Remember the last time shortid was called in case counter is needed.
  14. var previousSeconds;
  15. /**
  16. * Generate unique id
  17. * Returns string id
  18. */
  19. function build(clusterWorkerId) {
  20. var str = '';
  21. var seconds = Math.floor((Date.now() - REDUCE_TIME) * 0.001);
  22. if (seconds === previousSeconds) {
  23. counter++;
  24. } else {
  25. counter = 0;
  26. previousSeconds = seconds;
  27. }
  28. str = str + generate(version);
  29. str = str + generate(clusterWorkerId);
  30. if (counter > 0) {
  31. str = str + generate(counter);
  32. }
  33. str = str + generate(seconds);
  34. return str;
  35. }
  36. module.exports = build;