2023-10-03 11:14:36 +08:00
|
|
|
(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){
|
|
|
|
/**
|
|
|
|
* cuid.js
|
|
|
|
* Collision-resistant UID generator for browsers and node.
|
|
|
|
* Sequential for fast db lookups and recency sorting.
|
|
|
|
* Safe for element IDs and server-side lookups.
|
|
|
|
*
|
|
|
|
* Extracted from CLCTR
|
|
|
|
*
|
|
|
|
* Copyright (c) Eric Elliott 2012
|
|
|
|
* MIT License
|
|
|
|
*/
|
|
|
|
|
|
|
|
var fingerprint = require('./lib/fingerprint.js');
|
|
|
|
var pad = require('./lib/pad.js');
|
|
|
|
var getRandomValue = require('./lib/getRandomValue.js');
|
|
|
|
|
|
|
|
var c = 0,
|
|
|
|
blockSize = 4,
|
|
|
|
base = 36,
|
|
|
|
discreteValues = Math.pow(base, blockSize);
|
|
|
|
|
|
|
|
function randomBlock () {
|
|
|
|
return pad((getRandomValue() *
|
|
|
|
discreteValues << 0)
|
|
|
|
.toString(base), blockSize);
|
|
|
|
}
|
|
|
|
|
|
|
|
function safeCounter () {
|
|
|
|
c = c < discreteValues ? c : 0;
|
|
|
|
c++; // this is not subliminal
|
|
|
|
return c - 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
function cuid () {
|
|
|
|
// Starting with a lowercase letter makes
|
|
|
|
// it HTML element ID friendly.
|
|
|
|
var letter = 'c', // hard-coded allows for sequential access
|
|
|
|
|
|
|
|
// timestamp
|
|
|
|
// warning: this exposes the exact date and time
|
|
|
|
// that the uid was created.
|
|
|
|
timestamp = (new Date().getTime()).toString(base),
|
|
|
|
|
|
|
|
// Prevent same-machine collisions.
|
|
|
|
counter = pad(safeCounter().toString(base), blockSize),
|
|
|
|
|
|
|
|
// A few chars to generate distinct ids for different
|
|
|
|
// clients (so different computers are far less
|
|
|
|
// likely to generate the same id)
|
|
|
|
print = fingerprint(),
|
|
|
|
|
|
|
|
// Grab some more chars from Math.random()
|
|
|
|
random = randomBlock() + randomBlock();
|
|
|
|
|
|
|
|
return letter + timestamp + counter + print + random;
|
|
|
|
}
|
|
|
|
|
|
|
|
cuid.slug = function slug () {
|
|
|
|
var date = new Date().getTime().toString(36),
|
|
|
|
counter = safeCounter().toString(36).slice(-4),
|
|
|
|
print = fingerprint().slice(0, 1) +
|
|
|
|
fingerprint().slice(-1),
|
|
|
|
random = randomBlock().slice(-2);
|
|
|
|
|
|
|
|
return date.slice(-2) +
|
|
|
|
counter + print + random;
|
|
|
|
};
|
|
|
|
|
|
|
|
cuid.isCuid = function isCuid (stringToCheck) {
|
|
|
|
if (typeof stringToCheck !== 'string') return false;
|
|
|
|
if (stringToCheck.startsWith('c')) return true;
|
|
|
|
return false;
|
|
|
|
};
|
|
|
|
|
|
|
|
cuid.isSlug = function isSlug (stringToCheck) {
|
|
|
|
if (typeof stringToCheck !== 'string') return false;
|
|
|
|
var stringLength = stringToCheck.length;
|
|
|
|
if (stringLength >= 7 && stringLength <= 10) return true;
|
|
|
|
return false;
|
|
|
|
};
|
|
|
|
|
|
|
|
cuid.fingerprint = fingerprint;
|
|
|
|
|
|
|
|
module.exports = cuid;
|
|
|
|
|
|
|
|
},{"./lib/fingerprint.js":2,"./lib/getRandomValue.js":3,"./lib/pad.js":4}],2:[function(require,module,exports){
|
|
|
|
var pad = require('./pad.js');
|
|
|
|
|
|
|
|
var env = typeof window === 'object' ? window : self;
|
|
|
|
var globalCount = Object.keys(env).length;
|
|
|
|
var mimeTypesLength = navigator.mimeTypes ? navigator.mimeTypes.length : 0;
|
|
|
|
var clientId = pad((mimeTypesLength +
|
|
|
|
navigator.userAgent.length).toString(36) +
|
|
|
|
globalCount.toString(36), 4);
|
|
|
|
|
|
|
|
module.exports = function fingerprint () {
|
|
|
|
return clientId;
|
|
|
|
};
|
|
|
|
|
|
|
|
},{"./pad.js":4}],3:[function(require,module,exports){
|
|
|
|
|
|
|
|
var getRandomValue;
|
|
|
|
|
|
|
|
var crypto = typeof window !== 'undefined' &&
|
|
|
|
(window.crypto || window.msCrypto) ||
|
|
|
|
typeof self !== 'undefined' &&
|
|
|
|
self.crypto;
|
|
|
|
|
|
|
|
if (crypto) {
|
|
|
|
var lim = Math.pow(2, 32) - 1;
|
|
|
|
getRandomValue = function () {
|
|
|
|
return Math.abs(crypto.getRandomValues(new Uint32Array(1))[0] / lim);
|
|
|
|
};
|
|
|
|
} else {
|
|
|
|
getRandomValue = Math.random;
|
|
|
|
}
|
|
|
|
|
|
|
|
module.exports = getRandomValue;
|
|
|
|
|
|
|
|
},{}],4:[function(require,module,exports){
|
|
|
|
module.exports = function pad (num, size) {
|
|
|
|
var s = '000000000' + num;
|
|
|
|
return s.substr(s.length - size);
|
|
|
|
};
|
|
|
|
|
|
|
|
},{}]},{},[1])(1)
|
|
|
|
});
|