-
-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathparse.mjs
55 lines (53 loc) · 1.5 KB
/
parse.mjs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
import benchmark from "cronometro";
import qs from "qs";
import fastQueryString from "../lib/index.js";
import native from "node:querystring";
import queryString from "query-string";
import querystringify from "querystringify";
import awsQueryStringParser from "@aws-sdk/querystring-parser";
import querystringparser from "querystringparser";
const input = "frappucino=muffin&goat=scone&pond=moose&foo=bar&foo=baz";
await benchmark(
{
qs() {
return qs.parse(input);
},
"fast-querystring"() {
return fastQueryString.parse(input);
},
"node:querystring"() {
return native.parse(input);
},
"query-string"() {
return queryString.parse(input);
},
"URLSearchParams-with-Object.fromEntries"() {
const urlParams = new URLSearchParams(input);
return Object.fromEntries(urlParams);
},
"URLSearchParams-with-construct"() {
const u = new URLSearchParams(input);
const data = {};
for (const [key, value] of u.entries()) {
if (Array.isArray(data[key])) {
data[key].push(value);
} else if (data[key]) {
data[key] = [].concat(data[key], value);
} else {
data[key] = value;
}
}
return data;
},
querystringify() {
return querystringify.parse(input);
},
"@aws-sdk/querystring-parser"() {
return awsQueryStringParser.parseQueryString(input);
},
querystringparser() {
return querystringparser.parse(input);
},
},
{ warmup: true },
);