You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

40 lines
1.0 KiB
JavaScript

var maybeEncodeValue, zeroFill;
zeroFill = require("zero-fill");
maybeEncodeValue = function(value) {
var encoded;
if (/[^ -~]/.exec(value)) {
encoded = encodeURIComponent(value);
return "uri(" + encoded + ")";
} else {
return value;
}
};
module.exports = function(metadata) {
var headerName, headers, i, itemCount, key, numberWidth, value, values, _i, _len;
headers = {};
for (key in metadata) {
values = metadata[key];
if (!Array.isArray(values)) {
values = [values];
}
key = key.replace("_", "--");
itemCount = values.length;
if (itemCount === 0) {
continue;
} else if (itemCount === 1) {
headers["x-archive-meta-" + key] = maybeEncodeValue(values[0]);
} else {
numberWidth = itemCount.toString().length;
for (i = _i = 0, _len = values.length; _i < _len; i = ++_i) {
value = values[i];
headerName = "x-archive-meta" + (zeroFill(numberWidth, i + 1)) + "-" + key;
headers[headerName] = maybeEncodeValue(value);
}
}
}
return headers;
};