@mintlify/validation
Version:
Validates mint.json files
61 lines (60 loc) • 2.19 kB
JavaScript
import { codeBlockModes } from '@mintlify/models';
import { z } from 'zod';
export const nameSchema = z.string().trim().nonempty();
export const logoSchema = z.union([
z.string().min(3, 'Must be a path to your logo file including the file extension'),
z.object({
light: z.string(),
dark: z.string(),
href: z.string().optional(),
}),
]);
export const modeToggleSchema = z.object({
default: z.enum(['light', 'dark']).optional(),
isHidden: z.boolean().optional(),
});
export const eyebrowSchema = z.object({
display: z.enum(['section', 'breadcrumbs']).optional(),
});
export const isWhiteLabeledSchema = z.boolean();
export const metadataSchema = z.record(z.string(), z.string().nonempty());
export const codeBlockSchema = z.object({
mode: z.enum(codeBlockModes).optional(),
});
export const feedbackSchema = z.object({
thumbsRating: z.boolean().optional(),
suggestEdit: z.boolean().optional(),
raiseIssue: z.boolean().optional(),
});
export const searchSchema = z.object({
prompt: z.string().optional(),
location: z.enum(['side', 'top']).optional(),
});
const redirectSchema = z.object({
source: z.string(),
destination: z.string(),
permanent: z.boolean().optional(),
});
export const redirectsSchema = z.array(redirectSchema).refine((value) => {
const keys = value.map((obj) => obj.source);
return new Set(keys).size === keys.length;
}, 'Sources in the array must be unique');
export const ctaButtonSchema = z
.union([
z
.object({
type: z.literal('link').optional(),
name: z.string(),
url: z.string().nonempty(),
style: z.enum(['pill', 'roundedRectangle']).optional(),
arrow: z.boolean().optional(),
})
.strict(),
z
.object({
type: z.literal('github'),
url: z.string().url('Must be a valid URL').describe('A link to your GitHub repository'),
})
.strict(),
])
.describe('An object containing the configuration for a Call-to-Action button. The object can have { "type": "link" } (the default) if you define a url and a name. For links to your GitHub repo, use { "type": "github" }');