Skip to content

Commit 00d2e17

Browse files
authored
Merge pull request #693 from wheresrhys/rhys/remove-querystring-library
fix: remove querystring dependency
2 parents 23a6fd2 + 6f4bdce commit 00d2e17

File tree

3 files changed

+46
-26
lines changed

3 files changed

+46
-26
lines changed

package-lock.json

+1-11
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/fetch-mock-legacy/package.json

+1-2
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,7 @@
4444
"glob-to-regexp": "^0.4.0",
4545
"is-subset": "^0.1.1",
4646
"lodash.isequal": "^4.5.0",
47-
"path-to-regexp": "^2.2.1",
48-
"querystring": "^0.2.1"
47+
"path-to-regexp": "^2.2.1"
4948
},
5049
"peerDependenciesMeta": {
5150
"node-fetch": {

packages/fetch-mock-legacy/src/Route/matchers.js

+44-13
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import glob from 'glob-to-regexp';
22
import pathToRegexp from 'path-to-regexp';
3-
import querystring from 'querystring';
43
import isSubset from 'is-subset';
54
import isEqual from 'lodash.isequal';
65
import {
@@ -78,22 +77,54 @@ const getQueryStringMatcher = ({ query: passedQuery }) => {
7877
debug(' No query parameters expectations defined - skipping');
7978
return;
8079
}
81-
const expectedQuery = querystring.parse(querystring.stringify(passedQuery));
82-
debug(' Expected query parameters:', passedQuery);
83-
const keys = Object.keys(expectedQuery);
80+
81+
const expectedQuery = new URLSearchParams();
82+
for (const [key, value] of Object.entries(passedQuery)) {
83+
if (Array.isArray(value)) {
84+
for (const item of value) {
85+
expectedQuery.append(
86+
key,
87+
typeof item === 'object' || typeof item === 'undefined'
88+
? ''
89+
: item.toString(),
90+
);
91+
}
92+
} else {
93+
expectedQuery.append(
94+
key,
95+
typeof value === 'object' || typeof value === 'undefined'
96+
? ''
97+
: value.toString(),
98+
);
99+
}
100+
}
101+
102+
const keys = Array.from(expectedQuery.keys());
84103
return (url) => {
85104
debug('Attempting to match query parameters');
86-
const query = querystring.parse(getQuery(url));
87-
debug(' Expected query parameters:', expectedQuery);
88-
debug(' Actual query parameters:', query);
105+
const queryString = getQuery(url);
106+
const query = new URLSearchParams(queryString);
107+
debug(
108+
' Expected query parameters:',
109+
Object.fromEntries(expectedQuery.entries()),
110+
);
111+
debug(' Actual query parameters:', Object.fromEntries(query.entries()));
112+
89113
return keys.every((key) => {
90-
if (Array.isArray(query[key])) {
91-
if (!Array.isArray(expectedQuery[key])) {
92-
return false;
93-
}
94-
return isEqual(query[key].sort(), expectedQuery[key].sort());
114+
const expectedValues = expectedQuery.getAll(key).sort();
115+
const actualValues = query.getAll(key).sort();
116+
117+
if (expectedValues.length !== actualValues.length) {
118+
return false;
95119
}
96-
return query[key] === expectedQuery[key];
120+
121+
if (Array.isArray(passedQuery[key])) {
122+
return expectedValues.every(
123+
(expected, index) => expected === actualValues[index],
124+
);
125+
}
126+
127+
return isEqual(actualValues, expectedValues);
97128
});
98129
};
99130
};

0 commit comments

Comments
 (0)