62 lines
1.5 KiB
Plaintext
62 lines
1.5 KiB
Plaintext
import { decode, encode } from "./qss.js";
|
|
const defaultParseSearch = parseSearchWith(JSON.parse);
|
|
const defaultStringifySearch = stringifySearchWith(
|
|
JSON.stringify,
|
|
JSON.parse
|
|
);
|
|
function parseSearchWith(parser) {
|
|
return (searchStr) => {
|
|
if (searchStr.substring(0, 1) === "?") {
|
|
searchStr = searchStr.substring(1);
|
|
}
|
|
const query = decode(searchStr);
|
|
for (const key in query) {
|
|
const value = query[key];
|
|
if (typeof value === "string") {
|
|
try {
|
|
query[key] = parser(value);
|
|
} catch (err) {
|
|
}
|
|
}
|
|
}
|
|
return query;
|
|
};
|
|
}
|
|
function stringifySearchWith(stringify, parser) {
|
|
function stringifyValue(val) {
|
|
if (typeof val === "object" && val !== null) {
|
|
try {
|
|
return stringify(val);
|
|
} catch (err) {
|
|
}
|
|
} else if (typeof val === "string" && typeof parser === "function") {
|
|
try {
|
|
parser(val);
|
|
return stringify(val);
|
|
} catch (err) {
|
|
}
|
|
}
|
|
return val;
|
|
}
|
|
return (search) => {
|
|
search = { ...search };
|
|
Object.keys(search).forEach((key) => {
|
|
const val = search[key];
|
|
if (typeof val === "undefined" || val === void 0) {
|
|
delete search[key];
|
|
} else {
|
|
search[key] = stringifyValue(val);
|
|
}
|
|
});
|
|
const searchStr = encode(search).toString();
|
|
return searchStr ? `?${searchStr}` : "";
|
|
};
|
|
}
|
|
export {
|
|
defaultParseSearch,
|
|
defaultStringifySearch,
|
|
parseSearchWith,
|
|
stringifySearchWith
|
|
};
|
|
//# sourceMappingURL=searchParams.js.map
|