in internal/qs/stringify.ts [358:438]
export function stringify(object: any, opts: StringifyOptions = {}) {
let obj = object;
const options = normalize_stringify_options(opts);
let obj_keys: PropertyKey[] | undefined;
let filter;
if (typeof options.filter === "function") {
filter = options.filter;
obj = filter("", obj);
} else if (is_array(options.filter)) {
filter = options.filter;
obj_keys = filter;
}
const keys: string[] = [];
if (typeof obj !== "object" || obj === null) {
return "";
}
const generateArrayPrefix = array_prefix_generators[options.arrayFormat];
const commaRoundTrip = generateArrayPrefix === "comma" &&
options.commaRoundTrip;
if (!obj_keys) {
obj_keys = Object.keys(obj);
}
if (options.sort) {
obj_keys.sort(options.sort);
}
const sideChannel = new WeakMap();
for (let i = 0; i < obj_keys.length; ++i) {
const key = obj_keys[i]!;
if (options.skipNulls && obj[key] === null) {
continue;
}
push_to_array(
keys,
inner_stringify(
obj[key],
key,
// @ts-expect-error
generateArrayPrefix,
commaRoundTrip,
options.allowEmptyArrays,
options.strictNullHandling,
options.skipNulls,
options.encodeDotInKeys,
options.encode ? options.encoder : null,
options.filter,
options.sort,
options.allowDots,
options.serializeDate,
options.format,
options.formatter,
options.encodeValuesOnly,
options.charset,
sideChannel,
),
);
}
const joined = keys.join(options.delimiter);
let prefix = options.addQueryPrefix === true ? "?" : "";
if (options.charsetSentinel) {
if (options.charset === "iso-8859-1") {
// encodeURIComponent('✓'), the "numeric entity" representation of a checkmark
prefix += "utf8=%26%2310003%3B&";
} else {
// encodeURIComponent('✓')
prefix += "utf8=%E2%9C%93&";
}
}
return joined.length > 0 ? prefix + joined : "";
}