12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
-
- 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();
- var paramsList = extensions[token] = extensions[token] || [];
- 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);
- }
- }
- (parsedParams[key] = parsedParams[key] || []).push(value);
- });
-
- paramsList.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(', ');
- }
|