Skip to content

Export plugin data getters #32

@olliethedev

Description

@olliethedev

Export plugin data getters for SSG use cases

Problem

Currently, plugin data fetching is tightly coupled to React Query via query-keys.ts. Users building statically generated sites (SSG) need direct data access for:

  • getStaticPaths / generateStaticParams - to enumerate all slugs at build time
  • getStaticProps / page-level data loading - to fetch content without React Query

Proposed Solution

Export simple async data getter functions from each plugin's API export:

// @btst/stack/plugins/blog/api
export async function getAllPosts(db: Database): Promise<Post[]>
export async function getPostBySlug(db: Database, slug: string): Promise<Post | null>
export async function getAllTags(db: Database): Promise<Tag[]>

// @btst/stack/plugins/cms/api  
export async function getAllPages(db: Database): Promise<Page[]>
export async function getPageBySlug(db: Database, slug: string): Promise<Page | null>

Example Usage

// app/blog/[slug]/page.tsx (Next.js App Router)
import { getAllPosts, getPostBySlug } from "@btst/stack/plugins/blog/api";
import { db } from "@/lib/db";

export async function generateStaticParams() {
  const posts = await getAllPosts(db);
  return posts.map((post) => ({ slug: post.slug }));
}

export default async function PostPage({ params }: { params: { slug: string } }) {
  const post = await getPostBySlug(db, params.slug);
  // ...
}

Plugins to Update

  • blog - posts, tags
  • cms - pages
  • ai-chat - conversations (if applicable)
  • form-builder - forms, submissions

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions