superagent
Version:
elegant & feature rich browser / node HTTP with a fluent API
132 lines (118 loc) • 11.6 kB
JavaScript
;
/**
* Return the mime type for the given `str`.
*
* @param {String} str
* @return {String}
* @api private
*/
exports.type = string_ => string_.split(/ *; */).shift();
/**
* Return header field parameters.
*
* @param {String} str
* @return {Object}
* @api private
*/
exports.params = value => {
const object = {};
for (const string_ of value.split(/ *; */)) {
const parts = string_.split(/ *= */);
const key = parts.shift();
const value = parts.shift();
if (key && value) object[key] = value;
}
return object;
};
/**
* Parse Link header fields.
*
* @param {String} str
* @return {Object}
* @api private
*/
exports.parseLinks = value => {
const object = {};
for (const string_ of value.split(/ *, */)) {
const parts = string_.split(/ *; */);
const url = parts[0].slice(1, -1);
for (const part of parts.slice(1)) {
const [key, keyValue] = part.split(/ *= */, 2);
if (key && key.toLowerCase() === 'rel' && keyValue) {
const relationship = keyValue.replace(/^"|"$/g, '');
if (relationship) object[relationship] = url;
break;
}
}
}
return object;
};
/**
* Strip content related fields from `header`.
*
* @param {Object} header
* @return {Object} header
* @api private
*/
exports.cleanHeader = (header, changesOrigin) => {
delete header['content-type'];
delete header['content-length'];
delete header['transfer-encoding'];
delete header.host;
// secuirty
if (changesOrigin) {
delete header.authorization;
delete header.cookie;
}
return header;
};
exports.normalizeHostname = hostname => {
const [, normalized] = hostname.match(/^\[([^\]]+)]$/) || [];
return normalized || hostname;
};
/**
* Check if `obj` is an object.
*
* @param {Object} object
* @return {Boolean}
* @api private
*/
exports.isObject = object => {
return object !== null && typeof object === 'object';
};
/**
* Object.hasOwn fallback/polyfill.
*
* @type {(object: object, property: string) => boolean} object
* @api private
*/
exports.hasOwn = Object.hasOwn || function (object, property) {
if (object === null || object === undefined) {
throw new TypeError('Cannot convert undefined or null to object');
}
return Object.prototype.hasOwnProperty.call(Object(object), property);
};
exports.mixin = (target, source) => {
for (const key in source) {
if (exports.hasOwn(source, key)) {
target[key] = source[key];
}
}
};
/**
* Check if the response is compressed using Gzip or Deflate.
* @param {Object} res
* @return {Boolean}
*/
exports.isGzipOrDeflateEncoding = res => {
return /^\s*(?:deflate|gzip)\s*$/.test(res.headers['content-encoding']);
};
/**
* Check if the response is compressed using Brotli.
* @param {Object} res
* @return {Boolean}
*/
exports.isBrotliEncoding = res => {
return /^\s*br\s*$/.test(res.headers['content-encoding']);
};
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJleHBvcnRzIiwidHlwZSIsInN0cmluZ18iLCJzcGxpdCIsInNoaWZ0IiwicGFyYW1zIiwidmFsdWUiLCJvYmplY3QiLCJwYXJ0cyIsImtleSIsInBhcnNlTGlua3MiLCJ1cmwiLCJzbGljZSIsInBhcnQiLCJrZXlWYWx1ZSIsInRvTG93ZXJDYXNlIiwicmVsYXRpb25zaGlwIiwicmVwbGFjZSIsImNsZWFuSGVhZGVyIiwiaGVhZGVyIiwiY2hhbmdlc09yaWdpbiIsImhvc3QiLCJhdXRob3JpemF0aW9uIiwiY29va2llIiwibm9ybWFsaXplSG9zdG5hbWUiLCJob3N0bmFtZSIsIm5vcm1hbGl6ZWQiLCJtYXRjaCIsImlzT2JqZWN0IiwiaGFzT3duIiwiT2JqZWN0IiwicHJvcGVydHkiLCJ1bmRlZmluZWQiLCJUeXBlRXJyb3IiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJtaXhpbiIsInRhcmdldCIsInNvdXJjZSIsImlzR3ppcE9yRGVmbGF0ZUVuY29kaW5nIiwicmVzIiwidGVzdCIsImhlYWRlcnMiLCJpc0Jyb3RsaUVuY29kaW5nIl0sInNvdXJjZXMiOlsiLi4vc3JjL3V0aWxzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmV0dXJuIHRoZSBtaW1lIHR5cGUgZm9yIHRoZSBnaXZlbiBgc3RyYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5leHBvcnRzLnR5cGUgPSAoc3RyaW5nXykgPT4gc3RyaW5nXy5zcGxpdCgvICo7ICovKS5zaGlmdCgpO1xuXG4vKipcbiAqIFJldHVybiBoZWFkZXIgZmllbGQgcGFyYW1ldGVycy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5leHBvcnRzLnBhcmFtcyA9ICh2YWx1ZSkgPT4ge1xuICBjb25zdCBvYmplY3QgPSB7fTtcbiAgZm9yIChjb25zdCBzdHJpbmdfIG9mIHZhbHVlLnNwbGl0KC8gKjsgKi8pKSB7XG4gICAgY29uc3QgcGFydHMgPSBzdHJpbmdfLnNwbGl0KC8gKj0gKi8pO1xuICAgIGNvbnN0IGtleSA9IHBhcnRzLnNoaWZ0KCk7XG4gICAgY29uc3QgdmFsdWUgPSBwYXJ0cy5zaGlmdCgpO1xuXG4gICAgaWYgKGtleSAmJiB2YWx1ZSkgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvYmplY3Q7XG59O1xuXG4vKipcbiAqIFBhcnNlIExpbmsgaGVhZGVyIGZpZWxkcy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5leHBvcnRzLnBhcnNlTGlua3MgPSAodmFsdWUpID0+IHtcbiAgY29uc3Qgb2JqZWN0ID0ge307XG4gIGZvciAoY29uc3Qgc3RyaW5nXyBvZiB2YWx1ZS5zcGxpdCgvICosICovKSkge1xuICAgIGNvbnN0IHBhcnRzID0gc3RyaW5nXy5zcGxpdCgvICo7ICovKTtcbiAgICBjb25zdCB1cmwgPSBwYXJ0c1swXS5zbGljZSgxLCAtMSk7XG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIHBhcnRzLnNsaWNlKDEpKSB7XG4gICAgICBjb25zdCBba2V5LCBrZXlWYWx1ZV0gPSBwYXJ0LnNwbGl0KC8gKj0gKi8sIDIpO1xuICAgICAgaWYgKGtleSAmJiBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3JlbCcgJiYga2V5VmFsdWUpIHtcbiAgICAgICAgY29uc3QgcmVsYXRpb25zaGlwID0ga2V5VmFsdWUucmVwbGFjZSgvXlwifFwiJC9nLCAnJyk7XG4gICAgICAgIGlmIChyZWxhdGlvbnNoaXApIG9iamVjdFtyZWxhdGlvbnNoaXBdID0gdXJsO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqZWN0O1xufTtcblxuLyoqXG4gKiBTdHJpcCBjb250ZW50IHJlbGF0ZWQgZmllbGRzIGZyb20gYGhlYWRlcmAuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGhlYWRlclxuICogQHJldHVybiB7T2JqZWN0fSBoZWFkZXJcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmV4cG9ydHMuY2xlYW5IZWFkZXIgPSAoaGVhZGVyLCBjaGFuZ2VzT3JpZ2luKSA9PiB7XG4gIGRlbGV0ZSBoZWFkZXJbJ2NvbnRlbnQtdHlwZSddO1xuICBkZWxldGUgaGVhZGVyWydjb250ZW50LWxlbmd0aCddO1xuICBkZWxldGUgaGVhZGVyWyd0cmFuc2Zlci1lbmNvZGluZyddO1xuICBkZWxldGUgaGVhZGVyLmhvc3Q7XG4gIC8vIHNlY3VpcnR5XG4gIGlmIChjaGFuZ2VzT3JpZ2luKSB7XG4gICAgZGVsZXRlIGhlYWRlci5hdXRob3JpemF0aW9uO1xuICAgIGRlbGV0ZSBoZWFkZXIuY29va2llO1xuICB9XG5cbiAgcmV0dXJuIGhlYWRlcjtcbn07XG5cbmV4cG9ydHMubm9ybWFsaXplSG9zdG5hbWUgPSAoaG9zdG5hbWUpID0+IHtcbiAgY29uc3QgWywgbm9ybWFsaXplZF0gPSBob3N0bmFtZS5tYXRjaCgvXlxcWyhbXlxcXV0rKV0kLykgfHwgW107XG4gIHJldHVybiBub3JtYWxpemVkIHx8IGhvc3RuYW1lO1xufTtcblxuLyoqXG4gKiBDaGVjayBpZiBgb2JqYCBpcyBhbiBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICogQHJldHVybiB7Qm9vbGVhbn1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5leHBvcnRzLmlzT2JqZWN0ID0gKG9iamVjdCkgPT4ge1xuICByZXR1cm4gb2JqZWN0ICE9PSBudWxsICYmIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnO1xufTtcblxuLyoqXG4gKiBPYmplY3QuaGFzT3duIGZhbGxiYWNrL3BvbHlmaWxsLlxuICpcbiAqIEB0eXBlIHsob2JqZWN0OiBvYmplY3QsIHByb3BlcnR5OiBzdHJpbmcpID0+IGJvb2xlYW59IG9iamVjdFxuICogQGFwaSBwcml2YXRlXG4gKi9cbmV4cG9ydHMuaGFzT3duID1cbiAgT2JqZWN0Lmhhc093biB8fFxuICBmdW5jdGlvbiAob2JqZWN0LCBwcm9wZXJ0eSkge1xuICAgIGlmIChvYmplY3QgPT09IG51bGwgfHwgb2JqZWN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IHVuZGVmaW5lZCBvciBudWxsIHRvIG9iamVjdCcpO1xuICAgIH1cblxuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoT2JqZWN0KG9iamVjdCksIHByb3BlcnR5KTtcbiAgfTtcblxuZXhwb3J0cy5taXhpbiA9ICh0YXJnZXQsIHNvdXJjZSkgPT4ge1xuICBmb3IgKGNvbnN0IGtleSBpbiBzb3VyY2UpIHtcbiAgICBpZiAoZXhwb3J0cy5oYXNPd24oc291cmNlLCBrZXkpKSB7XG4gICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBDaGVjayBpZiB0aGUgcmVzcG9uc2UgaXMgY29tcHJlc3NlZCB1c2luZyBHemlwIG9yIERlZmxhdGUuXG4gKiBAcGFyYW0ge09iamVjdH0gcmVzXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICovXG5cbmV4cG9ydHMuaXNHemlwT3JEZWZsYXRlRW5jb2RpbmcgPSAocmVzKSA9PiB7XG4gIHJldHVybiAvXlxccyooPzpkZWZsYXRlfGd6aXApXFxzKiQvLnRlc3QocmVzLmhlYWRlcnNbJ2NvbnRlbnQtZW5jb2RpbmcnXSk7XG59O1xuXG4vKipcbiAqIENoZWNrIGlmIHRoZSByZXNwb25zZSBpcyBjb21wcmVzc2VkIHVzaW5nIEJyb3RsaS5cbiAqIEBwYXJhbSB7T2JqZWN0fSByZXNcbiAqIEByZXR1cm4ge0Jvb2xlYW59XG4gKi9cblxuZXhwb3J0cy5pc0Jyb3RsaUVuY29kaW5nID0gKHJlcykgPT4ge1xuICByZXR1cm4gL15cXHMqYnJc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