npm.io
0.3.0 • Published yesterday

@nexus-cms/nextjs

Licence
SEE LICENSE IN LICENSE
Version
0.3.0
Deps
4
Size
48 kB
Vulns
0
Weekly
0

@nexus-cms/nextjs

Next.js (App Router) adapter for Nexus CMS.

1. Enable the compiler

// next.config.mjs
import { withNexus } from "@nexus-cms/nextjs/config";
export default withNexus({ reactStrictMode: true });

Import withNexus from @nexus-cms/nextjs/config (not the package root) so loading your config never pulls server-only modules.

2. Fetch content + render the provider

// app/layout.tsx (or per-page)
import { fetchPageContent, getEditSession, buildMetadata } from "@nexus-cms/nextjs";
import { NexusProvider } from "@nexus-cms/nextjs/client";
import schema from "../.nexus/cms-schema.json";

const BACKEND = process.env.NEXT_PUBLIC_NEXUS_API_URL!;

export async function generateMetadata() {
  const content = await fetchPageContent("/", { baseUrl: BACKEND });
  return buildMetadata(schema, "/", content);
}

export default async function Layout({ children }) {
  const { editMode, token } = await getEditSession();
  const content = await fetchPageContent("/", { baseUrl: BACKEND, token, draft: editMode });
  return (
    <html><body>
      <NexusProvider schema={schema} page="/" baseUrl={BACKEND} token={token}
        editMode={editMode} initialContent={content}>
        {children}
      </NexusProvider>
    </body></html>
  );
}

3. Wire the handshake + force-update routes

// app/api/nexus/edit/route.ts
export { createEnterEditRoute as GET } from "@nexus-cms/nextjs";
// app/api/nexus/revalidate/route.ts
import { createRevalidateRoute } from "@nexus-cms/nextjs";
export const POST = createRevalidateRoute({ secret: process.env.NEXUS_WEBHOOK_SECRET });

Content is fetched with a cache tag per page and a ~10 minute revalidate window; Filament's "force update" POSTs to /api/nexus/revalidate to invalidate instantly.

Keywords