ormbridge 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -13,10 +13,12 @@ Convert ORM models between frameworks and languages, so one data model can be sh
13
13
  | Drizzle ORM (TypeScript) | ✔ | ✔ | `pgTable` / `mysqlTable` / `sqliteTable` plus `relations()` |
14
14
  | JSON Schema / OpenAPI | ✔ | ✔ | Draft 2020-12, 2019-09 and 7, and OpenAPI `components.schemas` (JSON) |
15
15
  | SQL DDL | ✔ | | `CREATE TABLE` and friends for PostgreSQL, MySQL, SQLite, SQL Server |
16
+ | SQLAlchemy / SQLModel | ✔ | | SQLAlchemy 2.0 declarative, `Column()` and `Table()` styles; SQLModel |
16
17
  | TypeScript interfaces | | ✔ | Plain interfaces and enums for front ends |
17
18
  | Graphene (graphene-django) | | ✔ | GraphQL types, queries and mutations that pair with Django |
18
19
  | Zod schemas | | ✔ | Zod 4 schemas and inferred types for validation |
19
20
  | SQL DDL | | ✔ | One `.sql` script for PostgreSQL, MySQL, SQLite or SQL Server |
21
+ | SQLAlchemy / SQLModel | | ✔ | SQLAlchemy 2.0 declarative models; `--style sqlmodel` for SQLModel |
20
22
 
