@mikro-orm/core 7.0.2-dev.8 → 7.0.2

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