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
text/typescript
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,
});
}
},
},
};
}