UNPKG

@clipboard-health/json-api

Version:

TypeScript-friendly utilities for adhering to the JSON:API specification.

51 lines 1.48 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.stringifyQuery = stringifyQuery; const qs_1 = require("qs"); /** * Converts from an ergonomic query format to URLSearchParams, providing a more user-friendly API * than {@link toClientSearchParams} while maintaining JSON:API compliance. * * @example * <embedex source="packages/json-api/examples/stringifyQuery.ts"> * * ```ts * import { deepEqual } from "node:assert/strict"; * * import { stringifyQuery } from "@clipboard-health/json-api"; * * import type { ClientJsonApiQuery } from "../src/lib/types"; * * const [date1, date2] = ["2024-01-01", "2024-01-02"]; * const query: ClientJsonApiQuery = { * fields: { user: ["age", "dateOfBirth"] }, * filter: { * age: 2, * dateOfBirth: { * gt: date1, * lt: date2, * }, * isActive: true, * }, * include: "article", * page: { * size: 10, * }, * sort: "-age", * }; * * deepEqual( * stringifyQuery(query), * new URLSearchParams( * `fields[user]=age,dateOfBirth&filter[age]=2&filter[dateOfBirth][gt]=${date1}&filter[dateOfBirth][lt]=${date2}&filter[isActive]=true&include=article&page[size]=10&sort=-age`, * ).toString(), * ); * ``` * * </embedex> */ function stringifyQuery(query, options) { const { encode = true } = options ?? {}; return (0, qs_1.stringify)(query, { arrayFormat: "comma", encode }); } //# sourceMappingURL=stringifyQuery.js.map