I have made a similar solution in-house. I kinda agree with the YAML nay-sayers. I settled on KDL instead as the description language (https://kdl.dev/) ; maybe give it a try ?
migration "create-users-table" { create-table "users" { column "id" "number" dbtype="increments" } }
migration "add-user-last-device" { alter-table "users" { column "last_device" "string" } }
This implicitly defines an "User" entity which has two fields, "id" and "lastDevice". But now we can also generate migrations (in our case, knex migrations). It’s harder and less reliable to go the other way, starting from current database schema + current description to migration.