metal-orm 1.0.42 → 1.0.44

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 (122) hide show
  1. package/README.md +195 -37
  2. package/dist/index.cjs +1014 -538
  3. package/dist/index.cjs.map +1 -1
  4. package/dist/index.d.cts +1267 -371
  5. package/dist/index.d.ts +1267 -371
  6. package/dist/index.js +1012 -536
  7. package/dist/index.js.map +1 -1
  8. package/package.json +8 -2
  9. package/scripts/run-eslint.mjs +34 -0
  10. package/src/codegen/typescript.ts +32 -15
  11. package/src/core/ast/adapters.ts +8 -2
  12. package/src/core/ast/builders.ts +105 -76
  13. package/src/core/ast/expression-builders.ts +430 -392
  14. package/src/core/ast/expression-nodes.ts +14 -5
  15. package/src/core/ast/expression-visitor.ts +56 -14
  16. package/src/core/ast/helpers.ts +23 -0
  17. package/src/core/ast/join-node.ts +18 -2
  18. package/src/core/ast/query.ts +6 -6
  19. package/src/core/ast/window-functions.ts +10 -2
  20. package/src/core/ddl/dialects/base-schema-dialect.ts +37 -4
  21. package/src/core/ddl/dialects/index.ts +1 -0
  22. package/src/core/ddl/dialects/mssql-schema-dialect.ts +5 -0
  23. package/src/core/ddl/dialects/mysql-schema-dialect.ts +3 -0
  24. package/src/core/ddl/dialects/postgres-schema-dialect.ts +14 -1
  25. package/src/core/ddl/dialects/render-reference.test.ts +69 -0
  26. package/src/core/ddl/dialects/sqlite-schema-dialect.ts +10 -0
  27. package/src/core/ddl/introspect/catalogs/index.ts +1 -0
  28. package/src/core/ddl/introspect/catalogs/postgres.ts +2 -0
  29. package/src/core/ddl/introspect/context.ts +6 -0
  30. package/src/core/ddl/introspect/functions/postgres.ts +13 -0
  31. package/src/core/ddl/introspect/mssql.ts +53 -8
  32. package/src/core/ddl/introspect/mysql.ts +32 -6
  33. package/src/core/ddl/introspect/postgres.ts +102 -34
  34. package/src/core/ddl/introspect/registry.ts +14 -0
  35. package/src/core/ddl/introspect/run-select.ts +19 -4
  36. package/src/core/ddl/introspect/sqlite.ts +78 -11
  37. package/src/core/ddl/introspect/types.ts +0 -1
  38. package/src/core/ddl/introspect/utils.ts +21 -3
  39. package/src/core/ddl/naming-strategy.ts +6 -0
  40. package/src/core/ddl/schema-dialect.ts +20 -6
  41. package/src/core/ddl/schema-diff.ts +22 -0
  42. package/src/core/ddl/schema-generator.ts +26 -12
  43. package/src/core/ddl/schema-plan-executor.ts +6 -0
  44. package/src/core/ddl/schema-types.ts +6 -0
  45. package/src/core/ddl/sql-writing.ts +4 -4
  46. package/src/core/dialect/abstract.ts +19 -7
  47. package/src/core/dialect/base/function-table-formatter.ts +3 -2
  48. package/src/core/dialect/base/join-compiler.ts +5 -3
  49. package/src/core/dialect/base/returning-strategy.ts +1 -0
  50. package/src/core/dialect/base/sql-dialect.ts +3 -3
  51. package/src/core/dialect/mssql/functions.ts +24 -25
  52. package/src/core/dialect/mssql/index.ts +1 -4
  53. package/src/core/dialect/mysql/functions.ts +0 -1
  54. package/src/core/dialect/postgres/functions.ts +33 -34
  55. package/src/core/dialect/postgres/index.ts +1 -0
  56. package/src/core/dialect/sqlite/functions.ts +18 -19
  57. package/src/core/dialect/sqlite/index.ts +2 -0
  58. package/src/core/execution/db-executor.ts +1 -1
  59. package/src/core/execution/executors/mysql-executor.ts +2 -2
  60. package/src/core/execution/executors/postgres-executor.ts +1 -1
  61. package/src/core/execution/pooling/pool.ts +12 -5
  62. package/src/core/functions/datetime.ts +58 -34
  63. package/src/core/functions/numeric.ts +96 -31
  64. package/src/core/functions/standard-strategy.ts +35 -0
  65. package/src/core/functions/text.ts +84 -23
  66. package/src/core/functions/types.ts +23 -8
  67. package/src/decorators/bootstrap.ts +42 -11
  68. package/src/decorators/column.ts +20 -11
  69. package/src/decorators/decorator-metadata.ts +30 -9
  70. package/src/decorators/entity.ts +29 -5
  71. package/src/decorators/index.ts +3 -0
  72. package/src/decorators/relations.ts +34 -11
  73. package/src/orm/als.ts +34 -9
  74. package/src/orm/entity-context.ts +62 -8
  75. package/src/orm/entity-meta.ts +8 -8
  76. package/src/orm/entity-metadata.ts +131 -16
  77. package/src/orm/entity.ts +28 -29
  78. package/src/orm/execute.ts +19 -4
  79. package/src/orm/hydration.ts +42 -39
  80. package/src/orm/identity-map.ts +1 -1
  81. package/src/orm/lazy-batch.ts +74 -104
  82. package/src/orm/orm-session.ts +24 -23
  83. package/src/orm/orm.ts +2 -5
  84. package/src/orm/relation-change-processor.ts +12 -11
  85. package/src/orm/relations/belongs-to.ts +11 -11
  86. package/src/orm/relations/has-many.ts +54 -10
  87. package/src/orm/relations/has-one.ts +8 -7
  88. package/src/orm/relations/many-to-many.ts +13 -13
  89. package/src/orm/runtime-types.ts +4 -4
  90. package/src/orm/save-graph.ts +31 -25
  91. package/src/orm/unit-of-work.ts +17 -17
  92. package/src/query/index.ts +74 -0
  93. package/src/query/target.ts +46 -0
  94. package/src/query-builder/delete-query-state.ts +30 -0
  95. package/src/query-builder/delete.ts +64 -18
  96. package/src/query-builder/hydration-manager.ts +52 -5
  97. package/src/query-builder/insert-query-state.ts +30 -0
  98. package/src/query-builder/insert.ts +58 -10
  99. package/src/query-builder/query-ast-service.ts +7 -2
  100. package/src/query-builder/query-resolution.ts +78 -0
  101. package/src/query-builder/raw-column-parser.ts +7 -1
  102. package/src/query-builder/relation-alias.ts +7 -0
  103. package/src/query-builder/relation-conditions.ts +61 -48
  104. package/src/query-builder/relation-service.ts +68 -63
  105. package/src/query-builder/relation-utils.ts +3 -0
  106. package/src/query-builder/select/cte-facet.ts +40 -0
  107. package/src/query-builder/select/from-facet.ts +80 -0
  108. package/src/query-builder/select/join-facet.ts +62 -0
  109. package/src/query-builder/select/predicate-facet.ts +103 -0
  110. package/src/query-builder/select/projection-facet.ts +69 -0
  111. package/src/query-builder/select/relation-facet.ts +81 -0
  112. package/src/query-builder/select/setop-facet.ts +36 -0
  113. package/src/query-builder/select-helpers.ts +15 -2
  114. package/src/query-builder/select-query-builder-deps.ts +19 -1
  115. package/src/query-builder/select-query-state.ts +2 -1
  116. package/src/query-builder/select.ts +795 -1163
  117. package/src/query-builder/update-query-state.ts +52 -0
  118. package/src/query-builder/update.ts +69 -18
  119. package/src/schema/column.ts +26 -26
  120. package/src/schema/table-guards.ts +31 -0
  121. package/src/schema/table.ts +47 -18
  122. package/src/schema/types.ts +22 -22
