typeorm 0.3.26-dev.bdb8326 → 0.3.26-dev.ec26eae

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 (215) hide show
  1. package/README.md +15 -1113
  2. package/browser/cache/RedisQueryResultCache.d.ts +13 -0
  3. package/browser/cache/RedisQueryResultCache.js +105 -38
  4. package/browser/cache/RedisQueryResultCache.js.map +1 -1
  5. package/browser/connection/ConnectionOptionsReader.js +1 -1
  6. package/browser/connection/ConnectionOptionsReader.js.map +1 -1
  7. package/browser/connection/options-reader/ConnectionOptionsEnvReader.d.ts +1 -1
  8. package/browser/connection/options-reader/ConnectionOptionsEnvReader.js +1 -1
  9. package/browser/connection/options-reader/ConnectionOptionsEnvReader.js.map +1 -1
  10. package/browser/driver/aurora-mysql/AuroraMysqlDriver.d.ts +1 -1
  11. package/browser/driver/aurora-mysql/AuroraMysqlQueryRunner.js +12 -21
  12. package/browser/driver/aurora-mysql/AuroraMysqlQueryRunner.js.map +1 -1
  13. package/browser/driver/better-sqlite3/BetterSqlite3Driver.js +2 -2
  14. package/browser/driver/better-sqlite3/BetterSqlite3Driver.js.map +1 -1
  15. package/browser/driver/better-sqlite3/BetterSqlite3QueryRunner.js +3 -3
  16. package/browser/driver/better-sqlite3/BetterSqlite3QueryRunner.js.map +1 -1
  17. package/browser/driver/cockroachdb/CockroachDriver.js +2 -2
  18. package/browser/driver/cockroachdb/CockroachDriver.js.map +1 -1
  19. package/browser/driver/cockroachdb/CockroachQueryRunner.js +4 -4
  20. package/browser/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  21. package/browser/driver/cordova/CordovaQueryRunner.js +1 -1
  22. package/browser/driver/cordova/CordovaQueryRunner.js.map +1 -1
  23. package/browser/driver/expo/legacy/ExpoLegacyQueryRunner.js +1 -1
  24. package/browser/driver/expo/legacy/ExpoLegacyQueryRunner.js.map +1 -1
  25. package/browser/driver/mongodb/MongoConnectionOptions.d.ts +9 -9
  26. package/browser/driver/mongodb/MongoConnectionOptions.js.map +1 -1
  27. package/browser/driver/mongodb/MongoDriver.d.ts +1 -1
  28. package/browser/driver/mongodb/bson.typings.d.ts +0 -4
  29. package/browser/driver/mongodb/bson.typings.js +1 -1
  30. package/browser/driver/mongodb/bson.typings.js.map +1 -1
  31. package/browser/driver/mongodb/typings.d.ts +7 -10
  32. package/browser/driver/mongodb/typings.js +2 -2
  33. package/browser/driver/mongodb/typings.js.map +1 -1
  34. package/browser/driver/mysql/MysqlDriver.d.ts +1 -1
  35. package/browser/driver/mysql/MysqlDriver.js +3 -1
  36. package/browser/driver/mysql/MysqlDriver.js.map +1 -1
  37. package/browser/driver/mysql/MysqlQueryRunner.js +4 -4
  38. package/browser/driver/mysql/MysqlQueryRunner.js.map +1 -1
  39. package/browser/driver/nativescript/NativescriptQueryRunner.js +1 -1
  40. package/browser/driver/nativescript/NativescriptQueryRunner.js.map +1 -1
  41. package/browser/driver/oracle/OracleDriver.js +0 -5
  42. package/browser/driver/oracle/OracleDriver.js.map +1 -1
  43. package/browser/driver/oracle/OracleQueryRunner.js +1 -1
  44. package/browser/driver/oracle/OracleQueryRunner.js.map +1 -1
  45. package/browser/driver/postgres/PostgresDriver.js +3 -5
  46. package/browser/driver/postgres/PostgresDriver.js.map +1 -1
  47. package/browser/driver/postgres/PostgresQueryRunner.js +5 -5
  48. package/browser/driver/postgres/PostgresQueryRunner.js.map +1 -1
  49. package/browser/driver/react-native/ReactNativeDriver.d.ts +1 -1
  50. package/browser/driver/react-native/ReactNativeQueryRunner.js +1 -1
  51. package/browser/driver/react-native/ReactNativeQueryRunner.js.map +1 -1
  52. package/browser/driver/sap/SapConnectionOptions.d.ts +33 -8
  53. package/browser/driver/sap/SapConnectionOptions.js.map +1 -1
  54. package/browser/driver/sap/SapDriver.d.ts +21 -22
  55. package/browser/driver/sap/SapDriver.js +127 -115
  56. package/browser/driver/sap/SapDriver.js.map +1 -1
  57. package/browser/driver/sap/SapQueryRunner.js +59 -63
  58. package/browser/driver/sap/SapQueryRunner.js.map +1 -1
  59. package/browser/driver/spanner/SpannerDriver.d.ts +1 -1
  60. package/browser/driver/spanner/SpannerQueryRunner.js +3 -3
  61. package/browser/driver/spanner/SpannerQueryRunner.js.map +1 -1
  62. package/browser/driver/sqlite/SqliteDriver.js +1 -1
  63. package/browser/driver/sqlite/SqliteDriver.js.map +1 -1
  64. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.d.ts +2 -2
  65. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js +1 -1
  66. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
  67. package/browser/driver/sqljs/SqljsDriver.d.ts +2 -1
  68. package/browser/driver/sqlserver/SqlServerQueryRunner.js +1 -1
  69. package/browser/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  70. package/browser/driver/types/ColumnTypes.d.ts +1 -1
  71. package/browser/driver/types/ColumnTypes.js.map +1 -1
  72. package/browser/entity-manager/MongoEntityManager.js +3 -3
  73. package/browser/entity-manager/MongoEntityManager.js.map +1 -1
  74. package/browser/error/DriverPackageNotInstalledError.js +1 -2
  75. package/browser/error/DriverPackageNotInstalledError.js.map +1 -1
  76. package/browser/logger/FormattedConsoleLogger.js +1 -1
  77. package/browser/logger/FormattedConsoleLogger.js.map +1 -1
  78. package/browser/metadata/ColumnMetadata.d.ts +1 -1
  79. package/browser/metadata/ColumnMetadata.js.map +1 -1
  80. package/browser/metadata-builder/EntityMetadataBuilder.js +8 -1
  81. package/browser/metadata-builder/EntityMetadataBuilder.js.map +1 -1
  82. package/browser/metadata-builder/EntityMetadataValidator.js +2 -4
  83. package/browser/metadata-builder/EntityMetadataValidator.js.map +1 -1
  84. package/browser/persistence/SubjectExecutor.js +4 -10
  85. package/browser/persistence/SubjectExecutor.js.map +1 -1
  86. package/browser/persistence/SubjectTopologicalSorter.js +5 -4
  87. package/browser/persistence/SubjectTopologicalSorter.js.map +1 -1
  88. package/browser/platform/BrowserPlatformTools.js +7 -3
  89. package/browser/platform/BrowserPlatformTools.js.map +1 -1
  90. package/browser/platform/PlatformTools.js +0 -2
  91. package/browser/platform/PlatformTools.js.map +1 -1
  92. package/browser/query-builder/QueryExpressionMap.js +1 -0
  93. package/browser/query-builder/QueryExpressionMap.js.map +1 -1
  94. package/browser/query-builder/RelationLoader.js +2 -0
  95. package/browser/query-builder/RelationLoader.js.map +1 -1
  96. package/browser/query-builder/SelectQueryBuilder.d.ts +1 -0
  97. package/browser/query-builder/SelectQueryBuilder.js +43 -5
  98. package/browser/query-builder/SelectQueryBuilder.js.map +1 -1
  99. package/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.js.map +1 -1
  100. package/browser/query-runner/QueryLock.js +1 -0
  101. package/browser/query-runner/QueryLock.js.map +1 -1
  102. package/browser/util/ImportUtils.d.ts +1 -1
  103. package/browser/util/ImportUtils.js +2 -1
  104. package/browser/util/ImportUtils.js.map +1 -1
  105. package/browser/util/OrmUtils.d.ts +7 -10
  106. package/browser/util/OrmUtils.js +22 -31
  107. package/browser/util/OrmUtils.js.map +1 -1
  108. package/cache/RedisQueryResultCache.d.ts +13 -0
  109. package/cache/RedisQueryResultCache.js +105 -38
  110. package/cache/RedisQueryResultCache.js.map +1 -1
  111. package/cli.js +3 -1
  112. package/cli.js.map +1 -1
  113. package/connection/ConnectionOptionsReader.js +1 -1
  114. package/connection/ConnectionOptionsReader.js.map +1 -1
  115. package/connection/options-reader/ConnectionOptionsEnvReader.d.ts +1 -1
  116. package/connection/options-reader/ConnectionOptionsEnvReader.js +1 -1
  117. package/connection/options-reader/ConnectionOptionsEnvReader.js.map +1 -1
  118. package/driver/aurora-mysql/AuroraMysqlDriver.d.ts +1 -1
  119. package/driver/aurora-mysql/AuroraMysqlQueryRunner.js +12 -21
  120. package/driver/aurora-mysql/AuroraMysqlQueryRunner.js.map +1 -1
  121. package/driver/better-sqlite3/BetterSqlite3Driver.js +2 -2
  122. package/driver/better-sqlite3/BetterSqlite3Driver.js.map +1 -1
  123. package/driver/better-sqlite3/BetterSqlite3QueryRunner.js +3 -3
  124. package/driver/better-sqlite3/BetterSqlite3QueryRunner.js.map +1 -1
  125. package/driver/cockroachdb/CockroachDriver.js +2 -2
  126. package/driver/cockroachdb/CockroachDriver.js.map +1 -1
  127. package/driver/cockroachdb/CockroachQueryRunner.js +4 -4
  128. package/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  129. package/driver/cordova/CordovaQueryRunner.js +1 -1
  130. package/driver/cordova/CordovaQueryRunner.js.map +1 -1
  131. package/driver/expo/legacy/ExpoLegacyQueryRunner.js +1 -1
  132. package/driver/expo/legacy/ExpoLegacyQueryRunner.js.map +1 -1
  133. package/driver/mongodb/MongoConnectionOptions.d.ts +9 -9
  134. package/driver/mongodb/MongoConnectionOptions.js.map +1 -1
  135. package/driver/mongodb/MongoDriver.d.ts +1 -1
  136. package/driver/mongodb/bson.typings.d.ts +0 -4
  137. package/driver/mongodb/bson.typings.js +0 -1
  138. package/driver/mongodb/bson.typings.js.map +1 -1
  139. package/driver/mongodb/typings.d.ts +7 -10
  140. package/driver/mongodb/typings.js +3 -2
  141. package/driver/mongodb/typings.js.map +1 -1
  142. package/driver/mysql/MysqlDriver.d.ts +1 -1
  143. package/driver/mysql/MysqlDriver.js +3 -1
  144. package/driver/mysql/MysqlDriver.js.map +1 -1
  145. package/driver/mysql/MysqlQueryRunner.js +4 -4
  146. package/driver/mysql/MysqlQueryRunner.js.map +1 -1
  147. package/driver/nativescript/NativescriptQueryRunner.js +1 -1
  148. package/driver/nativescript/NativescriptQueryRunner.js.map +1 -1
  149. package/driver/oracle/OracleDriver.js +0 -5
  150. package/driver/oracle/OracleDriver.js.map +1 -1
  151. package/driver/oracle/OracleQueryRunner.js +1 -1
  152. package/driver/oracle/OracleQueryRunner.js.map +1 -1
  153. package/driver/postgres/PostgresDriver.js +3 -5
  154. package/driver/postgres/PostgresDriver.js.map +1 -1
  155. package/driver/postgres/PostgresQueryRunner.js +5 -5
  156. package/driver/postgres/PostgresQueryRunner.js.map +1 -1
  157. package/driver/react-native/ReactNativeDriver.d.ts +1 -1
  158. package/driver/react-native/ReactNativeQueryRunner.js +1 -1
  159. package/driver/react-native/ReactNativeQueryRunner.js.map +1 -1
  160. package/driver/sap/SapConnectionOptions.d.ts +33 -8
  161. package/driver/sap/SapConnectionOptions.js.map +1 -1
  162. package/driver/sap/SapDriver.d.ts +21 -22
  163. package/driver/sap/SapDriver.js +127 -115
  164. package/driver/sap/SapDriver.js.map +1 -1
  165. package/driver/sap/SapQueryRunner.js +64 -68
  166. package/driver/sap/SapQueryRunner.js.map +1 -1
  167. package/driver/spanner/SpannerDriver.d.ts +1 -1
  168. package/driver/spanner/SpannerQueryRunner.js +3 -3
  169. package/driver/spanner/SpannerQueryRunner.js.map +1 -1
  170. package/driver/sqlite/SqliteDriver.js +1 -1
  171. package/driver/sqlite/SqliteDriver.js.map +1 -1
  172. package/driver/sqlite-abstract/AbstractSqliteDriver.d.ts +2 -2
  173. package/driver/sqlite-abstract/AbstractSqliteDriver.js +1 -1
  174. package/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
  175. package/driver/sqljs/SqljsDriver.d.ts +2 -1
  176. package/driver/sqlserver/SqlServerQueryRunner.js +1 -1
  177. package/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  178. package/driver/types/ColumnTypes.d.ts +1 -1
  179. package/driver/types/ColumnTypes.js.map +1 -1
  180. package/entity-manager/MongoEntityManager.js +3 -3
  181. package/entity-manager/MongoEntityManager.js.map +1 -1
  182. package/error/DriverPackageNotInstalledError.js +1 -2
  183. package/error/DriverPackageNotInstalledError.js.map +1 -1
  184. package/index.mjs +2 -2
  185. package/logger/FormattedConsoleLogger.js +1 -1
  186. package/logger/FormattedConsoleLogger.js.map +1 -1
  187. package/metadata/ColumnMetadata.d.ts +1 -1
  188. package/metadata/ColumnMetadata.js.map +1 -1
  189. package/metadata-builder/EntityMetadataBuilder.js +8 -1
  190. package/metadata-builder/EntityMetadataBuilder.js.map +1 -1
  191. package/metadata-builder/EntityMetadataValidator.js +2 -4
  192. package/metadata-builder/EntityMetadataValidator.js.map +1 -1
  193. package/package.json +1 -1
  194. package/persistence/SubjectExecutor.js +4 -10
  195. package/persistence/SubjectExecutor.js.map +1 -1
  196. package/persistence/SubjectTopologicalSorter.js +5 -4
  197. package/persistence/SubjectTopologicalSorter.js.map +1 -1
  198. package/platform/PlatformTools.js +0 -2
  199. package/platform/PlatformTools.js.map +1 -1
  200. package/query-builder/QueryExpressionMap.js +1 -0
  201. package/query-builder/QueryExpressionMap.js.map +1 -1
  202. package/query-builder/RelationLoader.js +2 -0
  203. package/query-builder/RelationLoader.js.map +1 -1
  204. package/query-builder/SelectQueryBuilder.d.ts +1 -0
  205. package/query-builder/SelectQueryBuilder.js +43 -5
  206. package/query-builder/SelectQueryBuilder.js.map +1 -1
  207. package/query-builder/transformer/RawSqlResultsToEntityTransformer.js.map +1 -1
  208. package/query-runner/QueryLock.js +1 -0
  209. package/query-runner/QueryLock.js.map +1 -1
  210. package/util/ImportUtils.d.ts +1 -1
  211. package/util/ImportUtils.js +2 -1
  212. package/util/ImportUtils.js.map +1 -1
  213. package/util/OrmUtils.d.ts +7 -10
  214. package/util/OrmUtils.js +22 -31
  215. package/util/OrmUtils.js.map +1 -1
