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
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;
|
|
};
|