arnaucube
arnaucube/socketioMEANseedPublic Self-hosted repository
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}