Socket
Socket
Sign inDemoInstall

fast-querystring

Package Overview
Dependencies
1
Maintainers
2
Versions
20
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 0.6.4 to 0.7.0

44

lib/parse.js

@@ -1,6 +0,6 @@

"use strict";
const fastDecode = require("fast-decode-uri-component");
const plusRegex = /\+/g;
const Empty = function () {};
Empty.prototype = Object.create(null);

@@ -12,3 +12,5 @@ /**

function parse(input) {
const result = Object.create(null);
// Optimization: Use new Empty() instead of Object.create(null) for performance
// v8 has a better optimization for initializing functions compared to Object
const result = new Empty();

@@ -19,3 +21,3 @@ if (typeof input !== "string") {

const inputLength = input.length;
let inputLength = input.length;
let key = "";

@@ -42,9 +44,4 @@ let value = "";

// Only update value if '=' exists in the current range
if (hasBothKeyValuePair) {
value = input.slice(equalityIndex + 1, i);
}
// Add key/value pair only if the range size is greater than 1; a.k.a. contains at least "="
if (hasBothKeyValuePair || i - startingIndex > 1) {
if (hasBothKeyValuePair || key.length > 0) {
// Optimization: Replace '+' with space

@@ -61,2 +58,4 @@ if (keyHasPlus) {

if (hasBothKeyValuePair) {
value = input.slice(equalityIndex + 1, i);
if (valueHasPlus) {

@@ -70,8 +69,7 @@ value = value.replace(plusRegex, " ");

}
const currentValue = result[key];
if (result[key] === undefined) {
if (currentValue === undefined) {
result[key] = value;
} else {
const currentValue = result[key];
// Optimization: value.pop is faster than Array.isArray(value)

@@ -94,11 +92,11 @@ if (currentValue.pop) {

valueHasPlus = false;
hasBothKeyValuePair = false;
}
// Check '='
else if (c === 61) {
if (equalityIndex <= startingIndex) {
equalityIndex = i;
}
// If '=' character occurs again, we should decode the input.
if (equalityIndex > startingIndex) {
else {
shouldDecodeValue = true;
} else {
equalityIndex = i;
}

@@ -108,6 +106,6 @@ }

else if (c === 43) {
if (equalityIndex <= startingIndex) {
if (equalityIndex > startingIndex) {
valueHasPlus = true;
} else {
keyHasPlus = true;
} else {
valueHasPlus = true;
}

@@ -117,6 +115,6 @@ }

else if (c === 37) {
if (equalityIndex <= startingIndex) {
if (equalityIndex > startingIndex) {
shouldDecodeValue = true;
} else {
shouldDecodeKey = true;
} else {
shouldDecodeValue = true;
}

@@ -123,0 +121,0 @@ }

{
"name": "fast-querystring",
"version": "0.6.4",
"description": "",
"version": "0.7.0",
"description": "A fast alternative to legacy querystring module",
"main": "lib/index.js",

@@ -10,3 +10,3 @@ "type": "commonjs",

"format": "rome format . --write",
"format:ci": "rome format .",
"format:ci": "rome ci .",
"test": "vitest",

@@ -26,2 +26,3 @@ "test:watch": "vitest --watch",

"devDependencies": {
"@aws-sdk/querystring-builder": "^3.162.0",
"@aws-sdk/querystring-parser": "^3.162.0",

@@ -34,3 +35,4 @@ "@types/node": "^18.7.15",

"querystringify": "^2.2.0",
"rome": "0.9.0-next",
"querystringparser": "^0.1.1",
"rome": "0.9.1-next",
"vitest": "^0.23.1"

@@ -37,0 +39,0 @@ },

# fast-querystring
Fast query-string parser to replace the legacy `node:querystring` parse & stringify functions.
Fast query-string parser and stringifier to replace the legacy `node:querystring` module.

@@ -51,13 +51,14 @@ ### Installation

โ•Ÿโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ข
โ•‘ qs โ”‚ 10000 โ”‚ 317841.53 op/sec โ”‚ ยฑ 1.18 % โ•‘
โ•‘ query-string โ”‚ 10000 โ”‚ 341009.91 op/sec โ”‚ ยฑ 1.06 % โ•‘
โ•‘ querystringify โ”‚ 1000 โ”‚ 451609.79 op/sec โ”‚ ยฑ 0.61 % โ•‘
โ•‘ @aws-sdk/querystring-parser โ”‚ 1000 โ”‚ 477241.09 op/sec โ”‚ ยฑ 0.69 % โ•‘
โ•‘ URLSearchParams-with-Object.fromEntries โ”‚ 10000 โ”‚ 870095.07 op/sec โ”‚ ยฑ 3.29 % โ•‘
โ•‘ URLSearchParams-with-construct โ”‚ 10000 โ”‚ 1232650.60 op/sec โ”‚ ยฑ 2.95 % โ•‘
โ•‘ node:querystring โ”‚ 10000 โ”‚ 1462802.04 op/sec โ”‚ ยฑ 3.69 % โ•‘
โ•‘ qs โ”‚ 10000 โ”‚ 302595.31 op/sec โ”‚ ยฑ 1.22 % โ•‘
โ•‘ query-string โ”‚ 9500 โ”‚ 334820.82 op/sec โ”‚ ยฑ 0.99 % โ•‘
โ•‘ querystringify โ”‚ 1000 โ”‚ 437899.50 op/sec โ”‚ ยฑ 0.73 % โ•‘
โ•‘ @aws-sdk/querystring-parser โ”‚ 1000 โ”‚ 454836.96 op/sec โ”‚ ยฑ 0.69 % โ•‘
โ•‘ URLSearchParams-with-Object.fromEntries โ”‚ 1500 โ”‚ 849572.92 op/sec โ”‚ ยฑ 0.89 % โ•‘
โ•‘ URLSearchParams-with-construct โ”‚ 10000 โ”‚ 1190835.28 op/sec โ”‚ ยฑ 3.22 % โ•‘
โ•‘ node:querystring โ”‚ 10000 โ”‚ 1384717.43 op/sec โ”‚ ยฑ 2.99 % โ•‘
โ•‘ querystringparser โ”‚ 3500 โ”‚ 1735544.65 op/sec โ”‚ ยฑ 0.95 % โ•‘
โ•Ÿโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ข
โ•‘ Fastest test โ”‚ Samples โ”‚ Result โ”‚ Tolerance โ•‘
โ•Ÿโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ข
โ•‘ fast-querystring โ”‚ 10000 โ”‚ 1809816.84 op/sec โ”‚ ยฑ 3.19 % โ•‘
โ•‘ fast-querystring โ”‚ 10000 โ”‚ 2023187.35 op/sec โ”‚ ยฑ 2.67 % โ•‘
โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•

@@ -71,16 +72,18 @@ ```

โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•คโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•คโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•คโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—
โ•‘ Slower tests โ”‚ Samples โ”‚ Result โ”‚ Tolerance โ•‘
โ•Ÿโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ข
โ•‘ query-string โ”‚ 10000 โ”‚ 284130.63 op/sec โ”‚ ยฑ 1.62 % โ•‘
โ•‘ qs โ”‚ 10000 โ”‚ 334799.48 op/sec โ”‚ ยฑ 1.93 % โ•‘
โ•‘ http-querystring-stringify โ”‚ 10000 โ”‚ 482642.49 op/sec โ”‚ ยฑ 1.72 % โ•‘
โ•‘ URLSearchParams โ”‚ 10000 โ”‚ 587274.65 op/sec โ”‚ ยฑ 1.88 % โ•‘
โ•‘ querystringify โ”‚ 10000 โ”‚ 753960.35 op/sec โ”‚ ยฑ 2.20 % โ•‘
โ•‘ node:querystring โ”‚ 10000 โ”‚ 1796993.95 op/sec โ”‚ ยฑ 5.34 % โ•‘
โ•Ÿโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ข
โ•‘ Fastest test โ”‚ Samples โ”‚ Result โ”‚ Tolerance โ•‘
โ•Ÿโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ข
โ•‘ fast-querystring โ”‚ 10000 โ”‚ 2051022.89 op/sec โ”‚ ยฑ 4.52 % โ•‘
โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•คโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•คโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•คโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—
โ•‘ Slower tests โ”‚ Samples โ”‚ Result โ”‚ Tolerance โ•‘
โ•Ÿโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ข
โ•‘ query-string โ”‚ 10000 โ”‚ 294354.42 op/sec โ”‚ ยฑ 1.25 % โ•‘
โ•‘ qs โ”‚ 10000 โ”‚ 349992.31 op/sec โ”‚ ยฑ 1.45 % โ•‘
โ•‘ @aws-sdk/querystring-builder โ”‚ 10000 โ”‚ 380426.03 op/sec โ”‚ ยฑ 1.69 % โ•‘
โ•‘ http-querystring-stringify โ”‚ 10000 โ”‚ 489248.93 op/sec โ”‚ ยฑ 1.54 % โ•‘
โ•‘ URLSearchParams โ”‚ 10000 โ”‚ 579241.21 op/sec โ”‚ ยฑ 1.92 % โ•‘
โ•‘ querystringparser โ”‚ 1500 โ”‚ 667303.72 op/sec โ”‚ ยฑ 0.77 % โ•‘
โ•‘ querystringify โ”‚ 10000 โ”‚ 780283.61 op/sec โ”‚ ยฑ 2.43 % โ•‘
โ•‘ node:querystring โ”‚ 10000 โ”‚ 1779241.34 op/sec โ”‚ ยฑ 6.49 % โ•‘
โ•Ÿโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ข
โ•‘ Fastest test โ”‚ Samples โ”‚ Result โ”‚ Tolerance โ•‘
โ•Ÿโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ข
โ•‘ fast-querystring โ”‚ 10000 โ”‚ 2125769.45 op/sec โ”‚ ยฑ 3.93 % โ•‘
โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
```
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with โšก๏ธ by Socket Inc