@mikro-orm/core 7.0.2-dev.9 → 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
@@ -6,115 +6,120 @@ import { helper } from '../entity/wrap.js';
6
6
  * are defined in populate hint). If not, we proceed and call `leave` afterwards.
7
7
  */
8
8
  export class SerializationContext {
9
- path = [];
10
- visited = new Set();
11
- #entities = new Set();
12
- #populate;
13
- #fields;
14
- #exclude;
15
- constructor(populate = [], fields, exclude) {
16
- this.#populate = populate;
17
- this.#fields = fields;
18
- this.#exclude = exclude;
9
+ path = [];
10
+ visited = new Set();
11
+ #entities = new Set();
12
+ #populate;
13
+ #fields;
14
+ #exclude;
15
+ constructor(populate = [], fields, exclude) {
16
+ this.#populate = populate;
17
+ this.#fields = fields;
18
+ this.#exclude = exclude;
19
+ }
20
+ /**
21
+ * Returns true when there is a cycle detected.
22
+ */
23
+ visit(entityName, prop) {
24
+ if (!this.path.find(([cls, item]) => entityName === cls && prop === item)) {
25
+ this.path.push([entityName, prop]);
26
+ return false;
19
27
  }
20
- /**
21
- * Returns true when there is a cycle detected.
22
- */
23
- visit(entityName, prop) {
24
- if (!this.path.find(([cls, item]) => entityName === cls && prop === item)) {
25
- this.path.push([entityName, prop]);
26
- return false;
27
- }
28
- // check if the path is explicitly populated
29
- if (!this.isMarkedAsPopulated(entityName, prop)) {
30
- return true;
31
- }
32
- this.path.push([entityName, prop]);
33
- return false;
28
+ // check if the path is explicitly populated
29
+ if (!this.isMarkedAsPopulated(entityName, prop)) {
30
+ return true;
34
31
  }
35
- leave(entityName, prop) {
36
- const last = this.path.pop();
37
- /* v8 ignore next */
38
- if (last?.[0] !== entityName || last[1] !== prop) {
39
- throw new Error(`Trying to leave wrong property: ${entityName}.${prop} instead of ${last?.join('.')}`);
40
- }
32
+ this.path.push([entityName, prop]);
33
+ return false;
34
+ }
35
+ /** Removes the last entry from the visit path after processing a property. */
36
+ leave(entityName, prop) {
37
+ const last = this.path.pop();
38
+ /* v8 ignore next */
39
+ if (last?.[0] !== entityName || last[1] !== prop) {
40
+ throw new Error(`Trying to leave wrong property: ${entityName}.${prop} instead of ${last?.join('.')}`);
41
41
  }
42
- close() {
43
- for (const entity of this.#entities) {
44
- delete helper(entity).__serializationContext.root;
45
- }
42
+ }
43
+ /** Cleans up the serialization context by removing root references from all tracked entities. */
44
+ close() {
45
+ for (const entity of this.#entities) {
46
+ delete helper(entity).__serializationContext.root;
46
47
  }
47
- /**
48
- * When initializing new context, we need to propagate it to the whole entity graph recursively.
49
- */
50
- static propagate(root, entity, isVisible) {
51
- root.register(entity);
52
- const meta = helper(entity).__meta;
53
- for (const key of Object.keys(entity)) {
54
- if (!isVisible(meta, key)) {
55
- continue;
56
- }
57
- const target = entity[key];
58
- if (Utils.isEntity(target, true)) {
59
- if (!target.__helper.__serializationContext.root) {
60
- this.propagate(root, target, isVisible);
61
- }
62
- continue;
63
- }
64
- if (Utils.isCollection(target)) {
65
- for (const item of target.getItems(false)) {
66
- if (!item.__helper.__serializationContext.root) {
67
- this.propagate(root, item, isVisible);
68
- }
69
- }
70
- }
48
+ }
49
+ /**
50
+ * When initializing new context, we need to propagate it to the whole entity graph recursively.
51
+ */
52
+ static propagate(root, entity, isVisible) {
53
+ root.register(entity);
54
+ const meta = helper(entity).__meta;
55
+ for (const key of Object.keys(entity)) {
56
+ if (!isVisible(meta, key)) {
57
+ continue;
58
+ }
59
+ const target = entity[key];
60
+ if (Utils.isEntity(target, true)) {
61
+ if (!target.__helper.__serializationContext.root) {
62
+ this.propagate(root, target, isVisible);
71
63
  }
72
- }
73
- isMarkedAsPopulated(entityName, prop) {
74
- let populate = this.#populate ?? [];
75
- for (const segment of this.path) {
76
- const hints = populate.filter(p => p.field === segment[1]);
77
- if (hints.length > 0) {
78
- const childHints = [];
79
- for (const hint of hints) {
80
- // we need to check for cycles here too, as we could fall into endless loops for bidirectional relations
81
- if (hint.all) {
82
- return !this.path.find(([cls, item]) => entityName === cls && prop === item);
83
- }
84
- if (hint.children) {
85
- childHints.push(...hint.children);
86
- }
87
- }
88
- populate = childHints;
89
- }
64
+ continue;
65
+ }
66
+ if (Utils.isCollection(target)) {
67
+ for (const item of target.getItems(false)) {
68
+ if (!item.__helper.__serializationContext.root) {
69
+ this.propagate(root, item, isVisible);
70
+ }
90
71
  }
91
- return !!populate?.some(p => p.field === prop);
72
+ }
92
73
  }
93
- isExcluded(entityName, prop) {
94
- if (!this.#exclude || this.#exclude.length === 0) {
95
- return false;
74
+ }
75
+ /** Checks whether a property is explicitly listed in the populate hints for the current path. */
76
+ isMarkedAsPopulated(entityName, prop) {
77
+ let populate = this.#populate ?? [];
78
+ for (const segment of this.path) {
79
+ const hints = populate.filter(p => p.field === segment[1]);
80
+ if (hints.length > 0) {
81
+ const childHints = [];
82
+ for (const hint of hints) {
83
+ // we need to check for cycles here too, as we could fall into endless loops for bidirectional relations
84
+ if (hint.all) {
85
+ return !this.path.find(([cls, item]) => entityName === cls && prop === item);
86
+ }
87
+ if (hint.children) {
88
+ childHints.push(...hint.children);
89
+ }
96
90
  }
97
- const fullPath = this.path.map(segment => segment[1] + '.').join('') + prop;
98
- return this.#exclude.includes(fullPath);
91
+ populate = childHints;
92
+ }
99
93
  }
100
- isPartiallyLoaded(entityName, prop) {
101
- if (!this.#fields) {
102
- return true;
103
- }
104
- let fields = [...this.#fields];
105
- for (const segment of this.path) {
106
- /* v8 ignore next */
107
- if (fields.length === 0) {
108
- return true;
109
- }
110
- fields = fields
111
- .filter(field => field.startsWith(`${segment[1]}.`) || field === '*')
112
- .map(field => (field === '*' ? field : field.substring(segment[1].length + 1)));
113
- }
114
- return fields.some(p => p === prop || p === '*');
94
+ return !!populate?.some(p => p.field === prop);
95
+ }
96
+ /** Checks whether a property is excluded from serialization via the exclude list. */
97
+ isExcluded(entityName, prop) {
98
+ if (!this.#exclude || this.#exclude.length === 0) {
99
+ return false;
100
+ }
101
+ const fullPath = this.path.map(segment => segment[1] + '.').join('') + prop;
102
+ return this.#exclude.includes(fullPath);
103
+ }
104
+ /** Checks whether a property is included in the partial fields selection for the current path. */
105
+ isPartiallyLoaded(entityName, prop) {
106
+ if (!this.#fields) {
107
+ return true;
115
108
  }
116
- register(entity) {
117
- helper(entity).__serializationContext.root = this;
118
- this.#entities.add(entity);
109
+ let fields = [...this.#fields];
110
+ for (const segment of this.path) {
111
+ /* v8 ignore next */
112
+ if (fields.length === 0) {
113
+ return true;
114
+ }
115
+ fields = fields
116
+ .filter(field => field.startsWith(`${segment[1]}.`) || field === '*')
117
+ .map(field => (field === '*' ? field : field.substring(segment[1].length + 1)));
119
118
  }
119
+ return fields.some(p => p === prop || p === '*');
120
+ }
121
+ register(entity) {
122
+ helper(entity).__serializationContext.root = this;
123
+ this.#entities.add(entity);
124
+ }
120
125
  }
@@ -1,13 +1,14 @@
1
1
  import { type TransformContext, Type } from './Type.js';
2
2
  import type { EntityProperty } from '../typings.js';
3
3
  import type { Platform } from '../platforms/Platform.js';
4
+ /** Maps a database text/array column to a JS array, using platform-specific marshalling (e.g., PostgreSQL arrays or comma-separated strings). */
4
5
  export declare class ArrayType<T = string> extends Type<T[] | null, string | null> {
5
- private readonly toJsValue;
6
- private readonly toDbValue;
7
- constructor(toJsValue?: (i: string) => T, toDbValue?: (i: T) => string);
8
- convertToDatabaseValue(value: T[] | null, platform: Platform, context?: TransformContext): string | null;
9
- convertToJSValue(value: T[] | string | null, platform: Platform): T[] | null;
10
- compareAsType(): string;
11
- toJSON(value: T[]): T[];
12
- getColumnType(prop: EntityProperty, platform: Platform): string;
6
+ private readonly toJsValue;
7
+ private readonly toDbValue;
8
+ constructor(toJsValue?: (i: string) => T, toDbValue?: (i: T) => string);
9
+ convertToDatabaseValue(value: T[] | null, platform: Platform, context?: TransformContext): string | null;
10
+ convertToJSValue(value: T[] | string | null, platform: Platform): T[] | null;
11
+ compareAsType(): string;
12
+ toJSON(value: T[]): T[];
13
+ getColumnType(prop: EntityProperty, platform: Platform): string;
13
14
  }
@@ -1,42 +1,43 @@
1
1
  import { Type } from './Type.js';
2
2
  import { ValidationError } from '../errors.js';
3
+ /** Maps a database text/array column to a JS array, using platform-specific marshalling (e.g., PostgreSQL arrays or comma-separated strings). */
3
4
  export class ArrayType extends Type {
4
- toJsValue;
5
- toDbValue;
6
- constructor(toJsValue = i => i, toDbValue = i => i) {
7
- super();
8
- this.toJsValue = toJsValue;
9
- this.toDbValue = toDbValue;
5
+ toJsValue;
6
+ toDbValue;
7
+ constructor(toJsValue = i => i, toDbValue = i => i) {
8
+ super();
9
+ this.toJsValue = toJsValue;
10
+ this.toDbValue = toDbValue;
11
+ }
12
+ convertToDatabaseValue(value, platform, context) {
13
+ if (!value) {
14
+ return value;
10
15
  }
11
- convertToDatabaseValue(value, platform, context) {
12
- if (!value) {
13
- return value;
14
- }
15
- if (Array.isArray(value)) {
16
- return platform.marshallArray(value.map(i => this.toDbValue(i)));
17
- }
18
- /* v8 ignore next */
19
- if (context?.fromQuery) {
20
- return value;
21
- }
22
- throw ValidationError.invalidType(ArrayType, value, 'JS');
16
+ if (Array.isArray(value)) {
17
+ return platform.marshallArray(value.map(i => this.toDbValue(i)));
23
18
  }
24
- convertToJSValue(value, platform) {
25
- if (value == null) {
26
- return value;
27
- }
28
- if (typeof value === 'string') {
29
- value = platform.unmarshallArray(value);
30
- }
31
- return value.map(i => this.toJsValue(i));
19
+ /* v8 ignore next */
20
+ if (context?.fromQuery) {
21
+ return value;
32
22
  }
33
- compareAsType() {
34
- return 'string[]';
23
+ throw ValidationError.invalidType(ArrayType, value, 'JS');
24
+ }
25
+ convertToJSValue(value, platform) {
26
+ if (value == null) {
27
+ return value;
35
28
  }
36
- toJSON(value) {
37
- return value;
38
- }
39
- getColumnType(prop, platform) {
40
- return platform.getArrayDeclarationSQL();
29
+ if (typeof value === 'string') {
30
+ value = platform.unmarshallArray(value);
41
31
  }
32
+ return value.map(i => this.toJsValue(i));
33
+ }
34
+ compareAsType() {
35
+ return 'string[]';
36
+ }
37
+ toJSON(value) {
38
+ return value;
39
+ }
40
+ getColumnType(prop, platform) {
41
+ return platform.getArrayDeclarationSQL();
42
+ }
42
43
  }
@@ -5,15 +5,22 @@ import type { EntityProperty } from '../typings.js';
5
5
  * This type will automatically convert string values returned from the database to native JS bigints (default)
6
6
  * or numbers (safe only for values up to `Number.MAX_SAFE_INTEGER`), or strings, depending on the `mode`.
7
7
  */
8
- export declare class BigIntType<Mode extends 'bigint' | 'number' | 'string' = 'bigint'> extends Type<JSTypeByMode<Mode> | null | undefined, string | null | undefined> {
9
- mode?: Mode | undefined;
10
- constructor(mode?: Mode | undefined);
11
- convertToDatabaseValue(value: JSTypeByMode<Mode> | null | undefined): string | null | undefined;
12
- convertToJSValue(value: string | bigint | null | undefined): JSTypeByMode<Mode> | null | undefined;
13
- toJSON(value: JSTypeByMode<Mode> | null | undefined): JSTypeByMode<Mode> | null | undefined;
14
- getColumnType(prop: EntityProperty, platform: Platform): string;
15
- compareAsType(): string;
16
- compareValues(a: string, b: string): boolean;
8
+ export declare class BigIntType<Mode extends 'bigint' | 'number' | 'string' = 'bigint'> extends Type<
9
+ JSTypeByMode<Mode> | null | undefined,
10
+ string | null | undefined
11
+ > {
12
+ mode?: Mode | undefined;
13
+ constructor(mode?: Mode | undefined);
14
+ convertToDatabaseValue(value: JSTypeByMode<Mode> | null | undefined): string | null | undefined;
15
+ convertToJSValue(value: string | bigint | null | undefined): JSTypeByMode<Mode> | null | undefined;
16
+ toJSON(value: JSTypeByMode<Mode> | null | undefined): JSTypeByMode<Mode> | null | undefined;
17
+ getColumnType(prop: EntityProperty, platform: Platform): string;
18
+ compareAsType(): string;
19
+ compareValues(a: string, b: string): boolean;
17
20
  }
18
- type JSTypeByMode<Mode extends 'bigint' | 'number' | 'string'> = Mode extends 'bigint' ? bigint : Mode extends 'number' ? number : string;
21
+ type JSTypeByMode<Mode extends 'bigint' | 'number' | 'string'> = Mode extends 'bigint'
22
+ ? bigint
23
+ : Mode extends 'number'
24
+ ? number
25
+ : string;
19
26
  export {};
@@ -4,45 +4,45 @@ import { Type } from './Type.js';
4
4
  * or numbers (safe only for values up to `Number.MAX_SAFE_INTEGER`), or strings, depending on the `mode`.
5
5
  */
6
6
  export class BigIntType extends Type {
7
- mode;
8
- constructor(mode) {
9
- super();
10
- this.mode = mode;
7
+ mode;
8
+ constructor(mode) {
9
+ super();
10
+ this.mode = mode;
11
+ }
12
+ convertToDatabaseValue(value) {
13
+ if (value == null) {
14
+ return value;
11
15
  }
12
- convertToDatabaseValue(value) {
13
- if (value == null) {
14
- return value;
15
- }
16
- return '' + value;
16
+ return '' + value;
17
+ }
18
+ convertToJSValue(value) {
19
+ /* v8 ignore next */
20
+ if (value == null) {
21
+ return value;
17
22
  }
18
- convertToJSValue(value) {
19
- /* v8 ignore next */
20
- if (value == null) {
21
- return value;
22
- }
23
- switch (this.mode) {
24
- case 'number':
25
- return Number(value);
26
- case 'string':
27
- return String(value);
28
- case 'bigint':
29
- default:
30
- return BigInt(String(value));
31
- }
23
+ switch (this.mode) {
24
+ case 'number':
25
+ return Number(value);
26
+ case 'string':
27
+ return String(value);
28
+ case 'bigint':
29
+ default:
30
+ return BigInt(String(value));
32
31
  }
33
- toJSON(value) {
34
- if (this.mode === 'number') {
35
- return value;
36
- }
37
- return this.convertToDatabaseValue(value);
38
- }
39
- getColumnType(prop, platform) {
40
- return platform.getBigIntTypeDeclarationSQL(prop);
41
- }
42
- compareAsType() {
43
- return this.mode ?? 'bigint';
44
- }
45
- compareValues(a, b) {
46
- return String(a) === String(b);
32
+ }
33
+ toJSON(value) {
34
+ if (this.mode === 'number') {
35
+ return value;
47
36
  }
37
+ return this.convertToDatabaseValue(value);
38
+ }
39
+ getColumnType(prop, platform) {
40
+ return platform.getBigIntTypeDeclarationSQL(prop);
41
+ }
42
+ compareAsType() {
43
+ return this.mode ?? 'bigint';
44
+ }
45
+ compareValues(a, b) {
46
+ return String(a) === String(b);
47
+ }
48
48
  }
@@ -1,8 +1,9 @@
1
1
  import { Uint8ArrayType } from './Uint8ArrayType.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 Node.js `Buffer`. */
4
5
  export declare class BlobType extends Uint8ArrayType {
5
- convertToJSValue(value: Buffer): Buffer | null;
6
- compareAsType(): string;
7
- getColumnType(prop: EntityProperty, platform: Platform): string;
6
+ convertToJSValue(value: Buffer): Buffer | null;
7
+ compareAsType(): string;
8
+ getColumnType(prop: EntityProperty, platform: Platform): string;
8
9
  }
package/types/BlobType.js CHANGED
@@ -1,18 +1,19 @@
1
1
  import { Uint8ArrayType } from './Uint8ArrayType.js';
2
+ /** Maps a database BLOB/BYTEA column to a Node.js `Buffer`. */
2
3
  export class BlobType extends Uint8ArrayType {
3
- convertToJSValue(value) {
4
- if (value instanceof Buffer || !value) {
5
- return value;
6
- }
7
- if (value.buffer instanceof Buffer) {
8
- return value.buffer;
9
- }
10
- return Buffer.from(value);
4
+ convertToJSValue(value) {
5
+ if (value instanceof Buffer || !value) {
6
+ return value;
11
7
  }
12
- compareAsType() {
13
- return 'Buffer';
14
- }
15
- getColumnType(prop, platform) {
16
- return platform.getBlobDeclarationSQL();
8
+ if (value.buffer instanceof Buffer) {
9
+ return value.buffer;
17
10
  }
11
+ return Buffer.from(value);
12
+ }
13
+ compareAsType() {
14
+ return 'Buffer';
15
+ }
16
+ getColumnType(prop, platform) {
17
+ return platform.getBlobDeclarationSQL();
18
+ }
18
19
  }
@@ -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 BOOLEAN/TINYINT(1) column to a JS `boolean`. */
4
5
  export declare class BooleanType extends Type<boolean | null | undefined, boolean | null | undefined> {
5
- getColumnType(prop: EntityProperty, platform: Platform): string;
6
- compareAsType(): string;
7
- convertToJSValue(value: boolean | null | undefined): boolean | null | undefined;
8
- ensureComparable(): boolean;
6
+ getColumnType(prop: EntityProperty, platform: Platform): string;
7
+ compareAsType(): string;
8
+ convertToJSValue(value: boolean | null | undefined): boolean | null | undefined;
9
+ ensureComparable(): boolean;
9
10
  }
@@ -1,15 +1,16 @@
1
1
  import { Type } from './Type.js';
2
+ /** Maps a database BOOLEAN/TINYINT(1) column to a JS `boolean`. */
2
3
  export class BooleanType extends Type {
3
- getColumnType(prop, platform) {
4
- return platform.getBooleanTypeDeclarationSQL();
5
- }
6
- compareAsType() {
7
- return 'boolean';
8
- }
9
- convertToJSValue(value) {
10
- return Boolean(value);
11
- }
12
- ensureComparable() {
13
- return false;
14
- }
4
+ getColumnType(prop, platform) {
5
+ return platform.getBooleanTypeDeclarationSQL();
6
+ }
7
+ compareAsType() {
8
+ return 'boolean';
9
+ }
10
+ convertToJSValue(value) {
11
+ return Boolean(value);
12
+ }
13
+ ensureComparable() {
14
+ return false;
15
+ }
15
16
  }
@@ -1,7 +1,8 @@
1
1
  import { StringType } from './StringType.js';
2
2
  import type { Platform } from '../platforms/Platform.js';
3
3
  import type { EntityProperty } from '../typings.js';
4
+ /** Maps a database CHAR (fixed-length) column to a JS `string`. */
4
5
  export declare class CharacterType extends StringType {
5
- getColumnType(prop: EntityProperty, platform: Platform): string;
6
- getDefaultLength(platform: Platform): number;
6
+ getColumnType(prop: EntityProperty, platform: Platform): string;
7
+ getDefaultLength(platform: Platform): number;
7
8
  }
@@ -1,9 +1,10 @@
1
1
  import { StringType } from './StringType.js';
2
+ /** Maps a database CHAR (fixed-length) column to a JS `string`. */
2
3
  export class CharacterType extends StringType {
3
- getColumnType(prop, platform) {
4
- return platform.getCharTypeDeclarationSQL(prop);
5
- }
6
- getDefaultLength(platform) {
7
- return platform.getDefaultCharLength();
8
- }
4
+ getColumnType(prop, platform) {
5
+ return platform.getCharTypeDeclarationSQL(prop);
6
+ }
7
+ getDefaultLength(platform) {
8
+ return platform.getDefaultCharLength();
9
+ }
9
10
  }
@@ -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 DATETIME/TIMESTAMP column to a JS `Date` object. */
4
5
  export declare class DateTimeType extends Type<Date, string> {
5
- getColumnType(prop: EntityProperty, platform: Platform): string;
6
- compareAsType(): string;
7
- get runtimeType(): string;
8
- ensureComparable(): boolean;
9
- getDefaultLength(platform: Platform): number;
6
+ getColumnType(prop: EntityProperty, platform: Platform): string;
7
+ compareAsType(): string;
8
+ get runtimeType(): string;
9
+ ensureComparable(): boolean;
10
+ getDefaultLength(platform: Platform): number;
10
11
  }
@@ -1,18 +1,19 @@
1
1
  import { Type } from './Type.js';
2
+ /** Maps a database DATETIME/TIMESTAMP column to a JS `Date` object. */
2
3
  export class DateTimeType extends Type {
3
- getColumnType(prop, platform) {
4
- return platform.getDateTimeTypeDeclarationSQL({ length: prop.length });
5
- }
6
- compareAsType() {
7
- return 'Date';
8
- }
9
- get runtimeType() {
10
- return 'Date';
11
- }
12
- ensureComparable() {
13
- return false;
14
- }
15
- getDefaultLength(platform) {
16
- return platform.getDefaultDateTimeLength();
17
- }
4
+ getColumnType(prop, platform) {
5
+ return platform.getDateTimeTypeDeclarationSQL({ length: prop.length });
6
+ }
7
+ compareAsType() {
8
+ return 'Date';
9
+ }
10
+ get runtimeType() {
11
+ return 'Date';
12
+ }
13
+ ensureComparable() {
14
+ return false;
15
+ }
16
+ getDefaultLength(platform) {
17
+ return platform.getDefaultDateTimeLength();
18
+ }
18
19
  }
@@ -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 DATE column (date without time) to a JS `string` in YYYY-MM-DD format. */
4
5
  export declare class DateType extends Type<string | null | undefined, string | null | undefined> {
5
- compareAsType(): string;
6
- ensureComparable(): boolean;
7
- convertToJSValue(value: any, platform: Platform): string | null | undefined;
8
- getColumnType(prop: EntityProperty, platform: Platform): string;
9
- getDefaultLength(platform: Platform): number;
6
+ compareAsType(): string;
7
+ ensureComparable(): boolean;
8
+ convertToJSValue(value: any, platform: Platform): string | null | undefined;
9
+ getColumnType(prop: EntityProperty, platform: Platform): string;
10
+ getDefaultLength(platform: Platform): number;
10
11
  }