Websocket
[VSoRC/.git] / node_modules / body-parser / index.js
1 /*!
2  * body-parser
3  * Copyright(c) 2014-2015 Douglas Christopher Wilson
4  * MIT Licensed
5  */
6
7 'use strict'
8
9 /**
10  * Module dependencies.
11  * @private
12  */
13
14 var deprecate = require('depd')('body-parser')
15
16 /**
17  * Cache of loaded parsers.
18  * @private
19  */
20
21 var parsers = Object.create(null)
22
23 /**
24  * @typedef Parsers
25  * @type {function}
26  * @property {function} json
27  * @property {function} raw
28  * @property {function} text
29  * @property {function} urlencoded
30  */
31
32 /**
33  * Module exports.
34  * @type {Parsers}
35  */
36
37 exports = module.exports = deprecate.function(bodyParser,
38   'bodyParser: use individual json/urlencoded middlewares')
39
40 /**
41  * JSON parser.
42  * @public
43  */
44
45 Object.defineProperty(exports, 'json', {
46   configurable: true,
47   enumerable: true,
48   get: createParserGetter('json')
49 })
50
51 /**
52  * Raw parser.
53  * @public
54  */
55
56 Object.defineProperty(exports, 'raw', {
57   configurable: true,
58   enumerable: true,
59   get: createParserGetter('raw')
60 })
61
62 /**
63  * Text parser.
64  * @public
65  */
66
67 Object.defineProperty(exports, 'text', {
68   configurable: true,
69   enumerable: true,
70   get: createParserGetter('text')
71 })
72
73 /**
74  * URL-encoded parser.
75  * @public
76  */
77
78 Object.defineProperty(exports, 'urlencoded', {
79   configurable: true,
80   enumerable: true,
81   get: createParserGetter('urlencoded')
82 })
83
84 /**
85  * Create a middleware to parse json and urlencoded bodies.
86  *
87  * @param {object} [options]
88  * @return {function}
89  * @deprecated
90  * @public
91  */
92
93 function bodyParser (options) {
94   var opts = {}
95
96   // exclude type option
97   if (options) {
98     for (var prop in options) {
99       if (prop !== 'type') {
100         opts[prop] = options[prop]
101       }
102     }
103   }
104
105   var _urlencoded = exports.urlencoded(opts)
106   var _json = exports.json(opts)
107
108   return function bodyParser (req, res, next) {
109     _json(req, res, function (err) {
110       if (err) return next(err)
111       _urlencoded(req, res, next)
112     })
113   }
114 }
115
116 /**
117  * Create a getter for loading a parser.
118  * @private
119  */
120
121 function createParserGetter (name) {
122   return function get () {
123     return loadParser(name)
124   }
125 }
126
127 /**
128  * Load a parser module.
129  * @private
130  */
131
132 function loadParser (parserName) {
133   var parser = parsers[parserName]
134
135   if (parser !== undefined) {
136     return parser
137   }
138
139   // this uses a switch for static require analysis
140   switch (parserName) {
141     case 'json':
142       parser = require('./lib/types/json')
143       break
144     case 'raw':
145       parser = require('./lib/types/raw')
146       break
147     case 'text':
148       parser = require('./lib/types/text')
149       break
150     case 'urlencoded':
151       parser = require('./lib/types/urlencoded')
152       break
153   }
154
155   // store to prevent invoking require()
156   return (parsers[parserName] = parser)
157 }