metal-orm 1.1.11 → 1.1.16

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 (182) hide show
  1. package/README.md +758 -769
  2. package/dist/index.cjs.map +1 -1
  3. package/dist/index.js.map +1 -1
  4. package/package.json +100 -96
  5. package/scripts/generate-entities/schema.mjs +122 -122
  6. package/scripts/generate-entities/tree-detection.mjs +92 -92
  7. package/scripts/inflection/pt-br.mjs +468 -468
  8. package/scripts/run-eslint.mjs +33 -34
  9. package/scripts/show-sql-seed.sql +102 -0
  10. package/scripts/show-sql.mjs +321 -325
  11. package/src/codegen/naming-strategy.ts +54 -54
  12. package/src/codegen/typescript.ts +482 -482
  13. package/src/core/ast/adapters.ts +1 -1
  14. package/src/core/ast/builders.ts +123 -123
  15. package/src/core/ast/expression-builders.ts +745 -745
  16. package/src/core/ast/expression-nodes.ts +304 -304
  17. package/src/core/ast/expression-visitor.ts +212 -212
  18. package/src/core/ast/expression.ts +20 -20
  19. package/src/core/ast/helpers.ts +14 -14
  20. package/src/core/ast/join.ts +18 -18
  21. package/src/core/ast/query.ts +200 -200
  22. package/src/core/ddl/dialects/base-schema-dialect.ts +1 -1
  23. package/src/core/ddl/dialects/mssql-schema-dialect.ts +1 -1
  24. package/src/core/ddl/dialects/mysql-schema-dialect.ts +1 -1
  25. package/src/core/ddl/dialects/postgres-schema-dialect.ts +1 -1
  26. package/src/core/ddl/dialects/render-reference.test.ts +70 -70
  27. package/src/core/ddl/dialects/sqlite-schema-dialect.ts +1 -1
  28. package/src/core/ddl/introspect/catalogs/index.ts +5 -5
  29. package/src/core/ddl/introspect/catalogs/postgres.ts +146 -146
  30. package/src/core/ddl/introspect/context.ts +15 -15
  31. package/src/core/ddl/introspect/functions/postgres.ts +35 -35
  32. package/src/core/ddl/introspect/registry.ts +40 -40
  33. package/src/core/ddl/introspect/run-select.ts +35 -35
  34. package/src/core/ddl/introspect/utils.ts +56 -56
  35. package/src/core/ddl/naming-strategy.ts +16 -16
  36. package/src/core/ddl/schema-dialect.ts +56 -56
  37. package/src/core/ddl/schema-diff.ts +234 -234
  38. package/src/core/ddl/schema-generator.ts +1 -1
  39. package/src/core/ddl/schema-introspect.ts +25 -25
  40. package/src/core/ddl/sql-writing.ts +171 -171
  41. package/src/core/dialect/abstract.ts +541 -541
  42. package/src/core/dialect/base/cte-compiler.ts +33 -33
  43. package/src/core/dialect/base/function-table-formatter.ts +103 -103
  44. package/src/core/dialect/base/groupby-compiler.ts +21 -21
  45. package/src/core/dialect/base/join-compiler.ts +25 -25
  46. package/src/core/dialect/base/orderby-compiler.ts +35 -35
  47. package/src/core/dialect/base/pagination-strategy.ts +32 -32
  48. package/src/core/dialect/base/returning-strategy.ts +57 -57
  49. package/src/core/dialect/base/sql-dialect.ts +294 -294
  50. package/src/core/dialect/dialect-factory.ts +91 -91
  51. package/src/core/dialect/mssql/functions.ts +120 -120
  52. package/src/core/dialect/mssql/index.ts +317 -317
  53. package/src/core/dialect/mysql/functions.ts +103 -103
  54. package/src/core/dialect/mysql/index.ts +105 -105
  55. package/src/core/dialect/postgres/functions.ts +108 -108
  56. package/src/core/dialect/postgres/index.ts +91 -91
  57. package/src/core/dialect/sqlite/functions.ts +129 -129
  58. package/src/core/dialect/sqlite/index.ts +67 -67
  59. package/src/core/driver/database-driver.ts +19 -19
  60. package/src/core/driver/mssql-driver.ts +23 -23
  61. package/src/core/driver/mysql-driver.ts +23 -23
  62. package/src/core/driver/postgres-driver.ts +23 -23
  63. package/src/core/driver/sqlite-driver.ts +23 -23
  64. package/src/core/execution/db-executor.ts +92 -92
  65. package/src/core/execution/executors/better-sqlite3-executor.ts +90 -90
  66. package/src/core/execution/executors/mssql-executor.ts +184 -184
  67. package/src/core/execution/executors/mysql-executor.ts +88 -88
  68. package/src/core/execution/executors/postgres-executor.ts +26 -26
  69. package/src/core/execution/executors/sqlite-executor.ts +42 -42
  70. package/src/core/execution/pooling/pool-types.ts +30 -30
  71. package/src/core/execution/pooling/pool.ts +275 -275
  72. package/src/core/functions/array.ts +35 -35
  73. package/src/core/functions/control-flow.ts +79 -79
  74. package/src/core/functions/datetime.ts +237 -237
  75. package/src/core/functions/json.ts +70 -70
  76. package/src/core/functions/numeric.ts +297 -297
  77. package/src/core/functions/text.ts +334 -334
  78. package/src/core/functions/types.ts +33 -33
  79. package/src/core/hydration/types.ts +51 -51
  80. package/src/core/sql/sql-operator-config.ts +39 -39
  81. package/src/core/sql/sql.ts +152 -152
  82. package/src/decorators/column-decorator.ts +87 -87
  83. package/src/decorators/decorator-metadata.ts +143 -143
  84. package/src/decorators/entity.ts +93 -93
  85. package/src/decorators/index.ts +39 -39
  86. package/src/decorators/relations.ts +231 -231
  87. package/src/decorators/transformers/built-in/string-transformers.ts +231 -231
  88. package/src/decorators/transformers/transformer-decorators.ts +134 -134
  89. package/src/decorators/transformers/transformer-executor.ts +171 -171
  90. package/src/decorators/transformers/transformer-metadata.ts +73 -73
  91. package/src/decorators/validators/built-in/br-cep-validator.ts +55 -55
  92. package/src/decorators/validators/built-in/br-cnpj-validator.ts +105 -105
  93. package/src/decorators/validators/built-in/br-cpf-validator.ts +103 -103
  94. package/src/decorators/validators/country-validator-registry.ts +64 -64
  95. package/src/decorators/validators/country-validators-decorators.ts +203 -203
  96. package/src/decorators/validators/country-validators.ts +105 -105
  97. package/src/decorators/validators/validator-metadata.ts +59 -59
  98. package/src/dto/dto-types.ts +226 -226
  99. package/src/dto/filter-types.ts +141 -141
  100. package/src/dto/index.ts +95 -95
  101. package/src/dto/openapi/generators/base.ts +29 -29
  102. package/src/dto/openapi/generators/column.ts +37 -37
  103. package/src/dto/openapi/generators/dto.ts +91 -91
  104. package/src/dto/openapi/generators/filter.ts +75 -75
  105. package/src/dto/openapi/generators/nested-dto.ts +618 -618
  106. package/src/dto/openapi/generators/pagination.ts +111 -111
  107. package/src/dto/openapi/generators/relation-filter.ts +228 -228
  108. package/src/dto/openapi/index.ts +12 -12
  109. package/src/dto/openapi/types.ts +101 -101
  110. package/src/dto/openapi/utilities.ts +95 -95
  111. package/src/dto/pagination-utils.ts +150 -150
  112. package/src/dto/transform.ts +197 -197
  113. package/src/index.ts +86 -86
  114. package/src/orm/als.ts +58 -58
  115. package/src/orm/domain-event-bus.ts +119 -119
  116. package/src/orm/entity-context.ts +86 -86
  117. package/src/orm/entity-materializer.ts +159 -159
  118. package/src/orm/entity-meta.ts +97 -97
  119. package/src/orm/entity-registry.ts +39 -39
  120. package/src/orm/entity-relation-cache.ts +39 -39
  121. package/src/orm/execute.ts +194 -194
  122. package/src/orm/execution-context.ts +18 -18
  123. package/src/orm/hydration-context.ts +26 -26
  124. package/src/orm/hydration.ts +112 -112
  125. package/src/orm/identity-map.ts +61 -61
  126. package/src/orm/interceptor-pipeline.ts +16 -16
  127. package/src/orm/lazy-batch/belongs-to-many.ts +119 -119
  128. package/src/orm/lazy-batch/belongs-to.ts +108 -108
  129. package/src/orm/lazy-batch/has-many.ts +69 -69
  130. package/src/orm/lazy-batch/has-one.ts +68 -68
  131. package/src/orm/lazy-batch/shared.ts +125 -125
  132. package/src/orm/orm-session.ts +620 -620
  133. package/src/orm/orm.ts +34 -34
  134. package/src/orm/pooled-executor-factory.ts +121 -121
  135. package/src/orm/query-logger.ts +40 -40
  136. package/src/orm/relation-change-processor.ts +420 -420
  137. package/src/orm/relations/belongs-to.ts +143 -143
  138. package/src/orm/relations/has-many.ts +204 -204
  139. package/src/orm/relations/has-one.ts +174 -174
  140. package/src/orm/relations/many-to-many.ts +288 -288
  141. package/src/orm/relations/morph-many.ts +156 -156
  142. package/src/orm/relations/morph-one.ts +151 -151
  143. package/src/orm/relations/morph-to.ts +162 -162
  144. package/src/orm/runtime-types.ts +92 -92
  145. package/src/orm/save-graph.ts +561 -561
  146. package/src/orm/transaction-runner.ts +24 -24
  147. package/src/orm/unit-of-work.ts +426 -426
  148. package/src/query/index.ts +69 -69
  149. package/src/query/target.ts +46 -46
  150. package/src/query-builder/column-selector.ts +81 -81
  151. package/src/query-builder/delete.ts +141 -141
  152. package/src/query-builder/insert-query-state.ts +149 -149
  153. package/src/query-builder/insert.ts +117 -117
  154. package/src/query-builder/query-ast-service.ts +287 -287
  155. package/src/query-builder/query-resolution.ts +78 -78
  156. package/src/query-builder/raw-column-parser.ts +38 -38
  157. package/src/query-builder/relation-filter-utils.ts +153 -153
  158. package/src/query-builder/relation-join-planner.ts +10 -10
  159. package/src/query-builder/relation-manager.ts +87 -87
  160. package/src/query-builder/relation-projection-helper.ts +102 -102
  161. package/src/query-builder/relation-types.ts +9 -9
  162. package/src/query-builder/relation-utils.ts +15 -15
  163. package/src/query-builder/select/cte-facet.ts +40 -40
  164. package/src/query-builder/select/from-facet.ts +80 -80
  165. package/src/query-builder/select/join-facet.ts +62 -62
  166. package/src/query-builder/select/predicate-facet.ts +104 -104
  167. package/src/query-builder/select/projection-facet.ts +70 -70
  168. package/src/query-builder/select/relation-facet.ts +81 -81
  169. package/src/query-builder/select/setop-facet.ts +36 -36
  170. package/src/query-builder/select-helpers.ts +1 -1
  171. package/src/query-builder/select-query-builder-deps.ts +130 -130
  172. package/src/query-builder/select-query-state.ts +207 -207
  173. package/src/query-builder/update.ts +151 -151
  174. package/src/schema/column-types.ts +322 -322
  175. package/src/schema/table-guards.ts +37 -37
  176. package/src/schema/table.ts +281 -281
  177. package/src/tree/index.ts +13 -13
  178. package/src/tree/nested-set-strategy.ts +545 -545
  179. package/src/tree/tree-decorator.ts +397 -397
  180. package/src/tree/tree-manager.ts +754 -754
  181. package/src/tree/tree-query.ts +427 -427
  182. package/src/tree/tree-types.ts +299 -299
