@yandjin-mikro-orm/core 6.1.4-rc-sti-changes-1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (264) hide show
  1. package/EntityManager.d.ts +553 -0
  2. package/EntityManager.js +1736 -0
  3. package/LICENSE +21 -0
  4. package/MikroORM.d.ts +102 -0
  5. package/MikroORM.js +258 -0
  6. package/README.md +383 -0
  7. package/cache/CacheAdapter.d.ts +40 -0
  8. package/cache/CacheAdapter.js +2 -0
  9. package/cache/FileCacheAdapter.d.ts +31 -0
  10. package/cache/FileCacheAdapter.js +90 -0
  11. package/cache/GeneratedCacheAdapter.d.ts +25 -0
  12. package/cache/GeneratedCacheAdapter.js +38 -0
  13. package/cache/MemoryCacheAdapter.d.ts +24 -0
  14. package/cache/MemoryCacheAdapter.js +44 -0
  15. package/cache/NullCacheAdapter.d.ts +19 -0
  16. package/cache/NullCacheAdapter.js +30 -0
  17. package/cache/index.d.ts +5 -0
  18. package/cache/index.js +21 -0
  19. package/connections/Connection.d.ts +85 -0
  20. package/connections/Connection.js +128 -0
  21. package/connections/index.d.ts +1 -0
  22. package/connections/index.js +17 -0
  23. package/decorators/Check.d.ts +3 -0
  24. package/decorators/Check.js +17 -0
  25. package/decorators/CreateRequestContext.d.ts +2 -0
  26. package/decorators/CreateRequestContext.js +31 -0
  27. package/decorators/Embeddable.d.ts +8 -0
  28. package/decorators/Embeddable.js +15 -0
  29. package/decorators/Embedded.d.ts +13 -0
  30. package/decorators/Embedded.js +21 -0
  31. package/decorators/EnsureRequestContext.d.ts +2 -0
  32. package/decorators/EnsureRequestContext.js +26 -0
  33. package/decorators/Entity.d.ts +18 -0
  34. package/decorators/Entity.js +17 -0
  35. package/decorators/Enum.d.ts +9 -0
  36. package/decorators/Enum.js +20 -0
  37. package/decorators/Filter.d.ts +2 -0
  38. package/decorators/Filter.js +12 -0
  39. package/decorators/Formula.d.ts +5 -0
  40. package/decorators/Formula.js +19 -0
  41. package/decorators/Indexed.d.ts +12 -0
  42. package/decorators/Indexed.js +25 -0
  43. package/decorators/ManyToMany.d.ts +21 -0
  44. package/decorators/ManyToMany.js +17 -0
  45. package/decorators/ManyToOne.d.ts +15 -0
  46. package/decorators/ManyToOne.js +17 -0
  47. package/decorators/OneToMany.d.ts +18 -0
  48. package/decorators/OneToMany.js +21 -0
  49. package/decorators/OneToOne.d.ts +12 -0
  50. package/decorators/OneToOne.js +11 -0
  51. package/decorators/PrimaryKey.d.ts +8 -0
  52. package/decorators/PrimaryKey.js +24 -0
  53. package/decorators/Property.d.ts +218 -0
  54. package/decorators/Property.js +35 -0
  55. package/decorators/Subscriber.d.ts +1 -0
  56. package/decorators/Subscriber.js +2 -0
  57. package/decorators/hooks.d.ts +16 -0
  58. package/decorators/hooks.js +60 -0
  59. package/decorators/index.d.ts +17 -0
  60. package/decorators/index.js +36 -0
  61. package/drivers/DatabaseDriver.d.ts +72 -0
  62. package/drivers/DatabaseDriver.js +358 -0
  63. package/drivers/IDatabaseDriver.d.ts +193 -0
  64. package/drivers/IDatabaseDriver.js +4 -0
  65. package/drivers/index.d.ts +2 -0
  66. package/drivers/index.js +18 -0
  67. package/entity/ArrayCollection.d.ts +113 -0
  68. package/entity/ArrayCollection.js +386 -0
  69. package/entity/BaseEntity.d.ts +22 -0
  70. package/entity/BaseEntity.js +47 -0
  71. package/entity/Collection.d.ts +104 -0
  72. package/entity/Collection.js +373 -0
  73. package/entity/EntityAssigner.d.ts +28 -0
  74. package/entity/EntityAssigner.js +226 -0
  75. package/entity/EntityFactory.d.ts +41 -0
  76. package/entity/EntityFactory.js +302 -0
  77. package/entity/EntityHelper.d.ts +29 -0
  78. package/entity/EntityHelper.js +250 -0
  79. package/entity/EntityIdentifier.d.ts +10 -0
  80. package/entity/EntityIdentifier.js +19 -0
  81. package/entity/EntityLoader.d.ts +65 -0
  82. package/entity/EntityLoader.js +579 -0
  83. package/entity/EntityRepository.d.ts +161 -0
  84. package/entity/EntityRepository.js +207 -0
  85. package/entity/EntityValidator.d.ts +19 -0
  86. package/entity/EntityValidator.js +152 -0
  87. package/entity/Reference.d.ts +89 -0
  88. package/entity/Reference.js +242 -0
  89. package/entity/WrappedEntity.d.ts +67 -0
  90. package/entity/WrappedEntity.js +146 -0
  91. package/entity/index.d.ts +13 -0
  92. package/entity/index.js +29 -0
  93. package/entity/wrap.d.ts +15 -0
  94. package/entity/wrap.js +26 -0
  95. package/enums.d.ts +160 -0
  96. package/enums.js +169 -0
  97. package/errors.d.ts +65 -0
  98. package/errors.js +222 -0
  99. package/events/EventManager.d.ts +17 -0
  100. package/events/EventManager.js +77 -0
  101. package/events/EventSubscriber.d.ts +39 -0
  102. package/events/EventSubscriber.js +2 -0
  103. package/events/TransactionEventBroadcaster.d.ts +11 -0
  104. package/events/TransactionEventBroadcaster.js +17 -0
  105. package/events/index.d.ts +3 -0
  106. package/events/index.js +19 -0
  107. package/exceptions.d.ts +104 -0
  108. package/exceptions.js +130 -0
  109. package/hydration/Hydrator.d.ts +23 -0
  110. package/hydration/Hydrator.js +51 -0
  111. package/hydration/ObjectHydrator.d.ts +24 -0
  112. package/hydration/ObjectHydrator.js +332 -0
  113. package/hydration/index.d.ts +2 -0
  114. package/hydration/index.js +18 -0
  115. package/index.d.ts +25 -0
  116. package/index.js +50 -0
  117. package/index.mjs +192 -0
  118. package/logging/DefaultLogger.d.ts +32 -0
  119. package/logging/DefaultLogger.js +90 -0
  120. package/logging/Logger.d.ts +56 -0
  121. package/logging/Logger.js +2 -0
  122. package/logging/SimpleLogger.d.ts +17 -0
  123. package/logging/SimpleLogger.js +31 -0
  124. package/logging/colors.d.ts +9 -0
  125. package/logging/colors.js +20 -0
  126. package/logging/index.d.ts +4 -0
  127. package/logging/index.js +20 -0
  128. package/metadata/EntitySchema.d.ts +74 -0
  129. package/metadata/EntitySchema.js +293 -0
  130. package/metadata/MetadataDiscovery.d.ts +71 -0
  131. package/metadata/MetadataDiscovery.js +1244 -0
  132. package/metadata/MetadataProvider.d.ts +11 -0
  133. package/metadata/MetadataProvider.js +23 -0
  134. package/metadata/MetadataStorage.d.ts +22 -0
  135. package/metadata/MetadataStorage.js +87 -0
  136. package/metadata/MetadataValidator.d.ts +24 -0
  137. package/metadata/MetadataValidator.js +213 -0
  138. package/metadata/ReflectMetadataProvider.d.ts +8 -0
  139. package/metadata/ReflectMetadataProvider.js +48 -0
  140. package/metadata/index.d.ts +6 -0
  141. package/metadata/index.js +22 -0
  142. package/naming-strategy/AbstractNamingStrategy.d.ts +18 -0
  143. package/naming-strategy/AbstractNamingStrategy.js +48 -0
  144. package/naming-strategy/EntityCaseNamingStrategy.d.ts +12 -0
  145. package/naming-strategy/EntityCaseNamingStrategy.js +32 -0
  146. package/naming-strategy/MongoNamingStrategy.d.ts +9 -0
  147. package/naming-strategy/MongoNamingStrategy.js +25 -0
  148. package/naming-strategy/NamingStrategy.d.ts +52 -0
  149. package/naming-strategy/NamingStrategy.js +2 -0
  150. package/naming-strategy/UnderscoreNamingStrategy.d.ts +10 -0
  151. package/naming-strategy/UnderscoreNamingStrategy.js +28 -0
  152. package/naming-strategy/index.d.ts +5 -0
  153. package/naming-strategy/index.js +21 -0
  154. package/package.json +70 -0
  155. package/platforms/ExceptionConverter.d.ts +5 -0
  156. package/platforms/ExceptionConverter.js +11 -0
  157. package/platforms/Platform.d.ts +201 -0
  158. package/platforms/Platform.js +452 -0
  159. package/platforms/index.d.ts +2 -0
  160. package/platforms/index.js +18 -0
  161. package/serialization/EntitySerializer.d.ts +34 -0
  162. package/serialization/EntitySerializer.js +206 -0
  163. package/serialization/EntityTransformer.d.ts +8 -0
  164. package/serialization/EntityTransformer.js +192 -0
  165. package/serialization/SerializationContext.d.ts +30 -0
  166. package/serialization/SerializationContext.js +111 -0
  167. package/serialization/index.d.ts +3 -0
  168. package/serialization/index.js +19 -0
  169. package/types/ArrayType.d.ts +13 -0
  170. package/types/ArrayType.js +47 -0
  171. package/types/BigIntType.d.ts +16 -0
  172. package/types/BigIntType.js +45 -0
  173. package/types/BlobType.d.ts +10 -0
  174. package/types/BlobType.js +27 -0
  175. package/types/BooleanType.d.ts +8 -0
  176. package/types/BooleanType.js +16 -0
  177. package/types/DateTimeType.d.ts +8 -0
  178. package/types/DateTimeType.js +16 -0
  179. package/types/DateType.d.ts +8 -0
  180. package/types/DateType.js +16 -0
  181. package/types/DecimalType.d.ts +11 -0
  182. package/types/DecimalType.js +22 -0
  183. package/types/DoubleType.d.ts +11 -0
  184. package/types/DoubleType.js +22 -0
  185. package/types/EnumArrayType.d.ts +9 -0
  186. package/types/EnumArrayType.js +32 -0
  187. package/types/EnumType.d.ts +8 -0
  188. package/types/EnumType.js +16 -0
  189. package/types/FloatType.d.ts +8 -0
  190. package/types/FloatType.js +16 -0
  191. package/types/IntegerType.d.ts +8 -0
  192. package/types/IntegerType.js +16 -0
  193. package/types/IntervalType.d.ts +8 -0
  194. package/types/IntervalType.js +16 -0
  195. package/types/JsonType.d.ts +13 -0
  196. package/types/JsonType.js +34 -0
  197. package/types/MediumIntType.d.ts +6 -0
  198. package/types/MediumIntType.js +10 -0
  199. package/types/SmallIntType.d.ts +8 -0
  200. package/types/SmallIntType.js +16 -0
  201. package/types/StringType.d.ts +8 -0
  202. package/types/StringType.js +16 -0
  203. package/types/TextType.d.ts +8 -0
  204. package/types/TextType.js +16 -0
  205. package/types/TimeType.d.ts +9 -0
  206. package/types/TimeType.js +23 -0
  207. package/types/TinyIntType.d.ts +8 -0
  208. package/types/TinyIntType.js +16 -0
  209. package/types/Type.d.ts +64 -0
  210. package/types/Type.js +84 -0
  211. package/types/Uint8ArrayType.d.ts +11 -0
  212. package/types/Uint8ArrayType.js +37 -0
  213. package/types/UnknownType.d.ts +7 -0
  214. package/types/UnknownType.js +13 -0
  215. package/types/UuidType.d.ts +7 -0
  216. package/types/UuidType.js +13 -0
  217. package/types/index.d.ts +75 -0
  218. package/types/index.js +77 -0
  219. package/typings.d.ts +767 -0
  220. package/typings.js +198 -0
  221. package/unit-of-work/ChangeSet.d.ts +34 -0
  222. package/unit-of-work/ChangeSet.js +62 -0
  223. package/unit-of-work/ChangeSetComputer.d.ts +26 -0
  224. package/unit-of-work/ChangeSetComputer.js +153 -0
  225. package/unit-of-work/ChangeSetPersister.d.ts +50 -0
  226. package/unit-of-work/ChangeSetPersister.js +361 -0
  227. package/unit-of-work/CommitOrderCalculator.d.ts +62 -0
  228. package/unit-of-work/CommitOrderCalculator.js +113 -0
  229. package/unit-of-work/IdentityMap.d.ts +17 -0
  230. package/unit-of-work/IdentityMap.js +84 -0
  231. package/unit-of-work/UnitOfWork.d.ts +124 -0
  232. package/unit-of-work/UnitOfWork.js +1013 -0
  233. package/unit-of-work/index.d.ts +6 -0
  234. package/unit-of-work/index.js +22 -0
  235. package/utils/AbstractSchemaGenerator.d.ts +38 -0
  236. package/utils/AbstractSchemaGenerator.js +101 -0
  237. package/utils/Configuration.d.ts +390 -0
  238. package/utils/Configuration.js +357 -0
  239. package/utils/ConfigurationLoader.d.ts +29 -0
  240. package/utils/ConfigurationLoader.js +282 -0
  241. package/utils/Cursor.d.ts +77 -0
  242. package/utils/Cursor.js +169 -0
  243. package/utils/DataloaderUtils.d.ts +43 -0
  244. package/utils/DataloaderUtils.js +194 -0
  245. package/utils/EntityComparator.d.ts +73 -0
  246. package/utils/EntityComparator.js +568 -0
  247. package/utils/NullHighlighter.d.ts +4 -0
  248. package/utils/NullHighlighter.js +9 -0
  249. package/utils/QueryHelper.d.ts +28 -0
  250. package/utils/QueryHelper.js +228 -0
  251. package/utils/RawQueryFragment.d.ts +96 -0
  252. package/utils/RawQueryFragment.js +188 -0
  253. package/utils/RequestContext.d.ts +34 -0
  254. package/utils/RequestContext.js +54 -0
  255. package/utils/TransactionContext.d.ts +19 -0
  256. package/utils/TransactionContext.js +34 -0
  257. package/utils/Utils.d.ts +274 -0
  258. package/utils/Utils.js +1073 -0
  259. package/utils/clone.d.ts +6 -0
  260. package/utils/clone.js +127 -0
  261. package/utils/index.d.ts +13 -0
  262. package/utils/index.js +29 -0
  263. package/utils/upsert-utils.d.ts +6 -0
  264. package/utils/upsert-utils.js +33 -0
