@uql/core 3.7.13 → 3.8.1

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.
Files changed (210) hide show
  1. package/CHANGELOG.md +11 -2
  2. package/README.md +16 -8
  3. package/dist/browser/uql-browser.min.js +16 -15
  4. package/dist/browser/uql-browser.min.js.map +1 -1
  5. package/dist/dialect/abstractDialect.d.ts +7 -2
  6. package/dist/dialect/abstractDialect.d.ts.map +1 -1
  7. package/dist/dialect/abstractDialect.js +9 -1
  8. package/dist/dialect/abstractDialect.js.map +1 -1
  9. package/dist/dialect/abstractSqlDialect.d.ts +5 -6
  10. package/dist/dialect/abstractSqlDialect.d.ts.map +1 -1
  11. package/dist/dialect/abstractSqlDialect.js +14 -13
  12. package/dist/dialect/abstractSqlDialect.js.map +1 -1
  13. package/dist/dialect/dialectConfig.d.ts +17 -0
  14. package/dist/dialect/dialectConfig.d.ts.map +1 -0
  15. package/dist/dialect/dialectConfig.js +71 -0
  16. package/dist/dialect/dialectConfig.js.map +1 -0
  17. package/dist/dialect/index.d.ts +1 -0
  18. package/dist/dialect/index.d.ts.map +1 -1
  19. package/dist/dialect/index.js +1 -0
  20. package/dist/dialect/index.js.map +1 -1
  21. package/dist/entity/decorator/definition.d.ts.map +1 -1
  22. package/dist/entity/decorator/definition.js +2 -1
  23. package/dist/entity/decorator/definition.js.map +1 -1
  24. package/dist/entity/decorator/index-decorator.d.ts +36 -0
  25. package/dist/entity/decorator/index-decorator.d.ts.map +1 -0
  26. package/dist/entity/decorator/index-decorator.js +51 -0
  27. package/dist/entity/decorator/index-decorator.js.map +1 -0
  28. package/dist/entity/decorator/index.d.ts +1 -0
  29. package/dist/entity/decorator/index.d.ts.map +1 -1
  30. package/dist/entity/decorator/index.js +1 -0
  31. package/dist/entity/decorator/index.js.map +1 -1
  32. package/dist/maria/mariaDialect.d.ts +2 -1
  33. package/dist/maria/mariaDialect.d.ts.map +1 -1
  34. package/dist/maria/mariaDialect.js +3 -0
  35. package/dist/maria/mariaDialect.js.map +1 -1
  36. package/dist/migrate/builder/columnBuilder.d.ts +75 -0
  37. package/dist/migrate/builder/columnBuilder.d.ts.map +1 -0
  38. package/dist/migrate/builder/columnBuilder.js +149 -0
  39. package/dist/migrate/builder/columnBuilder.js.map +1 -0
  40. package/dist/migrate/builder/expressions.d.ts +87 -0
  41. package/dist/migrate/builder/expressions.d.ts.map +1 -0
  42. package/dist/migrate/builder/expressions.js +150 -0
  43. package/dist/migrate/builder/expressions.js.map +1 -0
  44. package/dist/migrate/builder/index.d.ts +6 -0
  45. package/dist/migrate/builder/index.d.ts.map +1 -0
  46. package/dist/migrate/builder/index.js +6 -0
  47. package/dist/migrate/builder/index.js.map +1 -0
  48. package/dist/migrate/builder/migrationBuilder.d.ts +73 -0
  49. package/dist/migrate/builder/migrationBuilder.d.ts.map +1 -0
  50. package/dist/migrate/builder/migrationBuilder.js +326 -0
  51. package/dist/migrate/builder/migrationBuilder.js.map +1 -0
  52. package/dist/migrate/builder/tableBuilder.d.ts +51 -0
  53. package/dist/migrate/builder/tableBuilder.d.ts.map +1 -0
  54. package/dist/migrate/builder/tableBuilder.js +278 -0
  55. package/dist/migrate/builder/tableBuilder.js.map +1 -0
  56. package/dist/migrate/builder/types.d.ts +462 -0
  57. package/dist/migrate/builder/types.d.ts.map +1 -0
  58. package/dist/migrate/builder/types.js +8 -0
  59. package/dist/migrate/builder/types.js.map +1 -0
  60. package/dist/migrate/cli.d.ts +4 -6
  61. package/dist/migrate/cli.d.ts.map +1 -1
  62. package/dist/migrate/cli.js +166 -23
  63. package/dist/migrate/cli.js.map +1 -1
  64. package/dist/migrate/codegen/entityCodeGenerator.d.ts +137 -0
  65. package/dist/migrate/codegen/entityCodeGenerator.d.ts.map +1 -0
  66. package/dist/migrate/codegen/entityCodeGenerator.js +401 -0
  67. package/dist/migrate/codegen/entityCodeGenerator.js.map +1 -0
  68. package/dist/migrate/codegen/entityMerger.d.ts +111 -0
  69. package/dist/migrate/codegen/entityMerger.d.ts.map +1 -0
  70. package/dist/migrate/codegen/entityMerger.js +291 -0
  71. package/dist/migrate/codegen/entityMerger.js.map +1 -0
  72. package/dist/migrate/codegen/index.d.ts +10 -0
  73. package/dist/migrate/codegen/index.d.ts.map +1 -0
  74. package/dist/migrate/codegen/index.js +14 -0
  75. package/dist/migrate/codegen/index.js.map +1 -0
  76. package/dist/migrate/codegen/migrationCodeGenerator.d.ts +62 -0
  77. package/dist/migrate/codegen/migrationCodeGenerator.d.ts.map +1 -0
  78. package/dist/migrate/codegen/migrationCodeGenerator.js +356 -0
  79. package/dist/migrate/codegen/migrationCodeGenerator.js.map +1 -0
  80. package/dist/migrate/codegen/smartRelationDetector.d.ts +48 -0
  81. package/dist/migrate/codegen/smartRelationDetector.d.ts.map +1 -0
  82. package/dist/migrate/codegen/smartRelationDetector.js +135 -0
  83. package/dist/migrate/codegen/smartRelationDetector.js.map +1 -0
  84. package/dist/migrate/drift/driftDetector.d.ts +81 -0
  85. package/dist/migrate/drift/driftDetector.d.ts.map +1 -0
  86. package/dist/migrate/drift/driftDetector.js +248 -0
  87. package/dist/migrate/drift/driftDetector.js.map +1 -0
  88. package/dist/migrate/drift/index.d.ts +7 -0
  89. package/dist/migrate/drift/index.d.ts.map +1 -0
  90. package/dist/migrate/drift/index.js +7 -0
  91. package/dist/migrate/drift/index.js.map +1 -0
  92. package/dist/migrate/generator/index.d.ts +1 -3
  93. package/dist/migrate/generator/index.d.ts.map +1 -1
  94. package/dist/migrate/generator/index.js +1 -3
  95. package/dist/migrate/generator/index.js.map +1 -1
  96. package/dist/migrate/generator/mongoSchemaGenerator.d.ts +29 -3
  97. package/dist/migrate/generator/mongoSchemaGenerator.d.ts.map +1 -1
  98. package/dist/migrate/generator/mongoSchemaGenerator.js +86 -4
  99. package/dist/migrate/generator/mongoSchemaGenerator.js.map +1 -1
  100. package/dist/migrate/index.d.ts +7 -8
  101. package/dist/migrate/index.d.ts.map +1 -1
  102. package/dist/migrate/index.js +11 -9
  103. package/dist/migrate/index.js.map +1 -1
  104. package/dist/migrate/introspection/baseSqlIntrospector.d.ts +28 -0
  105. package/dist/migrate/introspection/baseSqlIntrospector.d.ts.map +1 -0
  106. package/dist/migrate/introspection/baseSqlIntrospector.js +135 -0
  107. package/dist/migrate/introspection/baseSqlIntrospector.js.map +1 -0
  108. package/dist/migrate/introspection/mongoIntrospector.d.ts +6 -0
  109. package/dist/migrate/introspection/mongoIntrospector.d.ts.map +1 -1
  110. package/dist/migrate/introspection/mongoIntrospector.js +54 -0
  111. package/dist/migrate/introspection/mongoIntrospector.js.map +1 -1
  112. package/dist/migrate/introspection/mysqlIntrospector.d.ts +2 -1
  113. package/dist/migrate/introspection/mysqlIntrospector.d.ts.map +1 -1
  114. package/dist/migrate/introspection/mysqlIntrospector.js +8 -6
  115. package/dist/migrate/introspection/mysqlIntrospector.js.map +1 -1
  116. package/dist/migrate/introspection/postgresIntrospector.d.ts +2 -1
  117. package/dist/migrate/introspection/postgresIntrospector.d.ts.map +1 -1
  118. package/dist/migrate/introspection/postgresIntrospector.js +3 -1
  119. package/dist/migrate/introspection/postgresIntrospector.js.map +1 -1
  120. package/dist/migrate/introspection/sqliteIntrospector.d.ts +2 -2
  121. package/dist/migrate/introspection/sqliteIntrospector.d.ts.map +1 -1
  122. package/dist/migrate/introspection/sqliteIntrospector.js +3 -4
  123. package/dist/migrate/introspection/sqliteIntrospector.js.map +1 -1
  124. package/dist/migrate/migrator.d.ts +29 -0
  125. package/dist/migrate/migrator.d.ts.map +1 -1
  126. package/dist/migrate/migrator.js +31 -23
  127. package/dist/migrate/migrator.js.map +1 -1
  128. package/dist/migrate/schemaGenerator.d.ts +72 -22
  129. package/dist/migrate/schemaGenerator.d.ts.map +1 -1
  130. package/dist/migrate/schemaGenerator.js +385 -153
  131. package/dist/migrate/schemaGenerator.js.map +1 -1
  132. package/dist/migrate/sync/index.d.ts +7 -0
  133. package/dist/migrate/sync/index.d.ts.map +1 -0
  134. package/dist/migrate/sync/index.js +7 -0
  135. package/dist/migrate/sync/index.js.map +1 -0
  136. package/dist/migrate/sync/schemaSync.d.ts +132 -0
  137. package/dist/migrate/sync/schemaSync.d.ts.map +1 -0
  138. package/dist/migrate/sync/schemaSync.js +260 -0
  139. package/dist/migrate/sync/schemaSync.js.map +1 -0
  140. package/dist/mongo/mongoDialect.d.ts +2 -1
  141. package/dist/mongo/mongoDialect.d.ts.map +1 -1
  142. package/dist/mongo/mongoDialect.js +3 -0
  143. package/dist/mongo/mongoDialect.js.map +1 -1
  144. package/dist/mysql/mysqlDialect.d.ts +2 -0
  145. package/dist/mysql/mysqlDialect.d.ts.map +1 -1
  146. package/dist/mysql/mysqlDialect.js +3 -0
  147. package/dist/mysql/mysqlDialect.js.map +1 -1
  148. package/dist/postgres/postgresDialect.js +1 -1
  149. package/dist/postgres/postgresDialect.js.map +1 -1
  150. package/dist/schema/canonicalType.d.ts +42 -0
  151. package/dist/schema/canonicalType.d.ts.map +1 -0
  152. package/dist/schema/canonicalType.js +524 -0
  153. package/dist/schema/canonicalType.js.map +1 -0
  154. package/dist/schema/index.d.ts +28 -0
  155. package/dist/schema/index.d.ts.map +1 -0
  156. package/dist/schema/index.js +29 -0
  157. package/dist/schema/index.js.map +1 -0
  158. package/dist/schema/schemaAST.d.ts +155 -0
  159. package/dist/schema/schemaAST.d.ts.map +1 -0
  160. package/dist/schema/schemaAST.js +496 -0
  161. package/dist/schema/schemaAST.js.map +1 -0
  162. package/dist/schema/schemaASTBuilder.d.ts +58 -0
  163. package/dist/schema/schemaASTBuilder.d.ts.map +1 -0
  164. package/dist/schema/schemaASTBuilder.js +193 -0
  165. package/dist/schema/schemaASTBuilder.js.map +1 -0
  166. package/dist/schema/schemaASTDiffer.d.ts +84 -0
  167. package/dist/schema/schemaASTDiffer.d.ts.map +1 -0
  168. package/dist/schema/schemaASTDiffer.js +431 -0
  169. package/dist/schema/schemaASTDiffer.js.map +1 -0
  170. package/dist/schema/types.d.ts +347 -0
  171. package/dist/schema/types.d.ts.map +1 -0
  172. package/dist/schema/types.js +11 -0
  173. package/dist/schema/types.js.map +1 -0
  174. package/dist/sqlite/sqliteDialect.js +1 -1
  175. package/dist/sqlite/sqliteDialect.js.map +1 -1
  176. package/dist/sqlite/sqliteQuerierPool.js.map +1 -1
  177. package/dist/type/config.d.ts +6 -0
  178. package/dist/type/config.d.ts.map +1 -1
  179. package/dist/type/entity.d.ts +24 -0
  180. package/dist/type/entity.d.ts.map +1 -1
  181. package/dist/type/migration.d.ts +50 -4
  182. package/dist/type/migration.d.ts.map +1 -1
  183. package/dist/util/field.util.d.ts +0 -1
  184. package/dist/util/field.util.d.ts.map +1 -1
  185. package/dist/util/field.util.js +8 -2
  186. package/dist/util/field.util.js.map +1 -1
  187. package/dist/util/logger.d.ts.map +1 -1
  188. package/dist/util/logger.js +2 -1
  189. package/dist/util/logger.js.map +1 -1
  190. package/dist/util/string.util.d.ts +24 -0
  191. package/dist/util/string.util.d.ts.map +1 -1
  192. package/dist/util/string.util.js +57 -0
  193. package/dist/util/string.util.js.map +1 -1
  194. package/package.json +2 -2
  195. package/dist/migrate/generator/mysqlSchemaGenerator.d.ts +0 -15
  196. package/dist/migrate/generator/mysqlSchemaGenerator.d.ts.map +0 -1
  197. package/dist/migrate/generator/mysqlSchemaGenerator.js +0 -88
  198. package/dist/migrate/generator/mysqlSchemaGenerator.js.map +0 -1
  199. package/dist/migrate/generator/postgresSchemaGenerator.d.ts +0 -19
  200. package/dist/migrate/generator/postgresSchemaGenerator.d.ts.map +0 -1
  201. package/dist/migrate/generator/postgresSchemaGenerator.js +0 -115
  202. package/dist/migrate/generator/postgresSchemaGenerator.js.map +0 -1
  203. package/dist/migrate/generator/sqliteSchemaGenerator.d.ts +0 -16
  204. package/dist/migrate/generator/sqliteSchemaGenerator.d.ts.map +0 -1
  205. package/dist/migrate/generator/sqliteSchemaGenerator.js +0 -74
  206. package/dist/migrate/generator/sqliteSchemaGenerator.js.map +0 -1
  207. package/dist/migrate/type.d.ts +0 -2
  208. package/dist/migrate/type.d.ts.map +0 -1
  209. package/dist/migrate/type.js +0 -2
  210. package/dist/migrate/type.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -3,7 +3,7 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
