65 lines
2.4 KiB
Plaintext
65 lines
2.4 KiB
Plaintext
const require_qss = require("./qss.cjs");
|
|
//#region src/searchParams.ts
|
|
/** Default `parseSearch` that strips leading '?' and JSON-parses values. */
|
|
const defaultParseSearch = parseSearchWith(JSON.parse);
|
|
/** Default `stringifySearch` using JSON.stringify for complex values. */
|
|
const 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 |