root / HServer / 00.Server / 00.Program / node_modules / yeast / index.js
이력 | 보기 | 이력해설 | 다운로드 (1.32 KB)
1 |
'use strict';
|
---|---|
2 |
|
3 |
var alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_'.split('') |
4 |
, length = 64
|
5 |
, map = {} |
6 |
, seed = 0
|
7 |
, i = 0
|
8 |
, prev; |
9 |
|
10 |
/**
|
11 |
* Return a string representing the specified number.
|
12 |
*
|
13 |
* @param {Number} num The number to convert.
|
14 |
* @returns {String} The string representation of the number.
|
15 |
* @api public
|
16 |
*/
|
17 |
function encode(num) { |
18 |
var encoded = ''; |
19 |
|
20 |
do {
|
21 |
encoded = alphabet[num % length] + encoded; |
22 |
num = Math.floor(num / length); |
23 |
} while (num > 0); |
24 |
|
25 |
return encoded;
|
26 |
} |
27 |
|
28 |
/**
|
29 |
* Return the integer value specified by the given string.
|
30 |
*
|
31 |
* @param {String} str The string to convert.
|
32 |
* @returns {Number} The integer value represented by the string.
|
33 |
* @api public
|
34 |
*/
|
35 |
function decode(str) { |
36 |
var decoded = 0; |
37 |
|
38 |
for (i = 0; i < str.length; i++) { |
39 |
decoded = decoded * length + map[str.charAt(i)]; |
40 |
} |
41 |
|
42 |
return decoded;
|
43 |
} |
44 |
|
45 |
/**
|
46 |
* Yeast: A tiny growing id generator.
|
47 |
*
|
48 |
* @returns {String} A unique id.
|
49 |
* @api public
|
50 |
*/
|
51 |
function yeast() { |
52 |
var now = encode(+new Date()); |
53 |
|
54 |
if (now !== prev) return seed = 0, prev = now; |
55 |
return now +'.'+ encode(seed++); |
56 |
} |
57 |
|
58 |
//
|
59 |
// Map each character to its index.
|
60 |
//
|
61 |
for (; i < length; i++) map[alphabet[i]] = i;
|
62 |
|
63 |
//
|
64 |
// Expose the `yeast`, `encode` and `decode` functions.
|
65 |
//
|
66 |
yeast.encode = encode; |
67 |
yeast.decode = decode; |
68 |
module.exports = yeast; |