- ## [3.7.13](https://github.com/rogerpadilla/uql/compare/@uql/core@3.7.12...@uql/core@3.7.13) (2026-01-07)
6
+ ## [3.8.1](https://github.com/rogerpadilla/uql/compare/@uql/core@3.8.0...@uql/core@3.8.1) (2026-01-08)
7
7
 
8
8
  **Note:** Version bump only for package @uql/core
9
9
 
@@ -17,7 +17,16 @@ All notable changes to this project will be documented in this file. Please add
17
17
 
18
18
  date format is [yyyy-mm-dd]
19
19
 
20
- ## [3.7.13] - 2026-01-06
20
+ ## [3.8.0] - 2026-01-08
21
+ ### Schema Sync System & AST Engine
22
+ - **Schema AST Feature**: Introduced a revolutionary **Schema AST (Abstract Syntax Tree)** engine that treats the database schema as a graph. This enables features like **Circular Dependency Detection** and automatic topological sorting for `CREATE`/`DROP` operations, solving complex schema edge cases that simple list-based approaches cannot handle.
23
+ - **Smart Relation Detection**: When scaffolding entities from an existing database (`generate:from-db`), UQL now automatically infers **OneToOne** and **ManyToMany** relationships by analyzing foreign key structures and naming conventions (e.g., `user_id` -> `User` entity), significantly reducing manual boilerplate.
24
+ - **Drift Detection**: Added the `drift:check` command to detect discrepancies between your TypeScript entities and the actual database schema. It reports critical issues (missing tables, risk of data truncation) and warnings (missing indexes) to ensure production safety.
25
+ - **Bidirectional Index Sync**: Indexes are now fully synchronized in both directions. `@Field({ index: true })` definitions are pushed to the database, and existing database indexes are reflected in generated entity files.
26
+ - **Unified Migration Builder API**: Refactored the migration builder to use a cohesive **Options Object** API (e.g., `t.string('email', { length: 255, unique: true })`). This replaces the old positional argument style, aligning strictly with the `@Field` decorator options for a consistent developer experience.
27
+ - **Refactored Generators**: Consolidated `SqlSchemaGenerator` and `MongoSchemaGenerator` into a unified architecture, sharing core logic for simpler maintenance and better type safety.
28
+
29
+ ## [3.7.14] - 2026-01-06
21
30
  ### Documentation
