respond-framework
Version:
create as fast you think
38 lines (36 loc) • 1.31 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.stringifyQuery = exports.parseSearch = void 0;
var qs = require("qs");
var _isNumber = require("../utils/isNumber.js");
var _utils = require("../proxy/helpers/utils.js");
// we like the qs library because it handles nested objects in query strings
const parseSearch = (search, state) => {
const ps = state?.options.parseSearch ?? parse;
return ps(search, state?.respond);
};
exports.parseSearch = parseSearch;
const stringifyQuery = (query, state) => {
const stringify = state?.options.stringifyQuery ?? qs.stringify;
return stringify(query);
};
exports.stringifyQuery = stringifyQuery;
const parse = (search, respond) => {
const rev = respond ? v => respond.revive(v) : v => v;
let k;
const decoder = (v, defaultDecoder, charset, type) => {
let ret;
if (type === 'key') {
k = v;
ret = defaultDecoder(v);
} else if (type === 'value') {
ret = /^false|true$/.test(v) ? v === 'true' : (0, _isNumber.default)(v) && !/Id/.test(k) ? parseInt(v) : /At$/.test(k) ? new Date(v) : (0, _utils.canProxy)(v) ? rev(v) : defaultDecoder(v); // fallback to default decoder
}
return ret === '' ? undefined : ret;
};
return qs.parse(search.replace(/^\?/, ''), {
decoder
});
};