UNPKG

sanity

Version:

Sanity is a real-time content infrastructure with a scalable, hosted backend featuring a Graph Oriented Query Language (GROQ), asset pipelines and fast edge caches

46 lines (38 loc) 1.35 kB
import {type Schema, type SchemaType} from '@sanity/types' import {isBuilder} from './resolve' import {type Template} from './types' import {validateTemplates} from './validate' function maybeSerialize(template: Template) { return isBuilder(template) ? template.serialize() : template } function isNonNullable<T>(t: T): t is NonNullable<T> { return !!t } /** @internal */ export function prepareTemplates(schema: Schema, initialValueTemplates: Template[]): Template[] { const serialized = initialValueTemplates.map(maybeSerialize) return validateTemplates(schema, serialized) } /** @internal */ export function defaultTemplateForType(schemaType: SchemaType): Template { return { id: schemaType.name, schemaType: schemaType.name, title: schemaType.title || schemaType.name, icon: schemaType.icon, value: schemaType.initialValue || {_type: schemaType.name}, } } /** @internal */ export function defaultTemplatesForSchema(schema: Schema): Template[] { const schemaTypes = schema .getTypeNames() .filter((typeName) => !/^sanity\./.test(typeName)) .map((typeName) => schema.get(typeName)) .filter(isNonNullable) .filter((schemaType) => schemaType.type?.name === 'document') return prepareTemplates( schema, schemaTypes.map((schemaType) => defaultTemplateForType(schemaType)), ) }