payload
Version:
Node, React and MongoDB Headless CMS and Application Framework
423 lines • 14.4 kB
TypeScript
/// <reference types="react" />
import type { Response } from 'express';
import type { GraphQLInputObjectType, GraphQLNonNull, GraphQLObjectType } from 'graphql';
import type { DeepRequired } from 'ts-essentials';
import type { GeneratedTypes } from '../../';
import type { CustomPreviewButtonProps, CustomPublishButtonProps, CustomSaveButtonProps, CustomSaveDraftButtonProps } from '../../admin/components/elements/types';
import type { Props as ListProps } from '../../admin/components/views/collections/List/types';
import type { Auth, IncomingAuthType, User } from '../../auth/types';
import type { Access, AdminViewComponent, EditViewConfig, Endpoint, EntityDescription, GeneratePreviewURL, LivePreviewConfig } from '../../config/types';
import type { PayloadRequest, RequestContext } from '../../express/types';
import type { Field } from '../../fields/config/types';
import type { IncomingUploadType, Upload } from '../../uploads/types';
import type { IncomingCollectionVersions, SanitizedCollectionVersions } from '../../versions/types';
import type { AfterOperationArg, AfterOperationMap } from '../operations/utils';
export type HookOperationType = 'autosave' | 'create' | 'delete' | 'forgotPassword' | 'login' | 'read' | 'refresh' | 'update';
type CreateOrUpdateOperation = Extract<HookOperationType, 'create' | 'update'>;
export type BeforeOperationHook = (args: {
args?: any;
/** The collection which this hook is being run on */
collection: SanitizedCollectionConfig;
context: RequestContext;
/**
* Hook operation being performed
*/
operation: HookOperationType;
req: PayloadRequest;
}) => any;
export type BeforeValidateHook<T extends TypeWithID = any> = (args: {
/** The collection which this hook is being run on */
collection: SanitizedCollectionConfig;
context: RequestContext;
data?: Partial<T>;
/**
* Hook operation being performed
*/
operation: CreateOrUpdateOperation;
/**
* Original document before change
*
* `undefined` on 'create' operation
*/
originalDoc?: T;
req?: PayloadRequest;
}) => any;
export type BeforeChangeHook<T extends TypeWithID = any> = (args: {
/** The collection which this hook is being run on */
collection: SanitizedCollectionConfig;
context: RequestContext;
data: Partial<T>;
/**
* Hook operation being performed
*/
operation: CreateOrUpdateOperation;
/**
* Original document before change
*
* `undefined` on 'create' operation
*/
originalDoc?: T;
req: PayloadRequest;
}) => any;
export type AfterChangeHook<T extends TypeWithID = any> = (args: {
/** The collection which this hook is being run on */
collection: SanitizedCollectionConfig;
context: RequestContext;
doc: T;
/**
* Hook operation being performed
*/
operation: CreateOrUpdateOperation;
previousDoc: T;
req: PayloadRequest;
}) => any;
export type BeforeReadHook<T extends TypeWithID = any> = (args: {
/** The collection which this hook is being run on */
collection: SanitizedCollectionConfig;
context: RequestContext;
doc: T;
query: {
[key: string]: any;
};
req: PayloadRequest;
}) => any;
export type AfterReadHook<T extends TypeWithID = any> = (args: {
/** The collection which this hook is being run on */
collection: SanitizedCollectionConfig;
context: RequestContext;
doc: T;
findMany?: boolean;
query?: {
[key: string]: any;
};
req: PayloadRequest;
}) => any;
export type BeforeDeleteHook = (args: {
/** The collection which this hook is being run on */
collection: SanitizedCollectionConfig;
context: RequestContext;
id: number | string;
req: PayloadRequest;
}) => any;
export type AfterDeleteHook<T extends TypeWithID = any> = (args: {
/** The collection which this hook is being run on */
collection: SanitizedCollectionConfig;
context: RequestContext;
doc: T;
id: number | string;
req: PayloadRequest;
}) => any;
export type AfterOperationHook<T extends TypeWithID = any> = (arg: AfterOperationArg<T>) => Promise<ReturnType<AfterOperationMap<T>[keyof AfterOperationMap<T>]>>;
export type AfterErrorHook = (err: Error, res: unknown, context: RequestContext,
/** The collection which this hook is being run on. This is null if the AfterError hook was be added to the payload-wide config */
collection: SanitizedCollectionConfig | null) => {
response: any;
status: number;
} | void;
export type BeforeLoginHook<T extends TypeWithID = any> = (args: {
/** The collection which this hook is being run on */
collection: SanitizedCollectionConfig;
context: RequestContext;
req: PayloadRequest;
user: T;
}) => any;
export type AfterLoginHook<T extends TypeWithID = any> = (args: {
/** The collection which this hook is being run on */
collection: SanitizedCollectionConfig;
context: RequestContext;
req: PayloadRequest;
token: string;
user: T;
}) => any;
export type AfterLogoutHook<T extends TypeWithID = any> = (args: {
/** The collection which this hook is being run on */
collection: SanitizedCollectionConfig;
context: RequestContext;
req: PayloadRequest;
res: Response;
}) => any;
export type AfterMeHook<T extends TypeWithID = any> = (args: {
/** The collection which this hook is being run on */
collection: SanitizedCollectionConfig;
context: RequestContext;
req: PayloadRequest;
response: unknown;
}) => any;
export type AfterRefreshHook<T extends TypeWithID = any> = (args: {
/** The collection which this hook is being run on */
collection: SanitizedCollectionConfig;
context: RequestContext;
exp: number;
req: PayloadRequest;
res: Response;
token: string;
}) => any;
export type AfterForgotPasswordHook = (args: {
args?: any;
/** The collection which this hook is being run on */
collection: SanitizedCollectionConfig;
context: RequestContext;
}) => any;
type BeforeDuplicateArgs<T> = {
/** The collection which this hook is being run on */
collection: SanitizedCollectionConfig;
data: T;
locale?: string;
};
export type BeforeDuplicate<T = any> = (args: BeforeDuplicateArgs<T>) => Promise<T> | T;
export type CollectionAdminOptions = {
/**
* Custom admin components
*/
components?: {
AfterList?: React.ComponentType<ListProps>[];
AfterListTable?: React.ComponentType<ListProps>[];
BeforeList?: React.ComponentType<ListProps>[];
BeforeListTable?: React.ComponentType<ListProps>[];
/**
* Components within the edit view
*/
edit?: {
/**
* Replaces the "Preview" button
*/
PreviewButton?: CustomPreviewButtonProps;
/**
* Replaces the "Publish" button
* + drafts must be enabled
*/
PublishButton?: CustomPublishButtonProps;
/**
* Replaces the "Save" button
* + drafts must be disabled
*/
SaveButton?: CustomSaveButtonProps;
/**
* Replaces the "Save Draft" button
* + drafts must be enabled
* + autosave must be disabled
*/
SaveDraftButton?: CustomSaveDraftButtonProps;
};
views?: {
/**
* Set to a React component to replace the entire "Edit" view, including all nested routes.
* Set to an object to replace or modify individual nested routes, or to add new ones.
*/
Edit?: ({
/**
* Replace or modify individual nested routes, or add new ones:
* + `Default` - `/admin/collections/:collection/:id`
* + `API` - `/admin/collections/:collection/:id/api`
* + `LivePreview` - `/admin/collections/:collection/:id/preview`
* + `References` - `/admin/collections/:collection/:id/references`
* + `Relationships` - `/admin/collections/:collection/:id/relationships`
* + `Versions` - `/admin/collections/:collection/:id/versions`
* + `Version` - `/admin/collections/:collection/:id/versions/:version`
* + `CustomView` - `/admin/collections/:collection/:id/:path`
*/
API?: AdminViewComponent | Partial<EditViewConfig>;
Default?: AdminViewComponent | Partial<EditViewConfig>;
LivePreview?: AdminViewComponent | Partial<EditViewConfig>;
Version?: AdminViewComponent | Partial<EditViewConfig>;
Versions?: AdminViewComponent | Partial<EditViewConfig>;
} | {
[key: string]: EditViewConfig;
}) | AdminViewComponent;
List?: {
Component?: React.ComponentType<ListProps>;
actions?: React.ComponentType<any>[];
} | React.ComponentType<ListProps>;
};
};
/**
* Default columns to show in list view
*/
defaultColumns?: string[];
/**
* Custom description for collection
*/
description?: EntityDescription;
disableDuplicate?: boolean;
enableRichTextLink?: boolean;
enableRichTextRelationship?: boolean;
/**
* Place collections into a navigational group
* */
group?: Record<string, string> | string;
/**
* Exclude the collection from the admin nav and routes
*/
hidden?: ((args: {
user: User;
}) => boolean) | boolean;
/**
* Hide the API URL within the Edit view
*/
hideAPIURL?: boolean;
hooks?: {
/**
* Function that allows you to modify a document's data before it is duplicated
*/
beforeDuplicate?: BeforeDuplicate;
};
/**
* Additional fields to be searched via the full text search
*/
listSearchableFields?: string[];
/**
* Live preview options
*/
livePreview?: LivePreviewConfig;
pagination?: {
defaultLimit?: number;
limits?: number[];
};
/**
* Function to generate custom preview URL
*/
preview?: GeneratePreviewURL;
/**
* Field to use as title in Edit view and first column in List view
*/
useAsTitle?: string;
};
/** Manage all aspects of a data collection */
export type CollectionConfig = {
/**
* Access control
*/
access?: {
admin?: (args?: any) => Promise<boolean> | boolean;
create?: Access;
delete?: Access;
read?: Access;
readVersions?: Access;
unlock?: Access;
update?: Access;
};
/**
* Collection admin options
*/
admin?: CollectionAdminOptions;
/**
* Collection login options
*
* Use `true` to enable with default options
*/
auth?: IncomingAuthType | boolean;
/** Extension point to add your custom data. */
custom?: Record<string, any>;
/**
* Default field to sort by in collection list view
*/
defaultSort?: string;
/**
* Custom rest api endpoints, set false to disable all rest endpoints for this collection.
*/
endpoints?: Omit<Endpoint, 'root'>[] | false;
fields: Field[];
/**
* GraphQL configuration
*/
graphQL?: {
pluralName?: string;
singularName?: string;
} | false;
/**
* Hooks to modify Payload functionality
*/
hooks?: {
afterChange?: AfterChangeHook[];
afterDelete?: AfterDeleteHook[];
afterError?: AfterErrorHook;
afterForgotPassword?: AfterForgotPasswordHook[];
afterLogin?: AfterLoginHook[];
afterLogout?: AfterLogoutHook[];
afterMe?: AfterMeHook[];
afterOperation?: AfterOperationHook[];
afterRead?: AfterReadHook[];
afterRefresh?: AfterRefreshHook[];
beforeChange?: BeforeChangeHook[];
beforeDelete?: BeforeDeleteHook[];
beforeLogin?: BeforeLoginHook[];
beforeOperation?: BeforeOperationHook[];
beforeRead?: BeforeReadHook[];
beforeValidate?: BeforeValidateHook[];
};
/**
* Label configuration
*/
labels?: {
plural?: Record<string, string> | string;
singular?: Record<string, string> | string;
};
slug: string;
/**
* Add `createdAt` and `updatedAt` fields
*
* @default true
*/
timestamps?: boolean;
/**
* Options used in typescript generation
*/
typescript?: {
/**
* Typescript generation name given to the interface type
*/
interface?: string;
};
/**
* Customize the handling of incoming file uploads
*
* @default false // disable uploads
*/
upload?: IncomingUploadType | boolean;
/**
* Customize the handling of incoming file uploads
*
* @default false // disable versioning
*/
versions?: IncomingCollectionVersions | boolean;
};
export interface SanitizedCollectionConfig extends Omit<DeepRequired<CollectionConfig>, 'auth' | 'endpoints' | 'fields' | 'upload' | 'versions'> {
auth: Auth;
endpoints: Omit<Endpoint, 'root'>[] | false;
fields: Field[];
upload: Upload;
versions: SanitizedCollectionVersions;
}
export type Collection = {
config: SanitizedCollectionConfig;
graphQL?: {
JWT: GraphQLObjectType;
mutationInputType: GraphQLNonNull<any>;
paginatedType: GraphQLObjectType;
type: GraphQLObjectType;
updateMutationInputType: GraphQLNonNull<any>;
versionType: GraphQLObjectType;
whereInputType: GraphQLInputObjectType;
};
};
export type BulkOperationResult<TSlug extends keyof GeneratedTypes['collections']> = {
docs: GeneratedTypes['collections'][TSlug][];
errors: {
id: GeneratedTypes['collections'][TSlug]['id'];
message: string;
}[];
};
export type AuthCollection = {
config: SanitizedCollectionConfig;
};
export type TypeWithID = {
id: number | string;
};
export type TypeWithTimestamps = {
[key: string]: unknown;
createdAt: string;
id: number | string;
updatedAt: string;
};
export {};
//# sourceMappingURL=types.d.ts.map