Its technically codegen but only from the schema; queries are fully typed on-the-fly.
You will also need to use a tuntime dsl to describe the schema, and then derive both the model classes and the model types from it (just because runtime parts cannot be derived from types)
Other than that, the rest is very possible.
This is kind of the whole ballgame right? How would you do any of this with types if the schema isn't defined until runtime?
The popular choice here is to use classes plus decorators, but its not the only choice
https://typegraphql.com/docs/introduction.html#what
The convenient bit here is that classes already have both a type and a runtime representation, and decorators are also available to attach any extra metadata necessary to that runtime representation
TypeScript can do this. It was done already halfway-well 6 years ago with way fewer features in TypeScript (https://github.com/brianc/node-sql/blob/master/lib/types.d.t...) - today we can do much better.