[SignalingServer] Optimize dependent modules
[platform/framework/web/wrtjs.git] / signaling_server / service / node_modules / qrcode / lib / server.js
1 var canPromise = require('./can-promise')
2 var QRCode = require('./core/qrcode')
3 var PngRenderer = require('./renderer/png')
4 var Utf8Renderer = require('./renderer/utf8')
5 var TerminalRenderer = require('./renderer/terminal')
6 var SvgRenderer = require('./renderer/svg')
7
8 function checkParams (text, opts, cb) {
9   if (typeof text === 'undefined') {
10     throw new Error('String required as first argument')
11   }
12
13   if (typeof cb === 'undefined') {
14     cb = opts
15     opts = {}
16   }
17
18   if (typeof cb !== 'function') {
19     if (!canPromise()) {
20       throw new Error('Callback required as last argument')
21     } else {
22       opts = cb || {}
23       cb = null
24     }
25   }
26
27   return {
28     opts: opts,
29     cb: cb
30   }
31 }
32
33 function getTypeFromFilename (path) {
34   return path.slice((path.lastIndexOf('.') - 1 >>> 0) + 2).toLowerCase()
35 }
36
37 function getRendererFromType (type) {
38   switch (type) {
39     case 'svg':
40       return SvgRenderer
41
42     case 'txt':
43     case 'utf8':
44       return Utf8Renderer
45
46     case 'png':
47     case 'image/png':
48     default:
49       return PngRenderer
50   }
51 }
52
53 function getStringRendererFromType (type) {
54   switch (type) {
55     case 'svg':
56       return SvgRenderer
57
58     case 'terminal':
59       return TerminalRenderer
60
61     case 'utf8':
62     default:
63       return Utf8Renderer
64   }
65 }
66
67 function render (renderFunc, text, params) {
68   if (!params.cb) {
69     return new Promise(function (resolve, reject) {
70       try {
71         var data = QRCode.create(text, params.opts)
72         return renderFunc(data, params.opts, function (err, data) {
73           return err ? reject(err) : resolve(data)
74         })
75       } catch (e) {
76         reject(e)
77       }
78     })
79   }
80
81   try {
82     var data = QRCode.create(text, params.opts)
83     return renderFunc(data, params.opts, params.cb)
84   } catch (e) {
85     params.cb(e)
86   }
87 }
88
89 exports.create = QRCode.create
90
91 exports.toCanvas = require('./browser').toCanvas
92
93 exports.toString = function toString (text, opts, cb) {
94   var params = checkParams(text, opts, cb)
95   var renderer = getStringRendererFromType(params.opts.type)
96   return render(renderer.render, text, params)
97 }
98
99 exports.toDataURL = function toDataURL (text, opts, cb) {
100   var params = checkParams(text, opts, cb)
101   var renderer = getRendererFromType(params.opts.type)
102   return render(renderer.renderToDataURL, text, params)
103 }
104
105 exports.toBuffer = function toBuffer (text, opts, cb) {
106   var params = checkParams(text, opts, cb)
107   var renderer = getRendererFromType(params.opts.type)
108   return render(renderer.renderToBuffer, text, params)
109 }
110
111 exports.toFile = function toFile (path, text, opts, cb) {
112   if (typeof path !== 'string' || !(typeof text === 'string' || typeof text === 'object')) {
113     throw new Error('Invalid argument')
114   }
115
116   if ((arguments.length < 3) && !canPromise()) {
117     throw new Error('Too few arguments provided')
118   }
119
120   var params = checkParams(text, opts, cb)
121   var type = params.opts.type || getTypeFromFilename(path)
122   var renderer = getRendererFromType(type)
123   var renderToFile = renderer.renderToFile.bind(null, path)
124
125   return render(renderToFile, text, params)
126 }
127
128 exports.toFileStream = function toFileStream (stream, text, opts) {
129   if (arguments.length < 2) {
130     throw new Error('Too few arguments provided')
131   }
132
133   var params = checkParams(text, opts, stream.emit.bind(stream, 'error'))
134   var renderer = getRendererFromType('png') // Only png support for now
135   var renderToFileStream = renderer.renderToFileStream.bind(null, stream)
136   render(renderToFileStream, text, params)
137 }