Skip to content

v0.2.0

Latest
Compare
Choose a tag to compare
@igalklebanov igalklebanov released this 16 Mar 10:29
· 343 commits to main since this release

Added KyselifyModel and GeneratedAlways.

Now it's possible to translate your modern Sequelize (>= 6.14.0) models to Kysely table schema types!

@Table({modelName: 'KitchenSink', tableName: 'kitchen_sink', underscored: true})
export class KitchenSinkModel extends Model<
  InferAttributes<KitchenSinkModel>,
  InferCreationAttributes<KitchenSinkModel>
> {
  declare id: GeneratedAlways<CreationOptional<number>>

  @Column({allowNull: false, type: DataType.STRING(255)})
  name: string

  @Column(DataType.STRING(255))
  preferredName: string | null

  declare createdAt: CreationOptional<Date>
  declare updatedAt: CreationOptional<Date>

  declare getProjects: HasManyGetAssociationsMixin<ProjectModel>
  declare addProject: HasManyAddAssociationMixin<ProjectModel, number>
  declare addProjects: HasManyAddAssociationsMixin<ProjectModel, number>
  declare setProjects: HasManySetAssociationsMixin<ProjectModel, number>
  declare removeProject: HasManyRemoveAssociationMixin<ProjectModel, number>
  declare removeProjects: HasManyRemoveAssociationsMixin<ProjectModel, number>
  declare hasProject: HasManyHasAssociationMixin<ProjectModel, number>
  declare hasProjects: HasManyHasAssociationsMixin<ProjectModel, number>
  declare countProjects: HasManyCountAssociationsMixin
  declare createProject: HasManyCreateAssociationMixin<ProjectModel, 'kitchenSinkId'>

  @HasMany(() => ProjectModel, 'kitchenSinkId')
  projects: NonAttribute<ProjectModel[]>

  @BelongsTo(() => KitchenModel, 'kitchenId')
  kitchen: NonAttribute<KitchenModel>

  declare kitchenId: ForeignKey<number | null>

  get fullName(): NonAttribute<string> {
    return this.name
  }

  declare static associations: {
    projects: Association<KitchenSinkModel, ProjectModel>
  }
}

type KitchenSink = KyselifyModel<KitchenSinkModel>

interface Database {
  kitchenSink: KitchenSink
}