@@ -19,6 +19,10 @@ export declare class RedisQueryResultCache implements QueryResultCache {
19
19
  * Type of the Redis Client (redis or ioredis).
20
20
  */
21
21
  protected clientType: "redis" | "ioredis" | "ioredis/cluster";
22
+ /**
23
+ * Redis major version number
24
+ */
25
+ protected redisMajorVersion: number | undefined;
22
26
  constructor(connection: DataSource, clientType: "redis" | "ioredis" | "ioredis/cluster");
23
27
  /**
24
28
  * Creates a connection with given cache provider.
@@ -62,4 +66,13 @@ export declare class RedisQueryResultCache implements QueryResultCache {
62
66
  * Loads redis dependency.
63
67
  */
64
68
  protected loadRedis(): any;
69
+ /**
70
+ * Detects the Redis version based on the connected client's API characteristics
71
+ * without creating test keys in the database
72
+ */
73
+ private detectRedisVersion;
74
+ /**
75
+ * Checks if Redis version is 5.x or higher
76
+ */
77
+ private isRedis5OrHigher;
65
78
  }
@@ -21,19 +21,32 @@ export class RedisQueryResultCache {
21
21
  async connect() {
22
22
  const cacheOptions = this.connection.options.cache;
23
23
  if (this.clientType === "redis") {
24
- this.client = this.redis.createClient({
24
+ const clientOptions = {
25
25
  ...cacheOptions?.options,
26
- legacyMode: true,
27
- });
26
+ };
27
+ // Create initial client to test Redis version
28
+ let tempClient = this.redis.createClient(clientOptions);
29
+ const isRedis4Plus = typeof tempClient.connect === "function";
30
+ if (isRedis4Plus) {
31
+ // Redis 4+ detected, recreate with legacyMode for Redis 4.x
32
+ // (Redis 5 will ignore legacyMode if not needed)
33
+ clientOptions.legacyMode = true;
34
+ tempClient = this.redis.createClient(clientOptions);
35
+ }
36
+ // Set as the main client
37
+ this.client = tempClient;
28
38
  if (typeof this.connection.options.cache === "object" &&
29
39
  this.connection.options.cache.ignoreErrors) {
30
40
  this.client.on("error", (err) => {
31
41
  this.connection.logger.log("warn", err);
32
42
  });
33
43
  }
34
- if ("connect" in this.client) {
44
+ // Connect if Redis 4+
45
+ if (typeof this.client.connect === "function") {
35
46
  await this.client.connect();
36
47
  }
48
+ // Detect precise version after connection is established
49
+ this.detectRedisVersion();
37
50
  }
38
51
  else if (this.clientType === "ioredis") {
39
52
  if (cacheOptions && cacheOptions.port) {
@@ -71,6 +84,13 @@ export class RedisQueryResultCache {
71
84
  * Disconnects the connection
72
85
  */
73
86
  async disconnect() {
87
+ if (this.isRedis5OrHigher()) {
88
+ // Redis 5+ uses quit() that returns a Promise
89
+ await this.client.quit();
90
+ this.client = undefined;
91
+ return;
92
+ }
93
+ // Redis 3/4 callback style
74
94
  return new Promise((ok, fail) => {
75
95
  this.client.quit((err, result) => {
76
96
  if (err)
@@ -90,24 +110,22 @@ export class RedisQueryResultCache {
90
110
  * Returns undefined if result is not cached.
91
111
  */
92
112
  getFromCache(options, queryRunner) {
113
+ const key = options.identifier || options.query;
114
+ if (!key)
115
+ return Promise.resolve(undefined);
116
+ if (this.isRedis5OrHigher()) {
117
+ // Redis 5+ Promise-based API
118
+ return this.client.get(key).then((result) => {
119
+ return result ? JSON.parse(result) : undefined;
120
+ });
121
+ }
122
+ // Redis 3/4 callback-based API
93
123
  return new Promise((ok, fail) => {
94
- if (options.identifier) {
95
- this.client.get(options.identifier, (err, result) => {
96
- if (err)
97
- return fail(err);
98
- ok(JSON.parse(result));
99
- });
100
- }
101
- else if (options.query) {
102
- this.client.get(options.query, (err, result) => {
103
- if (err)
104
- return fail(err);
105
- ok(JSON.parse(result));
106
- });
107
- }
108
- else {
109
- ok(undefined);
110
- }
124
+ this.client.get(key, (err, result) => {
125
+ if (err)
126
+ return fail(err);
127
+ ok(result ? JSON.parse(result) : undefined);
128
+ });
111
129
  });
112
130
  }
113
131
  /**
@@ -120,27 +138,37 @@ export class RedisQueryResultCache {
120
138
  * Stores given query result in the cache.
121
139
  */
122
140
  async storeInCache(options, savedCache, queryRunner) {
141
+ const key = options.identifier || options.query;
142
+ if (!key)
143
+ return;
144
+ const value = JSON.stringify(options);
145
+ const duration = options.duration;
146
+ if (this.isRedis5OrHigher()) {
147
+ // Redis 5+ Promise-based API with PX option
148
+ await this.client.set(key, value, {
149
+ PX: duration,
150
+ });
151
+ return;
152
+ }
153
+ // Redis 3/4 callback-based API
123
154
  return new Promise((ok, fail) => {
124
- if (options.identifier) {
125
- this.client.set(options.identifier, JSON.stringify(options), "PX", options.duration, (err, result) => {
126
- if (err)
127
- return fail(err);
128
- ok();
129
- });
130
- }
131
- else if (options.query) {
132
- this.client.set(options.query, JSON.stringify(options), "PX", options.duration, (err, result) => {
133
- if (err)
134
- return fail(err);
135
- ok();
136
- });
137
- }
155
+ this.client.set(key, value, "PX", duration, (err, result) => {
156
+ if (err)
157
+ return fail(err);
158
+ ok();
159
+ });
138
160
  });
139
161
  }
140
162
  /**
141
163
  * Clears everything stored in the cache.
142
164
  */
143
165
  async clear(queryRunner) {
166
+ if (this.isRedis5OrHigher()) {
167
+ // Redis 5+ Promise-based API
168
+ await this.client.flushDb();
169
+ return;
170
+ }
171
+ // Redis 3/4 callback-based API
144
172
  return new Promise((ok, fail) => {
145
173
  this.client.flushdb((err, result) => {
146
174
  if (err)
@@ -163,7 +191,13 @@ export class RedisQueryResultCache {
163
191
  /**
164
192
  * Removes a single key from redis database.
165
193
  */
166
- deleteKey(key) {
194
+ async deleteKey(key) {
195
+ if (this.isRedis5OrHigher()) {
196
+ // Redis 5+ Promise-based API
197
+ await this.client.del(key);
198
+ return;
199
+ }
200
+ // Redis 3/4 callback-based API
167
201
  return new Promise((ok, fail) => {
168
202
  this.client.del(key, (err, result) => {
169
203
  if (err)
@@ -184,10 +218,43 @@ export class RedisQueryResultCache {
184
218
  return PlatformTools.load(this.clientType);
185
219
  }
186
220
  }
187
- catch (e) {
188
- throw new TypeORMError(`Cannot use cache because ${this.clientType} is not installed. Please run "npm i ${this.clientType} --save".`);
221
+ catch {
222
+ throw new TypeORMError(`Cannot use cache because ${this.clientType} is not installed. Please run "npm i ${this.clientType}".`);
189
223
  }
190
224
  }
225
+ /**
226
+ * Detects the Redis version based on the connected client's API characteristics
227
+ * without creating test keys in the database
228
+ */
229
+ detectRedisVersion() {
230
+ if (this.clientType !== "redis")
231
+ return;
232
+ try {
233
+ // Detect version by examining the client's method signatures
234
+ // This avoids creating test keys in the database
235
+ const setMethod = this.client.set;
236
+ if (setMethod && setMethod.length <= 3) {
237
+ // Redis 5+ set method accepts fewer parameters (key, value, options)
238
+ this.redisMajorVersion = 5;
239
+ }
240
+ else {
241
+ // Redis 3/4 set method requires more parameters (key, value, flag, duration, callback)
242
+ this.redisMajorVersion = 3;
243
+ }
244
+ }
245
+ catch {
246
+ // Default to Redis 3/4 for maximum compatibility
247
+ this.redisMajorVersion = 3;
248
+ }
249
+ }
250
+ /**
251
+ * Checks if Redis version is 5.x or higher
252
+ */
253
+ isRedis5OrHigher() {
254
+ if (this.clientType !== "redis")
255
+ return false;
256
+ return (this.redisMajorVersion !== undefined && this.redisMajorVersion >= 5);
257
+ }
191
258
  }
192
259
 
193
260
  //# sourceMappingURL=RedisQueryResultCache.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../browser/src/cache/RedisQueryResultCache.ts"],"names":[],"mappings":"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","file":"RedisQueryResultCache.js","sourcesContent":["import { QueryResultCache } from \"./QueryResultCache\"\nimport { QueryResultCacheOptions } from \"./QueryResultCacheOptions\"\nimport { PlatformTools } from \"../platform/PlatformTools\"\nimport { DataSource } from \"../data-source/DataSource\"\nimport { QueryRunner } from \"../query-runner/QueryRunner\"\nimport { TypeORMError } from \"../error/TypeORMError\"\n\n/**\n * Caches query result into Redis database.\n */\nexport class RedisQueryResultCache implements QueryResultCache {\n // -------------------------------------------------------------------------\n // Protected Properties\n // -------------------------------------------------------------------------\n\n /**\n * Redis module instance loaded dynamically.\n */\n protected redis: any\n\n /**\n * Connected redis client.\n */\n protected client: any\n\n /**\n * Type of the Redis Client (redis or ioredis).\n */\n protected clientType: \"redis\" | \"ioredis\" | \"ioredis/cluster\"\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(\n protected connection: DataSource,\n clientType: \"redis\" | \"ioredis\" | \"ioredis/cluster\",\n ) {\n this.clientType = clientType\n this.redis = this.loadRedis()\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates a connection with given cache provider.\n */\n async connect(): Promise<void> {\n const cacheOptions: any = this.connection.options.cache\n if (this.clientType === \"redis\") {\n this.client = this.redis.createClient({\n ...cacheOptions?.options,\n legacyMode: true,\n })\n if (\n typeof this.connection.options.cache === \"object\" &&\n this.connection.options.cache.ignoreErrors\n ) {\n this.client.on(\"error\", (err: any) => {\n this.connection.logger.log(\"warn\", err)\n })\n }\n if (\"connect\" in this.client) {\n await this.client.connect()\n }\n } else if (this.clientType === \"ioredis\") {\n if (cacheOptions && cacheOptions.port) {\n if (cacheOptions.options) {\n this.client = new this.redis(\n cacheOptions.port,\n cacheOptions.options,\n )\n } else {\n this.client = new this.redis(cacheOptions.port)\n }\n } else if (cacheOptions && cacheOptions.options) {\n this.client = new this.redis(cacheOptions.options)\n } else {\n this.client = new this.redis()\n }\n } else if (this.clientType === \"ioredis/cluster\") {\n if (\n cacheOptions &&\n cacheOptions.options &&\n Array.isArray(cacheOptions.options)\n ) {\n this.client = new this.redis.Cluster(cacheOptions.options)\n } else if (\n cacheOptions &&\n cacheOptions.options &&\n cacheOptions.options.startupNodes\n ) {\n this.client = new this.redis.Cluster(\n cacheOptions.options.startupNodes,\n cacheOptions.options.options,\n )\n } else {\n throw new TypeORMError(\n `options.startupNodes required for ${this.clientType}.`,\n )\n }\n }\n }\n\n /**\n * Disconnects the connection\n */\n async disconnect(): Promise<void> {\n return new Promise<void>((ok, fail) => {\n this.client.quit((err: any, result: any) => {\n if (err) return fail(err)\n ok()\n this.client = undefined\n })\n })\n }\n\n /**\n * Creates table for storing cache if it does not exist yet.\n */\n async synchronize(queryRunner: QueryRunner): Promise<void> {}\n\n /**\n * Get data from cache.\n * Returns cache result if found.\n * Returns undefined if result is not cached.\n */\n getFromCache(\n options: QueryResultCacheOptions,\n queryRunner?: QueryRunner,\n ): Promise<QueryResultCacheOptions | undefined> {\n return new Promise<QueryResultCacheOptions | undefined>((ok, fail) => {\n if (options.identifier) {\n this.client.get(options.identifier, (err: any, result: any) => {\n if (err) return fail(err)\n ok(JSON.parse(result))\n })\n } else if (options.query) {\n this.client.get(options.query, (err: any, result: any) => {\n if (err) return fail(err)\n ok(JSON.parse(result))\n })\n } else {\n ok(undefined)\n }\n })\n }\n\n /**\n * Checks if cache is expired or not.\n */\n isExpired(savedCache: QueryResultCacheOptions): boolean {\n return savedCache.time! + savedCache.duration < Date.now()\n }\n\n /**\n * Stores given query result in the cache.\n */\n async storeInCache(\n options: QueryResultCacheOptions,\n savedCache: QueryResultCacheOptions,\n queryRunner?: QueryRunner,\n ): Promise<void> {\n return new Promise<void>((ok, fail) => {\n if (options.identifier) {\n this.client.set(\n options.identifier,\n JSON.stringify(options),\n \"PX\",\n options.duration,\n (err: any, result: any) => {\n if (err) return fail(err)\n ok()\n },\n )\n } else if (options.query) {\n this.client.set(\n options.query,\n JSON.stringify(options),\n \"PX\",\n options.duration,\n (err: any, result: any) => {\n if (err) return fail(err)\n ok()\n },\n )\n }\n })\n }\n\n /**\n * Clears everything stored in the cache.\n */\n async clear(queryRunner?: QueryRunner): Promise<void> {\n return new Promise<void>((ok, fail) => {\n this.client.flushdb((err: any, result: any) => {\n if (err) return fail(err)\n ok()\n })\n })\n }\n\n /**\n * Removes all cached results by given identifiers from cache.\n */\n async remove(\n identifiers: string[],\n queryRunner?: QueryRunner,\n ): Promise<void> {\n await Promise.all(\n identifiers.map((identifier) => {\n return this.deleteKey(identifier)\n }),\n )\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Removes a single key from redis database.\n */\n protected deleteKey(key: string): Promise<void> {\n return new Promise<void>((ok, fail) => {\n this.client.del(key, (err: any, result: any) => {\n if (err) return fail(err)\n ok()\n })\n })\n }\n\n /**\n * Loads redis dependency.\n */\n protected loadRedis(): any {\n try {\n if (this.clientType === \"ioredis/cluster\") {\n return PlatformTools.load(\"ioredis\")\n } else {\n return PlatformTools.load(this.clientType)\n }\n } catch (e) {\n throw new TypeORMError(\n `Cannot use cache because ${this.clientType} is not installed. Please run \"npm i ${this.clientType} --save\".`,\n )\n }\n }\n}\n"],"sourceRoot":".."}
1
+ {"version":3,"sources":["../browser/src/cache/RedisQueryResultCache.ts"],"names":[],"mappings":"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","file":"RedisQueryResultCache.js","sourcesContent":["import { QueryResultCache } from \"./QueryResultCache\"\nimport { QueryResultCacheOptions } from \"./QueryResultCacheOptions\"\nimport { PlatformTools } from \"../platform/PlatformTools\"\nimport { DataSource } from \"../data-source/DataSource\"\nimport { QueryRunner } from \"../query-runner/QueryRunner\"\nimport { TypeORMError } from \"../error/TypeORMError\"\n\n/**\n * Caches query result into Redis database.\n */\nexport class RedisQueryResultCache implements QueryResultCache {\n // -------------------------------------------------------------------------\n // Protected Properties\n // -------------------------------------------------------------------------\n\n /**\n * Redis module instance loaded dynamically.\n */\n protected redis: any\n\n /**\n * Connected redis client.\n */\n protected client: any\n\n /**\n * Type of the Redis Client (redis or ioredis).\n */\n protected clientType: \"redis\" | \"ioredis\" | \"ioredis/cluster\"\n\n /**\n * Redis major version number\n */\n protected redisMajorVersion: number | undefined\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(\n protected connection: DataSource,\n clientType: \"redis\" | \"ioredis\" | \"ioredis/cluster\",\n ) {\n this.clientType = clientType\n this.redis = this.loadRedis()\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates a connection with given cache provider.\n */\n async connect(): Promise<void> {\n const cacheOptions: any = this.connection.options.cache\n if (this.clientType === \"redis\") {\n const clientOptions = {\n ...cacheOptions?.options,\n }\n\n // Create initial client to test Redis version\n let tempClient = this.redis.createClient(clientOptions)\n const isRedis4Plus = typeof tempClient.connect === \"function\"\n\n if (isRedis4Plus) {\n // Redis 4+ detected, recreate with legacyMode for Redis 4.x\n // (Redis 5 will ignore legacyMode if not needed)\n clientOptions.legacyMode = true\n tempClient = this.redis.createClient(clientOptions)\n }\n\n // Set as the main client\n this.client = tempClient\n\n if (\n typeof this.connection.options.cache === \"object\" &&\n this.connection.options.cache.ignoreErrors\n ) {\n this.client.on(\"error\", (err: any) => {\n this.connection.logger.log(\"warn\", err)\n })\n }\n\n // Connect if Redis 4+\n if (typeof this.client.connect === \"function\") {\n await this.client.connect()\n }\n\n // Detect precise version after connection is established\n this.detectRedisVersion()\n } else if (this.clientType === \"ioredis\") {\n if (cacheOptions && cacheOptions.port) {\n if (cacheOptions.options) {\n this.client = new this.redis(\n cacheOptions.port,\n cacheOptions.options,\n )\n } else {\n this.client = new this.redis(cacheOptions.port)\n }\n } else if (cacheOptions && cacheOptions.options) {\n this.client = new this.redis(cacheOptions.options)\n } else {\n this.client = new this.redis()\n }\n } else if (this.clientType === \"ioredis/cluster\") {\n if (\n cacheOptions &&\n cacheOptions.options &&\n Array.isArray(cacheOptions.options)\n ) {\n this.client = new this.redis.Cluster(cacheOptions.options)\n } else if (\n cacheOptions &&\n cacheOptions.options &&\n cacheOptions.options.startupNodes\n ) {\n this.client = new this.redis.Cluster(\n cacheOptions.options.startupNodes,\n cacheOptions.options.options,\n )\n } else {\n throw new TypeORMError(\n `options.startupNodes required for ${this.clientType}.`,\n )\n }\n }\n }\n\n /**\n * Disconnects the connection\n */\n async disconnect(): Promise<void> {\n if (this.isRedis5OrHigher()) {\n // Redis 5+ uses quit() that returns a Promise\n await this.client.quit()\n this.client = undefined\n return\n }\n\n // Redis 3/4 callback style\n return new Promise<void>((ok, fail) => {\n this.client.quit((err: any, result: any) => {\n if (err) return fail(err)\n ok()\n this.client = undefined\n })\n })\n }\n\n /**\n * Creates table for storing cache if it does not exist yet.\n */\n async synchronize(queryRunner: QueryRunner): Promise<void> {}\n\n /**\n * Get data from cache.\n * Returns cache result if found.\n * Returns undefined if result is not cached.\n */\n getFromCache(\n options: QueryResultCacheOptions,\n queryRunner?: QueryRunner,\n ): Promise<QueryResultCacheOptions | undefined> {\n const key = options.identifier || options.query\n if (!key) return Promise.resolve(undefined)\n\n if (this.isRedis5OrHigher()) {\n // Redis 5+ Promise-based API\n return this.client.get(key).then((result: any) => {\n return result ? JSON.parse(result) : undefined\n })\n }\n\n // Redis 3/4 callback-based API\n return new Promise<QueryResultCacheOptions | undefined>((ok, fail) => {\n this.client.get(key, (err: any, result: any) => {\n if (err) return fail(err)\n ok(result ? JSON.parse(result) : undefined)\n })\n })\n }\n\n /**\n * Checks if cache is expired or not.\n */\n isExpired(savedCache: QueryResultCacheOptions): boolean {\n return savedCache.time! + savedCache.duration < Date.now()\n }\n\n /**\n * Stores given query result in the cache.\n */\n async storeInCache(\n options: QueryResultCacheOptions,\n savedCache: QueryResultCacheOptions,\n queryRunner?: QueryRunner,\n ): Promise<void> {\n const key = options.identifier || options.query\n if (!key) return\n\n const value = JSON.stringify(options)\n const duration = options.duration\n\n if (this.isRedis5OrHigher()) {\n // Redis 5+ Promise-based API with PX option\n await this.client.set(key, value, {\n PX: duration,\n })\n return\n }\n\n // Redis 3/4 callback-based API\n return new Promise<void>((ok, fail) => {\n this.client.set(\n key,\n value,\n \"PX\",\n duration,\n (err: any, result: any) => {\n if (err) return fail(err)\n ok()\n },\n )\n })\n }\n\n /**\n * Clears everything stored in the cache.\n */\n async clear(queryRunner?: QueryRunner): Promise<void> {\n if (this.isRedis5OrHigher()) {\n // Redis 5+ Promise-based API\n await this.client.flushDb()\n return\n }\n\n // Redis 3/4 callback-based API\n return new Promise<void>((ok, fail) => {\n this.client.flushdb((err: any, result: any) => {\n if (err) return fail(err)\n ok()\n })\n })\n }\n\n /**\n * Removes all cached results by given identifiers from cache.\n */\n async remove(\n identifiers: string[],\n queryRunner?: QueryRunner,\n ): Promise<void> {\n await Promise.all(\n identifiers.map((identifier) => {\n return this.deleteKey(identifier)\n }),\n )\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Removes a single key from redis database.\n */\n protected async deleteKey(key: string): Promise<void> {\n if (this.isRedis5OrHigher()) {\n // Redis 5+ Promise-based API\n await this.client.del(key)\n return\n }\n\n // Redis 3/4 callback-based API\n return new Promise<void>((ok, fail) => {\n this.client.del(key, (err: any, result: any) => {\n if (err) return fail(err)\n ok()\n })\n })\n }\n\n /**\n * Loads redis dependency.\n */\n protected loadRedis(): any {\n try {\n if (this.clientType === \"ioredis/cluster\") {\n return PlatformTools.load(\"ioredis\")\n } else {\n return PlatformTools.load(this.clientType)\n }\n } catch {\n throw new TypeORMError(\n `Cannot use cache because ${this.clientType} is not installed. Please run \"npm i ${this.clientType}\".`,\n )\n }\n }\n\n /**\n * Detects the Redis version based on the connected client's API characteristics\n * without creating test keys in the database\n */\n private detectRedisVersion(): void {\n if (this.clientType !== \"redis\") return\n\n try {\n // Detect version by examining the client's method signatures\n // This avoids creating test keys in the database\n const setMethod = this.client.set\n if (setMethod && setMethod.length <= 3) {\n // Redis 5+ set method accepts fewer parameters (key, value, options)\n this.redisMajorVersion = 5\n } else {\n // Redis 3/4 set method requires more parameters (key, value, flag, duration, callback)\n this.redisMajorVersion = 3\n }\n } catch {\n // Default to Redis 3/4 for maximum compatibility\n this.redisMajorVersion = 3\n }\n }\n\n /**\n * Checks if Redis version is 5.x or higher\n */\n private isRedis5OrHigher(): boolean {\n if (this.clientType !== \"redis\") return false\n return (\n this.redisMajorVersion !== undefined && this.redisMajorVersion >= 5\n )\n }\n}\n"],"sourceRoot":".."}
@@ -90,7 +90,7 @@ export class ConnectionOptionsReader {
90
90
  // try to find connection options from any of available sources of configuration
91
91
  if (PlatformTools.getEnvVariable("TYPEORM_CONNECTION") ||
92
92
  PlatformTools.getEnvVariable("TYPEORM_URL")) {
93
- connectionOptions = await new ConnectionOptionsEnvReader().read();
93
+ connectionOptions = new ConnectionOptionsEnvReader().read();
94
94
  }
95
95
  else if (foundFileFormat === "js" ||
96
96
  foundFileFormat === "mjs" ||
@@ -1 +1 @@
1
- {"version":3,"sources":["../browser/src/connection/ConnectionOptionsReader.ts"],"names":[],"mappings":"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","file":"ConnectionOptionsReader.js","sourcesContent":["import appRootPath from \"app-root-path\"\nimport path from \"path\"\n\nimport { DataSourceOptions } from \"../data-source/DataSourceOptions\"\nimport { TypeORMError } from \"../error\"\nimport { PlatformTools } from \"../platform/PlatformTools\"\nimport { importOrRequireFile } from \"../util/ImportUtils\"\nimport { isAbsolute } from \"../util/PathUtils\"\nimport { ConnectionOptionsEnvReader } from \"./options-reader/ConnectionOptionsEnvReader\"\n\n/**\n * Reads connection options from the ormconfig.\n */\nexport class ConnectionOptionsReader {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(\n protected options?: {\n /**\n * Directory where ormconfig should be read from.\n * By default its your application root (where your app package.json is located).\n */\n root?: string\n\n /**\n * Filename of the ormconfig configuration. By default its equal to \"ormconfig\".\n */\n configName?: string\n },\n ) {}\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Returns all connection options read from the ormconfig.\n */\n async all(): Promise<DataSourceOptions[]> {\n const options = await this.load()\n if (!options)\n throw new TypeORMError(\n `No connection options were found in any orm configuration files.`,\n )\n\n return options\n }\n\n /**\n * Gets a connection with a given name read from ormconfig.\n * If connection with such name would not be found then it throw error.\n */\n async get(name: string): Promise<DataSourceOptions> {\n const allOptions = await this.all()\n const targetOptions = allOptions.find(\n (options) =>\n options.name === name || (name === \"default\" && !options.name),\n )\n if (!targetOptions)\n throw new TypeORMError(\n `Cannot find connection ${name} because its not defined in any orm configuration files.`,\n )\n\n return targetOptions\n }\n\n /**\n * Checks if there is a TypeORM configuration file.\n */\n async has(name: string): Promise<boolean> {\n const allOptions = await this.load()\n if (!allOptions) return false\n\n const targetOptions = allOptions.find(\n (options) =>\n options.name === name || (name === \"default\" && !options.name),\n )\n return !!targetOptions\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Loads all connection options from a configuration file.\n *\n * todo: get in count NODE_ENV somehow\n */\n protected async load(): Promise<DataSourceOptions[] | undefined> {\n let connectionOptions:\n | DataSourceOptions\n | DataSourceOptions[]\n | undefined = undefined\n\n const fileFormats = [\n \"env\",\n \"js\",\n \"mjs\",\n \"cjs\",\n \"ts\",\n \"mts\",\n \"cts\",\n \"json\",\n ]\n\n // Detect if baseFilePath contains file extension\n const possibleExtension = this.baseFilePath.substr(\n this.baseFilePath.lastIndexOf(\".\"),\n )\n const fileExtension = fileFormats.find(\n (extension) => `.${extension}` === possibleExtension,\n )\n\n // try to find any of following configuration formats\n const foundFileFormat =\n fileExtension ||\n fileFormats.find((format) => {\n return PlatformTools.fileExist(this.baseFilePath + \".\" + format)\n })\n\n // Determine config file name\n const configFile = fileExtension\n ? this.baseFilePath\n : this.baseFilePath + \".\" + foundFileFormat\n\n // if .env file found then load all its variables into process.env using dotenv package\n if (foundFileFormat === \"env\") {\n PlatformTools.dotenv(configFile)\n } else if (PlatformTools.fileExist(this.baseDirectory + \"/.env\")) {\n PlatformTools.dotenv(this.baseDirectory + \"/.env\")\n }\n\n // try to find connection options from any of available sources of configuration\n if (\n PlatformTools.getEnvVariable(\"TYPEORM_CONNECTION\") ||\n PlatformTools.getEnvVariable(\"TYPEORM_URL\")\n ) {\n connectionOptions = await new ConnectionOptionsEnvReader().read()\n } else if (\n foundFileFormat === \"js\" ||\n foundFileFormat === \"mjs\" ||\n foundFileFormat === \"cjs\" ||\n foundFileFormat === \"ts\" ||\n foundFileFormat === \"mts\" ||\n foundFileFormat === \"cts\"\n ) {\n const [importOrRequireResult, moduleSystem] =\n await importOrRequireFile(configFile)\n const configModule = await importOrRequireResult\n\n if (\n moduleSystem === \"esm\" ||\n (configModule &&\n \"__esModule\" in configModule &&\n \"default\" in configModule)\n ) {\n connectionOptions = configModule.default\n } else {\n connectionOptions = configModule\n }\n } else if (foundFileFormat === \"json\") {\n connectionOptions = require(configFile)\n }\n\n // normalize and return connection options\n if (connectionOptions) {\n return this.normalizeConnectionOptions(connectionOptions)\n }\n\n return undefined\n }\n\n /**\n * Normalize connection options.\n */\n protected normalizeConnectionOptions(\n connectionOptions: DataSourceOptions | DataSourceOptions[],\n ): DataSourceOptions[] {\n if (!Array.isArray(connectionOptions))\n connectionOptions = [connectionOptions]\n\n connectionOptions.forEach((options) => {\n options.baseDirectory = this.baseDirectory\n if (options.entities) {\n const entities = (options.entities as any[]).map((entity) => {\n if (\n typeof entity === \"string\" &&\n entity.substr(0, 1) !== \"/\"\n )\n return this.baseDirectory + \"/\" + entity\n\n return entity\n })\n Object.assign(connectionOptions, { entities: entities })\n }\n if (options.subscribers) {\n const subscribers = (options.subscribers as any[]).map(\n (subscriber) => {\n if (\n typeof subscriber === \"string\" &&\n subscriber.substr(0, 1) !== \"/\"\n )\n return this.baseDirectory + \"/\" + subscriber\n\n return subscriber\n },\n )\n Object.assign(connectionOptions, { subscribers: subscribers })\n }\n if (options.migrations) {\n const migrations = (options.migrations as any[]).map(\n (migration) => {\n if (\n typeof migration === \"string\" &&\n migration.substr(0, 1) !== \"/\"\n )\n return this.baseDirectory + \"/\" + migration\n\n return migration\n },\n )\n Object.assign(connectionOptions, { migrations: migrations })\n }\n\n // make database path file in sqlite relative to package.json\n if (\n options.type === \"sqlite\" ||\n options.type === \"better-sqlite3\"\n ) {\n if (\n typeof options.database === \"string\" &&\n !isAbsolute(options.database) &&\n options.database.substr(0, 1) !== \"/\" && // unix absolute\n options.database.substr(1, 2) !== \":\\\\\" && // windows absolute\n options.database !== \":memory:\"\n ) {\n Object.assign(options, {\n database: this.baseDirectory + \"/\" + options.database,\n })\n }\n }\n })\n\n return connectionOptions\n }\n\n /**\n * Gets directory where configuration file should be located and configuration file name.\n */\n protected get baseFilePath(): string {\n return path.resolve(this.baseDirectory, this.baseConfigName)\n }\n\n /**\n * Gets directory where configuration file should be located.\n */\n protected get baseDirectory(): string {\n return this.options?.root ?? appRootPath.path\n }\n\n /**\n * Gets configuration file name.\n */\n protected get baseConfigName(): string {\n return this.options?.configName ?? \"ormconfig\"\n }\n}\n"],"sourceRoot":".."}
1
+ {"version":3,"sources":["../browser/src/connection/ConnectionOptionsReader.ts"],"names":[],"mappings":"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","file":"ConnectionOptionsReader.js","sourcesContent":["import appRootPath from \"app-root-path\"\nimport path from \"path\"\n\nimport { DataSourceOptions } from \"../data-source/DataSourceOptions\"\nimport { TypeORMError } from \"../error\"\nimport { PlatformTools } from \"../platform/PlatformTools\"\nimport { importOrRequireFile } from \"../util/ImportUtils\"\nimport { isAbsolute } from \"../util/PathUtils\"\nimport { ConnectionOptionsEnvReader } from \"./options-reader/ConnectionOptionsEnvReader\"\n\n/**\n * Reads connection options from the ormconfig.\n */\nexport class ConnectionOptionsReader {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(\n protected options?: {\n /**\n * Directory where ormconfig should be read from.\n * By default its your application root (where your app package.json is located).\n */\n root?: string\n\n /**\n * Filename of the ormconfig configuration. By default its equal to \"ormconfig\".\n */\n configName?: string\n },\n ) {}\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Returns all connection options read from the ormconfig.\n */\n async all(): Promise<DataSourceOptions[]> {\n const options = await this.load()\n if (!options)\n throw new TypeORMError(\n `No connection options were found in any orm configuration files.`,\n )\n\n return options\n }\n\n /**\n * Gets a connection with a given name read from ormconfig.\n * If connection with such name would not be found then it throw error.\n */\n async get(name: string): Promise<DataSourceOptions> {\n const allOptions = await this.all()\n const targetOptions = allOptions.find(\n (options) =>\n options.name === name || (name === \"default\" && !options.name),\n )\n if (!targetOptions)\n throw new TypeORMError(\n `Cannot find connection ${name} because its not defined in any orm configuration files.`,\n )\n\n return targetOptions\n }\n\n /**\n * Checks if there is a TypeORM configuration file.\n */\n async has(name: string): Promise<boolean> {\n const allOptions = await this.load()\n if (!allOptions) return false\n\n const targetOptions = allOptions.find(\n (options) =>\n options.name === name || (name === \"default\" && !options.name),\n )\n return !!targetOptions\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Loads all connection options from a configuration file.\n *\n * todo: get in count NODE_ENV somehow\n */\n protected async load(): Promise<DataSourceOptions[] | undefined> {\n let connectionOptions:\n | DataSourceOptions\n | DataSourceOptions[]\n | undefined = undefined\n\n const fileFormats = [\n \"env\",\n \"js\",\n \"mjs\",\n \"cjs\",\n \"ts\",\n \"mts\",\n \"cts\",\n \"json\",\n ]\n\n // Detect if baseFilePath contains file extension\n const possibleExtension = this.baseFilePath.substr(\n this.baseFilePath.lastIndexOf(\".\"),\n )\n const fileExtension = fileFormats.find(\n (extension) => `.${extension}` === possibleExtension,\n )\n\n // try to find any of following configuration formats\n const foundFileFormat =\n fileExtension ||\n fileFormats.find((format) => {\n return PlatformTools.fileExist(this.baseFilePath + \".\" + format)\n })\n\n // Determine config file name\n const configFile = fileExtension\n ? this.baseFilePath\n : this.baseFilePath + \".\" + foundFileFormat\n\n // if .env file found then load all its variables into process.env using dotenv package\n if (foundFileFormat === \"env\") {\n PlatformTools.dotenv(configFile)\n } else if (PlatformTools.fileExist(this.baseDirectory + \"/.env\")) {\n PlatformTools.dotenv(this.baseDirectory + \"/.env\")\n }\n\n // try to find connection options from any of available sources of configuration\n if (\n PlatformTools.getEnvVariable(\"TYPEORM_CONNECTION\") ||\n PlatformTools.getEnvVariable(\"TYPEORM_URL\")\n ) {\n connectionOptions = new ConnectionOptionsEnvReader().read()\n } else if (\n foundFileFormat === \"js\" ||\n foundFileFormat === \"mjs\" ||\n foundFileFormat === \"cjs\" ||\n foundFileFormat === \"ts\" ||\n foundFileFormat === \"mts\" ||\n foundFileFormat === \"cts\"\n ) {\n const [importOrRequireResult, moduleSystem] =\n await importOrRequireFile(configFile)\n const configModule = await importOrRequireResult\n\n if (\n moduleSystem === \"esm\" ||\n (configModule &&\n \"__esModule\" in configModule &&\n \"default\" in configModule)\n ) {\n connectionOptions = configModule.default\n } else {\n connectionOptions = configModule\n }\n } else if (foundFileFormat === \"json\") {\n connectionOptions = require(configFile)\n }\n\n // normalize and return connection options\n if (connectionOptions) {\n return this.normalizeConnectionOptions(connectionOptions)\n }\n\n return undefined\n }\n\n /**\n * Normalize connection options.\n */\n protected normalizeConnectionOptions(\n connectionOptions: DataSourceOptions | DataSourceOptions[],\n ): DataSourceOptions[] {\n if (!Array.isArray(connectionOptions))\n connectionOptions = [connectionOptions]\n\n connectionOptions.forEach((options) => {\n options.baseDirectory = this.baseDirectory\n if (options.entities) {\n const entities = (options.entities as any[]).map((entity) => {\n if (\n typeof entity === \"string\" &&\n entity.substr(0, 1) !== \"/\"\n )\n return this.baseDirectory + \"/\" + entity\n\n return entity\n })\n Object.assign(connectionOptions, { entities: entities })\n }\n if (options.subscribers) {\n const subscribers = (options.subscribers as any[]).map(\n (subscriber) => {\n if (\n typeof subscriber === \"string\" &&\n subscriber.substr(0, 1) !== \"/\"\n )\n return this.baseDirectory + \"/\" + subscriber\n\n return subscriber\n },\n )\n Object.assign(connectionOptions, { subscribers: subscribers })\n }\n if (options.migrations) {\n const migrations = (options.migrations as any[]).map(\n (migration) => {\n if (\n typeof migration === \"string\" &&\n migration.substr(0, 1) !== \"/\"\n )\n return this.baseDirectory + \"/\" + migration\n\n return migration\n },\n )\n Object.assign(connectionOptions, { migrations: migrations })\n }\n\n // make database path file in sqlite relative to package.json\n if (\n options.type === \"sqlite\" ||\n options.type === \"better-sqlite3\"\n ) {\n if (\n typeof options.database === \"string\" &&\n !isAbsolute(options.database) &&\n options.database.substr(0, 1) !== \"/\" && // unix absolute\n options.database.substr(1, 2) !== \":\\\\\" && // windows absolute\n options.database !== \":memory:\"\n ) {\n Object.assign(options, {\n database: this.baseDirectory + \"/\" + options.database,\n })\n }\n }\n })\n\n return connectionOptions\n }\n\n /**\n * Gets directory where configuration file should be located and configuration file name.\n */\n protected get baseFilePath(): string {\n return path.resolve(this.baseDirectory, this.baseConfigName)\n }\n\n /**\n * Gets directory where configuration file should be located.\n */\n protected get baseDirectory(): string {\n return this.options?.root ?? appRootPath.path\n }\n\n /**\n * Gets configuration file name.\n */\n protected get baseConfigName(): string {\n return this.options?.configName ?? \"ormconfig\"\n }\n}\n"],"sourceRoot":".."}
@@ -10,7 +10,7 @@ export declare class ConnectionOptionsEnvReader {
10
10
  /**
11
11
  * Reads connection options from environment variables.
12
12
  */
13
- read(): Promise<DataSourceOptions[]>;
13
+ read(): DataSourceOptions[];
14
14
  /**
15
15
  * Transforms logging string into real logging value connection requires.
16
16
  */
@@ -14,7 +14,7 @@ export class ConnectionOptionsEnvReader {
14
14
  /**
15
15
  * Reads connection options from environment variables.
16
16
  */
17
- async read() {
17
+ read() {
18
18
  return [
19
19
  {
20
20
  type: PlatformTools.getEnvVariable("TYPEORM_CONNECTION") ||
@@ -1 +1 @@
1
- {"version":3,"sources":["../browser/src/connection/options-reader/ConnectionOptionsEnvReader.ts"],"names":[],"mappings":"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","file":"ConnectionOptionsEnvReader.js","sourcesContent":["import { DataSourceOptions } from \"../../data-source/DataSourceOptions\"\nimport { PlatformTools } from \"../../platform/PlatformTools\"\nimport { OrmUtils } from \"../../util/OrmUtils\"\n\n/**\n * Reads connection options from environment variables.\n * Environment variables can have only a single connection.\n * Its strongly required to define TYPEORM_CONNECTION env variable.\n *\n * @deprecated\n */\nexport class ConnectionOptionsEnvReader {\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Reads connection options from environment variables.\n */\n async read(): Promise<DataSourceOptions[]> {\n return [\n {\n type:\n PlatformTools.getEnvVariable(\"TYPEORM_CONNECTION\") ||\n (PlatformTools.getEnvVariable(\"TYPEORM_URL\")\n ? PlatformTools.getEnvVariable(\"TYPEORM_URL\").split(\n \"://\",\n )[0]\n : undefined),\n url: PlatformTools.getEnvVariable(\"TYPEORM_URL\"),\n host: PlatformTools.getEnvVariable(\"TYPEORM_HOST\"),\n port: this.stringToNumber(\n PlatformTools.getEnvVariable(\"TYPEORM_PORT\"),\n ),\n username: PlatformTools.getEnvVariable(\"TYPEORM_USERNAME\"),\n password: PlatformTools.getEnvVariable(\"TYPEORM_PASSWORD\"),\n database: PlatformTools.getEnvVariable(\"TYPEORM_DATABASE\"),\n sid: PlatformTools.getEnvVariable(\"TYPEORM_SID\"),\n schema: PlatformTools.getEnvVariable(\"TYPEORM_SCHEMA\"),\n extra: PlatformTools.getEnvVariable(\"TYPEORM_DRIVER_EXTRA\")\n ? JSON.parse(\n PlatformTools.getEnvVariable(\"TYPEORM_DRIVER_EXTRA\"),\n )\n : undefined,\n synchronize: OrmUtils.toBoolean(\n PlatformTools.getEnvVariable(\"TYPEORM_SYNCHRONIZE\"),\n ),\n dropSchema: OrmUtils.toBoolean(\n PlatformTools.getEnvVariable(\"TYPEORM_DROP_SCHEMA\"),\n ),\n migrationsRun: OrmUtils.toBoolean(\n PlatformTools.getEnvVariable(\"TYPEORM_MIGRATIONS_RUN\"),\n ),\n entities: this.stringToArray(\n PlatformTools.getEnvVariable(\"TYPEORM_ENTITIES\"),\n ),\n migrations: this.stringToArray(\n PlatformTools.getEnvVariable(\"TYPEORM_MIGRATIONS\"),\n ),\n migrationsTableName: PlatformTools.getEnvVariable(\n \"TYPEORM_MIGRATIONS_TABLE_NAME\",\n ),\n metadataTableName: PlatformTools.getEnvVariable(\n \"TYPEORM_METADATA_TABLE_NAME\",\n ),\n subscribers: this.stringToArray(\n PlatformTools.getEnvVariable(\"TYPEORM_SUBSCRIBERS\"),\n ),\n logging: this.transformLogging(\n PlatformTools.getEnvVariable(\"TYPEORM_LOGGING\"),\n ),\n logger: PlatformTools.getEnvVariable(\"TYPEORM_LOGGER\"),\n entityPrefix: PlatformTools.getEnvVariable(\n \"TYPEORM_ENTITY_PREFIX\",\n ),\n maxQueryExecutionTime: PlatformTools.getEnvVariable(\n \"TYPEORM_MAX_QUERY_EXECUTION_TIME\",\n ),\n debug: PlatformTools.getEnvVariable(\"TYPEORM_DEBUG\"),\n cache: this.transformCaching(),\n uuidExtension: PlatformTools.getEnvVariable(\n \"TYPEORM_UUID_EXTENSION\",\n ),\n },\n ]\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Transforms logging string into real logging value connection requires.\n */\n protected transformLogging(logging: string): any {\n if (logging === \"true\" || logging === \"TRUE\" || logging === \"1\")\n return true\n if (logging === \"all\") return \"all\"\n\n return this.stringToArray(logging)\n }\n\n /**\n * Transforms caching option into real caching value option requires.\n */\n protected transformCaching(): boolean | object | undefined {\n const caching = PlatformTools.getEnvVariable(\"TYPEORM_CACHE\")\n if (caching === \"true\" || caching === \"TRUE\" || caching === \"1\")\n return true\n if (caching === \"false\" || caching === \"FALSE\" || caching === \"0\")\n return false\n if (\n caching === \"redis\" ||\n caching === \"ioredis\" ||\n caching === \"database\"\n )\n return {\n type: caching,\n options: PlatformTools.getEnvVariable(\"TYPEORM_CACHE_OPTIONS\")\n ? JSON.parse(\n PlatformTools.getEnvVariable(\"TYPEORM_CACHE_OPTIONS\"),\n )\n : undefined,\n alwaysEnabled: PlatformTools.getEnvVariable(\n \"TYPEORM_CACHE_ALWAYS_ENABLED\",\n ),\n duration: parseInt(\n PlatformTools.getEnvVariable(\"TYPEORM_CACHE_DURATION\"),\n ),\n }\n\n return undefined\n }\n\n /**\n * Converts a string which contains multiple elements split by comma into a string array of strings.\n */\n protected stringToArray(variable?: string) {\n if (!variable) return []\n return variable.split(\",\").map((str) => str.trim())\n }\n\n /**\n * Converts a string which contains a number into a javascript number\n */\n private stringToNumber(value: any): number | undefined {\n if (!value) {\n return undefined\n }\n\n return parseInt(value)\n }\n}\n"],"sourceRoot":"../.."}
1
+ {"version":3,"sources":["../browser/src/connection/options-reader/ConnectionOptionsEnvReader.ts"],"names":[],"mappings":"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","file":"ConnectionOptionsEnvReader.js","sourcesContent":["import { DataSourceOptions } from \"../../data-source/DataSourceOptions\"\nimport { PlatformTools } from \"../../platform/PlatformTools\"\nimport { OrmUtils } from \"../../util/OrmUtils\"\n\n/**\n * Reads connection options from environment variables.\n * Environment variables can have only a single connection.\n * Its strongly required to define TYPEORM_CONNECTION env variable.\n *\n * @deprecated\n */\nexport class ConnectionOptionsEnvReader {\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Reads connection options from environment variables.\n */\n read(): DataSourceOptions[] {\n return [\n {\n type:\n PlatformTools.getEnvVariable(\"TYPEORM_CONNECTION\") ||\n (PlatformTools.getEnvVariable(\"TYPEORM_URL\")\n ? PlatformTools.getEnvVariable(\"TYPEORM_URL\").split(\n \"://\",\n )[0]\n : undefined),\n url: PlatformTools.getEnvVariable(\"TYPEORM_URL\"),\n host: PlatformTools.getEnvVariable(\"TYPEORM_HOST\"),\n port: this.stringToNumber(\n PlatformTools.getEnvVariable(\"TYPEORM_PORT\"),\n ),\n username: PlatformTools.getEnvVariable(\"TYPEORM_USERNAME\"),\n password: PlatformTools.getEnvVariable(\"TYPEORM_PASSWORD\"),\n database: PlatformTools.getEnvVariable(\"TYPEORM_DATABASE\"),\n sid: PlatformTools.getEnvVariable(\"TYPEORM_SID\"),\n schema: PlatformTools.getEnvVariable(\"TYPEORM_SCHEMA\"),\n extra: PlatformTools.getEnvVariable(\"TYPEORM_DRIVER_EXTRA\")\n ? JSON.parse(\n PlatformTools.getEnvVariable(\"TYPEORM_DRIVER_EXTRA\"),\n )\n : undefined,\n synchronize: OrmUtils.toBoolean(\n PlatformTools.getEnvVariable(\"TYPEORM_SYNCHRONIZE\"),\n ),\n dropSchema: OrmUtils.toBoolean(\n PlatformTools.getEnvVariable(\"TYPEORM_DROP_SCHEMA\"),\n ),\n migrationsRun: OrmUtils.toBoolean(\n PlatformTools.getEnvVariable(\"TYPEORM_MIGRATIONS_RUN\"),\n ),\n entities: this.stringToArray(\n PlatformTools.getEnvVariable(\"TYPEORM_ENTITIES\"),\n ),\n migrations: this.stringToArray(\n PlatformTools.getEnvVariable(\"TYPEORM_MIGRATIONS\"),\n ),\n migrationsTableName: PlatformTools.getEnvVariable(\n \"TYPEORM_MIGRATIONS_TABLE_NAME\",\n ),\n metadataTableName: PlatformTools.getEnvVariable(\n \"TYPEORM_METADATA_TABLE_NAME\",\n ),\n subscribers: this.stringToArray(\n PlatformTools.getEnvVariable(\"TYPEORM_SUBSCRIBERS\"),\n ),\n logging: this.transformLogging(\n PlatformTools.getEnvVariable(\"TYPEORM_LOGGING\"),\n ),\n logger: PlatformTools.getEnvVariable(\"TYPEORM_LOGGER\"),\n entityPrefix: PlatformTools.getEnvVariable(\n \"TYPEORM_ENTITY_PREFIX\",\n ),\n maxQueryExecutionTime: PlatformTools.getEnvVariable(\n \"TYPEORM_MAX_QUERY_EXECUTION_TIME\",\n ),\n debug: PlatformTools.getEnvVariable(\"TYPEORM_DEBUG\"),\n cache: this.transformCaching(),\n uuidExtension: PlatformTools.getEnvVariable(\n \"TYPEORM_UUID_EXTENSION\",\n ),\n },\n ]\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Transforms logging string into real logging value connection requires.\n */\n protected transformLogging(logging: string): any {\n if (logging === \"true\" || logging === \"TRUE\" || logging === \"1\")\n return true\n if (logging === \"all\") return \"all\"\n\n return this.stringToArray(logging)\n }\n\n /**\n * Transforms caching option into real caching value option requires.\n */\n protected transformCaching(): boolean | object | undefined {\n const caching = PlatformTools.getEnvVariable(\"TYPEORM_CACHE\")\n if (caching === \"true\" || caching === \"TRUE\" || caching === \"1\")\n return true\n if (caching === \"false\" || caching === \"FALSE\" || caching === \"0\")\n return false\n if (\n caching === \"redis\" ||\n caching === \"ioredis\" ||\n caching === \"database\"\n )\n return {\n type: caching,\n options: PlatformTools.getEnvVariable(\"TYPEORM_CACHE_OPTIONS\")\n ? JSON.parse(\n PlatformTools.getEnvVariable(\"TYPEORM_CACHE_OPTIONS\"),\n )\n : undefined,\n alwaysEnabled: PlatformTools.getEnvVariable(\n \"TYPEORM_CACHE_ALWAYS_ENABLED\",\n ),\n duration: parseInt(\n PlatformTools.getEnvVariable(\"TYPEORM_CACHE_DURATION\"),\n ),\n }\n\n return undefined\n }\n\n /**\n * Converts a string which contains multiple elements split by comma into a string array of strings.\n */\n protected stringToArray(variable?: string) {\n if (!variable) return []\n return variable.split(\",\").map((str) => str.trim())\n }\n\n /**\n * Converts a string which contains a number into a javascript number\n */\n private stringToNumber(value: any): number | undefined {\n if (!value) {\n return undefined\n }\n\n return parseInt(value)\n }\n}\n"],"sourceRoot":"../.."}
@@ -202,7 +202,7 @@ export declare class AuroraMysqlDriver implements Driver {
202
202
  /**
203
203
  * Creates generated map of values generated or returned by database after INSERT query.
204
204
  */
205
- createGeneratedMap(metadata: EntityMetadata, insertResult: any, entityIndex: number): any;
205
+ createGeneratedMap(metadata: EntityMetadata, insertResult: any, entityIndex: number): ObjectLiteral | undefined;
206
206
  /**
207
207
  * Differentiate columns of this table and columns from the given column metadatas columns
208
208
  * and returns only changed.
@@ -764,7 +764,7 @@ export class AuroraMysqlQueryRunner extends BaseQueryRunner {
764
764
  * Drops the columns in the table.
765
765
  */
766
766
  async dropColumns(tableOrName, columns) {
767
- for (const column of columns) {
767
+ for (const column of [...columns]) {
768
768
  await this.dropColumn(tableOrName, column);
769
769
  }
770
770
  }
@@ -1177,7 +1177,7 @@ export class AuroraMysqlQueryRunner extends BaseQueryRunner {
1177
1177
  this.query(foreignKeysSql),
1178
1178
  ]);
1179
1179
  // create tables for loaded tables
1180
- return Promise.all(dbTables.map(async (dbTable) => {
1180
+ return dbTables.map((dbTable) => {
1181
1181
  const table = new Table();
1182
1182
  const dbCollation = dbCollations.find((coll) => coll["SCHEMA_NAME"] === dbTable["TABLE_SCHEMA"]);
1183
1183
  const defaultCollation = dbCollation["COLLATION"];
@@ -1191,12 +1191,10 @@ export class AuroraMysqlQueryRunner extends BaseQueryRunner {
1191
1191
  // create columns from the loaded columns
1192
1192
  table.columns = dbColumns
1193
1193
  .filter((dbColumn) => dbColumn["TABLE_NAME"] === dbTable["TABLE_NAME"] &&
1194
- dbColumn["TABLE_SCHEMA"] ===
1195
- dbTable["TABLE_SCHEMA"])
1194
+ dbColumn["TABLE_SCHEMA"] === dbTable["TABLE_SCHEMA"])
1196
1195
  .map((dbColumn) => {
1197
1196
  const columnUniqueIndices = dbIndices.filter((dbIndex) => {
1198
- return (dbIndex["TABLE_NAME"] ===
1199
- dbTable["TABLE_NAME"] &&
1197
+ return (dbIndex["TABLE_NAME"] === dbTable["TABLE_NAME"] &&
1200
1198
  dbIndex["TABLE_SCHEMA"] ===
1201
1199
  dbTable["TABLE_SCHEMA"] &&
1202
1200
  dbIndex["COLUMN_NAME"] ===
@@ -1209,8 +1207,7 @@ export class AuroraMysqlQueryRunner extends BaseQueryRunner {
1209
1207
  tableMetadata &&
1210
1208
  tableMetadata.indices.some((index) => {
1211
1209
  return columnUniqueIndices.some((uniqueIndex) => {
1212
- return (index.name ===
1213
- uniqueIndex["INDEX_NAME"] &&
1210
+ return (index.name === uniqueIndex["INDEX_NAME"] &&
1214
1211
  index.synchronize === false);
1215
1212
  });
1216
1213
  });
@@ -1242,8 +1239,7 @@ export class AuroraMysqlQueryRunner extends BaseQueryRunner {
1242
1239
  }
1243
1240
  else {
1244
1241
  tableColumn.default =
1245
- dbColumn["COLUMN_DEFAULT"] ===
1246
- "CURRENT_TIMESTAMP"
1242
+ dbColumn["COLUMN_DEFAULT"] === "CURRENT_TIMESTAMP"
1247
1243
  ? dbColumn["COLUMN_DEFAULT"]
1248
1244
  : `'${dbColumn["COLUMN_DEFAULT"]}'`;
1249
1245
  }
@@ -1262,8 +1258,7 @@ export class AuroraMysqlQueryRunner extends BaseQueryRunner {
1262
1258
  columnUniqueIndices.length > 0 &&
1263
1259
  !hasIgnoredIndex &&
1264
1260
  !isConstraintComposite;
1265
- tableColumn.isNullable =
1266
- dbColumn["IS_NULLABLE"] === "YES";
1261
+ tableColumn.isNullable = dbColumn["IS_NULLABLE"] === "YES";
1267
1262
  tableColumn.isPrimary = dbPrimaryKeys.some((dbPrimaryKey) => {
1268
1263
  return (dbPrimaryKey["TABLE_NAME"] ===
1269
1264
  dbColumn["TABLE_NAME"] &&
@@ -1285,8 +1280,7 @@ export class AuroraMysqlQueryRunner extends BaseQueryRunner {
1285
1280
  : dbColumn["COLUMN_COMMENT"];
1286
1281
  if (dbColumn["CHARACTER_SET_NAME"])
1287
1282
  tableColumn.charset =
1288
- dbColumn["CHARACTER_SET_NAME"] ===
1289
- defaultCharset
1283
+ dbColumn["CHARACTER_SET_NAME"] === defaultCharset
1290
1284
  ? undefined
1291
1285
  : dbColumn["CHARACTER_SET_NAME"];
1292
1286
  if (dbColumn["COLLATION_NAME"])
@@ -1336,10 +1330,8 @@ export class AuroraMysqlQueryRunner extends BaseQueryRunner {
1336
1330
  });
1337
1331
  // find foreign key constraints of table, group them by constraint name and build TableForeignKey.
1338
1332
  const tableForeignKeyConstraints = OrmUtils.uniq(dbForeignKeys.filter((dbForeignKey) => {
1339
- return (dbForeignKey["TABLE_NAME"] ===
1340
- dbTable["TABLE_NAME"] &&
1341
- dbForeignKey["TABLE_SCHEMA"] ===
1342
- dbTable["TABLE_SCHEMA"]);
1333
+ return (dbForeignKey["TABLE_NAME"] === dbTable["TABLE_NAME"] &&
1334
+ dbForeignKey["TABLE_SCHEMA"] === dbTable["TABLE_SCHEMA"]);
1343
1335
  }), (dbForeignKey) => dbForeignKey["CONSTRAINT_NAME"]);
1344
1336
  table.foreignKeys = tableForeignKeyConstraints.map((dbForeignKey) => {
1345
1337
  const foreignKeys = dbForeignKeys.filter((dbFk) => dbFk["CONSTRAINT_NAME"] ===
@@ -1367,8 +1359,7 @@ export class AuroraMysqlQueryRunner extends BaseQueryRunner {
1367
1359
  }), (dbIndex) => dbIndex["INDEX_NAME"]);
1368
1360
  table.indices = tableIndexConstraints.map((constraint) => {
1369
1361
  const indices = dbIndices.filter((index) => {
1370
- return (index["TABLE_SCHEMA"] ===
1371
- constraint["TABLE_SCHEMA"] &&
1362
+ return (index["TABLE_SCHEMA"] === constraint["TABLE_SCHEMA"] &&
1372
1363
  index["TABLE_NAME"] === constraint["TABLE_NAME"] &&
1373
1364
  index["INDEX_NAME"] === constraint["INDEX_NAME"]);
1374
1365
  });
@@ -1383,7 +1374,7 @@ export class AuroraMysqlQueryRunner extends BaseQueryRunner {
1383
1374
  });
1384
1375
  });
1385
1376
  return table;
1386
- }));
1377
+ });
1387
1378
  }
1388
1379
  /**
1389
1380
  * Builds create table sql