core-utils
    Preparing search index...

    Module @clipboard-health/json-api - v0.18.4

    @clipboard-health/json-api

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

    npm install @clipboard-health/json-api
    

    From the client, call stringifyQuery to convert from JsonApiQuery to URLSearchParams:

    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(),
    );

    From the server, call parseQuery to convert from URLSearchParams to ServerJsonApiQuery:

    import { deepEqual } from "node:assert/strict";

    import { parseQuery } from "@clipboard-health/json-api";

    import { type ServerJsonApiQuery } from "../src/lib/types";

    const [date1, date2] = ["2024-01-01", "2024-01-02"];
    // The URLSearchParams constructor also supports URL-encoded strings
    const searchParams = 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`,
    );

    const query: ServerJsonApiQuery = parseQuery(searchParams.toString());

    deepEqual(query, {
    fields: { user: ["age", "dateOfBirth"] },
    filter: {
    age: "2",
    dateOfBirth: { gt: date1, lt: date2 },
    isActive: "true",
    },
    include: "article",
    page: {
    size: "10",
    },
    sort: "-age",
    });

    See package.json scripts for a list of commands.

    Classes

    URLSearchParams

    Interfaces

    ClientJsonApiQuery
    NestedFilter
    ServerJsonApiQuery

    Type Aliases

    FilterObject
    FilterOperator
    FilterValue
    PageKey

    Functions

    parseQuery
    stringifyQuery