22
31
  - **README Refinement**: Improved docs about new Migrations feature.
23
32
 
package/README.md CHANGED
@@ -40,12 +40,13 @@ const users = await querier.findMany(User, {
40
40
  | **[Context-Aware Queries](https://uql.app/querying/relations)** | Deep type-safety for operators and [relations](https://uql.app/querying/relations) at any depth. |
41
41
  | **Serializable JSON** | 100% valid JSON queries for easy transport over HTTP/Websockets. |
42
42
  | **Unified Dialects** | Write once, run anywhere: PostgreSQL, MySQL, SQLite, MongoDB, and more. |
43
- | **Naming Strategies** | Pluggable system to translate between TypeScript `camelCase` and database `snake_case`. |
43
+ | **[Naming Strategies](https://uql.app/naming-strategy)** | Pluggable system to translate between TypeScript `camelCase` and database `snake_case`. |
44
44
  | **Smart SQL Engine** | Optimized sub-queries, placeholders ($1, $2), and minimal SQL generation via `QueryContext`. |
45
45
  | **Thread-Safe by Design** | Centralized task queue and `@Serialized()` decorator prevent race conditions. |
46
- | **Declarative Transactions** | Standard `@Transactional()` and `@InjectQuerier()` decorators for NestJS/DI. |
46
+ | **[Declarative Transactions](https://www.uql.app/transactions-declarative)** | Standard `@Transactional()` and `@InjectQuerier()` decorators for NestJS/DI. |
47
47
  | **[Modern & Versatile](https://uql.app/entities/virtual-fields)** | **Pure ESM**, high-res timing, [Soft-delete](https://uql.app/entities/soft-delete), and **Vector/JSONB/JSON** support. |
48
- | **Structured Logging** | Professional-grade monitoring with slow-query detection and colored output. |
48
+ | **[Database Migrations](https://www.uql.app/migrations)** | Built-in [Entity-First synchronization](https://uql.app/migrations#3-entity-first-synchronization-development) and a robust CLI for version-controlled schema evolution. |
49
+ | **[Logging & Monitoring](https://www.uql.app/logging)** | Professional-grade monitoring with slow-query detection and colored output. |
49
50
 
50
51
   
51
52
 
@@ -364,13 +365,14 @@ export default {
364
365
 
365
366
  ### 2. Manage via CLI
366
367
 
367
-
368
368
  Use the CLI to manage your database schema evolution.
369
369
 
370
370
  | Command | Description |
371
371
  | :--- | :--- |
372
372
  | `generate <name>` | Creates an empty timestamped file for **manual** SQL migrations (e.g., data backfills). |
373
373
  | `generate:entities <name>` | **Auto-generates** a migration by diffing your entities against the current DB schema. |
374
+ | `generate:from-db` | **Scaffolds Entities** from an existing database. Includes **Smart Relation Detection**. |
375
+ | `drift:check` | **Drift Detection**: Compares your defined entities against the actual database schema and reports discrepancies. |
374
376
  | `up` | Applies all pending migrations. |
375
377
  | `down` | Rolls back the last applied migration batch. |
376
378
  | `status` | Shows which migrations have been executed and which are pending. |
@@ -387,11 +389,11 @@ npx uql-migrate generate:entities add_profile_table
387
389
  # 3. Apply changes
388
390
  npx uql-migrate up
389
391
 
390
- # 4. Revert changes if needed
391
- npx uql-migrate down
392
+ # 4. Check for schema drift (Production Safety)
393
+ npx uql-migrate drift:check
392
394
 
393
- # 5. Run with custom config
394
- npx uql-migrate up --config ./configs/uql.config.ts
395
+ # 5. Scaffold entities from an existing DB (Legacy Adoption)
396
+ npx uql-migrate generate:from-db --output ./src/entities
395
397
  ```
396
398
 
397
399
  > **Bun Users**: If your `uql.config.ts` uses TypeScript path aliases (e.g., `~app/...`), run migrations with the `--bun` flag to ensure proper resolution:
@@ -404,6 +406,12 @@ npx uql-migrate up --config ./configs/uql.config.ts
404
406
 
405
407
  Keep your schema in sync without manual migrations. It is **Safe by Default**: In safe mode (default), it strictly **adds** new tables and columns but **blocks** any destructive operations (column drops or type alterations) to prevent data loss. It provides **Transparent Feedback** by logging detailed warnings for any blocked changes, so you know exactly what remains to be migrated manually.
406
408
 
409
+ **New Capabilities (v3.8+):**
410
+
411
+ * **Schema AST Engine**: Uses a graph-based representation of your schema for 100% accurate diffing, handling circular dependencies and correct topological sort orders for table creation/dropping.
412
+ * **Smart Relation Detection**: When generating entities from an existing DB, UQL automatically detects relationships (OneToOne, ManyToMany) via foreign key structures and naming conventions (`user_id` -> `User`).
413
+ * **Bidirectional Index Sync**: Indexes defined in `@Field({ index: true })` or `@Index()` are synced to the DB, and indexes found in the DB are reflected in generated entities.
414
+
407
415
  > **Important**: For `autoSync` to detect your entities, they must be **loaded** (imported) before calling `autoSync`.
408
416
 
409
417
  **Using Your Config (Recommended)**
@@ -32,11 +32,11 @@ var _dec, _dec1, _dec2, _dec3, _dec4, _dec5, _dec6, /**
32
32
  * `onDelete` callback allows to specify which field will be used when deleting/querying this entity.
33
33
  */ _init_deletedAt, _dec42, _initClass8, _BaseEntity7, _dec43, _dec44, _dec45, _dec46, _init_name7, _init_categoryId1, _init_category1, _init_deletedAt1, _dec47, _initClass9, _BaseEntity8, _dec48, _dec49, _dec50, _init_name8, _init_address, _init_description4, _dec51, _initClass10, _BaseEntity9, _dec52, _dec53, _dec54, _dec55, _dec56, _dec57, _dec58, _dec59, _dec60, _dec61, _dec62, _dec63, _dec64, _dec65, _dec66, _init_name9, _init_description5, _init_code, _init_buyLedgerAccountId, _init_buyLedgerAccount, _init_saleLedgerAccountId, _init_saleLedgerAccount, _init_taxId, _init_tax, _init_measureUnitId, _init_measureUnit, _init_salePrice, _init_inventoryable, _init_tags, _init_tagsCount, _dec67, _initClass11, _BaseEntity10, _dec68, _dec69, _dec70, _init_name10, _init_items, _init_itemsCount, _dec71, _initClass12, _dec72, _dec73, _dec74, _init_id2, _init_itemId, _init_tagId, _dec75, _initClass13, _BaseEntity11, _dec76, _dec77, _dec78, _init_itemAdjustments, _init_date, _init_description6, _dec79, _initClass14, _BaseEntity12, _dec80, _dec81, _dec82, _dec83, _dec84, _dec85, _dec86, _dec87, _init_itemId1, _init_item, _init_number, _init_buyPrice, _init_storehouseId, _init_storehouse, _init_inventoryAdjustmentId, _init_inventoryAdjustment;
34
34
  _dec = Id(), _dec1 = Field({
35
- reference: ()=>_Company
35
+ references: ()=>_Company
36
36
  }), _dec2 = ManyToOne({
37
37
  entity: ()=>_Company
38
38
  }), _dec3 = Field({
39
- reference: ()=>_User
39
+ references: ()=>_User
40
40
  }), _dec4 = ManyToOne({
41
41
  entity: ()=>_User
42
42
  }), _dec5 = Field({
@@ -243,7 +243,7 @@ class UserWithNonUpdatableId {
243
243
  }
244
244
  let _LedgerAccount;
245
245
  _dec23 = Entity(), _dec24 = Field(), _dec25 = Field(), _dec26 = Field({
246
- reference: ()=>_LedgerAccount
246
+ references: ()=>_LedgerAccount
247
247
  }), _dec27 = ManyToOne();
248
248
  class LedgerAccount extends (_BaseEntity3 = BaseEntity) {
249
249
  static{
@@ -314,7 +314,7 @@ class TaxCategory extends (_BaseEntity4 = BaseEntity) {
314
314
  }
315
315
  let _Tax;
316
316
  _dec32 = Entity(), _dec33 = Field(), _dec34 = Field(), _dec35 = Field({
317
- reference: ()=>_TaxCategory
317
+ references: ()=>_TaxCategory
318
318
  }), _dec36 = ManyToOne(), _dec37 = Field();
319
319
  class Tax extends (_BaseEntity5 = BaseEntity) {
320
320
  static{
@@ -397,7 +397,7 @@ let _MeasureUnit;
397
397
  _dec42 = Entity({
398
398
  softDelete: true
399
399
  }), _dec43 = Field(), _dec44 = Field({
400
- reference: ()=>_MeasureUnitCategory
400
+ references: ()=>_MeasureUnitCategory
401
401
  }), _dec45 = ManyToOne({
402
402
  cascade: 'persist'
403
403
  }), _dec46 = Field({
@@ -470,13 +470,13 @@ class Storehouse extends (_BaseEntity8 = BaseEntity) {
470
470
  }
471
471
  let _Item;
472
472
  _dec51 = Entity(), _dec52 = Field(), _dec53 = Field(), _dec54 = Field(), _dec55 = Field({
473
- reference: ()=>_LedgerAccount
473
+ references: ()=>_LedgerAccount
474
474
  }), _dec56 = ManyToOne(), _dec57 = Field({
475
- reference: ()=>_LedgerAccount
475
+ references: ()=>_LedgerAccount
476
476
  }), _dec58 = ManyToOne(), _dec59 = Field({
477
- reference: ()=>_Tax
477
+ references: ()=>_Tax
478
478
  }), _dec60 = ManyToOne(), _dec61 = Field({
479
- reference: ()=>_MeasureUnit
479
+ references: ()=>_MeasureUnit
480
480
  }), _dec62 = ManyToOne(), _dec63 = Field(), _dec64 = Field(), _dec65 = ManyToMany({
481
481
  entity: ()=>_Tag,
482
482
  through: ()=>_ItemTag,
@@ -640,9 +640,9 @@ class Tag extends (_BaseEntity10 = BaseEntity) {
640
640
  }
641
641
  let _ItemTag;
642
642
  _dec71 = Entity(), _dec72 = Id(), _dec73 = Field({
643
- reference: ()=>_Item
643
+ references: ()=>_Item
644
644
  }), _dec74 = Field({
645
- reference: ()=>_Tag
645
+ references: ()=>_Tag
646
646
  });
647
647
  class ItemTag {
648
648
  static{
@@ -712,11 +712,11 @@ class InventoryAdjustment extends (_BaseEntity11 = BaseEntity) {
712
712
  }
713
713
  let _ItemAdjustment;
714
714
  _dec79 = Entity(), _dec80 = Field({
715
- reference: ()=>_Item
715
+ references: ()=>_Item
716
716
  }), _dec81 = ManyToOne(), _dec82 = Field(), _dec83 = Field(), _dec84 = Field({
717
- reference: ()=>_Storehouse
717
+ references: ()=>_Storehouse
718
718
  }), _dec85 = ManyToOne(), _dec86 = Field({
719
- reference: ()=>_InventoryAdjustment
719
+ references: ()=>_InventoryAdjustment
720
720
  }), _dec87 = ManyToOne();
721
721
  class ItemAdjustment extends (_BaseEntity12 = BaseEntity) {
722
722
  static{
@@ -879,7 +879,8 @@ function fillInverseSideRelations(relOpts) {
879
879
  function fillThroughRelations(entity) {
880
880
  const meta = ensureMeta(entity);
881
881
  meta.relations = getKeys(meta.fields).reduce((relations, key)=>{
882
- const { reference } = meta.fields[key];
882
+ const field = meta.fields[key];
883
+ const reference = field.references ?? field.reference;
883
884
  if (reference) {
884
885
  const relEntity = reference();
885
886
  const relMeta = ensureMeta(relEntity);