UNPKG

astro-sveltia-cms

Version:

Add Sveltia CMS admin dashboard and a custom OAuth backend to your Astro project

54 lines (46 loc) 1.47 kB
import type { AstroIntegration } from "astro"; export interface SveltiaCMSOptions { adminRoute?: string; oauthDisabled?: boolean; oauthLoginRoute?: string; oauthCallbackRoute?: string; } const defaultOptions: SveltiaCMSOptions = { adminRoute: "/admin", oauthDisabled: false, oauthLoginRoute: "/oauth", oauthCallbackRoute: "/oauth/callback", }; export default function sveltiaCMS(options: SveltiaCMSOptions): AstroIntegration { const { adminRoute, oauthDisabled, oauthLoginRoute, oauthCallbackRoute } = { ...defaultOptions, ...options }; if (!adminRoute?.startsWith("/") || !oauthLoginRoute?.startsWith("/") || !oauthCallbackRoute?.startsWith("/")) { throw new Error('`adminRoute`, `oauthLoginRoute` and `oauthCallbackRoute` options must start with "/"'); } return { name: "astro-sveltia-cms", hooks: { "astro:config:setup": async ({ injectRoute }) => { // mount SveltiaCMS admin dashboard injectRoute({ pattern: adminRoute, entrypoint: "astro-sveltia-cms/src/admin.astro", prerender: false, }); if (!oauthDisabled) { // OAuth backend - sign in route injectRoute({ pattern: oauthLoginRoute, entrypoint: "astro-sveltia-cms/src/oauth/index.ts", prerender: false, }); // OAuth backend - callback route injectRoute({ pattern: oauthCallbackRoute, entrypoint: "astro-sveltia-cms/src/oauth/callback.ts", prerender: false, }); } }, }, }; }