프로젝트

일반

사용자정보

통계
| 개정판:

root / HServer / 00.Server / 00.Program / node_modules / uid-safe / index.js

이력 | 보기 | 이력해설 | 다운로드 (1.89 KB)

1
/*!
2
 * uid-safe
3
 * Copyright(c) 2014 Jonathan Ong
4
 * Copyright(c) 2015-2017 Douglas Christopher Wilson
5
 * MIT Licensed
6
 */
7

    
8
'use strict'
9

    
10
/**
11
 * Module dependencies.
12
 * @private
13
 */
14

    
15
var randomBytes = require('random-bytes')
16

    
17
/**
18
 * Module variables.
19
 * @private
20
 */
21

    
22
var EQUAL_END_REGEXP = /=+$/
23
var PLUS_GLOBAL_REGEXP = /\+/g
24
var SLASH_GLOBAL_REGEXP = /\//g
25

    
26
/**
27
 * Module exports.
28
 * @public
29
 */
30

    
31
module.exports = uid
32
module.exports.sync = uidSync
33

    
34
/**
35
 * Create a unique ID.
36
 *
37
 * @param {number} length
38
 * @param {function} [callback]
39
 * @return {Promise}
40
 * @public
41
 */
42

    
43
function uid (length, callback) {
44
  // validate callback is a function, if provided
45
  if (callback !== undefined && typeof callback !== 'function') {
46
    throw new TypeError('argument callback must be a function')
47
  }
48

    
49
  // require the callback without promises
50
  if (!callback && !global.Promise) {
51
    throw new TypeError('argument callback is required')
52
  }
53

    
54
  if (callback) {
55
    // classic callback style
56
    return generateUid(length, callback)
57
  }
58

    
59
  return new Promise(function executor (resolve, reject) {
60
    generateUid(length, function onUid (err, str) {
61
      if (err) return reject(err)
62
      resolve(str)
63
    })
64
  })
65
}
66

    
67
/**
68
 * Create a unique ID sync.
69
 *
70
 * @param {number} length
71
 * @return {string}
72
 * @public
73
 */
74

    
75
function uidSync (length) {
76
  return toString(randomBytes.sync(length))
77
}
78

    
79
/**
80
 * Generate a unique ID string.
81
 *
82
 * @param {number} length
83
 * @param {function} callback
84
 * @private
85
 */
86

    
87
function generateUid (length, callback) {
88
  randomBytes(length, function (err, buf) {
89
    if (err) return callback(err)
90
    callback(null, toString(buf))
91
  })
92
}
93

    
94
/**
95
 * Change a Buffer into a string.
96
 *
97
 * @param {Buffer} buf
98
 * @return {string}
99
 * @private
100
 */
101

    
102
function toString (buf) {
103
  return buf.toString('base64')
104
    .replace(EQUAL_END_REGEXP, '')
105
    .replace(PLUS_GLOBAL_REGEXP, '-')
106
    .replace(SLASH_GLOBAL_REGEXP, '_')
107
}