Files
SnowLuma/.pnpm-store/v11/files/ca/b9bfbb97bd67a63d04bee28c813d5170abd5512954b8821c39a26cef93786784812970c8406ba44391b9e7c27de5ac63afeb83f3aa3bc2cf835fff17862ec6
T
TanTan 2a69b23b47
Dev Build / cleanup (push) Waiting to run
Dev Build / typecheck (push) Waiting to run
docs: 仓库链接指向本镜像仓库
2026-11-13 09:27:07 +08:00

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