@@ -4,6 +4,12 @@ import { getTableDefFromEntity } from '../decorators/bootstrap.js';
4
4
 
5
5
  /**
6
6
  * Build a typed selection map from a TableDef.
7
+ * @template TTable - The table definition type
8
+ * @template K - The column name keys
9
+ * @param table - The table definition to select columns from
10
+ * @param cols - Column names to include in the selection
11
+ * @returns A typed record mapping column names to their definitions
12
+ * @throws Error if a specified column is not found on the table
7
13
  */
8
14
  export function sel<
9
15
  TTable extends TableDef,
@@ -22,12 +28,19 @@ export function sel<
22
28
  return selection;
23
29
  }
24
30
 
25
- type Ctor<T> = { new (...args: any[]): T };
31
+ type Ctor<T> = { new(...args: unknown[]): T };
26
32
 
27
33
  /**
28
34
  * Build a typed selection map from an entity constructor.
35
+ * @template TEntity - The entity type
36
+ * @template K - The property name keys
37
+ * @param entity - The entity constructor to get table definition from
38
+ * @param props - Property names to include in the selection
39
+ * @returns A record mapping property names to their column definitions
40
+ * @throws Error if no table definition is registered for the entity
41
+ * @throws Error if a specified property is not found as a column
29
42
  */
