import { CollectionOverview, DeepPartial, FieldOverview, Relation, SchemaOverview } from "@directus/types"; //#region src/relation.d.ts type InitialRelationOverview = Pick & { _kind: "initial"; }; type FinalRelationOverview = Relation & { _kind: "finished"; _type: "o2m" | "m2o" | "a2o"; }; type RelationOveriewBuilderOptions = DeepPartial<{ meta: Pick, "id" | "junction_field" | "sort_field">; schema: Pick, "constraint_name" | "foreign_key_schema">; }>; declare class RelationBuilder { _schemaBuilder: SchemaBuilder | undefined; _data: InitialRelationOverview | FinalRelationOverview; constructor(collection: string, field: string, schema?: SchemaBuilder); o2m(related_collection: string, related_field: string): this; m2o(related_collection: string, related_field?: string): this; a2o(related_collections: string[]): this; options(options: RelationOveriewBuilderOptions): this; build(schema: SchemaOverview): Relation; } //#endregion //#region src/field.d.ts type InitialFieldOverview = { field: string; _kind: "initial"; }; type FinishedFieldOverview = FieldOverview & { _kind: "finished"; }; type M2AOptions = { o2m_relation: RelationBuilder; a2o_relation: RelationBuilder; }; type M2MOptions = { o2m_relation: RelationBuilder; m2o_relation: RelationBuilder; }; type FieldOveriewBuilderOptions = Partial>; declare class FieldBuilder { _schema: SchemaBuilder | undefined; _collection: CollectionBuilder | undefined; _data: InitialFieldOverview | FinishedFieldOverview; constructor(name: string, schema?: SchemaBuilder, collection?: CollectionBuilder); /** Shorthand for creating an integer field and marking it as the primary field */ id(): this; options(options: FieldOveriewBuilderOptions): this; /** Resets the field to it's initial state of only the name */ overwrite(): this; /** Marks the field as the primary field of the collection */ primary(): this; /** Marks the field as the sort_field of the collection */ sort(): void; boolean(): this; bigInteger(): this; date(): this; dateTime(): this; decimal(): this; float(): this; integer(): this; json(): this; string(): this; text(): this; time(): this; timestamp(): this; uuid(): this; hash(): this; csv(): this; m2a(related_collections: string[], relation_callback?: (options: M2AOptions) => M2AOptions | void): this; m2m(related_collection: string, relation_callback?: (options: M2MOptions) => M2MOptions | void): this; translations(language_collection?: string, relation_callback?: (options: M2MOptions) => M2MOptions | void): this; o2m(related_collection: string, related_field: string, relation_callback?: (relation: RelationBuilder) => RelationBuilder | void): this; m2o(related_collection: string, related_field?: string, relation_callback?: (relation: RelationBuilder) => RelationBuilder | void): this; a2o(related_collections: string[], relation_callback?: (relation: RelationBuilder) => RelationBuilder | void): this; get_name(): string; build(_schema: SchemaOverview): FieldOverview; } //#endregion //#region src/collection.d.ts type InitialCollectionOverview = Omit; type FinalCollectionOverview = Omit; type CollectionOveriewBuilderOptions = Partial>; declare class CollectionBuilder { _schemaBuilder: SchemaBuilder | undefined; _data: InitialCollectionOverview | FinalCollectionOverview; _fields: FieldBuilder[]; constructor(name: string, schema?: SchemaBuilder); field(name: string): FieldBuilder; get_name(): string; build(schema: SchemaOverview): CollectionOverview; } //#endregion //#region src/builder.d.ts declare class SchemaBuilder { _collections: CollectionBuilder[]; _relations: RelationBuilder[]; _last_collection_configured: boolean; _relation_counter: number; collection(name: string, callback: (collection: CollectionBuilder) => void): this; options(options: CollectionOveriewBuilderOptions): this; next_relation_index(): number; build(): SchemaOverview; } //#endregion export { CollectionBuilder, FieldBuilder, RelationBuilder, SchemaBuilder };