@stackbit/types
Version:
Types for Stackbit config and Content Source Interface
94 lines (81 loc) • 2.44 kB
text/typescript
import { DocumentField, DocumentStringLikeFieldForType } from './content-source-document-fields';
import { DocumentPermissions } from './content-permissions';
export type TypeDocument = 'document';
export type DocumentStatus = 'added' | 'modified' | 'published' | 'deleted' | 'archived';
export interface Document<DocumentContext = unknown> {
type: TypeDocument;
id: string;
manageUrl: string;
modelName: string;
status: DocumentStatus;
createdAt: string;
createdBy?: string;
updatedAt: string;
updatedBy?: string[];
locale?: string;
fields: Record<string, DocumentField>;
context: DocumentContext;
hidden?: boolean;
permissions?: DocumentPermissions;
}
export type DocumentWithSource = Document & { srcType: string; srcProjectId: string };
export interface DocumentSpecifier {
srcType: string;
srcProjectId: string;
srcDocumentId: string;
omitFields?: boolean;
}
export type TypeAsset = 'asset';
export interface Asset<AssetContext = unknown> {
type: TypeAsset;
id: string;
manageUrl: string;
status: DocumentStatus;
createdAt: string;
createdBy?: string;
updatedAt: string;
updatedBy?: string[];
locale?: string;
fields: AssetFields;
context: AssetContext;
hidden?: boolean;
permissions?: DocumentPermissions;
}
export type AssetWithSource = Asset & { srcType: string; srcProjectId: string };
export type AssetField = AssetFields[keyof AssetFields];
export type AssetFields = {
[key in string]: DocumentStringLikeFieldForType<'string'> | DocumentStringLikeFieldForType<'text'> | AssetFileField;
} & {
title: DocumentStringLikeFieldForType<'string'>;
} & {
file: AssetFileField;
};
/**
* Asset "assetFile" field
*/
export type AssetFileField = AssetFileFieldLocalized | AssetFileFieldNonLocalized;
export interface AssetFileFieldNonLocalized extends AssetFileFieldBase, AssetFileFieldProps {
localized?: false;
}
export interface AssetFileFieldLocalized extends AssetFileFieldBase {
localized: true;
locales: Record<
string,
{
locale: string;
} & AssetFileFieldProps
>;
}
export type AssetFileFieldBase = {
type: 'assetFile';
};
export interface AssetFileFieldProps {
url: string;
fileName?: string;
contentType?: string;
size?: number;
dimensions?: {
width?: number;
height?: number;
};
}