socketioMEANseed/server/node_modules/ws/lib/Extensions.js
server/node_modules/ws/lib/Extensions.jsRaw
1
2var util = require('util');
3
4/**
5 * Module exports.
6 */
7
8exports.parse = parse;
9exports.format = format;
10
11/**
12 * Parse extensions header value
13 */
14
15function parse(value) {
16 value = value || '';
17
18 var extensions = {};
19
20 value.split(',').forEach(function(v) {
21 var params = v.split(';');
22 var token = params.shift().trim();
23 var paramsList = extensions[token] = extensions[token] || [];
24 var parsedParams = {};
25
26 params.forEach(function(param) {
27 var parts = param.trim().split('=');
28 var key = parts[0];
29 var value = parts[1];
30 if (typeof value === 'undefined') {
31 value = true;
32 } else {
33 // unquote value
34 if (value[0] === '"') {
35 value = value.slice(1);
36 }
37 if (value[value.length - 1] === '"') {
38 value = value.slice(0, value.length - 1);
39 }
40 }
41 (parsedParams[key] = parsedParams[key] || []).push(value);
42 });
43
44 paramsList.push(parsedParams);
45 });
46
47 return extensions;
48}
49
50/**
51 * Format extensions header value
52 */
53
54function format(value) {
55 return Object.keys(value).map(function(token) {
56 var paramsList = value[token];
57 if (!util.isArray(paramsList)) {
58 paramsList = [paramsList];
59 }
60 return paramsList.map(function(params) {
61 return [token].concat(Object.keys(params).map(function(k) {
62 var p = params[k];
63 if (!util.isArray(p)) p = [p];
64 return p.map(function(v) {
65 return v === true ? k : k + '=' + v;
66 }).join('; ');
67 })).join('; ');
68 }).join(', ');
69 }).join(', ');
70}