in packages/recoil-sync/RecoilSync_URL.js [90:125]
function encodeURL(
href: string,
loc: LocationOption,
items: ItemSnapshot,
serialize: mixed => string,
): string {
const url = new URL(href);
switch (loc.part) {
case 'href':
return serialize(unwrapState(items));
case 'hash':
url.hash = encodeURIComponent(serialize(unwrapState(items)));
break;
case 'search':
url.search = encodeURIComponent(serialize(unwrapState(items)));
break;
case 'queryParams': {
const {param} = loc;
const searchParams = new URLSearchParams(url.search);
if (param != null) {
searchParams.set(param, serialize(unwrapState(items)));
} else {
for (const [itemKey, value] of items.entries()) {
value instanceof DefaultValue
? searchParams.delete(itemKey)
: searchParams.set(itemKey, serialize(value));
}
}
url.search = searchParams.toString();
break;
}
default:
throw err(`Unknown URL location part: "${loc.part}"`);
}
return url.href;
}