@mikro-orm/core 7.0.4 → 7.0.5-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 (206) hide show
  1. package/EntityManager.d.ts +583 -884
  2. package/EntityManager.js +1895 -1922
  3. package/MikroORM.d.ts +74 -103
  4. package/MikroORM.js +179 -178
  5. package/README.md +1 -1
  6. package/cache/CacheAdapter.d.ts +36 -36
  7. package/cache/FileCacheAdapter.d.ts +24 -30
  8. package/cache/FileCacheAdapter.js +78 -80
  9. package/cache/GeneratedCacheAdapter.d.ts +20 -18
  10. package/cache/GeneratedCacheAdapter.js +30 -30
  11. package/cache/MemoryCacheAdapter.d.ts +20 -18
  12. package/cache/MemoryCacheAdapter.js +36 -35
  13. package/cache/NullCacheAdapter.d.ts +16 -16
  14. package/cache/NullCacheAdapter.js +24 -24
  15. package/connections/Connection.d.ts +84 -95
  16. package/connections/Connection.js +168 -165
  17. package/drivers/DatabaseDriver.d.ts +80 -186
  18. package/drivers/DatabaseDriver.js +443 -450
  19. package/drivers/IDatabaseDriver.d.ts +301 -440
  20. package/entity/BaseEntity.d.ts +83 -120
  21. package/entity/BaseEntity.js +43 -43
  22. package/entity/Collection.d.ts +179 -212
  23. package/entity/Collection.js +721 -727
  24. package/entity/EntityAssigner.d.ts +77 -88
  25. package/entity/EntityAssigner.js +230 -231
  26. package/entity/EntityFactory.d.ts +54 -66
  27. package/entity/EntityFactory.js +383 -425
  28. package/entity/EntityHelper.d.ts +22 -34
  29. package/entity/EntityHelper.js +267 -280
  30. package/entity/EntityIdentifier.d.ts +4 -4
  31. package/entity/EntityIdentifier.js +10 -10
  32. package/entity/EntityLoader.d.ts +72 -98
  33. package/entity/EntityLoader.js +723 -753
  34. package/entity/EntityRepository.d.ts +201 -316
  35. package/entity/EntityRepository.js +213 -213
  36. package/entity/PolymorphicRef.d.ts +5 -5
  37. package/entity/PolymorphicRef.js +10 -10
  38. package/entity/Reference.d.ts +82 -126
  39. package/entity/Reference.js +274 -278
  40. package/entity/WrappedEntity.d.ts +72 -115
  41. package/entity/WrappedEntity.js +166 -168
  42. package/entity/defineEntity.d.ts +636 -1315
  43. package/entity/defineEntity.js +518 -527
  44. package/entity/utils.d.ts +3 -13
  45. package/entity/utils.js +73 -71
  46. package/entity/validators.js +43 -43
  47. package/entity/wrap.js +8 -8
  48. package/enums.d.ts +253 -258
  49. package/enums.js +252 -251
  50. package/errors.d.ts +72 -114
  51. package/errors.js +253 -350
  52. package/events/EventManager.d.ts +14 -26
  53. package/events/EventManager.js +77 -79
  54. package/events/EventSubscriber.d.ts +29 -29
  55. package/events/TransactionEventBroadcaster.d.ts +8 -15
  56. package/events/TransactionEventBroadcaster.js +14 -14
  57. package/exceptions.d.ts +40 -23
  58. package/exceptions.js +52 -35
  59. package/hydration/Hydrator.d.ts +17 -42
  60. package/hydration/Hydrator.js +43 -43
  61. package/hydration/ObjectHydrator.d.ts +17 -50
  62. package/hydration/ObjectHydrator.js +416 -481
  63. package/index.d.ts +2 -116
  64. package/index.js +1 -10
  65. package/logging/DefaultLogger.d.ts +32 -34
  66. package/logging/DefaultLogger.js +86 -86
  67. package/logging/Logger.d.ts +41 -41
  68. package/logging/SimpleLogger.d.ts +11 -13
  69. package/logging/SimpleLogger.js +22 -22
  70. package/logging/colors.d.ts +6 -6
  71. package/logging/colors.js +10 -11
  72. package/logging/inspect.js +7 -7
  73. package/metadata/EntitySchema.d.ts +127 -211
  74. package/metadata/EntitySchema.js +398 -397
  75. package/metadata/MetadataDiscovery.d.ts +114 -114
  76. package/metadata/MetadataDiscovery.js +1870 -1951
  77. package/metadata/MetadataProvider.d.ts +21 -24
  78. package/metadata/MetadataProvider.js +84 -82
  79. package/metadata/MetadataStorage.d.ts +32 -38
  80. package/metadata/MetadataStorage.js +118 -118
  81. package/metadata/MetadataValidator.d.ts +39 -39
  82. package/metadata/MetadataValidator.js +338 -381
  83. package/metadata/discover-entities.d.ts +2 -5
  84. package/metadata/discover-entities.js +37 -35
  85. package/metadata/types.d.ts +531 -615
  86. package/naming-strategy/AbstractNamingStrategy.d.ts +39 -54
  87. package/naming-strategy/AbstractNamingStrategy.js +85 -90
  88. package/naming-strategy/EntityCaseNamingStrategy.d.ts +6 -6
  89. package/naming-strategy/EntityCaseNamingStrategy.js +22 -22
  90. package/naming-strategy/MongoNamingStrategy.d.ts +6 -6
  91. package/naming-strategy/MongoNamingStrategy.js +18 -18
  92. package/naming-strategy/NamingStrategy.d.ts +99 -109
  93. package/naming-strategy/UnderscoreNamingStrategy.d.ts +7 -7
  94. package/naming-strategy/UnderscoreNamingStrategy.js +21 -21
  95. package/not-supported.js +4 -7
  96. package/package.json +1 -1
  97. package/platforms/ExceptionConverter.d.ts +1 -1
  98. package/platforms/ExceptionConverter.js +4 -4
  99. package/platforms/Platform.d.ts +301 -310
  100. package/platforms/Platform.js +640 -663
  101. package/serialization/EntitySerializer.d.ts +26 -49
  102. package/serialization/EntitySerializer.js +218 -224
  103. package/serialization/EntityTransformer.d.ts +6 -10
  104. package/serialization/EntityTransformer.js +217 -219
  105. package/serialization/SerializationContext.d.ts +23 -27
  106. package/serialization/SerializationContext.js +105 -105
  107. package/types/ArrayType.d.ts +8 -8
  108. package/types/ArrayType.js +33 -33
  109. package/types/BigIntType.d.ts +10 -17
  110. package/types/BigIntType.js +37 -37
  111. package/types/BlobType.d.ts +3 -3
  112. package/types/BlobType.js +13 -13
  113. package/types/BooleanType.d.ts +4 -4
  114. package/types/BooleanType.js +12 -12
  115. package/types/CharacterType.d.ts +2 -2
  116. package/types/CharacterType.js +6 -6
  117. package/types/DateTimeType.d.ts +5 -5
  118. package/types/DateTimeType.js +15 -15
  119. package/types/DateType.d.ts +5 -5
  120. package/types/DateType.js +15 -15
  121. package/types/DecimalType.d.ts +7 -7
  122. package/types/DecimalType.js +26 -26
  123. package/types/DoubleType.d.ts +3 -3
  124. package/types/DoubleType.js +12 -12
  125. package/types/EnumArrayType.d.ts +5 -5
  126. package/types/EnumArrayType.js +24 -24
  127. package/types/EnumType.d.ts +3 -3
  128. package/types/EnumType.js +11 -11
  129. package/types/FloatType.d.ts +3 -3
  130. package/types/FloatType.js +9 -9
  131. package/types/IntegerType.d.ts +3 -3
  132. package/types/IntegerType.js +9 -9
  133. package/types/IntervalType.d.ts +4 -4
  134. package/types/IntervalType.js +12 -12
  135. package/types/JsonType.d.ts +8 -8
  136. package/types/JsonType.js +32 -32
  137. package/types/MediumIntType.d.ts +1 -1
  138. package/types/MediumIntType.js +3 -3
  139. package/types/SmallIntType.d.ts +3 -3
  140. package/types/SmallIntType.js +9 -9
  141. package/types/StringType.d.ts +4 -4
  142. package/types/StringType.js +12 -12
  143. package/types/TextType.d.ts +3 -3
  144. package/types/TextType.js +9 -9
  145. package/types/TimeType.d.ts +5 -5
  146. package/types/TimeType.js +17 -17
  147. package/types/TinyIntType.d.ts +3 -3
  148. package/types/TinyIntType.js +10 -10
  149. package/types/Type.d.ts +79 -83
  150. package/types/Type.js +82 -82
  151. package/types/Uint8ArrayType.d.ts +4 -4
  152. package/types/Uint8ArrayType.js +21 -21
  153. package/types/UnknownType.d.ts +4 -4
  154. package/types/UnknownType.js +12 -12
  155. package/types/UuidType.d.ts +5 -5
  156. package/types/UuidType.js +19 -19
  157. package/types/index.d.ts +49 -75
  158. package/types/index.js +26 -52
  159. package/typings.d.ts +737 -1250
  160. package/typings.js +231 -244
  161. package/unit-of-work/ChangeSet.d.ts +26 -26
  162. package/unit-of-work/ChangeSet.js +56 -56
  163. package/unit-of-work/ChangeSetComputer.d.ts +12 -12
  164. package/unit-of-work/ChangeSetComputer.js +170 -178
  165. package/unit-of-work/ChangeSetPersister.d.ts +44 -63
  166. package/unit-of-work/ChangeSetPersister.js +421 -442
  167. package/unit-of-work/CommitOrderCalculator.d.ts +40 -40
  168. package/unit-of-work/CommitOrderCalculator.js +88 -89
  169. package/unit-of-work/IdentityMap.d.ts +31 -31
  170. package/unit-of-work/IdentityMap.js +105 -105
  171. package/unit-of-work/UnitOfWork.d.ts +141 -181
  172. package/unit-of-work/UnitOfWork.js +1183 -1200
  173. package/utils/AbstractMigrator.d.ts +91 -111
  174. package/utils/AbstractMigrator.js +275 -275
  175. package/utils/AbstractSchemaGenerator.d.ts +34 -43
  176. package/utils/AbstractSchemaGenerator.js +122 -121
  177. package/utils/AsyncContext.d.ts +3 -3
  178. package/utils/AsyncContext.js +35 -34
  179. package/utils/Configuration.d.ts +808 -852
  180. package/utils/Configuration.js +344 -359
  181. package/utils/Cursor.d.ts +22 -40
  182. package/utils/Cursor.js +127 -135
  183. package/utils/DataloaderUtils.d.ts +43 -58
  184. package/utils/DataloaderUtils.js +198 -203
  185. package/utils/EntityComparator.d.ts +81 -98
  186. package/utils/EntityComparator.js +732 -828
  187. package/utils/NullHighlighter.d.ts +1 -1
  188. package/utils/NullHighlighter.js +3 -3
  189. package/utils/QueryHelper.d.ts +51 -79
  190. package/utils/QueryHelper.js +361 -372
  191. package/utils/RawQueryFragment.d.ts +34 -50
  192. package/utils/RawQueryFragment.js +105 -107
  193. package/utils/RequestContext.d.ts +32 -32
  194. package/utils/RequestContext.js +53 -52
  195. package/utils/TransactionContext.d.ts +16 -16
  196. package/utils/TransactionContext.js +27 -27
  197. package/utils/TransactionManager.d.ts +58 -58
  198. package/utils/TransactionManager.js +197 -199
  199. package/utils/Utils.d.ts +145 -204
  200. package/utils/Utils.js +812 -812
  201. package/utils/clone.js +113 -104
  202. package/utils/env-vars.js +88 -90
  203. package/utils/fs-utils.d.ts +15 -15
  204. package/utils/fs-utils.js +181 -180
  205. package/utils/upsert-utils.d.ts +5 -20
  206. 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
  }