30
- export function esel<TEntity, K extends keyof TEntity & string>(
43
+ export function esel<TEntity extends object, K extends keyof TEntity & string>(
31
44
  entity: Ctor<TEntity>,
32
45
  ...props: K[]
33
46
  ): Record<K, ColumnDef> {
@@ -4,6 +4,8 @@ import { HydrationManager } from './hydration-manager.js';
4
4
  import { HydrationPlanner } from './hydration-planner.js';
5
5
  import { QueryAstService } from './query-ast-service.js';
6
6
  import { RelationService } from './relation-service.js';
7
+ import { ColumnSelector } from './column-selector.js';
8
+ import { RelationManager } from './relation-manager.js';
7
9
 
8
10
  /**
9
11
  * Context for query building operations
@@ -60,6 +62,18 @@ export interface SelectQueryBuilderDependencies {
60
62
  state: SelectQueryState,
61
63
  hydration: HydrationManager
62
64
  ) => RelationService;
65
+ /**
66
+ * Creates a new column selector
67
+ * @param env - Query builder environment
68
+ * @returns New column selector
69
+ */
70
+ createColumnSelector: (env: SelectQueryBuilderEnvironment) => ColumnSelector;
71
+ /**
72
+ * Creates a new relation manager
73
+ * @param env - Query builder environment
74
+ * @returns New relation manager
75
+ */
76
+ createRelationManager: (env: SelectQueryBuilderEnvironment) => RelationManager;
63
77
  }
64
78
 
65
79
  /**
@@ -99,13 +113,17 @@ export const resolveSelectQueryBuilderDependencies = (
99
113
  const createRelationService =
100
114
  overrides.createRelationService ??
101
115
  ((table, state, hydration) => new RelationService(table, state, hydration, createQueryAstService));
116
+ const createColumnSelector = overrides.createColumnSelector ?? (env => new ColumnSelector(env));
117
+ const createRelationManager = overrides.createRelationManager ?? (env => new RelationManager(env));
102
118
 
103
119
  return {
104
120
  createState: overrides.createState ?? (table => new SelectQueryState(table)),
105
121
  createHydration,
106
122
  createHydrationPlanner,
107
123
  createQueryAstService,
108
- createRelationService
124
+ createRelationService,
125
+ createColumnSelector,
126
+ createRelationManager
109
127
  };
110
128
  };
111
129
 
@@ -7,6 +7,7 @@ import {
7
7
  TableSourceNode,
8
8
  OrderingTerm
9
9
  } from '../core/ast/query.js';
10
+ import { createTableNode } from '../core/ast/builders.js';
10
11
  import {
11
12
  ColumnNode,
12
13
  ExpressionNode,
@@ -49,7 +50,7 @@ export class SelectQueryState {
49
50
  this.table = table;
50
51
  this.ast = ast ?? {
51
52
  type: 'SelectQuery',
52
- from: { type: 'Table', name: table.name },
53
+ from: createTableNode(table),
53
54
  columns: [],
54
55
  joins: []
55
56
  };