Files
traxxx-web/src/utils/query-boolean.js

48 lines
1.0 KiB
JavaScript

function parseBoolFromString(string) {
if (string === 'true') {
return true;
}
if (string === 'false') {
return false;
}
return string;
}
function parseValue(value) {
if (typeof value === 'string') {
return parseBoolFromString(value);
}
if (Array.isArray(value)) {
return value.map(parseValue);
}
if (value && typeof value === 'object') {
return parseObject(value);
}
return value;
}
function parseObject(obj) {
return Object.fromEntries(Object.entries(obj).map(([key, value]) => [key, parseValue(value)]));
}
// Express 5's req.query is a getter that re-parses the URL on every access, so it can no longer
// be reassigned like `req.query = ...` (that's a silent no-op); it must be shadowed with its own
// property on the request instance instead. See https://github.com/expressjs/express/issues/6633
export default function queryBoolean() {
return (req, _res, next) => {
Object.defineProperty(req, 'query', {
value: parseObject(req.query),
configurable: true,
enumerable: true,
writable: true,
});
next();
};
}