- From: Domenic Denicola <notifications@github.com>
- Date: Thu, 05 Jan 2017 08:20:26 -0800
- To: whatwg/url <url@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <whatwg/url/pull/175/c270685303@github.com>
The behavior here is governed by [the definiton for how to convert a JS value into a union type](https://heycam.github.io/webidl/#es-union). I think it ends up looking basically like this:
```js
if (arg === null || arg === undefined) {
// record<USVString, USVString>
// add zero key/value pairs to the URLSearchParams
} else if (typeof arg === "object") {
const iterator = arg[Symbol.iterator];
if (iterator === undefined || iterator === null) {
// record<USVString, USVString>
const map = new Map();
for (const key of Object.getOwnPropertyNames(arg)) {
const desc = Object.getOwnPropertyDescriptor(arg, key);
if (desc !== undefined && desc.enumerable) {
const typedKey = toUSVString(key);
const typedValue = toUSVString(arg[key]);
map.set(typedKey, typedValue);
}
}
// Use `map` to add key/value pairs to the URLSearchParams
} else {
// sequence<sequence<USVString>>
const pairs = [];
// Note: per spec we have to first exhaust the lists (convert
// from JS value to sequence<sequence<USVString>>) then process them
for (const x of iterator) {
const gotten = [];
pairs.push(gotten);
for (const y of x) {
gotten.push(toUSVString(y));
}
}
for (const pair of pairs) {
if (pair.length !== 2) {
throw new TypeError();
}
// Add (`pair[0]`, `pair[1]`) key/value pair to URLSearchParams
}
}
} else {
// USVString
const string = toUSVString(arg);
// parse and process the string to add key/value pairs to the URLSearchParams
}
```
--
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/whatwg/url/pull/175#issuecomment-270685303
Received on Thursday, 5 January 2017 16:21:08 UTC