@mintlify/validation
Version:
Validates mint.json files
52 lines (51 loc) • 2.27 kB
JavaScript
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');