cuid.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. (function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.cuid = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
  2. /**
  3. * cuid.js
  4. * Collision-resistant UID generator for browsers and node.
  5. * Sequential for fast db lookups and recency sorting.
  6. * Safe for element IDs and server-side lookups.
  7. *
  8. * Extracted from CLCTR
  9. *
  10. * Copyright (c) Eric Elliott 2012
  11. * MIT License
  12. */
  13. var fingerprint = require('./lib/fingerprint.js');
  14. var pad = require('./lib/pad.js');
  15. var getRandomValue = require('./lib/getRandomValue.js');
  16. var c = 0,
  17. blockSize = 4,
  18. base = 36,
  19. discreteValues = Math.pow(base, blockSize);
  20. function randomBlock () {
  21. return pad((getRandomValue() *
  22. discreteValues << 0)
  23. .toString(base), blockSize);
  24. }
  25. function safeCounter () {
  26. c = c < discreteValues ? c : 0;
  27. c++; // this is not subliminal
  28. return c - 1;
  29. }
  30. function cuid () {
  31. // Starting with a lowercase letter makes
  32. // it HTML element ID friendly.
  33. var letter = 'c', // hard-coded allows for sequential access
  34. // timestamp
  35. // warning: this exposes the exact date and time
  36. // that the uid was created.
  37. timestamp = (new Date().getTime()).toString(base),
  38. // Prevent same-machine collisions.
  39. counter = pad(safeCounter().toString(base), blockSize),
  40. // A few chars to generate distinct ids for different
  41. // clients (so different computers are far less
  42. // likely to generate the same id)
  43. print = fingerprint(),
  44. // Grab some more chars from Math.random()
  45. random = randomBlock() + randomBlock();
  46. return letter + timestamp + counter + print + random;
  47. }
  48. cuid.slug = function slug () {
  49. var date = new Date().getTime().toString(36),
  50. counter = safeCounter().toString(36).slice(-4),
  51. print = fingerprint().slice(0, 1) +
  52. fingerprint().slice(-1),
  53. random = randomBlock().slice(-2);
  54. return date.slice(-2) +
  55. counter + print + random;
  56. };
  57. cuid.isCuid = function isCuid (stringToCheck) {
  58. if (typeof stringToCheck !== 'string') return false;
  59. if (stringToCheck.startsWith('c')) return true;
  60. return false;
  61. };
  62. cuid.isSlug = function isSlug (stringToCheck) {
  63. if (typeof stringToCheck !== 'string') return false;
  64. var stringLength = stringToCheck.length;
  65. if (stringLength >= 7 && stringLength <= 10) return true;
  66. return false;
  67. };
  68. cuid.fingerprint = fingerprint;
  69. module.exports = cuid;
  70. },{"./lib/fingerprint.js":2,"./lib/getRandomValue.js":3,"./lib/pad.js":4}],2:[function(require,module,exports){
  71. var pad = require('./pad.js');
  72. var env = typeof window === 'object' ? window : self;
  73. var globalCount = Object.keys(env).length;
  74. var mimeTypesLength = navigator.mimeTypes ? navigator.mimeTypes.length : 0;
  75. var clientId = pad((mimeTypesLength +
  76. navigator.userAgent.length).toString(36) +
  77. globalCount.toString(36), 4);
  78. module.exports = function fingerprint () {
  79. return clientId;
  80. };
  81. },{"./pad.js":4}],3:[function(require,module,exports){
  82. var getRandomValue;
  83. var crypto = typeof window !== 'undefined' &&
  84. (window.crypto || window.msCrypto) ||
  85. typeof self !== 'undefined' &&
  86. self.crypto;
  87. if (crypto) {
  88. var lim = Math.pow(2, 32) - 1;
  89. getRandomValue = function () {
  90. return Math.abs(crypto.getRandomValues(new Uint32Array(1))[0] / lim);
  91. };
  92. } else {
  93. getRandomValue = Math.random;
  94. }
  95. module.exports = getRandomValue;
  96. },{}],4:[function(require,module,exports){
  97. module.exports = function pad (num, size) {
  98. var s = '000000000' + num;
  99. return s.substr(s.length - size);
  100. };
  101. },{}]},{},[1])(1)
  102. });