@mikro-orm/core 7.0.0-dev.16 → 7.0.0-dev.161
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 +292 -262
- 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 +43 -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 +109 -72
- 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 +580 -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 +21 -9
- package/errors.js +53 -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 +18 -22
- package/metadata/EntitySchema.js +59 -34
- package/metadata/MetadataDiscovery.d.ts +6 -10
- package/metadata/MetadataDiscovery.js +348 -319
- 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 +12 -9
- package/metadata/MetadataValidator.js +69 -38
- 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 +484 -0
- package/metadata/types.js +1 -0
- package/naming-strategy/AbstractNamingStrategy.d.ts +8 -4
- package/naming-strategy/AbstractNamingStrategy.js +8 -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 +14 -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 +6 -13
- package/platforms/Platform.js +17 -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 +174 -114
- package/typings.js +55 -42
- 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 +754 -207
- package/utils/Configuration.js +146 -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;
|
|
@@ -52,18 +50,34 @@ export declare const OptionalProps: unique symbol;
|
|
|
52
50
|
export declare const EagerProps: unique symbol;
|
|
53
51
|
export declare const HiddenProps: unique symbol;
|
|
54
52
|
export declare const Config: unique symbol;
|
|
55
|
-
|
|
56
|
-
declare
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
53
|
+
export type Opt<T = unknown> = T & Opt.Brand;
|
|
54
|
+
export declare namespace Opt {
|
|
55
|
+
const __optional: unique symbol;
|
|
56
|
+
interface Brand {
|
|
57
|
+
[__optional]?: 1;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
export type RequiredNullable<T = never> = (T & RequiredNullable.Brand) | null;
|
|
61
|
+
export declare namespace RequiredNullable {
|
|
62
|
+
const __requiredNullable: unique symbol;
|
|
63
|
+
interface Brand {
|
|
64
|
+
[__requiredNullable]?: 1;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
export type Hidden<T = unknown> = T & Hidden.Brand;
|
|
68
|
+
export declare namespace Hidden {
|
|
69
|
+
const __hidden: unique symbol;
|
|
70
|
+
interface Brand {
|
|
71
|
+
[__hidden]?: 1;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
export type DefineConfig<T extends TypeConfig> = T & DefineConfig.Brand;
|
|
75
|
+
export declare namespace DefineConfig {
|
|
76
|
+
const __config: unique symbol;
|
|
77
|
+
interface Brand {
|
|
78
|
+
[__config]?: 1;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
67
81
|
export type CleanTypeConfig<T> = Compute<Pick<T, Extract<keyof T, keyof TypeConfig>>>;
|
|
68
82
|
export interface TypeConfig {
|
|
69
83
|
forceObject?: boolean;
|
|
@@ -75,13 +89,14 @@ type PrimaryPropToType<T, Keys extends (keyof T)[]> = {
|
|
|
75
89
|
type ReadonlyPrimary<T> = T extends any[] ? Readonly<T> : T;
|
|
76
90
|
export type Primary<T> = IsAny<T> extends true ? any : T extends {
|
|
77
91
|
[PrimaryKeyProp]?: infer PK;
|
|
78
|
-
} ?
|
|
92
|
+
} ? 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
93
|
_id?: infer PK;
|
|
80
94
|
} ? ReadonlyPrimary<PK> | string : T extends {
|
|
81
|
-
uuid?: infer PK;
|
|
82
|
-
} ? ReadonlyPrimary<PK> : T extends {
|
|
83
95
|
id?: infer PK;
|
|
96
|
+
} ? ReadonlyPrimary<PK> : T extends {
|
|
97
|
+
uuid?: infer PK;
|
|
84
98
|
} ? ReadonlyPrimary<PK> : T;
|
|
99
|
+
/** @internal */
|
|
85
100
|
export type PrimaryProperty<T> = T extends {
|
|
86
101
|
[PrimaryKeyProp]?: infer PK;
|
|
87
102
|
} ? (PK extends keyof T ? PK : (PK extends any[] ? PK[number] : never)) : T extends {
|
|
@@ -89,10 +104,10 @@ export type PrimaryProperty<T> = T extends {
|
|
|
89
104
|
} ? (T extends {
|
|
90
105
|
id?: any;
|
|
91
106
|
} ? 'id' | '_id' : '_id') : T extends {
|
|
92
|
-
uuid?: any;
|
|
93
|
-
} ? 'uuid' : T extends {
|
|
94
107
|
id?: any;
|
|
95
|
-
} ? 'id' :
|
|
108
|
+
} ? 'id' : T extends {
|
|
109
|
+
uuid?: any;
|
|
110
|
+
} ? 'uuid' : never;
|
|
96
111
|
export type IPrimaryKeyValue = number | string | bigint | Date | {
|
|
97
112
|
toHexString(): string;
|
|
98
113
|
};
|
|
@@ -100,6 +115,7 @@ export type IPrimaryKey<T extends IPrimaryKeyValue = IPrimaryKeyValue> = T;
|
|
|
100
115
|
export type Scalar = boolean | number | string | bigint | symbol | Date | RegExp | Uint8Array | {
|
|
101
116
|
toHexString(): string;
|
|
102
117
|
};
|
|
118
|
+
type Primitive = boolean | number | string | bigint | symbol;
|
|
103
119
|
export type ExpandScalar<T> = null | (T extends string ? T | RegExp : T extends Date ? Date | string : T extends bigint ? bigint | string | number : T);
|
|
104
120
|
export type OperatorMap<T> = {
|
|
105
121
|
$and?: ExpandQuery<T>[];
|
|
@@ -112,6 +128,14 @@ export type OperatorMap<T> = {
|
|
|
112
128
|
$none?: ExpandQuery<T>;
|
|
113
129
|
$some?: ExpandQuery<T>;
|
|
114
130
|
$every?: ExpandQuery<T>;
|
|
131
|
+
$size?: number | {
|
|
132
|
+
$eq?: number;
|
|
133
|
+
$ne?: number;
|
|
134
|
+
$gt?: number;
|
|
135
|
+
$gte?: number;
|
|
136
|
+
$lt?: number;
|
|
137
|
+
$lte?: number;
|
|
138
|
+
};
|
|
115
139
|
$gt?: ExpandScalar<T>;
|
|
116
140
|
$gte?: ExpandScalar<T>;
|
|
117
141
|
$lt?: ExpandScalar<T>;
|
|
@@ -133,7 +157,6 @@ export type FilterValue<T> = OperatorMap<FilterItemValue<T>> | FilterItemValue<T
|
|
|
133
157
|
export type FilterObject<T> = {
|
|
134
158
|
-readonly [K in EntityKey<T>]?: ExpandQuery<ExpandProperty<T[K]>> | FilterValue<ExpandProperty<T[K]>> | null;
|
|
135
159
|
};
|
|
136
|
-
export type ExpandObject<T> = T extends object ? T extends Scalar ? never : FilterObject<T> : never;
|
|
137
160
|
export type ExpandQuery<T> = T extends object ? T extends Scalar ? never : FilterQuery<T> : FilterValue<T>;
|
|
138
161
|
export type EntityProps<T> = {
|
|
139
162
|
-readonly [K in EntityKey<T>]?: T[K];
|
|
@@ -143,10 +166,9 @@ export type FilterQuery<T> = ObjectQuery<T> | NonNullable<ExpandScalar<Primary<T
|
|
|
143
166
|
export type QBFilterQuery<T = any> = ObjectQuery<T> | Dictionary;
|
|
144
167
|
export interface IWrappedEntity<Entity extends object> {
|
|
145
168
|
isInitialized(): boolean;
|
|
146
|
-
isTouched(): boolean;
|
|
147
169
|
isManaged(): boolean;
|
|
148
170
|
populated(populated?: boolean): void;
|
|
149
|
-
populate<Hint extends string = never>(populate: AutoPath<Entity, Hint>[] | false, options?: EntityLoaderOptions<Entity>): Promise<Loaded<Entity, Hint>>;
|
|
171
|
+
populate<Hint extends string = never>(populate: readonly AutoPath<Entity, Hint, PopulatePath.ALL>[] | false, options?: EntityLoaderOptions<Entity>): Promise<Loaded<Entity, Hint>>;
|
|
150
172
|
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
173
|
toReference(): Ref<Entity> & LoadedReference<Loaded<Entity, AddEager<Entity>>>;
|
|
152
174
|
toObject(): EntityDTO<Entity>;
|
|
@@ -174,7 +196,6 @@ export interface IWrappedEntityInternal<Entity extends object> extends IWrappedE
|
|
|
174
196
|
__factory: EntityFactory;
|
|
175
197
|
__hydrator: IHydrator;
|
|
176
198
|
__initialized: boolean;
|
|
177
|
-
__touched: boolean;
|
|
178
199
|
__originalEntityData?: EntityData<Entity>;
|
|
179
200
|
__loadedProperties: Set<string>;
|
|
180
201
|
__identifier?: EntityIdentifier | EntityIdentifier[];
|
|
@@ -194,16 +215,10 @@ export interface IWrappedEntityInternal<Entity extends object> extends IWrappedE
|
|
|
194
215
|
};
|
|
195
216
|
}
|
|
196
217
|
export type AnyEntity<T = any> = Partial<T>;
|
|
197
|
-
export type EntityClass<T> = Function & {
|
|
218
|
+
export type EntityClass<T = any> = Function & {
|
|
198
219
|
prototype: T;
|
|
199
220
|
};
|
|
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
|
-
};
|
|
221
|
+
export type EntityName<T = any> = EntityClass<T> | EntityCtor<T> | EntitySchema<T, any>;
|
|
207
222
|
export type GetRepository<Entity extends {
|
|
208
223
|
[k: PropertyKey]: any;
|
|
209
224
|
}, Fallback> = Entity[typeof EntityRepositoryType] extends EntityRepository<any> | undefined ? NonNullable<Entity[typeof EntityRepositoryType]> : Fallback;
|
|
@@ -224,7 +239,7 @@ export type EntityDataProp<T, C extends boolean> = T extends Date ? string | Dat
|
|
|
224
239
|
__runtime?: infer Runtime;
|
|
225
240
|
__raw?: infer Raw;
|
|
226
241
|
} ? (C extends true ? Raw : Runtime) : T extends Reference<infer U> ? EntityDataNested<U, C> : T extends ScalarReference<infer U> ? EntityDataProp<U, C> : T extends Collection<infer U, any> ? U | U[] | EntityDataNested<U, C> | EntityDataNested<U, C>[] : T extends readonly (infer U)[] ? U extends NonArrayObject ? U | U[] | EntityDataNested<U, C> | EntityDataNested<U, C>[] : U[] | EntityDataNested<U, C>[] : EntityDataNested<T, C>;
|
|
227
|
-
export type RequiredEntityDataProp<T, O, C extends boolean> = T extends Date ? string | Date : T extends Scalar ? T : T extends {
|
|
242
|
+
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
243
|
__runtime?: infer Runtime;
|
|
229
244
|
__raw?: infer Raw;
|
|
230
245
|
} ? (C extends true ? Raw : Runtime) : T extends Reference<infer U> ? RequiredEntityDataNested<U, O, C> : T extends ScalarReference<infer U> ? RequiredEntityDataProp<U, O, C> : T extends Collection<infer U, any> ? U | U[] | RequiredEntityDataNested<U, O, C> | RequiredEntityDataNested<U, 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>;
|
|
@@ -239,7 +254,10 @@ type ExplicitlyOptionalProps<T> = (T extends {
|
|
|
239
254
|
type NullableKeys<T, V = null> = {
|
|
240
255
|
[K in keyof T]: V extends T[K] ? K : never;
|
|
241
256
|
}[keyof T];
|
|
242
|
-
type
|
|
257
|
+
type RequiredNullableKeys<T> = {
|
|
258
|
+
[K in keyof T]: Exclude<T[K], null> extends RequiredNullable.Brand ? K : never;
|
|
259
|
+
}[keyof T];
|
|
260
|
+
type ProbablyOptionalProps<T> = PrimaryProperty<T> | ExplicitlyOptionalProps<T> | Exclude<NonNullable<NullableKeys<T, null | undefined>>, RequiredNullableKeys<T>>;
|
|
243
261
|
type IsOptional<T, K extends keyof T, I> = T[K] extends Collection<any, any> ? true : ExtractType<T[K]> extends I ? true : K extends ProbablyOptionalProps<T> ? true : false;
|
|
244
262
|
type RequiredKeys<T, K extends keyof T, I> = IsOptional<T, K, I> extends false ? CleanKeys<T, K> : never;
|
|
245
263
|
type OptionalKeys<T, K extends keyof T, I> = IsOptional<T, K, I> extends false ? never : CleanKeys<T, K>;
|
|
@@ -274,7 +292,7 @@ export type Ref<T> = T extends any ? IsAny<T> extends true ? Reference<T & objec
|
|
|
274
292
|
type ExtractHiddenProps<T> = (T extends {
|
|
275
293
|
[HiddenProps]?: infer K;
|
|
276
294
|
} ? K : never) | ({
|
|
277
|
-
[K in keyof T]: T[K] extends Hidden ? K : never;
|
|
295
|
+
[K in keyof T]: T[K] extends Primitive ? (T[K] extends Hidden ? K : never) : never;
|
|
278
296
|
}[keyof T] & {});
|
|
279
297
|
type ExcludeHidden<T, K extends keyof T> = K extends ExtractHiddenProps<T> ? never : K;
|
|
280
298
|
type ExtractConfig<T> = T extends {
|
|
@@ -297,8 +315,22 @@ export type EntityDTO<T, C extends TypeConfig = never> = {
|
|
|
297
315
|
[K in keyof T as DTOOptionalKeys<T, K>]?: EntityDTOProp<T, T[K], C> | AddOptional<T[K]>;
|
|
298
316
|
};
|
|
299
317
|
type TargetKeys<T> = T extends EntityClass<infer P> ? keyof P : keyof T;
|
|
300
|
-
type
|
|
301
|
-
|
|
318
|
+
type PropertyName<T> = IsUnknown<T> extends false ? TargetKeys<T> : string;
|
|
319
|
+
type TableName = {
|
|
320
|
+
name: string;
|
|
321
|
+
schema?: string;
|
|
322
|
+
toString: () => string;
|
|
323
|
+
};
|
|
324
|
+
export type FormulaTable = {
|
|
325
|
+
alias: string;
|
|
326
|
+
name: string;
|
|
327
|
+
schema?: string;
|
|
328
|
+
qualifiedName: string;
|
|
329
|
+
toString: () => string;
|
|
330
|
+
};
|
|
331
|
+
export type IndexCallback<T> = (table: TableName, columns: Record<PropertyName<T>, string>, indexName: string) => string | Raw;
|
|
332
|
+
export type FormulaCallback<T> = (table: FormulaTable, columns: Record<PropertyName<T>, string>) => string;
|
|
333
|
+
export type CheckCallback<T> = (columns: Record<PropertyName<T>, string>) => string;
|
|
302
334
|
export type GeneratedColumnCallback<T> = (columns: Record<keyof T, string>) => string;
|
|
303
335
|
export interface CheckConstraint<T = any> {
|
|
304
336
|
name?: string;
|
|
@@ -309,6 +341,7 @@ export type AnyString = string & {};
|
|
|
309
341
|
export interface EntityProperty<Owner = any, Target = any> {
|
|
310
342
|
name: EntityKey<Owner>;
|
|
311
343
|
entity: () => EntityName<Owner>;
|
|
344
|
+
target: EntityClass<Target>;
|
|
312
345
|
type: keyof typeof types | AnyString;
|
|
313
346
|
runtimeType: 'number' | 'string' | 'boolean' | 'bigint' | 'Buffer' | 'Date' | 'object' | 'any' | AnyString;
|
|
314
347
|
targetMeta?: EntityMetadata<Target>;
|
|
@@ -334,7 +367,8 @@ export interface EntityProperty<Owner = any, Target = any> {
|
|
|
334
367
|
fieldNameRaw?: string;
|
|
335
368
|
default?: string | number | boolean | null;
|
|
336
369
|
defaultRaw?: string;
|
|
337
|
-
formula?:
|
|
370
|
+
formula?: FormulaCallback<Owner>;
|
|
371
|
+
filters?: FilterOptions;
|
|
338
372
|
prefix?: string | boolean;
|
|
339
373
|
prefixMode?: EmbeddedPrefixMode;
|
|
340
374
|
embedded?: [EntityKey<Owner>, EntityKey<Owner>];
|
|
@@ -347,11 +381,13 @@ export interface EntityProperty<Owner = any, Target = any> {
|
|
|
347
381
|
unique?: boolean | string;
|
|
348
382
|
nullable?: boolean;
|
|
349
383
|
inherited?: boolean;
|
|
384
|
+
renamedFrom?: string;
|
|
385
|
+
stiFieldNames?: string[];
|
|
386
|
+
stiFieldNameMap?: Dictionary<string>;
|
|
350
387
|
unsigned?: boolean;
|
|
351
388
|
mapToPk?: boolean;
|
|
352
389
|
persist?: boolean;
|
|
353
390
|
hydrate?: boolean;
|
|
354
|
-
trackChanges?: boolean;
|
|
355
391
|
hidden?: boolean;
|
|
356
392
|
enum?: boolean;
|
|
357
393
|
items?: (number | string)[];
|
|
@@ -362,6 +398,7 @@ export interface EntityProperty<Owner = any, Target = any> {
|
|
|
362
398
|
setter?: boolean;
|
|
363
399
|
getter?: boolean;
|
|
364
400
|
getterName?: keyof Owner;
|
|
401
|
+
accessor?: EntityKey<Owner>;
|
|
365
402
|
cascade: Cascade[];
|
|
366
403
|
orphanRemoval?: boolean;
|
|
367
404
|
onCreate?: (entity: Owner, em: EntityManager) => any;
|
|
@@ -378,13 +415,14 @@ export interface EntityProperty<Owner = any, Target = any> {
|
|
|
378
415
|
fixedOrder?: boolean;
|
|
379
416
|
fixedOrderColumn?: string;
|
|
380
417
|
pivotTable: string;
|
|
381
|
-
pivotEntity:
|
|
418
|
+
pivotEntity: EntityClass<Target>;
|
|
382
419
|
joinColumns: string[];
|
|
383
420
|
ownColumns: string[];
|
|
384
421
|
inverseJoinColumns: string[];
|
|
385
422
|
referencedColumnNames: string[];
|
|
386
423
|
referencedTableName: string;
|
|
387
424
|
referencedPKs: EntityKey<Owner>[];
|
|
425
|
+
targetKey?: string;
|
|
388
426
|
serializer?: (value: any, options?: SerializeOptions<any>) => any;
|
|
389
427
|
serializedName?: string;
|
|
390
428
|
comment?: string;
|
|
@@ -394,19 +432,22 @@ export interface EntityProperty<Owner = any, Target = any> {
|
|
|
394
432
|
optional?: boolean;
|
|
395
433
|
ignoreSchemaChanges?: ('type' | 'extra' | 'default')[];
|
|
396
434
|
deferMode?: DeferMode;
|
|
435
|
+
createForeignKeyConstraint: boolean;
|
|
397
436
|
foreignKeyName?: string;
|
|
398
437
|
}
|
|
399
|
-
export declare class EntityMetadata<
|
|
438
|
+
export declare class EntityMetadata<Entity = any, Class extends EntityCtor<Entity> = EntityCtor<Entity>> {
|
|
400
439
|
private static counter;
|
|
401
440
|
readonly _id: number;
|
|
402
441
|
readonly propertyOrder: Map<string, number>;
|
|
403
442
|
constructor(meta?: Partial<EntityMetadata>);
|
|
404
|
-
addProperty(prop: Partial<EntityProperty<
|
|
443
|
+
addProperty(prop: Partial<EntityProperty<Entity>>): void;
|
|
405
444
|
removeProperty(name: string, sync?: boolean): void;
|
|
406
|
-
getPrimaryProps(): EntityProperty<
|
|
407
|
-
getPrimaryProp(): EntityProperty<
|
|
445
|
+
getPrimaryProps(flatten?: boolean): EntityProperty<Entity>[];
|
|
446
|
+
getPrimaryProp(): EntityProperty<Entity>;
|
|
447
|
+
createColumnMappingObject(): Record<PropertyName<Entity>, string>;
|
|
408
448
|
get tableName(): string;
|
|
409
449
|
set tableName(name: string);
|
|
450
|
+
get uniqueName(): string;
|
|
410
451
|
sync(initIndexes?: boolean, config?: Configuration): void;
|
|
411
452
|
private initIndexes;
|
|
412
453
|
/** @internal */
|
|
@@ -416,67 +457,68 @@ export interface SimpleColumnMeta {
|
|
|
416
457
|
name: string;
|
|
417
458
|
type: string;
|
|
418
459
|
}
|
|
419
|
-
export
|
|
460
|
+
export type EntityCtor<T = any> = abstract new (...args: any[]) => T;
|
|
461
|
+
export interface EntityMetadata<Entity = any, Class extends EntityCtor<Entity> = EntityCtor<Entity>> {
|
|
420
462
|
name?: string;
|
|
421
463
|
className: string;
|
|
422
464
|
tableName: string;
|
|
423
465
|
schema?: string;
|
|
424
466
|
pivotTable?: boolean;
|
|
425
467
|
virtual?: boolean;
|
|
426
|
-
expression?: string | ((em: any, where: ObjectQuery<
|
|
427
|
-
discriminatorColumn?: EntityKey<
|
|
468
|
+
expression?: string | ((em: any, where: ObjectQuery<Entity>, options: FindOptions<Entity, any, any, any>, stream?: boolean) => MaybePromise<Raw | object | string>);
|
|
469
|
+
discriminatorColumn?: EntityKey<Entity> | AnyString;
|
|
428
470
|
discriminatorValue?: number | string;
|
|
429
|
-
discriminatorMap?: Dictionary<
|
|
471
|
+
discriminatorMap?: Dictionary<EntityClass>;
|
|
430
472
|
embeddable: boolean;
|
|
431
|
-
constructorParams
|
|
473
|
+
constructorParams?: (keyof Entity)[];
|
|
432
474
|
forceConstructor: boolean;
|
|
433
|
-
|
|
434
|
-
extends: string;
|
|
475
|
+
extends?: EntityName<Entity>;
|
|
435
476
|
collection: string;
|
|
436
477
|
path: string;
|
|
437
|
-
primaryKeys: EntityKey<
|
|
478
|
+
primaryKeys: EntityKey<Entity>[];
|
|
438
479
|
simplePK: boolean;
|
|
439
480
|
compositePK: boolean;
|
|
440
|
-
versionProperty: EntityKey<
|
|
441
|
-
concurrencyCheckKeys: Set<EntityKey<
|
|
442
|
-
serializedPrimaryKey
|
|
481
|
+
versionProperty: EntityKey<Entity>;
|
|
482
|
+
concurrencyCheckKeys: Set<EntityKey<Entity>>;
|
|
483
|
+
serializedPrimaryKey?: EntityKey<Entity>;
|
|
443
484
|
properties: {
|
|
444
|
-
[K in EntityKey<
|
|
485
|
+
[K in EntityKey<Entity>]: EntityProperty<Entity>;
|
|
445
486
|
};
|
|
446
|
-
props: EntityProperty<
|
|
447
|
-
relations: EntityProperty<
|
|
448
|
-
bidirectionalRelations: EntityProperty<
|
|
487
|
+
props: EntityProperty<Entity>[];
|
|
488
|
+
relations: EntityProperty<Entity>[];
|
|
489
|
+
bidirectionalRelations: EntityProperty<Entity>[];
|
|
449
490
|
referencingProperties: {
|
|
450
|
-
meta: EntityMetadata<
|
|
451
|
-
prop: EntityProperty<
|
|
491
|
+
meta: EntityMetadata<Entity>;
|
|
492
|
+
prop: EntityProperty<Entity>;
|
|
452
493
|
}[];
|
|
453
|
-
comparableProps: EntityProperty<
|
|
454
|
-
trackingProps: EntityProperty<
|
|
455
|
-
hydrateProps: EntityProperty<
|
|
456
|
-
|
|
457
|
-
|
|
494
|
+
comparableProps: EntityProperty<Entity>[];
|
|
495
|
+
trackingProps: EntityProperty<Entity>[];
|
|
496
|
+
hydrateProps: EntityProperty<Entity>[];
|
|
497
|
+
validateProps: EntityProperty<Entity>[];
|
|
498
|
+
uniqueProps: EntityProperty<Entity>[];
|
|
499
|
+
getterProps: EntityProperty<Entity>[];
|
|
458
500
|
indexes: {
|
|
459
|
-
properties
|
|
501
|
+
properties?: EntityKey<Entity> | EntityKey<Entity>[];
|
|
460
502
|
name?: string;
|
|
461
503
|
type?: string;
|
|
462
504
|
options?: Dictionary;
|
|
463
|
-
expression?: string
|
|
505
|
+
expression?: string | IndexCallback<Entity>;
|
|
464
506
|
}[];
|
|
465
507
|
uniques: {
|
|
466
|
-
properties
|
|
508
|
+
properties?: EntityKey<Entity> | EntityKey<Entity>[];
|
|
467
509
|
name?: string;
|
|
468
510
|
options?: Dictionary;
|
|
469
|
-
expression?: string
|
|
470
|
-
deferMode?: DeferMode
|
|
511
|
+
expression?: string | IndexCallback<Entity>;
|
|
512
|
+
deferMode?: DeferMode | `${DeferMode}`;
|
|
471
513
|
}[];
|
|
472
|
-
checks: CheckConstraint<
|
|
514
|
+
checks: CheckConstraint<Entity>[];
|
|
473
515
|
repositoryClass?: string;
|
|
474
516
|
repository: () => EntityClass<EntityRepository<any>>;
|
|
475
517
|
hooks: {
|
|
476
|
-
[K in EventType]?: (keyof
|
|
518
|
+
[K in EventType]?: (keyof Entity | EventSubscriber<Entity>[EventType])[];
|
|
477
519
|
};
|
|
478
|
-
prototype:
|
|
479
|
-
class:
|
|
520
|
+
prototype: Entity;
|
|
521
|
+
class: Class;
|
|
480
522
|
abstract: boolean;
|
|
481
523
|
filters: Dictionary<FilterDef>;
|
|
482
524
|
comment?: string;
|
|
@@ -484,8 +526,9 @@ export interface EntityMetadata<T = any> {
|
|
|
484
526
|
hasUniqueProps?: boolean;
|
|
485
527
|
readonly?: boolean;
|
|
486
528
|
polymorphs?: EntityMetadata[];
|
|
487
|
-
root: EntityMetadata<
|
|
529
|
+
root: EntityMetadata<Entity>;
|
|
488
530
|
definedProperties: Dictionary;
|
|
531
|
+
hasTriggers?: boolean;
|
|
489
532
|
/** @internal can be used for computed numeric cache keys */
|
|
490
533
|
readonly _id: number;
|
|
491
534
|
}
|
|
@@ -496,6 +539,7 @@ export interface CreateSchemaOptions {
|
|
|
496
539
|
export interface ClearDatabaseOptions {
|
|
497
540
|
schema?: string;
|
|
498
541
|
truncate?: boolean;
|
|
542
|
+
clearIdentityMap?: boolean;
|
|
499
543
|
}
|
|
500
544
|
export interface EnsureDatabaseOptions extends CreateSchemaOptions, ClearDatabaseOptions {
|
|
501
545
|
clear?: boolean;
|
|
@@ -523,25 +567,25 @@ export interface RefreshDatabaseOptions extends CreateSchemaOptions {
|
|
|
523
567
|
createSchema?: boolean;
|
|
524
568
|
}
|
|
525
569
|
export interface ISchemaGenerator {
|
|
526
|
-
|
|
527
|
-
|
|
570
|
+
create(options?: CreateSchemaOptions): Promise<void>;
|
|
571
|
+
update(options?: UpdateSchemaOptions): Promise<void>;
|
|
572
|
+
drop(options?: DropSchemaOptions): Promise<void>;
|
|
573
|
+
refresh(options?: RefreshDatabaseOptions): Promise<void>;
|
|
574
|
+
clear(options?: ClearDatabaseOptions): Promise<void>;
|
|
575
|
+
execute(sql: string, options?: {
|
|
576
|
+
wrap?: boolean;
|
|
577
|
+
}): Promise<void>;
|
|
528
578
|
getCreateSchemaSQL(options?: CreateSchemaOptions): Promise<string>;
|
|
529
|
-
dropSchema(options?: DropSchemaOptions): Promise<void>;
|
|
530
579
|
getDropSchemaSQL(options?: Omit<DropSchemaOptions, 'dropDb'>): Promise<string>;
|
|
531
|
-
updateSchema(options?: UpdateSchemaOptions): Promise<void>;
|
|
532
580
|
getUpdateSchemaSQL(options?: UpdateSchemaOptions): Promise<string>;
|
|
533
581
|
getUpdateSchemaMigrationSQL(options?: UpdateSchemaOptions): Promise<{
|
|
534
582
|
up: string;
|
|
535
583
|
down: string;
|
|
536
584
|
}>;
|
|
585
|
+
ensureDatabase(options?: EnsureDatabaseOptions): Promise<boolean>;
|
|
537
586
|
createDatabase(name?: string): Promise<void>;
|
|
538
587
|
dropDatabase(name?: string): Promise<void>;
|
|
539
|
-
execute(sql: string, options?: {
|
|
540
|
-
wrap?: boolean;
|
|
541
|
-
}): Promise<void>;
|
|
542
588
|
ensureIndexes(): Promise<void>;
|
|
543
|
-
refreshDatabase(options?: RefreshDatabaseOptions): Promise<void>;
|
|
544
|
-
clearDatabase(options?: ClearDatabaseOptions): Promise<void>;
|
|
545
589
|
}
|
|
546
590
|
export type ImportsResolver = (alias: string, basePath: string, extension: '.js' | '', originFileName: string) => {
|
|
547
591
|
path: string;
|
|
@@ -558,7 +602,10 @@ export interface GenerateOptions {
|
|
|
558
602
|
undefinedDefaults?: boolean;
|
|
559
603
|
bidirectionalRelations?: boolean;
|
|
560
604
|
identifiedReferences?: boolean;
|
|
561
|
-
|
|
605
|
+
entityDefinition?: 'decorators' | 'defineEntity' | 'entitySchema';
|
|
606
|
+
decorators?: 'es' | 'legacy';
|
|
607
|
+
inferEntityType?: boolean;
|
|
608
|
+
enumMode?: 'ts-enum' | 'union-type' | 'dictionary';
|
|
562
609
|
esmImport?: boolean;
|
|
563
610
|
scalarTypeInDecorator?: boolean;
|
|
564
611
|
scalarPropertiesForRelations?: 'always' | 'never' | 'smart';
|
|
@@ -618,26 +665,26 @@ export interface IMigrator {
|
|
|
618
665
|
/**
|
|
619
666
|
* Checks current schema for changes, generates new migration if there are any.
|
|
620
667
|
*/
|
|
621
|
-
|
|
668
|
+
create(path?: string, blank?: boolean, initial?: boolean, name?: string): Promise<MigrationResult>;
|
|
622
669
|
/**
|
|
623
670
|
* Checks current schema for changes.
|
|
624
671
|
*/
|
|
625
|
-
|
|
672
|
+
checkSchema(): Promise<boolean>;
|
|
626
673
|
/**
|
|
627
674
|
* Creates initial migration. This generates the schema based on metadata, and checks whether all the tables
|
|
628
675
|
* are already present. If yes, it will also automatically log the migration as executed.
|
|
629
676
|
* Initial migration can be created only if the schema is already aligned with the metadata, or when no schema
|
|
630
677
|
* is present - in such case regular migration would have the same effect.
|
|
631
678
|
*/
|
|
632
|
-
|
|
679
|
+
createInitial(path?: string): Promise<MigrationResult>;
|
|
633
680
|
/**
|
|
634
681
|
* Returns list of already executed migrations.
|
|
635
682
|
*/
|
|
636
|
-
|
|
683
|
+
getExecuted(): Promise<MigrationRow[]>;
|
|
637
684
|
/**
|
|
638
685
|
* Returns list of pending (not yet executed) migrations found in the migration directory.
|
|
639
686
|
*/
|
|
640
|
-
|
|
687
|
+
getPending(): Promise<UmzugMigration[]>;
|
|
641
688
|
/**
|
|
642
689
|
* Executes specified migrations. Without parameter it will migrate up to the latest version.
|
|
643
690
|
*/
|
|
@@ -686,12 +733,17 @@ export interface MigrationObject {
|
|
|
686
733
|
name: string;
|
|
687
734
|
class: Constructor<Migration>;
|
|
688
735
|
}
|
|
689
|
-
|
|
736
|
+
type EntityFromInput<T> = T extends readonly EntityName<infer U>[] ? U : T extends EntityName<infer U> ? U : never;
|
|
737
|
+
type FilterDefResolved<T extends object = any> = {
|
|
690
738
|
name: string;
|
|
691
|
-
cond:
|
|
739
|
+
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
740
|
default?: boolean;
|
|
693
|
-
entity?:
|
|
741
|
+
entity?: EntityName<T> | EntityName<T>[];
|
|
694
742
|
args?: boolean;
|
|
743
|
+
strict?: boolean;
|
|
744
|
+
};
|
|
745
|
+
export type FilterDef<T extends EntityName | readonly EntityName[] = any> = FilterDefResolved<EntityFromInput<T>> & {
|
|
746
|
+
entity?: T;
|
|
695
747
|
};
|
|
696
748
|
export type Populate<T, P extends string = never> = readonly AutoPath<T, P, `${PopulatePath}`>[] | false;
|
|
697
749
|
export type PopulateOptions<T> = {
|
|
@@ -699,18 +751,21 @@ export type PopulateOptions<T> = {
|
|
|
699
751
|
strategy?: LoadStrategy;
|
|
700
752
|
all?: boolean;
|
|
701
753
|
filter?: boolean;
|
|
754
|
+
joinType?: 'inner join' | 'left join';
|
|
702
755
|
children?: PopulateOptions<T[keyof T]>[];
|
|
756
|
+
/** When true, ignores `mapToPk` on the property and returns full entity data instead of just PKs. */
|
|
757
|
+
dataOnly?: boolean;
|
|
703
758
|
};
|
|
704
759
|
type Loadable<T extends object> = Collection<T, any> | Reference<T> | Ref<T> | readonly T[];
|
|
705
760
|
type ExtractType<T> = T extends Loadable<infer U> ? U : T;
|
|
706
761
|
type ExtractStringKeys<T> = {
|
|
707
|
-
[K in keyof T]
|
|
762
|
+
[K in keyof T]-?: CleanKeys<T, K>;
|
|
708
763
|
}[keyof T] & {};
|
|
709
764
|
type StringKeys<T, E extends string = never> = T extends Collection<any, any> ? ExtractStringKeys<ExtractType<T>> | E : T extends Reference<any> ? ExtractStringKeys<ExtractType<T>> | E : T extends object ? ExtractStringKeys<ExtractType<T>> | E : never;
|
|
710
765
|
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
766
|
type Prev = [never, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
|
|
712
767
|
type CollectionKeys<T> = T extends object ? {
|
|
713
|
-
[K in keyof T]
|
|
768
|
+
[K in keyof T]-?: T[K] extends Collection<any> ? IsAny<T[K]> extends true ? never : K & string : never;
|
|
714
769
|
}[keyof T] & {} : never;
|
|
715
770
|
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 & `${string}.` extends never ? P : P & `${string}.`) extends infer Q ? Q extends `${infer A}.${infer B}` ? A extends StringKeys<O, E> ? `${A}.${AutoPath<NonNullable<GetStringKey<O, A, E>>, B, E, Prev[D]>}` : never : Q extends StringKeys<O, E> ? (NonNullable<GetStringKey<O, Q, E>> extends unknown ? Exclude<P, `${string}.`> : never) | (StringKeys<NonNullable<GetStringKey<O, Q, E>>, E> extends never ? never : `${Q & string}.`) : StringKeys<O, E> | `${CollectionKeys<O>}:ref` : never : never : never;
|
|
716
771
|
export type UnboxArray<T> = T extends any[] ? ArrayElement<T> : T;
|
|
@@ -782,23 +837,23 @@ export interface Highlighter {
|
|
|
782
837
|
highlight(text: string): string;
|
|
783
838
|
}
|
|
784
839
|
export interface IMetadataStorage {
|
|
785
|
-
getAll():
|
|
786
|
-
get<T = any>(entity:
|
|
787
|
-
find<T = any>(entity:
|
|
788
|
-
has(entity:
|
|
789
|
-
set(entity:
|
|
790
|
-
reset(entity:
|
|
840
|
+
getAll(): Map<EntityName, EntityMetadata>;
|
|
841
|
+
get<T = any>(entity: EntityName<T>, init?: boolean, validate?: boolean): EntityMetadata<T>;
|
|
842
|
+
find<T = any>(entity: EntityName<T>): EntityMetadata<T> | undefined;
|
|
843
|
+
has<T>(entity: EntityName<T>): boolean;
|
|
844
|
+
set<T>(entity: EntityName<T>, meta: EntityMetadata): EntityMetadata;
|
|
845
|
+
reset<T>(entity: EntityName<T>): void;
|
|
791
846
|
}
|
|
792
847
|
export interface IHydrator {
|
|
793
848
|
/**
|
|
794
849
|
* Hydrates the whole entity. This process handles custom type conversions, creating missing Collection instances,
|
|
795
850
|
* mapping FKs to entity instances, as well as merging those entities.
|
|
796
851
|
*/
|
|
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;
|
|
852
|
+
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
853
|
/**
|
|
799
854
|
* Hydrates primary keys only
|
|
800
855
|
*/
|
|
801
|
-
hydrateReference<T extends object>(entity: T, meta: EntityMetadata<T>, data: EntityData<T>, factory: EntityFactory, convertCustomTypes?: boolean, schema?: string, parentSchema?: string): void;
|
|
856
|
+
hydrateReference<T extends object>(entity: T, meta: EntityMetadata<T>, data: EntityData<T>, factory: EntityFactory, convertCustomTypes?: boolean, schema?: string, parentSchema?: string, normalizeAccessors?: boolean): void;
|
|
802
857
|
isRunning(): boolean;
|
|
803
858
|
}
|
|
804
859
|
export interface HydratorConstructor {
|
|
@@ -808,17 +863,22 @@ export interface ISeedManager {
|
|
|
808
863
|
seed(...classNames: Constructor<Seeder>[]): Promise<void>;
|
|
809
864
|
/** @internal */
|
|
810
865
|
seedString(...classNames: string[]): Promise<void>;
|
|
811
|
-
|
|
866
|
+
create(className: string): Promise<string>;
|
|
812
867
|
}
|
|
813
868
|
export interface Seeder<T extends Dictionary = Dictionary> {
|
|
814
869
|
run(em: EntityManager, context?: T): void | Promise<void>;
|
|
815
870
|
}
|
|
816
871
|
export type ConnectionType = 'read' | 'write';
|
|
817
872
|
export type MetadataProcessor = (metadata: EntityMetadata[], platform: Platform) => MaybePromise<void>;
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
873
|
+
export type MaybeReturnType<T> = T extends (...args: any[]) => infer R ? R : T;
|
|
874
|
+
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> {
|
|
875
|
+
readonly name: TName;
|
|
876
|
+
readonly properties: TProperties;
|
|
877
|
+
readonly tableName: TTableName;
|
|
878
|
+
/** @internal Direct entity type access - avoids expensive pattern matching */
|
|
879
|
+
readonly '~entity': TEntity;
|
|
880
|
+
}
|
|
881
|
+
export type InferEntity<Schema> = Schema extends {
|
|
882
|
+
'~entity': infer E;
|
|
883
|
+
} ? E : Schema extends EntitySchema<infer Entity> ? Entity : Schema extends EntityClass<infer Entity> ? Entity : Schema;
|
|
824
884
|
export {};
|