@mikro-orm/core 7.0.2 → 7.0.3-dev.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 (205) hide show
  1. package/EntityManager.d.ts +583 -883
  2. package/EntityManager.js +1869 -1897
  3. package/MikroORM.d.ts +74 -103
  4. package/MikroORM.js +179 -178
  5. package/cache/CacheAdapter.d.ts +36 -36
  6. package/cache/FileCacheAdapter.d.ts +24 -30
  7. package/cache/FileCacheAdapter.js +78 -80
  8. package/cache/GeneratedCacheAdapter.d.ts +20 -18
  9. package/cache/GeneratedCacheAdapter.js +30 -30
  10. package/cache/MemoryCacheAdapter.d.ts +20 -18
  11. package/cache/MemoryCacheAdapter.js +36 -35
  12. package/cache/NullCacheAdapter.d.ts +16 -16
  13. package/cache/NullCacheAdapter.js +24 -24
  14. package/connections/Connection.d.ts +84 -95
  15. package/connections/Connection.js +168 -165
  16. package/drivers/DatabaseDriver.d.ts +80 -186
  17. package/drivers/DatabaseDriver.js +443 -450
  18. package/drivers/IDatabaseDriver.d.ts +301 -440
  19. package/entity/BaseEntity.d.ts +83 -120
  20. package/entity/BaseEntity.js +43 -43
  21. package/entity/Collection.d.ts +179 -212
  22. package/entity/Collection.js +721 -727
  23. package/entity/EntityAssigner.d.ts +77 -88
  24. package/entity/EntityAssigner.js +230 -231
  25. package/entity/EntityFactory.d.ts +54 -66
  26. package/entity/EntityFactory.js +383 -425
  27. package/entity/EntityHelper.d.ts +22 -34
  28. package/entity/EntityHelper.js +267 -280
  29. package/entity/EntityIdentifier.d.ts +4 -4
  30. package/entity/EntityIdentifier.js +10 -10
  31. package/entity/EntityLoader.d.ts +73 -103
  32. package/entity/EntityLoader.js +723 -753
  33. package/entity/EntityRepository.d.ts +201 -316
  34. package/entity/EntityRepository.js +213 -213
  35. package/entity/PolymorphicRef.d.ts +5 -5
  36. package/entity/PolymorphicRef.js +10 -10
  37. package/entity/Reference.d.ts +82 -126
  38. package/entity/Reference.js +274 -278
  39. package/entity/WrappedEntity.d.ts +72 -115
  40. package/entity/WrappedEntity.js +166 -168
  41. package/entity/defineEntity.d.ts +614 -1280
  42. package/entity/defineEntity.js +511 -520
  43. package/entity/utils.d.ts +3 -13
  44. package/entity/utils.js +73 -71
  45. package/entity/validators.js +43 -43
  46. package/entity/wrap.js +8 -8
  47. package/enums.d.ts +253 -258
  48. package/enums.js +252 -251
  49. package/errors.d.ts +72 -114
  50. package/errors.js +253 -350
  51. package/events/EventManager.d.ts +14 -26
  52. package/events/EventManager.js +77 -79
  53. package/events/EventSubscriber.d.ts +29 -29
  54. package/events/TransactionEventBroadcaster.d.ts +8 -15
  55. package/events/TransactionEventBroadcaster.js +14 -14
  56. package/exceptions.d.ts +40 -23
  57. package/exceptions.js +52 -35
  58. package/hydration/Hydrator.d.ts +17 -42
  59. package/hydration/Hydrator.js +43 -43
  60. package/hydration/ObjectHydrator.d.ts +17 -50
  61. package/hydration/ObjectHydrator.js +416 -479
  62. package/index.d.ts +2 -116
  63. package/index.js +1 -10
  64. package/logging/DefaultLogger.d.ts +32 -34
  65. package/logging/DefaultLogger.js +86 -86
  66. package/logging/Logger.d.ts +41 -41
  67. package/logging/SimpleLogger.d.ts +11 -13
  68. package/logging/SimpleLogger.js +22 -22
  69. package/logging/colors.d.ts +6 -6
  70. package/logging/colors.js +10 -11
  71. package/logging/inspect.js +7 -7
  72. package/metadata/EntitySchema.d.ts +127 -211
  73. package/metadata/EntitySchema.js +398 -397
  74. package/metadata/MetadataDiscovery.d.ts +114 -114
  75. package/metadata/MetadataDiscovery.js +1863 -1947
  76. package/metadata/MetadataProvider.d.ts +21 -24
  77. package/metadata/MetadataProvider.js +84 -82
  78. package/metadata/MetadataStorage.d.ts +32 -38
  79. package/metadata/MetadataStorage.js +118 -118
  80. package/metadata/MetadataValidator.d.ts +39 -39
  81. package/metadata/MetadataValidator.js +338 -381
  82. package/metadata/discover-entities.d.ts +2 -5
  83. package/metadata/discover-entities.js +27 -27
  84. package/metadata/types.d.ts +531 -615
  85. package/naming-strategy/AbstractNamingStrategy.d.ts +39 -54
  86. package/naming-strategy/AbstractNamingStrategy.js +85 -90
  87. package/naming-strategy/EntityCaseNamingStrategy.d.ts +6 -6
  88. package/naming-strategy/EntityCaseNamingStrategy.js +22 -22
  89. package/naming-strategy/MongoNamingStrategy.d.ts +6 -6
  90. package/naming-strategy/MongoNamingStrategy.js +18 -18
  91. package/naming-strategy/NamingStrategy.d.ts +99 -109
  92. package/naming-strategy/UnderscoreNamingStrategy.d.ts +7 -7
  93. package/naming-strategy/UnderscoreNamingStrategy.js +21 -21
  94. package/not-supported.js +4 -7
  95. package/package.json +1 -1
  96. package/platforms/ExceptionConverter.d.ts +1 -1
  97. package/platforms/ExceptionConverter.js +4 -4
  98. package/platforms/Platform.d.ts +299 -308
  99. package/platforms/Platform.js +636 -659
  100. package/serialization/EntitySerializer.d.ts +26 -48
  101. package/serialization/EntitySerializer.js +218 -224
  102. package/serialization/EntityTransformer.d.ts +6 -10
  103. package/serialization/EntityTransformer.js +217 -219
  104. package/serialization/SerializationContext.d.ts +23 -27
  105. package/serialization/SerializationContext.js +105 -105
  106. package/types/ArrayType.d.ts +8 -8
  107. package/types/ArrayType.js +33 -33
  108. package/types/BigIntType.d.ts +10 -17
  109. package/types/BigIntType.js +37 -37
  110. package/types/BlobType.d.ts +3 -3
  111. package/types/BlobType.js +13 -13
  112. package/types/BooleanType.d.ts +4 -4
  113. package/types/BooleanType.js +12 -12
  114. package/types/CharacterType.d.ts +2 -2
  115. package/types/CharacterType.js +6 -6
  116. package/types/DateTimeType.d.ts +5 -5
  117. package/types/DateTimeType.js +15 -15
  118. package/types/DateType.d.ts +5 -5
  119. package/types/DateType.js +15 -15
  120. package/types/DecimalType.d.ts +7 -7
  121. package/types/DecimalType.js +26 -26
  122. package/types/DoubleType.d.ts +3 -3
  123. package/types/DoubleType.js +12 -12
  124. package/types/EnumArrayType.d.ts +5 -5
  125. package/types/EnumArrayType.js +24 -24
  126. package/types/EnumType.d.ts +3 -3
  127. package/types/EnumType.js +11 -11
  128. package/types/FloatType.d.ts +3 -3
  129. package/types/FloatType.js +9 -9
  130. package/types/IntegerType.d.ts +3 -3
  131. package/types/IntegerType.js +9 -9
  132. package/types/IntervalType.d.ts +4 -4
  133. package/types/IntervalType.js +12 -12
  134. package/types/JsonType.d.ts +8 -8
  135. package/types/JsonType.js +32 -32
  136. package/types/MediumIntType.d.ts +1 -1
  137. package/types/MediumIntType.js +3 -3
  138. package/types/SmallIntType.d.ts +3 -3
  139. package/types/SmallIntType.js +9 -9
  140. package/types/StringType.d.ts +4 -4
  141. package/types/StringType.js +12 -12
  142. package/types/TextType.d.ts +3 -3
  143. package/types/TextType.js +9 -9
  144. package/types/TimeType.d.ts +5 -5
  145. package/types/TimeType.js +17 -17
  146. package/types/TinyIntType.d.ts +3 -3
  147. package/types/TinyIntType.js +10 -10
  148. package/types/Type.d.ts +79 -83
  149. package/types/Type.js +82 -82
  150. package/types/Uint8ArrayType.d.ts +4 -4
  151. package/types/Uint8ArrayType.js +21 -21
  152. package/types/UnknownType.d.ts +4 -4
  153. package/types/UnknownType.js +12 -12
  154. package/types/UuidType.d.ts +5 -5
  155. package/types/UuidType.js +19 -19
  156. package/types/index.d.ts +49 -75
  157. package/types/index.js +26 -52
  158. package/typings.d.ts +729 -1211
  159. package/typings.js +231 -244
  160. package/unit-of-work/ChangeSet.d.ts +26 -26
  161. package/unit-of-work/ChangeSet.js +56 -56
  162. package/unit-of-work/ChangeSetComputer.d.ts +12 -12
  163. package/unit-of-work/ChangeSetComputer.js +170 -178
  164. package/unit-of-work/ChangeSetPersister.d.ts +44 -63
  165. package/unit-of-work/ChangeSetPersister.js +421 -442
  166. package/unit-of-work/CommitOrderCalculator.d.ts +40 -40
  167. package/unit-of-work/CommitOrderCalculator.js +88 -89
  168. package/unit-of-work/IdentityMap.d.ts +31 -31
  169. package/unit-of-work/IdentityMap.js +105 -105
  170. package/unit-of-work/UnitOfWork.d.ts +141 -181
  171. package/unit-of-work/UnitOfWork.js +1183 -1200
  172. package/utils/AbstractMigrator.d.ts +91 -111
  173. package/utils/AbstractMigrator.js +275 -275
  174. package/utils/AbstractSchemaGenerator.d.ts +34 -43
  175. package/utils/AbstractSchemaGenerator.js +122 -121
  176. package/utils/AsyncContext.d.ts +3 -3
  177. package/utils/AsyncContext.js +35 -34
  178. package/utils/Configuration.d.ts +808 -852
  179. package/utils/Configuration.js +344 -359
  180. package/utils/Cursor.d.ts +22 -40
  181. package/utils/Cursor.js +127 -135
  182. package/utils/DataloaderUtils.d.ts +43 -58
  183. package/utils/DataloaderUtils.js +198 -203
  184. package/utils/EntityComparator.d.ts +81 -98
  185. package/utils/EntityComparator.js +728 -824
  186. package/utils/NullHighlighter.d.ts +1 -1
  187. package/utils/NullHighlighter.js +3 -3
  188. package/utils/QueryHelper.d.ts +51 -79
  189. package/utils/QueryHelper.js +361 -372
  190. package/utils/RawQueryFragment.d.ts +34 -50
  191. package/utils/RawQueryFragment.js +105 -107
  192. package/utils/RequestContext.d.ts +32 -32
  193. package/utils/RequestContext.js +53 -52
  194. package/utils/TransactionContext.d.ts +16 -16
  195. package/utils/TransactionContext.js +27 -27
  196. package/utils/TransactionManager.d.ts +58 -58
  197. package/utils/TransactionManager.js +197 -199
  198. package/utils/Utils.d.ts +145 -204
  199. package/utils/Utils.js +813 -814
  200. package/utils/clone.js +113 -104
  201. package/utils/env-vars.js +88 -90
  202. package/utils/fs-utils.d.ts +15 -15
  203. package/utils/fs-utils.js +181 -180
  204. package/utils/upsert-utils.d.ts +5 -20
  205. package/utils/upsert-utils.js +116 -114
