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.
- package/README.md +195 -37
- package/dist/index.cjs +1014 -538
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1267 -371
- package/dist/index.d.ts +1267 -371
- package/dist/index.js +1012 -536
- package/dist/index.js.map +1 -1
- package/package.json +8 -2
- package/scripts/run-eslint.mjs +34 -0
- package/src/codegen/typescript.ts +32 -15
- package/src/core/ast/adapters.ts +8 -2
- package/src/core/ast/builders.ts +105 -76
- package/src/core/ast/expression-builders.ts +430 -392
- package/src/core/ast/expression-nodes.ts +14 -5
- package/src/core/ast/expression-visitor.ts +56 -14
- package/src/core/ast/helpers.ts +23 -0
- package/src/core/ast/join-node.ts +18 -2
- package/src/core/ast/query.ts +6 -6
- package/src/core/ast/window-functions.ts +10 -2
- package/src/core/ddl/dialects/base-schema-dialect.ts +37 -4
- package/src/core/ddl/dialects/index.ts +1 -0
- package/src/core/ddl/dialects/mssql-schema-dialect.ts +5 -0
- package/src/core/ddl/dialects/mysql-schema-dialect.ts +3 -0
- package/src/core/ddl/dialects/postgres-schema-dialect.ts +14 -1
- package/src/core/ddl/dialects/render-reference.test.ts +69 -0
- package/src/core/ddl/dialects/sqlite-schema-dialect.ts +10 -0
- package/src/core/ddl/introspect/catalogs/index.ts +1 -0
- package/src/core/ddl/introspect/catalogs/postgres.ts +2 -0
- package/src/core/ddl/introspect/context.ts +6 -0
- package/src/core/ddl/introspect/functions/postgres.ts +13 -0
- package/src/core/ddl/introspect/mssql.ts +53 -8
- package/src/core/ddl/introspect/mysql.ts +32 -6
- package/src/core/ddl/introspect/postgres.ts +102 -34
- package/src/core/ddl/introspect/registry.ts +14 -0
- package/src/core/ddl/introspect/run-select.ts +19 -4
- package/src/core/ddl/introspect/sqlite.ts +78 -11
- package/src/core/ddl/introspect/types.ts +0 -1
- package/src/core/ddl/introspect/utils.ts +21 -3
- package/src/core/ddl/naming-strategy.ts +6 -0
- package/src/core/ddl/schema-dialect.ts +20 -6
- package/src/core/ddl/schema-diff.ts +22 -0
- package/src/core/ddl/schema-generator.ts +26 -12
- package/src/core/ddl/schema-plan-executor.ts +6 -0
- package/src/core/ddl/schema-types.ts +6 -0
- package/src/core/ddl/sql-writing.ts +4 -4
- package/src/core/dialect/abstract.ts +19 -7
- package/src/core/dialect/base/function-table-formatter.ts +3 -2
- package/src/core/dialect/base/join-compiler.ts +5 -3
- package/src/core/dialect/base/returning-strategy.ts +1 -0
- package/src/core/dialect/base/sql-dialect.ts +3 -3
- package/src/core/dialect/mssql/functions.ts +24 -25
- package/src/core/dialect/mssql/index.ts +1 -4
- package/src/core/dialect/mysql/functions.ts +0 -1
- package/src/core/dialect/postgres/functions.ts +33 -34
- package/src/core/dialect/postgres/index.ts +1 -0
- package/src/core/dialect/sqlite/functions.ts +18 -19
- package/src/core/dialect/sqlite/index.ts +2 -0
- package/src/core/execution/db-executor.ts +1 -1
- package/src/core/execution/executors/mysql-executor.ts +2 -2
- package/src/core/execution/executors/postgres-executor.ts +1 -1
- package/src/core/execution/pooling/pool.ts +12 -5
- package/src/core/functions/datetime.ts +58 -34
- package/src/core/functions/numeric.ts +96 -31
- package/src/core/functions/standard-strategy.ts +35 -0
- package/src/core/functions/text.ts +84 -23
- package/src/core/functions/types.ts +23 -8
- package/src/decorators/bootstrap.ts +42 -11
- package/src/decorators/column.ts +20 -11
- package/src/decorators/decorator-metadata.ts +30 -9
- package/src/decorators/entity.ts +29 -5
- package/src/decorators/index.ts +3 -0
- package/src/decorators/relations.ts +34 -11
- package/src/orm/als.ts +34 -9
- package/src/orm/entity-context.ts +62 -8
- package/src/orm/entity-meta.ts +8 -8
- package/src/orm/entity-metadata.ts +131 -16
- package/src/orm/entity.ts +28 -29
- package/src/orm/execute.ts +19 -4
- package/src/orm/hydration.ts +42 -39
- package/src/orm/identity-map.ts +1 -1
- package/src/orm/lazy-batch.ts +74 -104
- package/src/orm/orm-session.ts +24 -23
- package/src/orm/orm.ts +2 -5
- package/src/orm/relation-change-processor.ts +12 -11
- package/src/orm/relations/belongs-to.ts +11 -11
- package/src/orm/relations/has-many.ts +54 -10
- package/src/orm/relations/has-one.ts +8 -7
- package/src/orm/relations/many-to-many.ts +13 -13
- package/src/orm/runtime-types.ts +4 -4
- package/src/orm/save-graph.ts +31 -25
- package/src/orm/unit-of-work.ts +17 -17
- package/src/query/index.ts +74 -0
- package/src/query/target.ts +46 -0
- package/src/query-builder/delete-query-state.ts +30 -0
- package/src/query-builder/delete.ts +64 -18
- package/src/query-builder/hydration-manager.ts +52 -5
- package/src/query-builder/insert-query-state.ts +30 -0
- package/src/query-builder/insert.ts +58 -10
- package/src/query-builder/query-ast-service.ts +7 -2
- package/src/query-builder/query-resolution.ts +78 -0
- package/src/query-builder/raw-column-parser.ts +7 -1
- package/src/query-builder/relation-alias.ts +7 -0
- package/src/query-builder/relation-conditions.ts +61 -48
- package/src/query-builder/relation-service.ts +68 -63
- package/src/query-builder/relation-utils.ts +3 -0
- package/src/query-builder/select/cte-facet.ts +40 -0
- package/src/query-builder/select/from-facet.ts +80 -0
- package/src/query-builder/select/join-facet.ts +62 -0
- package/src/query-builder/select/predicate-facet.ts +103 -0
- package/src/query-builder/select/projection-facet.ts +69 -0
- package/src/query-builder/select/relation-facet.ts +81 -0
- package/src/query-builder/select/setop-facet.ts +36 -0
- package/src/query-builder/select-helpers.ts +15 -2
- package/src/query-builder/select-query-builder-deps.ts +19 -1
- package/src/query-builder/select-query-state.ts +2 -1
- package/src/query-builder/select.ts +795 -1163
- package/src/query-builder/update-query-state.ts +52 -0
- package/src/query-builder/update.ts +69 -18
- package/src/schema/column.ts +26 -26
- package/src/schema/table-guards.ts +31 -0
- package/src/schema/table.ts +47 -18
- 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
|
|
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:
|
|
53
|
+
from: createTableNode(table),
|
|
53
54
|
columns: [],
|
|
54
55
|
joins: []
|
|
55
56
|
};
|