UNPKG

@mintlify/validation

Version:

Validates mint.json files

95 lines (94 loc) 4.47 kB
import { z } from 'zod'; import { asyncApiSchema } from '../reusable/asyncapi.js'; import { colorSchemaWithOptionalLightAndDark } from '../reusable/color.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 { anchorsSchema, decoratedAnchorsSchema } from './anchors.js'; import { decoratedDropdownsSchema, dropdownsSchema } from './dropdown.js'; import { globalSchema } from './global.js'; import { groupsSchema, decoratedGroupsSchema } from './groups.js'; import { languagesSchema, decoratedLanguagesSchema } from './languages.js'; import { pagesSchema, decoratedPagesSchema } from './pages.js'; import { tabsSchema, decoratedTabsSchema } from './tabs.js'; import { versionsSchema, decoratedVersionsSchema } from './version.js'; export const baseProductSchema = z.object({ product: z.string().nonempty().describe('The name of the product'), name: z.string().optional().describe('Display name for the product'), icon: iconSchema.optional(), color: colorSchemaWithOptionalLightAndDark.optional(), description: z.string().optional().describe('The description of the product'), hidden: hiddenSchema.optional(), }); export const productSchema = z.union([ baseProductSchema.extend({ href: hrefSchema, openapi: openApiSchema.optional(), asyncapi: asyncApiSchema.optional(), global: z.lazy(() => globalSchema).optional(), }), baseProductSchema.extend({ languages: z.lazy(() => languagesSchema), openapi: openApiSchema.optional(), asyncapi: asyncApiSchema.optional(), global: z.lazy(() => globalSchema).optional(), }), baseProductSchema.extend({ versions: z.lazy(() => versionsSchema), openapi: openApiSchema.optional(), asyncapi: asyncApiSchema.optional(), global: z.lazy(() => globalSchema).optional(), }), baseProductSchema.extend({ tabs: z.lazy(() => tabsSchema), openapi: openApiSchema.optional(), asyncapi: asyncApiSchema.optional(), global: z.lazy(() => globalSchema).optional(), }), baseProductSchema.extend({ anchors: z.lazy(() => anchorsSchema), openapi: openApiSchema.optional(), asyncapi: asyncApiSchema.optional(), global: z.lazy(() => globalSchema).optional(), }), baseProductSchema.extend({ dropdowns: z.lazy(() => dropdownsSchema), openapi: openApiSchema.optional(), asyncapi: asyncApiSchema.optional(), global: z.lazy(() => globalSchema).optional(), }), baseProductSchema.extend({ groups: z.lazy(() => groupsSchema), openapi: openApiSchema.optional(), asyncapi: asyncApiSchema.optional(), global: z.lazy(() => globalSchema).optional(), }), baseProductSchema.extend({ pages: z.lazy(() => pagesSchema), openapi: openApiSchema.optional(), asyncapi: asyncApiSchema.optional(), global: z.lazy(() => globalSchema).optional(), }), baseProductSchema.extend({ openapi: openApiSchema.optional(), asyncapi: asyncApiSchema.optional(), global: z.lazy(() => globalSchema).optional(), }), ]); export const decoratedProductSchema = baseProductSchema.and(z.union([ z.object({ href: hrefSchema }), z.lazy(() => z.object({ languages: decoratedLanguagesSchema, global: globalSchema.optional() })), z.lazy(() => z.object({ versions: decoratedVersionsSchema, global: globalSchema.optional() })), z.lazy(() => z.object({ tabs: decoratedTabsSchema, global: globalSchema.optional() })), z.lazy(() => z.object({ anchors: decoratedAnchorsSchema, global: globalSchema.optional() })), z.lazy(() => z.object({ dropdowns: decoratedDropdownsSchema, global: globalSchema.optional() })), z.lazy(() => z.object({ groups: decoratedGroupsSchema, global: globalSchema.optional() })), z.lazy(() => z.object({ pages: decoratedPagesSchema, global: globalSchema.optional() })), ])); export const productsSchema = z.array(productSchema).describe('Organizing by products'); export const decoratedProductsSchema = z .array(decoratedProductSchema) .min(1, 'At least one product must be specified') .describe('Organizing by products'); export const nonRecursiveProductSchema = baseProductSchema.extend({ href: hrefSchema });