@mikro-orm/core 7.0.0-dev.21 → 7.0.0-dev.210
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/EntityManager.d.ts +99 -57
- package/EntityManager.js +302 -276
- package/MikroORM.d.ts +44 -35
- package/MikroORM.js +103 -143
- package/README.md +3 -2
- package/cache/FileCacheAdapter.d.ts +1 -1
- package/cache/FileCacheAdapter.js +8 -7
- package/cache/GeneratedCacheAdapter.d.ts +0 -1
- package/cache/GeneratedCacheAdapter.js +0 -2
- package/cache/index.d.ts +0 -1
- package/cache/index.js +0 -1
- package/connections/Connection.d.ts +16 -7
- package/connections/Connection.js +23 -14
- package/drivers/DatabaseDriver.d.ts +25 -16
- package/drivers/DatabaseDriver.js +80 -35
- package/drivers/IDatabaseDriver.d.ts +44 -17
- package/entity/BaseEntity.d.ts +2 -2
- package/entity/BaseEntity.js +0 -3
- package/entity/Collection.d.ts +94 -29
- package/entity/Collection.js +434 -97
- package/entity/EntityAssigner.d.ts +1 -1
- package/entity/EntityAssigner.js +26 -18
- package/entity/EntityFactory.d.ts +13 -1
- package/entity/EntityFactory.js +84 -53
- package/entity/EntityHelper.d.ts +2 -2
- package/entity/EntityHelper.js +35 -15
- package/entity/EntityLoader.d.ts +6 -6
- package/entity/EntityLoader.js +119 -82
- package/entity/EntityRepository.d.ts +24 -4
- package/entity/EntityRepository.js +8 -2
- package/entity/Reference.d.ts +6 -5
- package/entity/Reference.js +34 -9
- package/entity/WrappedEntity.d.ts +2 -7
- package/entity/WrappedEntity.js +3 -8
- package/entity/defineEntity.d.ts +594 -0
- package/entity/defineEntity.js +533 -0
- package/entity/index.d.ts +3 -2
- package/entity/index.js +3 -2
- package/entity/utils.d.ts +7 -0
- package/entity/utils.js +16 -4
- package/entity/validators.d.ts +11 -0
- package/entity/validators.js +65 -0
- package/enums.d.ts +21 -5
- package/enums.js +15 -1
- package/errors.d.ts +23 -9
- package/errors.js +59 -21
- package/events/EventManager.d.ts +2 -1
- package/events/EventManager.js +19 -11
- package/hydration/Hydrator.js +1 -2
- package/hydration/ObjectHydrator.d.ts +4 -4
- package/hydration/ObjectHydrator.js +52 -33
- package/index.d.ts +2 -2
- package/index.js +1 -2
- package/logging/DefaultLogger.d.ts +1 -1
- package/logging/DefaultLogger.js +1 -0
- package/logging/SimpleLogger.d.ts +1 -1
- package/logging/colors.d.ts +1 -1
- package/logging/colors.js +7 -6
- package/logging/index.d.ts +1 -0
- package/logging/index.js +1 -0
- package/logging/inspect.d.ts +2 -0
- package/logging/inspect.js +11 -0
- package/metadata/EntitySchema.d.ts +40 -23
- package/metadata/EntitySchema.js +81 -34
- package/metadata/MetadataDiscovery.d.ts +7 -10
- package/metadata/MetadataDiscovery.js +391 -331
- package/metadata/MetadataProvider.d.ts +11 -2
- package/metadata/MetadataProvider.js +46 -2
- package/metadata/MetadataStorage.d.ts +13 -11
- package/metadata/MetadataStorage.js +70 -37
- package/metadata/MetadataValidator.d.ts +17 -9
- package/metadata/MetadataValidator.js +97 -40
- package/metadata/discover-entities.d.ts +5 -0
- package/metadata/discover-entities.js +40 -0
- package/metadata/index.d.ts +1 -1
- package/metadata/index.js +1 -1
- package/metadata/types.d.ts +502 -0
- package/metadata/types.js +1 -0
- package/naming-strategy/AbstractNamingStrategy.d.ts +12 -4
- package/naming-strategy/AbstractNamingStrategy.js +14 -2
- package/naming-strategy/EntityCaseNamingStrategy.d.ts +3 -3
- package/naming-strategy/EntityCaseNamingStrategy.js +6 -5
- package/naming-strategy/MongoNamingStrategy.d.ts +3 -3
- package/naming-strategy/MongoNamingStrategy.js +6 -6
- package/naming-strategy/NamingStrategy.d.ts +24 -4
- package/naming-strategy/UnderscoreNamingStrategy.d.ts +3 -3
- package/naming-strategy/UnderscoreNamingStrategy.js +6 -6
- package/not-supported.d.ts +2 -0
- package/not-supported.js +4 -0
- package/package.json +18 -11
- package/platforms/ExceptionConverter.js +1 -1
- package/platforms/Platform.d.ts +7 -13
- package/platforms/Platform.js +20 -43
- package/serialization/EntitySerializer.d.ts +5 -0
- package/serialization/EntitySerializer.js +47 -27
- package/serialization/EntityTransformer.js +28 -18
- package/serialization/SerializationContext.d.ts +6 -6
- package/serialization/SerializationContext.js +16 -13
- package/types/ArrayType.d.ts +1 -1
- package/types/ArrayType.js +2 -3
- package/types/BigIntType.d.ts +8 -6
- package/types/BigIntType.js +1 -1
- package/types/BlobType.d.ts +0 -1
- package/types/BlobType.js +0 -3
- package/types/BooleanType.d.ts +2 -1
- package/types/BooleanType.js +3 -0
- package/types/DecimalType.d.ts +6 -4
- package/types/DecimalType.js +3 -3
- package/types/DoubleType.js +2 -2
- package/types/EnumArrayType.js +1 -2
- package/types/JsonType.d.ts +1 -1
- package/types/JsonType.js +7 -2
- package/types/TinyIntType.js +1 -1
- package/types/Type.d.ts +2 -4
- package/types/Type.js +3 -3
- package/types/Uint8ArrayType.d.ts +0 -1
- package/types/Uint8ArrayType.js +1 -4
- package/types/index.d.ts +1 -1
- package/typings.d.ts +290 -137
- package/typings.js +59 -44
- package/unit-of-work/ChangeSet.d.ts +2 -6
- package/unit-of-work/ChangeSet.js +4 -5
- package/unit-of-work/ChangeSetComputer.d.ts +1 -3
- package/unit-of-work/ChangeSetComputer.js +26 -13
- package/unit-of-work/ChangeSetPersister.d.ts +5 -4
- package/unit-of-work/ChangeSetPersister.js +70 -34
- package/unit-of-work/CommitOrderCalculator.d.ts +12 -10
- package/unit-of-work/CommitOrderCalculator.js +13 -13
- package/unit-of-work/IdentityMap.d.ts +12 -0
- package/unit-of-work/IdentityMap.js +39 -1
- package/unit-of-work/UnitOfWork.d.ts +23 -3
- package/unit-of-work/UnitOfWork.js +175 -98
- package/utils/AbstractSchemaGenerator.d.ts +5 -5
- package/utils/AbstractSchemaGenerator.js +18 -16
- package/utils/AsyncContext.d.ts +6 -0
- package/utils/AsyncContext.js +42 -0
- package/utils/Configuration.d.ts +785 -207
- package/utils/Configuration.js +147 -190
- package/utils/ConfigurationLoader.d.ts +1 -54
- package/utils/ConfigurationLoader.js +1 -352
- package/utils/Cursor.d.ts +0 -3
- package/utils/Cursor.js +27 -11
- package/utils/DataloaderUtils.d.ts +15 -5
- package/utils/DataloaderUtils.js +64 -30
- package/utils/EntityComparator.d.ts +13 -9
- package/utils/EntityComparator.js +101 -42
- package/utils/QueryHelper.d.ts +14 -6
- package/utils/QueryHelper.js +87 -25
- package/utils/RawQueryFragment.d.ts +48 -25
- package/utils/RawQueryFragment.js +66 -70
- package/utils/RequestContext.js +2 -2
- package/utils/TransactionContext.js +2 -2
- package/utils/TransactionManager.d.ts +65 -0
- package/utils/TransactionManager.js +223 -0
- package/utils/Utils.d.ts +13 -126
- package/utils/Utils.js +100 -391
- package/utils/clone.js +8 -23
- package/utils/env-vars.d.ts +7 -0
- package/utils/env-vars.js +97 -0
- package/utils/fs-utils.d.ts +32 -0
- package/utils/fs-utils.js +178 -0
- package/utils/index.d.ts +2 -1
- package/utils/index.js +2 -1
- package/utils/upsert-utils.d.ts +9 -4
- package/utils/upsert-utils.js +55 -4
- package/decorators/Check.d.ts +0 -3
- package/decorators/Check.js +0 -13
- package/decorators/CreateRequestContext.d.ts +0 -3
- package/decorators/CreateRequestContext.js +0 -32
- package/decorators/Embeddable.d.ts +0 -8
- package/decorators/Embeddable.js +0 -11
- package/decorators/Embedded.d.ts +0 -12
- package/decorators/Embedded.js +0 -18
- package/decorators/Entity.d.ts +0 -18
- package/decorators/Entity.js +0 -12
- package/decorators/Enum.d.ts +0 -9
- package/decorators/Enum.js +0 -16
- package/decorators/Filter.d.ts +0 -2
- package/decorators/Filter.js +0 -8
- package/decorators/Formula.d.ts +0 -4
- package/decorators/Formula.js +0 -15
- package/decorators/Indexed.d.ts +0 -19
- package/decorators/Indexed.js +0 -20
- package/decorators/ManyToMany.d.ts +0 -40
- package/decorators/ManyToMany.js +0 -14
- package/decorators/ManyToOne.d.ts +0 -32
- package/decorators/ManyToOne.js +0 -14
- package/decorators/OneToMany.d.ts +0 -28
- package/decorators/OneToMany.js +0 -17
- package/decorators/OneToOne.d.ts +0 -26
- package/decorators/OneToOne.js +0 -7
- package/decorators/PrimaryKey.d.ts +0 -8
- package/decorators/PrimaryKey.js +0 -20
- package/decorators/Property.d.ts +0 -250
- package/decorators/Property.js +0 -32
- package/decorators/Transactional.d.ts +0 -13
- package/decorators/Transactional.js +0 -28
- package/decorators/hooks.d.ts +0 -16
- package/decorators/hooks.js +0 -47
- package/decorators/index.d.ts +0 -17
- package/decorators/index.js +0 -17
- package/entity/ArrayCollection.d.ts +0 -116
- package/entity/ArrayCollection.js +0 -402
- package/entity/EntityValidator.d.ts +0 -19
- package/entity/EntityValidator.js +0 -150
- package/exports.d.ts +0 -24
- package/exports.js +0 -23
- package/metadata/ReflectMetadataProvider.d.ts +0 -8
- package/metadata/ReflectMetadataProvider.js +0 -44
- package/utils/resolveContextProvider.d.ts +0 -10
- package/utils/resolveContextProvider.js +0 -28
package/typings.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Transaction } from './connections/Connection.js';
|
|
2
|
-
import { type Cascade, type DeferMode, type EventType, type LoadStrategy, type PopulatePath, type QueryOrderMap, ReferenceKind } from './enums.js';
|
|
2
|
+
import { type Cascade, type DeferMode, type EmbeddedPrefixMode, type EventType, type LoadStrategy, type PopulatePath, type QueryOrderMap, ReferenceKind } from './enums.js';
|
|
3
3
|
import { type AssignOptions } from './entity/EntityAssigner.js';
|
|
4
4
|
import { type EntityIdentifier } from './entity/EntityIdentifier.js';
|
|
5
5
|
import { type EntityLoaderOptions } from './entity/EntityLoader.js';
|
|
@@ -7,7 +7,6 @@ import { type Collection } from './entity/Collection.js';
|
|
|
7
7
|
import { type EntityFactory } from './entity/EntityFactory.js';
|
|
8
8
|
import { type EntityRepository } from './entity/EntityRepository.js';
|
|
9
9
|
import { Reference, type ScalarReference } from './entity/Reference.js';
|
|
10
|
-
import type { MikroORM } from './MikroORM.js';
|
|
11
10
|
import type { SerializationContext } from './serialization/SerializationContext.js';
|
|
12
11
|
import type { SerializeOptions } from './serialization/EntitySerializer.js';
|
|
13
12
|
import type { MetadataStorage } from './metadata/MetadataStorage.js';
|
|
@@ -15,11 +14,10 @@ import type { EntitySchema } from './metadata/EntitySchema.js';
|
|
|
15
14
|
import type { Type, types } from './types/index.js';
|
|
16
15
|
import type { Platform } from './platforms/Platform.js';
|
|
17
16
|
import type { Configuration } from './utils/Configuration.js';
|
|
18
|
-
import type {
|
|
17
|
+
import type { Raw } from './utils/RawQueryFragment.js';
|
|
19
18
|
import type { EntityManager } from './EntityManager.js';
|
|
20
|
-
import type { EmbeddedPrefixMode } from './decorators/Embedded.js';
|
|
21
19
|
import type { EventSubscriber } from './events/EventSubscriber.js';
|
|
22
|
-
import type { FindOneOptions, FindOptions, LoadHint } from './drivers/IDatabaseDriver.js';
|
|
20
|
+
import type { FilterOptions, FindOneOptions, FindOptions, LoadHint } from './drivers/IDatabaseDriver.js';
|
|
23
21
|
export type Constructor<T = unknown> = new (...args: any[]) => T;
|
|
24
22
|
export type Dictionary<T = any> = {
|
|
25
23
|
[k: string]: T;
|
|
@@ -43,6 +41,60 @@ export type IsAny<T> = 0 extends (1 & T) ? true : false;
|
|
|
43
41
|
export type IsNever<T, True = true, False = false> = [T] extends [never] ? True : False;
|
|
44
42
|
export type MaybePromise<T> = T | Promise<T>;
|
|
45
43
|
export type NoInfer<T> = [T][T extends any ? 0 : never];
|
|
44
|
+
/**
|
|
45
|
+
* Structural type for matching Collection without triggering full interface evaluation.
|
|
46
|
+
* Using `T extends CollectionShape` instead of `T extends Collection<any, any>` avoids
|
|
47
|
+
* forcing TypeScript to evaluate Collection's 30+ methods, preventing instantiation explosion
|
|
48
|
+
* (~133k → ~2k instantiations).
|
|
49
|
+
*
|
|
50
|
+
* Usage:
|
|
51
|
+
* - Matching only: `T extends CollectionShape`
|
|
52
|
+
* - With inference: `T extends CollectionShape<infer U>`
|
|
53
|
+
*/
|
|
54
|
+
type CollectionShape<T = any> = {
|
|
55
|
+
[k: number]: T;
|
|
56
|
+
readonly owner: object;
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* Structural type for matching LoadedCollection (extends CollectionShape with `$` property).
|
|
60
|
+
*
|
|
61
|
+
* Usage:
|
|
62
|
+
* - Matching only: `T extends LoadedCollectionShape`
|
|
63
|
+
* - With inference: `T extends LoadedCollectionShape<infer U>`
|
|
64
|
+
*/
|
|
65
|
+
type LoadedCollectionShape<T = any> = CollectionShape<T> & {
|
|
66
|
+
$: any;
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* Structural type for matching Reference without triggering full class evaluation.
|
|
70
|
+
* Using `T extends ReferenceShape` instead of `T extends Reference<any>` avoids
|
|
71
|
+
* forcing TypeScript to evaluate Reference's methods, preventing instantiation overhead
|
|
72
|
+
* (~800 → ~15 instantiations).
|
|
73
|
+
*
|
|
74
|
+
* Usage:
|
|
75
|
+
* - Matching only: `T extends ReferenceShape`
|
|
76
|
+
* - With inference: `T extends ReferenceShape<infer U>`
|
|
77
|
+
*/
|
|
78
|
+
type ReferenceShape<T = any> = {
|
|
79
|
+
unwrap(): T;
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* Structural type for matching LoadedReference (Reference with `$` property).
|
|
83
|
+
*/
|
|
84
|
+
type LoadedReferenceShape<T = any> = ReferenceShape<T> & {
|
|
85
|
+
$: T;
|
|
86
|
+
};
|
|
87
|
+
/**
|
|
88
|
+
* Structural type for matching any loadable relation (Collection, Reference, or array).
|
|
89
|
+
* Using this instead of `Loadable<any>` in conditional type checks prevents
|
|
90
|
+
* TypeScript from evaluating the full Collection/Reference interfaces.
|
|
91
|
+
*/
|
|
92
|
+
type LoadableShape = CollectionShape | ReferenceShape | readonly any[];
|
|
93
|
+
export type UnionKeys<T> = T extends any ? keyof T : never;
|
|
94
|
+
export type UnionPropertyType<T, K extends PropertyKey> = T extends any ? K extends keyof T ? T[K] : never : never;
|
|
95
|
+
export type MergeUnion<T> = [T] extends [object] ? T extends Scalar ? T : {
|
|
96
|
+
[K in UnionKeys<T>]: UnionPropertyType<T, K>;
|
|
97
|
+
} : T;
|
|
46
98
|
export type DeepPartial<T> = T & {
|
|
47
99
|
[P in keyof T]?: T[P] extends (infer U)[] ? DeepPartial<U>[] : T[P] extends Readonly<infer U>[] ? Readonly<DeepPartial<U>>[] : DeepPartial<T[P]>;
|
|
48
100
|
};
|
|
@@ -52,36 +104,63 @@ export declare const OptionalProps: unique symbol;
|
|
|
52
104
|
export declare const EagerProps: unique symbol;
|
|
53
105
|
export declare const HiddenProps: unique symbol;
|
|
54
106
|
export declare const Config: unique symbol;
|
|
55
|
-
|
|
56
|
-
declare
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
107
|
+
export type Opt<T = unknown> = T & Opt.Brand;
|
|
108
|
+
export declare namespace Opt {
|
|
109
|
+
const __optional: unique symbol;
|
|
110
|
+
interface Brand {
|
|
111
|
+
[__optional]?: 1;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
export type RequiredNullable<T = never> = (T & RequiredNullable.Brand) | null;
|
|
115
|
+
export declare namespace RequiredNullable {
|
|
116
|
+
const __requiredNullable: unique symbol;
|
|
117
|
+
interface Brand {
|
|
118
|
+
[__requiredNullable]?: 1;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
export type Hidden<T = unknown> = T & Hidden.Brand;
|
|
122
|
+
export declare namespace Hidden {
|
|
123
|
+
const __hidden: unique symbol;
|
|
124
|
+
interface Brand {
|
|
125
|
+
[__hidden]?: 1;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
export type DefineConfig<T extends TypeConfig> = T & DefineConfig.Brand;
|
|
129
|
+
export declare namespace DefineConfig {
|
|
130
|
+
const __config: unique symbol;
|
|
131
|
+
interface Brand {
|
|
132
|
+
[__config]?: 1;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
67
135
|
export type CleanTypeConfig<T> = Compute<Pick<T, Extract<keyof T, keyof TypeConfig>>>;
|
|
68
136
|
export interface TypeConfig {
|
|
69
137
|
forceObject?: boolean;
|
|
70
138
|
}
|
|
71
|
-
|
|
139
|
+
declare const __selectedType: unique symbol;
|
|
140
|
+
declare const __loadedType: unique symbol;
|
|
141
|
+
declare const __loadHint: unique symbol;
|
|
142
|
+
/**
|
|
143
|
+
* Expands a populate hint into all its prefixes.
|
|
144
|
+
* e.g., Prefixes<'a.b.c'> = 'a' | 'a.b' | 'a.b.c'
|
|
145
|
+
* This reflects that loading 'a.b.c' means 'a' and 'a.b' are also loaded.
|
|
146
|
+
* Special case: '*' returns string to ensure Loaded<T, '*'> is assignable to any Loaded<T, Hint>.
|
|
147
|
+
*/
|
|
148
|
+
type Prefixes<S extends string> = S extends '*' ? string : S extends `${infer H}.${infer T}` ? H | `${H}.${Prefixes<T>}` : S;
|
|
149
|
+
export type UnwrapPrimary<T> = T extends Scalar ? T : T extends ReferenceShape<infer U> ? Primary<U> : Primary<T>;
|
|
72
150
|
type PrimaryPropToType<T, Keys extends (keyof T)[]> = {
|
|
73
151
|
[Index in keyof Keys]: UnwrapPrimary<T[Keys[Index]]>;
|
|
74
152
|
};
|
|
75
153
|
type ReadonlyPrimary<T> = T extends any[] ? Readonly<T> : T;
|
|
76
154
|
export type Primary<T> = IsAny<T> extends true ? any : T extends {
|
|
77
155
|
[PrimaryKeyProp]?: infer PK;
|
|
78
|
-
} ?
|
|
156
|
+
} ? PK extends undefined ? Omit<T, typeof PrimaryKeyProp> : PK extends keyof T ? ReadonlyPrimary<UnwrapPrimary<T[PK]>> : PK extends (keyof T)[] ? ReadonlyPrimary<PrimaryPropToType<T, PK>> : PK : T extends {
|
|
79
157
|
_id?: infer PK;
|
|
80
158
|
} ? ReadonlyPrimary<PK> | string : T extends {
|
|
81
|
-
uuid?: infer PK;
|
|
82
|
-
} ? ReadonlyPrimary<PK> : T extends {
|
|
83
159
|
id?: infer PK;
|
|
160
|
+
} ? ReadonlyPrimary<PK> : T extends {
|
|
161
|
+
uuid?: infer PK;
|
|
84
162
|
} ? ReadonlyPrimary<PK> : T;
|
|
163
|
+
/** @internal */
|
|
85
164
|
export type PrimaryProperty<T> = T extends {
|
|
86
165
|
[PrimaryKeyProp]?: infer PK;
|
|
87
166
|
} ? (PK extends keyof T ? PK : (PK extends any[] ? PK[number] : never)) : T extends {
|
|
@@ -89,10 +168,10 @@ export type PrimaryProperty<T> = T extends {
|
|
|
89
168
|
} ? (T extends {
|
|
90
169
|
id?: any;
|
|
91
170
|
} ? 'id' | '_id' : '_id') : T extends {
|
|
92
|
-
uuid?: any;
|
|
93
|
-
} ? 'uuid' : T extends {
|
|
94
171
|
id?: any;
|
|
95
|
-
} ? 'id' :
|
|
172
|
+
} ? 'id' : T extends {
|
|
173
|
+
uuid?: any;
|
|
174
|
+
} ? 'uuid' : never;
|
|
96
175
|
export type IPrimaryKeyValue = number | string | bigint | Date | {
|
|
97
176
|
toHexString(): string;
|
|
98
177
|
};
|
|
@@ -100,6 +179,7 @@ export type IPrimaryKey<T extends IPrimaryKeyValue = IPrimaryKeyValue> = T;
|
|
|
100
179
|
export type Scalar = boolean | number | string | bigint | symbol | Date | RegExp | Uint8Array | {
|
|
101
180
|
toHexString(): string;
|
|
102
181
|
};
|
|
182
|
+
type Primitive = boolean | number | string | bigint | symbol;
|
|
103
183
|
export type ExpandScalar<T> = null | (T extends string ? T | RegExp : T extends Date ? Date | string : T extends bigint ? bigint | string | number : T);
|
|
104
184
|
export type OperatorMap<T> = {
|
|
105
185
|
$and?: ExpandQuery<T>[];
|
|
@@ -112,6 +192,14 @@ export type OperatorMap<T> = {
|
|
|
112
192
|
$none?: ExpandQuery<T>;
|
|
113
193
|
$some?: ExpandQuery<T>;
|
|
114
194
|
$every?: ExpandQuery<T>;
|
|
195
|
+
$size?: number | {
|
|
196
|
+
$eq?: number;
|
|
197
|
+
$ne?: number;
|
|
198
|
+
$gt?: number;
|
|
199
|
+
$gte?: number;
|
|
200
|
+
$lt?: number;
|
|
201
|
+
$lte?: number;
|
|
202
|
+
};
|
|
115
203
|
$gt?: ExpandScalar<T>;
|
|
116
204
|
$gte?: ExpandScalar<T>;
|
|
117
205
|
$lt?: ExpandScalar<T>;
|
|
@@ -130,10 +218,11 @@ export type OperatorMap<T> = {
|
|
|
130
218
|
};
|
|
131
219
|
export type FilterItemValue<T> = T | ExpandScalar<T> | Primary<T>;
|
|
132
220
|
export type FilterValue<T> = OperatorMap<FilterItemValue<T>> | FilterItemValue<T> | FilterItemValue<T>[] | null;
|
|
221
|
+
type FilterObjectProp<T, K extends PropertyKey> = K extends keyof MergeUnion<T> ? MergeUnion<T>[K] : K extends keyof T ? T[K] : never;
|
|
222
|
+
type ExpandQueryMerged<T> = [T] extends [object] ? [T] extends [Scalar] ? never : FilterQuery<MergeUnion<T>> : FilterValue<T>;
|
|
133
223
|
export type FilterObject<T> = {
|
|
134
|
-
-readonly [K in EntityKey<T>]?: ExpandQuery<ExpandProperty<T
|
|
224
|
+
-readonly [K in EntityKey<T>]?: ExpandQuery<ExpandProperty<FilterObjectProp<T, K>>> | ExpandQueryMerged<ExpandProperty<FilterObjectProp<T, K>>> | FilterValue<ExpandProperty<FilterObjectProp<T, K>>> | null;
|
|
135
225
|
};
|
|
136
|
-
export type ExpandObject<T> = T extends object ? T extends Scalar ? never : FilterObject<T> : never;
|
|
137
226
|
export type ExpandQuery<T> = T extends object ? T extends Scalar ? never : FilterQuery<T> : FilterValue<T>;
|
|
138
227
|
export type EntityProps<T> = {
|
|
139
228
|
-readonly [K in EntityKey<T>]?: T[K];
|
|
@@ -143,10 +232,9 @@ export type FilterQuery<T> = ObjectQuery<T> | NonNullable<ExpandScalar<Primary<T
|
|
|
143
232
|
export type QBFilterQuery<T = any> = ObjectQuery<T> | Dictionary;
|
|
144
233
|
export interface IWrappedEntity<Entity extends object> {
|
|
145
234
|
isInitialized(): boolean;
|
|
146
|
-
isTouched(): boolean;
|
|
147
235
|
isManaged(): boolean;
|
|
148
236
|
populated(populated?: boolean): void;
|
|
149
|
-
populate<Hint extends string = never>(populate: AutoPath<Entity, Hint>[] | false, options?: EntityLoaderOptions<Entity>): Promise<Loaded<Entity, Hint>>;
|
|
237
|
+
populate<Hint extends string = never>(populate: readonly AutoPath<Entity, Hint, PopulatePath.ALL>[] | false, options?: EntityLoaderOptions<Entity>): Promise<Loaded<Entity, Hint>>;
|
|
150
238
|
init<Hint extends string = never, Fields extends string = '*', Exclude extends string = never>(options?: FindOneOptions<Entity, Hint, Fields, Exclude>): Promise<Loaded<Entity, Hint, Fields, Exclude> | null>;
|
|
151
239
|
toReference(): Ref<Entity> & LoadedReference<Loaded<Entity, AddEager<Entity>>>;
|
|
152
240
|
toObject(): EntityDTO<Entity>;
|
|
@@ -174,7 +262,6 @@ export interface IWrappedEntityInternal<Entity extends object> extends IWrappedE
|
|
|
174
262
|
__factory: EntityFactory;
|
|
175
263
|
__hydrator: IHydrator;
|
|
176
264
|
__initialized: boolean;
|
|
177
|
-
__touched: boolean;
|
|
178
265
|
__originalEntityData?: EntityData<Entity>;
|
|
179
266
|
__loadedProperties: Set<string>;
|
|
180
267
|
__identifier?: EntityIdentifier | EntityIdentifier[];
|
|
@@ -194,16 +281,10 @@ export interface IWrappedEntityInternal<Entity extends object> extends IWrappedE
|
|
|
194
281
|
};
|
|
195
282
|
}
|
|
196
283
|
export type AnyEntity<T = any> = Partial<T>;
|
|
197
|
-
export type EntityClass<T> = Function & {
|
|
284
|
+
export type EntityClass<T = any> = Function & {
|
|
198
285
|
prototype: T;
|
|
199
286
|
};
|
|
200
|
-
export type
|
|
201
|
-
entity: EntityClass<T>;
|
|
202
|
-
schema: EntityMetadata<T> | EntitySchema<T>;
|
|
203
|
-
};
|
|
204
|
-
export type EntityName<T> = string | EntityClass<T> | EntitySchema<T, any> | {
|
|
205
|
-
name: string;
|
|
206
|
-
};
|
|
287
|
+
export type EntityName<T = any> = EntityClass<T> | EntityCtor<T> | EntitySchema<T, any>;
|
|
207
288
|
export type GetRepository<Entity extends {
|
|
208
289
|
[k: PropertyKey]: any;
|
|
209
290
|
}, Fallback> = Entity[typeof EntityRepositoryType] extends EntityRepository<any> | undefined ? NonNullable<Entity[typeof EntityRepositoryType]> : Fallback;
|
|
@@ -223,11 +304,11 @@ type NonArrayObject = object & {
|
|
|
223
304
|
export type EntityDataProp<T, C extends boolean> = T extends Date ? string | Date : T extends Scalar ? T : T extends {
|
|
224
305
|
__runtime?: infer Runtime;
|
|
225
306
|
__raw?: infer Raw;
|
|
226
|
-
} ? (C extends true ? Raw : Runtime) : T extends
|
|
227
|
-
export type RequiredEntityDataProp<T, O, C extends boolean> = T extends Date ? string | Date : T extends Scalar ? T : T extends {
|
|
307
|
+
} ? (C extends true ? Raw : Runtime) : T extends ReferenceShape<infer U> ? EntityDataNested<U, C> : T extends ScalarReference<infer U> ? EntityDataProp<U, C> : T extends CollectionShape<infer U> ? U | U[] | EntityDataNested<U & object, C> | EntityDataNested<U & object, C>[] : T extends readonly (infer U)[] ? U extends NonArrayObject ? U | U[] | EntityDataNested<U, C> | EntityDataNested<U, C>[] : U[] | EntityDataNested<U, C>[] : EntityDataNested<T, C>;
|
|
308
|
+
export type RequiredEntityDataProp<T, O, C extends boolean> = T extends Date ? string | Date : Exclude<T, null> extends RequiredNullable.Brand ? T | null : T extends Scalar ? T : T extends {
|
|
228
309
|
__runtime?: infer Runtime;
|
|
229
310
|
__raw?: infer Raw;
|
|
230
|
-
} ? (C extends true ? Raw : Runtime) : T extends
|
|
311
|
+
} ? (C extends true ? Raw : Runtime) : T extends ReferenceShape<infer U> ? RequiredEntityDataNested<U, O, C> : T extends ScalarReference<infer U> ? RequiredEntityDataProp<U, O, C> : T extends CollectionShape<infer U> ? U | U[] | RequiredEntityDataNested<U & object, O, C> | RequiredEntityDataNested<U & object, O, C>[] : T extends readonly (infer U)[] ? U extends NonArrayObject ? U | U[] | RequiredEntityDataNested<U, O, C> | RequiredEntityDataNested<U, O, C>[] : U[] | RequiredEntityDataNested<U, O, C>[] : RequiredEntityDataNested<T, O, C>;
|
|
231
312
|
export type EntityDataNested<T, C extends boolean = false> = T extends undefined ? never : T extends any[] ? Readonly<T> : EntityData<T, C> | ExpandEntityProp<T, C>;
|
|
232
313
|
type EntityDataItem<T, C extends boolean> = C extends false ? T | EntityDataProp<T, C> | null : EntityDataProp<T, C> | null;
|
|
233
314
|
export type RequiredEntityDataNested<T, O, C extends boolean> = T extends any[] ? Readonly<T> : RequiredEntityData<T, O> | ExpandRequiredEntityProp<T, O, C>;
|
|
@@ -239,8 +320,11 @@ type ExplicitlyOptionalProps<T> = (T extends {
|
|
|
239
320
|
type NullableKeys<T, V = null> = {
|
|
240
321
|
[K in keyof T]: V extends T[K] ? K : never;
|
|
241
322
|
}[keyof T];
|
|
242
|
-
type
|
|
243
|
-
|
|
323
|
+
type RequiredNullableKeys<T> = {
|
|
324
|
+
[K in keyof T]: Exclude<T[K], null> extends RequiredNullable.Brand ? K : never;
|
|
325
|
+
}[keyof T];
|
|
326
|
+
type ProbablyOptionalProps<T> = PrimaryProperty<T> | ExplicitlyOptionalProps<T> | Exclude<NonNullable<NullableKeys<T, null | undefined>>, RequiredNullableKeys<T>>;
|
|
327
|
+
type IsOptional<T, K extends keyof T, I> = T[K] extends CollectionShape ? true : ExtractType<T[K]> extends I ? true : K extends ProbablyOptionalProps<T> ? true : false;
|
|
244
328
|
type RequiredKeys<T, K extends keyof T, I> = IsOptional<T, K, I> extends false ? CleanKeys<T, K> : never;
|
|
245
329
|
type OptionalKeys<T, K extends keyof T, I> = IsOptional<T, K, I> extends false ? never : CleanKeys<T, K>;
|
|
246
330
|
export type EntityData<T, C extends boolean = false> = {
|
|
@@ -274,7 +358,7 @@ export type Ref<T> = T extends any ? IsAny<T> extends true ? Reference<T & objec
|
|
|
274
358
|
type ExtractHiddenProps<T> = (T extends {
|
|
275
359
|
[HiddenProps]?: infer K;
|
|
276
360
|
} ? K : never) | ({
|
|
277
|
-
[K in keyof T]: T[K] extends Hidden ? K : never;
|
|
361
|
+
[K in keyof T]: T[K] extends Primitive ? (T[K] extends Hidden ? K : never) : never;
|
|
278
362
|
}[keyof T] & {});
|
|
279
363
|
type ExcludeHidden<T, K extends keyof T> = K extends ExtractHiddenProps<T> ? never : K;
|
|
280
364
|
type ExtractConfig<T> = T extends {
|
|
@@ -286,9 +370,12 @@ type PrimaryOrObject<T, U, C extends TypeConfig> = PreferExplicitConfig<C, Extra
|
|
|
286
370
|
} : Primary<U>;
|
|
287
371
|
export type EntityDTOProp<E, T, C extends TypeConfig = never> = T extends Scalar ? T : T extends {
|
|
288
372
|
__serialized?: infer U;
|
|
289
|
-
} ? (IsUnknown<U> extends false ? U : T) : T extends
|
|
290
|
-
type
|
|
291
|
-
|
|
373
|
+
} ? (IsUnknown<U> extends false ? U : T) : T extends LoadedReferenceShape<infer U> ? EntityDTO<U, C> : T extends ReferenceShape<infer U> ? PrimaryOrObject<E, U, C> : T extends ScalarReference<infer U> ? U : T extends LoadedCollectionShape<infer U> ? EntityDTO<U & object, C>[] : T extends CollectionShape<infer U> ? PrimaryOrObject<E, U & object, C>[] : T extends readonly (infer U)[] ? U extends Scalar ? T : EntityDTOProp<E, U, C>[] : T extends Relation<T> ? EntityDTO<T, C> : T;
|
|
374
|
+
type UnwrapLoadedEntity<T> = T extends {
|
|
375
|
+
[__loadedType]?: infer U;
|
|
376
|
+
} ? NonNullable<U> : T;
|
|
377
|
+
type DTOProbablyOptionalProps<T> = NonNullable<NullableKeys<UnwrapLoadedEntity<T>, undefined>>;
|
|
378
|
+
type DTOIsOptional<T, K extends keyof T> = T[K] extends LoadedCollectionShape ? false : K extends PrimaryProperty<UnwrapLoadedEntity<T>> ? false : K extends DTOProbablyOptionalProps<T> ? true : false;
|
|
292
379
|
type DTORequiredKeys<T, K extends keyof T> = DTOIsOptional<T, K> extends false ? ExcludeHidden<T, K> & CleanKeys<T, K> : never;
|
|
293
380
|
type DTOOptionalKeys<T, K extends keyof T> = DTOIsOptional<T, K> extends false ? never : ExcludeHidden<T, K> & CleanKeys<T, K>;
|
|
294
381
|
export type EntityDTO<T, C extends TypeConfig = never> = {
|
|
@@ -297,8 +384,22 @@ export type EntityDTO<T, C extends TypeConfig = never> = {
|
|
|
297
384
|
[K in keyof T as DTOOptionalKeys<T, K>]?: EntityDTOProp<T, T[K], C> | AddOptional<T[K]>;
|
|
298
385
|
};
|
|
299
386
|
type TargetKeys<T> = T extends EntityClass<infer P> ? keyof P : keyof T;
|
|
300
|
-
type
|
|
301
|
-
|
|
387
|
+
type PropertyName<T> = IsUnknown<T> extends false ? TargetKeys<T> : string;
|
|
388
|
+
type TableName = {
|
|
389
|
+
name: string;
|
|
390
|
+
schema?: string;
|
|
391
|
+
toString: () => string;
|
|
392
|
+
};
|
|
393
|
+
export type FormulaTable = {
|
|
394
|
+
alias: string;
|
|
395
|
+
name: string;
|
|
396
|
+
schema?: string;
|
|
397
|
+
qualifiedName: string;
|
|
398
|
+
toString: () => string;
|
|
399
|
+
};
|
|
400
|
+
export type IndexCallback<T> = (table: TableName, columns: Record<PropertyName<T>, string>, indexName: string) => string | Raw;
|
|
401
|
+
export type FormulaCallback<T> = (table: FormulaTable, columns: Record<PropertyName<T>, string>) => string;
|
|
402
|
+
export type CheckCallback<T> = (columns: Record<PropertyName<T>, string>) => string;
|
|
302
403
|
export type GeneratedColumnCallback<T> = (columns: Record<keyof T, string>) => string;
|
|
303
404
|
export interface CheckConstraint<T = any> {
|
|
304
405
|
name?: string;
|
|
@@ -309,6 +410,7 @@ export type AnyString = string & {};
|
|
|
309
410
|
export interface EntityProperty<Owner = any, Target = any> {
|
|
310
411
|
name: EntityKey<Owner>;
|
|
311
412
|
entity: () => EntityName<Owner>;
|
|
413
|
+
target: EntityClass<Target>;
|
|
312
414
|
type: keyof typeof types | AnyString;
|
|
313
415
|
runtimeType: 'number' | 'string' | 'boolean' | 'bigint' | 'Buffer' | 'Date' | 'object' | 'any' | AnyString;
|
|
314
416
|
targetMeta?: EntityMetadata<Target>;
|
|
@@ -334,7 +436,8 @@ export interface EntityProperty<Owner = any, Target = any> {
|
|
|
334
436
|
fieldNameRaw?: string;
|
|
335
437
|
default?: string | number | boolean | null;
|
|
336
438
|
defaultRaw?: string;
|
|
337
|
-
formula?:
|
|
439
|
+
formula?: FormulaCallback<Owner>;
|
|
440
|
+
filters?: FilterOptions;
|
|
338
441
|
prefix?: string | boolean;
|
|
339
442
|
prefixMode?: EmbeddedPrefixMode;
|
|
340
443
|
embedded?: [EntityKey<Owner>, EntityKey<Owner>];
|
|
@@ -347,11 +450,13 @@ export interface EntityProperty<Owner = any, Target = any> {
|
|
|
347
450
|
unique?: boolean | string;
|
|
348
451
|
nullable?: boolean;
|
|
349
452
|
inherited?: boolean;
|
|
453
|
+
renamedFrom?: string;
|
|
454
|
+
stiFieldNames?: string[];
|
|
455
|
+
stiFieldNameMap?: Dictionary<string>;
|
|
350
456
|
unsigned?: boolean;
|
|
351
457
|
mapToPk?: boolean;
|
|
352
458
|
persist?: boolean;
|
|
353
459
|
hydrate?: boolean;
|
|
354
|
-
trackChanges?: boolean;
|
|
355
460
|
hidden?: boolean;
|
|
356
461
|
enum?: boolean;
|
|
357
462
|
items?: (number | string)[];
|
|
@@ -362,6 +467,7 @@ export interface EntityProperty<Owner = any, Target = any> {
|
|
|
362
467
|
setter?: boolean;
|
|
363
468
|
getter?: boolean;
|
|
364
469
|
getterName?: keyof Owner;
|
|
470
|
+
accessor?: EntityKey<Owner>;
|
|
365
471
|
cascade: Cascade[];
|
|
366
472
|
orphanRemoval?: boolean;
|
|
367
473
|
onCreate?: (entity: Owner, em: EntityManager) => any;
|
|
@@ -378,13 +484,14 @@ export interface EntityProperty<Owner = any, Target = any> {
|
|
|
378
484
|
fixedOrder?: boolean;
|
|
379
485
|
fixedOrderColumn?: string;
|
|
380
486
|
pivotTable: string;
|
|
381
|
-
pivotEntity:
|
|
487
|
+
pivotEntity: EntityClass<Target>;
|
|
382
488
|
joinColumns: string[];
|
|
383
489
|
ownColumns: string[];
|
|
384
490
|
inverseJoinColumns: string[];
|
|
385
491
|
referencedColumnNames: string[];
|
|
386
492
|
referencedTableName: string;
|
|
387
493
|
referencedPKs: EntityKey<Owner>[];
|
|
494
|
+
targetKey?: string;
|
|
388
495
|
serializer?: (value: any, options?: SerializeOptions<any>) => any;
|
|
389
496
|
serializedName?: string;
|
|
390
497
|
comment?: string;
|
|
@@ -394,19 +501,22 @@ export interface EntityProperty<Owner = any, Target = any> {
|
|
|
394
501
|
optional?: boolean;
|
|
395
502
|
ignoreSchemaChanges?: ('type' | 'extra' | 'default')[];
|
|
396
503
|
deferMode?: DeferMode;
|
|
504
|
+
createForeignKeyConstraint: boolean;
|
|
397
505
|
foreignKeyName?: string;
|
|
398
506
|
}
|
|
399
|
-
export declare class EntityMetadata<
|
|
507
|
+
export declare class EntityMetadata<Entity = any, Class extends EntityCtor<Entity> = EntityCtor<Entity>> {
|
|
400
508
|
private static counter;
|
|
401
509
|
readonly _id: number;
|
|
402
510
|
readonly propertyOrder: Map<string, number>;
|
|
403
511
|
constructor(meta?: Partial<EntityMetadata>);
|
|
404
|
-
addProperty(prop: Partial<EntityProperty<
|
|
512
|
+
addProperty(prop: Partial<EntityProperty<Entity>>): void;
|
|
405
513
|
removeProperty(name: string, sync?: boolean): void;
|
|
406
|
-
getPrimaryProps(): EntityProperty<
|
|
407
|
-
getPrimaryProp(): EntityProperty<
|
|
514
|
+
getPrimaryProps(flatten?: boolean): EntityProperty<Entity>[];
|
|
515
|
+
getPrimaryProp(): EntityProperty<Entity>;
|
|
516
|
+
createColumnMappingObject(): Record<PropertyName<Entity>, string>;
|
|
408
517
|
get tableName(): string;
|
|
409
518
|
set tableName(name: string);
|
|
519
|
+
get uniqueName(): string;
|
|
410
520
|
sync(initIndexes?: boolean, config?: Configuration): void;
|
|
411
521
|
private initIndexes;
|
|
412
522
|
/** @internal */
|
|
@@ -416,67 +526,74 @@ export interface SimpleColumnMeta {
|
|
|
416
526
|
name: string;
|
|
417
527
|
type: string;
|
|
418
528
|
}
|
|
419
|
-
export
|
|
529
|
+
export type EntityCtor<T = any> = abstract new (...args: any[]) => T;
|
|
530
|
+
export interface EntityMetadata<Entity = any, Class extends EntityCtor<Entity> = EntityCtor<Entity>> {
|
|
420
531
|
name?: string;
|
|
421
532
|
className: string;
|
|
422
533
|
tableName: string;
|
|
423
534
|
schema?: string;
|
|
424
535
|
pivotTable?: boolean;
|
|
425
536
|
virtual?: boolean;
|
|
426
|
-
|
|
427
|
-
|
|
537
|
+
/** True if this entity represents a database view (not a virtual entity). */
|
|
538
|
+
view?: boolean;
|
|
539
|
+
/** True if this is a materialized view (PostgreSQL only). Requires `view: true`. */
|
|
540
|
+
materialized?: boolean;
|
|
541
|
+
/** For materialized views, whether data is populated on creation. Defaults to true. */
|
|
542
|
+
withData?: boolean;
|
|
543
|
+
expression?: string | ((em: any, where: ObjectQuery<Entity>, options: FindOptions<Entity, any, any, any>, stream?: boolean) => MaybePromise<Raw | object | string>);
|
|
544
|
+
discriminatorColumn?: EntityKey<Entity> | AnyString;
|
|
428
545
|
discriminatorValue?: number | string;
|
|
429
|
-
discriminatorMap?: Dictionary<
|
|
546
|
+
discriminatorMap?: Dictionary<EntityClass>;
|
|
430
547
|
embeddable: boolean;
|
|
431
|
-
constructorParams
|
|
548
|
+
constructorParams?: (keyof Entity)[];
|
|
432
549
|
forceConstructor: boolean;
|
|
433
|
-
|
|
434
|
-
extends: string;
|
|
550
|
+
extends?: EntityName<Entity>;
|
|
435
551
|
collection: string;
|
|
436
552
|
path: string;
|
|
437
|
-
primaryKeys: EntityKey<
|
|
553
|
+
primaryKeys: EntityKey<Entity>[];
|
|
438
554
|
simplePK: boolean;
|
|
439
555
|
compositePK: boolean;
|
|
440
|
-
versionProperty: EntityKey<
|
|
441
|
-
concurrencyCheckKeys: Set<EntityKey<
|
|
442
|
-
serializedPrimaryKey
|
|
556
|
+
versionProperty: EntityKey<Entity>;
|
|
557
|
+
concurrencyCheckKeys: Set<EntityKey<Entity>>;
|
|
558
|
+
serializedPrimaryKey?: EntityKey<Entity>;
|
|
443
559
|
properties: {
|
|
444
|
-
[K in EntityKey<
|
|
560
|
+
[K in EntityKey<Entity>]: EntityProperty<Entity>;
|
|
445
561
|
};
|
|
446
|
-
props: EntityProperty<
|
|
447
|
-
relations: EntityProperty<
|
|
448
|
-
bidirectionalRelations: EntityProperty<
|
|
562
|
+
props: EntityProperty<Entity>[];
|
|
563
|
+
relations: EntityProperty<Entity>[];
|
|
564
|
+
bidirectionalRelations: EntityProperty<Entity>[];
|
|
449
565
|
referencingProperties: {
|
|
450
|
-
meta: EntityMetadata<
|
|
451
|
-
prop: EntityProperty<
|
|
566
|
+
meta: EntityMetadata<Entity>;
|
|
567
|
+
prop: EntityProperty<Entity>;
|
|
452
568
|
}[];
|
|
453
|
-
comparableProps: EntityProperty<
|
|
454
|
-
trackingProps: EntityProperty<
|
|
455
|
-
hydrateProps: EntityProperty<
|
|
456
|
-
|
|
457
|
-
|
|
569
|
+
comparableProps: EntityProperty<Entity>[];
|
|
570
|
+
trackingProps: EntityProperty<Entity>[];
|
|
571
|
+
hydrateProps: EntityProperty<Entity>[];
|
|
572
|
+
validateProps: EntityProperty<Entity>[];
|
|
573
|
+
uniqueProps: EntityProperty<Entity>[];
|
|
574
|
+
getterProps: EntityProperty<Entity>[];
|
|
458
575
|
indexes: {
|
|
459
|
-
properties
|
|
576
|
+
properties?: EntityKey<Entity> | EntityKey<Entity>[];
|
|
460
577
|
name?: string;
|
|
461
578
|
type?: string;
|
|
462
579
|
options?: Dictionary;
|
|
463
|
-
expression?: string
|
|
580
|
+
expression?: string | IndexCallback<Entity>;
|
|
464
581
|
}[];
|
|
465
582
|
uniques: {
|
|
466
|
-
properties
|
|
583
|
+
properties?: EntityKey<Entity> | EntityKey<Entity>[];
|
|
467
584
|
name?: string;
|
|
468
585
|
options?: Dictionary;
|
|
469
|
-
expression?: string
|
|
470
|
-
deferMode?: DeferMode
|
|
586
|
+
expression?: string | IndexCallback<Entity>;
|
|
587
|
+
deferMode?: DeferMode | `${DeferMode}`;
|
|
471
588
|
}[];
|
|
472
|
-
checks: CheckConstraint<
|
|
589
|
+
checks: CheckConstraint<Entity>[];
|
|
473
590
|
repositoryClass?: string;
|
|
474
591
|
repository: () => EntityClass<EntityRepository<any>>;
|
|
475
592
|
hooks: {
|
|
476
|
-
[K in EventType]?: (keyof
|
|
593
|
+
[K in EventType]?: (keyof Entity | EventSubscriber<Entity>[EventType])[];
|
|
477
594
|
};
|
|
478
|
-
prototype:
|
|
479
|
-
class:
|
|
595
|
+
prototype: Entity;
|
|
596
|
+
class: Class;
|
|
480
597
|
abstract: boolean;
|
|
481
598
|
filters: Dictionary<FilterDef>;
|
|
482
599
|
comment?: string;
|
|
@@ -484,8 +601,9 @@ export interface EntityMetadata<T = any> {
|
|
|
484
601
|
hasUniqueProps?: boolean;
|
|
485
602
|
readonly?: boolean;
|
|
486
603
|
polymorphs?: EntityMetadata[];
|
|
487
|
-
root: EntityMetadata<
|
|
604
|
+
root: EntityMetadata<Entity>;
|
|
488
605
|
definedProperties: Dictionary;
|
|
606
|
+
hasTriggers?: boolean;
|
|
489
607
|
/** @internal can be used for computed numeric cache keys */
|
|
490
608
|
readonly _id: number;
|
|
491
609
|
}
|
|
@@ -496,6 +614,7 @@ export interface CreateSchemaOptions {
|
|
|
496
614
|
export interface ClearDatabaseOptions {
|
|
497
615
|
schema?: string;
|
|
498
616
|
truncate?: boolean;
|
|
617
|
+
clearIdentityMap?: boolean;
|
|
499
618
|
}
|
|
500
619
|
export interface EnsureDatabaseOptions extends CreateSchemaOptions, ClearDatabaseOptions {
|
|
501
620
|
clear?: boolean;
|
|
@@ -523,25 +642,25 @@ export interface RefreshDatabaseOptions extends CreateSchemaOptions {
|
|
|
523
642
|
createSchema?: boolean;
|
|
524
643
|
}
|
|
525
644
|
export interface ISchemaGenerator {
|
|
526
|
-
|
|
527
|
-
|
|
645
|
+
create(options?: CreateSchemaOptions): Promise<void>;
|
|
646
|
+
update(options?: UpdateSchemaOptions): Promise<void>;
|
|
647
|
+
drop(options?: DropSchemaOptions): Promise<void>;
|
|
648
|
+
refresh(options?: RefreshDatabaseOptions): Promise<void>;
|
|
649
|
+
clear(options?: ClearDatabaseOptions): Promise<void>;
|
|
650
|
+
execute(sql: string, options?: {
|
|
651
|
+
wrap?: boolean;
|
|
652
|
+
}): Promise<void>;
|
|
528
653
|
getCreateSchemaSQL(options?: CreateSchemaOptions): Promise<string>;
|
|
529
|
-
dropSchema(options?: DropSchemaOptions): Promise<void>;
|
|
530
654
|
getDropSchemaSQL(options?: Omit<DropSchemaOptions, 'dropDb'>): Promise<string>;
|
|
531
|
-
updateSchema(options?: UpdateSchemaOptions): Promise<void>;
|
|
532
655
|
getUpdateSchemaSQL(options?: UpdateSchemaOptions): Promise<string>;
|
|
533
656
|
getUpdateSchemaMigrationSQL(options?: UpdateSchemaOptions): Promise<{
|
|
534
657
|
up: string;
|
|
535
658
|
down: string;
|
|
536
659
|
}>;
|
|
660
|
+
ensureDatabase(options?: EnsureDatabaseOptions): Promise<boolean>;
|
|
537
661
|
createDatabase(name?: string): Promise<void>;
|
|
538
662
|
dropDatabase(name?: string): Promise<void>;
|
|
539
|
-
execute(sql: string, options?: {
|
|
540
|
-
wrap?: boolean;
|
|
541
|
-
}): Promise<void>;
|
|
542
663
|
ensureIndexes(): Promise<void>;
|
|
543
|
-
refreshDatabase(options?: RefreshDatabaseOptions): Promise<void>;
|
|
544
|
-
clearDatabase(options?: ClearDatabaseOptions): Promise<void>;
|
|
545
664
|
}
|
|
546
665
|
export type ImportsResolver = (alias: string, basePath: string, extension: '.js' | '', originFileName: string) => {
|
|
547
666
|
path: string;
|
|
@@ -558,7 +677,10 @@ export interface GenerateOptions {
|
|
|
558
677
|
undefinedDefaults?: boolean;
|
|
559
678
|
bidirectionalRelations?: boolean;
|
|
560
679
|
identifiedReferences?: boolean;
|
|
561
|
-
|
|
680
|
+
entityDefinition?: 'decorators' | 'defineEntity' | 'entitySchema';
|
|
681
|
+
decorators?: 'es' | 'legacy';
|
|
682
|
+
inferEntityType?: boolean;
|
|
683
|
+
enumMode?: 'ts-enum' | 'union-type' | 'dictionary';
|
|
562
684
|
esmImport?: boolean;
|
|
563
685
|
scalarTypeInDecorator?: boolean;
|
|
564
686
|
scalarPropertiesForRelations?: 'always' | 'never' | 'smart';
|
|
@@ -618,26 +740,26 @@ export interface IMigrator {
|
|
|
618
740
|
/**
|
|
619
741
|
* Checks current schema for changes, generates new migration if there are any.
|
|
620
742
|
*/
|
|
621
|
-
|
|
743
|
+
create(path?: string, blank?: boolean, initial?: boolean, name?: string): Promise<MigrationResult>;
|
|
622
744
|
/**
|
|
623
745
|
* Checks current schema for changes.
|
|
624
746
|
*/
|
|
625
|
-
|
|
747
|
+
checkSchema(): Promise<boolean>;
|
|
626
748
|
/**
|
|
627
749
|
* Creates initial migration. This generates the schema based on metadata, and checks whether all the tables
|
|
628
750
|
* are already present. If yes, it will also automatically log the migration as executed.
|
|
629
751
|
* Initial migration can be created only if the schema is already aligned with the metadata, or when no schema
|
|
630
752
|
* is present - in such case regular migration would have the same effect.
|
|
631
753
|
*/
|
|
632
|
-
|
|
754
|
+
createInitial(path?: string): Promise<MigrationResult>;
|
|
633
755
|
/**
|
|
634
756
|
* Returns list of already executed migrations.
|
|
635
757
|
*/
|
|
636
|
-
|
|
758
|
+
getExecuted(): Promise<MigrationRow[]>;
|
|
637
759
|
/**
|
|
638
760
|
* Returns list of pending (not yet executed) migrations found in the migration directory.
|
|
639
761
|
*/
|
|
640
|
-
|
|
762
|
+
getPending(): Promise<UmzugMigration[]>;
|
|
641
763
|
/**
|
|
642
764
|
* Executes specified migrations. Without parameter it will migrate up to the latest version.
|
|
643
765
|
*/
|
|
@@ -686,12 +808,17 @@ export interface MigrationObject {
|
|
|
686
808
|
name: string;
|
|
687
809
|
class: Constructor<Migration>;
|
|
688
810
|
}
|
|
689
|
-
|
|
811
|
+
type EntityFromInput<T> = T extends readonly EntityName<infer U>[] ? U : T extends EntityName<infer U> ? U : never;
|
|
812
|
+
type FilterDefResolved<T extends object = any> = {
|
|
690
813
|
name: string;
|
|
691
|
-
cond:
|
|
814
|
+
cond: FilterQuery<T> | ((args: Dictionary, type: 'read' | 'update' | 'delete', em: any, options?: FindOptions<T, any, any, any> | FindOneOptions<T, any, any, any>, entityName?: string) => MaybePromise<FilterQuery<T>>);
|
|
692
815
|
default?: boolean;
|
|
693
|
-
entity?:
|
|
816
|
+
entity?: EntityName<T> | EntityName<T>[];
|
|
694
817
|
args?: boolean;
|
|
818
|
+
strict?: boolean;
|
|
819
|
+
};
|
|
820
|
+
export type FilterDef<T extends EntityName | readonly EntityName[] = any> = FilterDefResolved<EntityFromInput<T>> & {
|
|
821
|
+
entity?: T;
|
|
695
822
|
};
|
|
696
823
|
export type Populate<T, P extends string = never> = readonly AutoPath<T, P, `${PopulatePath}`>[] | false;
|
|
697
824
|
export type PopulateOptions<T> = {
|
|
@@ -699,40 +826,59 @@ export type PopulateOptions<T> = {
|
|
|
699
826
|
strategy?: LoadStrategy;
|
|
700
827
|
all?: boolean;
|
|
701
828
|
filter?: boolean;
|
|
829
|
+
joinType?: 'inner join' | 'left join';
|
|
702
830
|
children?: PopulateOptions<T[keyof T]>[];
|
|
831
|
+
/** When true, ignores `mapToPk` on the property and returns full entity data instead of just PKs. */
|
|
832
|
+
dataOnly?: boolean;
|
|
703
833
|
};
|
|
704
|
-
type
|
|
705
|
-
type ExtractType<T> = T extends Loadable<infer U> ? U : T;
|
|
834
|
+
type ExtractType<T> = T extends CollectionShape<infer U> ? U : T extends ReferenceShape<infer U> ? U : T extends Ref<infer U> ? U : T extends readonly (infer U)[] ? U : T;
|
|
706
835
|
type ExtractStringKeys<T> = {
|
|
707
|
-
[K in keyof T]
|
|
836
|
+
[K in keyof T]-?: CleanKeys<T, K>;
|
|
708
837
|
}[keyof T] & {};
|
|
709
|
-
|
|
838
|
+
/**
|
|
839
|
+
* Extracts string keys from an entity type, handling Collection/Reference wrappers.
|
|
840
|
+
* Simplified to just check `T extends object` since ExtractType handles the unwrapping.
|
|
841
|
+
*/
|
|
842
|
+
type StringKeys<T, E extends string = never> = T extends object ? ExtractStringKeys<ExtractType<T>> | E : never;
|
|
710
843
|
type GetStringKey<T, K extends StringKeys<T, string>, E extends string> = K extends keyof T ? ExtractType<T[K]> : (K extends E ? keyof T : never);
|
|
711
844
|
type Prev = [never, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
|
|
712
845
|
type CollectionKeys<T> = T extends object ? {
|
|
713
|
-
[K in keyof T]
|
|
846
|
+
[K in keyof T]-?: T[K] extends CollectionShape ? IsAny<T[K]> extends true ? never : K & string : never;
|
|
714
847
|
}[keyof T] & {} : never;
|
|
715
|
-
export type AutoPath<O, P extends string | boolean, E extends string = never, D extends Prev[number] = 9> = P extends boolean ? P : [D] extends [never] ? never : P extends any ? P extends string ?
|
|
848
|
+
export type AutoPath<O, P extends string | boolean, E extends string = never, D extends Prev[number] = 9> = P extends boolean ? P : [D] extends [never] ? never : P extends any ? P extends string ? P extends `${infer A}.${infer B}` ? A extends StringKeys<O, E> ? `${A}.${AutoPath<NonNullable<GetStringKey<O, A, E>>, B, E, Prev[D]>}` : never : P extends StringKeys<O, E> ? (NonNullable<GetStringKey<O, P & StringKeys<O, E>, E>> extends unknown ? Exclude<P, `${string}.`> : never) | (StringKeys<NonNullable<GetStringKey<O, P & StringKeys<O, E>, E>>, E> extends never ? never : `${P & string}.`) : StringKeys<O, E> | `${CollectionKeys<O>}:ref` : never : never;
|
|
716
849
|
export type UnboxArray<T> = T extends any[] ? ArrayElement<T> : T;
|
|
717
850
|
export type ArrayElement<ArrayType extends unknown[]> = ArrayType extends (infer ElementType)[] ? ElementType : never;
|
|
718
|
-
export type ExpandProperty<T> = T extends
|
|
719
|
-
type LoadedLoadable<T, E extends object> = T extends
|
|
851
|
+
export type ExpandProperty<T> = T extends ReferenceShape<infer U> ? NonNullable<U> : T extends CollectionShape<infer U> ? NonNullable<U> : T extends (infer U)[] ? NonNullable<U> : NonNullable<T>;
|
|
852
|
+
type LoadedLoadable<T, E extends object> = T extends CollectionShape ? LoadedCollection<E> : T extends ScalarReference<infer U> ? LoadedScalarReference<U> : T extends ReferenceShape ? T & LoadedReference<E> : T extends Scalar ? T : T extends (infer U)[] ? U extends Scalar ? T : E[] : E;
|
|
720
853
|
type IsTrue<T> = IsNever<T> extends true ? false : T extends boolean ? T extends true ? true : false : false;
|
|
721
854
|
type StringLiteral<T> = T extends string ? string extends T ? never : T : never;
|
|
722
855
|
type Prefix<T, K> = K extends `${infer S}.${string}` ? S : (K extends '*' ? keyof T : K);
|
|
723
856
|
type IsPrefixedExclude<T, K extends keyof T, E extends string> = K extends E ? never : K;
|
|
724
|
-
export type IsPrefixed<T, K extends keyof T, L extends string, E extends string = never> = IsNever<E> extends false ? IsPrefixedExclude<T, K, E> : K extends symbol ? never : IsTrue<L> extends true ? (T[K] & {} extends
|
|
857
|
+
export type IsPrefixed<T, K extends keyof T, L extends string, E extends string = never> = IsNever<E> extends false ? IsPrefixedExclude<T, K, E> : K extends symbol ? never : IsTrue<L> extends true ? (T[K] & {} extends LoadableShape ? K : never) : IsNever<StringLiteral<L>> extends true ? never : L extends '*' ? K : K extends Prefix<T, L> ? K : K extends PrimaryProperty<T> ? K : never;
|
|
725
858
|
type Suffix<Key, Hint extends string, All = true | '*'> = Hint extends `${infer Pref}.${infer Suf}` ? (Pref extends Key ? Suf : never) : Hint extends All ? Hint : never;
|
|
726
|
-
export type IsSubset<T, U> = keyof U extends keyof T ? {} :
|
|
859
|
+
export type IsSubset<T, U> = keyof U extends keyof T ? {} : string extends keyof U ? {} : {
|
|
727
860
|
[K in keyof U as K extends keyof T ? never : CleanKeys<U, K>]: never;
|
|
728
861
|
};
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
type
|
|
734
|
-
|
|
735
|
-
|
|
862
|
+
/**
|
|
863
|
+
* Fast check if T is a Loaded type by looking for the marker symbol.
|
|
864
|
+
* This is much cheaper than matching against the full Loaded structure.
|
|
865
|
+
*/
|
|
866
|
+
type IsLoadedType<T> = T extends {
|
|
867
|
+
[__loadedType]?: any;
|
|
868
|
+
} ? true : false;
|
|
869
|
+
/**
|
|
870
|
+
* Optimized MergeSelected using intersection instead of extraction.
|
|
871
|
+
* When T is already Loaded, we intersect with a new Loaded type for the selected fields.
|
|
872
|
+
* This avoids the expensive pattern matching needed to extract hints from Loaded types.
|
|
873
|
+
*/
|
|
874
|
+
export type MergeSelected<T, U, F extends string> = IsLoadedType<T> extends true ? T & Loaded<U, never, F, never> : T;
|
|
875
|
+
/**
|
|
876
|
+
* Optimized MergeLoaded using intersection instead of extraction.
|
|
877
|
+
* When T is already Loaded, we intersect with a new Loaded type for the additional hints.
|
|
878
|
+
* This avoids the expensive pattern matching needed to extract hints from Loaded types.
|
|
879
|
+
* Used for `em.populate` and `em.refresh`.
|
|
880
|
+
*/
|
|
881
|
+
export type MergeLoaded<T, U, P extends string, F extends string, E extends string, R extends boolean = false> = IsLoadedType<T> extends true ? T & Loaded<U, P, F, E> : Loaded<T, P, F, E>;
|
|
736
882
|
export type AddOptional<T> = undefined | null extends T ? null | undefined : null extends T ? null : undefined extends T ? undefined : never;
|
|
737
883
|
type LoadedProp<T, L extends string = never, F extends string = '*', E extends string = never> = LoadedLoadable<T, Loaded<ExtractType<T>, L, F, E>>;
|
|
738
884
|
export type AddEager<T> = ExtractEagerProps<T> & string;
|
|
@@ -760,9 +906,11 @@ type LoadedInternal<T, L extends string = never, F extends string = '*', E exten
|
|
|
760
906
|
} : Selected<T, L, F>;
|
|
761
907
|
/**
|
|
762
908
|
* Represents entity with its loaded relations (`populate` hint) and selected properties (`fields` hint).
|
|
909
|
+
* The __loadHint marker uses contravariance to ensure Loaded<A, 'b'> is NOT assignable to Loaded<A, 'b.c'>.
|
|
763
910
|
*/
|
|
764
911
|
export type Loaded<T, L extends string = never, F extends string = '*', E extends string = never> = LoadedInternal<T, L, F, E> & {
|
|
765
912
|
[__loadedType]?: T;
|
|
913
|
+
[__loadHint]?: (hint: Prefixes<L>) => void;
|
|
766
914
|
};
|
|
767
915
|
export interface LoadedReference<T> extends Reference<NonNullable<T>> {
|
|
768
916
|
$: NonNullable<T>;
|
|
@@ -782,23 +930,23 @@ export interface Highlighter {
|
|
|
782
930
|
highlight(text: string): string;
|
|
783
931
|
}
|
|
784
932
|
export interface IMetadataStorage {
|
|
785
|
-
getAll():
|
|
786
|
-
get<T = any>(entity:
|
|
787
|
-
find<T = any>(entity:
|
|
788
|
-
has(entity:
|
|
789
|
-
set(entity:
|
|
790
|
-
reset(entity:
|
|
933
|
+
getAll(): Map<EntityName, EntityMetadata>;
|
|
934
|
+
get<T = any>(entity: EntityName<T>, init?: boolean, validate?: boolean): EntityMetadata<T>;
|
|
935
|
+
find<T = any>(entity: EntityName<T>): EntityMetadata<T> | undefined;
|
|
936
|
+
has<T>(entity: EntityName<T>): boolean;
|
|
937
|
+
set<T>(entity: EntityName<T>, meta: EntityMetadata): EntityMetadata;
|
|
938
|
+
reset<T>(entity: EntityName<T>): void;
|
|
791
939
|
}
|
|
792
940
|
export interface IHydrator {
|
|
793
941
|
/**
|
|
794
942
|
* Hydrates the whole entity. This process handles custom type conversions, creating missing Collection instances,
|
|
795
943
|
* mapping FKs to entity instances, as well as merging those entities.
|
|
796
944
|
*/
|
|
797
|
-
hydrate<T extends object>(entity: T, meta: EntityMetadata<T>, data: EntityData<T>, factory: EntityFactory, type: 'full' | 'reference', newEntity?: boolean, convertCustomTypes?: boolean, schema?: string, parentSchema?: string): void;
|
|
945
|
+
hydrate<T extends object>(entity: T, meta: EntityMetadata<T>, data: EntityData<T>, factory: EntityFactory, type: 'full' | 'reference', newEntity?: boolean, convertCustomTypes?: boolean, schema?: string, parentSchema?: string, normalizeAccessors?: boolean): void;
|
|
798
946
|
/**
|
|
799
947
|
* Hydrates primary keys only
|
|
800
948
|
*/
|
|
801
|
-
hydrateReference<T extends object>(entity: T, meta: EntityMetadata<T>, data: EntityData<T>, factory: EntityFactory, convertCustomTypes?: boolean, schema?: string, parentSchema?: string): void;
|
|
949
|
+
hydrateReference<T extends object>(entity: T, meta: EntityMetadata<T>, data: EntityData<T>, factory: EntityFactory, convertCustomTypes?: boolean, schema?: string, parentSchema?: string, normalizeAccessors?: boolean): void;
|
|
802
950
|
isRunning(): boolean;
|
|
803
951
|
}
|
|
804
952
|
export interface HydratorConstructor {
|
|
@@ -808,17 +956,22 @@ export interface ISeedManager {
|
|
|
808
956
|
seed(...classNames: Constructor<Seeder>[]): Promise<void>;
|
|
809
957
|
/** @internal */
|
|
810
958
|
seedString(...classNames: string[]): Promise<void>;
|
|
811
|
-
|
|
959
|
+
create(className: string): Promise<string>;
|
|
812
960
|
}
|
|
813
961
|
export interface Seeder<T extends Dictionary = Dictionary> {
|
|
814
962
|
run(em: EntityManager, context?: T): void | Promise<void>;
|
|
815
963
|
}
|
|
816
964
|
export type ConnectionType = 'read' | 'write';
|
|
817
965
|
export type MetadataProcessor = (metadata: EntityMetadata[], platform: Platform) => MaybePromise<void>;
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
966
|
+
export type MaybeReturnType<T> = T extends (...args: any[]) => infer R ? R : T;
|
|
967
|
+
export interface EntitySchemaWithMeta<TName extends string = string, TTableName extends string = string, TEntity = any, TBase = never, TProperties extends Record<string, any> = Record<string, any>, TClass extends EntityCtor = EntityCtor<TEntity>> extends EntitySchema<TEntity, TBase, TClass> {
|
|
968
|
+
readonly name: TName;
|
|
969
|
+
readonly properties: TProperties;
|
|
970
|
+
readonly tableName: TTableName;
|
|
971
|
+
/** @internal Direct entity type access - avoids expensive pattern matching */
|
|
972
|
+
readonly '~entity': TEntity;
|
|
973
|
+
}
|
|
974
|
+
export type InferEntity<Schema> = Schema extends {
|
|
975
|
+
'~entity': infer E;
|
|
976
|
+
} ? E : Schema extends EntitySchema<infer Entity> ? Entity : Schema extends EntityClass<infer Entity> ? Entity : Schema;
|
|
824
977
|
export {};
|