UNPKG

@mintlify/validation

Version:

Validates mint.json files

52 lines (51 loc) 2.27 kB
import { z } from 'zod'; import { asyncApiSchema } from '../reusable/asyncapi.js'; import { hiddenSchema } from '../reusable/hidden.js'; import { hrefSchema } from '../reusable/href.js'; import { iconSchema } from '../reusable/icon.js'; import { openApiSchema } from '../reusable/openapi.js'; import { globalSchema } from './global.js'; import { decoratedGroupsSchema, groupsSchema } from './groups.js'; import { decoratedPagesSchema, pagesSchema } from './pages.js'; export const baseMenuItemSchema = z.object({ item: z.string().nonempty().describe('The name of the menu item'), icon: iconSchema.optional(), description: z.string().optional().describe('The description of the menu item'), hidden: hiddenSchema.optional(), }); export const nonRecursiveMenuItemSchema = baseMenuItemSchema.extend({ href: hrefSchema }); export const menuItemSchema = z.union([ baseMenuItemSchema.extend({ href: hrefSchema, openapi: openApiSchema.optional(), asyncapi: asyncApiSchema.optional(), global: z.lazy(() => globalSchema).optional(), }), baseMenuItemSchema.extend({ groups: z.lazy(() => groupsSchema), openapi: openApiSchema.optional(), asyncapi: asyncApiSchema.optional(), global: z.lazy(() => globalSchema).optional(), }), baseMenuItemSchema.extend({ pages: z.lazy(() => pagesSchema), openapi: openApiSchema.optional(), asyncapi: asyncApiSchema.optional(), global: z.lazy(() => globalSchema).optional(), }), baseMenuItemSchema.extend({ openapi: openApiSchema.optional(), asyncapi: asyncApiSchema.optional(), global: z.lazy(() => globalSchema).optional(), }), ]); export const decoratedMenuItemSchema = baseMenuItemSchema.and(z.union([ z.object({ href: hrefSchema }), z.lazy(() => z.object({ groups: decoratedGroupsSchema, global: globalSchema.optional() })), z.lazy(() => z.object({ pages: decoratedPagesSchema, global: globalSchema.optional() })), ])); export const menuSchema = z.array(menuItemSchema).describe('Organizing by menu'); export const decoratedMenuSchema = z .array(decoratedMenuItemSchema) .min(1, 'At least one menu item must be specified') .describe('Organizing by menu');