{"_id":"qs-esm","_rev":"7-e2f8b4f1d47308a168157d3b3f97184a","name":"qs-esm","dist-tags":{"latest":"8.0.2"},"versions":{"7.0.0":{"name":"qs-esm","version":"7.0.0","keywords":["querystring","qs","query","url","parse","stringify"],"license":"BSD-3-Clause","_id":"qs-esm@7.0.0","contributors":[{"url":"http://ljharb.codes","name":"Jordan Harband","email":"ljharb@gmail.com"}],"homepage":"https://github.com/AlessioGr/qs-esm","bugs":{"url":"https://github.com/AlessioGr/qs-esm/issues"},"dist":{"shasum":"cbace8ed743c85772af92c08e8b28cd0c6156f9d","tarball":"https://registry.npmjs.org/qs-esm/-/qs-esm-7.0.0.tgz","fileCount":9,"integrity":"sha512-E4bfQORiFLobm3EoPS9ZyK68rg1AA3BVtAYKJQgt3Q6ne3WJbplqjpoyirNtF1/RkdOa/GyzYiAD5zIN3KRuyw==","signatures":[{"sig":"MEUCIBgsw96RQ1rFkf2S4IobXfzWzx0Q/zGnr8ZtOgnHDCaaAiEAlSO0DnP8LJkXjDyjQrHxP7yeC/53F7dCh0Q6fuuOIAM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":56742},"main":"lib/index.js","type":"module","_from":"file:qs-esm-7.0.0.tgz","types":"lib/index.d.ts","engines":{"node":">=18"},"funding":{"url":"https://github.com/sponsors/ljharb"},"scripts":{"lint":"eslint --ext=js,mjs .","test":"pnpm run tests-only","readme":"evalmd README.md","pretest":"pnpm run --silent readme && pnpm run --silent lint","postlint":"eclint check $(git ls-files | xargs find 2> /dev/null | grep -vE 'node_modules|\\.git' | grep -v dist/)","posttest":"aud --production","prepublish":"not-in-publish || pnpm run prepublishOnly","tests-only":"tape 'test/**/*.cjs'"},"_npmUser":{"name":"alessiogr","email":"alessio@bonfireleads.com"},"_resolved":"/private/var/folders/nw/gc4rh1mn0pxdl2n0qjsbfgp00000gn/T/f993e2932ddd78f43d5381b831b6ceac/qs-esm-7.0.0.tgz","_integrity":"sha512-E4bfQORiFLobm3EoPS9ZyK68rg1AA3BVtAYKJQgt3Q6ne3WJbplqjpoyirNtF1/RkdOa/GyzYiAD5zIN3KRuyw==","repository":{"url":"git+https://github.com/AlessioGr/qs-esm.git","type":"git"},"_npmVersion":"8.19.4","description":"A modernized, esm-only fork of qs without unnecessary polyfills","directories":{},"sideEffects":false,"_nodeVersion":"22.2.0","publishConfig":{"ignore":["!dist/*","bower.json","component.json",".github/workflows","logos","tea.yaml"]},"_hasShrinkwrap":false,"devDependencies":{"aud":"^2.0.4","nyc":"^10.3.2","glob":"=10.3.7","tape":"^5.7.5","eclint":"^2.8.1","evalmd":"^0.0.19","mkdirp":"^0.5.5","for-each":"^0.3.3","prettier":"3.3.2","qs-iconv":"^1.0.4","jackspeak":"=2.1.1","npmignore":"^0.3.1","browserify":"^16.5.2","iconv-lite":"^0.5.1","in-publish":"^2.0.1","has-symbols":"^1.0.3","module-deps":"^6.2.3","unassertify":"^3.0.1","safer-buffer":"^2.1.2","mock-property":"^1.0.3","object-inspect":"^1.13.1","common-shakeify":"~1.0.0","bundle-collapser":"^1.4.0","es-value-fixtures":"^1.4.2","@browserify/envify":"^6.0.0","safe-publish-latest":"^2.0.0","has-override-mistake":"^1.0.1","@browserify/uglifyify":"^6.0.0","has-property-descriptors":"^1.0.2","@payloadcms/eslint-config":"3.0.0-beta.16"},"_npmOperationalInternal":{"tmp":"tmp/qs-esm_7.0.0_1719512751469_0.11759404930085604","host":"s3://npm-registry-packages"}},"7.0.1":{"name":"qs-esm","version":"7.0.1","keywords":["querystring","qs","query","url","parse","stringify"],"license":"BSD-3-Clause","_id":"qs-esm@7.0.1","contributors":[{"url":"http://ljharb.codes","name":"Jordan Harband","email":"ljharb@gmail.com"}],"homepage":"https://github.com/AlessioGr/qs-esm","bugs":{"url":"https://github.com/AlessioGr/qs-esm/issues"},"dist":{"shasum":"d19492f6f7ec5cdf3008836df5ed123fd9339a86","tarball":"https://registry.npmjs.org/qs-esm/-/qs-esm-7.0.1.tgz","fileCount":9,"integrity":"sha512-ezmEzDkJmkKoFJFuIxoDZ38zknoRzVJqSgXfkBmrrOXjl+sxyivgER7/GGgEainpG2fOnsbxXKNtwSkq5KXIxA==","signatures":[{"sig":"MEUCIGIgxJOOyveu/UxUT9bPrDlaHVKq1FZ9FXn3WjvCLmufAiEAl3dPH4u9cyJM9t5Rm/Sd+3NKLrQNe2dvDsLTxWnMbbk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":56709},"main":"lib/index.js","type":"module","_from":"file:qs-esm-7.0.1.tgz","types":"lib/index.d.ts","engines":{"node":">=18"},"funding":{"url":"https://github.com/sponsors/ljharb"},"scripts":{"lint":"eslint --ext=js,mjs .","test":"pnpm run tests-only","readme":"evalmd README.md","pretest":"pnpm run --silent readme && pnpm run --silent lint","postlint":"eclint check $(git ls-files | xargs find 2> /dev/null | grep -vE 'node_modules|\\.git' | grep -v dist/)","posttest":"aud --production","prepublish":"not-in-publish || pnpm run prepublishOnly","tests-only":"tape 'test/**/*.cjs'"},"_npmUser":{"name":"alessiogr","email":"alessio@bonfireleads.com"},"_resolved":"/private/var/folders/nw/gc4rh1mn0pxdl2n0qjsbfgp00000gn/T/a59225440311ed736e7e86575779490c/qs-esm-7.0.1.tgz","_integrity":"sha512-ezmEzDkJmkKoFJFuIxoDZ38zknoRzVJqSgXfkBmrrOXjl+sxyivgER7/GGgEainpG2fOnsbxXKNtwSkq5KXIxA==","repository":{"url":"git+https://github.com/AlessioGr/qs-esm.git","type":"git"},"_npmVersion":"8.19.4","description":"A modernized, esm-only fork of qs without unnecessary polyfills","directories":{},"sideEffects":false,"_nodeVersion":"22.2.0","publishConfig":{"ignore":["!dist/*","bower.json","component.json",".github/workflows","logos","tea.yaml"]},"_hasShrinkwrap":false,"devDependencies":{"aud":"^2.0.4","nyc":"^10.3.2","glob":"=10.3.7","tape":"^5.7.5","eclint":"^2.8.1","evalmd":"^0.0.19","mkdirp":"^0.5.5","for-each":"^0.3.3","prettier":"3.3.2","qs-iconv":"^1.0.4","jackspeak":"=2.1.1","npmignore":"^0.3.1","browserify":"^16.5.2","iconv-lite":"^0.5.1","in-publish":"^2.0.1","has-symbols":"^1.0.3","module-deps":"^6.2.3","unassertify":"^3.0.1","safer-buffer":"^2.1.2","mock-property":"^1.0.3","object-inspect":"^1.13.1","common-shakeify":"~1.0.0","bundle-collapser":"^1.4.0","es-value-fixtures":"^1.4.2","@browserify/envify":"^6.0.0","safe-publish-latest":"^2.0.0","has-override-mistake":"^1.0.1","@browserify/uglifyify":"^6.0.0","has-property-descriptors":"^1.0.2","@payloadcms/eslint-config":"3.0.0-beta.16"},"_npmOperationalInternal":{"tmp":"tmp/qs-esm_7.0.1_1719514977355_0.9326814533040617","host":"s3://npm-registry-packages"}},"7.0.2":{"name":"qs-esm","version":"7.0.2","keywords":["querystring","qs","query","url","parse","stringify"],"license":"BSD-3-Clause","_id":"qs-esm@7.0.2","maintainers":[{"name":"alessiogr","email":"alessio@bonfireleads.com"}],"contributors":[{"url":"http://ljharb.codes","name":"Jordan Harband","email":"ljharb@gmail.com"}],"homepage":"https://github.com/payloadcms/qs-esm","bugs":{"url":"https://github.com/payloadcms/qs-esm/issues"},"dist":{"shasum":"cdd52c8ddba8270258e0808423e8f28d8a7195c9","tarball":"https://registry.npmjs.org/qs-esm/-/qs-esm-7.0.2.tgz","fileCount":9,"integrity":"sha512-D8NAthKSD7SGn748v+GLaaO6k08Mvpoqroa35PqIQC4gtUa8/Pb/k+r0m0NnGBVbHDP1gKZ2nVywqfMisRhV5A==","signatures":[{"sig":"MEYCIQCf5WYxqaeqaYRewSe1MqqRAfS8pfdBRtZlS80EN8i/cgIhAIB0N5uc4yjCxSUkcX4EP5g8Ao6THSYC6W46o23wkCMj","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":56711},"main":"lib/index.js","type":"module","_from":"file:qs-esm-7.0.2.tgz","types":"lib/index.d.ts","engines":{"node":">=18"},"funding":{"url":"https://github.com/sponsors/ljharb"},"scripts":{"lint":"eslint --ext=js,mjs .","test":"pnpm run tests-only","readme":"evalmd README.md","pretest":"pnpm run --silent readme && pnpm run --silent lint","postlint":"eclint check $(git ls-files | xargs find 2> /dev/null | grep -vE 'node_modules|\\.git' | grep -v dist/)","posttest":"aud --production","prepublish":"not-in-publish || pnpm run prepublishOnly","tests-only":"tape 'test/**/*.cjs'"},"_npmUser":{"name":"alessiogr","email":"alessio@bonfireleads.com"},"_resolved":"/private/var/folders/nw/gc4rh1mn0pxdl2n0qjsbfgp00000gn/T/355a4f184a666acc7a1b28520bede9dd/qs-esm-7.0.2.tgz","_integrity":"sha512-D8NAthKSD7SGn748v+GLaaO6k08Mvpoqroa35PqIQC4gtUa8/Pb/k+r0m0NnGBVbHDP1gKZ2nVywqfMisRhV5A==","repository":{"url":"git+https://github.com/payloadcms/qs-esm.git","type":"git"},"_npmVersion":"8.19.4","description":"A modernized, esm-only fork of qs without unnecessary polyfills","directories":{},"sideEffects":false,"_nodeVersion":"22.2.0","publishConfig":{"ignore":["!dist/*","bower.json","component.json",".github/workflows","logos","tea.yaml"]},"_hasShrinkwrap":false,"devDependencies":{"aud":"^2.0.4","nyc":"^10.3.2","glob":"=10.3.7","tape":"^5.7.5","eclint":"^2.8.1","evalmd":"^0.0.19","mkdirp":"^0.5.5","for-each":"^0.3.3","prettier":"3.3.2","qs-iconv":"^1.0.4","jackspeak":"=2.1.1","npmignore":"^0.3.1","browserify":"^16.5.2","iconv-lite":"^0.5.1","in-publish":"^2.0.1","has-symbols":"^1.0.3","module-deps":"^6.2.3","unassertify":"^3.0.1","safer-buffer":"^2.1.2","mock-property":"^1.0.3","object-inspect":"^1.13.1","common-shakeify":"~1.0.0","bundle-collapser":"^1.4.0","es-value-fixtures":"^1.4.2","@browserify/envify":"^6.0.0","safe-publish-latest":"^2.0.0","has-override-mistake":"^1.0.1","@browserify/uglifyify":"^6.0.0","has-property-descriptors":"^1.0.2","@payloadcms/eslint-config":"3.0.0-beta.16"},"_npmOperationalInternal":{"tmp":"tmp/qs-esm_7.0.2_1720474421534_0.9792124595474845","host":"s3://npm-registry-packages"}},"7.0.3":{"name":"qs-esm","version":"7.0.3","keywords":["querystring","qs","query","url","parse","stringify"],"license":"BSD-3-Clause","_id":"qs-esm@7.0.3","maintainers":[{"name":"alessiogr","email":"alessio@bonfireleads.com"}],"contributors":[{"url":"https://payloadcms.com","name":"Payload","email":"info@payloadcms.com"},{"url":"http://ljharb.codes","name":"Jordan Harband","email":"ljharb@gmail.com"}],"homepage":"https://github.com/payloadcms/qs-esm","bugs":{"url":"https://github.com/payloadcms/qs-esm/issues"},"dist":{"shasum":"0d5c0f3a719090ece3ee426b766706e294e67bc3","tarball":"https://registry.npmjs.org/qs-esm/-/qs-esm-7.0.3.tgz","fileCount":9,"integrity":"sha512-8jbjCR0PPbqoQcv83C2K/zvVeytRPwPpt3WPDbq51qyLAxcWGtXVRjSe6GHtLCoVbg9+NEFkv7GyUxqjcDIJzw==","signatures":[{"sig":"MEUCIQDrUEvOgeRSezIQF26oeinLiFwe4SuUNN76/zgT2hd8gwIgGCwLIM9e/rZXogf/wdgg+s5uwoQ0Vs8LyF14CJhtW5g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":57674},"main":"lib/index.js","type":"module","_from":"file:qs-esm-7.0.3.tgz","types":"lib/index.d.ts","engines":{"node":">=18"},"funding":{"url":"https://github.com/sponsors/ljharb"},"scripts":{"lint":"eslint --ext=js,mjs .","test":"tape 'test/**/*.cjs'"},"_npmUser":{"name":"alessiogr","email":"alessio@bonfireleads.com"},"_resolved":"/private/var/folders/5h/pbgzkn_n4sl31x6mhh_w647c0000gn/T/e5004240209bef272255168e9d8cc0bf/qs-esm-7.0.3.tgz","_integrity":"sha512-8jbjCR0PPbqoQcv83C2K/zvVeytRPwPpt3WPDbq51qyLAxcWGtXVRjSe6GHtLCoVbg9+NEFkv7GyUxqjcDIJzw==","repository":{"url":"git+https://github.com/payloadcms/qs-esm.git","type":"git"},"_npmVersion":"10.9.0","description":"A modernized, esm-only fork of qs without unnecessary polyfills","directories":{},"sideEffects":false,"_nodeVersion":"24.0.1","publishConfig":{"ignore":["!dist/*","bower.json","component.json",".github/workflows","logos","tea.yaml"]},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^10.3.2","tape":"^5.9.0","for-each":"^0.3.3","prettier":"3.7.4","qs-iconv":"^1.0.4","npmignore":"^0.3.1","iconv-lite":"^0.5.1","has-symbols":"^1.1.0","safer-buffer":"^2.1.2","mock-property":"^1.1.0","object-inspect":"^1.13.4","es-value-fixtures":"^1.7.1","has-override-mistake":"^1.0.1","has-property-descriptors":"^1.0.2","@payloadcms/eslint-config":"3.0.0-beta.16"},"_npmOperationalInternal":{"tmp":"tmp/qs-esm_7.0.3_1767566788825_0.1287919515931395","host":"s3://npm-registry-packages-npm-production"}},"8.0.0":{"name":"qs-esm","version":"8.0.0","keywords":["querystring","qs","query","url","parse","stringify"],"license":"BSD-3-Clause","_id":"qs-esm@8.0.0","maintainers":[{"name":"alessiogr","email":"npm@gravili.net"}],"contributors":[{"url":"https://payloadcms.com","name":"Payload","email":"info@payloadcms.com"},{"url":"http://ljharb.codes","name":"Jordan Harband","email":"ljharb@gmail.com"}],"homepage":"https://github.com/payloadcms/qs-esm","bugs":{"url":"https://github.com/payloadcms/qs-esm/issues"},"dist":{"shasum":"423fc21d39404e8b9ed7e1583e8103a40426c3ab","tarball":"https://registry.npmjs.org/qs-esm/-/qs-esm-8.0.0.tgz","fileCount":9,"integrity":"sha512-e7zT2fDjPAF5NNsdvr9jdsvtEIyHJnVL0Y5N/RH4D6UR4WyBbQEi5YdEkyw3yUXzO8Sjqa2Cs1OhiivH0dfg1A==","signatures":[{"sig":"MEYCIQDlbSyx8sxm2CKk0G04GgMqyIP06AYOXADNyaPFm7U0ogIhAOWKeRkkj3GQlMstHl0YmXBSlMMghuWi5lwc3WA5onZX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50898},"main":"lib/index.js","type":"module","_from":"file:qs-esm-8.0.0.tgz","types":"lib/index.d.ts","engines":{"node":">=18"},"funding":{"url":"https://github.com/sponsors/ljharb"},"scripts":{"lint":"eslint --ext=js,mjs .","test":"tape 'test/**/*.cjs'"},"_npmUser":{"name":"alessiogr","email":"npm@gravili.net"},"_resolved":"/private/var/folders/rh/mb6xj21s6m5fkwyvq51dxp2c0000gn/T/d28282dba6041aa2974b1bbaf6239516/qs-esm-8.0.0.tgz","_integrity":"sha512-e7zT2fDjPAF5NNsdvr9jdsvtEIyHJnVL0Y5N/RH4D6UR4WyBbQEi5YdEkyw3yUXzO8Sjqa2Cs1OhiivH0dfg1A==","repository":{"url":"git+https://github.com/payloadcms/qs-esm.git","type":"git"},"_npmVersion":"11.9.0","description":"A modernized, esm-only fork of qs without unnecessary polyfills","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","publishConfig":{"ignore":["!dist/*",".github/workflows","logos"]},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^10.3.2","tape":"^5.9.0","prettier":"3.7.4","npmignore":"^0.3.1","object-inspect":"^1.13.4","es-value-fixtures":"^1.7.1","has-override-mistake":"^1.0.1","has-property-descriptors":"^1.0.2","@payloadcms/eslint-config":"3.0.0-beta.16"},"_npmOperationalInternal":{"tmp":"tmp/qs-esm_8.0.0_1774939361445_0.23489931139175546","host":"s3://npm-registry-packages-npm-production"}},"8.0.1":{"name":"qs-esm","version":"8.0.1","keywords":["querystring","qs","query","url","parse","stringify"],"license":"BSD-3-Clause","_id":"qs-esm@8.0.1","maintainers":[{"name":"alessiogr","email":"npm@gravili.net"}],"contributors":[{"url":"https://payloadcms.com","name":"Payload","email":"info@payloadcms.com"},{"url":"http://ljharb.codes","name":"Jordan Harband","email":"ljharb@gmail.com"}],"homepage":"https://github.com/payloadcms/qs-esm","bugs":{"url":"https://github.com/payloadcms/qs-esm/issues"},"dist":{"shasum":"4c96cfd41ec5d45cdf8f971c3d056032c81f5a20","tarball":"https://registry.npmjs.org/qs-esm/-/qs-esm-8.0.1.tgz","fileCount":9,"integrity":"sha512-eZ7l+0ZVy3He9c85pEM9KEBR9DFA4jrmWvIjm9wpcHvScwc/vgZDl2TNOF0pm0JsWKw24XBUZOY0Wxn7/nvJnw==","signatures":[{"sig":"MEUCIESCM2j0EXgpSmQUqA6l7gW6q7zAXGnTNOjQMhPiw6FuAiEAy7MPhkVD/SNN2LAnmiQ/r/jK63NMINCyLoUM21znQHI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50996},"main":"lib/index.js","type":"module","_from":"file:qs-esm-8.0.1.tgz","types":"lib/index.d.ts","engines":{"node":">=18"},"funding":{"url":"https://github.com/sponsors/ljharb"},"scripts":{"lint":"eslint --ext=js,mjs .","test":"tape 'test/**/*.cjs'"},"_npmUser":{"name":"alessiogr","email":"npm@gravili.net"},"_resolved":"/private/var/folders/rh/mb6xj21s6m5fkwyvq51dxp2c0000gn/T/9142e1023da8e6a639a2747ef7b5cf71/qs-esm-8.0.1.tgz","_integrity":"sha512-eZ7l+0ZVy3He9c85pEM9KEBR9DFA4jrmWvIjm9wpcHvScwc/vgZDl2TNOF0pm0JsWKw24XBUZOY0Wxn7/nvJnw==","repository":{"url":"git+https://github.com/payloadcms/qs-esm.git","type":"git"},"_npmVersion":"11.9.0","description":"A modernized, esm-only fork of qs without unnecessary polyfills","directories":{},"sideEffects":false,"_nodeVersion":"24.14.0","publishConfig":{"ignore":["!dist/*",".github/workflows","logos"]},"_hasShrinkwrap":false,"devDependencies":{"nyc":"^10.3.2","tape":"^5.9.0","prettier":"3.7.4","npmignore":"^0.3.1","object-inspect":"^1.13.4","es-value-fixtures":"^1.7.1","has-override-mistake":"^1.0.1","has-property-descriptors":"^1.0.2","@payloadcms/eslint-config":"3.0.0-beta.16"},"_npmOperationalInternal":{"tmp":"tmp/qs-esm_8.0.1_1774941240198_0.08282497071281103","host":"s3://npm-registry-packages-npm-production"}},"8.0.2":{"name":"qs-esm","description":"A modernized, esm-only fork of qs without unnecessary polyfills","homepage":"https://github.com/payloadcms/qs-esm","version":"8.0.2","repository":{"type":"git","url":"https://github.com/payloadcms/qs-esm.git"},"type":"module","funding":{"url":"https://github.com/sponsors/ljharb"},"main":"lib/index.js","types":"lib/index.d.ts","sideEffects":false,"maintainers":[{"name":"alessiogr","email":"npm@gravili.net"}],"contributors":[{"name":"Payload","email":"info@payloadcms.com","url":"https://payloadcms.com"},{"name":"Jordan Harband","email":"ljharb@gmail.com","url":"http://ljharb.codes"}],"keywords":["querystring","qs","query","url","parse","stringify"],"engines":{"node":">=18"},"devDependencies":{"@payloadcms/eslint-config":"3.0.0-beta.16","es-value-fixtures":"^1.7.1","has-override-mistake":"^1.0.1","has-property-descriptors":"^1.0.2","npmignore":"^0.3.1","nyc":"^10.3.2","object-inspect":"^1.13.4","prettier":"3.9.6","tape":"^5.9.0"},"license":"BSD-3-Clause","publishConfig":{"ignore":["!dist/*",".github/workflows","logos"]},"scripts":{"test":"tape 'test/**/*.cjs'","lint":"eslint --ext=js,mjs ."},"_id":"qs-esm@8.0.2","dist":{"integrity":"sha512-1usFLrE/VS+23TxRpOJvELzt67e4LqbrtjvQSlsnIX0vQta1QCucxa0hcUdPiOWA5SvBLK/0JwKYHH5h7lEnVQ==","shasum":"d492e76d38443d8238c27ee25737b6054060807a","tarball":"https://registry.npmjs.org/qs-esm/-/qs-esm-8.0.2.tgz","fileCount":9,"unpackedSize":52695,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIDXUdLvC93CFoVUT8kCTCvvsBifYYGViwcUy4iLQCRh7AiBoUmq4amnR88z+Cakr/X17uFuphiNWq6Ez/mCuvNNSLA=="}]},"_npmUser":{"name":"alessiogr","email":"npm@gravili.net"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/qs-esm_8.0.2_1789022205709_0.7068865858578945"},"_hasShrinkwrap":false}},"time":{"created":"2024-06-27T18:25:51.468Z","modified":"2026-09-10T06:36:45.973Z","7.0.0":"2024-06-27T18:25:51.653Z","7.0.1":"2024-06-27T19:02:57.537Z","7.0.2":"2024-07-08T21:33:41.688Z","7.0.3":"2026-01-04T22:46:28.965Z","8.0.0":"2026-03-31T06:42:41.569Z","8.0.1":"2026-03-31T07:14:00.337Z","8.0.2":"2026-09-10T06:36:45.852Z"},"license":"BSD-3-Clause","homepage":"https://github.com/payloadcms/qs-esm","keywords":["querystring","qs","query","url","parse","stringify"],"repository":{"type":"git","url":"https://github.com/payloadcms/qs-esm.git"},"description":"A modernized, esm-only fork of qs without unnecessary polyfills","contributors":[{"name":"Payload","email":"info@payloadcms.com","url":"https://payloadcms.com"},{"name":"Jordan Harband","email":"ljharb@gmail.com","url":"http://ljharb.codes"}],"maintainers":[{"name":"alessiogr","email":"npm@gravili.net"}],"readme":"# qs-esm\n\n[![CI](https://github.com/payloadcms/qs-esm/actions/workflows/main.yml/badge.svg?branch=main)](https://github.com/payloadcms/qs-esm/actions/workflows/main.yml)\n[![NPM version](https://img.shields.io/npm/v/qs-esm.svg?style=flat)](https://www.npmjs.com/package/qs-esm)\n\nA querystring parsing and stringifying library — modernized ESM-only fork of [qs](https://github.com/ljharb/qs), maintained by [Payload](https://payloadcms.com).\n\n> Not endorsed by [Jordan Harband](https://github.com/ljharb), the lead maintainer of qs. Originally created by [TJ Holowaychuk](https://github.com/visionmedia/node-querystring).\n\n## What's different from qs\n\nForked from [qs v6.12.1](https://github.com/ljharb/qs/tree/v6.12.1) with the following changes:\n\n- ✅ **ESM-only** — native ES modules, no CommonJS\n- ✅ **Types included** — no separate `@types/qs` package needed\n- ✅ **Node 18+** — polyfills for older runtimes removed\n- ✅ **Zero dependencies** — `side-channel` replaced with native `WeakMap`\n- ✅ **UTF-8 only** — `charset`, `charsetSentinel`, and `interpretNumericEntities` dropped. Legacy IE/Rails quirks that no longer apply. Encoder/decoder callbacks no longer receive a `charset` argument\n- ✅ **Security backports** — upstream security fixes are tracked and backported as they are published\n\n### Size comparison\n\n|                                | `qs` 6.16.0            | `qs-esm` 8.0.2            |\n| ------------------------------ | ---------------------- | ------------------------- |\n| Dependencies                   | 19                     | **0**                     |\n| `node_modules` size            | 1.7 MB                 | **76 KB**                 |\n| Bundled, `parse` + `stringify` | 42.3 KB (13.5 KB gzip) | **11.4 KB (4.1 KB gzip)** |\n| Bundled, `parse` only          | 42.3 KB (13.5 KB gzip) | **6.1 KB (2.3 KB gzip)**  |\n| Bundled, `stringify` only      | 42.3 KB (13.5 KB gzip) | **5.6 KB (2.2 KB gzip)**  |\n\nBundled with esbuild (`--bundle --minify --format=esm --platform=browser`).\n\n## Migrate from qs\n\nUninstall `qs` and `@types/qs`, install `qs-esm`, then update your import:\n\n```js\n// before\nimport qs from 'qs'\n\n// after\nimport * as qs from 'qs-esm'\n```\n\n## Usage\n\n```javascript\nimport * as qs from 'qs-esm'\nimport assert from 'assert'\n\nconst obj = qs.parse('a=c')\nassert.deepEqual(obj, { a: 'c' })\n\nconst str = qs.stringify(obj)\nassert.equal(str, 'a=c')\n```\n\n### Parsing Objects\n\n[](#preventEval)\n\n```javascript\nqs.parse(string, [options])\n```\n\n**qs** allows you to create nested objects within your query strings, by surrounding the name of sub-keys with square brackets `[]`.\nFor example, the string `'foo[bar]=baz'` converts to:\n\n```javascript\nassert.deepEqual(qs.parse('foo[bar]=baz'), {\n  foo: {\n    bar: 'baz',\n  },\n})\n```\n\nWhen using the `plainObjects` option the parsed value is returned as a null object, created via `Object.create(null)` and as such you should be aware that prototype methods will not exist on it and a user may set those names to whatever value they like:\n\n```javascript\nvar nullObject = qs.parse('a[hasOwnProperty]=b', { plainObjects: true })\nassert.deepEqual(nullObject, { a: { hasOwnProperty: 'b' } })\n```\n\nBy default parameters that would overwrite properties on the object prototype are ignored, if you wish to keep the data from those fields either use `plainObjects` as mentioned above, or set `allowPrototypes` to `true` which will allow user input to overwrite those properties.\n_WARNING_ It is generally a bad idea to enable this option as it can cause problems when attempting to use the properties that have been overwritten.\nAlways be careful with this option.\n\n```javascript\nvar protoObject = qs.parse('a[hasOwnProperty]=b', { allowPrototypes: true })\nassert.deepEqual(protoObject, { a: { hasOwnProperty: 'b' } })\n```\n\nURI encoded strings work too:\n\n```javascript\nassert.deepEqual(qs.parse('a%5Bb%5D=c'), {\n  a: { b: 'c' },\n})\n```\n\nYou can also nest your objects, like `'foo[bar][baz]=foobarbaz'`:\n\n```javascript\nassert.deepEqual(qs.parse('foo[bar][baz]=foobarbaz'), {\n  foo: {\n    bar: {\n      baz: 'foobarbaz',\n    },\n  },\n})\n```\n\nBy default, when nesting objects **qs** will only parse up to 5 children deep.\nThis means if you attempt to parse a string like `'a[b][c][d][e][f][g][h][i]=j'` your resulting object will be:\n\n```javascript\nvar expected = {\n  a: {\n    b: {\n      c: {\n        d: {\n          e: {\n            f: {\n              '[g][h][i]': 'j',\n            },\n          },\n        },\n      },\n    },\n  },\n}\nvar string = 'a[b][c][d][e][f][g][h][i]=j'\nassert.deepEqual(qs.parse(string), expected)\n```\n\nThis depth can be overridden by passing a `depth` option to `qs.parse(string, [options])`:\n\n```javascript\nvar deep = qs.parse('a[b][c][d][e][f][g][h][i]=j', { depth: 1 })\nassert.deepEqual(deep, { a: { b: { '[c][d][e][f][g][h][i]': 'j' } } })\n```\n\nThe depth limit helps mitigate abuse when **qs** is used to parse user input, and it is recommended to keep it a reasonably small number.\n\nFor similar reasons, by default **qs** will only parse up to 1000 parameters. This can be overridden by passing a `parameterLimit` option:\n\n```javascript\nvar limited = qs.parse('a=b&c=d', { parameterLimit: 1 })\nassert.deepEqual(limited, { a: 'b' })\n```\n\nTo bypass the leading question mark, use `ignoreQueryPrefix`:\n\n```javascript\nvar prefixed = qs.parse('?a=b&c=d', { ignoreQueryPrefix: true })\nassert.deepEqual(prefixed, { a: 'b', c: 'd' })\n```\n\nAn optional delimiter can also be passed:\n\n```javascript\nvar delimited = qs.parse('a=b;c=d', { delimiter: ';' })\nassert.deepEqual(delimited, { a: 'b', c: 'd' })\n```\n\nDelimiters can be a regular expression too:\n\n```javascript\nvar regexed = qs.parse('a=b;c=d,e=f', { delimiter: /[;,]/ })\nassert.deepEqual(regexed, { a: 'b', c: 'd', e: 'f' })\n```\n\nOption `allowDots` can be used to enable dot notation:\n\n```javascript\nvar withDots = qs.parse('a.b=c', { allowDots: true })\nassert.deepEqual(withDots, { a: { b: 'c' } })\n```\n\nOption `decodeDotInKeys` can be used to decode dots in keys\nNote: it implies `allowDots`, so `parse` will error if you set `decodeDotInKeys` to `true`, and `allowDots` to `false`.\n\n```javascript\nvar withDots = qs.parse('name%252Eobj.first=John&name%252Eobj.last=Doe', { decodeDotInKeys: true })\nassert.deepEqual(withDots, { 'name.obj': { first: 'John', last: 'Doe' } })\n```\n\nOption `allowEmptyArrays` can be used to allowing empty array values in object\n\n```javascript\nvar withEmptyArrays = qs.parse('foo[]&bar=baz', { allowEmptyArrays: true })\nassert.deepEqual(withEmptyArrays, { foo: [], bar: 'baz' })\n```\n\nOption `duplicates` can be used to change the behavior when duplicate keys are encountered\n\n```javascript\nassert.deepEqual(qs.parse('foo=bar&foo=baz'), { foo: ['bar', 'baz'] })\nassert.deepEqual(qs.parse('foo=bar&foo=baz', { duplicates: 'combine' }), { foo: ['bar', 'baz'] })\nassert.deepEqual(qs.parse('foo=bar&foo=baz', { duplicates: 'first' }), { foo: 'bar' })\nassert.deepEqual(qs.parse('foo=bar&foo=baz', { duplicates: 'last' }), { foo: 'baz' })\n```\n\n### Parsing Arrays\n\n**qs** can also parse arrays using a similar `[]` notation:\n\n```javascript\nvar withArray = qs.parse('a[]=b&a[]=c')\nassert.deepEqual(withArray, { a: ['b', 'c'] })\n```\n\nYou may specify an index as well:\n\n```javascript\nvar withIndexes = qs.parse('a[1]=c&a[0]=b')\nassert.deepEqual(withIndexes, { a: ['b', 'c'] })\n```\n\nNote that the only difference between an index in an array and a key in an object is that the value between the brackets must be a number to create an array.\nWhen creating arrays with specific indices, **qs** will compact a sparse array to only the existing values preserving their order:\n\n```javascript\nvar noSparse = qs.parse('a[1]=b&a[15]=c')\nassert.deepEqual(noSparse, { a: ['b', 'c'] })\n```\n\nYou may also use `allowSparse` option to parse sparse arrays:\n\n```javascript\nvar sparseArray = qs.parse('a[1]=2&a[3]=5', { allowSparse: true })\nassert.deepEqual(sparseArray, { a: [, '2', , '5'] })\n```\n\nNote that an empty string is also a value, and will be preserved:\n\n```javascript\nvar withEmptyString = qs.parse('a[]=&a[]=b')\nassert.deepEqual(withEmptyString, { a: ['', 'b'] })\n\nvar withIndexedEmptyString = qs.parse('a[0]=b&a[1]=&a[2]=c')\nassert.deepEqual(withIndexedEmptyString, { a: ['b', '', 'c'] })\n```\n\n**qs** will also limit specifying indices in an array to a maximum index of `20`.\nAny array members with an index of greater than `20` will instead be converted to an object with the index as the key.\nThis is needed to handle cases when someone sent, for example, `a[999999999]` and it will take significant time to iterate over this huge array.\n\n```javascript\nvar withMaxIndex = qs.parse('a[100]=b')\nassert.deepEqual(withMaxIndex, { a: { 100: 'b' } })\n```\n\nThis limit can be overridden by passing an `arrayLimit` option:\n\n```javascript\nvar withArrayLimit = qs.parse('a[1]=b', { arrayLimit: 0 })\nassert.deepEqual(withArrayLimit, { a: { 1: 'b' } })\n```\n\nTo disable array parsing entirely, set `parseArrays` to `false`.\n\n```javascript\nvar noParsingArrays = qs.parse('a[]=b', { parseArrays: false })\nassert.deepEqual(noParsingArrays, { a: { 0: 'b' } })\n```\n\nIf you mix notations, **qs** will merge the two items into an object:\n\n```javascript\nvar mixedNotation = qs.parse('a[0]=b&a[b]=c')\nassert.deepEqual(mixedNotation, { a: { 0: 'b', b: 'c' } })\n```\n\nYou can also create arrays of objects:\n\n```javascript\nvar arraysOfObjects = qs.parse('a[][b]=c')\nassert.deepEqual(arraysOfObjects, { a: [{ b: 'c' }] })\n```\n\nSome people use comma to join array, **qs** can parse it:\n\n```javascript\nvar arraysOfObjects = qs.parse('a=b,c', { comma: true })\nassert.deepEqual(arraysOfObjects, { a: ['b', 'c'] })\n```\n\n(_this cannot convert nested objects, such as `a={b:1},{c:d}`_)\n\n### Parsing primitive/scalar values (numbers, booleans, null, etc)\n\nBy default, all values are parsed as strings.\nThis behavior will not change and is explained in [issue #91](https://github.com/ljharb/qs/issues/91).\n\n```javascript\nvar primitiveValues = qs.parse('a=15&b=true&c=null')\nassert.deepEqual(primitiveValues, { a: '15', b: 'true', c: 'null' })\n```\n\nIf you wish to auto-convert values which look like numbers, booleans, and other values into their primitive counterparts, you can use the [query-types Express JS middleware](https://github.com/xpepermint/query-types) which will auto-convert all request query parameters.\n\n### Stringifying\n\n[](#preventEval)\n\n```javascript\nqs.stringify(object, [options])\n```\n\nWhen stringifying, **qs** by default URI encodes output. Objects are stringified as you would expect:\n\n```javascript\nassert.equal(qs.stringify({ a: 'b' }), 'a=b')\nassert.equal(qs.stringify({ a: { b: 'c' } }), 'a%5Bb%5D=c')\n```\n\nThis encoding can be disabled by setting the `encode` option to `false`:\n\n```javascript\nvar unencoded = qs.stringify({ a: { b: 'c' } }, { encode: false })\nassert.equal(unencoded, 'a[b]=c')\n```\n\nEncoding can be disabled for keys by setting the `encodeValuesOnly` option to `true`:\n\n```javascript\nvar encodedValues = qs.stringify(\n  { a: 'b', c: ['d', 'e=f'], f: [['g'], ['h']] },\n  { encodeValuesOnly: true },\n)\nassert.equal(encodedValues, 'a=b&c[0]=d&c[1]=e%3Df&f[0][0]=g&f[1][0]=h')\n```\n\n### Encoding\n\nThis encoding can also be replaced by a custom encoding method set as `encoder` option:\n\n```javascript\nvar encoded = qs.stringify(\n  { a: { b: 'c' } },\n  {\n    encoder: function (str) {\n      // Passed in values `a`, `b`, `c`\n      return // Return encoded string\n    },\n  },\n)\n```\n\n_(Note: the `encoder` option does not apply if `encode` is `false`)_\n\nAnalogue to the `encoder` there is a `decoder` option for `parse` to override decoding of properties and values:\n\n```javascript\nvar decoded = qs.parse('x=z', {\n  decoder: function (str) {\n    // Passed in values `x`, `z`\n    return // Return decoded string\n  },\n})\n```\n\nYou can encode keys and values using different logic by using the `type` argument provided to the encoder:\n\n```javascript\nvar encoded = qs.stringify(\n  { a: { b: 'c' } },\n  {\n    encoder: function (str, defaultEncoder, type) {\n      if (type === 'key') {\n        return // Encoded key\n      } else if (type === 'value') {\n        return // Encoded value\n      }\n    },\n  },\n)\n```\n\nThe `type` argument is also provided to the decoder:\n\n```javascript\nvar decoded = qs.parse('x=z', {\n  decoder: function (str, defaultDecoder, type) {\n    if (type === 'key') {\n      return // Decoded key\n    } else if (type === 'value') {\n      return // Decoded value\n    }\n  },\n})\n```\n\nExamples beyond this point will be shown as though the output is not URI encoded for clarity.\nPlease note that the return values in these cases _will_ be URI encoded during real usage.\n\nWhen arrays are stringified, they follow the `arrayFormat` option, which defaults to `indices`:\n\n```javascript\nqs.stringify({ a: ['b', 'c', 'd'] })\n// 'a[0]=b&a[1]=c&a[2]=d'\n```\n\nYou may override this by setting the `indices` option to `false`, or to be more explicit, the `arrayFormat` option to `repeat`:\n\n```javascript\nqs.stringify({ a: ['b', 'c', 'd'] }, { indices: false })\n// 'a=b&a=c&a=d'\n```\n\nYou may use the `arrayFormat` option to specify the format of the output array:\n\n```javascript\nqs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'indices' })\n// 'a[0]=b&a[1]=c'\nqs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'brackets' })\n// 'a[]=b&a[]=c'\nqs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'repeat' })\n// 'a=b&a=c'\nqs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'comma' })\n// 'a=b,c'\n```\n\nNote: when using `arrayFormat` set to `'comma'`, you can also pass the `commaRoundTrip` option set to `true` or `false`, to append `[]` on single-item arrays, so that they can round trip through a parse.\n\nWhen objects are stringified, by default they use bracket notation:\n\n```javascript\nqs.stringify({ a: { b: { c: 'd', e: 'f' } } })\n// 'a[b][c]=d&a[b][e]=f'\n```\n\nYou may override this to use dot notation by setting the `allowDots` option to `true`:\n\n```javascript\nqs.stringify({ a: { b: { c: 'd', e: 'f' } } }, { allowDots: true })\n// 'a.b.c=d&a.b.e=f'\n```\n\nYou may encode the dot notation in the keys of object with option `encodeDotInKeys` by setting it to `true`:\nNote: it implies `allowDots`, so `stringify` will error if you set `decodeDotInKeys` to `true`, and `allowDots` to `false`.\nCaveat: when `encodeValuesOnly` is `true` as well as `encodeDotInKeys`, only dots in keys and nothing else will be encoded.\n\n```javascript\nqs.stringify(\n  { 'name.obj': { first: 'John', last: 'Doe' } },\n  { allowDots: true, encodeDotInKeys: true },\n)\n// 'name%252Eobj.first=John&name%252Eobj.last=Doe'\n```\n\nYou may allow empty array values by setting the `allowEmptyArrays` option to `true`:\n\n```javascript\nqs.stringify({ foo: [], bar: 'baz' }, { allowEmptyArrays: true })\n// 'foo[]&bar=baz'\n```\n\nEmpty strings and null values will omit the value, but the equals sign (=) remains in place:\n\n```javascript\nassert.equal(qs.stringify({ a: '' }), 'a=')\n```\n\nKey with no values (such as an empty object or array) will return nothing:\n\n```javascript\nassert.equal(qs.stringify({ a: [] }), '')\nassert.equal(qs.stringify({ a: {} }), '')\nassert.equal(qs.stringify({ a: [{}] }), '')\nassert.equal(qs.stringify({ a: { b: [] } }), '')\nassert.equal(qs.stringify({ a: { b: {} } }), '')\n```\n\nProperties that are set to `undefined` will be omitted entirely:\n\n```javascript\nassert.equal(qs.stringify({ a: null, b: undefined }), 'a=')\n```\n\nThe query string may optionally be prepended with a question mark:\n\n```javascript\nassert.equal(qs.stringify({ a: 'b', c: 'd' }, { addQueryPrefix: true }), '?a=b&c=d')\n```\n\nThe delimiter may be overridden with stringify as well:\n\n```javascript\nassert.equal(qs.stringify({ a: 'b', c: 'd' }, { delimiter: ';' }), 'a=b;c=d')\n```\n\nIf you only want to override the serialization of `Date` objects, you can provide a `serializeDate` option:\n\n```javascript\nvar date = new Date(7)\nassert.equal(qs.stringify({ a: date }), 'a=1970-01-01T00:00:00.007Z'.replace(/:/g, '%3A'))\nassert.equal(\n  qs.stringify(\n    { a: date },\n    {\n      serializeDate: function (d) {\n        return d.getTime()\n      },\n    },\n  ),\n  'a=7',\n)\n```\n\nYou may use the `sort` option to affect the order of parameter keys:\n\n```javascript\nfunction alphabeticalSort(a, b) {\n  return a.localeCompare(b)\n}\nassert.equal(qs.stringify({ a: 'c', z: 'y', b: 'f' }, { sort: alphabeticalSort }), 'a=c&b=f&z=y')\n```\n\nFinally, you can use the `filter` option to restrict which keys will be included in the stringified output.\nIf you pass a function, it will be called for each key to obtain the replacement value.\nOtherwise, if you pass an array, it will be used to select properties and array indices for stringification:\n\n```javascript\nfunction filterFunc(prefix, value) {\n  if (prefix == 'b') {\n    // Return an `undefined` value to omit a property.\n    return\n  }\n  if (prefix == 'e[f]') {\n    return value.getTime()\n  }\n  if (prefix == 'e[g][0]') {\n    return value * 2\n  }\n  return value\n}\nqs.stringify({ a: 'b', c: 'd', e: { f: new Date(123), g: [2] } }, { filter: filterFunc })\n// 'a=b&c=d&e[f]=123&e[g][0]=4'\nqs.stringify({ a: 'b', c: 'd', e: 'f' }, { filter: ['a', 'e'] })\n// 'a=b&e=f'\nqs.stringify({ a: ['b', 'c', 'd'], e: 'f' }, { filter: ['a', 0, 2] })\n// 'a[0]=b&a[2]=d'\n```\n\nYou could also use `filter` to inject custom serialization for user defined types.\nConsider you're working with some api that expects query strings of the format for ranges:\n\n```\nhttps://domain.com/endpoint?range=30...70\n```\n\nFor which you model as:\n\n```javascript\nclass Range {\n  constructor(from, to) {\n    this.from = from\n    this.to = to\n  }\n}\n```\n\nYou could _inject_ a custom serializer to handle values of this type:\n\n```javascript\nqs.stringify(\n  {\n    range: new Range(30, 70),\n  },\n  {\n    filter: (prefix, value) => {\n      if (value instanceof Range) {\n        return `${value.from}...${value.to}`\n      }\n      // serialize the usual way\n      return value\n    },\n  },\n)\n// range=30...70\n```\n\n### Handling of `null` values\n\nBy default, `null` values are treated like empty strings:\n\n```javascript\nvar withNull = qs.stringify({ a: null, b: '' })\nassert.equal(withNull, 'a=&b=')\n```\n\nParsing does not distinguish between parameters with and without equal signs.\nBoth are converted to empty strings.\n\n```javascript\nvar equalsInsensitive = qs.parse('a&b=')\nassert.deepEqual(equalsInsensitive, { a: '', b: '' })\n```\n\nTo distinguish between `null` values and empty strings use the `strictNullHandling` flag. In the result string the `null`\nvalues have no `=` sign:\n\n```javascript\nvar strictNull = qs.stringify({ a: null, b: '' }, { strictNullHandling: true })\nassert.equal(strictNull, 'a&b=')\n```\n\nTo parse values without `=` back to `null` use the `strictNullHandling` flag:\n\n```javascript\nvar parsedStrictNull = qs.parse('a&b=', { strictNullHandling: true })\nassert.deepEqual(parsedStrictNull, { a: null, b: '' })\n```\n\nTo completely skip rendering keys with `null` values, use the `skipNulls` flag:\n\n```javascript\nvar nullsSkipped = qs.stringify({ a: 'b', c: null }, { skipNulls: true })\nassert.equal(nullsSkipped, 'a=b')\n```\n\n### RFC 3986 and RFC 1738 space encoding\n\nRFC3986 used as default option and encodes ' ' to _%20_ which is backward compatible.\nIn the same time, output can be stringified as per RFC1738 with ' ' equal to '+'.\n\n```\nassert.equal(qs.stringify({ a: 'b c' }), 'a=b%20c');\nassert.equal(qs.stringify({ a: 'b c' }, { format : 'RFC3986' }), 'a=b%20c');\nassert.equal(qs.stringify({ a: 'b c' }, { format : 'RFC1738' }), 'a=b+c');\n```\n","readmeFilename":""}