package/src/orm/als.ts CHANGED
@@ -1,58 +1,58 @@
1
- // In a real Node environment: import { AsyncLocalStorage } from 'node:async_hooks';
2
-
3
- /**
4
- * Browser-compatible implementation of AsyncLocalStorage.
5
- * Provides a simple in-memory store for browser environments while maintaining
6
- * Node.js AsyncLocalStorage API compatibility.
7
- *
8
- * @template T Type of the data stored in the async context
9
- */
10
- export class AsyncLocalStorage<T> {
11
- private store: T | undefined;
12
-
13
- /**
14
- * Executes a callback function within a context containing the specified store value.
15
- * The store value is only available during the callback's execution and is automatically
16
- * cleared afterward.
17
- *
18
- * @param store - The context value to make available during callback execution
19
- * @param callback - Function to execute with the store value available
20
- * @returns Result of the callback function execution
21
- *
22
- * @example
23
- * ```
24
- * const als = new AsyncLocalStorage<number>();
25
- * als.run(42, () => {
26
- * console.log(als.getStore()); // Outputs: 42
27
- * });
28
- * ```
29
- */
30
- run<R>(store: T, callback: () => R): R {
31
- this.store = store;
32
- try {
33
- return callback();
34
- } finally {
35
- this.store = undefined;
36
- }
37
- }
38
-
39
- /**
40
- * Retrieves the current store value from the async context.
41
- * Returns undefined if called outside of a `run()` callback execution.
42
- *
43
- * @returns Current store value or undefined if no context exists
44
- *
45
- * @example
46
- * ```
47
- * const als = new AsyncLocalStorage<string>();
48
- * console.log(als.getStore()); // Outputs: undefined
49
- *
50
- * als.run('hello', () => {
51
- * console.log(als.getStore()); // Outputs: 'hello'
52
- * });
53
- * ```
54
- */
55
- getStore(): T | undefined {
56
- return this.store;
57
- }
58
- }
1
+ // In a real Node environment: import { AsyncLocalStorage } from 'node:async_hooks';
2
+
3
+ /**
4
+ * Browser-compatible implementation of AsyncLocalStorage.
5
+ * Provides a simple in-memory store for browser environments while maintaining
6
+ * Node.js AsyncLocalStorage API compatibility.
7
+ *
8
+ * @template T Type of the data stored in the async context
9
+ */
10
+ export class AsyncLocalStorage<T> {
11
+ private store: T | undefined;
12
+
13
+ /**
14
+ * Executes a callback function within a context containing the specified store value.
15
+ * The store value is only available during the callback's execution and is automatically
16
+ * cleared afterward.
17
+ *
18
+ * @param store - The context value to make available during callback execution
19
+ * @param callback - Function to execute with the store value available
20
+ * @returns Result of the callback function execution
21
+ *
22
+ * @example
23
+ * ```
24
+ * const als = new AsyncLocalStorage<number>();
25
+ * als.run(42, () => {
26
+ * console.log(als.getStore()); // Outputs: 42
27
+ * });
28
+ * ```
29
+ */
30
+ run<R>(store: T, callback: () => R): R {
31
+ this.store = store;
32
+ try {
33
+ return callback();
34
+ } finally {
35
+ this.store = undefined;
36
+ }
37
+ }
38
+
39
+ /**
40
+ * Retrieves the current store value from the async context.
41
+ * Returns undefined if called outside of a `run()` callback execution.
42
+ *
43
+ * @returns Current store value or undefined if no context exists
44
+ *
45
+ * @example
46
+ * ```
47
+ * const als = new AsyncLocalStorage<string>();
48
+ * console.log(als.getStore()); // Outputs: undefined
49
+ *
50
+ * als.run('hello', () => {
51
+ * console.log(als.getStore()); // Outputs: 'hello'
52
+ * });
53
+ * ```
54
+ */
55
+ getStore(): T | undefined {
56
+ return this.store;
57
+ }
58
+ }
@@ -1,119 +1,119 @@
1
- import type { DomainEvent, HasDomainEvents, TrackedEntity } from './runtime-types.js';
2
-
3
- /**
4
- * Extracts domain events of a specific type.
5
- * @template E - The domain event type
6
- * @template TType - The specific event type
7
- */
8
- type EventOfType<E extends DomainEvent, TType extends E['type']> =
9
- Extract<E, { type: TType }>;
10
-
11
- /**
12
- * Domain event handler function.
13
- * @template E - The domain event type
14
- * @template Context - The context type
15
- * @param event - The domain event
16
- * @param ctx - The context
17
- */
18
- export type DomainEventHandler<E extends DomainEvent, Context> =
19
- (event: E, ctx: Context) => Promise<void> | void;
20
-
21
- /**
22
- * Initial handlers for domain events.
23
- * @template E - The domain event type
24
- * @template Context - The context type
25
- */
26
- export type InitialHandlers<E extends DomainEvent, Context> = {
27
- [K in E['type']]?: DomainEventHandler<EventOfType<E, K>, Context>[];
28
- };
29
-
30
- /**
31
- * Domain event bus for managing and dispatching domain events.
32
- * @template E - The domain event type
33
- * @template Context - The context type
34
- */
35
- export class DomainEventBus<E extends DomainEvent, Context> {
36
- private readonly handlers = new Map<E['type'], DomainEventHandler<E, Context>[]>();
37
-
38
- /**
39
- * Creates a new DomainEventBus instance.
40
- * @param initialHandlers - Optional initial event handlers
41
- */
42
- constructor(initialHandlers?: InitialHandlers<E, Context>) {
43
- if (initialHandlers) {
44
- for (const key in initialHandlers) {
45
- const type = key as E['type'];
46
- const list = initialHandlers[type] ?? [];
47
- this.handlers.set(type, [...(list as DomainEventHandler<E, Context>[])]);
48
- }
49
- }
50
- }
51
-
52
- /**
53
- * Registers an event handler for a specific event type.
54
- * @template TType - The event type
55
- * @param type - The event type
56
- * @param handler - The event handler
57
- */
58
- on<TType extends E['type']>(
59
- type: TType,
60
- handler: DomainEventHandler<EventOfType<E, TType>, Context>
61
- ): void {
62
- const key = type as E['type'];
63
- const existing = this.handlers.get(key) ?? [];
64
- existing.push(handler as unknown as DomainEventHandler<E, Context>);
65
- this.handlers.set(key, existing);
66
- }
67
-
68
- /**
69
- * Registers an event handler for a specific event type (alias for on).
70
- * @template TType - The event type
71
- * @param type - The event type
72
- * @param handler - The event handler
73
- */
74
- register<TType extends E['type']>(
75
- type: TType,
76
- handler: DomainEventHandler<EventOfType<E, TType>, Context>
77
- ): void {
78
- this.on(type, handler);
79
- }
80
-
81
- /**
82
- * Dispatches domain events for tracked entities.
83
- * @param trackedEntities - Iterable of tracked entities
84
- * @param ctx - The context to pass to handlers
85
- */
86
- async dispatch(trackedEntities: Iterable<TrackedEntity>, ctx: Context): Promise<void> {
87
- for (const tracked of trackedEntities) {
88
- const entity = tracked.entity as HasDomainEvents<E>;
89
- if (!entity.domainEvents?.length) continue;
90
-
91
- for (const event of entity.domainEvents) {
92
- const handlers = this.handlers.get(event.type as E['type']);
93
- if (!handlers?.length) continue;
94
-
95
- for (const handler of handlers) {
96
- await handler(event, ctx);
97
- }
98
- }
99
-
100
- entity.domainEvents = [];
101
- }
102
- }
103
- }
104
-
105
- /**
106
- * Adds a domain event to an entity.
107
- * @template E - The domain event type
108
- * @param entity - The entity to add the event to
109
- * @param event - The domain event to add
110
- */
111
- export const addDomainEvent = <E extends DomainEvent>(
112
- entity: HasDomainEvents<E>,
113
- event: E
114
- ): void => {
115
- if (!entity.domainEvents) {
116
- entity.domainEvents = [];
117
- }
118
- entity.domainEvents.push(event);
119
- };
1
+ import type { DomainEvent, HasDomainEvents, TrackedEntity } from './runtime-types.js';
2
+
3
+ /**
4
+ * Extracts domain events of a specific type.
5
+ * @template E - The domain event type
6
+ * @template TType - The specific event type
7
+ */
8
+ type EventOfType<E extends DomainEvent, TType extends E['type']> =
9
+ Extract<E, { type: TType }>;
10
+
11
+ /**
12
+ * Domain event handler function.
13
+ * @template E - The domain event type
14
+ * @template Context - The context type
15
+ * @param event - The domain event
16
+ * @param ctx - The context
17
+ */
18
+ export type DomainEventHandler<E extends DomainEvent, Context> =
19
+ (event: E, ctx: Context) => Promise<void> | void;
20
+
21
+ /**
22
+ * Initial handlers for domain events.
23
+ * @template E - The domain event type
24
+ * @template Context - The context type
25
+ */
26
+ export type InitialHandlers<E extends DomainEvent, Context> = {
27
+ [K in E['type']]?: DomainEventHandler<EventOfType<E, K>, Context>[];
28
+ };
29
+
30
+ /**
31
+ * Domain event bus for managing and dispatching domain events.
32
+ * @template E - The domain event type
33
+ * @template Context - The context type
34
+ */
35
+ export class DomainEventBus<E extends DomainEvent, Context> {
36
+ private readonly handlers = new Map<E['type'], DomainEventHandler<E, Context>[]>();
37
+
38
+ /**
39
+ * Creates a new DomainEventBus instance.
40
+ * @param initialHandlers - Optional initial event handlers
41
+ */
42
+ constructor(initialHandlers?: InitialHandlers<E, Context>) {
43
+ if (initialHandlers) {
44
+ for (const key in initialHandlers) {
45
+ const type = key as E['type'];
46
+ const list = initialHandlers[type] ?? [];
47
+ this.handlers.set(type, [...(list as DomainEventHandler<E, Context>[])]);
48
+ }
49
+ }
50
+ }
51
+
52
+ /**
53
+ * Registers an event handler for a specific event type.
54
+ * @template TType - The event type
55
+ * @param type - The event type
56
+ * @param handler - The event handler
57
+ */
58
+ on<TType extends E['type']>(
59
+ type: TType,
60
+ handler: DomainEventHandler<EventOfType<E, TType>, Context>
61
+ ): void {
62
+ const key = type as E['type'];
63
+ const existing = this.handlers.get(key) ?? [];
64
+ existing.push(handler as unknown as DomainEventHandler<E, Context>);
65
+ this.handlers.set(key, existing);
66
+ }
67
+
68
+ /**
69
+ * Registers an event handler for a specific event type (alias for on).
70
+ * @template TType - The event type
71
+ * @param type - The event type
72
+ * @param handler - The event handler
73
+ */
74
+ register<TType extends E['type']>(
75
+ type: TType,
76
+ handler: DomainEventHandler<EventOfType<E, TType>, Context>
77
+ ): void {
78
+ this.on(type, handler);
79
+ }
80
+
81
+ /**
82
+ * Dispatches domain events for tracked entities.
83
+ * @param trackedEntities - Iterable of tracked entities
84
+ * @param ctx - The context to pass to handlers
85
+ */
86
+ async dispatch(trackedEntities: Iterable<TrackedEntity>, ctx: Context): Promise<void> {
87
+ for (const tracked of trackedEntities) {
88
+ const entity = tracked.entity as HasDomainEvents<E>;
89
+ if (!entity.domainEvents?.length) continue;
90
+
91
+ for (const event of entity.domainEvents) {
92
+ const handlers = this.handlers.get(event.type as E['type']);
93
+ if (!handlers?.length) continue;
94
+
95
+ for (const handler of handlers) {
96
+ await handler(event, ctx);
97
+ }
98
+ }
99
+
100
+ entity.domainEvents = [];
101
+ }
102
+ }
103
+ }
104
+
105
+ /**
106
+ * Adds a domain event to an entity.
107
+ * @template E - The domain event type
108
+ * @param entity - The entity to add the event to
109
+ * @param event - The domain event to add
110
+ */
111
+ export const addDomainEvent = <E extends DomainEvent>(
112
+ entity: HasDomainEvents<E>,
113
+ event: E
114
+ ): void => {
115
+ if (!entity.domainEvents) {
116
+ entity.domainEvents = [];
117
+ }
118
+ entity.domainEvents.push(event);
119
+ };
@@ -1,86 +1,86 @@
1
- import { Dialect } from '../core/dialect/abstract.js';
2
- import type { DbExecutor } from '../core/execution/db-executor.js';
3
- import { TableDef } from '../schema/table.js';
4
- import { RelationDef } from '../schema/relation.js';
5
- import { RelationChange, RelationKey, TrackedEntity } from './runtime-types.js';
6
-
7
- export type PrimaryKey = string | number;
8
-
9
- /**
10
- * Interface for entity context providing entity tracking and management.
11
- */
12
- export interface EntityContext {
13
- /** The database dialect */
14
- dialect: Dialect;
15
- /** The database executor */
16
- executor: DbExecutor;
17
-
18
- /**
19
- * Gets an entity by table and primary key.
20
- * @param table - The table definition
21
- * @param pk - The primary key value
22
- * @returns The entity or undefined
23
- */
24
- getEntity(table: TableDef, pk: PrimaryKey): object | undefined;
25
-
26
- /**
27
- * Sets an entity in the context.
28
- * @param table - The table definition
29
- * @param pk - The primary key value
30
- * @param entity - The entity to set
31
- */
32
- setEntity(table: TableDef, pk: PrimaryKey, entity: object): void;
33
-
34
- /**
35
- * Tracks a new entity.
36
- * @param table - The table definition
37
- * @param entity - The new entity
38
- * @param pk - Optional primary key
39
- */
40
- trackNew(table: TableDef, entity: object, pk?: PrimaryKey): void;
41
-
42
- /**
43
- * Tracks a managed entity.
44
- * @param table - The table definition
45
- * @param pk - The primary key
46
- * @param entity - The managed entity
47
- */
48
- trackManaged(table: TableDef, pk: PrimaryKey, entity: object): void;
49
-
50
- /**
51
- * Marks an entity as dirty.
52
- * @param entity - The entity to mark
53
- */
54
- markDirty(entity: object): void;
55
-
56
- /**
57
- * Marks an entity as removed.
58
- * @param entity - The entity to mark
59
- */
60
- markRemoved(entity: object): void;
61
-
62
- /**
63
- * Gets all tracked entities for a table.
64
- * @param table - The table definition
65
- * @returns Array of tracked entities
66
- */
67
- getEntitiesForTable(table: TableDef): TrackedEntity[];
68
-
69
- /**
70
- * Registers a relation change.
71
- * @param root - The root entity
72
- * @param relationKey - The relation key
73
- * @param rootTable - The root table definition
74
- * @param relationName - The relation name
75
- * @param relation - The relation definition
76
- * @param change - The relation change
77
- */
78
- registerRelationChange(
79
- root: unknown,
80
- relationKey: RelationKey,
81
- rootTable: TableDef,
82
- relationName: string,
83
- relation: RelationDef,
84
- change: RelationChange<unknown>
85
- ): void;
86
- }
1
+ import { Dialect } from '../core/dialect/abstract.js';
2
+ import type { DbExecutor } from '../core/execution/db-executor.js';
3
+ import { TableDef } from '../schema/table.js';
4
+ import { RelationDef } from '../schema/relation.js';
5
+ import { RelationChange, RelationKey, TrackedEntity } from './runtime-types.js';
6
+
7
+ export type PrimaryKey = string | number;
8
+
9
+ /**
10
+ * Interface for entity context providing entity tracking and management.
11
+ */
12
+ export interface EntityContext {
13
+ /** The database dialect */
14
+ dialect: Dialect;
15
+ /** The database executor */
16
+ executor: DbExecutor;
17
+
18
+ /**
19
+ * Gets an entity by table and primary key.
20
+ * @param table - The table definition
21
+ * @param pk - The primary key value
22
+ * @returns The entity or undefined
23
+ */
24
+ getEntity(table: TableDef, pk: PrimaryKey): object | undefined;
25
+
26
+ /**
27
+ * Sets an entity in the context.
28
+ * @param table - The table definition
29
+ * @param pk - The primary key value
30
+ * @param entity - The entity to set
31
+ */
32
+ setEntity(table: TableDef, pk: PrimaryKey, entity: object): void;
33
+
34
+ /**
35
+ * Tracks a new entity.
36
+ * @param table - The table definition
37
+ * @param entity - The new entity
38
+ * @param pk - Optional primary key
39
+ */
40
+ trackNew(table: TableDef, entity: object, pk?: PrimaryKey): void;
41
+
42
+ /**
43
+ * Tracks a managed entity.
44
+ * @param table - The table definition
45
+ * @param pk - The primary key
46
+ * @param entity - The managed entity
47
+ */
48
+ trackManaged(table: TableDef, pk: PrimaryKey, entity: object): void;
49
+
50
+ /**
51
+ * Marks an entity as dirty.
52
+ * @param entity - The entity to mark
53
+ */
54
+ markDirty(entity: object): void;
55
+
56
+ /**
57
+ * Marks an entity as removed.
58
+ * @param entity - The entity to mark
59
+ */
60
+ markRemoved(entity: object): void;
61
+
62
+ /**
63
+ * Gets all tracked entities for a table.
64
+ * @param table - The table definition
65
+ * @returns Array of tracked entities
66
+ */
67
+ getEntitiesForTable(table: TableDef): TrackedEntity[];
68
+
69
+ /**
70
+ * Registers a relation change.
71
+ * @param root - The root entity
72
+ * @param relationKey - The relation key
73
+ * @param rootTable - The root table definition
74
+ * @param relationName - The relation name
75
+ * @param relation - The relation definition
76
+ * @param change - The relation change
77
+ */
78
+ registerRelationChange(
79
+ root: unknown,
80
+ relationKey: RelationKey,
81
+ rootTable: TableDef,
82
+ relationName: string,
83
+ relation: RelationDef,
84
+ change: RelationChange<unknown>
85
+ ): void;
86
+ }