21
23
  See [What is converted](#what-is-converted) for the field-level mapping and [docs/CONVERSION_MATRIX.md](docs/CONVERSION_MATRIX.md) for exactly what survives a round trip between the readable formats.
22
24
 
@@ -72,6 +74,12 @@ ormbridge convert -i ./openapi.json --from json-schema --to prisma -o ./prisma/s
72
74
  # SQL DDL (a pg_dump / mysqldump / sqlite .dump / SSMS script, or a folder of migrations) -> Prisma (every .sql file is read in name order; node_modules/, vendor/ and rollback scripts such as *.down.sql are skipped)
73
75
  ormbridge convert -i ./schema.sql -o ./prisma/schema.prisma
74
76
  ormbridge convert -i ./db/migrations --from sql --to django -o ./blog/models.py
77
+
78
+ # SQLAlchemy 2.0 or SQLModel models -> Prisma (.py belongs to Django, so pass --from sqlalchemy; every .py file is read; venvs, site-packages, migrations/, alembic/, __pycache__/ and test files are skipped)
79
+ ormbridge convert -i ./app/models --from sqlalchemy -o ./prisma/schema.prisma
80
+ # Prisma -> SQLAlchemy 2.0 models (".py" means Django, so pass --to sqlalchemy; --style sqlmodel writes SQLModel classes instead)
81
+ ormbridge convert -i ./prisma/schema.prisma --to sqlalchemy -o ./app/models.py
82
+ ormbridge convert -i ./prisma/schema.prisma --to sqlalchemy --style sqlmodel -o ./app/models.py
75
83
  ```
76
84
 
77
85
  Formats are inferred from file extensions (`.py` = Django, `.prisma` = Prisma, `.ts` = TypeORM, `.sql` = SQL), or set explicitly with `--from` / `--to`. Passing a directory does not infer the format, so add `--from typeorm` (or `--from drizzle`, `--from json-schema`, `--from doctrine`, `--from laravel`, `--from gorm`) when reading a folder of entities (or `--from sql` for a folder of `.sql` files); `.php`, `.go` and `.json` are not inferred either, and `.ts` always means TypeORM, so Drizzle needs `--from drizzle`. Run `ormbridge formats` to list every supported format, its file extensions, and whether it can be read, written, or both. Without `-o`, the result is printed to stdout. Warnings go to stderr.
@@ -80,8 +88,8 @@ Formats are inferred from file extensions (`.py` = Django, `.prisma` = Prisma, `
80
88
  | ------------------------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
81
89
  | `-i, --input <paths...>` | required (or config) | Files or directories to read. Several files are merged into one schema, so abstract base classes can live in another file. |
82
90
  | `-o, --output <path>` | stdout | File to write. Parent directories are created. |
83
- | `-f, --from <format>` | inferred | `django`, `prisma`, `typeorm`, `drizzle`, `doctrine`, `laravel`, `gorm`, `json-schema` or `sql` |
84
- | `-t, --to <format>` | inferred | `django`, `prisma`, `typeorm`, `drizzle`, `doctrine`, `laravel`, `gorm` or `json-schema` (`drizzle`, `doctrine`, `laravel` and `gorm` write a directory), `typescript`, `zod`, `sql` or `graphene` (output only) |
91
+ | `-f, --from <format>` | inferred | `django`, `prisma`, `typeorm`, `drizzle`, `doctrine`, `laravel`, `gorm`, `json-schema`, `sql` or `sqlalchemy` |
92
+ | `-t, --to <format>` | inferred | `django`, `prisma`, `typeorm`, `drizzle`, `doctrine`, `laravel`, `gorm`, `json-schema`, `sql` or `sqlalchemy` (`drizzle`, `doctrine`, `laravel` and `gorm` write a directory), `typescript`, `zod` or `graphene` (output only) |
85
93
  | `--naming <mode>` | `preserve` | `preserve` or `normalize` (see below) |
86
94
  | `--provider <name>` | `postgresql` | Database: `postgresql`, `mysql`, `sqlite`, `sqlserver`, `mongodb`, `cockroachdb`. Controls Prisma native types such as `@db.VarChar`, the Drizzle and GORM dialect and the SQL dialect of `--to sql` (`postgresql`, `mysql`, `sqlite` or `sqlserver`). |
87
95
  | `--no-header` | off | Omit the Prisma `generator` / `datasource` blocks (useful when pasting models into an existing schema). |
@@ -90,6 +98,7 @@ Formats are inferred from file extensions (`.py` = Django, `.prisma` = Prisma, `
90
98
  | `--namespace <name>` | `App\Entity`, `App\Models` | PHP namespace of the Doctrine entities or Laravel models (`--to doctrine` / `--to laravel` only). Enums go in a sibling namespace. |
91
99
  | `--go-package <name>` | `models` | Go package name of the GORM models, also the output sub-directory (`--to gorm` only). Must be a valid Go identifier. |
92
100
  | `--prisma-version <6\|7>` | `6` | Prisma major version of the header (`--to prisma` only). `7` writes the `prisma-client` generator (with an `output`) and no datasource `url`. |
101
+ | `--style <name>` | `sqlalchemy` | Flavour of the SQLAlchemy output (`--to sqlalchemy` only): `sqlalchemy` (declarative `Mapped[...]` models) or `sqlmodel` (`SQLModel, table=True` classes). Anything else fails with the valid values. |
93
102
  | `--dry-run` | off | Run the whole conversion and report what would be written, without touching the filesystem. |
94
103
  | `--check` | off | Exit with code 3 if an output file is missing or differs from the conversion. Writes nothing. Needs an output path. |
95
104
  | `--config <path>` | searched | Read settings from this JSON config file instead of searching for one. |
@@ -146,6 +155,7 @@ Instead of repeating flags, put them in `ormbridge.config.json` (or `.ormbridger
146
155
  | `namespace` | string | `--namespace` (Doctrine or Laravel output) |
147
156
  | `goPackage` | string | `--go-package` (GORM output) |
148
157
  | `prismaVersion` | number | `--prisma-version` (`6` or `7`; Prisma output) |
158
+ | `style` | string | `--style` (`sqlalchemy` or `sqlmodel`; SQLAlchemy output) |
149
159
  | `conversions` | list of objects | Several named conversions; each takes the keys above plus `name` |
150
160
 
151
161
  Top-level keys are defaults for every entry in `conversions`. Flags override config values. With no `-i`, `ormbridge convert` runs every conversion in the list (and `-o` is rejected, since the conversions write to different paths); with `-i`, it runs a single conversion from the top-level settings. Unknown keys and bad values fail with a message naming the key, such as `"conversions[1].naming" must be "preserve" or "normalize" (got "weird")`.
@@ -420,6 +430,31 @@ Losses, each reported as a warning naming the model and property: `description`
420
430
 
421
431
  Everything else is skipped, and each kind is reported once as a warning with a count and the first line (`Skipped 3 CREATE VIEW statements (first at schema.sql:40)`): views, functions, procedures, triggers, sequences, domains, composite types, row data (`INSERT`, `COPY`), temporary tables, `CREATE TABLE ... AS SELECT`, `PARTITION OF`, and the `ALTER TABLE` changes that are not replayed (`DROP COLUMN`, `RENAME`, a changed column type). `COMMENT ON`, `SET`, `GRANT`, transactions and extensions are skipped without a warning. A `CHECK` that is not an enum, an `EXCLUDE` constraint, an expression index, a partial unique index (a full one would reject rows the source accepts), the `WHERE` of a partial index, `INHERITS` and partitioning, a MySQL `SET` column, a table without a primary key and a foreign key to a table that is not in the input each warn and name the table. MySQL creates an index for every foreign key, so an index over exactly the foreign-key columns is not kept as a separate index.
422
432
 
433
+ ### SQLAlchemy and SQLModel (`--from sqlalchemy`)
434
+
435
+ `--from sqlalchemy` reads SQLAlchemy 2.0 declarative models, the classic `Column(...)` style, `Table(...)` objects and SQLModel classes (the `sqlalchemy` format also covers SQLModel). The Python is read with the same static tree-sitter grammar as Django, so **nothing is imported or run**: no Python, SQLAlchemy or database is needed. `.py` belongs to Django, so pass `--from sqlalchemy`; a directory is walked for `.py` files and skips virtual environments, `site-packages`, `migrations`, `alembic`, `__pycache__`, caches and test or tooling files (`test_*.py`, `*_test.py`, `conftest.py`, `setup.py`).
436
+
437
+ | SQLAlchemy / SQLModel | Read as |
438
+ | --------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
439
+ | a class with `__tablename__` on `DeclarativeBase`, `declarative_base()`, `db.Model` or any imported base; a SQLModel class with `table=True`; `__table__` | a model named after the class; the table is `__tablename__` (a `@declared_attr` returning `cls.__name__.lower()` works too; SQLModel and Flask-SQLAlchemy default to the lower-cased and snake-cased class name) |
440
+ | `Mapped[T]`, `mapped_column(...)`, `Column(...)`, SQLModel `Field(...)` | a column; the attribute name is the field name and a name given to `mapped_column("name")` / `Column("name")` is the database column |
441
+ | `Mapped[Optional[T]]`, `Mapped[T \| None]`, `Union[T, None]`, `nullable=` | nullability (a plain `Column` is nullable unless it is a primary key or says `nullable=False`; `nullable=` always wins) |
442
+ | `Integer`, `SmallInteger`, `BigInteger`, `String(n)`, `Text`, `Boolean`, `Float`, `Numeric(p, s)`, `DateTime`, `Date`, `Time`, `Interval`, `LargeBinary` | `int`, `int`, `bigInt`, a string of that length, `text`, `boolean`, `float`, `decimal` with its digits and places, `dateTime`, `date`, `time`, `duration`, `bytes` |
443
+ | `JSON` / `JSONB`, `Uuid` / `UUID`, `ARRAY(T)`, `INET`, `HSTORE`, `INT4RANGE` and friends | `json`, `uuid`, an array of `T` (`dimensions=` adds levels), `ipAddress`, `hstore`, a range; any other type (`Geometry`) is an `unsupported` column with a warning |
444
+ | a bare Python type (`Mapped[int]`, `Mapped[datetime]`, `Mapped[Decimal]`, `Mapped[uuid.UUID]`, SQLModel `str`) | the matching column type; `Annotated[...]` aliases (`intpk = Annotated[int, mapped_column(primary_key=True)]`) and a literal `type_annotation_map` are followed, a `TypeDecorator` is read through its `impl` |
445
+ | `Enum(PyEnum)`, a `Mapped[PyEnum]`, `Enum("a", "b", name="x")`, `Mapped[Literal["a", "b"]]` | an enum; like SQLAlchemy it stores member names unless `values_callable=lambda e: [m.value for m in e]` is given; `name=` becomes the database name of the enum |
446
+ | `primary_key=True` on one or several columns, `PrimaryKeyConstraint(...)` | a primary key or a composite key; a lone integer key counts up (`autoincrement=False` turns that off), as do `Identity()` and `Sequence()` |
447
+ | `default=`, `server_default=`, `onupdate=`, `Computed(...)` | literals, enum members, `func.now()` / `datetime` callables (`now`), `uuid.uuid4`, `dict` / `list` and SQL text (`text("0")`, `text("CURRENT_TIMESTAMP")`); `server_default` marks a database default; `onupdate=func.now()` an auto-updated column; `Computed` a generated column |
448
+ | `ForeignKey("table.col", ondelete=, onupdate=, name=)`, `ForeignKey(Model.col)`, `ForeignKeyConstraint([...], [...])`, SQLModel `foreign_key=` | a foreign-key relation named after the `relationship()` that uses it, otherwise after the column without `_id`; a unique or primary-key foreign key is one-to-one; several columns make a composite foreign key |
449
+ | `relationship(back_populates=, backref=, foreign_keys=, remote_side=, uselist=False)`, SQLModel `Relationship(...)` | the other side of the foreign key becomes `related_name`; `uselist=False` (or a scalar annotation) on the reverse side makes the relation one-to-one; `backref` creates the reverse side; `viewonly` relationships are ignored |
450
+ | `relationship(secondary=Table(...))` (the table as a variable, a name or a `lambda`), SQLModel `link_model=` | one many-to-many on the side declared first (the other side is its related name); the association table is not a model |
451
+ | `Index(...)` in `__table_args__` or after the class, `index=True`, `unique=True`, `UniqueConstraint(...)`, `postgresql_using=` | indexes with their names, column order, descending columns and method; a single unique column becomes a unique field |
452
+ | mixins, `__abstract__ = True` bases, `MappedAsDataclass`, joined-table inheritance | the columns of mixins and abstract bases are copied into each subclass; a joined subclass has a one-to-one primary key to its parent |
453
+ | `Table(...)` that is not an association table | a model named after the class `map_imperatively` maps it to, otherwise after the table; a warning says so |
454
+ | `schema=` in `__table_args__`, `Table(...)` or `MetaData(schema=...)` | the model schema |
455
+
456
+ Not read, each with a warning naming the model and column: `CheckConstraint`, `ExcludeConstraint`, partial indexes (`postgresql_where` and friends), expression indexes (`func.lower(...)`, `text(...)`), single-table inheritance (a subclass without a table of its own), `column_property`, `composite`, `synonym`, `@declared_attr` members other than `__tablename__`, a `Table` reflected with `autoload_with`, a default that is a call the reader does not know, and a Python type with no column type (`dict`, `list[str]` without `JSON` / `ARRAY`). Hybrid properties, `association_proxy`, loader and cascade options and SQLModel's pydantic constraints (`ge`, `min_length`, validators) have no database meaning and are dropped without noise. A foreign key to a table that is not in the input gets a stub model with an auto-increment id and a warning. Hostile or very large input is limited (a file over 2 million characters is skipped, a table keeps its first 2000 columns, at most 500 warnings are printed) and never throws.
457
+
423
458
  ### Prisma constructs
424
459
 
425
460
  The Prisma parser and emitter cover more than the Django mapping above. Constructs the shared model can carry survive a Prisma → Prisma round trip; the other formats get the closest equivalent and a warning naming the model and field.
@@ -498,6 +533,22 @@ Writes one `.sql` script of dialect-specific DDL, so the schema can be created i
498
533
 
499
534
  [Back to Table of Contents](#table-of-contents)
500
535
 
536
+ ### SQLAlchemy and SQLModel (`--to sqlalchemy`)
537
+
538
+ Writes [SQLAlchemy](https://www.sqlalchemy.org) 2.0 declarative models, or with `--style sqlmodel` [SQLModel](https://sqlmodel.tiangolo.com) classes. It is output only and writes **one `models.py`** (like Django, so `-o` is a file and the output can be printed to stdout); `.py` is inferred as Django, so pass `--to sqlalchemy`. The output needs Python 3.9 or newer and SQLAlchemy 2.0 or newer (SQLModel 0.0.21 or newer for `--style sqlmodel`). `--provider` is ignored: the models do not depend on the database.
539
+
540
+ - **SQLAlchemy style** (default): `class Base(DeclarativeBase)`, one class per model with `__tablename__`, typed `Mapped[...]` attributes built with `mapped_column`, and `relationship(back_populates=...)` on **both** sides of every relation (a forward `Mapped["User"]` / `Mapped[Optional["User"]]` and a reverse `Mapped[list["Post"]]`; the reverse side of a one-to-one is `Mapped[Optional["Profile"]]`). Python `enum.Enum` classes are bound with `Enum(Cls, name=..., values_callable=...)`, so the database stores the enum values, not the member names. Only the imports the module uses are written, forward references are strings, and classes follow the classes their foreign keys point at.
541
+ - **SQLModel style**: `class Post(SQLModel, table=True)` with `Field(...)` and `Relationship(back_populates=...)`. Types SQLModel infers from the annotation (`str`, `int`, `bool`, `date`, `uuid.UUID`, ...) are left to it, `max_length`, `max_digits` and `decimal_places` carry lengths and precision, and `sa_type`, `sa_column_kwargs`, `sa_relationship_kwargs` and (for a foreign key with `onupdate`, `NO ACTION` or a constraint name, which `Field` cannot say) `sa_column` appear only where needed. A column the database fills in is `Optional[...] = Field(default=None, nullable=False, ...)`.
542
+ - **Naming**: attributes are snake_case in both modes, with the database name as the first argument of `mapped_column` (or `sa_column_kwargs={"name": ...}`) when it differs. `preserve` keeps table, column, index and enum type names; `normalize` writes singular snake_case tables, UUID keys, snake_case columns and `created_at` / `updated_at`. An attribute that would shadow Python or SQLAlchemy (`class`, `metadata`, `text`, `datetime`, an enum or model name, and for SQLModel `json`, `copy`, `schema`, ...) gets a trailing underscore, a class that collides with an import gets a `Model` suffix, and enum members that are not identifiers are repaired; each repair is a warning. An unnamed reverse relation is named after the plural of the model (`posts`), a one-to-one after the model, and two relations from one model to the same target get `posts_author` / `posts_editor`.
543
+ - **Types**: `String(n)`, `Text`, `Integer`, `BigInteger`, `Float`, `Numeric(p, s)`, `Boolean`, `DateTime(timezone=True)`, `Date`, `Time`, `Interval`, `Uuid`, `JSON` (`JSON(none_as_null=True)` for a nullable column) and `LargeBinary`. Arrays (`ARRAY`, `dimensions=` for nested ones), `HSTORE`, range types and `INET` are PostgreSQL types; each is written with a `.with_variant(JSON(), "sqlite")` fallback (a `String(45)` for `INET`) so `create_all` also works in a SQLite test database, with a warning. A big auto-increment key is `BigInteger().with_variant(Integer, "sqlite")`.
544
+ - **Defaults**: literal, enum, boolean and `now` defaults are `server_default` (`func.now()`, `true()`, `text(...)`), UUID defaults are `default=uuid.uuid4`, an auto-updated column is `default=func.now(), onupdate=func.now()`, and a Prisma `dbgenerated(...)` expression is `server_default=text(...)`. Client-generated defaults (`cuid()`, `ulid()`) and Prisma default functions are dropped with a warning; a UUID version 7 default is written as `uuid4` with a warning.
545
+ - **Keys**: composite and named primary keys are a `PrimaryKeyConstraint`, composite foreign keys a `ForeignKeyConstraint` (with their relationship), unique and index entries `UniqueConstraint` / `Index` in `__table_args__` (generated names are `ix_<table>_<columns>` / `uq_...`; names the source gives are kept). `ForeignKey(..., ondelete=..., onupdate=...)` carries the referential actions, and the reverse side of a cascading or nulling key sets `passive_deletes=True`. A foreign key takes its column type from the key it references (`toField` targets and keys that are themselves relations are followed). `SET NULL` on a required relation is written as `RESTRICT` with a warning. Two foreign keys between the same tables, and self references, get `foreign_keys=` / `remote_side=`.
546
+ - **Many-to-many** relations are a `Table(...)` with the two foreign keys as a composite primary key (no surrogate `id`, unlike the table Django creates), named `<owner table>_<relation>` and used as `secondary=` on both relationships; a self reference adds `primaryjoin` / `secondaryjoin`. The table is defined before the classes.
547
+ - **Views** are a commented placeholder (SQLAlchemy has no declarative view; reflect it with `Table(..., autoload_with=engine)`) and a warning. A table without a primary key is mapped on its required columns with `__mapper_args__` (SQLModel needs a key, so its first column is marked) and a warning. Database schemas (`@@schema`), generated-column expressions (not SQL), index methods, operator classes, sort order and full-text kinds are dropped with a warning, and a relation to a view or to a model that is not in the input stays a plain column.
548
+ - The tests load the output with real SQLAlchemy 2 and SQLModel (`SQLALCHEMY_PYTHON`, see `test/README.md`): the models are imported, the mappers configured, the PostgreSQL DDL rendered, the tables created in SQLite, and the columns, keys, indexes and relationships compared with the schema; rows are inserted (defaults, enums, foreign keys, many-to-many through the relationships) and the referential actions exercised.
549
+
550
+ [Back to Table of Contents](#table-of-contents)
551
+
501
552
  ## Limitations and warnings
502
553
 
503
554
  ormbridge never fails silently on something it cannot represent: each case produces a `warning:` on stderr naming the model and field. The main ones:
@@ -516,17 +567,19 @@ ormbridge never fails silently on something it cannot represent: each case produ
516
567
  - Drizzle: only the TypeScript source is read and nothing is executed, so tables built in loops or by functions, column helpers that need run-time values and defaults computed at run time are not seen (each unresolvable table, column, spread, reference or default warns and names the file and table). Not represented, each with a warning: views, sequences, roles and policies, `check()` constraints, partial (`.where()`) indexes (a partial unique index is dropped because a full one would reject rows the source accepts; a partial plain index is read as a full one), expression indexes, index access methods Prisma does not have, `nullsNotDistinct`, `unsigned`, and relations v2 (`defineRelations`; the foreign keys are still read). SQLite `integer({ mode: 'timestamp' })` is read as a date-time column and warns that the database stores Unix time. A SQLite `integer().primaryKey()` is read as written: it is not auto-increment unless `{ autoIncrement: true }` is given, although SQLite assigns row ids anyway. Drizzle has no implicit many-to-many, so the explicit join table is a model and is written as one. Tables referenced but not found in the input get a stub with an auto-increment id. Drizzle can only be read for now; a writer is planned.
517
568
  - JSON Schema: only JSON is read (no YAML), remote `$ref`s are never fetched and named anchors (`$anchor`, `$dynamicRef`) are not resolved. Relations are inferred from `$ref` properties and the `x-` conventions above, and a few guesses are warned about (a one-to-one pair with no required side, a lone array of models, a missing primary key). See "JSON Schema and OpenAPI" above and the conversion matrix for the full list of what is lost.
518
569
  - SQL DDL: only the DDL text is read and nothing is run. The dialect is guessed per file, `UNSIGNED`, display widths, time zones and `jsonb` versus `json` are not kept, and names the database generated for constraints are not recorded. Relation names, reverse accessors, enum names and the many-to-many relation name are derived from table and column names, so they are guesses (the conversion matrix lists them). `ALTER TABLE` is replayed for added columns and constraints and a few column options only; renames, dropped columns and type changes are skipped with a warning, so a long migration history is best read from a schema dump. A composite foreign key that points at columns that are themselves single-column foreign keys cannot be expressed, and the Prisma writer reports it. Input is limited to 32 million characters; deeply nested or unterminated constructs are scanned in linear time and never overflow the stack.
570
+ - SQLAlchemy and SQLModel: the Python is read statically and nothing is imported, so models built in loops or functions, computed table names, `__table_args__` produced by a `@declared_attr` and column types chosen at run time are not seen. Not represented, each with a warning: check and exclude constraints, partial and expression indexes, single-table inheritance, `column_property` / `composite` / `synonym`, and Python types that need an explicit SQLAlchemy type (`dict`, `list`). Which side of a `relationship()` owns the foreign key is worked out from `foreign_keys`, `remote_side`, `primaryjoin` or the only key between the two tables; an ambiguous pair warns. A many-to-many keeps its two names but not the name or `ondelete` of its association table (see [docs/CONVERSION_MATRIX.md](docs/CONVERSION_MATRIX.md)).
571
+ - SQLAlchemy and SQLModel output: attributes are snake_case (the column name is passed explicitly), a reverse side that the source never named gets the plural of the model name, and the association table of a many-to-many relation has no surrogate `id` (Django's own does, so data needs migrating). Array, HSTORE, range and `INET` columns are PostgreSQL types with a JSON fallback for SQLite only, other databases are not covered, and a `String` without a length cannot be created on MySQL. Views, database schemas, generated-column expressions, index methods and operator classes are not expressed (each warns). SQLModel's `Field` cannot declare an `onupdate` or a named foreign key, so those columns use `sa_column`. The output is not run through Black or Ruff.
519
572
  - Generated names for Django indexes are shortened to Django's 30-character limit.
520
573
 
521
574
  Always review the output and run your own migrations/`prisma validate` before applying it to a real database.
522
575
 
523
576
  ### Verified against real tools
524
577
 
525
- The emitters are not only compared with golden files. When the tools are installed, the tests also load the output with the real thing: Django (`manage.py check`, `makemigrations`, `sqlmigrate`, `migrate` and a comparison of the model metadata and the SQLite database with the schema), graphene-django (the generated schema is built, introspected and queried), TypeORM (`tsc` with decorator metadata, TypeORM's metadata validation for every provider and a `synchronize` into in-memory SQLite), Drizzle ORM (`tsc --strict`, `drizzle-kit generate` for PostgreSQL, MySQL and SQLite, `drizzle-kit push` into SQLite, Drizzle's relational configuration and a persistence run on the blog schema), Doctrine, Laravel, GORM and `prisma validate`. These checks are optional: each is skipped with a reason when its tool is missing, and `test/README.md` lists the environment variables (`DJANGO_PYTHON`, `TYPEORM_DIR`, `DRIZZLE_DIR`, `DOCTRINE_DIR`, `LARAVEL_DIR`, `PRISMA_BIN`) and `test/tools/setup-verification-tools.sh`, which installs the Django, TypeORM and Drizzle tools into a scratch directory. The Drizzle parser is checked the other way round: the fixtures are type-checked against `drizzle-orm` and compared with the snapshot `drizzle-kit generate` builds from them. The JSON Schema and OpenAPI fixtures are checked with the real Ajv validator, and the Zod schemas with real Zod 4 (`ZOD_DIR`): they are compiled with `tsc --strict` and parse generated rows (valid ones pass, invalid ones fail). The SQL DDL is executed in SQLite (always), PostgreSQL (`SQL_POSTGRES_URL`) and MySQL or MariaDB (`SQL_MYSQL_URL`), and the tables, columns, keys and indexes the database reports are compared with the schema, and the SQL parser reads the SQLite fixtures back and is compared with what the database reports.
578
+ The emitters are not only compared with golden files. When the tools are installed, the tests also load the output with the real thing: Django (`manage.py check`, `makemigrations`, `sqlmigrate`, `migrate` and a comparison of the model metadata and the SQLite database with the schema), graphene-django (the generated schema is built, introspected and queried), TypeORM (`tsc` with decorator metadata, TypeORM's metadata validation for every provider and a `synchronize` into in-memory SQLite), Drizzle ORM (`tsc --strict`, `drizzle-kit generate` for PostgreSQL, MySQL and SQLite, `drizzle-kit push` into SQLite, Drizzle's relational configuration and a persistence run on the blog schema), Doctrine, Laravel, GORM and `prisma validate`. These checks are optional: each is skipped with a reason when its tool is missing, and `test/README.md` lists the environment variables (`DJANGO_PYTHON`, `TYPEORM_DIR`, `DRIZZLE_DIR`, `SQLALCHEMY_PYTHON`, `DOCTRINE_DIR`, `LARAVEL_DIR`, `PRISMA_BIN`) and `test/tools/setup-verification-tools.sh`, which installs the Django, TypeORM and Drizzle tools into a scratch directory. The Drizzle parser is checked the other way round: the fixtures are type-checked against `drizzle-orm` and compared with the snapshot `drizzle-kit generate` builds from them. The JSON Schema and OpenAPI fixtures are checked with the real Ajv validator, and the Zod schemas with real Zod 4 (`ZOD_DIR`): they are compiled with `tsc --strict` and parse generated rows (valid ones pass, invalid ones fail). The SQLAlchemy and SQLModel output (`SQLALCHEMY_PYTHON`) is imported with the real libraries, its PostgreSQL DDL rendered, its tables created in SQLite and compared with the schema, and rows are inserted through the ORM (defaults, enums, foreign keys, many-to-many, referential actions). The SQL DDL is executed in SQLite (always), PostgreSQL (`SQL_POSTGRES_URL`) and MySQL or MariaDB (`SQL_MYSQL_URL`), and the tables, columns, keys and indexes the database reports are compared with the schema, and the SQL parser reads the SQLite fixtures back and is compared with what the database reports. The SQLAlchemy parser is checked the other way round: the fixtures are imported, the mappers configured, the tables created in SQLite and read back with the inspector, and one row per table is inserted to see that the defaults work.
526
579
 
527
580
  ### Conversion matrix
528
581
 
529
- [docs/CONVERSION_MATRIX.md](./docs/CONVERSION_MATRIX.md) shows, for every pair of readable and writable formats (Django, Prisma, TypeORM, Doctrine, Laravel, GORM, Drizzle, JSON Schema, SQL), whether the schema survives a round trip and exactly what is lost when it does not (for example enum labels and column lengths, and Prisma's explicit join model for many-to-many fields). Write-only targets (GORM, Drizzle, JSON Schema and Zod) get a structural check of the written files instead of an IR comparison. It is generated from the test fixtures with `npm run docs:matrix`, and the tests fail if it is out of date.
582
+ [docs/CONVERSION_MATRIX.md](./docs/CONVERSION_MATRIX.md) shows, for every pair of readable and writable formats (Django, Prisma, TypeORM, Doctrine, Laravel, GORM, Drizzle, JSON Schema, SQL, SQLAlchemy), whether the schema survives a round trip and exactly what is lost when it does not (for example enum labels and column lengths, and Prisma's explicit join model for many-to-many fields). Write-only targets (GORM, Drizzle, JSON Schema and Zod) get a structural check of the written files instead of an IR comparison. It is generated from the test fixtures with `npm run docs:matrix`, and the tests fail if it is out of date.
530
583
 
531
584
  Django models are read with a static [tree-sitter](https://tree-sitter.github.io/) parser, so **no Python, Django install, or database is needed**.
532
585
 
@@ -555,7 +608,7 @@ if (!result.ok) {
555
608
  }
556
609
  ```
557
610
 
558
- All functions return a `Result` (`{ ok: true, value } | { ok: false, error }`) instead of throwing, with a descriptive error code and message. Parsers and emitters are exported too (`parseDjango`, `parsePrisma`, `parseTypeorm`, `parseDrizzle`, `parseDoctrine`, `parseLaravel`, `parseGorm`, `parseJsonSchema`, `parseSqlDdl`, `emitPrisma`, `emitDjango`, `emitDoctrine`, `emitLaravel`, `emitGorm`, `emitDrizzle`, `emitJsonSchema`, `emitZod`, `emitSqlDdl`), all built on a shared intermediate representation, which is how new formats plug in.
611
+ All functions return a `Result` (`{ ok: true, value } | { ok: false, error }`) instead of throwing, with a descriptive error code and message. Parsers and emitters are exported too (`parseDjango`, `parsePrisma`, `parseTypeorm`, `parseDrizzle`, `parseDoctrine`, `parseLaravel`, `parseGorm`, `parseJsonSchema`, `parseSqlDdl`, `parseSqlAlchemy`, `emitPrisma`, `emitDjango`, `emitDoctrine`, `emitLaravel`, `emitGorm`, `emitDrizzle`, `emitJsonSchema`, `emitZod`, `emitSqlDdl`, `emitSqlAlchemy`), all built on a shared intermediate representation, which is how new formats plug in.
559
612
 
560
613
  ### Format registry
561
614
 
package/dist/cliRunner.js CHANGED
@@ -3,6 +3,7 @@ import { extname, isAbsolute, relative, resolve } from 'node:path';
3
3
  import { Command, CommanderError } from 'commander';
4
4
  import { findConfigFile, loadConfigFile, } from './config.js';
5
5
  import { PRISMA_PROVIDERS, } from './emitters/prisma.js';
6
+ import { isSqlAlchemyStyle, SQLALCHEMY_STYLES, } from './emitters/sqlalchemy.js';
6
7
  import { describeFormats, getFormat, getFormatByExtension, listFormatNames, listFormats, } from './formats.js';
7
8
  import { countLines, runConversion, } from './io.js';
8
9
  /** Exit codes of the `ormbridge` command. */
@@ -61,6 +62,13 @@ function buildRunOptions(settings, mode) {
61
62
  if (autoFieldValue !== 'int' && autoFieldValue !== 'bigint') {
62
63
  return failure('INVALID_OPTION', `Invalid --auto-field value "${settings.autoField ?? ''}". Expected "int" or "bigint".`);
63
64
  }
65
+ let style;
66
+ if (settings.style !== undefined) {
67
+ if (!isSqlAlchemyStyle(settings.style)) {
68
+ return failure('INVALID_OPTION', `Invalid --style value "${settings.style}". Expected one of: ${SQLALCHEMY_STYLES.join(', ')}.`);
69
+ }
70
+ style = settings.style;
71
+ }
64
72
  let prismaVersion;
65
73
  if (settings.prismaVersion !== undefined) {
66
74
  const versionText = String(settings.prismaVersion).trim();
@@ -92,6 +100,7 @@ function buildRunOptions(settings, mode) {
92
100
  ? {}
93
101
  : { goPackage: settings.goPackage }),
94
102
  ...(prismaVersion === undefined ? {} : { prismaVersion }),
103
+ ...(style === undefined ? {} : { style }),
95
104
  },
96
105
  };
97
106
  }
@@ -169,6 +178,9 @@ function planRuns(flags, headerFromFlag, config, env, mode) {
169
178
  if (flags.prismaVersion !== undefined) {
170
179
  settings.prismaVersion = flags.prismaVersion;
171
180
  }
181
+ if (flags.style !== undefined) {
182
+ settings.style = flags.style;
183
+ }
172
184
  const options = buildRunOptions(settings, mode);
173
185
  if (!options.ok) {
174
186
  const where = label === undefined ? '' : `conversion ${label}: `;
@@ -325,6 +337,7 @@ export async function runCli(argv, env) {
325
337
  .option('--namespace <name>', 'PHP namespace of the Doctrine entities (default: App\\Entity) or Laravel models (default: App\\Models)')
326
338
  .option('--go-package <name>', 'Go package name of the GORM models (default: models)')
327
339
  .option('--prisma-version <version>', 'Prisma major version of the generator and datasource blocks (6 | 7) (default: 6; 7 writes the prisma-client generator and no datasource url)')
340
+ .option('--style <name>', `flavour of the SQLAlchemy output (${SQLALCHEMY_STYLES.join(' | ')}); sqlmodel writes SQLModel classes (--to sqlalchemy only) (default: sqlalchemy)`)
328
341
  .option('--dry-run', 'run the conversion and report what would be written, without touching any file')
329
342
  .option('--check', 'exit with code 3 if an output file is missing or differs from the conversion; writes nothing')
330
343
  .option('--config <path>', 'read settings from this JSON config file instead of searching for ormbridge.config.json')
@@ -1 +1 @@
1
- {"version":3,"file":"cliRunner.js","sourceRoot":"","sources":["../src/cliRunner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cliRunner.js","sourceRoot":"","sources":["../src/cliRunner.ts"],"names":[],"mappings":"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"}
package/dist/config.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { type SqlAlchemyStyle } from './emitters/sqlalchemy.js';
1
2
  import { type Result } from './result.js';
2
3
  /** File names searched for in each directory, in priority order. */
3
4
  export declare const CONFIG_FILE_NAMES: readonly string[];
@@ -22,6 +23,8 @@ export interface ConversionConfig {
22
23
  goPackage?: string;
23
24
  /** Prisma major version of the generated header (6 or 7). */
24
25
  prismaVersion?: 6 | 7;
26
+ /** Flavour of the SQLAlchemy output: plain SQLAlchemy 2.0 or SQLModel. */
27
+ style?: SqlAlchemyStyle;
25
28
  }
26
29
  /** A parsed config file. Top-level settings are defaults shared by every entry in `conversions`. */
27
30
  export interface ConfigFile {
package/dist/config.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import { readFile, stat } from 'node:fs/promises';
2
2
  import { dirname, join, resolve } from 'node:path';
3
3
  import { PRISMA_PROVIDERS } from './emitters/prisma.js';
4
+ import { isSqlAlchemyStyle, SQLALCHEMY_STYLES, } from './emitters/sqlalchemy.js';
4
5
  import { describeThrown, err, ok } from './result.js';
5
6
  /** File names searched for in each directory, in priority order. */
6
7
  export const CONFIG_FILE_NAMES = [
@@ -21,6 +22,7 @@ const CONVERSION_KEYS = [
21
22
  'namespace',
22
23
  'goPackage',
23
24
  'prismaVersion',
25
+ 'style',
24
26
  ];
25
27
  /**
26
28
  * Looks for a config file in `startDirectory` and each parent directory. The
@@ -200,6 +202,13 @@ function parseConversion(raw, prefix, baseDirectory) {
200
202
  }
201
203
  config.prismaVersion = prismaVersion;
202
204
  }
205
+ const style = raw['style'];
206
+ if (style !== undefined) {
207
+ if (typeof style !== 'string' || !isSqlAlchemyStyle(style)) {
208
+ return fail('style', `must be one of ${SQLALCHEMY_STYLES.join(', ')} (got ${describeValue(style)}).`);
209
+ }
210
+ config.style = style;
211
+ }
203
212
  const header = raw['header'];
204
213
  if (header !== undefined) {
205
214
  if (typeof header !== 'boolean') {
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,GAAG,EAAE,EAAE,EAAe,MAAM,aAAa,CAAC;AAEnE,oEAAoE;AACpE,MAAM,CAAC,MAAM,iBAAiB,GAAsB;IAClD,uBAAuB;IACvB,mBAAmB;CACpB,CAAC;AAmCF,MAAM,eAAe,GAAsB;IACzC,MAAM;IACN,OAAO;IACP,QAAQ;IACR,MAAM;IACN,IAAI;IACJ,QAAQ;IACR,UAAU;IACV,QAAQ;IACR,UAAU;IACV,WAAW;IACX,WAAW;IACX,WAAW;IACX,eAAe;CAChB,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,cAAsB;IAEtB,IAAI,SAAS,GAAW,OAAO,CAAC,cAAc,CAAC,CAAC;IAChD,SAAS,CAAC;QACR,KAAK,MAAM,IAAI,IAAI,iBAAiB,EAAE,CAAC;YACrC,MAAM,SAAS,GAAW,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAChD,IAAI,MAAM,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC5B,OAAO,SAAS,CAAC;YACnB,CAAC;QACH,CAAC;QACD,IAAI,MAAM,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC;YAClD,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,MAAM,GAAW,OAAO,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,SAAS,GAAG,MAAM,CAAC;IACrB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,IAAY;IAChC,IAAI,CAAC;QACH,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,sGAAsG;AACtG,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,IAAY;IAEZ,MAAM,YAAY,GAAW,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,IAAI,IAAY,CAAC;IACjB,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAC9C,CAAC;IAAC,OAAO,MAAM,EAAE,CAAC;QAChB,OAAO,GAAG,CACR,gBAAgB,EAChB,mCAAmC,YAAY,MAAM,cAAc,CAAC,MAAM,CAAC,EAAE,CAC9E,CAAC;IACJ,CAAC;IACD,IAAI,GAAY,CAAC;IACjB,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAAC,OAAO,MAAM,EAAE,CAAC;QAChB,OAAO,GAAG,CACR,gBAAgB,EAChB,oBAAoB,YAAY,wBAAwB,cAAc,CAAC,MAAM,CAAC,EAAE,CACjF,CAAC;IACJ,CAAC;IACD,OAAO,WAAW,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;AACxC,CAAC;AAED,gGAAgG;AAChG,MAAM,UAAU,WAAW,CAAC,GAAY,EAAE,IAAY;IACpD,MAAM,IAAI,GAAG,CAAC,OAAe,EAAsB,EAAE,CACnD,GAAG,CAAC,gBAAgB,EAAE,GAAG,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;IAE/C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC,mCAAmC,CAAC,CAAC;IACnD,CAAC;IACD,MAAM,aAAa,GAAW,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAA4B,EAAE,CAAC;IAC7C,IAAI,cAAuB,CAAC;IAC5B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtB,SAAS;QACX,CAAC;QACD,IAAI,GAAG,KAAK,aAAa,EAAE,CAAC;YAC1B,cAAc,GAAG,KAAK,CAAC;QACzB,CAAC;aAAM,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;YAC1B,OAAO,IAAI,CACT,8EAA8E,CAC/E,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACxB,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAA6B,eAAe,CACxD,QAAQ,EACR,EAAE,EACF,aAAa,CACd,CAAC;IACF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,WAAW,GAAuB,EAAE,CAAC;IAC3C,IAAI,cAAc,KAAK,SAAS,EAAE,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAClE,OAAO,IAAI,CAAC,qDAAqD,CAAC,CAAC;QACrE,CAAC;QACD,MAAM,KAAK,GAAgB,IAAI,GAAG,EAAU,CAAC;QAC7C,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAK,cAA4B,CAAC,OAAO,EAAE,EAAE,CAAC;YACrE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACrB,OAAO,IAAI,CAAC,gBAAgB,KAAK,uBAAuB,CAAC,CAAC;YAC5D,CAAC;YACD,MAAM,MAAM,GAA6B,eAAe,CACtD,KAAK,EACL,eAAe,KAAK,IAAI,EACxB,aAAa,CACd,CAAC;YACF,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;gBACf,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACpC,CAAC;YACD,MAAM,IAAI,GAAuB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;YACnD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBACpB,OAAO,IAAI,CACT,gBAAgB,KAAK,gCAAgC,IAAI,+BAA+B,CACzF,CAAC;gBACJ,CAAC;gBACD,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC;YACD,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IACD,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,aAAa,CAAC,KAAc;IACnC,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;AAChD,CAAC;AAED,sGAAsG;AACtG,SAAS,eAAe,CACtB,GAA4B,EAC5B,MAAc,EACd,aAAqB;IAErB,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,OAAe,EAA4B,EAAE,CACtE,GAAG,CAAC,gBAAgB,EAAE,IAAI,MAAM,GAAG,GAAG,KAAK,OAAO,EAAE,CAAC,CAAC;IACxD,MAAM,MAAM,GAAqB,EAAE,CAAC;IAEpC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACnC,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACnC,MAAM,KAAK,GAAa,eAAe,CAAC,MAAM,CAC5C,CAAC,SAAiB,EAAE,EAAE,CAAC,MAAM,KAAK,EAAE,IAAI,SAAS,KAAK,MAAM,CAC7D,CAAC;YACF,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;gBAClB,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC5B,CAAC;YACD,OAAO,GAAG,CACR,gBAAgB,EAChB,gBAAgB,MAAM,GAAG,GAAG,kBAAkB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAClE,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,MAAM,GAAG,IAAI;QAChB,MAAM;QACN,MAAM;QACN,IAAI;QACJ,UAAU;QACV,WAAW;QACX,WAAW;KACH,EAAE,CAAC;QACX,MAAM,KAAK,GAAY,GAAG,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,SAAS;QACX,CAAC;QACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACrD,OAAO,IAAI,CACT,GAAG,EACH,mCAAmC,aAAa,CAAC,KAAK,CAAC,IAAI,CAC5D,CAAC;QACJ,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACtB,CAAC;IAED,MAAM,MAAM,GAAY,GAAG,CAAC,QAAQ,CAAC,CAAC;IACtC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YACvD,OAAO,IAAI,CACT,QAAQ,EACR,wCAAwC,aAAa,CAAC,MAAM,CAAC,IAAI,CAClE,CAAC;QACJ,CAAC;QACD,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,KAAK,GAAY,GAAG,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,OAAO,GAAc,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAClE,IACE,OAAO,CAAC,MAAM,KAAK,CAAC;YACpB,OAAO,CAAC,IAAI,CACV,CAAC,KAAc,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,EAAE,CAC9D,EACD,CAAC;YACD,OAAO,IAAI,CACT,OAAO,EACP,mEAAmE,aAAa,CAAC,KAAK,CAAC,IAAI,CAC5F,CAAC;QACJ,CAAC;QACD,MAAM,CAAC,KAAK,GAAI,OAAoB,CAAC,GAAG,CAAC,CAAC,KAAa,EAAE,EAAE,CACzD,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC,CAC9B,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAY,GAAG,CAAC,QAAQ,CAAC,CAAC;IACtC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,IAAI,MAAM,KAAK,UAAU,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;YACpD,OAAO,IAAI,CACT,QAAQ,EACR,0CAA0C,aAAa,CAAC,MAAM,CAAC,IAAI,CACpE,CAAC;QACJ,CAAC;QACD,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAED,MAAM,QAAQ,GAAY,GAAG,CAAC,UAAU,CAAC,CAAC;IAC1C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,IACE,OAAO,QAAQ,KAAK,QAAQ;YAC5B,CAAE,gBAAsC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAC3D,CAAC;YACD,OAAO,IAAI,CACT,UAAU,EACV,kBAAkB,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,aAAa,CAAC,QAAQ,CAAC,IAAI,CAClF,CAAC;QACJ,CAAC;QACD,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC7B,CAAC;IAED,MAAM,aAAa,GAAY,GAAG,CAAC,eAAe,CAAC,CAAC;IACpD,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QAChC,IAAI,aAAa,KAAK,CAAC,IAAI,aAAa,KAAK,CAAC,EAAE,CAAC;YAC/C,OAAO,IAAI,CACT,eAAe,EACf,kCAAkC,aAAa,CAAC,aAAa,CAAC,IAAI,CACnE,CAAC;QACJ,CAAC;QACD,MAAM,CAAC,aAAa,GAAG,aAAa,CAAC;IACvC,CAAC;IAED,MAAM,MAAM,GAAY,GAAG,CAAC,QAAQ,CAAC,CAAC;IACtC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,IAAI,OAAO,MAAM,KAAK,SAAS,EAAE,CAAC;YAChC,OAAO,IAAI,CACT,QAAQ,EACR,8BAA8B,aAAa,CAAC,MAAM,CAAC,IAAI,CACxD,CAAC;QACJ,CAAC;QACD,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,CAAC;IAED,MAAM,SAAS,GAAY,GAAG,CAAC,WAAW,CAAC,CAAC;IAC5C,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,MAAM,OAAO,GACX,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACtE,IAAI,OAAO,KAAK,KAAK,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC9C,OAAO,IAAI,CACT,WAAW,EACX,kCAAkC,aAAa,CAAC,SAAS,CAAC,IAAI,CAC/D,CAAC;QACJ,CAAC;QACD,MAAM,CAAC,SAAS,GAAG,OAAO,CAAC;IAC7B,CAAC;IACD,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC;AACpB,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import type { IrSchema } from '../ir.js';
2
+ import { type NamingMode } from '../transforms.js';
3
+ import type { EmitOutput } from './prisma.js';
4
+ /**
5
+ * SQLAlchemy 2.0 emitter, with a SQLModel variant.
6
+ *
7
+ * The output is one `models.py`. With `style: 'sqlalchemy'` (the default) it is a declarative module:
8
+ * a `Base(DeclarativeBase)`, typed `Mapped[...]` attributes built with `mapped_column`, `relationship`
9
+ * on both sides of every relation (`back_populates`), `Table(...)` objects for many-to-many
10
+ * association tables, Python `enum.Enum` classes behind `sa.Enum`, and constraints and indexes in
11
+ * `__table_args__`. With `style: 'sqlmodel'` the classes are `SQLModel, table=True` classes with
12
+ * `Field(...)` and `Relationship(...)`; `sa_type`, `sa_column_kwargs`, `sa_column` and
13
+ * `sa_relationship_kwargs` appear only where `Field` / `Relationship` cannot say it.
14
+ */
15
+ export type SqlAlchemyStyle = 'sqlalchemy' | 'sqlmodel';
16
+ export declare const SQLALCHEMY_STYLES: readonly SqlAlchemyStyle[];
17
+ /** True when a value is one of the supported `--style` values. */
18
+ export declare function isSqlAlchemyStyle(value: string): value is SqlAlchemyStyle;
19
+ export interface SqlAlchemyEmitOptions {
20
+ /**
21
+ * "preserve" keeps the database names of the source (table, column, index and enum type names);
22
+ * "normalize" applies the fresh-schema style of the other emitters. Python attribute names are
23
+ * snake_case in both modes.
24
+ */
25
+ naming: NamingMode;
26
+ /** `sqlalchemy` (default) or `sqlmodel`. */
27
+ style?: SqlAlchemyStyle;
28
+ }
29
+ /** Writes the IR as a SQLAlchemy 2.0 (or SQLModel) models.py. */
30
+ export declare function emitSqlAlchemy(schema: IrSchema, options: SqlAlchemyEmitOptions): EmitOutput;