[SignalingServer] Optimize dependent modules
[platform/framework/web/wrtjs.git] / device_home / node_modules / yeast / index.js
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;