Plugins
Query String
Nested object serialization for query parameters
The QS plugin serializes nested objects in query parameters using bracket notation, powered by the battle-tested qs package.
Installation
npm install @spoosh/plugin-qsUsage
import { Spoosh } from "@spoosh/core";
import { qsPlugin } from "@spoosh/plugin-qs";
const client = new Spoosh<ApiSchema, Error>("/api").use([
qsPlugin({ arrayFormat: "brackets" }),
]);Example
// Query object
const query = {
pagination: { limit: 10, offset: 0 },
filters: { status: "active", tags: ["a", "b"] },
};
// Serialized result
// pagination[limit]=10&pagination[offset]=0&filters[status]=active&filters[tags][]=a,bPer-Request Override
// Use comma-separated arrays for this request
injectRead((api) => api("items").GET({ query }), {
qs: { arrayFormat: "comma" },
});
// Use dot notation for nested objects
injectRead((api) => api("search").GET({ query }), { qs: { allowDots: true } });Options
Plugin Config
Accepts all qs stringify options. Common options:
| Option | Type | Default | Description |
|---|---|---|---|
arrayFormat | "brackets" | "indices" | "repeat" | "comma" | "brackets" | How to serialize arrays |
allowDots | boolean | false | Use dot notation instead of brackets |
skipNulls | boolean | true | Skip null values in serialization |
Per-Request Options
Same options as plugin config, nested under qs:
injectRead((api) => api("items").GET({ query }), {
qs: { arrayFormat: "comma" },
});Array Formats
brackets (default)
{
tags: ["a", "b"];
}
// tags[]=a,bindices
{
tags: ["a", "b"];
}
// tags[0]=a&tags[1]=brepeat
{
tags: ["a", "b"];
}
// tags=a,bcomma
{
tags: ["a", "b"];
}
// tags=a,bDot Notation
// allowDots: false (default)
{
filters: {
status: "active";
}
}
// filters[status]=active
// allowDots: true
{
filters: {
status: "active";
}
}
// filters.status=active