filestack-js
Version:
Official JavaScript library for Filestack
147 lines (145 loc) • 12.8 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.normalizeName = exports.set = exports.normalizeHeaders = exports.parse = void 0;
/*
* Copyright (c) 2018 by Filestack
* Some rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
var utils_1 = require("./../utils");
var ignoreDuplicates = [
'expires',
'from',
'host',
'if-modified-since',
'if-unmodified-since',
'age',
'authorization',
'content-length',
'content-type',
'etag',
'last-modified',
'location',
'max-forwards',
'proxy-authorization',
'referer',
'retry-after',
'user-agent',
];
/**
* Parse response raw header (xhr)
*
* @param {string} headers - raw headers string
*/
var parse = function (headers) {
var parsed = {};
var key;
var val;
var i;
if (!headers) {
return parsed;
}
headers.split('\n').forEach(function (line) {
i = line.indexOf(':');
key = (0, utils_1.trim)(line.substr(0, i)).toLowerCase();
val = (0, utils_1.trim)(line.substr(i + 1));
if (!key) {
return;
}
if (parsed[key] && ignoreDuplicates.indexOf(key) >= 0) {
return;
}
if (key === 'set-cookie') {
parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);
}
else {
parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;
}
});
return parsed;
};
exports.parse = parse;
/**
* Normalize input headers
*
* @param headers
*/
var normalizeHeaders = function (headers) {
if (!headers) {
return {};
}
var toReturn = {};
for (var i in headers) {
toReturn[(0, exports.normalizeName)(i)] = headers[i];
}
return toReturn;
};
exports.normalizeHeaders = normalizeHeaders;
// expect(set({}, 'set-cookies', 'value')).toEqual({ 'Set-Cookies': 'value' });
/**
* Set request headers
*
* @param headers - object containing headers
* @param name - header name
* @param value - header value
* @param setIFExists - determine if we should change header value if exists
*/
var set = function (headers, name, value, setIFExists) {
if (setIFExists === void 0) { setIFExists = false; }
var normalizedName = (0, exports.normalizeName)(name);
if (!headers) {
headers = {};
}
// cleanup headers from undefined vals
headers = JSON.parse(JSON.stringify(headers));
if (headers[name] === undefined && headers[normalizedName] === undefined) {
headers[normalizedName] = value;
}
else if (setIFExists) {
delete headers[name];
headers[normalizedName] = value;
}
return headers;
};
exports.set = set;
/**
* Normalize header names according to rfc spec
*
* @param {string} name - header name
*/
var normalizeName = function (name) {
// the exceptions
var result = {
'content-md5': 'Content-MD5',
dnt: 'DNT',
etag: 'ETag',
'last-event-id': 'Last-Event-ID',
tcn: 'TCN',
te: 'TE',
'www-authenticate': 'WWW-Authenticate',
'x-dnsprefetch-control': 'X-DNSPrefetch-Control',
}[name.toLowerCase()];
if (result) {
return result;
}
// the default
return name
.split('-')
.map(function (text) {
return text.charAt(0).toUpperCase() + text.substr(1).toLowerCase();
})
.join('-');
};
exports.normalizeName = normalizeName;
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvcmVxdWVzdC9oZWxwZXJzL2hlYWRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsb0NBQWtDO0FBR2xDLElBQU0sZ0JBQWdCLEdBQUc7SUFDdkIsU0FBUztJQUNULE1BQU07SUFDTixNQUFNO0lBQ04sbUJBQW1CO0lBQ25CLHFCQUFxQjtJQUNyQixLQUFLO0lBQ0wsZUFBZTtJQUNmLGdCQUFnQjtJQUNoQixjQUFjO0lBQ2QsTUFBTTtJQUNOLGVBQWU7SUFDZixVQUFVO0lBQ1YsY0FBYztJQUNkLHFCQUFxQjtJQUNyQixTQUFTO0lBQ1QsYUFBYTtJQUNiLFlBQVk7Q0FDYixDQUFDO0FBRUY7Ozs7R0FJRztBQUNJLElBQU0sS0FBSyxHQUFHLFVBQUEsT0FBTztJQUMxQixJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFDaEIsSUFBSSxHQUFHLENBQUM7SUFDUixJQUFJLEdBQUcsQ0FBQztJQUNSLElBQUksQ0FBQyxDQUFDO0lBRU4sSUFBSSxDQUFDLE9BQU8sRUFBRTtRQUNaLE9BQU8sTUFBTSxDQUFDO0tBQ2Y7SUFFRCxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFBLElBQUk7UUFDOUIsQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdEIsR0FBRyxHQUFHLElBQUEsWUFBSSxFQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDNUMsR0FBRyxHQUFHLElBQUEsWUFBSSxFQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFL0IsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNSLE9BQU87U0FDUjtRQUVELElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLGdCQUFn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SSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JFLENBQUMsQ0FBQztTQUNELElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNmLENBQUMsQ0FBQztBQXhCVyxRQUFBLGFBQWEsaUJBd0J4QiIsImZpbGUiOiJsaWIvcmVxdWVzdC9oZWxwZXJzL2hlYWRlcnMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE4IGJ5IEZpbGVzdGFja1xuICogU29tZSByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgeyB0cmltIH0gZnJvbSAnLi8uLi91dGlscyc7XG5pbXBvcnQgeyBGc1JlcXVlc3RIZWFkZXJzIH0gZnJvbSAnLi8uLi90eXBlcyc7XG5cbmNvbnN0IGlnbm9yZUR1cGxpY2F0ZXMgPSBbXG4gICdleHBpcmVzJyxcbiAgJ2Zyb20nLFxuICAnaG9zdCcsXG4gICdpZi1tb2RpZmllZC1zaW5jZScsXG4gICdpZi11bm1vZGlmaWVkLXNpbmNlJyxcbiAgJ2FnZScsXG4gICdhdXRob3JpemF0aW9uJyxcbiAgJ2NvbnRlbnQtbGVuZ3RoJyxcbiAgJ2NvbnRlbnQtdHlwZScsXG4gICdldGFnJyxcbiAgJ2xhc3QtbW9kaWZpZWQnLFxuICAnbG9jYXRpb24nLFxuICAnbWF4LWZvcndhcmRzJyxcbiAgJ3Byb3h5LWF1dGhvcml6YXRpb24nLFxuICAncmVmZXJlcicsXG4gICdyZXRyeS1hZnRlcicsXG4gICd1c2VyLWFnZW50Jyxcbl07XG5cbi8qKlxuICogUGFyc2UgcmVzcG9uc2UgcmF3IGhlYWRlciAoeGhyKVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBoZWFkZXJzIC0gcmF3IGhlYWRlcnMgc3RyaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBwYXJzZSA9IGhlYWRlcnMgPT4ge1xuICBsZXQgcGFyc2VkID0ge307XG4gIGxldCBrZXk7XG4gIGxldCB2YWw7XG4gIGxldCBpO1xuXG4gIGlmICghaGVhZGVycykge1xuICAgIHJldHVybiBwYXJzZWQ7XG4gIH1cblxuICBoZWFkZXJzLnNwbGl0KCdcXG4nKS5mb3JFYWNoKGxpbmUgPT4ge1xuICAgIGkgPSBsaW5lLmluZGV4T2YoJzonKTtcbiAgICBrZXkgPSB0cmltKGxpbmUuc3Vic3RyKDAsIGkpKS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhbCA9IHRyaW0obGluZS5zdWJzdHIoaSArIDEpKTtcblxuICAgIGlmICgha2V5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHBhcnNlZFtrZXldICYmIGlnbm9yZUR1cGxpY2F0ZXMuaW5kZXhPZihrZXkpID49IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgIHBhcnNlZFtrZXldID0gKHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gOiBbXSkuY29uY2F0KFt2YWxdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyc2VkW2tleV0gPSBwYXJzZWRba2V5XSA/IHBhcnNlZFtrZXldICsgJywgJyArIHZhbCA6IHZhbDtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwYXJzZWQ7XG59O1xuXG4vKipcbiAqIE5vcm1hbGl6ZSBpbnB1dCBoZWFkZXJzXG4gKlxuICogQHBhcmFtIGhlYWRlcnNcbiAqL1xuZXhwb3J0IGNvbnN0IG5vcm1hbGl6ZUhlYWRlcnMgPSAoaGVhZGVyczogRnNSZXF1ZXN0SGVhZGVycyk6IEZzUmVxdWVzdEhlYWRlcnMgPT4ge1xuICBpZiAoIWhlYWRlcnMpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBjb25zdCB0b1JldHVybiA9IHt9O1xuXG4gIGZvciAobGV0IGkgaW4gaGVhZGVycykge1xuICAgIHRvUmV0dXJuW25vcm1hbGl6ZU5hbWUoaSldID0gIGhlYWRlcnNbaV07XG4gIH1cblxuICByZXR1cm4gdG9SZXR1cm47XG59O1xuXG4vLyBleHBlY3Qoc2V0KHt9LCAnc2V0LWNvb2tpZXMnLCAndmFsdWUnKSkudG9FcXVhbCh7ICdTZXQtQ29va2llcyc6ICd2YWx1ZScgfSk7XG4vKipcbiAqIFNldCByZXF1ZXN0IGhlYWRlcnNcbiAqXG4gKiBAcGFyYW0gaGVhZGVycyAtIG9iamVjdCBjb250YWluaW5nIGhlYWRlcnNcbiAqIEBwYXJhbSBuYW1lIC0gaGVhZGVyIG5hbWVcbiAqIEBwYXJhbSB2YWx1ZSAtIGhlYWRlciB2YWx1ZVxuICogQHBhcmFtIHNldElGRXhpc3RzIC0gZGV0ZXJtaW5lIGlmIHdlIHNob3VsZCBjaGFuZ2UgaGVhZGVyIHZhbHVlIGlmIGV4aXN0c1xuICovXG5leHBvcnQgY29uc3Qgc2V0ID0gKGhlYWRlcnM6IEZzUmVxdWVzdEhlYWRlcnMsIG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZywgc2V0SUZFeGlzdHMgPSBmYWxzZSkgPT4ge1xuICBjb25zdCBub3JtYWxpemVkTmFtZSA9IG5vcm1hbGl6ZU5hbWUobmFtZSk7XG5cbiAgaWYgKCFoZWFkZXJzKSB7XG4gICAgaGVhZGVycyA9IHt9O1xuICB9XG5cbiAgLy8gY2xlYW51cCBoZWFkZXJzIGZyb20gdW5kZWZpbmVkIHZhbHNcbiAgaGVhZGVycyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaGVhZGVycykpO1xuICBpZiAoaGVhZGVyc1tuYW1lXSA9PT0gdW5kZWZpbmVkICYmIGhlYWRlcnNbbm9ybWFsaXplZE5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICBoZWFkZXJzW25vcm1hbGl6ZWROYW1lXSA9IHZhbHVlO1xuICB9IGVsc2UgaWYgKHNldElGRXhpc3RzKSB7XG4gICAgZGVsZXRlIGhlYWRlcnNbbmFtZV07XG4gICAgaGVhZGVyc1tub3JtYWxpemVkTmFtZV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBoZWFkZXJzO1xufTtcblxuLyoqXG4gKiBOb3JtYWxpemUgaGVhZGVyIG5hbWVzIGFjY29yZGluZyB0byByZmMgc3BlY1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gaGVhZGVyIG5hbWVcbiAqL1xuZXhwb3J0IGNvbnN0IG5vcm1hbGl6ZU5hbWUgPSAobmFtZTogc3RyaW5nKSA9PiB7XG4gIC8vIHRoZSBleGNlcHRpb25zXG4gIGxldCByZXN1bHQgPSB7XG4gICAgJ2NvbnRlbnQtbWQ1JzogJ0NvbnRlbnQtTUQ1JyxcbiAgICBkbnQ6ICdETlQnLFxuICAgIGV0YWc6ICdFVGFnJyxcbiAgICAnbGFzdC1ldmVudC1pZCc6ICdMYXN0LUV2ZW50LUlEJyxcbiAgICB0Y246ICdUQ04nLFxuICAgIHRlOiAnVEUnLFxuICAgICd3d3ctYXV0aGVudGljYXRlJzogJ1dXVy1BdXRoZW50aWNhdGUnLFxuICAgICd4LWRuc3ByZWZldGNoLWNvbnRyb2wnOiAnWC1ETlNQcmVmZXRjaC1Db250cm9sJyxcbiAgfVtuYW1lLnRvTG93ZXJDYXNlKCldO1xuXG4gIGlmIChyZXN1bHQpIHtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gdGhlIGRlZmF1bHRcbiAgcmV0dXJuIG5hbWVcbiAgICAuc3BsaXQoJy0nKVxuICAgIC5tYXAoZnVuY3Rpb24odGV4dCkge1xuICAgICAgcmV0dXJuIHRleHQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0ZXh0LnN1YnN0cigxKS50b0xvd2VyQ2FzZSgpO1xuICAgIH0pXG4gICAgLmpvaW4oJy0nKTtcbn07XG4iXX0=
;