@stackbit/types
Version:
Types for Stackbit config and Content Source Interface
220 lines • 9.46 kB
TypeScript
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