Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
wraithgar committed Nov 20, 2024
1 parent f13bc9c commit 1c9e96f
Show file tree
Hide file tree
Showing 6 changed files with 42 additions and 16 deletions.
5 changes: 5 additions & 0 deletions node_modules/negotiator/HISTORY.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
unreleased
==================

* Added an option preferred encodings array #59

0.6.3 / 2022-01-22
==================

Expand Down
8 changes: 4 additions & 4 deletions node_modules/negotiator/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -44,13 +44,13 @@ Negotiator.prototype.charsets = function charsets(available) {
return preferredCharsets(this.request.headers['accept-charset'], available);
};

Negotiator.prototype.encoding = function encoding(available) {
var set = this.encodings(available);
Negotiator.prototype.encoding = function encoding(available, preferred) {
var set = this.encodings(available, preferred);
return set && set[0];
};

Negotiator.prototype.encodings = function encodings(available) {
return preferredEncodings(this.request.headers['accept-encoding'], available);
Negotiator.prototype.encodings = function encodings(available, preferred) {
return preferredEncodings(this.request.headers['accept-encoding'], available, preferred);
};

Negotiator.prototype.language = function language(available) {
Expand Down
31 changes: 26 additions & 5 deletions node_modules/negotiator/lib/encoding.js
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ function parseEncoding(str, i) {
*/

function getEncodingPriority(encoding, accepted, index) {
var priority = {o: -1, q: 0, s: 0};
var priority = {encoding: encoding, o: -1, q: 0, s: 0};

for (var i = 0; i < accepted.length; i++) {
var spec = specify(encoding, accepted[i], index);
Expand All @@ -123,6 +123,7 @@ function specify(encoding, spec, index) {
}

return {
encoding: encoding,
i: index,
o: spec.i,
q: spec.q,
Expand All @@ -135,14 +136,34 @@ function specify(encoding, spec, index) {
* @public
*/

function preferredEncodings(accept, provided) {
function preferredEncodings(accept, provided, preferred) {
var accepts = parseAcceptEncoding(accept || '');

var comparator = preferred ? function comparator (a, b) {
if (a.q !== b.q) {
return b.q - a.q // higher quality first
}

var aPreferred = preferred.indexOf(a.encoding)
var bPreferred = preferred.indexOf(b.encoding)

if (aPreferred === -1 && bPreferred === -1) {
// consider the original specifity/order
return (b.s - a.s) || (a.o - b.o) || (a.i - b.i)
}

if (aPreferred !== -1 && bPreferred !== -1) {
return aPreferred - bPreferred // consider the preferred order
}

return aPreferred === -1 ? 1 : -1 // preferred first
} : compareSpecs;

if (!provided) {
// sorted list of all encodings
return accepts
.filter(isQuality)
.sort(compareSpecs)
.sort(comparator)
.map(getFullEncoding);
}

Expand All @@ -151,7 +172,7 @@ function preferredEncodings(accept, provided) {
});

// sorted list of accepted encodings
return priorities.filter(isQuality).sort(compareSpecs).map(function getEncoding(priority) {
return priorities.filter(isQuality).sort(comparator).map(function getEncoding(priority) {
return provided[priorities.indexOf(priority)];
});
}
Expand All @@ -162,7 +183,7 @@ function preferredEncodings(accept, provided) {
*/

function compareSpecs(a, b) {
return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i) || 0;
return (b.q - a.q) || (b.s - a.s) || (a.o - b.o) || (a.i - b.i);
}

/**
Expand Down
6 changes: 3 additions & 3 deletions node_modules/negotiator/lib/mediaType.js
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ function parseMediaType(str, i) {

// get the value, unwrapping quotes
var value = val && val[0] === '"' && val[val.length - 1] === '"'
? val.substr(1, val.length - 2)
? val.slice(1, -1)
: val;

if (key === 'q') {
Expand Down Expand Up @@ -238,8 +238,8 @@ function splitKeyValuePair(str) {
if (index === -1) {
key = str;
} else {
key = str.substr(0, index);
val = str.substr(index + 1);
key = str.slice(0, index);
val = str.slice(index + 1);
}

return [key, val];
Expand Down
2 changes: 1 addition & 1 deletion node_modules/negotiator/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "negotiator",
"description": "HTTP content negotiation",
"version": "0.6.3",
"version": "0.6.4",
"contributors": [
"Douglas Christopher Wilson <[email protected]>",
"Federico Romero <[email protected]>",
Expand Down
6 changes: 3 additions & 3 deletions package-lock.json
Original file line number Diff line number Diff line change
Expand Up @@ -11112,9 +11112,9 @@
}
},
"node_modules/negotiator": {
"version": "0.6.3",
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
"integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
"version": "0.6.4",
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz",
"integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==",
"inBundle": true,
"license": "MIT",
"engines": {
Expand Down

0 comments on commit 1c9e96f

Please sign in to comment.