UNPKG

@stackbit/types

Version:

Types for Stackbit config and Content Source Interface

220 lines 9.46 kB
import { FieldType, StyleProps } from './model-fields'; export type DocumentField = DocumentStringLikeField | DocumentNumberField | DocumentBooleanField | DocumentJsonField | DocumentStyleField | DocumentRichTextField | DocumentImageField | DocumentObjectField | DocumentModelField | DocumentReferenceField | DocumentCrossReferenceField | DocumentListField; export type DocumentFieldNonLocalized = DocumentStringLikeFieldNonLocalized | DocumentNumberFieldNonLocalized | DocumentBooleanFieldNonLocalized | DocumentJsonFieldNonLocalized | DocumentStyleFieldNonLocalized | DocumentRichTextFieldNonLocalized | DocumentImageFieldNonLocalized | DocumentObjectFieldNonLocalized | DocumentModelFieldNonLocalized | DocumentReferenceFieldNonLocalized | DocumentCrossReferenceFieldNonLocalized | DocumentListFieldNonLocalized; export type DocumentFieldLocalized = DocumentStringLikeFieldLocalized | DocumentNumberFieldLocalized | DocumentBooleanFieldLocalized | DocumentJsonFieldLocalized | DocumentStyleFieldLocalized | DocumentRichTextFieldLocalized | DocumentImageFieldLocalized | DocumentObjectFieldLocalized | DocumentModelFieldLocalized | DocumentReferenceFieldLocalized | DocumentCrossReferenceFieldLocalized | DocumentListFieldLocalized; export type DocumentFieldBaseProps = DocumentFieldBasePropsForDocumentField<DocumentField>; export type DocumentFieldSpecificProps = DocumentFieldSpecificPropsForDocumentField<DocumentFieldLocalized>; export type ExtractByType<Union extends { type: FieldType; }, Type extends FieldType> = Union extends { type: Type; } ? Union : never; export type DocumentFieldForType<Type extends FieldType> = ExtractByType<DocumentField, Type>; export type DocumentFieldNonLocalizedForType<Type extends FieldType> = ExtractByType<DocumentFieldNonLocalized, Type>; export type DocumentFieldLocalizedForType<Type extends FieldType> = ExtractByType<DocumentFieldLocalized, Type>; export type DocumentFieldBasePropsForType<Type extends FieldType> = ExtractByType<DocumentFieldBaseProps, Type>; export type DocumentFieldSpecificPropsForType<Type extends FieldType> = DocumentFieldSpecificPropsForDocumentField<DocumentFieldLocalizedForType<Type>>; export type DocumentFieldBasePropsForDocumentField<DocField extends DocumentField> = DocField extends { localized?: false; } ? Omit<DocField, keyof DocumentFieldSpecificPropsForDocumentField<DocumentFieldLocalizedForType<DocField['type']>> | 'localized'> : never; export type DocumentFieldSpecificPropsForDocumentField<DocField extends DocumentFieldLocalized> = DocField extends { locales: Record<string, infer Props>; } ? Omit<Props, 'locale'> : never; export type DocumentStringLikeFieldTypes = 'string' | 'url' | 'slug' | 'text' | 'markdown' | 'html' | 'enum' | 'date' | 'datetime' | 'color' | 'file'; export type DocumentStringLikeField = DocumentStringLikeFieldForType<DocumentStringLikeFieldTypes>; export type DocumentStringLikeFieldNonLocalized = DistributeDocumentStringLikeFieldNonLocalized<DocumentStringLikeFieldTypes>; export type DocumentStringLikeFieldLocalized = DistributeDocumentStringFieldLocalized<DocumentStringLikeFieldTypes>; export type DocumentStringLikeFieldForType<Type> = Type extends DocumentStringLikeFieldTypes ? DocumentStringLikeFieldNonLocalizedForType<Type> | DocumentStringLikeFieldLocalizedForType<Type> : never; export type DistributeDocumentStringLikeFieldNonLocalized<Type> = Type extends DocumentStringLikeFieldTypes ? DocumentStringLikeFieldNonLocalizedForType<Type> : never; export type DistributeDocumentStringFieldLocalized<Type> = Type extends DocumentStringLikeFieldTypes ? DocumentStringLikeFieldLocalizedForType<Type> : never; export interface DocumentStringLikeFieldNonLocalizedForType<Type extends DocumentStringLikeFieldTypes> { type: Type; localized?: false; value: string; } export interface DocumentStringLikeFieldLocalizedForType<Type extends DocumentStringLikeFieldTypes> { type: Type; localized: true; locales: Record<string, { locale: string; value: string; }>; } export type DocumentNumberField = DocumentNumberFieldNonLocalized | DocumentNumberFieldLocalized; export interface DocumentNumberFieldNonLocalized { type: 'number'; localized?: false; value: number; } export interface DocumentNumberFieldLocalized { type: 'number'; localized: true; locales: Record<string, { locale: string; value: number; }>; } export type DocumentBooleanField = DocumentBooleanFieldNonLocalized | DocumentBooleanFieldLocalized; export interface DocumentBooleanFieldNonLocalized { type: 'boolean'; localized?: false; value: boolean; } export interface DocumentBooleanFieldLocalized { type: 'boolean'; localized: true; locales: Record<string, { locale: string; value: boolean; }>; } export type DocumentStyleField = DocumentStyleFieldNonLocalized | DocumentStyleFieldLocalized; export type DocumentStyleFieldValue = Record<string, Partial<Record<StyleProps, any>>>; export interface DocumentStyleFieldNonLocalized { type: 'style'; localized?: false; value: DocumentStyleFieldValue; } export interface DocumentStyleFieldLocalized { type: 'style'; localized: true; locales: Record<string, { locale: string; value: DocumentStyleFieldValue; }>; } export type DocumentJsonField = DocumentJsonFieldNonLocalized | DocumentJsonFieldLocalized; export interface DocumentJsonFieldNonLocalized { type: 'json'; localized?: false; value: any; } export interface DocumentJsonFieldLocalized { type: 'json'; localized: true; locales: Record<string, { locale: string; value: any; }>; } export type DocumentRichTextField = DocumentRichTextFieldNonLocalized | DocumentRichTextFieldLocalized; export type DocumentRichTextFieldValue = any; export interface DocumentRichTextFieldNonLocalized { type: 'richText'; localized?: false; value: DocumentRichTextFieldValue; hint?: string; } export interface DocumentRichTextFieldLocalized { type: 'richText'; localized: true; locales: Record<string, { locale: string; value: DocumentRichTextFieldValue; hint?: string; }>; } export type DocumentImageField = DocumentImageFieldNonLocalized | DocumentImageFieldLocalized; export interface DocumentImageFieldNonLocalized { type: 'image'; localized?: false; source?: string; sourceData?: any; fields?: ImageFields; } export interface DocumentImageFieldLocalized { type: 'image'; localized: true; source?: string; locales: Record<string, { locale: string; sourceData?: any; fields?: ImageFields; }>; } export type ImageFields = { title: DocumentStringLikeFieldForType<'string'>; url: DocumentStringLikeFieldForType<'string'>; }; export type DocumentObjectField = DocumentObjectFieldNonLocalized | DocumentObjectFieldLocalized; export interface DocumentObjectFieldNonLocalized { type: 'object'; localized?: false; fields: Record<string, DocumentField>; } export interface DocumentObjectFieldLocalized { type: 'object'; localized: true; locales: Record<string, { locale: string; fields: Record<string, DocumentField>; }>; } export type DocumentModelField = DocumentModelFieldNonLocalized | DocumentModelFieldLocalized; export interface DocumentModelFieldNonLocalized { type: 'model'; localized?: false; modelName: string; fields: Record<string, DocumentField>; } export interface DocumentModelFieldLocalized { type: 'model'; localized: true; locales: Record<string, { locale: string; modelName: string; fields: Record<string, DocumentField>; }>; } export type DocumentReferenceField = DocumentReferenceFieldNonLocalized | DocumentReferenceFieldLocalized; export interface DocumentReferenceFieldNonLocalized { type: 'reference'; refType: 'document' | 'asset'; localized?: false; refId: string; } export interface DocumentReferenceFieldLocalized { type: 'reference'; refType: 'document' | 'asset'; localized: true; locales: Record<string, { locale: string; refId: string; }>; } export type DocumentCrossReferenceField = DocumentCrossReferenceFieldNonLocalized | DocumentCrossReferenceFieldLocalized; export interface DocumentCrossReferenceFieldNonLocalized { type: 'cross-reference'; refType: 'document' | 'asset'; localized?: false; refId: string; refSrcType: string; refProjectId: string; } export interface DocumentCrossReferenceFieldLocalized { type: 'cross-reference'; refType: 'document' | 'asset'; localized: true; locales: Record<string, { locale: string; refId: string; refSrcType: string; refProjectId: string; }>; } export type DocumentListField = DocumentListFieldNonLocalized | DocumentListFieldLocalized; export type DocumentListFieldItems = Exclude<DocumentFieldNonLocalized, DocumentListFieldNonLocalized>; export interface DocumentListFieldNonLocalized { type: 'list'; localized?: false; items: DocumentListFieldItems[]; } export interface DocumentListFieldLocalized { type: 'list'; localized: true; locales: Record<string, { locale: string; items: DocumentListFieldItems[]; }>; } //# sourceMappingURL=content-source-document-fields.d.ts.map