UNPKG

respond-framework

Version:
38 lines (36 loc) 1.31 kB
"use strict"; 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 }); };