Check out the official documentation.
groqd
is a schema-unaware, runtime-safe query builder for GROQ. The goal of groqd
is to give you (most of) the flexibility of GROQ, with the runtime/type safety of Zod and TypeScript.
groqd
works by accepting a series of GROQ operations, and generating a query to be used by GROQ and a Zod schema to be used for parsing the associated GROQ response.
An illustrative example:
import { q } from "groqd";
// Get all of the Pokemon types, and the Pokemon associated to each type.
const { query, schema } = q("*")
.filter("_type == 'poketype'")
.grab({
name: q.string(),
pokemons: q("*")
.filter("_type == 'pokemon' && references(^._id)")
.grab({ name: q.string() }),
});
// Use the schema and the query as you see fit, for example:
const response = schema.parse(await sanityClient.fetch(query));
// At this point, response has a type of:
// { name: string, pokemons: { name: string }[] }[]
// 👆👆
Support
Have a question about Groqd? Submit an issue in this repository using the "Question" template.
Notice something inaccurate or confusing? Feel free to open an issue or make a pull request to help improve the documentation for everyone!
The source for our docs site lives in this repo in the docs
folder.
Contributing
Please see our contributing guide.
Maintenance Status
Active: Formidable is actively working on this project, and we expect to continue for work for the foreseeable future. Bug reports, feature requests and pull requests are welcome.