studiocms
Version:
Astro Native CMS for AstroDB. Built from the ground up by the Astro community.
138 lines (121 loc) • 3.63 kB
text/typescript
import { z } from 'astro/zod';
import { RobotsTXTConfigSchema } from '../../integrations/robots/schema.js';
import type { StudioCMSPlugin } from '../plugins/index.js';
import { authConfigSchema } from './auth.js';
import { dashboardConfigSchema } from './dashboard.js';
import { developerConfigSchema } from './developer.js';
import { SDKSchema } from './sdk.js';
//
// Exported Schemas for use in other internal packages
//
export { dashboardConfigSchema };
export const StudioCMSOptionsSchema = z
.object({
/**
* Project Initialization Page - Used during First Time Setup to initialize the database
*
* @default true
*/
dbStartPage: z.boolean().optional().default(true),
/**
* Whether to show verbose output
* @default false
*/
verbose: z.boolean().optional().default(false),
/**
* Set the LogLevel for Effect based code
*/
logLevel: z
.union([
z.literal('All'),
z.literal('Fatal'),
z.literal('Error'),
z.literal('Warning'),
z.literal('Info'),
z.literal('Debug'),
z.literal('Trace'),
z.literal('None'),
])
.optional()
.default('Info'),
/**
* Add Plugins to the StudioCMS
*/
plugins: z.custom<StudioCMSPlugin[]>().optional(),
/**
* Component Registry
*/
componentRegistry: z.record(z.string()).optional(),
/**
* Locale specific settings
*/
locale: z
.object({
/**
* Date Locale used for formatting dates
*/
dateLocale: z.string().optional().default('en-us'),
/**
* DateTime Format Options
*/
dateTimeFormat: z.custom<Intl.DateTimeFormatOptions>().optional().default({
year: 'numeric',
month: 'short',
day: 'numeric',
}),
})
.optional()
.default({}),
/**
* Allows adjusting the StudioCMS Dashboard features
*/
features: z
.object({
/**
* Allows the user to enable/disable the use of the StudioCMS Custom `astro-robots-txt` Integration
*
* @default robotsTXT: { policy: [ { userAgent: ['*'], allow: ['/'], disallow: ['/dashboard/'] } ] }
*/
robotsTXT: z.union([RobotsTXTConfigSchema, z.boolean()]).optional().default(true),
/**
* Enable Quick Actions Menu - Whether to enable the quick actions menu which allows easy access to your dashboard while logged in on non-dashboard pages.
* @default true
*/
injectQuickActionsMenu: z.boolean().optional().default(true),
/**
* SDKSchema is a Zod schema that validates the SDK configuration.
* It can either be a boolean or an object containing cache configuration.
*
* If it is a boolean, it defaults to `true` and transforms into an object
* with default cache configuration.
*
* If it is an object, it must contain the `cacheConfig` property which is
* validated by the `SDKCacheSchema`.
*/
sdk: SDKSchema,
/**
* Allows customization of the Dashboard Configuration
*/
dashboardConfig: dashboardConfigSchema,
/**
* Auth Configuration - Allows customization of the Authentication Configuration
*/
authConfig: authConfigSchema,
/**
* Developer Options/Configuration
*/
developerConfig: developerConfigSchema,
/**
* Set the identifier of the Preferred Image Service
*
* Requires an Image Service to be installed such as 'cloudinary-js'
*/
preferredImageService: z.string().optional(),
})
.optional()
.default({}),
})
.optional()
.default({});
export type StudioCMSOptions = typeof StudioCMSOptionsSchema._input;
export type StudioCMSConfig = typeof StudioCMSOptionsSchema._output;