package/typings.d.ts ADDED
@@ -0,0 +1,767 @@
1
+ import type { Transaction } from './connections';
2
+ import { type Cascade, type EventType, type LoadStrategy, type QueryOrderMap, ReferenceKind } from './enums';
3
+ import { type AssignOptions, type Collection, type EntityFactory, type EntityIdentifier, type EntityLoaderOptions, type EntityRepository, Reference, type ScalarReference } from './entity';
4
+ import type { SerializationContext, SerializeOptions } from './serialization';
5
+ import type { EntitySchema, MetadataStorage } from './metadata';
6
+ import type { Type, types } from './types';
7
+ import type { Platform } from './platforms';
8
+ import type { Configuration } from './utils';
9
+ import type { EntityManager } from './EntityManager';
10
+ import type { EventSubscriber } from './events';
11
+ import type { FindOneOptions, FindOptions } from './drivers';
12
+ export type Constructor<T = unknown> = new (...args: any[]) => T;
13
+ export type Dictionary<T = any> = {
14
+ [k: string]: T;
15
+ };
16
+ export type EntityKey<T = unknown> = string & keyof {
17
+ [K in keyof T as CleanKeys<T, K>]?: unknown;
18
+ };
19
+ export type EntityValue<T> = T[EntityKey<T>];
20
+ export type FilterKey<T> = keyof FilterQuery<T>;
21
+ export type AsyncFunction<R = any, T = Dictionary> = (args: T) => Promise<T>;
22
+ export type Compute<T> = {
23
+ [K in keyof T]: T[K];
24
+ } & {};
25
+ type InternalKeys = 'EntityRepositoryType' | 'PrimaryKeyProp' | 'OptionalProps' | 'EagerProps' | 'HiddenProps' | '__selectedType' | '__loadedType';
26
+ export type CleanKeys<T, K extends keyof T> = (T[K] & {}) extends Function ? never : (K extends symbol | InternalKeys ? never : K);
27
+ export type FunctionKeys<T, K extends keyof T> = T[K] extends Function ? K : never;
28
+ export type Cast<T, R> = T extends R ? T : R;
29
+ export type IsUnknown<T> = T extends unknown ? unknown extends T ? true : never : never;
30
+ export type IsAny<T> = 0 extends (1 & T) ? true : false;
31
+ export type IsNever<T, True = true, False = false> = [T] extends [never] ? True : False;
32
+ export type NoInfer<T> = [T][T extends any ? 0 : never];
33
+ export type MaybePromise<T> = T | Promise<T>;
34
+ export type DeepPartial<T> = T & {
35
+ [P in keyof T]?: T[P] extends (infer U)[] ? DeepPartial<U>[] : T[P] extends Readonly<infer U>[] ? Readonly<DeepPartial<U>>[] : DeepPartial<T[P]>;
36
+ };
37
+ export declare const EntityRepositoryType: unique symbol;
38
+ export declare const PrimaryKeyProp: unique symbol;
39
+ export declare const OptionalProps: unique symbol;
40
+ export declare const EagerProps: unique symbol;
41
+ export declare const HiddenProps: unique symbol;
42
+ export declare const Config: unique symbol;
43
+ declare const __optional: unique symbol;
44
+ declare const __hidden: unique symbol;
45
+ declare const __config: unique symbol;
46
+ export type Opt<T = unknown> = T & {
47
+ [__optional]?: 1;
48
+ };
49
+ export type Hidden<T = unknown> = T & {
50
+ [__hidden]?: 1;
51
+ };
52
+ export type DefineConfig<T extends TypeConfig> = T & {
53
+ [__config]?: 1;
54
+ };
55
+ export type CleanTypeConfig<T> = Compute<Pick<T, Extract<keyof T, keyof TypeConfig>>>;
56
+ export interface TypeConfig {
57
+ forceObject?: boolean;
58
+ }
59
+ export type UnwrapPrimary<T> = T extends Scalar ? T : T extends Reference<infer U> ? Primary<U> : Primary<T>;
60
+ type PrimaryPropToType<T, Keys extends (keyof T)[]> = {
61
+ [Index in keyof Keys]: UnwrapPrimary<T[Keys[Index]]>;
62
+ };
63
+ type ReadonlyPrimary<T> = T extends any[] ? Readonly<T> : T;
64
+ export type Primary<T> = IsAny<T> extends true ? any : T extends {
65
+ [PrimaryKeyProp]?: infer PK;
66
+ } ? (PK extends keyof T ? ReadonlyPrimary<UnwrapPrimary<T[PK]>> : (PK extends (keyof T)[] ? ReadonlyPrimary<PrimaryPropToType<T, PK>> : PK)) : T extends {
67
+ _id?: infer PK;
68
+ } ? ReadonlyPrimary<PK> | string : T extends {
69
+ uuid?: infer PK;
70
+ } ? ReadonlyPrimary<PK> : T extends {
71
+ id?: infer PK;
72
+ } ? ReadonlyPrimary<PK> : T;
73
+ export type PrimaryProperty<T> = T extends {
74
+ [PrimaryKeyProp]?: infer PK;
75
+ } ? (PK extends keyof T ? PK : (PK extends any[] ? PK[number] : never)) : T extends {
76
+ _id?: any;
77
+ } ? (T extends {
78
+ id?: any;
79
+ } ? 'id' | '_id' : '_id') : T extends {
80
+ uuid?: any;
81
+ } ? 'uuid' : T extends {
82
+ id?: any;
83
+ } ? 'id' : never;
84
+ export type IPrimaryKeyValue = number | string | bigint | Date | {
85
+ toHexString(): string;
86
+ };
87
+ export type IPrimaryKey<T extends IPrimaryKeyValue = IPrimaryKeyValue> = T;
88
+ export type Scalar = boolean | number | string | bigint | symbol | Date | RegExp | Uint8Array | {
89
+ toHexString(): string;
90
+ };
91
+ export type ExpandScalar<T> = null | (T extends string ? T | RegExp : T extends Date ? Date | string : T extends bigint ? bigint | string | number : T);
92
+ export type OperatorMap<T> = {
93
+ $and?: ExpandQuery<T>[];
94
+ $or?: ExpandQuery<T>[];
95
+ $eq?: ExpandScalar<T> | ExpandScalar<T>[];
96
+ $ne?: ExpandScalar<T>;
97
+ $in?: ExpandScalar<T>[];
98
+ $nin?: ExpandScalar<T>[];
99
+ $not?: ExpandQuery<T>;
100
+ $none?: ExpandQuery<T>;
101
+ $some?: ExpandQuery<T>;
102
+ $every?: ExpandQuery<T>;
103
+ $gt?: ExpandScalar<T>;
104
+ $gte?: ExpandScalar<T>;
105
+ $lt?: ExpandScalar<T>;
106
+ $lte?: ExpandScalar<T>;
107
+ $like?: string;
108
+ $re?: string;
109
+ $ilike?: string;
110
+ $fulltext?: string;
111
+ $overlap?: string[] | object;
112
+ $contains?: string[] | object;
113
+ $contained?: string[] | object;
114
+ $exists?: boolean;
115
+ };
116
+ export type FilterItemValue<T> = T | ExpandScalar<T> | Primary<T>;
117
+ export type FilterValue<T> = OperatorMap<FilterItemValue<T>> | FilterItemValue<T> | FilterItemValue<T>[] | null;
118
+ export type FilterObject<T> = {
119
+ -readonly [K in EntityKey<T>]?: ExpandQuery<ExpandProperty<T[K]>> | FilterValue<ExpandProperty<T[K]>> | null;
120
+ };
121
+ export type ExpandObject<T> = T extends object ? T extends Scalar ? never : FilterObject<T> : never;
122
+ export type ExpandQuery<T> = T extends object ? T extends Scalar ? never : FilterQuery<T> : FilterValue<T>;
123
+ export type EntityProps<T> = {
124
+ -readonly [K in EntityKey<T>]?: T[K];
125
+ };
126
+ export type ObjectQuery<T> = OperatorMap<T> & ExpandObject<T>;
127
+ export type FilterQuery<T> = ObjectQuery<T> | NonNullable<ExpandScalar<Primary<T>>> | NonNullable<EntityProps<T> & OperatorMap<T>> | FilterQuery<T>[];
128
+ export type QBFilterQuery<T = any> = ObjectQuery<T> | Dictionary;
129
+ export interface IWrappedEntity<Entity extends object> {
130
+ isInitialized(): boolean;
131
+ isTouched(): boolean;
132
+ isManaged(): boolean;
133
+ populated(populated?: boolean): void;
134
+ populate<Hint extends string = never>(populate: AutoPath<Entity, Hint>[] | false, options?: EntityLoaderOptions<Entity>): Promise<Loaded<Entity, Hint>>;
135
+ init<Hint extends string = never, Fields extends string = '*', Excludes extends string = never>(options?: FindOneOptions<Entity, Hint, Fields, Excludes>): Promise<Loaded<Entity, Hint, Fields, Excludes> | null>;
136
+ toReference(): Ref<Entity> & LoadedReference<Loaded<Entity, AddEager<Entity>>>;
137
+ toObject(): EntityDTO<Entity>;
138
+ toObject(ignoreFields: never[]): EntityDTO<Entity>;
139
+ toObject<Ignored extends EntityKey<Entity>>(ignoreFields: Ignored[]): Omit<EntityDTO<Entity>, Ignored>;
140
+ toJSON(...args: any[]): EntityDTO<Entity>;
141
+ toPOJO(): EntityDTO<Entity>;
142
+ serialize<Hint extends string = never, Exclude extends string = never>(options?: SerializeOptions<Entity, Hint, Exclude>): EntityDTO<Loaded<Entity, Hint>>;
143
+ assign<Naked extends FromEntityType<Entity> = FromEntityType<Entity>, Data extends EntityData<Naked> | Partial<EntityDTO<Naked>> = EntityData<Naked> | Partial<EntityDTO<Naked>>>(data: Data & IsSubset<EntityData<Naked>, Data>, options?: AssignOptions): MergeSelected<Entity, Naked, keyof Data & string>;
144
+ getSchema(): string | undefined;
145
+ setSchema(schema?: string): void;
146
+ }
147
+ export interface IWrappedEntityInternal<Entity extends object> extends IWrappedEntity<Entity> {
148
+ hasPrimaryKey(): boolean;
149
+ getPrimaryKey(convertCustomTypes?: boolean): Primary<Entity> | null;
150
+ getPrimaryKeys(convertCustomTypes?: boolean): Primary<Entity>[] | null;
151
+ setPrimaryKey(val: Primary<Entity>): void;
152
+ getSerializedPrimaryKey(): string & keyof Entity;
153
+ __meta: EntityMetadata<Entity>;
154
+ __data: Dictionary;
155
+ __em?: EntityManager;
156
+ __platform: Platform;
157
+ __config: Configuration;
158
+ __factory: EntityFactory;
159
+ __hydrator: IHydrator;
160
+ __initialized: boolean;
161
+ __touched: boolean;
162
+ __originalEntityData?: EntityData<Entity>;
163
+ __loadedProperties: Set<string>;
164
+ __identifier?: EntityIdentifier;
165
+ __managed: boolean;
166
+ __processing: boolean;
167
+ __schema?: string;
168
+ __populated: boolean;
169
+ __onLoadFired: boolean;
170
+ __reference?: Ref<Entity>;
171
+ __pk?: Primary<Entity>;
172
+ __primaryKeys: Primary<Entity>[];
173
+ __serializationContext: {
174
+ root?: SerializationContext<Entity>;
175
+ populate?: PopulateOptions<Entity>[];
176
+ fields?: Set<string>;
177
+ exclude?: string[];
178
+ };
179
+ }
180
+ export type AnyEntity<T = any> = Partial<T>;
181
+ export type EntityClass<T> = Function & {
182
+ prototype: T;
183
+ };
184
+ export type EntityClassGroup<T> = {
185
+ entity: EntityClass<T>;
186
+ schema: EntityMetadata<T> | EntitySchema<T>;
187
+ };
188
+ export type EntityName<T> = string | EntityClass<T> | EntitySchema<T, any> | {
189
+ name: string;
190
+ };
191
+ export type GetRepository<Entity extends {
192
+ [k: PropertyKey]: any;
193
+ }, Fallback> = Entity[typeof EntityRepositoryType] extends EntityRepository<Entity> | undefined ? NonNullable<Entity[typeof EntityRepositoryType]> : Fallback;
194
+ export type EntityDataPropValue<T> = T | Primary<T>;
195
+ type ExpandEntityProp<T> = T extends Record<string, any> ? {
196
+ [K in keyof T as CleanKeys<T, K>]?: EntityDataProp<ExpandProperty<T[K]>> | EntityDataPropValue<ExpandProperty<T[K]>> | null;
197
+ } | EntityDataPropValue<ExpandProperty<T>> : T;
198
+ type ExpandRequiredEntityProp<T, I> = T extends Record<string, any> ? ExpandRequiredEntityPropObject<T, I> | EntityDataPropValue<ExpandProperty<T>> : T;
199
+ type ExpandRequiredEntityPropObject<T, I = never> = {
200
+ [K in keyof T as RequiredKeys<T, K, I>]: RequiredEntityDataProp<ExpandProperty<T[K]>, T> | EntityDataPropValue<ExpandProperty<T[K]>>;
201
+ } & {
202
+ [K in keyof T as OptionalKeys<T, K, I>]?: RequiredEntityDataProp<ExpandProperty<T[K]>, T> | EntityDataPropValue<ExpandProperty<T[K]>> | null | undefined;
203
+ };
204
+ export type EntityDataProp<T> = T extends Date ? string | Date : T extends Scalar ? T : T extends Reference<infer U> ? EntityDataNested<U> : T extends ScalarReference<infer U> ? EntityDataProp<U> : T extends Collection<infer U, any> ? U | U[] | EntityDataNested<U> | EntityDataNested<U>[] : T extends readonly (infer U)[] ? U | U[] | EntityDataNested<U> | EntityDataNested<U>[] : EntityDataNested<T>;
205
+ export type RequiredEntityDataProp<T, O> = T extends Date ? string | Date : T extends Scalar ? T : T extends Reference<infer U> ? RequiredEntityDataNested<U, O> : T extends ScalarReference<infer U> ? RequiredEntityDataProp<U, O> : T extends Collection<infer U, any> ? U | U[] | RequiredEntityDataNested<U, O> | RequiredEntityDataNested<U, O>[] : T extends readonly (infer U)[] ? U | U[] | RequiredEntityDataNested<U, O> | RequiredEntityDataNested<U, O>[] : RequiredEntityDataNested<T, O>;
206
+ export type EntityDataNested<T> = T extends undefined ? never : T extends any[] ? Readonly<T> : EntityData<T> | ExpandEntityProp<T>;
207
+ type EntityDataItem<T> = T | EntityDataProp<T> | null;
208
+ export type RequiredEntityDataNested<T, O> = T extends any[] ? Readonly<T> : RequiredEntityData<T, O> | ExpandRequiredEntityProp<T, O>;
209
+ type ExplicitlyOptionalProps<T> = (T extends {
210
+ [OptionalProps]?: infer K;
211
+ } ? K : never) | ({
212
+ [K in keyof T]: T[K] extends Opt ? K : never;
213
+ }[keyof T] & {});
214
+ type NullableKeys<T, V = null> = {
215
+ [K in keyof T]: V extends T[K] ? K : never;
216
+ }[keyof T];
217
+ type ProbablyOptionalProps<T> = PrimaryProperty<T> | ExplicitlyOptionalProps<T> | Defined<NullableKeys<T>>;
218
+ 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;
219
+ type RequiredKeys<T, K extends keyof T, I> = IsOptional<T, K, I> extends false ? CleanKeys<T, K> : never;
220
+ type OptionalKeys<T, K extends keyof T, I> = IsOptional<T, K, I> extends false ? never : CleanKeys<T, K>;
221
+ export type EntityData<T> = {
222
+ [K in EntityKey<T>]?: EntityDataItem<T[K]>;
223
+ };
224
+ export type RequiredEntityData<T, I = never> = {
225
+ [K in keyof T as RequiredKeys<T, K, I>]: T[K] | RequiredEntityDataProp<T[K], T> | Primary<T[K]>;
226
+ } & {
227
+ [K in keyof T as OptionalKeys<T, K, I>]?: T[K] | RequiredEntityDataProp<T[K], T> | Primary<T[K]> | null;
228
+ };
229
+ export type EntityDictionary<T> = EntityData<T> & Record<any, any>;
230
+ type ExtractEagerProps<T> = T extends {
231
+ [EagerProps]?: infer PK;
232
+ } ? PK : never;
233
+ type Relation<T> = {
234
+ [P in keyof T as T[P] extends unknown[] | Record<string | number | symbol, unknown> ? P : never]?: T[P];
235
+ };
236
+ /** Identity type that can be used to get around issues with cycles in bidirectional relations. It will disable reflect-metadata inference. */
237
+ export type Rel<T> = T;
238
+ /** Alias for `ScalarReference` (see {@apilink Ref}). */
239
+ export type ScalarRef<T> = ScalarReference<T>;
240
+ /** Alias for `Reference<T> & { id: number }` (see {@apilink Ref}). */
241
+ export type EntityRef<T extends object> = true extends IsUnknown<PrimaryProperty<T>> ? Reference<T> : IsAny<T> extends true ? Reference<T> : ({
242
+ [K in PrimaryProperty<T> & keyof T]: T[K];
243
+ } & Reference<T>);
244
+ /**
245
+ * Ref type represents a `Reference` instance, and adds the primary keys to its prototype automatically, so you can do
246
+ * `ref.id` instead of `ref.unwrap().id`. It resolves to either `ScalarRef` or `EntityRef`, based on the type argument.
247
+ */
248
+ export type Ref<T> = IsAny<T> extends true ? Reference<T & object> : T extends Scalar ? ScalarReference<T> : EntityRef<T & object>;
249
+ type ExtractHiddenProps<T> = (T extends {
250
+ [HiddenProps]?: infer K;
251
+ } ? K : never) | ({
252
+ [K in keyof T]: T[K] extends Hidden ? K : never;
253
+ }[keyof T] & {});
254
+ type ExcludeHidden<T, K extends keyof T> = K extends ExtractHiddenProps<T> ? never : K;
255
+ type ExtractConfig<T> = T extends {
256
+ [Config]?: infer K;
257
+ } ? (K & TypeConfig) : TypeConfig;
258
+ type PreferExplicitConfig<E, I> = IsNever<E, I, E>;
259
+ type PrimaryOrObject<T, U, C extends TypeConfig> = PreferExplicitConfig<C, ExtractConfig<T>>['forceObject'] extends true ? {
260
+ [K in PrimaryProperty<U> & keyof U]: U[K];
261
+ } : Primary<U>;
262
+ export type EntityDTOProp<E, T, C extends TypeConfig = never> = T extends Scalar ? T : T extends LoadedReference<infer U> ? EntityDTO<U, C> : T extends Reference<infer U> ? PrimaryOrObject<E, U, C> : T extends ScalarReference<infer U> ? U : T extends {
263
+ getItems(check?: boolean): infer U;
264
+ } ? (U extends readonly (infer V)[] ? EntityDTO<V, C>[] : EntityDTO<U, C>) : T extends {
265
+ $: infer U;
266
+ } ? (U extends readonly (infer V)[] ? EntityDTO<V, C>[] : EntityDTO<U, C>) : T extends readonly (infer U)[] ? (T extends readonly [infer U, ...infer V] ? T : U[]) : T extends Relation<T> ? EntityDTO<T, C> : T;
267
+ type DTOProbablyOptionalProps<T> = Defined<NullableKeys<T, undefined>>;
268
+ type DTOIsOptional<T, K extends keyof T> = T[K] extends LoadedCollection<any> ? false : K extends PrimaryProperty<T> ? false : K extends DTOProbablyOptionalProps<T> ? true : false;
269
+ type DTORequiredKeys<T, K extends keyof T> = DTOIsOptional<T, K> extends false ? ExcludeHidden<T, K> & CleanKeys<T, K> : never;
270
+ type DTOOptionalKeys<T, K extends keyof T> = DTOIsOptional<T, K> extends false ? never : ExcludeHidden<T, K> & CleanKeys<T, K>;
271
+ export type EntityDTO<T, C extends TypeConfig = never> = {
272
+ [K in keyof T as DTORequiredKeys<T, K>]: EntityDTOProp<T, T[K], C> | AddOptional<T[K]>;
273
+ } & {
274
+ [K in keyof T as DTOOptionalKeys<T, K>]?: EntityDTOProp<T, T[K], C> | AddOptional<T[K]>;
275
+ };
276
+ export type CheckCallback<T> = (columns: Record<keyof T, string>) => string;
277
+ export type GeneratedColumnCallback<T> = (columns: Record<keyof T, string>) => string;
278
+ export interface CheckConstraint<T = any> {
279
+ name?: string;
280
+ property?: string;
281
+ expression: string | CheckCallback<T>;
282
+ }
283
+ export type AnyString = string & {};
284
+ export interface EntityProperty<Owner = any, Target = any> {
285
+ name: EntityKey<Owner>;
286
+ entity: () => EntityName<Owner>;
287
+ type: keyof typeof types | AnyString;
288
+ runtimeType: 'number' | 'string' | 'boolean' | 'bigint' | 'Buffer' | 'Date';
289
+ targetMeta?: EntityMetadata<Target>;
290
+ columnTypes: string[];
291
+ generated?: string | GeneratedColumnCallback<Owner>;
292
+ customType?: Type<any>;
293
+ customTypes: (Type<any> | undefined)[];
294
+ hasConvertToJSValueSQL: boolean;
295
+ hasConvertToDatabaseValueSQL: boolean;
296
+ autoincrement?: boolean;
297
+ returning?: boolean;
298
+ primary?: boolean;
299
+ serializedPrimaryKey: boolean;
300
+ lazy?: boolean;
301
+ array?: boolean;
302
+ length?: number;
303
+ precision?: number;
304
+ scale?: number;
305
+ kind: ReferenceKind;
306
+ ref?: boolean;
307
+ fieldNames: string[];
308
+ fieldNameRaw?: string;
309
+ default?: string | number | boolean | null;
310
+ defaultRaw?: string;
311
+ formula?: (alias: string) => string;
312
+ prefix?: string | boolean;
313
+ embedded?: [EntityKey<Owner>, EntityKey<Owner>];
314
+ embeddedPath?: string[];
315
+ embeddable: EntityClass<Owner>;
316
+ embeddedProps: Dictionary<EntityProperty>;
317
+ discriminatorColumn?: string;
318
+ object?: boolean;
319
+ index?: boolean | string;
320
+ unique?: boolean | string;
321
+ nullable?: boolean;
322
+ inherited?: boolean;
323
+ unsigned?: boolean;
324
+ mapToPk?: boolean;
325
+ persist?: boolean;
326
+ hydrate?: boolean;
327
+ trackChanges?: boolean;
328
+ hidden?: boolean;
329
+ enum?: boolean;
330
+ items?: (number | string)[];
331
+ nativeEnumName?: string;
332
+ version?: boolean;
333
+ concurrencyCheck?: boolean;
334
+ eager?: boolean;
335
+ setter?: boolean;
336
+ getter?: boolean;
337
+ getterName?: keyof Owner;
338
+ cascade: Cascade[];
339
+ orphanRemoval?: boolean;
340
+ onCreate?: (entity: Owner, em: EntityManager) => any;
341
+ onUpdate?: (entity: Owner, em: EntityManager) => any;
342
+ deleteRule?: 'cascade' | 'no action' | 'set null' | 'set default' | AnyString;
343
+ updateRule?: 'cascade' | 'no action' | 'set null' | 'set default' | AnyString;
344
+ strategy?: LoadStrategy;
345
+ owner: boolean;
346
+ inversedBy: EntityKey<Target>;
347
+ mappedBy: EntityKey<Target>;
348
+ where?: FilterQuery<Target>;
349
+ orderBy?: QueryOrderMap<Owner> | QueryOrderMap<Owner>[];
350
+ customOrder?: string[] | number[] | boolean[];
351
+ fixedOrder?: boolean;
352
+ fixedOrderColumn?: string;
353
+ pivotTable: string;
354
+ pivotEntity: string;
355
+ joinColumns: string[];
356
+ inverseJoinColumns: string[];
357
+ referencedColumnNames: string[];
358
+ referencedTableName: string;
359
+ referencedPKs: EntityKey<Owner>[];
360
+ serializer?: (value: any) => any;
361
+ serializedName?: string;
362
+ comment?: string;
363
+ /** mysql only */
364
+ extra?: string;
365
+ userDefined?: boolean;
366
+ optional?: boolean;
367
+ ignoreSchemaChanges?: ('type' | 'extra')[];
368
+ }
369
+ export declare class EntityMetadata<T = any> {
370
+ private static counter;
371
+ readonly _id: number;
372
+ readonly propertyOrder: Map<string, number>;
373
+ constructor(meta?: Partial<EntityMetadata>);
374
+ getStiRoot(): EntityMetadata<T>;
375
+ addProperty(prop: Partial<EntityProperty<T>>, sync?: boolean): void;
376
+ removeProperty(name: string, sync?: boolean): void;
377
+ getPrimaryProps(): EntityProperty<T>[];
378
+ get tableName(): string;
379
+ set tableName(name: string);
380
+ sync(initIndexes?: boolean): void;
381
+ private initIndexes;
382
+ /** @internal */
383
+ clone(): this;
384
+ }
385
+ export interface SimpleColumnMeta {
386
+ name: string;
387
+ type: string;
388
+ }
389
+ export interface EntityMetadata<T = any> {
390
+ name?: string;
391
+ className: string;
392
+ tableName: string;
393
+ schema?: string;
394
+ pivotTable?: boolean;
395
+ virtual?: boolean;
396
+ expression?: string | ((em: any, where: FilterQuery<T>, options: FindOptions<T, any, any, any>) => object | string);
397
+ discriminatorColumn?: EntityKey<T> | AnyString;
398
+ discriminatorValue?: number | string;
399
+ discriminatorMap?: Dictionary<string>;
400
+ embeddable: boolean;
401
+ constructorParams: EntityKey<T>[];
402
+ forceConstructor: boolean;
403
+ toJsonParams: string[];
404
+ extends: string;
405
+ collection: string;
406
+ path: string;
407
+ primaryKeys: EntityKey<T>[];
408
+ simplePK: boolean;
409
+ compositePK: boolean;
410
+ versionProperty: EntityKey<T>;
411
+ concurrencyCheckKeys: Set<EntityKey<T>>;
412
+ serializedPrimaryKey: EntityKey<T>;
413
+ properties: {
414
+ [K in EntityKey<T>]: EntityProperty<T>;
415
+ };
416
+ props: EntityProperty<T>[];
417
+ relations: EntityProperty<T>[];
418
+ bidirectionalRelations: EntityProperty<T>[];
419
+ referencingProperties: {
420
+ meta: EntityMetadata<T>;
421
+ prop: EntityProperty<T>;
422
+ }[];
423
+ comparableProps: EntityProperty<T>[];
424
+ trackingProps: EntityProperty<T>[];
425
+ hydrateProps: EntityProperty<T>[];
426
+ uniqueProps: EntityProperty<T>[];
427
+ indexes: {
428
+ properties: EntityKey<T> | EntityKey<T>[];
429
+ name?: string;
430
+ type?: string;
431
+ options?: Dictionary;
432
+ expression?: string;
433
+ }[];
434
+ uniques: {
435
+ properties: EntityKey<T> | EntityKey<T>[];
436
+ name?: string;
437
+ options?: Dictionary;
438
+ expression?: string;
439
+ }[];
440
+ checks: CheckConstraint<T>[];
441
+ repository: () => EntityClass<EntityRepository<any>>;
442
+ hooks: {
443
+ [K in EventType]?: (keyof T | EventSubscriber<T>[EventType])[];
444
+ };
445
+ prototype: T;
446
+ class: EntityClass<T>;
447
+ abstract: boolean;
448
+ useCache: boolean;
449
+ filters: Dictionary<FilterDef>;
450
+ comment?: string;
451
+ selfReferencing?: boolean;
452
+ hasUniqueProps?: boolean;
453
+ readonly?: boolean;
454
+ polymorphs?: EntityMetadata[];
455
+ root: EntityMetadata<T>;
456
+ stiRoot?: EntityMetadata<T>;
457
+ definedProperties: Dictionary;
458
+ stiCombined: EntityMetadata<T>;
459
+ stiChildren: EntityMetadata<T>[];
460
+ /** @internal can be used for computed numeric cache keys */
461
+ readonly _id: number;
462
+ }
463
+ export interface CreateSchemaOptions {
464
+ wrap?: boolean;
465
+ schema?: string;
466
+ }
467
+ export interface ClearDatabaseOptions {
468
+ schema?: string;
469
+ truncate?: boolean;
470
+ }
471
+ export interface EnsureDatabaseOptions extends CreateSchemaOptions, ClearDatabaseOptions {
472
+ clear?: boolean;
473
+ create?: boolean;
474
+ forceCheck?: boolean;
475
+ }
476
+ export interface DropSchemaOptions {
477
+ wrap?: boolean;
478
+ dropMigrationsTable?: boolean;
479
+ dropDb?: boolean;
480
+ schema?: string;
481
+ }
482
+ export interface UpdateSchemaOptions<DatabaseSchema = unknown> {
483
+ wrap?: boolean;
484
+ safe?: boolean;
485
+ dropDb?: boolean;
486
+ dropTables?: boolean;
487
+ schema?: string;
488
+ fromSchema?: DatabaseSchema;
489
+ }
490
+ export interface RefreshDatabaseOptions extends CreateSchemaOptions {
491
+ ensureIndexes?: boolean;
492
+ }
493
+ export interface ISchemaGenerator {
494
+ createSchema(options?: CreateSchemaOptions): Promise<void>;
495
+ ensureDatabase(options?: EnsureDatabaseOptions): Promise<boolean>;
496
+ getCreateSchemaSQL(options?: CreateSchemaOptions): Promise<string>;
497
+ dropSchema(options?: DropSchemaOptions): Promise<void>;
498
+ getDropSchemaSQL(options?: Omit<DropSchemaOptions, 'dropDb'>): Promise<string>;
499
+ updateSchema(options?: UpdateSchemaOptions): Promise<void>;
500
+ getUpdateSchemaSQL(options?: UpdateSchemaOptions): Promise<string>;
501
+ getUpdateSchemaMigrationSQL(options?: UpdateSchemaOptions): Promise<{
502
+ up: string;
503
+ down: string;
504
+ }>;
505
+ createDatabase(name: string): Promise<void>;
506
+ dropDatabase(name?: string): Promise<void>;
507
+ execute(sql: string, options?: {
508
+ wrap?: boolean;
509
+ }): Promise<void>;
510
+ ensureIndexes(): Promise<void>;
511
+ refreshDatabase(options?: RefreshDatabaseOptions): Promise<void>;
512
+ clearDatabase(options?: ClearDatabaseOptions): Promise<void>;
513
+ }
514
+ export interface GenerateOptions {
515
+ path?: string;
516
+ save?: boolean;
517
+ schema?: string;
518
+ skipTables?: string[];
519
+ skipColumns?: Record<string, string[]>;
520
+ bidirectionalRelations?: boolean;
521
+ identifiedReferences?: boolean;
522
+ entitySchema?: boolean;
523
+ esmImport?: boolean;
524
+ scalarTypeInDecorator?: boolean;
525
+ scalarPropertiesForRelations?: 'always' | 'never' | 'smart';
526
+ fileName?: (className: string) => string;
527
+ onlyPurePivotTables?: boolean;
528
+ readOnlyPivotTables?: boolean;
529
+ customBaseEntityName?: string;
530
+ useCoreBaseEntity?: boolean;
531
+ onInitialMetadata?: MetadataProcessor;
532
+ onProcessedMetadata?: MetadataProcessor;
533
+ }
534
+ export interface IEntityGenerator {
535
+ generate(options?: GenerateOptions): Promise<string[]>;
536
+ }
537
+ export type UmzugMigration = {
538
+ name: string;
539
+ path?: string;
540
+ };
541
+ export type MigrateOptions = {
542
+ from?: string | number;
543
+ to?: string | number;
544
+ migrations?: string[];
545
+ transaction?: Transaction;
546
+ };
547
+ export type MigrationResult = {
548
+ fileName: string;
549
+ code: string;
550
+ diff: MigrationDiff;
551
+ };
552
+ export type MigrationRow = {
553
+ name: string;
554
+ executed_at: Date;
555
+ };
556
+ /**
557
+ * @internal
558
+ */
559
+ export interface IMigratorStorage {
560
+ executed(): Promise<string[]>;
561
+ logMigration(params: Dictionary): Promise<void>;
562
+ unlogMigration(params: Dictionary): Promise<void>;
563
+ getExecutedMigrations(): Promise<MigrationRow[]>;
564
+ ensureTable?(): Promise<void>;
565
+ setMasterMigration(trx: Transaction): void;
566
+ unsetMasterMigration(): void;
567
+ getMigrationName(name: string): string;
568
+ getTableName?(): {
569
+ schemaName?: string;
570
+ tableName: string;
571
+ };
572
+ }
573
+ export interface IMigrator {
574
+ /**
575
+ * Checks current schema for changes, generates new migration if there are any.
576
+ */
577
+ createMigration(path?: string, blank?: boolean, initial?: boolean, name?: string): Promise<MigrationResult>;
578
+ /**
579
+ * Checks current schema for changes.
580
+ */
581
+ checkMigrationNeeded(): Promise<boolean>;
582
+ /**
583
+ * Creates initial migration. This generates the schema based on metadata, and checks whether all the tables
584
+ * are already present. If yes, it will also automatically log the migration as executed.
585
+ * Initial migration can be created only if the schema is already aligned with the metadata, or when no schema
586
+ * is present - in such case regular migration would have the same effect.
587
+ */
588
+ createInitialMigration(path?: string): Promise<MigrationResult>;
589
+ /**
590
+ * Returns list of already executed migrations.
591
+ */
592
+ getExecutedMigrations(): Promise<MigrationRow[]>;
593
+ /**
594
+ * Returns list of pending (not yet executed) migrations found in the migration directory.
595
+ */
596
+ getPendingMigrations(): Promise<UmzugMigration[]>;
597
+ /**
598
+ * Executes specified migrations. Without parameter it will migrate up to the latest version.
599
+ */
600
+ up(options?: string | string[] | MigrateOptions): Promise<UmzugMigration[]>;
601
+ /**
602
+ * Executes down migrations to the given point. Without parameter it will migrate one version down.
603
+ */
604
+ down(options?: string | string[] | MigrateOptions): Promise<UmzugMigration[]>;
605
+ /**
606
+ * @internal
607
+ */
608
+ getStorage(): IMigratorStorage;
609
+ }
610
+ export interface MigrationDiff {
611
+ up: string[];
612
+ down: string[];
613
+ }
614
+ export interface IMigrationGenerator {
615
+ /**
616
+ * Generates the full contents of migration file. Uses `generateMigrationFile` to get the file contents.
617
+ */
618
+ generate(diff: MigrationDiff, path?: string, name?: string): Promise<[string, string]>;
619
+ /**
620
+ * Creates single migration statement. By default adds `this.addSql(sql);` to the code.
621
+ */
622
+ createStatement(sql: string, padLeft: number): string;
623
+ /**
624
+ * Returns the file contents of given migration.
625
+ */
626
+ generateMigrationFile(className: string, diff: MigrationDiff): string;
627
+ }
628
+ export interface Migration {
629
+ up(): Promise<void>;
630
+ down(): Promise<void>;
631
+ }
632
+ export interface MigrationObject {
633
+ name: string;
634
+ class: Constructor<Migration>;
635
+ }
636
+ export type FilterDef = {
637
+ name: string;
638
+ cond: Dictionary | ((args: Dictionary, type: 'read' | 'update' | 'delete', em: any, options?: FindOptions<any, any, any, any> | FindOneOptions<any, any, any, any>) => Dictionary | Promise<Dictionary>);
639
+ default?: boolean;
640
+ entity?: string[];
641
+ args?: boolean;
642
+ };
643
+ export type Populate<T, P extends string = never> = readonly AutoPath<T, P, '*' | '$infer'>[] | false;
644
+ export type PopulateOptions<T> = {
645
+ field: EntityKey<T>;
646
+ strategy?: LoadStrategy;
647
+ all?: boolean;
648
+ filter?: boolean;
649
+ children?: PopulateOptions<T[keyof T]>[];
650
+ };
651
+ type Loadable<T extends object> = Collection<T, any> | Reference<T> | Ref<T> | readonly T[];
652
+ type ExtractType<T> = T extends Loadable<infer U> ? U : T;
653
+ type ExtractStringKeys<T> = {
654
+ [K in keyof T]: CleanKeys<T, K>;
655
+ }[keyof T] & {};
656
+ 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;
657
+ type GetStringKey<T, K extends StringKeys<T, string>, E extends string> = K extends keyof T ? ExtractType<T[K]> : (K extends E ? keyof T : never);
658
+ type Prev = [never, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
659
+ type CollectionKeys<T> = T extends object ? {
660
+ [K in keyof T]: T[K] extends Collection<any> ? IsAny<T[K]> extends true ? never : K & string : never;
661
+ }[keyof T] & {} : never;
662
+ 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<Defined<GetStringKey<O, A, E>>, B, E, Prev[D]>}` : never : Q extends StringKeys<O, E> ? (Defined<GetStringKey<O, Q, E>> extends unknown ? Exclude<P, `${string}.`> : never) | (StringKeys<Defined<GetStringKey<O, Q, E>>, E> extends never ? never : `${Q}.`) : StringKeys<O, E> | `${CollectionKeys<O>}:ref` : never : never : never;
663
+ export type UnboxArray<T> = T extends any[] ? ArrayElement<T> : T;
664
+ export type ArrayElement<ArrayType extends unknown[]> = ArrayType extends (infer ElementType)[] ? ElementType : never;
665
+ export type ExpandProperty<T> = T extends Reference<infer U> ? NonNullable<U> : T extends Collection<infer U, any> ? NonNullable<U> : T extends (infer U)[] ? NonNullable<U> : NonNullable<T>;
666
+ type LoadedLoadable<T, E extends object> = T extends Collection<any, any> ? LoadedCollection<E> : T extends Reference<any> ? LoadedReference<E> : T extends ScalarReference<infer U> ? LoadedScalarReference<U> : T extends Scalar | any[] ? T : E;
667
+ type IsTrue<T> = IsNever<T> extends true ? false : T extends boolean ? T extends true ? true : false : false;
668
+ type StringLiteral<T> = T extends string ? string extends T ? never : T : never;
669
+ type Prefix<T, K> = K extends `${infer S}.${string}` ? S : (K extends '*' ? keyof T : K);
670
+ type IsPrefixedExclude<T, K extends keyof T, E extends string> = K extends E ? never : K;
671
+ 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 Loadable<any> ? K : never) : IsNever<StringLiteral<L>> extends true ? never : K extends Prefix<T, L> ? K : K extends PrimaryProperty<T> ? K : never;
672
+ type Suffix<Key, Hint extends string, All = true | '*'> = Hint extends `${infer Pref}.${infer Suf}` ? (Pref extends Key ? Suf : never) : Hint extends All ? Hint : never;
673
+ type Defined<T> = T & {};
674
+ export type IsSubset<T, U> = keyof U extends keyof T ? {} : Dictionary extends U ? {} : {
675
+ [K in keyof U as K extends keyof T ? never : CleanKeys<U, K>]: never;
676
+ };
677
+ declare const __selectedType: unique symbol;
678
+ declare const __loadedType: unique symbol;
679
+ type AnyStringToNever<T> = string extends T ? never : T;
680
+ export type MergeSelected<T, U, F extends string> = T extends Loaded<infer TT, infer P, infer FF, infer E> ? IsNever<Exclude<E, F>> extends true ? Loaded<TT, P, AnyStringToNever<F> | AnyStringToNever<FF>> : Loaded<TT, AnyStringToNever<P>, AnyStringToNever<FF>, AnyStringToNever<Exclude<E, F>>> : T extends {
681
+ [__selectedType]?: [U, infer P, infer FF];
682
+ } ? string extends FF ? T : string extends P ? Selected<U, never, F | (FF & string)> : Selected<U, P & string, F | (FF & string)> : T;
683
+ type MergeFields<F1 extends string, F2 extends string, P1, P2> = P1 | P2 extends '*' ? '*' : F1 | F2;
684
+ type MergeExcludes<F extends string, E extends string> = F extends E ? never : Exclude<E, F>;
685
+ export type MergeLoaded<T, U, P extends string, F extends string, E extends string, R extends boolean = false> = T extends Loaded<U, infer PP, infer FF, infer EE> ? string extends FF ? Loaded<T, P, F, AnyStringToNever<EE> | E> : string extends P ? Loaded<U, never, F | (FF & string), MergeExcludes<F | (FF & string), EE | E>> : Loaded<U, P | AnyStringToNever<PP>, MergeFields<F, AnyStringToNever<FF>, P, PP>, MergeExcludes<MergeFields<F, AnyStringToNever<FF>, P, PP>, (R extends true ? never : EE) | E>> : Loaded<T, P, F>;
686
+ type AddOptional<T> = undefined | null extends T ? null | undefined : null extends T ? null : undefined extends T ? undefined : never;
687
+ type LoadedProp<T, L extends string = never, F extends string = '*', E extends string = never> = LoadedLoadable<T, Loaded<ExtractType<T>, L, F, E>>;
688
+ export type AddEager<T> = ExtractEagerProps<T> & string;
689
+ export type ExpandHint<T, L extends string> = L | AddEager<T>;
690
+ export type Selected<T, L extends string = never, F extends string = '*'> = {
691
+ [K in keyof T as IsPrefixed<T, K, L | F | AddEager<T>>]: LoadedProp<Defined<T[K]>, Suffix<K, L, true>, Suffix<K, F, true>> | AddOptional<T[K]>;
692
+ } & {
693
+ [K in keyof T as FunctionKeys<T, K>]: T[K];
694
+ } & {
695
+ [__selectedType]?: [T, L, F];
696
+ };
697
+ export type EntityType<T> = T | {
698
+ [__loadedType]?: T;
699
+ } | {
700
+ [__selectedType]?: [T, any, any];
701
+ };
702
+ export type FromEntityType<T> = T extends EntityType<infer U> ? U : T;
703
+ type LoadedInternal<T, L extends string = never, F extends string = '*', E extends string = never> = [
704
+ F
705
+ ] extends ['*'] ? IsNever<E> extends true ? T & {
706
+ [K in keyof T as IsPrefixed<T, K, ExpandHint<T, L>>]: LoadedProp<Defined<T[K]>, Suffix<K, L>, Suffix<K, F>, Suffix<K, E>> | AddOptional<T[K]>;
707
+ } : {
708
+ [K in keyof T as IsPrefixed<T, K, ExpandHint<T, L>, E>]: LoadedProp<Defined<T[K]>, Suffix<K, L>, Suffix<K, F>, Suffix<K, E>> | AddOptional<T[K]>;
709
+ } : Selected<T, L, F>;
710
+ /**
711
+ * Represents entity with its loaded relations (`populate` hint) and selected properties (`fields` hint).
712
+ */
713
+ export type Loaded<T, L extends string = never, F extends string = '*', E extends string = never> = LoadedInternal<T, L, F, E> & {
714
+ [__loadedType]?: T;
715
+ };
716
+ export interface LoadedReference<T> extends Reference<Defined<T>> {
717
+ $: Defined<T>;
718
+ get(): Defined<T>;
719
+ }
720
+ export interface LoadedScalarReference<T> extends ScalarReference<Defined<T>> {
721
+ $: Defined<T>;
722
+ get(): Defined<T>;
723
+ }
724
+ export interface LoadedCollection<T extends object> extends Collection<T> {
725
+ $: Collection<T>;
726
+ get(): Collection<T>;
727
+ getItems(check?: boolean): T[];
728
+ }
729
+ export type New<T, P extends string = string> = Loaded<T, P>;
730
+ export interface Highlighter {
731
+ highlight(text: string): string;
732
+ }
733
+ export interface IMetadataStorage {
734
+ getAll(): Dictionary<EntityMetadata>;
735
+ get<T = any>(entity: string, init?: boolean, validate?: boolean): EntityMetadata<T>;
736
+ find<T = any>(entity: string): EntityMetadata<T> | undefined;
737
+ has(entity: string): boolean;
738
+ set(entity: string, meta: EntityMetadata): EntityMetadata;
739
+ reset(entity: string): void;
740
+ }
741
+ export interface IHydrator {
742
+ /**
743
+ * Hydrates the whole entity. This process handles custom type conversions, creating missing Collection instances,
744
+ * mapping FKs to entity instances, as well as merging those entities.
745
+ */
746
+ hydrate<T extends object>(entity: T, meta: EntityMetadata<T>, data: EntityData<T>, factory: EntityFactory, type: 'full' | 'reference', newEntity?: boolean, convertCustomTypes?: boolean, schema?: string): void;
747
+ /**
748
+ * Hydrates primary keys only
749
+ */
750
+ hydrateReference<T extends object>(entity: T, meta: EntityMetadata<T>, data: EntityData<T>, factory: EntityFactory, convertCustomTypes?: boolean, schema?: string): void;
751
+ isRunning(): boolean;
752
+ }
753
+ export interface HydratorConstructor {
754
+ new (metadata: MetadataStorage, platform: Platform, config: Configuration): IHydrator;
755
+ }
756
+ export interface ISeedManager {
757
+ seed(...classNames: Constructor<Seeder>[]): Promise<void>;
758
+ /** @internal */
759
+ seedString(...classNames: string[]): Promise<void>;
760
+ createSeeder(className: string): Promise<string>;
761
+ }
762
+ export interface Seeder<T extends Dictionary = Dictionary> {
763
+ run(em: EntityManager, context?: T): void | Promise<void>;
764
+ }
765
+ export type ConnectionType = 'read' | 'write';
766
+ export type MetadataProcessor = (metadata: EntityMetadata[], platform: Platform) => MaybePromise<void>;
767
+ export {};