UNPKG

@tanstack/router-core

Version:

Modern and scalable routing for React applications

65 lines (64 loc) 2.48 kB
const require_qss = require("./qss.cjs"); //#region src/searchParams.ts /** Default `parseSearch` that strips leading '?' and JSON-parses values. */ var defaultParseSearch = parseSearchWith(JSON.parse); /** Default `stringifySearch` using JSON.stringify for complex values. */ var defaultStringifySearch = stringifySearchWith(JSON.stringify, JSON.parse); /** * Build a `parseSearch` function using a provided JSON-like parser. * * The returned function strips a leading `?`, decodes values, and attempts to * JSON-parse string values using the given `parser`. * * @param parser Function to parse a string value (e.g. `JSON.parse`). * @returns A `parseSearch` function compatible with `Router` options. * @link https://tanstack.com/router/latest/docs/framework/react/guide/custom-search-param-serialization */ function parseSearchWith(parser) { return (searchStr) => { if (searchStr[0] === "?") searchStr = searchStr.substring(1); const query = require_qss.decode(searchStr); for (const key in query) { const value = query[key]; if (typeof value === "string") try { query[key] = parser(value); } catch (_err) {} } return query; }; } /** * Build a `stringifySearch` function using a provided serializer. * * Non-primitive values are serialized with `stringify`. If a `parser` is * supplied, string values that are parseable are re-serialized to ensure * symmetry with `parseSearch`. * * @param stringify Function to serialize a value (e.g. `JSON.stringify`). * @param parser Optional parser to detect parseable strings. * @returns A `stringifySearch` function compatible with `Router` options. * @link https://tanstack.com/router/latest/docs/framework/react/guide/custom-search-param-serialization */ function stringifySearchWith(stringify, parser) { const hasParser = typeof parser === "function"; function stringifyValue(val) { if (typeof val === "object" && val !== null) try { return stringify(val); } catch (_err) {} else if (hasParser && typeof val === "string") try { parser(val); return stringify(val); } catch (_err) {} return val; } return (search) => { const searchStr = require_qss.encode(search, stringifyValue); return searchStr ? `?${searchStr}` : ""; }; } //#endregion exports.defaultParseSearch = defaultParseSearch; exports.defaultStringifySearch = defaultStringifySearch; exports.parseSearchWith = parseSearchWith; exports.stringifySearchWith = stringifySearchWith; //# sourceMappingURL=searchParams.cjs.map