metal-orm 1.1.10 → 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 (192) hide show
  1. package/README.md +758 -769
  2. package/dist/index.cjs +106 -43
  3. package/dist/index.cjs.map +1 -1
  4. package/dist/index.d.cts +5 -5
  5. package/dist/index.d.ts +5 -5
  6. package/dist/index.js +106 -43
  7. package/dist/index.js.map +1 -1
  8. package/package.json +100 -96
  9. package/scripts/generate-entities/render.mjs +21 -12
  10. package/scripts/generate-entities/schema.mjs +209 -195
  11. package/scripts/generate-entities/tree-detection.mjs +159 -153
  12. package/scripts/inflection/pt-br.mjs +468 -468
  13. package/scripts/run-eslint.mjs +33 -34
  14. package/scripts/show-sql-seed.sql +102 -0
  15. package/scripts/show-sql.mjs +321 -325
  16. package/src/bulk/bulk-delete-executor.ts +3 -5
  17. package/src/bulk/bulk-insert-executor.ts +7 -7
  18. package/src/bulk/bulk-update-executor.ts +2 -2
  19. package/src/bulk/bulk-upsert-executor.ts +5 -7
  20. package/src/codegen/naming-strategy.ts +54 -54
  21. package/src/codegen/typescript.ts +482 -482
  22. package/src/core/ast/adapters.ts +1 -1
  23. package/src/core/ast/builders.ts +123 -123
  24. package/src/core/ast/expression-builders.ts +745 -745
  25. package/src/core/ast/expression-nodes.ts +304 -304
  26. package/src/core/ast/expression-visitor.ts +212 -212
  27. package/src/core/ast/expression.ts +20 -20
  28. package/src/core/ast/helpers.ts +14 -14
  29. package/src/core/ast/join.ts +18 -18
  30. package/src/core/ast/query.ts +200 -200
  31. package/src/core/ddl/dialects/base-schema-dialect.ts +1 -1
  32. package/src/core/ddl/dialects/mssql-schema-dialect.ts +1 -1
  33. package/src/core/ddl/dialects/mysql-schema-dialect.ts +1 -1
  34. package/src/core/ddl/dialects/postgres-schema-dialect.ts +1 -1
  35. package/src/core/ddl/dialects/render-reference.test.ts +70 -70
  36. package/src/core/ddl/dialects/sqlite-schema-dialect.ts +1 -1
  37. package/src/core/ddl/introspect/catalogs/index.ts +5 -5
  38. package/src/core/ddl/introspect/catalogs/postgres.ts +146 -146
  39. package/src/core/ddl/introspect/context.ts +15 -15
  40. package/src/core/ddl/introspect/functions/postgres.ts +35 -35
  41. package/src/core/ddl/introspect/mysql.ts +113 -36
  42. package/src/core/ddl/introspect/registry.ts +40 -40
  43. package/src/core/ddl/introspect/run-select.ts +35 -35
  44. package/src/core/ddl/introspect/utils.ts +56 -56
  45. package/src/core/ddl/naming-strategy.ts +16 -16
  46. package/src/core/ddl/schema-dialect.ts +56 -56
  47. package/src/core/ddl/schema-diff.ts +234 -234
  48. package/src/core/ddl/schema-generator.ts +1 -1
  49. package/src/core/ddl/schema-introspect.ts +25 -25
  50. package/src/core/ddl/sql-writing.ts +171 -171
  51. package/src/core/dialect/abstract.ts +541 -541
  52. package/src/core/dialect/base/cte-compiler.ts +33 -33
  53. package/src/core/dialect/base/function-table-formatter.ts +103 -103
  54. package/src/core/dialect/base/groupby-compiler.ts +21 -21
  55. package/src/core/dialect/base/join-compiler.ts +25 -25
  56. package/src/core/dialect/base/orderby-compiler.ts +35 -35
  57. package/src/core/dialect/base/pagination-strategy.ts +32 -32
  58. package/src/core/dialect/base/returning-strategy.ts +57 -57
  59. package/src/core/dialect/base/sql-dialect.ts +294 -294
  60. package/src/core/dialect/dialect-factory.ts +91 -91
  61. package/src/core/dialect/mssql/functions.ts +120 -120
  62. package/src/core/dialect/mssql/index.ts +317 -317
  63. package/src/core/dialect/mysql/functions.ts +103 -103
  64. package/src/core/dialect/mysql/index.ts +105 -105
  65. package/src/core/dialect/postgres/functions.ts +108 -108
  66. package/src/core/dialect/postgres/index.ts +91 -91
  67. package/src/core/dialect/sqlite/functions.ts +129 -129
  68. package/src/core/dialect/sqlite/index.ts +67 -67
  69. package/src/core/driver/database-driver.ts +19 -19
  70. package/src/core/driver/mssql-driver.ts +23 -23
  71. package/src/core/driver/mysql-driver.ts +23 -23
  72. package/src/core/driver/postgres-driver.ts +23 -23
  73. package/src/core/driver/sqlite-driver.ts +23 -23
  74. package/src/core/execution/db-executor.ts +92 -92
  75. package/src/core/execution/executors/better-sqlite3-executor.ts +94 -94
  76. package/src/core/execution/executors/mssql-executor.ts +184 -184
  77. package/src/core/execution/executors/mysql-executor.ts +88 -88
  78. package/src/core/execution/executors/postgres-executor.ts +26 -26
  79. package/src/core/execution/executors/sqlite-executor.ts +42 -42
  80. package/src/core/execution/pooling/pool-types.ts +30 -30
  81. package/src/core/execution/pooling/pool.ts +275 -275
  82. package/src/core/functions/array.ts +35 -35
  83. package/src/core/functions/control-flow.ts +79 -79
  84. package/src/core/functions/datetime.ts +237 -237
  85. package/src/core/functions/json.ts +70 -70
  86. package/src/core/functions/numeric.ts +297 -297
  87. package/src/core/functions/text.ts +334 -334
  88. package/src/core/functions/types.ts +33 -33
  89. package/src/core/hydration/types.ts +51 -51
  90. package/src/core/sql/sql-operator-config.ts +39 -39
  91. package/src/core/sql/sql.ts +152 -152
  92. package/src/decorators/column-decorator.ts +87 -87
  93. package/src/decorators/decorator-metadata.ts +143 -143
  94. package/src/decorators/entity.ts +93 -93
  95. package/src/decorators/index.ts +39 -39
  96. package/src/decorators/relations.ts +231 -231
  97. package/src/decorators/transformers/built-in/string-transformers.ts +231 -231
  98. package/src/decorators/transformers/transformer-decorators.ts +134 -134
  99. package/src/decorators/transformers/transformer-executor.ts +171 -171
  100. package/src/decorators/transformers/transformer-metadata.ts +73 -73
  101. package/src/decorators/validators/built-in/br-cep-validator.ts +55 -55
  102. package/src/decorators/validators/built-in/br-cnpj-validator.ts +105 -105
  103. package/src/decorators/validators/built-in/br-cpf-validator.ts +103 -103
  104. package/src/decorators/validators/country-validator-registry.ts +64 -64
  105. package/src/decorators/validators/country-validators-decorators.ts +203 -203
  106. package/src/decorators/validators/country-validators.ts +105 -105
  107. package/src/decorators/validators/validator-metadata.ts +59 -59
  108. package/src/dto/dto-types.ts +226 -226
  109. package/src/dto/filter-types.ts +141 -141
  110. package/src/dto/index.ts +95 -95
  111. package/src/dto/openapi/generators/base.ts +29 -29
  112. package/src/dto/openapi/generators/column.ts +37 -37
  113. package/src/dto/openapi/generators/dto.ts +91 -91
  114. package/src/dto/openapi/generators/filter.ts +75 -75
  115. package/src/dto/openapi/generators/nested-dto.ts +618 -618
  116. package/src/dto/openapi/generators/pagination.ts +111 -111
  117. package/src/dto/openapi/generators/relation-filter.ts +228 -228
  118. package/src/dto/openapi/index.ts +12 -12
  119. package/src/dto/openapi/types.ts +101 -101
  120. package/src/dto/openapi/utilities.ts +95 -95
  121. package/src/dto/pagination-utils.ts +150 -150
  122. package/src/dto/transform.ts +197 -197
  123. package/src/index.ts +86 -86
  124. package/src/orm/als.ts +58 -58
  125. package/src/orm/domain-event-bus.ts +119 -119
  126. package/src/orm/entity-context.ts +86 -86
  127. package/src/orm/entity-materializer.ts +159 -159
  128. package/src/orm/entity-meta.ts +97 -97
  129. package/src/orm/entity-registry.ts +39 -39
  130. package/src/orm/entity-relation-cache.ts +39 -39
  131. package/src/orm/execute.ts +194 -194
  132. package/src/orm/execution-context.ts +18 -18
  133. package/src/orm/hydration-context.ts +26 -26
  134. package/src/orm/hydration.ts +112 -112
  135. package/src/orm/identity-map.ts +61 -61
  136. package/src/orm/interceptor-pipeline.ts +16 -16
  137. package/src/orm/lazy-batch/belongs-to-many.ts +119 -119
  138. package/src/orm/lazy-batch/belongs-to.ts +108 -108
  139. package/src/orm/lazy-batch/has-many.ts +69 -69
  140. package/src/orm/lazy-batch/has-one.ts +68 -68
  141. package/src/orm/lazy-batch/shared.ts +125 -125
  142. package/src/orm/orm-session.ts +620 -620
  143. package/src/orm/orm.ts +34 -34
  144. package/src/orm/pooled-executor-factory.ts +121 -121
  145. package/src/orm/query-logger.ts +40 -40
  146. package/src/orm/relation-change-processor.ts +420 -420
  147. package/src/orm/relations/belongs-to.ts +143 -143
  148. package/src/orm/relations/has-many.ts +204 -204
  149. package/src/orm/relations/has-one.ts +174 -174
  150. package/src/orm/relations/many-to-many.ts +288 -288
  151. package/src/orm/relations/morph-many.ts +156 -156
  152. package/src/orm/relations/morph-one.ts +151 -151
  153. package/src/orm/relations/morph-to.ts +162 -162
  154. package/src/orm/runtime-types.ts +92 -92
  155. package/src/orm/save-graph.ts +561 -561
  156. package/src/orm/transaction-runner.ts +24 -24
  157. package/src/orm/unit-of-work.ts +426 -426
  158. package/src/query/index.ts +69 -69
  159. package/src/query/target.ts +46 -46
  160. package/src/query-builder/column-selector.ts +81 -81
  161. package/src/query-builder/delete.ts +141 -141
  162. package/src/query-builder/insert-query-state.ts +149 -149
  163. package/src/query-builder/insert.ts +117 -117
  164. package/src/query-builder/query-ast-service.ts +287 -287
  165. package/src/query-builder/query-resolution.ts +78 -78
  166. package/src/query-builder/raw-column-parser.ts +38 -38
  167. package/src/query-builder/relation-filter-utils.ts +153 -153
  168. package/src/query-builder/relation-join-planner.ts +10 -10
  169. package/src/query-builder/relation-manager.ts +87 -87
  170. package/src/query-builder/relation-projection-helper.ts +102 -102
  171. package/src/query-builder/relation-types.ts +9 -9
  172. package/src/query-builder/relation-utils.ts +15 -15
  173. package/src/query-builder/select/cte-facet.ts +40 -40
  174. package/src/query-builder/select/from-facet.ts +80 -80
  175. package/src/query-builder/select/join-facet.ts +62 -62
  176. package/src/query-builder/select/predicate-facet.ts +104 -104
  177. package/src/query-builder/select/projection-facet.ts +70 -70
  178. package/src/query-builder/select/relation-facet.ts +81 -81
  179. package/src/query-builder/select/setop-facet.ts +36 -36
  180. package/src/query-builder/select-helpers.ts +1 -1
  181. package/src/query-builder/select-query-builder-deps.ts +130 -130
  182. package/src/query-builder/select-query-state.ts +207 -207
  183. package/src/query-builder/update.ts +151 -151
  184. package/src/schema/column-types.ts +322 -322
  185. package/src/schema/table-guards.ts +37 -37
  186. package/src/schema/table.ts +281 -281
  187. package/src/tree/index.ts +13 -13
  188. package/src/tree/nested-set-strategy.ts +545 -545
  189. package/src/tree/tree-decorator.ts +397 -397
  190. package/src/tree/tree-manager.ts +754 -754
  191. package/src/tree/tree-query.ts +427 -427
  192. 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
+ }