Lack of symmetry between parse and stringify
stringify(parse('?%20&')) yields only &.
Bit of an edge-case I admit, but do we want to be losing this information?
parse('?%20&') yields {"":null," ":null}.
I think parse('?%20&') should result in {}. Keeping empty keys or whitespace only keys are not useful.
I'd be happy to take a look at this.
In my opinion assuming empty or whitespace-only keys are not useful to the client feels a little presumptuous. If someone tries to parse '?%20&', isn't {"":null," ":null} the honest response? (Either that or {"":""," ":""}).
I don't think anyone would actually do this in real code though. If you really think it matters, we could document the behavior.