Skip to content

Commit d0c50e0

Browse files
shakyShaneShane Osbourne
and
Shane Osbourne
authored
deps: drop qs (#2040)
Co-authored-by: Shane Osbourne <[email protected]>
1 parent 6ffc212 commit d0c50e0

File tree

6 files changed

+2428
-7189
lines changed

6 files changed

+2428
-7189
lines changed

packages/browser-sync/lib/http-protocol.js

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
"use strict";
22

3-
var queryString = require("qs");
43
var proto = exports;
54
var instanceMethods = ["exit", "notify", "pause", "resume"];
65
var getBody = require("raw-body");
6+
const { parseParams, serializeParams } = require("./utils");
77
const permittedSocketEvents = [
88
"file:reload",
99
"browser:reload",
@@ -39,7 +39,7 @@ proto.getUrl = function(args, url) {
3939
url,
4040
require("./config").httpProtocol.path,
4141
"?",
42-
queryString.stringify(args)
42+
serializeParams(args).toString()
4343
].join("");
4444
};
4545

@@ -72,7 +72,8 @@ proto.middleware = function(bs) {
7272
}
7373
});
7474
}
75-
var params = queryString.parse(req.url.replace(/^.*\?/, ""));
75+
var split = req.url.split("?");
76+
var params = parseParams(split[1]);
7677
var output;
7778

7879
if (!Object.keys(params).length) {

packages/browser-sync/lib/plugins.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@ var Immutable = require("immutable");
22
var Map = Immutable.Map;
33
var isMap = Immutable.Map.isMap;
44
var List = Immutable.List;
5-
var qs = require("qs");
65
var path = require("path");
76
var fs = require("fs");
7+
const { parseParams } = require("./utils");
88

99
var Plugin = Immutable.Record({
1010
moduleName: "",
@@ -175,7 +175,8 @@ function getFromString(string) {
175175

176176
if (split.length > 1) {
177177
return outGoing.update("options", function(opts) {
178-
return opts.mergeDeep(qs.parse(split[1]));
178+
const parsed = parseParams(split[1]);
179+
return opts.mergeDeep(parsed);
179180
});
180181
}
181182

packages/browser-sync/lib/utils.ts

+51
Original file line numberDiff line numberDiff line change
@@ -334,3 +334,54 @@ export const connect = require("connect");
334334
export const serveStatic = require("./server/serve-static-wrapper").default();
335335
export const easyExtender = require("easy-extender");
336336
export { UAParser, devIp };
337+
338+
/**
339+
* Just for backwards compat around old argument styles
340+
*/
341+
export function parseParams(search: string): Record<string, any> {
342+
const params = new URLSearchParams(search);
343+
const parsed = Object.create(null);
344+
for (let [key, value] of params) {
345+
let nextKey = key;
346+
let arrayType = false;
347+
348+
if (nextKey.slice(-2) === "[]") {
349+
nextKey = key.slice(0, -2);
350+
arrayType = true;
351+
}
352+
353+
const curr = parsed[nextKey];
354+
355+
if (curr && Array.isArray(curr)) {
356+
curr.push(value);
357+
} else if (curr) {
358+
// if it already exists, but is not already an array, upgrade to array
359+
parsed[nextKey] = [curr, value];
360+
} else {
361+
// otherwise create the original value
362+
if (arrayType) {
363+
parsed[nextKey] = [value];
364+
} else {
365+
parsed[nextKey] = value;
366+
}
367+
}
368+
}
369+
return parsed;
370+
}
371+
372+
/**
373+
* Also for backwards compat around old argument styles
374+
*/
375+
export function serializeParams(args: Record<string, any> = {}): URLSearchParams {
376+
const output = new URLSearchParams();
377+
for (let [key, value] of Object.entries(args)) {
378+
if (Array.isArray(value)) {
379+
for (let valueElement of value) {
380+
output.append(key, valueElement);
381+
}
382+
} else {
383+
output.append(key, String(value));
384+
}
385+
}
386+
return output;
387+
}

0 commit comments

Comments
 (0)