@clipboard-health/json-api-nestjs
Utilities for adhering to the JSON:API specification with NestJS.
Table of contents
Install
npm install @clipboard-health/json-api-nestjs
Usage
Query helpers
Create Zod schemas for your API's queries:
import { booleanString } from "@clipboard-health/contract-core";
import {
cursorPaginationQuery,
fieldsQuery,
type FilterMap,
filterQuery,
includeQuery,
sortQuery,
} from "@clipboard-health/json-api-nestjs";
import { z } from "zod";
import {
type ArticleAttributeFields,
type UserAttributeFields,
type UserIncludeFields,
} from "../src/contract";
const articleFields = ["title"] as const satisfies readonly ArticleAttributeFields[];
const userFields = ["age", "dateOfBirth"] as const satisfies readonly UserAttributeFields[];
const userIncludeFields = [
"articles",
"articles.comments",
] as const satisfies readonly UserIncludeFields[];
const userFilterMap = {
age: {
filters: ["eq", "gt"],
schema: z.coerce.number().int().positive().max(125),
},
isActive: {
filters: ["eq"],
schema: booleanString,
},
dateOfBirth: {
filters: ["gte"],
schema: z.coerce.date().min(new Date("1900-01-01")).max(new Date()),
},
} as const satisfies FilterMap<UserAttributeFields>;
export const query = z
.object({
...cursorPaginationQuery(),
...fieldsQuery({ user: userFields, article: articleFields }),
...filterQuery(userFilterMap),
...sortQuery(userFields),
...includeQuery(userIncludeFields),
})
.strict();
Local development commands
See package.json
scripts
for a list of commands.