import { z } from 'zod';
export * from './types.js';
const collectionSeoSchema = z
    .object({
    sitemapPriority: z.number().min(0).max(1).optional(),
    sitemapChangeFreq: z
        .enum(['always', 'hourly', 'daily', 'weekly', 'monthly', 'yearly', 'never'])
        .optional(),
    excludeFromSitemap: z.boolean().optional(),
    archivePath: z.string().optional(),
})
    .optional();
const collectionSchema = z
    .object({
    slug: z.string(),
    labels: z.object({ singular: z.string(), plural: z.string() }),
    urlPrefix: z.string().optional(),
    type: z.enum(['page', 'post']).optional(),
    seo: collectionSeoSchema,
    fields: z.record(z.any()),
    access: z.any().optional(),
    hooks: z.any().optional(),
    timestamps: z.boolean().optional(),
    softDelete: z.boolean().optional(),
    versions: z.union([z.boolean(), z.object({ maxPerDoc: z.number().optional() })]).optional(),
    defaultSort: z.string().optional(),
    admin: z
        .object({
        useAsTitle: z.string().optional(),
        defaultColumns: z.array(z.string()).optional(),
        group: z.string().optional(),
        hidden: z.boolean().optional(),
        description: z.string().optional(),
        preview: z.any().optional(),
        icon: z.string().optional(),
    })
        .optional(),
})
    .passthrough();
const secretSchema = z.string().min(32, 'CMS secret must be at least 32 characters').optional();
const layoutRegionSchema = z.object({
    collection: z.string(),
    label: z.string().optional(),
});
const layoutSchema = z
    .object({
    regions: z.record(layoutRegionSchema),
    defaults: z.record(z.string()).optional(),
    inherit: z.boolean().optional(),
})
    .optional();
const configSchema = z.object({
    secret: secretSchema,
    platform: z.object({
        database: z.any(),
        storage: z.any(),
        cache: z.any().optional(),
        email: z.any().optional(),
        scheduler: z.any().optional(),
        rateLimit: z.any().optional(),
    }),
    auth: z.object({
        providers: z.array(z.object({
            id: z.string(),
            type: z.enum(['google', 'github', 'microsoft', 'oidc', 'saml']),
            clientId: z.string(),
            clientSecret: z.string(),
            tenantId: z.string().optional(),
            issuer: z.string().optional(),
        })),
        credentials: z
            .object({
            enabled: z.boolean(),
            requireEmailVerification: z.boolean().optional(),
            passwordPolicy: z.any().optional(),
        })
            .optional(),
        autoProvision: z.boolean().optional(),
        sessionMaxAge: z.number().optional(),
        mfa: z.object({ totp: z.boolean().optional() }).optional(),
    }),
    plugins: z.array(z.any()).optional(),
    collections: z.record(collectionSchema),
    globals: z.record(z.any()).optional(),
    layout: layoutSchema,
    i18n: z.any().optional(),
    admin: z
        .object({
        path: z.string().startsWith('/').optional(),
        branding: z.any().optional(),
        ipAllowlist: z.array(z.string()).optional(),
    })
        .optional(),
});
/** Define and validate an Actuate CMS configuration. */
export function defineConfig(config) {
    configSchema.parse(config);
    return config;
}
//# sourceMappingURL=index.js.map