Libraries v5.0.0
    Preparing search index...

    Class Entity<TSchema, TRels, TVariantUnion, TReadVariants>

    A typed wrapper around an ObjectSchemaBuilder that tracks declared relations in its TRels generic. Use defineEntity to create one.

    Relations are declared via .hasOne() / .hasMany() / .belongsTo() / .belongsToMany() on the entity (NOT on the underlying schema). Each call returns a new Entity whose TRels includes the new relation, so query(db, entity).include(t => t.assignee) is fully typed.

    Type Parameters

    • TSchema extends ObjectSchemaBuilder<any, any, any, any, any, any, any>
    • TRels extends Record<string, RelationInfo> = {}
    • TVariantUnion = never
    • TReadVariants extends ReadVariants = {}
    Index
    • Wrap a schema as an entity definition with typed relation metadata. Prefer defineEntity(schema) for inference. Relation/variant methods return new definitions; constructing an Entity does not query or create database tables.

      Type Parameters

      • TSchema extends ObjectSchemaBuilder<any, any, any, any, any, any, any>
      • TRels extends Record<
            string,
            RelationInfo<any, ObjectSchemaBuilder<any, any, any, any, any, any, any>>,
        > = {}
      • TVariantUnion = never
      • TReadVariants extends ReadVariants = {}

      Parameters

      Returns Entity<TSchema, TRels, TVariantUnion, TReadVariants>

    The underlying schema (relations registered via withExtension('relations', ...)).

    • Mark this entity as polymorphic by selecting the discriminator property. Returns a new Entity whose .ctiVariant() / .stiVariant() methods declare each variant.

      Declare ordinary relations (.belongsTo() etc.) on this entity BEFORE .discriminator(). After .discriminator() you are in the polymorphic-builder phase: .hasOne/.hasMany/.belongsTo/.belongsToMany still work, but the per-variant relations live on the .ctiVariant() / .stiVariant() calls.

      Type Parameters

      • TKey extends string

      Parameters

      Returns Entity<TSchema, TRels, never, { discriminator: TKey; variants: {} }>

      const FileEntity = defineEntity(FileSchema)
      .discriminator(t => t.type)
      .ctiVariant('image', ImageEntity, t => t.fileId)
      .ctiVariant('document', DocumentEntity, t => t.fileId);