package/types/TimeType.js CHANGED
@@ -2,22 +2,22 @@ import { Type } from './Type.js';
2
2
  import { ValidationError } from '../errors.js';
3
3
  /** Maps a database TIME column to a JS `string` in HH:MM:SS format. */
4
4
  export class TimeType extends Type {
5
- convertToDatabaseValue(value, platform) {
6
- if (value && !value.toString().match(/^\d{2,}:(?:[0-5]\d):(?:[0-5]\d)$/)) {
7
- throw ValidationError.invalidType(TimeType, value, 'JS');
5
+ convertToDatabaseValue(value, platform) {
6
+ if (value && !value.toString().match(/^\d{2,}:(?:[0-5]\d):(?:[0-5]\d)$/)) {
7
+ throw ValidationError.invalidType(TimeType, value, 'JS');
8
+ }
9
+ return super.convertToDatabaseValue(value, platform);
10
+ }
11
+ compareAsType() {
12
+ return 'string';
13
+ }
14
+ ensureComparable() {
15
+ return false;
16
+ }
17
+ getColumnType(prop, platform) {
18
+ return platform.getTimeTypeDeclarationSQL(prop.length);
19
+ }
20
+ getDefaultLength(platform) {
21
+ return platform.getDefaultDateTimeLength();
8
22
  }
9
- return super.convertToDatabaseValue(value, platform);
10
- }
11
- compareAsType() {
12
- return 'string';
13
- }
14
- ensureComparable() {
15
- return false;
16
- }
17
- getColumnType(prop, platform) {
18
- return platform.getTimeTypeDeclarationSQL(prop.length);
19
- }
20
- getDefaultLength(platform) {
21
- return platform.getDefaultDateTimeLength();
22
- }
23
23
  }
@@ -3,7 +3,7 @@ import type { Platform } from '../platforms/Platform.js';
3
3
  import type { EntityProperty } from '../typings.js';
4
4
  /** Maps a database TINYINT column to a JS `number`. */
5
5
  export declare class TinyIntType extends Type<number | null | undefined, number | null | undefined> {
6
- getColumnType(prop: EntityProperty, platform: Platform): string;
7
- compareAsType(): string;
8
- ensureComparable(): boolean;
6
+ getColumnType(prop: EntityProperty, platform: Platform): string;
7
+ compareAsType(): string;
8
+ ensureComparable(): boolean;
9
9
  }
@@ -1,14 +1,14 @@
1
1
  import { Type } from './Type.js';
2
2
  /** Maps a database TINYINT column to a JS `number`. */
3
3
  export class TinyIntType extends Type {
4
- getColumnType(prop, platform) {
5
- return platform.getTinyIntTypeDeclarationSQL(prop);
6
- }
7
- compareAsType() {
8
- return 'number';
9
- }
10
- /* v8 ignore next */
11
- ensureComparable() {
12
- return false;
13
- }
4
+ getColumnType(prop, platform) {
5
+ return platform.getTinyIntTypeDeclarationSQL(prop);
6
+ }
7
+ compareAsType() {
8
+ return 'number';
9
+ }
10
+ /* v8 ignore next */
11
+ ensureComparable() {
12
+ return false;
13
+ }
14
14
  }
package/types/Type.d.ts CHANGED
@@ -4,93 +4,89 @@ import type { Constructor, EntityMetadata, EntityProperty } from '../typings.js'
4
4
  export declare const ORM_TYPE: unique symbol;
5
5
  /** Context passed to type conversion methods, indicating the conversion mode and source. */
6
6
  export interface TransformContext {
7
- fromQuery?: boolean;
8
- force?: boolean;
9
- key?: string;
10
- mode?: 'hydration' | 'query' | 'query-data' | 'discovery' | 'serialization';
7
+ fromQuery?: boolean;
8
+ force?: boolean;
9
+ key?: string;
10
+ mode?: 'hydration' | 'query' | 'query-data' | 'discovery' | 'serialization';
11
11
  }
12
12
  /** Branded type helper for mapping between JS runtime, database raw, and JSON serialized representations. */
13
13
  export type IType<Runtime, Raw, Serialized = Raw> = Runtime & {
14
- __raw?: Raw;
15
- __runtime?: Runtime;
16
- __serialized?: Serialized;
14
+ __raw?: Raw;
15
+ __runtime?: Runtime;
16
+ __serialized?: Serialized;
17
17
  };
18
18
  /** Abstract base class for custom property types that handle conversion between JS and database representations. */
19
19
  export declare abstract class Type<JSType = string, DBType = JSType> {
20
- private static readonly types;
21
- platform?: Platform;
22
- meta?: EntityMetadata;
23
- prop?: EntityProperty;
24
- /**
25
- * Converts a value from its JS representation to its database representation of this type.
26
- */
27
- convertToDatabaseValue(value: JSType, platform: Platform, context?: TransformContext): DBType;
28
- /**
29
- * Converts a value from its database representation to its JS representation of this type.
30
- */
31
- convertToJSValue(value: DBType, platform: Platform, context?: TransformContext): JSType;
32
- /**
33
- * Converts a value from its JS representation to its database representation of this type.
34
- */
35
- convertToDatabaseValueSQL?(key: string, platform: Platform): string;
36
- /**
37
- * Modifies the SQL expression (identifier, parameter) to convert to a JS value.
38
- */
39
- convertToJSValueSQL?(key: string, platform: Platform): string;
40
- /**
41
- * How should the raw database values be compared? Used in `EntityComparator`.
42
- * Possible values: string | number | bigint | boolean | date | any | buffer | array
43
- */
44
- compareAsType(): string;
45
- /**
46
- * Allows to override the internal comparison logic.
47
- */
48
- compareValues?(a: DBType, b: DBType): boolean;
49
- get runtimeType(): string;
50
- get name(): string;
51
- /**
52
- * When a value is hydrated, we convert it back to the database value to ensure comparability,
53
- * as often the raw database response is not the same as the `convertToDatabaseValue` result.
54
- * This allows to disable the additional conversion in case you know it is not needed.
55
- */
56
- ensureComparable<T extends object>(meta: EntityMetadata<T>, prop: EntityProperty<T>): boolean;
57
- /**
58
- * Converts a value from its JS representation to its serialized JSON form of this type.
59
- * By default uses the runtime value.
60
- */
61
- toJSON(value: JSType, platform: Platform): JSType | DBType;
62
- /**
63
- * Gets the SQL declaration snippet for a field of this type.
64
- */
65
- getColumnType(prop: EntityProperty, platform: Platform): string;
66
- /**
67
- * Get the default length for values of this type
68
- *
69
- * When doing schema generation, if neither "length" nor "columnType" option is provided,
70
- * the length will be defaulted to this value.
71
- *
72
- * When doing entity generation, if the type is recognized to this type, and the inferred length is this value,
73
- * the length option will be omitted in the output. If this method is not defined, length is always outputted
74
- * based on what is in the database metadata.
75
- *
76
- * @param platform The platform the default will be used for.
77
- *
78
- * @return The default value for the given platform.
79
- */
80
- getDefaultLength?(platform: Platform): number;
81
- static getType<
82
- JSType,
83
- DBType = JSType,
84
- TypeClass extends Constructor<Type<JSType, DBType>> = Constructor<Type<JSType, DBType>>,
85
- >(cls: TypeClass): InstanceType<TypeClass>;
86
- /**
87
- * Checks whether the argument is instance of `Type`.
88
- */
89
- static isMappedType(data: any): data is Type<any>;
90
- /**
91
- * @internal
92
- * Returns the built-in type registry key if the given constructor is a branded ORM type
93
- * (not a user subclass). Uses `Symbol.for()` so it works across CJS/ESM module graphs.
94
- */
95
- static getOrmType(cls: object): string | undefined;
20
+ private static readonly types;
21
+ platform?: Platform;
22
+ meta?: EntityMetadata;
23
+ prop?: EntityProperty;
24
+ /**
25
+ * Converts a value from its JS representation to its database representation of this type.
26
+ */
27
+ convertToDatabaseValue(value: JSType, platform: Platform, context?: TransformContext): DBType;
28
+ /**
29
+ * Converts a value from its database representation to its JS representation of this type.
30
+ */
31
+ convertToJSValue(value: DBType, platform: Platform, context?: TransformContext): JSType;
32
+ /**
33
+ * Converts a value from its JS representation to its database representation of this type.
34
+ */
35
+ convertToDatabaseValueSQL?(key: string, platform: Platform): string;
36
+ /**
37
+ * Modifies the SQL expression (identifier, parameter) to convert to a JS value.
38
+ */
39
+ convertToJSValueSQL?(key: string, platform: Platform): string;
40
+ /**
41
+ * How should the raw database values be compared? Used in `EntityComparator`.
42
+ * Possible values: string | number | bigint | boolean | date | any | buffer | array
43
+ */
44
+ compareAsType(): string;
45
+ /**
46
+ * Allows to override the internal comparison logic.
47
+ */
48
+ compareValues?(a: DBType, b: DBType): boolean;
49
+ get runtimeType(): string;
50
+ get name(): string;
51
+ /**
52
+ * When a value is hydrated, we convert it back to the database value to ensure comparability,
53
+ * as often the raw database response is not the same as the `convertToDatabaseValue` result.
54
+ * This allows to disable the additional conversion in case you know it is not needed.
55
+ */
56
+ ensureComparable<T extends object>(meta: EntityMetadata<T>, prop: EntityProperty<T>): boolean;
57
+ /**
58
+ * Converts a value from its JS representation to its serialized JSON form of this type.
59
+ * By default uses the runtime value.
60
+ */
61
+ toJSON(value: JSType, platform: Platform): JSType | DBType;
62
+ /**
63
+ * Gets the SQL declaration snippet for a field of this type.
64
+ */
65
+ getColumnType(prop: EntityProperty, platform: Platform): string;
66
+ /**
67
+ * Get the default length for values of this type
68
+ *
69
+ * When doing schema generation, if neither "length" nor "columnType" option is provided,
70
+ * the length will be defaulted to this value.
71
+ *
72
+ * When doing entity generation, if the type is recognized to this type, and the inferred length is this value,
73
+ * the length option will be omitted in the output. If this method is not defined, length is always outputted
74
+ * based on what is in the database metadata.
75
+ *
76
+ * @param platform The platform the default will be used for.
77
+ *
78
+ * @return The default value for the given platform.
79
+ */
80
+ getDefaultLength?(platform: Platform): number;
81
+ static getType<JSType, DBType = JSType, TypeClass extends Constructor<Type<JSType, DBType>> = Constructor<Type<JSType, DBType>>>(cls: TypeClass): InstanceType<TypeClass>;
82
+ /**
83
+ * Checks whether the argument is instance of `Type`.
84
+ */
85
+ static isMappedType(data: any): data is Type<any>;
86
+ /**
87
+ * @internal
88
+ * Returns the built-in type registry key if the given constructor is a branded ORM type
89
+ * (not a user subclass). Uses `Symbol.for()` so it works across CJS/ESM module graphs.
90
+ */
91
+ static getOrmType(cls: object): string | undefined;
96
92
  }
package/types/Type.js CHANGED
@@ -3,89 +3,89 @@ import { inspect } from '../logging/inspect.js';
3
3
  export const ORM_TYPE = Symbol.for('@mikro-orm/type');
4
4
  /** Abstract base class for custom property types that handle conversion between JS and database representations. */
5
5
  export class Type {
6
- static types = new Map();
7
- platform;
8
- meta;
9
- prop;
10
- /**
11
- * Converts a value from its JS representation to its database representation of this type.
12
- */
13
- convertToDatabaseValue(value, platform, context) {
14
- return value;
15
- }
16
- /**
17
- * Converts a value from its database representation to its JS representation of this type.
18
- */
19
- convertToJSValue(value, platform, context) {
20
- return value;
21
- }
22
- /**
23
- * How should the raw database values be compared? Used in `EntityComparator`.
24
- * Possible values: string | number | bigint | boolean | date | any | buffer | array
25
- */
26
- compareAsType() {
27
- return 'any';
28
- }
29
- get runtimeType() {
30
- const compareType = this.compareAsType();
31
- return compareType === 'any' ? 'string' : compareType;
32
- }
33
- get name() {
34
- return this.constructor.name;
35
- }
36
- /**
37
- * When a value is hydrated, we convert it back to the database value to ensure comparability,
38
- * as often the raw database response is not the same as the `convertToDatabaseValue` result.
39
- * This allows to disable the additional conversion in case you know it is not needed.
40
- */
41
- ensureComparable(meta, prop) {
42
- return true;
43
- }
44
- /**
45
- * Converts a value from its JS representation to its serialized JSON form of this type.
46
- * By default uses the runtime value.
47
- */
48
- toJSON(value, platform) {
49
- return value;
50
- }
51
- /**
52
- * Gets the SQL declaration snippet for a field of this type.
53
- */
54
- getColumnType(prop, platform) {
55
- return prop.columnTypes?.[0] ?? platform.getTextTypeDeclarationSQL(prop);
56
- }
57
- static getType(cls) {
58
- const key = cls.name;
59
- if (!Type.types.has(key)) {
60
- Type.types.set(key, new cls());
6
+ static types = new Map();
7
+ platform;
8
+ meta;
9
+ prop;
10
+ /**
11
+ * Converts a value from its JS representation to its database representation of this type.
12
+ */
13
+ convertToDatabaseValue(value, platform, context) {
14
+ return value;
15
+ }
16
+ /**
17
+ * Converts a value from its database representation to its JS representation of this type.
18
+ */
19
+ convertToJSValue(value, platform, context) {
20
+ return value;
21
+ }
22
+ /**
23
+ * How should the raw database values be compared? Used in `EntityComparator`.
24
+ * Possible values: string | number | bigint | boolean | date | any | buffer | array
25
+ */
26
+ compareAsType() {
27
+ return 'any';
28
+ }
29
+ get runtimeType() {
30
+ const compareType = this.compareAsType();
31
+ return compareType === 'any' ? 'string' : compareType;
32
+ }
33
+ get name() {
34
+ return this.constructor.name;
35
+ }
36
+ /**
37
+ * When a value is hydrated, we convert it back to the database value to ensure comparability,
38
+ * as often the raw database response is not the same as the `convertToDatabaseValue` result.
39
+ * This allows to disable the additional conversion in case you know it is not needed.
40
+ */
41
+ ensureComparable(meta, prop) {
42
+ return true;
43
+ }
44
+ /**
45
+ * Converts a value from its JS representation to its serialized JSON form of this type.
46
+ * By default uses the runtime value.
47
+ */
48
+ toJSON(value, platform) {
49
+ return value;
50
+ }
51
+ /**
52
+ * Gets the SQL declaration snippet for a field of this type.
53
+ */
54
+ getColumnType(prop, platform) {
55
+ return prop.columnTypes?.[0] ?? platform.getTextTypeDeclarationSQL(prop);
56
+ }
57
+ static getType(cls) {
58
+ const key = cls.name;
59
+ if (!Type.types.has(key)) {
60
+ Type.types.set(key, new cls());
61
+ }
62
+ return Type.types.get(key);
63
+ }
64
+ /**
65
+ * Checks whether the argument is instance of `Type`.
66
+ */
67
+ static isMappedType(data) {
68
+ return !!data?.__mappedType;
69
+ }
70
+ /**
71
+ * @internal
72
+ * Returns the built-in type registry key if the given constructor is a branded ORM type
73
+ * (not a user subclass). Uses `Symbol.for()` so it works across CJS/ESM module graphs.
74
+ */
75
+ static getOrmType(cls) {
76
+ return Object.hasOwn(cls, ORM_TYPE) ? cls[ORM_TYPE] : undefined;
77
+ }
78
+ /** @ignore */
79
+ [Symbol.for('nodejs.util.inspect.custom')](depth = 2) {
80
+ const object = { ...this };
81
+ const hidden = ['prop', 'platform', 'meta'];
82
+ hidden.forEach(k => delete object[k]);
83
+ const ret = inspect(object, { depth });
84
+ const name = this.constructor.name;
85
+ /* v8 ignore next */
86
+ return ret === '[Object]' ? `[${name}]` : name + ' ' + ret;
61
87
  }
62
- return Type.types.get(key);
63
- }
64
- /**
65
- * Checks whether the argument is instance of `Type`.
66
- */
67
- static isMappedType(data) {
68
- return !!data?.__mappedType;
69
- }
70
- /**
71
- * @internal
72
- * Returns the built-in type registry key if the given constructor is a branded ORM type
73
- * (not a user subclass). Uses `Symbol.for()` so it works across CJS/ESM module graphs.
74
- */
75
- static getOrmType(cls) {
76
- return Object.hasOwn(cls, ORM_TYPE) ? cls[ORM_TYPE] : undefined;
77
- }
78
- /** @ignore */
79
- [Symbol.for('nodejs.util.inspect.custom')](depth = 2) {
80
- const object = { ...this };
81
- const hidden = ['prop', 'platform', 'meta'];
82
- hidden.forEach(k => delete object[k]);
83
- const ret = inspect(object, { depth });
84
- const name = this.constructor.name;
85
- /* v8 ignore next */
86
- return ret === '[Object]' ? `[${name}]` : name + ' ' + ret;
87
- }
88
88
  }
89
89
  Object.defineProperties(Type.prototype, {
90
- __mappedType: { value: true, enumerable: false, writable: false },
90
+ __mappedType: { value: true, enumerable: false, writable: false },
91
91
  });
@@ -3,8 +3,8 @@ import type { Platform } from '../platforms/Platform.js';
3
3
  import type { EntityProperty } from '../typings.js';
4
4
  /** Maps a database BLOB/BYTEA column to a JS `Uint8Array`. */
5
5
  export declare class Uint8ArrayType extends Type<Uint8Array | null> {
6
- convertToDatabaseValue(value: Uint8Array): Buffer;
7
- convertToJSValue(value: Buffer): Uint8Array | null;
8
- compareAsType(): string;
9
- getColumnType(prop: EntityProperty, platform: Platform): string;
6
+ convertToDatabaseValue(value: Uint8Array): Buffer;
7
+ convertToJSValue(value: Buffer): Uint8Array | null;
8
+ compareAsType(): string;
9
+ getColumnType(prop: EntityProperty, platform: Platform): string;
10
10
  }
@@ -1,29 +1,29 @@
1
1
  import { Type } from './Type.js';
2
2
  /** Maps a database BLOB/BYTEA column to a JS `Uint8Array`. */
3
3
  export class Uint8ArrayType extends Type {
4
- convertToDatabaseValue(value) {
5
- if (!value) {
6
- return value;
4
+ convertToDatabaseValue(value) {
5
+ if (!value) {
6
+ return value;
7
+ }
8
+ return Buffer.from(value);
7
9
  }
8
- return Buffer.from(value);
9
- }
10
- convertToJSValue(value) {
11
- /* v8 ignore next */
12
- if (!value) {
13
- return value;
10
+ convertToJSValue(value) {
11
+ /* v8 ignore next */
12
+ if (!value) {
13
+ return value;
14
+ }
15
+ if (value instanceof Buffer) {
16
+ return new Uint8Array(value);
17
+ }
18
+ if (value.buffer instanceof Buffer) {
19
+ return new Uint8Array(value.buffer);
20
+ }
21
+ return new Uint8Array(Buffer.from(value));
14
22
  }
15
- if (value instanceof Buffer) {
16
- return new Uint8Array(value);
23
+ compareAsType() {
24
+ return 'Buffer';
17
25
  }
18
- if (value.buffer instanceof Buffer) {
19
- return new Uint8Array(value.buffer);
26
+ getColumnType(prop, platform) {
27
+ return platform.getBlobDeclarationSQL();
20
28
  }
21
- return new Uint8Array(Buffer.from(value));
22
- }
23
- compareAsType() {
24
- return 'Buffer';
25
- }
26
- getColumnType(prop, platform) {
27
- return platform.getBlobDeclarationSQL();
28
- }
29
29
  }
@@ -3,8 +3,8 @@ import type { Platform } from '../platforms/Platform.js';
3
3
  import { Type } from './Type.js';
4
4
  /** Passthrough type that performs no conversion, used when the column type is unknown or unrecognized. */
5
5
  export declare class UnknownType extends Type<unknown | null | undefined, unknown | null | undefined> {
6
- getColumnType(prop: EntityProperty, platform: Platform): string;
7
- get runtimeType(): string;
8
- compareAsType(): string;
9
- ensureComparable(): boolean;
6
+ getColumnType(prop: EntityProperty, platform: Platform): string;
7
+ get runtimeType(): string;
8
+ compareAsType(): string;
9
+ ensureComparable(): boolean;
10
10
  }
@@ -1,16 +1,16 @@
1
1
  import { Type } from './Type.js';
2
2
  /** Passthrough type that performs no conversion, used when the column type is unknown or unrecognized. */
3
3
  export class UnknownType extends Type {
4
- getColumnType(prop, platform) {
5
- return prop.columnTypes?.[0] ?? platform.getVarcharTypeDeclarationSQL(prop);
6
- }
7
- get runtimeType() {
8
- return 'unknown';
9
- }
10
- compareAsType() {
11
- return 'unknown';
12
- }
13
- ensureComparable() {
14
- return false;
15
- }
4
+ getColumnType(prop, platform) {
5
+ return prop.columnTypes?.[0] ?? platform.getVarcharTypeDeclarationSQL(prop);
6
+ }
7
+ get runtimeType() {
8
+ return 'unknown';
9
+ }
10
+ compareAsType() {
11
+ return 'unknown';
12
+ }
13
+ ensureComparable() {
14
+ return false;
15
+ }
16
16
  }
@@ -3,9 +3,9 @@ import type { Platform } from '../platforms/Platform.js';
3
3
  import type { EntityProperty } from '../typings.js';
4
4
  /** Maps a database UUID column to a JS `string`, with platform-specific normalization. */
5
5
  export declare class UuidType extends Type<string | null | undefined> {
6
- getColumnType(prop: EntityProperty, platform: Platform): string;
7
- compareAsType(): string;
8
- convertToDatabaseValue(value: string | null | undefined, platform: Platform): string | null;
9
- convertToJSValue(value: string | null | undefined, platform: Platform): string | null | undefined;
10
- ensureComparable(): boolean;
6
+ getColumnType(prop: EntityProperty, platform: Platform): string;
7
+ compareAsType(): string;
8
+ convertToDatabaseValue(value: string | null | undefined, platform: Platform): string | null;
9
+ convertToJSValue(value: string | null | undefined, platform: Platform): string | null | undefined;
10
+ ensureComparable(): boolean;
11
11
  }
package/types/UuidType.js CHANGED
@@ -1,25 +1,25 @@
1
1
  import { Type } from './Type.js';
2
2
  /** Maps a database UUID column to a JS `string`, with platform-specific normalization. */
3
3
  export class UuidType extends Type {
4
- getColumnType(prop, platform) {
5
- return platform.getUuidTypeDeclarationSQL(prop);
6
- }
7
- compareAsType() {
8
- return this.platform?.compareUuids() ?? 'string';
9
- }
10
- convertToDatabaseValue(value, platform) {
11
- if (value == null) {
12
- return value;
4
+ getColumnType(prop, platform) {
5
+ return platform.getUuidTypeDeclarationSQL(prop);
13
6
  }
14
- return platform.convertUuidToDatabaseValue(value);
15
- }
16
- convertToJSValue(value, platform) {
17
- if (value == null) {
18
- return value;
7
+ compareAsType() {
8
+ return this.platform?.compareUuids() ?? 'string';
9
+ }
10
+ convertToDatabaseValue(value, platform) {
11
+ if (value == null) {
12
+ return value;
13
+ }
14
+ return platform.convertUuidToDatabaseValue(value);
15
+ }
16
+ convertToJSValue(value, platform) {
17
+ if (value == null) {
18
+ return value;
19
+ }
20
+ return platform.convertUuidToJSValue(value);
21
+ }
22
+ ensureComparable() {
23
+ return this.platform?.compareUuids() !== 'string';
19
24
  }
20
- return platform.convertUuidToJSValue(value);
21
- }
22
- ensureComparable() {
23
- return this.platform?.compareUuids() !== 'string';
24
- }
25
25
  }