in packages/recoil-sync/RecoilSync_URLTransit.js [69:122]
function useRecoilURLSyncTransit({
handlers: handlersProp = [],
...options
}: RecoilURLSyncTransitOptions): void {
if (options.location.part === 'href') {
throw err('"href" location is not supported for Transit encoding');
}
const handlers = useMemo(
() => [...BUILTIN_HANDLERS, ...handlersProp],
[handlersProp],
);
const writer = useMemo(
() =>
transit.writer('json', {
handlers: transit.map(
handlers
.map(handler => [
handler.class,
transit.makeWriteHandler({
tag: () => handler.tag,
rep: handler.write,
}),
])
.flat(1),
),
}),
[handlers],
);
const serialize = useCallback(x => writer.write(x), [writer]);
const reader = useMemo(
() =>
transit.reader('json', {
handlers: handlers.reduce((c, {tag, read}) => {
c[tag] = read;
return c;
}, {}),
mapBuilder: {
init: () => ({}),
add: (ret, key, val) => {
ret[key] = val;
return ret;
},
finalize: ret => ret,
},
}),
[handlers],
);
const deserialize = useCallback(x => reader.read(x), [reader]);
useRecoilURLSync({...options, serialize, deserialize});
}