123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- var util = require('util');
- /**
- * Module exports.
- */
- exports.parse = parse;
- exports.format = format;
- /**
- * Parse extensions header value
- */
- function parse(value) {
- value = value || '';
- var extensions = {};
- value.split(',').forEach(function(v) {
- var params = v.split(';');
- var token = params.shift().trim();
- if (extensions[token] === undefined) {
- extensions[token] = [];
- } else if (!extensions.hasOwnProperty(token)) {
- return;
- }
- var parsedParams = {};
- params.forEach(function(param) {
- var parts = param.trim().split('=');
- var key = parts[0];
- var value = parts[1];
- if (typeof value === 'undefined') {
- value = true;
- } else {
- // unquote value
- if (value[0] === '"') {
- value = value.slice(1);
- }
- if (value[value.length - 1] === '"') {
- value = value.slice(0, value.length - 1);
- }
- }
- if (parsedParams[key] === undefined) {
- parsedParams[key] = [value];
- } else if (parsedParams.hasOwnProperty(key)) {
- parsedParams[key].push(value);
- }
- });
- extensions[token].push(parsedParams);
- });
- return extensions;
- }
- /**
- * Format extensions header value
- */
- function format(value) {
- return Object.keys(value).map(function(token) {
- var paramsList = value[token];
- if (!util.isArray(paramsList)) {
- paramsList = [paramsList];
- }
- return paramsList.map(function(params) {
- return [token].concat(Object.keys(params).map(function(k) {
- var p = params[k];
- if (!util.isArray(p)) p = [p];
- return p.map(function(v) {
- return v === true ? k : k + '=' + v;
- }).join('; ');
- })).join('; ');
- }).join(', ');
- }).join(', ');
- }
|