Zod PocketBase
Astro PocketBase gives you access to everything from Zod PocketBase
Schemas Helpers
Instead of this:
import {AuthorRecord, ImageRecord, PostRecord} from "src/lib/pocketbase/schemas";
const Post = PostRecord.pick({ content: true, title: true, updated: true }) .extend({ expand: z.object({ author: AuthorRecord.pick({ name: true }) .extend({ expand: z.object({ image: ImageRecord.pick({ alt: true, src: true }), }), }) .transform(({ expand, ...rest }) => ({ ...rest, ...expand })), image: ImageRecord.pick({ alt: true, src: true }), }), }) .transform(({ expand, ...rest }) => ({ ...rest, ...expand }));
Write this:
import { select } from "astro-pocketbase";import {AuthorRecord, ImageRecord, PostRecord} from "src/lib/pocketbase/schemas";
const Post = select(PostRecord, ["content", "title", "updated"], { author: select(AuthorRecord, ["name"], { image: select(ImageRecord, ["alt", "src"]) }), image: select(ImageRecord, ["alt", "src"])});
Fetch Helpers
Instead of this:
import { listOptionsFrom, select } from "astro-pocketbase";import { AuthorRecord, PostRecord } from "src/lib/pocketbase/schemas";
const Post = select(PostRecord, ["content", "title"], { author: select(AuthorRecord, ["name"])});
const options = listOptionsFrom(Post, { sort: "-updated" });
const { items } = await Astro.locals.pocketbase.collection("posts").getList(1, 10, options);const firstPosts = Post.array().parse(items);
Write this:
import { helpersFrom, select } from "astro-pocketbase";import { AuthorRecord, PostRecord } from "src/lib/pocketbase/schemas";
const { getRecords } = helpersFrom({ pocketbase: Astro.locals.pocketbase, cache: "1d" });
const Post = select(PostRecord, ["content", "title"], { author: select(AuthorRecord, ["name"])});
const { items: firstPosts } = getRecords("posts", { perPage: 10, schema: Post, sort: "-updated" });