UNPKG

studiocms

Version:

Astro Native CMS for AstroDB. Built from the ground up by the Astro community.

365 lines (364 loc) 11.6 kB
import { Effect } from "../effect.js"; import { flatMapProcessedConfig, injectExtraRoutes, injectMiddleware, mapRouteGroups, processedConfig, StudioCMSRouteConfig } from "./utils.js"; export * from "./types.js"; export * from "./utils.js"; const resolvePath = (path) => `studiocms/frontend/${path}`; const setupRoutes = [ // Frontend setup pages { pattern: "/", entrypoint: resolvePath("setup-pages/index.astro") }, { pattern: "/start", entrypoint: resolvePath("setup-pages/1-start.astro") }, { pattern: "/start/1", entrypoint: resolvePath("setup-pages/1-start.astro") }, { pattern: "/start/2", entrypoint: resolvePath("setup-pages/2-next.astro") }, { pattern: "/done", entrypoint: resolvePath("setup-pages/3-done.astro") }, // Backend setup API routes { pattern: "/studiocms_api/dashboard/step-1", entrypoint: resolvePath("setup-pages/studiocms_api/dashboard/step-1.ts") }, { pattern: "/studiocms_api/dashboard/step-2", entrypoint: resolvePath("setup-pages/studiocms_api/dashboard/step-2.ts") } ]; const noDbSetupRoutes = [ // SDK API routes { pattern: "/studiocms_api/sdk/list-pages", entrypoint: resolvePath("pages/studiocms_api/sdk/list-pages.ts") }, { pattern: "/studiocms_api/sdk/update-latest-version-cache", entrypoint: resolvePath("pages/studiocms_api/sdk/update-latest-version-cache.ts") }, { pattern: "/studiocms_api/sdk/fallback-list-pages.json", entrypoint: resolvePath("pages/studiocms_api/sdk/fallback-list-pages.json.ts") }, { pattern: "/studiocms_api/sdk/full-changelog.json", entrypoint: resolvePath("pages/studiocms_api/sdk/full-changelog.json.ts") }, // Renderer service route { pattern: "/studiocms_api/renderer/render", entrypoint: resolvePath("pages/studiocms_api/renderer/render.astro") } ]; const restRoutes = [ { pattern: "/studiocms_api/rest/v1/folders", entrypoint: resolvePath("pages/studiocms_api/rest/v1/folders/index.ts") }, { pattern: "/studiocms_api/rest/v1/folders/[id]", entrypoint: resolvePath("pages/studiocms_api/rest/v1/folders/[id].ts") }, { pattern: "/studiocms_api/rest/v1/pages", entrypoint: resolvePath("pages/studiocms_api/rest/v1/pages/index.ts") }, { pattern: "/studiocms_api/rest/v1/pages/[id]", entrypoint: resolvePath("pages/studiocms_api/rest/v1/pages/[id]/index.ts") }, { pattern: "/studiocms_api/rest/v1/pages/[id]/history", entrypoint: resolvePath("pages/studiocms_api/rest/v1/pages/[id]/history/index.ts") }, { pattern: "/studiocms_api/rest/v1/pages/[id]/history/[diffid]", entrypoint: resolvePath("pages/studiocms_api/rest/v1/pages/[id]/history/[diffid].ts") }, { pattern: "/studiocms_api/rest/v1/settings", entrypoint: resolvePath("pages/studiocms_api/rest/v1/settings/index.ts") }, { pattern: "/studiocms_api/rest/v1/users", entrypoint: resolvePath("pages/studiocms_api/rest/v1/users/index.ts") }, { pattern: "/studiocms_api/rest/v1/users/[id]", entrypoint: resolvePath("pages/studiocms_api/rest/v1/users/[id].ts") }, { pattern: "/studiocms_api/rest/v1/public/pages", entrypoint: resolvePath("pages/studiocms_api/rest/v1/public/pages/index.ts") }, { pattern: "/studiocms_api/rest/v1/public/pages/[id]", entrypoint: resolvePath("pages/studiocms_api/rest/v1/public/pages/[id].ts") }, { pattern: "/studiocms_api/rest/v1/public/folders", entrypoint: resolvePath("pages/studiocms_api/rest/v1/public/folders/index.ts") } ]; const oAuthEnabledRoutes = [ { pattern: "/studiocms_api/auth/[provider]", entrypoint: resolvePath("pages/studiocms_api/auth/[provider]/index.ts") }, { pattern: "/studiocms_api/auth/[provider]/callback", entrypoint: resolvePath("pages/studiocms_api/auth/[provider]/callback.ts") } ]; const usernameAndPasswordAPIRoutes = [ { pattern: "/studiocms_api/auth/login", entrypoint: resolvePath("pages/studiocms_api/auth/login.ts") }, { pattern: "/studiocms_api/auth/forgot-password", entrypoint: resolvePath("pages/studiocms_api/auth/forgot-password.ts") } ]; const userRegistrationEnabledRoutes = (dashboardRoute) => [ { pattern: "/studiocms_api/auth/register", entrypoint: resolvePath("pages/studiocms_api/auth/register.ts") }, { pattern: dashboardRoute("signup/"), entrypoint: resolvePath("pages/[dashboard]/signup.astro") } ]; const dashboardEnabledRoutes = (dashboardRoute) => [ // Dashboard API Routes { pattern: "/studiocms_api/dashboard/templates", entrypoint: resolvePath("pages/studiocms_api/dashboard/templates.ts") }, { pattern: "/studiocms_api/dashboard/live-render", entrypoint: resolvePath("pages/studiocms_api/dashboard/partials/LiveRender.astro") }, { pattern: "/studiocms_api/dashboard/editor", entrypoint: resolvePath("pages/studiocms_api/dashboard/partials/Editor.astro") }, { pattern: "/studiocms_api/dashboard/search-list", entrypoint: resolvePath("pages/studiocms_api/dashboard/search-list.ts") }, { pattern: "/studiocms_api/dashboard/user-list-items", entrypoint: resolvePath("pages/studiocms_api/dashboard/partials/UserListItems.astro") }, { pattern: "/studiocms_api/auth/logout", entrypoint: resolvePath("pages/studiocms_api/auth/logout.ts") }, // Dashboard Frontend Route { pattern: dashboardRoute("/"), entrypoint: resolvePath("pages/[dashboard]/index.astro") }, { pattern: dashboardRoute("content-management"), entrypoint: resolvePath("pages/[dashboard]/content-management/index.astro") }, { pattern: dashboardRoute("content-management/create"), entrypoint: resolvePath("pages/[dashboard]/content-management/createpage.astro") }, { pattern: dashboardRoute("content-management/create-folder"), entrypoint: resolvePath("pages/[dashboard]/content-management/createfolder.astro") }, { pattern: dashboardRoute("content-management/edit"), entrypoint: resolvePath("pages/[dashboard]/content-management/editpage.astro") }, { pattern: dashboardRoute("content-management/edit-folder"), entrypoint: resolvePath("pages/[dashboard]/content-management/editfolder.astro") }, { pattern: dashboardRoute("content-management/diff"), entrypoint: resolvePath("pages/[dashboard]/content-management/diff.astro") }, { pattern: dashboardRoute("profile"), entrypoint: resolvePath("pages/[dashboard]/profile.astro") }, { pattern: dashboardRoute("configuration"), entrypoint: resolvePath("pages/[dashboard]/configuration.astro") }, { pattern: dashboardRoute("user-management"), entrypoint: resolvePath("pages/[dashboard]/user-management/index.astro") }, { pattern: dashboardRoute("user-management/edit"), entrypoint: resolvePath("pages/[dashboard]/user-management/edit.astro") }, { pattern: dashboardRoute("plugins/[plugin]"), entrypoint: resolvePath("pages/[dashboard]/plugins/[plugin].astro") }, { pattern: dashboardRoute("smtp-configuration"), entrypoint: resolvePath("pages/[dashboard]/smtp-configuration.astro") }, { pattern: dashboardRoute("unverified-email"), entrypoint: resolvePath("pages/[dashboard]/unverified-email.astro") }, { pattern: dashboardRoute("login/"), entrypoint: resolvePath("pages/[dashboard]/login.astro") }, { pattern: dashboardRoute("logout/"), entrypoint: resolvePath("pages/[dashboard]/logout.astro") } ]; const dashboardAPIEnabledRoutes = (dashboardRoute) => [ // Dashboard page routes { pattern: dashboardRoute("password-reset"), entrypoint: resolvePath("pages/[dashboard]/password-reset.astro") }, // API Routes { pattern: "/studiocms_api/dashboard/config", entrypoint: resolvePath("pages/studiocms_api/dashboard/config.ts") }, { pattern: "/studiocms_api/dashboard/profile", entrypoint: resolvePath("pages/studiocms_api/dashboard/profile.ts") }, { pattern: "/studiocms_api/dashboard/users", entrypoint: resolvePath("pages/studiocms_api/dashboard/users.ts") }, { pattern: "/studiocms_api/dashboard/content/page", entrypoint: resolvePath("pages/studiocms_api/dashboard/content/page.ts") }, { pattern: "/studiocms_api/dashboard/content/folder", entrypoint: resolvePath("pages/studiocms_api/dashboard/content/folder.ts") }, { pattern: "/studiocms_api/dashboard/content/diff", entrypoint: resolvePath("pages/studiocms_api/dashboard/content/diff.ts") }, { pattern: "/studiocms_api/dashboard/create-reset-link", entrypoint: resolvePath("pages/studiocms_api/dashboard/create-reset-link.ts") }, { pattern: "/studiocms_api/dashboard/reset-password", entrypoint: resolvePath("pages/studiocms_api/dashboard/reset-password.ts") }, { pattern: "/studiocms_api/dashboard/plugins/[plugin]", entrypoint: resolvePath("pages/studiocms_api/dashboard/plugins/[plugin].ts") }, { pattern: "/studiocms_api/dashboard/create-user", entrypoint: resolvePath("pages/studiocms_api/dashboard/create-user.ts") }, { pattern: "/studiocms_api/dashboard/create-user-invite", entrypoint: resolvePath("pages/studiocms_api/dashboard/create-user-invite.ts") }, { pattern: "/studiocms_api/dashboard/api-tokens", entrypoint: resolvePath("pages/studiocms_api/dashboard/api-tokens.ts") }, { pattern: "/studiocms_api/dashboard/verify-session", entrypoint: resolvePath("pages/studiocms_api/dashboard/verify-session.ts") }, { pattern: "/studiocms_api/dashboard/mailer/config", entrypoint: resolvePath("pages/studiocms_api/dashboard/mailer/config.ts") }, { pattern: "/studiocms_api/dashboard/mailer/test-email", entrypoint: resolvePath("pages/studiocms_api/dashboard/mailer/check-email.ts") }, { pattern: "/studiocms_api/dashboard/verify-email", entrypoint: resolvePath("pages/studiocms_api/dashboard/verify-email.ts") }, { pattern: "/studiocms_api/dashboard/email-notification-settings-site", entrypoint: resolvePath("pages/studiocms_api/dashboard/email-notification-settings-site.ts") }, { pattern: "/studiocms_api/dashboard/resend-verify-email", entrypoint: resolvePath("pages/studiocms_api/dashboard/resend-verify-email.ts") }, { pattern: "/studiocms_api/dashboard/update-user-notifications", entrypoint: resolvePath("pages/studiocms_api/dashboard/update-user-notifications.ts") } ]; const error404Route = { pattern: "/404", entrypoint: resolvePath("pages/404.astro") }; const middleware = (dbStartPage) => { const middlewares = []; if (!dbStartPage) { middlewares.push({ order: "pre", entrypoint: resolvePath("middleware/index.ts") }); } return middlewares; }; const getAstroProject = Effect.gen(function* () { const config = yield* StudioCMSRouteConfig; return yield* processedConfig(config).pipe( // Map processed config to route groups Effect.flatMap(flatMapProcessedConfig(config)), // Map route groups to final routes Effect.flatMap(mapRouteGroups), // Inject extra routes from config Effect.flatMap(injectExtraRoutes(config)), // Inject middleware based on config Effect.flatMap(injectMiddleware(config)) ); }); export { dashboardAPIEnabledRoutes, dashboardEnabledRoutes, error404Route, getAstroProject, middleware, noDbSetupRoutes, oAuthEnabledRoutes, restRoutes, setupRoutes, userRegistrationEnabledRoutes, usernameAndPasswordAPIRoutes };