import { EventEmitter } from 'node:events'; import { ModelOptions, ModelStatic, QueryInterfaceDropTableOptions, QueryInterfaceOptions, SyncOptions, Transactionable } from 'sequelize'; import { BuiltInGroup } from './collection-group-manager'; import { Database } from './database'; import { BelongsToField, Field, FieldOptions, HasManyField } from './fields'; import { Model } from './model'; import { Repository } from './repository'; export type RepositoryType = typeof Repository; export type CollectionSortable = string | boolean | { name?: string; scopeKey?: string; }; export type BaseDumpRules = { delayRestore?: any; }; export type DumpRules = BuiltInGroup | ({ required: true; } & BaseDumpRules) | ({ skipped: true; } & BaseDumpRules) | ({ group: BuiltInGroup | string; } & BaseDumpRules); export interface CollectionOptions extends Omit { name: string; title?: string; namespace?: string; dumpRules?: DumpRules; tableName?: string; inherits?: string[] | string; viewName?: string; writableView?: boolean; filterTargetKey?: string; fields?: FieldOptions[]; model?: string | ModelStatic; repository?: string | RepositoryType; sortable?: CollectionSortable; /** * @default true */ autoGenId?: boolean; /** * @default 'options' */ magicAttribute?: string; tree?: string; template?: string; /** * where is the collection from * * values * - 'plugin' - collection is from plugin * - 'core' - collection is from core * - 'user' - collection is from user */ origin?: string; [key: string]: any; } export interface CollectionContext { database: Database; } export declare class Collection extends EventEmitter { options: CollectionOptions; context: CollectionContext; isThrough?: boolean; fields: Map; model: ModelStatic; repository: Repository; constructor(options: CollectionOptions, context: CollectionContext); get filterTargetKey(): string; get name(): string; get origin(): string; get titleField(): string; get db(): Database; get treeParentField(): BelongsToField | null; get treeChildrenField(): HasManyField | null; tableName(): any; /** * TODO */ modelInit(): void; setRepository(repository?: RepositoryType | string): void; forEachField(callback: (field: Field) => void): void; findField(callback: (field: Field) => boolean): any; hasField(name: string): boolean; getField(name: string): F; getFieldByField(field: string): Field; getFields(): any[]; addField(name: string, options: FieldOptions): Field; checkFieldType(name: string, options: FieldOptions): void; correctOptions(options: any): void; setField(name: string, options: FieldOptions): Field; setFields(fields: FieldOptions[], resetFields?: boolean): void; resetFields(): void; remove(): Collection; removeFieldFromDb(name: string, options?: QueryInterfaceOptions): Promise; removeFromDb(options?: QueryInterfaceDropTableOptions & { dropCollection?: boolean; }): Promise>; existsInDb(options?: Transactionable): Promise; removeField(name: string): void | Field; /** * TODO */ updateOptions(options: CollectionOptions, mergeOptions?: any): this; setSortable(sortable: any): void; /** * TODO * * @param name * @param options */ updateField(name: string, options: FieldOptions): void; addIndex(index: string | string[] | { fields: string[]; unique?: boolean; [key: string]: any; }): void; removeIndex(fields: any): void; refreshIndexes(): void; sync(syncOptions?: SyncOptions): Promise; isInherited(): boolean; isParent(): boolean; getTableNameWithSchema(): any; tableNameAsString(options?: { ignorePublicSchema: boolean; }): any; getTableNameWithSchemaAsString(): string; quotedTableName(): any; collectionSchema(): string; isView(): boolean; protected sequelizeModelOptions(): { modelName: string; sequelize: import("sequelize").Sequelize; tableName: any; }; protected bindFieldEventListener(): void; private checkOptions; private checkTableName; }