You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Before, bracket, index, colon-list-separator, bracket-separator, comma, and separator kept only the last value, so foo=1&foo=2 gave {foo: '2'}.
An explicit types entry now always takes precedence over parseNumbers and parseBooleans, and a value that does not match its type stays a string 04649def48a249
The string[] and number[] types now always give an array (except with arrayFormat: 'none', as documented) 04649de2a6984f
A percent-encoded byte that is not valid UTF-8 now decodes to U+FFFD, like URLSearchParams, instead of being kept as-is 19331de
arrayFormat: 'bracket-separator' no longer splits on a percent-encoded separator, like comma and separator (#398) deb9784
foo[]=a%2Cb,c now gives ['a,b', 'c'].
stringifyUrl() now percent-encodes % in fragmentIdentifier1602ae0
The fragment identifier is now a decoded value, like the query values, so it round-trips with parseUrl(). If you passed an already encoded fragment identifier, pass it decoded.
pick() and exclude() now write the kept parameters back exactly as they were in the URL 1646c64e087ca9a7391f2
Options like parseNumbers, parseBooleans, types, and decode only change the value the filter receives. Before, pick('https://foo.bar?id=007', ['id'], {parseNumbers: true}) gave id=7.
Improvements
Remove the decode-uri-component dependency and decode in linear time 19331de
The old decoder was quadratic for some malformed input.
Fix parse() being quadratic for a key that repeats many times with arrayFormat: 'comma' and 'separator'00a52ff
TypeScript: The parsed value types now follow the parseNumbers, parseBooleans, and types options, also for parseUrl(), pick(), and exclude()d239f4f472777f789fc36
An option that is explicitly undefined now uses its default value 1646c64
Fixes
Fix stringify() output that did not parse back to the same value 13bc381b63dc56deb9784
This affected a separator like - or . inside a value, null items with colon-list-separator, and arrays that became empty after skipping items with bracket-separator.
Fix stringify() throwing URIError for a string with a lone surrogate b9ff3f8
sort: true threw in stringify(), parse() threw when sort was not a boolean or a function, sort: false broke arrayFormat: 'index', and pick() ignored sort: false.
Fix stringifyUrl() turning an index format array that is already in the URL into [object Object] (#422) 220906a
Fix stringifyUrl(), pick(), and exclude() corrupting the query and the fragment identifier with encode: false7268b7ac75c681
Fix stringifyUrl() changing the parameters that are already in the URL when you give it parse options 93c3e1e
Fix parseUrl() and stringifyUrl() keeping leading and trailing whitespace 1d91dbf93c3e1e
Fix parse() throwing for arrayFormat: 'index' when a plain value comes before the indexed entries 8e9d58d
Fix parse() using types keys inherited from Object.prototype, like toString (#421) 0682872
Fix stringify() ignoring the replacer result for skipNull and skipEmptyString42210ea
Fix stringify() reading each value twice, which ran getters and Proxy traps two times 5e50210
Fix stringifyUrl() not accepting an interface for querycd042b8