typeorm 0.2.41-dev.c895680 → 0.2.42-dev.1446e02

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 (372) hide show
  1. package/README.md +38 -0
  2. package/browser/cache/DbQueryResultCache.js +12 -3
  3. package/browser/cache/DbQueryResultCache.js.map +1 -1
  4. package/browser/cache/RedisQueryResultCache.js +40 -35
  5. package/browser/cache/RedisQueryResultCache.js.map +1 -1
  6. package/browser/common/RelationType.d.ts +14 -0
  7. package/browser/common/RelationType.js +3 -0
  8. package/browser/common/RelationType.js.map +1 -0
  9. package/browser/connection/BaseConnectionOptions.d.ts +5 -0
  10. package/browser/connection/BaseConnectionOptions.js.map +1 -1
  11. package/browser/connection/Connection.d.ts +7 -3
  12. package/browser/connection/Connection.js +47 -31
  13. package/browser/connection/Connection.js.map +1 -1
  14. package/browser/connection/ConnectionMetadataBuilder.d.ts +3 -3
  15. package/browser/connection/ConnectionMetadataBuilder.js +54 -22
  16. package/browser/connection/ConnectionMetadataBuilder.js.map +1 -1
  17. package/browser/connection/ConnectionOptionsReader.js +33 -28
  18. package/browser/connection/ConnectionOptionsReader.js.map +1 -1
  19. package/browser/connection/options-reader/ConnectionOptionsEnvReader.js +1 -0
  20. package/browser/connection/options-reader/ConnectionOptionsEnvReader.js.map +1 -1
  21. package/browser/decorator/Unique.d.ts +5 -4
  22. package/browser/decorator/Unique.js +7 -3
  23. package/browser/decorator/Unique.js.map +1 -1
  24. package/browser/decorator/columns/PrimaryGeneratedColumn.d.ts +2 -1
  25. package/browser/decorator/columns/PrimaryGeneratedColumn.js.map +1 -1
  26. package/browser/decorator/options/ColumnOptions.d.ts +4 -0
  27. package/browser/decorator/options/ColumnOptions.js.map +1 -1
  28. package/browser/decorator/options/PrimaryGeneratedColumnIdentityOptions.d.ts +22 -0
  29. package/browser/decorator/options/PrimaryGeneratedColumnIdentityOptions.js +3 -0
  30. package/browser/decorator/options/PrimaryGeneratedColumnIdentityOptions.js.map +1 -0
  31. package/browser/decorator/options/RelationOptions.d.ts +1 -1
  32. package/browser/decorator/options/RelationOptions.js.map +1 -1
  33. package/browser/decorator/options/UniqueOptions.d.ts +10 -0
  34. package/browser/decorator/options/UniqueOptions.js +3 -0
  35. package/browser/decorator/options/UniqueOptions.js.map +1 -0
  36. package/browser/driver/aurora-data-api/AuroraDataApiQueryRunner.js +34 -40
  37. package/browser/driver/aurora-data-api/AuroraDataApiQueryRunner.js.map +1 -1
  38. package/browser/driver/better-sqlite3/BetterSqlite3Driver.js +7 -5
  39. package/browser/driver/better-sqlite3/BetterSqlite3Driver.js.map +1 -1
  40. package/browser/driver/cockroachdb/CockroachQueryRunner.js +25 -31
  41. package/browser/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  42. package/browser/driver/mongodb/MongoQueryRunner.d.ts +2 -0
  43. package/browser/driver/mongodb/MongoQueryRunner.js +3 -0
  44. package/browser/driver/mongodb/MongoQueryRunner.js.map +1 -1
  45. package/browser/driver/mysql/MysqlQueryRunner.js +38 -40
  46. package/browser/driver/mysql/MysqlQueryRunner.js.map +1 -1
  47. package/browser/driver/oracle/OracleDriver.js +1 -1
  48. package/browser/driver/oracle/OracleDriver.js.map +1 -1
  49. package/browser/driver/oracle/OracleQueryRunner.js +14 -25
  50. package/browser/driver/oracle/OracleQueryRunner.js.map +1 -1
  51. package/browser/driver/postgres/PostgresDriver.d.ts +1 -0
  52. package/browser/driver/postgres/PostgresDriver.js +16 -7
  53. package/browser/driver/postgres/PostgresDriver.js.map +1 -1
  54. package/browser/driver/postgres/PostgresQueryRunner.d.ts +5 -0
  55. package/browser/driver/postgres/PostgresQueryRunner.js +327 -139
  56. package/browser/driver/postgres/PostgresQueryRunner.js.map +1 -1
  57. package/browser/driver/sap/SapQueryRunner.js +37 -43
  58. package/browser/driver/sap/SapQueryRunner.js.map +1 -1
  59. package/browser/driver/sqlite/SqliteDriver.js +11 -10
  60. package/browser/driver/sqlite/SqliteDriver.js.map +1 -1
  61. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +9 -15
  62. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  63. package/browser/driver/sqlserver/SqlServerQueryRunner.js +32 -34
  64. package/browser/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  65. package/browser/driver/types/MetadataTableType.d.ts +5 -0
  66. package/browser/driver/types/MetadataTableType.js +8 -0
  67. package/browser/driver/types/MetadataTableType.js.map +1 -0
  68. package/browser/entity-manager/EntityManager.d.ts +2 -2
  69. package/browser/entity-manager/EntityManager.js +1 -1
  70. package/browser/entity-manager/EntityManager.js.map +1 -1
  71. package/browser/entity-manager/MongoEntityManager.js +2 -1
  72. package/browser/entity-manager/MongoEntityManager.js.map +1 -1
  73. package/browser/entity-schema/EntitySchemaOptions.d.ts +6 -0
  74. package/browser/entity-schema/EntitySchemaOptions.js.map +1 -1
  75. package/browser/entity-schema/EntitySchemaRelationOptions.d.ts +1 -1
  76. package/browser/entity-schema/EntitySchemaRelationOptions.js.map +1 -1
  77. package/browser/entity-schema/EntitySchemaTransformer.js +3 -1
  78. package/browser/entity-schema/EntitySchemaTransformer.js.map +1 -1
  79. package/browser/entity-schema/EntitySchemaUniqueOptions.d.ts +5 -0
  80. package/browser/entity-schema/EntitySchemaUniqueOptions.js.map +1 -1
  81. package/browser/find-options/FindOneOptions.d.ts +6 -0
  82. package/browser/find-options/FindOneOptions.js.map +1 -1
  83. package/browser/find-options/FindOptionsUtils.js +4 -0
  84. package/browser/find-options/FindOptionsUtils.js.map +1 -1
  85. package/browser/find-options/operator/Like.d.ts +1 -1
  86. package/browser/find-options/operator/Like.js +1 -1
  87. package/browser/find-options/operator/Like.js.map +1 -1
  88. package/browser/globals.js +34 -7
  89. package/browser/globals.js.map +1 -1
  90. package/browser/index.d.ts +10 -0
  91. package/browser/index.js +10 -0
  92. package/browser/index.js.map +1 -1
  93. package/browser/metadata/ColumnMetadata.d.ts +4 -0
  94. package/browser/metadata/ColumnMetadata.js +2 -0
  95. package/browser/metadata/ColumnMetadata.js.map +1 -1
  96. package/browser/metadata/RelationMetadata.d.ts +1 -1
  97. package/browser/metadata/RelationMetadata.js.map +1 -1
  98. package/browser/metadata/UniqueMetadata.d.ts +5 -0
  99. package/browser/metadata/UniqueMetadata.js +1 -0
  100. package/browser/metadata/UniqueMetadata.js.map +1 -1
  101. package/browser/metadata-args/UniqueMetadataArgs.d.ts +5 -0
  102. package/browser/metadata-args/UniqueMetadataArgs.js.map +1 -1
  103. package/browser/metadata-builder/EntityMetadataValidator.js +1 -0
  104. package/browser/metadata-builder/EntityMetadataValidator.js.map +1 -1
  105. package/browser/migration/MigrationExecutor.js +56 -49
  106. package/browser/migration/MigrationExecutor.js.map +1 -1
  107. package/browser/persistence/SubjectExecutor.js +2 -2
  108. package/browser/persistence/SubjectExecutor.js.map +1 -1
  109. package/browser/persistence/subject-builder/OneToManySubjectBuilder.js +3 -0
  110. package/browser/persistence/subject-builder/OneToManySubjectBuilder.js.map +1 -1
  111. package/browser/query-builder/DeleteQueryBuilder.d.ts +4 -2
  112. package/browser/query-builder/DeleteQueryBuilder.js +4 -2
  113. package/browser/query-builder/DeleteQueryBuilder.js.map +1 -1
  114. package/browser/query-builder/InsertQueryBuilder.d.ts +1 -1
  115. package/browser/query-builder/InsertQueryBuilder.js +1 -1
  116. package/browser/query-builder/InsertQueryBuilder.js.map +1 -1
  117. package/browser/query-builder/NotBrackets.d.ts +7 -0
  118. package/browser/query-builder/NotBrackets.js +16 -0
  119. package/browser/query-builder/NotBrackets.js.map +1 -0
  120. package/browser/query-builder/QueryBuilder.d.ts +3 -2
  121. package/browser/query-builder/QueryBuilder.js +2 -1
  122. package/browser/query-builder/QueryBuilder.js.map +1 -1
  123. package/browser/query-builder/RelationLoader.js +11 -6
  124. package/browser/query-builder/RelationLoader.js.map +1 -1
  125. package/browser/query-builder/RelationQueryBuilder.d.ts +1 -1
  126. package/browser/query-builder/RelationQueryBuilder.js +1 -1
  127. package/browser/query-builder/RelationQueryBuilder.js.map +1 -1
  128. package/browser/query-builder/ReturningResultsEntityUpdator.d.ts +4 -0
  129. package/browser/query-builder/ReturningResultsEntityUpdator.js +11 -2
  130. package/browser/query-builder/ReturningResultsEntityUpdator.js.map +1 -1
  131. package/browser/query-builder/SelectQueryBuilder.d.ts +1 -1
  132. package/browser/query-builder/SelectQueryBuilder.js +5 -5
  133. package/browser/query-builder/SelectQueryBuilder.js.map +1 -1
  134. package/browser/query-builder/SoftDeleteQueryBuilder.d.ts +1 -1
  135. package/browser/query-builder/SoftDeleteQueryBuilder.js +2 -2
  136. package/browser/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
  137. package/browser/query-builder/UpdateQueryBuilder.d.ts +4 -2
  138. package/browser/query-builder/UpdateQueryBuilder.js +11 -6
  139. package/browser/query-builder/UpdateQueryBuilder.js.map +1 -1
  140. package/browser/query-builder/WhereExpressionBuilder.d.ts +3 -1
  141. package/browser/query-builder/WhereExpressionBuilder.js.map +1 -1
  142. package/browser/query-runner/BaseQueryRunner.d.ts +23 -0
  143. package/browser/query-runner/BaseQueryRunner.js +38 -1
  144. package/browser/query-runner/BaseQueryRunner.js.map +1 -1
  145. package/browser/query-runner/QueryRunner.d.ts +5 -0
  146. package/browser/query-runner/QueryRunner.js.map +1 -1
  147. package/browser/repository/AbstractRepository.d.ts +2 -2
  148. package/browser/repository/AbstractRepository.js +2 -2
  149. package/browser/repository/AbstractRepository.js.map +1 -1
  150. package/browser/repository/BaseEntity.d.ts +1 -1
  151. package/browser/repository/BaseEntity.js +1 -1
  152. package/browser/repository/BaseEntity.js.map +1 -1
  153. package/browser/repository/Repository.d.ts +1 -1
  154. package/browser/repository/Repository.js +1 -1
  155. package/browser/repository/Repository.js.map +1 -1
  156. package/browser/repository/TreeRepository.js +1 -1
  157. package/browser/repository/TreeRepository.js.map +1 -1
  158. package/browser/schema-builder/RdbmsSchemaBuilder.d.ts +5 -1
  159. package/browser/schema-builder/RdbmsSchemaBuilder.js +59 -50
  160. package/browser/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
  161. package/browser/schema-builder/options/TableColumnOptions.d.ts +4 -0
  162. package/browser/schema-builder/options/TableColumnOptions.js.map +1 -1
  163. package/browser/schema-builder/options/TableUniqueOptions.d.ts +5 -0
  164. package/browser/schema-builder/options/TableUniqueOptions.js.map +1 -1
  165. package/browser/schema-builder/table/TableColumn.d.ts +4 -0
  166. package/browser/schema-builder/table/TableColumn.js +2 -0
  167. package/browser/schema-builder/table/TableColumn.js.map +1 -1
  168. package/browser/schema-builder/table/TableUnique.d.ts +5 -0
  169. package/browser/schema-builder/table/TableUnique.js +5 -2
  170. package/browser/schema-builder/table/TableUnique.js.map +1 -1
  171. package/browser/schema-builder/util/TableUtils.js +1 -0
  172. package/browser/schema-builder/util/TableUtils.js.map +1 -1
  173. package/browser/util/DirectoryExportedClassesLoader.d.ts +1 -1
  174. package/browser/util/DirectoryExportedClassesLoader.js +55 -31
  175. package/browser/util/DirectoryExportedClassesLoader.js.map +1 -1
  176. package/browser/util/ImportUtils.d.ts +1 -0
  177. package/browser/util/ImportUtils.js +90 -0
  178. package/browser/util/ImportUtils.js.map +1 -0
  179. package/cache/DbQueryResultCache.js +12 -3
  180. package/cache/DbQueryResultCache.js.map +1 -1
  181. package/cache/RedisQueryResultCache.js +39 -34
  182. package/cache/RedisQueryResultCache.js.map +1 -1
  183. package/commands/CommandUtils.d.ts +4 -0
  184. package/commands/CommandUtils.js +10 -0
  185. package/commands/CommandUtils.js.map +1 -1
  186. package/commands/InitCommand.d.ts +9 -7
  187. package/commands/InitCommand.js +72 -43
  188. package/commands/InitCommand.js.map +1 -1
  189. package/commands/MigrationCreateCommand.d.ts +2 -0
  190. package/commands/MigrationCreateCommand.js +7 -1
  191. package/commands/MigrationCreateCommand.js.map +1 -1
  192. package/commands/MigrationGenerateCommand.d.ts +2 -0
  193. package/commands/MigrationGenerateCommand.js +7 -1
  194. package/commands/MigrationGenerateCommand.js.map +1 -1
  195. package/commands/QueryCommand.d.ts +1 -1
  196. package/commands/QueryCommand.js +1 -1
  197. package/commands/QueryCommand.js.map +1 -1
  198. package/common/RelationType.d.ts +14 -0
  199. package/common/RelationType.js +4 -0
  200. package/common/RelationType.js.map +1 -0
  201. package/connection/BaseConnectionOptions.d.ts +5 -0
  202. package/connection/BaseConnectionOptions.js.map +1 -1
  203. package/connection/Connection.d.ts +7 -3
  204. package/connection/Connection.js +47 -31
  205. package/connection/Connection.js.map +1 -1
  206. package/connection/ConnectionMetadataBuilder.d.ts +3 -3
  207. package/connection/ConnectionMetadataBuilder.js +53 -21
  208. package/connection/ConnectionMetadataBuilder.js.map +1 -1
  209. package/connection/ConnectionOptionsReader.js +32 -27
  210. package/connection/ConnectionOptionsReader.js.map +1 -1
  211. package/connection/options-reader/ConnectionOptionsEnvReader.js +1 -0
  212. package/connection/options-reader/ConnectionOptionsEnvReader.js.map +1 -1
  213. package/decorator/Unique.d.ts +5 -4
  214. package/decorator/Unique.js +7 -3
  215. package/decorator/Unique.js.map +1 -1
  216. package/decorator/columns/PrimaryGeneratedColumn.d.ts +2 -1
  217. package/decorator/columns/PrimaryGeneratedColumn.js.map +1 -1
  218. package/decorator/options/ColumnOptions.d.ts +4 -0
  219. package/decorator/options/ColumnOptions.js.map +1 -1
  220. package/decorator/options/PrimaryGeneratedColumnIdentityOptions.d.ts +22 -0
  221. package/decorator/options/PrimaryGeneratedColumnIdentityOptions.js +4 -0
  222. package/decorator/options/PrimaryGeneratedColumnIdentityOptions.js.map +1 -0
  223. package/decorator/options/RelationOptions.d.ts +1 -1
  224. package/decorator/options/RelationOptions.js.map +1 -1
  225. package/decorator/options/UniqueOptions.d.ts +10 -0
  226. package/decorator/options/UniqueOptions.js +4 -0
  227. package/decorator/options/UniqueOptions.js.map +1 -0
  228. package/driver/aurora-data-api/AuroraDataApiQueryRunner.js +34 -40
  229. package/driver/aurora-data-api/AuroraDataApiQueryRunner.js.map +1 -1
  230. package/driver/better-sqlite3/BetterSqlite3Driver.js +7 -5
  231. package/driver/better-sqlite3/BetterSqlite3Driver.js.map +1 -1
  232. package/driver/cockroachdb/CockroachQueryRunner.js +25 -31
  233. package/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  234. package/driver/mongodb/MongoQueryRunner.d.ts +2 -0
  235. package/driver/mongodb/MongoQueryRunner.js +3 -0
  236. package/driver/mongodb/MongoQueryRunner.js.map +1 -1
  237. package/driver/mysql/MysqlQueryRunner.js +38 -40
  238. package/driver/mysql/MysqlQueryRunner.js.map +1 -1
  239. package/driver/oracle/OracleDriver.js +1 -1
  240. package/driver/oracle/OracleDriver.js.map +1 -1
  241. package/driver/oracle/OracleQueryRunner.js +14 -25
  242. package/driver/oracle/OracleQueryRunner.js.map +1 -1
  243. package/driver/postgres/PostgresDriver.d.ts +1 -0
  244. package/driver/postgres/PostgresDriver.js +16 -7
  245. package/driver/postgres/PostgresDriver.js.map +1 -1
  246. package/driver/postgres/PostgresQueryRunner.d.ts +5 -0
  247. package/driver/postgres/PostgresQueryRunner.js +327 -139
  248. package/driver/postgres/PostgresQueryRunner.js.map +1 -1
  249. package/driver/sap/SapQueryRunner.js +37 -43
  250. package/driver/sap/SapQueryRunner.js.map +1 -1
  251. package/driver/sqlite/SqliteDriver.js +11 -10
  252. package/driver/sqlite/SqliteDriver.js.map +1 -1
  253. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +9 -15
  254. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  255. package/driver/sqlserver/SqlServerQueryRunner.js +32 -34
  256. package/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  257. package/driver/types/MetadataTableType.d.ts +5 -0
  258. package/driver/types/MetadataTableType.js +11 -0
  259. package/driver/types/MetadataTableType.js.map +1 -0
  260. package/entity-manager/EntityManager.d.ts +2 -2
  261. package/entity-manager/EntityManager.js +1 -1
  262. package/entity-manager/EntityManager.js.map +1 -1
  263. package/entity-manager/MongoEntityManager.js +2 -1
  264. package/entity-manager/MongoEntityManager.js.map +1 -1
  265. package/entity-schema/EntitySchemaOptions.d.ts +6 -0
  266. package/entity-schema/EntitySchemaOptions.js.map +1 -1
  267. package/entity-schema/EntitySchemaRelationOptions.d.ts +1 -1
  268. package/entity-schema/EntitySchemaRelationOptions.js.map +1 -1
  269. package/entity-schema/EntitySchemaTransformer.js +3 -1
  270. package/entity-schema/EntitySchemaTransformer.js.map +1 -1
  271. package/entity-schema/EntitySchemaUniqueOptions.d.ts +5 -0
  272. package/entity-schema/EntitySchemaUniqueOptions.js.map +1 -1
  273. package/find-options/FindOneOptions.d.ts +6 -0
  274. package/find-options/FindOneOptions.js.map +1 -1
  275. package/find-options/FindOptionsUtils.js +4 -0
  276. package/find-options/FindOptionsUtils.js.map +1 -1
  277. package/find-options/operator/Like.d.ts +1 -1
  278. package/find-options/operator/Like.js +1 -1
  279. package/find-options/operator/Like.js.map +1 -1
  280. package/globals.js +33 -6
  281. package/globals.js.map +1 -1
  282. package/index.d.ts +10 -0
  283. package/index.js +12 -1
  284. package/index.js.map +1 -1
  285. package/index.mjs +352 -0
  286. package/metadata/ColumnMetadata.d.ts +4 -0
  287. package/metadata/ColumnMetadata.js +2 -0
  288. package/metadata/ColumnMetadata.js.map +1 -1
  289. package/metadata/RelationMetadata.d.ts +1 -1
  290. package/metadata/RelationMetadata.js.map +1 -1
  291. package/metadata/UniqueMetadata.d.ts +5 -0
  292. package/metadata/UniqueMetadata.js +1 -0
  293. package/metadata/UniqueMetadata.js.map +1 -1
  294. package/metadata-args/UniqueMetadataArgs.d.ts +5 -0
  295. package/metadata-args/UniqueMetadataArgs.js.map +1 -1
  296. package/metadata-builder/EntityMetadataValidator.js +1 -0
  297. package/metadata-builder/EntityMetadataValidator.js.map +1 -1
  298. package/migration/MigrationExecutor.js +56 -49
  299. package/migration/MigrationExecutor.js.map +1 -1
  300. package/package.json +1 -1
  301. package/persistence/SubjectExecutor.js +2 -2
  302. package/persistence/SubjectExecutor.js.map +1 -1
  303. package/persistence/subject-builder/OneToManySubjectBuilder.js +3 -0
  304. package/persistence/subject-builder/OneToManySubjectBuilder.js.map +1 -1
  305. package/query-builder/DeleteQueryBuilder.d.ts +4 -2
  306. package/query-builder/DeleteQueryBuilder.js +4 -2
  307. package/query-builder/DeleteQueryBuilder.js.map +1 -1
  308. package/query-builder/InsertQueryBuilder.d.ts +1 -1
  309. package/query-builder/InsertQueryBuilder.js +1 -1
  310. package/query-builder/InsertQueryBuilder.js.map +1 -1
  311. package/query-builder/NotBrackets.d.ts +7 -0
  312. package/query-builder/NotBrackets.js +19 -0
  313. package/query-builder/NotBrackets.js.map +1 -0
  314. package/query-builder/QueryBuilder.d.ts +3 -2
  315. package/query-builder/QueryBuilder.js +2 -1
  316. package/query-builder/QueryBuilder.js.map +1 -1
  317. package/query-builder/RelationLoader.js +11 -6
  318. package/query-builder/RelationLoader.js.map +1 -1
  319. package/query-builder/RelationQueryBuilder.d.ts +1 -1
  320. package/query-builder/RelationQueryBuilder.js +1 -1
  321. package/query-builder/RelationQueryBuilder.js.map +1 -1
  322. package/query-builder/ReturningResultsEntityUpdator.d.ts +4 -0
  323. package/query-builder/ReturningResultsEntityUpdator.js +11 -2
  324. package/query-builder/ReturningResultsEntityUpdator.js.map +1 -1
  325. package/query-builder/SelectQueryBuilder.d.ts +1 -1
  326. package/query-builder/SelectQueryBuilder.js +5 -5
  327. package/query-builder/SelectQueryBuilder.js.map +1 -1
  328. package/query-builder/SoftDeleteQueryBuilder.d.ts +1 -1
  329. package/query-builder/SoftDeleteQueryBuilder.js +2 -2
  330. package/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
  331. package/query-builder/UpdateQueryBuilder.d.ts +4 -2
  332. package/query-builder/UpdateQueryBuilder.js +11 -6
  333. package/query-builder/UpdateQueryBuilder.js.map +1 -1
  334. package/query-builder/WhereExpressionBuilder.d.ts +3 -1
  335. package/query-builder/WhereExpressionBuilder.js.map +1 -1
  336. package/query-runner/BaseQueryRunner.d.ts +23 -0
  337. package/query-runner/BaseQueryRunner.js +38 -1
  338. package/query-runner/BaseQueryRunner.js.map +1 -1
  339. package/query-runner/QueryRunner.d.ts +5 -0
  340. package/query-runner/QueryRunner.js.map +1 -1
  341. package/repository/AbstractRepository.d.ts +2 -2
  342. package/repository/AbstractRepository.js +2 -2
  343. package/repository/AbstractRepository.js.map +1 -1
  344. package/repository/BaseEntity.d.ts +1 -1
  345. package/repository/BaseEntity.js +1 -1
  346. package/repository/BaseEntity.js.map +1 -1
  347. package/repository/Repository.d.ts +1 -1
  348. package/repository/Repository.js +1 -1
  349. package/repository/Repository.js.map +1 -1
  350. package/repository/TreeRepository.js +1 -1
  351. package/repository/TreeRepository.js.map +1 -1
  352. package/schema-builder/RdbmsSchemaBuilder.d.ts +5 -1
  353. package/schema-builder/RdbmsSchemaBuilder.js +59 -50
  354. package/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
  355. package/schema-builder/options/TableColumnOptions.d.ts +4 -0
  356. package/schema-builder/options/TableColumnOptions.js.map +1 -1
  357. package/schema-builder/options/TableUniqueOptions.d.ts +5 -0
  358. package/schema-builder/options/TableUniqueOptions.js.map +1 -1
  359. package/schema-builder/table/TableColumn.d.ts +4 -0
  360. package/schema-builder/table/TableColumn.js +2 -0
  361. package/schema-builder/table/TableColumn.js.map +1 -1
  362. package/schema-builder/table/TableUnique.d.ts +5 -0
  363. package/schema-builder/table/TableUnique.js +5 -2
  364. package/schema-builder/table/TableUnique.js.map +1 -1
  365. package/schema-builder/util/TableUtils.js +1 -0
  366. package/schema-builder/util/TableUtils.js.map +1 -1
  367. package/util/DirectoryExportedClassesLoader.d.ts +1 -1
  368. package/util/DirectoryExportedClassesLoader.js +54 -31
  369. package/util/DirectoryExportedClassesLoader.js.map +1 -1
  370. package/util/ImportUtils.d.ts +1 -0
  371. package/util/ImportUtils.js +94 -0
  372. package/util/ImportUtils.js.map +1 -0
package/README.md CHANGED
@@ -71,6 +71,7 @@ TypeORM is highly influenced by other ORMs, such as [Hibernate](http://hibernate
71
71
  * Supports MongoDB NoSQL database.
72
72
  * Works in NodeJS / Browser / Ionic / Cordova / React Native / NativeScript / Expo / Electron platforms.
73
73
  * TypeScript and JavaScript support.
74
+ * ESM and CommonJS support.
74
75
  * Produced code is performant, flexible, clean and maintainable.
75
76
  * Follows all possible best practices.
76
77
  * CLI.
@@ -321,6 +322,9 @@ That's it, your application should successfully run and insert a new user into t
321
322
  You can continue to work with this project and integrate other modules you need and start
322
323
  creating more entities.
323
324
 
325
+ > You can generate an ESM project by running
326
+ `typeorm init --name MyProject --database postgres --module esm` command.
327
+
324
328
  > You can generate an even more advanced project with express installed by running
325
329
  `typeorm init --name MyProject --database mysql --express` command.
326
330
 
@@ -950,6 +954,40 @@ Note that we should use the `@JoinColumn` decorator only on one side of a relati
950
954
  Whichever side you put this decorator on will be the owning side of the relationship.
951
955
  The owning side of a relationship contains a column with a foreign key in the database.
952
956
 
957
+ ### Relations in ESM projects
958
+
959
+ If you use ESM in your TypeScript project, you should use the `Relation` wrapper type in relation properties to avoid circular dependency issues.
960
+ Let's modify our entities:
961
+
962
+ ```javascript
963
+ import { Entity, Column, PrimaryGeneratedColumn, OneToOne, JoinColumn, Relation } from "typeorm";
964
+ import { Photo } from "./Photo";
965
+
966
+ @Entity()
967
+ export class PhotoMetadata {
968
+
969
+ /* ... other columns */
970
+
971
+ @OneToOne(type => Photo, photo => photo.metadata)
972
+ @JoinColumn()
973
+ photo: Relation<Photo>;
974
+ }
975
+ ```
976
+
977
+ ```javascript
978
+ import { Entity, Column, PrimaryGeneratedColumn, OneToOne, Relation } from "typeorm";
979
+ import { PhotoMetadata } from "./PhotoMetadata";
980
+
981
+ @Entity()
982
+ export class Photo {
983
+
984
+ /* ... other columns */
985
+
986
+ @OneToOne(type => PhotoMetadata, photoMetadata => photoMetadata.photo)
987
+ metadata: Relation<PhotoMetadata>;
988
+ }
989
+ ```
990
+
953
991
  ### Loading objects with their relations
954
992
 
955
993
  Now let's load our photo and its photo metadata in a single query.
@@ -151,11 +151,14 @@ var DbQueryResultCache = /** @class */ (function () {
151
151
  */
152
152
  DbQueryResultCache.prototype.storeInCache = function (options, savedCache, queryRunner) {
153
153
  return __awaiter(this, void 0, void 0, function () {
154
- var insertedValues, qb, qb;
154
+ var shouldCreateQueryRunner, insertedValues, qb, qb;
155
155
  return __generator(this, function (_a) {
156
156
  switch (_a.label) {
157
157
  case 0:
158
- queryRunner = this.getQueryRunner(queryRunner);
158
+ shouldCreateQueryRunner = queryRunner === undefined || (queryRunner === null || queryRunner === void 0 ? void 0 : queryRunner.getReplicationMode()) === "slave";
159
+ if (queryRunner === undefined || shouldCreateQueryRunner) {
160
+ queryRunner = this.connection.createQueryRunner("master");
161
+ }
159
162
  insertedValues = options;
160
163
  if (this.connection.driver instanceof SqlServerDriver) { // todo: bad abstraction, re-implement this part, probably better if we create an entity metadata for cache table
161
164
  insertedValues = {
@@ -202,7 +205,13 @@ var DbQueryResultCache = /** @class */ (function () {
202
205
  case 5:
203
206
  _a.sent();
204
207
  _a.label = 6;
205
- case 6: return [2 /*return*/];
208
+ case 6:
209
+ if (!shouldCreateQueryRunner) return [3 /*break*/, 8];
210
+ return [4 /*yield*/, queryRunner.release()];
211
+ case 7:
212
+ _a.sent();
213
+ _a.label = 8;
214
+ case 8: return [2 /*return*/];
206
215
  }
207
216
  });
208
217
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../browser/src/cache/DbQueryResultCache.ts"],"names":[],"mappings":"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","file":"DbQueryResultCache.js","sourcesContent":["import {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {Connection} from \"../connection/Connection\";\nimport {OracleDriver} from \"../driver/oracle/OracleDriver\";\nimport {MssqlParameter} from \"../driver/sqlserver/MssqlParameter\";\nimport {SqlServerDriver} from \"../driver/sqlserver/SqlServerDriver\";\nimport {QueryRunner} from \"../query-runner/QueryRunner\";\nimport {Table} from \"../schema-builder/table/Table\";\nimport {QueryResultCache} from \"./QueryResultCache\";\nimport {QueryResultCacheOptions} from \"./QueryResultCacheOptions\";\n\n/**\n * Caches query result into current database, into separate table called \"query-result-cache\".\n */\nexport class DbQueryResultCache implements QueryResultCache {\n\n // -------------------------------------------------------------------------\n // Private properties\n // -------------------------------------------------------------------------\n\n private queryResultCacheTable: string;\n\n private queryResultCacheDatabase?: string;\n\n private queryResultCacheSchema?: string;\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(protected connection: Connection) {\n\n const { schema } = (this.connection.driver.options as any);\n const database = this.connection.driver.database;\n const cacheOptions = typeof this.connection.options.cache === \"object\" ? this.connection.options.cache : {};\n const cacheTableName = cacheOptions.tableName || \"query-result-cache\";\n\n this.queryResultCacheDatabase = database;\n this.queryResultCacheSchema = schema;\n this.queryResultCacheTable = this.connection.driver.buildTableName(cacheTableName, schema, database);\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates a connection with given cache provider.\n */\n async connect(): Promise<void> {\n }\n\n /**\n * Disconnects with given cache provider.\n */\n async disconnect(): Promise<void> {\n }\n\n /**\n * Creates table for storing cache if it does not exist yet.\n */\n async synchronize(queryRunner?: QueryRunner): Promise<void> {\n queryRunner = this.getQueryRunner(queryRunner);\n const driver = this.connection.driver;\n const tableExist = await queryRunner.hasTable(this.queryResultCacheTable); // todo: table name should be configurable\n if (tableExist)\n return;\n\n await queryRunner.createTable(new Table(\n {\n database: this.queryResultCacheDatabase,\n schema: this.queryResultCacheSchema,\n name: this.queryResultCacheTable,\n columns: [\n {\n name: \"id\",\n isPrimary: true,\n isNullable: false,\n type: driver.normalizeType({type: driver.mappedDataTypes.cacheId}),\n generationStrategy: \"increment\",\n isGenerated: true\n },\n {\n name: \"identifier\",\n type: driver.normalizeType({type: driver.mappedDataTypes.cacheIdentifier}),\n isNullable: true\n },\n {\n name: \"time\",\n type: driver.normalizeType({type: driver.mappedDataTypes.cacheTime}),\n isPrimary: false,\n isNullable: false\n },\n {\n name: \"duration\",\n type: driver.normalizeType({type: driver.mappedDataTypes.cacheDuration}),\n isPrimary: false,\n isNullable: false\n },\n {\n name: \"query\",\n type: driver.normalizeType({type: driver.mappedDataTypes.cacheQuery}),\n isPrimary: false,\n isNullable: false\n },\n {\n name: \"result\",\n type: driver.normalizeType({type: driver.mappedDataTypes.cacheResult}),\n isNullable: false\n },\n ]\n },\n ));\n }\n\n /**\n * Caches given query result.\n * Returns cache result if found.\n * Returns undefined if result is not cached.\n */\n getFromCache(options: QueryResultCacheOptions, queryRunner?: QueryRunner): Promise<QueryResultCacheOptions|undefined> {\n queryRunner = this.getQueryRunner(queryRunner);\n const qb = this.connection\n .createQueryBuilder(queryRunner)\n .select()\n .from(this.queryResultCacheTable, \"cache\");\n\n if (options.identifier) {\n return qb\n .where(`${qb.escape(\"cache\")}.${qb.escape(\"identifier\")} = :identifier`)\n .setParameters({ identifier: this.connection.driver instanceof SqlServerDriver ? new MssqlParameter(options.identifier, \"nvarchar\") : options.identifier })\n .getRawOne();\n\n } else if (options.query) {\n if (this.connection.driver instanceof OracleDriver) {\n return qb\n .where(`dbms_lob.compare(${qb.escape(\"cache\")}.${qb.escape(\"query\")}, :query) = 0`, { query: options.query })\n .getRawOne();\n }\n\n return qb\n .where(`${qb.escape(\"cache\")}.${qb.escape(\"query\")} = :query`)\n .setParameters({ query: this.connection.driver instanceof SqlServerDriver ? new MssqlParameter(options.query, \"nvarchar\") : options.query })\n .getRawOne();\n }\n\n return Promise.resolve(undefined);\n }\n\n /**\n * Checks if cache is expired or not.\n */\n isExpired(savedCache: QueryResultCacheOptions): boolean {\n const duration = typeof savedCache.duration === \"string\" ? parseInt(savedCache.duration) : savedCache.duration;\n return ((typeof savedCache.time === \"string\" ? parseInt(savedCache.time as any) : savedCache.time)! + duration) < new Date().getTime();\n }\n\n /**\n * Stores given query result in the cache.\n */\n async storeInCache(options: QueryResultCacheOptions, savedCache: QueryResultCacheOptions|undefined, queryRunner?: QueryRunner): Promise<void> {\n queryRunner = this.getQueryRunner(queryRunner);\n\n let insertedValues: ObjectLiteral = options;\n if (this.connection.driver instanceof SqlServerDriver) { // todo: bad abstraction, re-implement this part, probably better if we create an entity metadata for cache table\n insertedValues = {\n identifier: new MssqlParameter(options.identifier, \"nvarchar\"),\n time: new MssqlParameter(options.time, \"bigint\"),\n duration: new MssqlParameter(options.duration, \"int\"),\n query: new MssqlParameter(options.query, \"nvarchar\"),\n result: new MssqlParameter(options.result, \"nvarchar\"),\n };\n }\n\n if (savedCache && savedCache.identifier) { // if exist then update\n const qb = queryRunner.manager\n .createQueryBuilder()\n .update(this.queryResultCacheTable)\n .set(insertedValues);\n\n qb.where(`${qb.escape(\"identifier\")} = :condition`, { condition: insertedValues.identifier });\n await qb.execute();\n\n } else if (savedCache && savedCache.query) { // if exist then update\n const qb = queryRunner.manager\n .createQueryBuilder()\n .update(this.queryResultCacheTable)\n .set(insertedValues);\n\n if (this.connection.driver instanceof OracleDriver) {\n qb.where(`dbms_lob.compare(\"query\", :condition) = 0`, { condition: insertedValues.query });\n\n } else {\n qb.where(`${qb.escape(\"query\")} = :condition`, { condition: insertedValues.query });\n }\n\n await qb.execute();\n\n } else { // otherwise insert\n await queryRunner.manager\n .createQueryBuilder()\n .insert()\n .into(this.queryResultCacheTable)\n .values(insertedValues)\n .execute();\n }\n }\n\n /**\n * Clears everything stored in the cache.\n */\n async clear(queryRunner: QueryRunner): Promise<void> {\n return this.getQueryRunner(queryRunner).clearTable(this.queryResultCacheTable);\n }\n\n /**\n * Removes all cached results by given identifiers from cache.\n */\n async remove(identifiers: string[], queryRunner?: QueryRunner): Promise<void> {\n await Promise.all(identifiers.map(identifier => {\n const qb = this.getQueryRunner(queryRunner).manager.createQueryBuilder();\n return qb.delete()\n .from(this.queryResultCacheTable)\n .where(`${qb.escape(\"identifier\")} = :identifier`, {identifier})\n .execute();\n }));\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Gets a query runner to work with.\n */\n protected getQueryRunner(queryRunner: QueryRunner|undefined): QueryRunner {\n if (queryRunner)\n return queryRunner;\n\n return this.connection.createQueryRunner();\n }\n\n}\n"],"sourceRoot":".."}
1
+ {"version":3,"sources":["../browser/src/cache/DbQueryResultCache.ts"],"names":[],"mappings":"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","file":"DbQueryResultCache.js","sourcesContent":["import {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {Connection} from \"../connection/Connection\";\nimport {OracleDriver} from \"../driver/oracle/OracleDriver\";\nimport {MssqlParameter} from \"../driver/sqlserver/MssqlParameter\";\nimport {SqlServerDriver} from \"../driver/sqlserver/SqlServerDriver\";\nimport {QueryRunner} from \"../query-runner/QueryRunner\";\nimport {Table} from \"../schema-builder/table/Table\";\nimport {QueryResultCache} from \"./QueryResultCache\";\nimport {QueryResultCacheOptions} from \"./QueryResultCacheOptions\";\n\n/**\n * Caches query result into current database, into separate table called \"query-result-cache\".\n */\nexport class DbQueryResultCache implements QueryResultCache {\n\n // -------------------------------------------------------------------------\n // Private properties\n // -------------------------------------------------------------------------\n\n private queryResultCacheTable: string;\n\n private queryResultCacheDatabase?: string;\n\n private queryResultCacheSchema?: string;\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(protected connection: Connection) {\n\n const { schema } = (this.connection.driver.options as any);\n const database = this.connection.driver.database;\n const cacheOptions = typeof this.connection.options.cache === \"object\" ? this.connection.options.cache : {};\n const cacheTableName = cacheOptions.tableName || \"query-result-cache\";\n\n this.queryResultCacheDatabase = database;\n this.queryResultCacheSchema = schema;\n this.queryResultCacheTable = this.connection.driver.buildTableName(cacheTableName, schema, database);\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates a connection with given cache provider.\n */\n async connect(): Promise<void> {\n }\n\n /**\n * Disconnects with given cache provider.\n */\n async disconnect(): Promise<void> {\n }\n\n /**\n * Creates table for storing cache if it does not exist yet.\n */\n async synchronize(queryRunner?: QueryRunner): Promise<void> {\n queryRunner = this.getQueryRunner(queryRunner);\n const driver = this.connection.driver;\n const tableExist = await queryRunner.hasTable(this.queryResultCacheTable); // todo: table name should be configurable\n if (tableExist)\n return;\n\n await queryRunner.createTable(new Table(\n {\n database: this.queryResultCacheDatabase,\n schema: this.queryResultCacheSchema,\n name: this.queryResultCacheTable,\n columns: [\n {\n name: \"id\",\n isPrimary: true,\n isNullable: false,\n type: driver.normalizeType({type: driver.mappedDataTypes.cacheId}),\n generationStrategy: \"increment\",\n isGenerated: true\n },\n {\n name: \"identifier\",\n type: driver.normalizeType({type: driver.mappedDataTypes.cacheIdentifier}),\n isNullable: true\n },\n {\n name: \"time\",\n type: driver.normalizeType({type: driver.mappedDataTypes.cacheTime}),\n isPrimary: false,\n isNullable: false\n },\n {\n name: \"duration\",\n type: driver.normalizeType({type: driver.mappedDataTypes.cacheDuration}),\n isPrimary: false,\n isNullable: false\n },\n {\n name: \"query\",\n type: driver.normalizeType({type: driver.mappedDataTypes.cacheQuery}),\n isPrimary: false,\n isNullable: false\n },\n {\n name: \"result\",\n type: driver.normalizeType({type: driver.mappedDataTypes.cacheResult}),\n isNullable: false\n },\n ]\n },\n ));\n }\n\n /**\n * Caches given query result.\n * Returns cache result if found.\n * Returns undefined if result is not cached.\n */\n getFromCache(options: QueryResultCacheOptions, queryRunner?: QueryRunner): Promise<QueryResultCacheOptions|undefined> {\n queryRunner = this.getQueryRunner(queryRunner);\n const qb = this.connection\n .createQueryBuilder(queryRunner)\n .select()\n .from(this.queryResultCacheTable, \"cache\");\n\n if (options.identifier) {\n return qb\n .where(`${qb.escape(\"cache\")}.${qb.escape(\"identifier\")} = :identifier`)\n .setParameters({ identifier: this.connection.driver instanceof SqlServerDriver ? new MssqlParameter(options.identifier, \"nvarchar\") : options.identifier })\n .getRawOne();\n\n } else if (options.query) {\n if (this.connection.driver instanceof OracleDriver) {\n return qb\n .where(`dbms_lob.compare(${qb.escape(\"cache\")}.${qb.escape(\"query\")}, :query) = 0`, { query: options.query })\n .getRawOne();\n }\n\n return qb\n .where(`${qb.escape(\"cache\")}.${qb.escape(\"query\")} = :query`)\n .setParameters({ query: this.connection.driver instanceof SqlServerDriver ? new MssqlParameter(options.query, \"nvarchar\") : options.query })\n .getRawOne();\n }\n\n return Promise.resolve(undefined);\n }\n\n /**\n * Checks if cache is expired or not.\n */\n isExpired(savedCache: QueryResultCacheOptions): boolean {\n const duration = typeof savedCache.duration === \"string\" ? parseInt(savedCache.duration) : savedCache.duration;\n return ((typeof savedCache.time === \"string\" ? parseInt(savedCache.time as any) : savedCache.time)! + duration) < new Date().getTime();\n }\n\n /**\n * Stores given query result in the cache.\n */\n async storeInCache(options: QueryResultCacheOptions, savedCache: QueryResultCacheOptions|undefined, queryRunner?: QueryRunner): Promise<void> {\n const shouldCreateQueryRunner = queryRunner === undefined || queryRunner?.getReplicationMode() === \"slave\";\n\n if (queryRunner === undefined || shouldCreateQueryRunner) {\n queryRunner = this.connection.createQueryRunner(\"master\");\n }\n\n let insertedValues: ObjectLiteral = options;\n if (this.connection.driver instanceof SqlServerDriver) { // todo: bad abstraction, re-implement this part, probably better if we create an entity metadata for cache table\n insertedValues = {\n identifier: new MssqlParameter(options.identifier, \"nvarchar\"),\n time: new MssqlParameter(options.time, \"bigint\"),\n duration: new MssqlParameter(options.duration, \"int\"),\n query: new MssqlParameter(options.query, \"nvarchar\"),\n result: new MssqlParameter(options.result, \"nvarchar\"),\n };\n }\n\n if (savedCache && savedCache.identifier) { // if exist then update\n const qb = queryRunner.manager\n .createQueryBuilder()\n .update(this.queryResultCacheTable)\n .set(insertedValues);\n\n qb.where(`${qb.escape(\"identifier\")} = :condition`, { condition: insertedValues.identifier });\n await qb.execute();\n\n } else if (savedCache && savedCache.query) { // if exist then update\n const qb = queryRunner.manager\n .createQueryBuilder()\n .update(this.queryResultCacheTable)\n .set(insertedValues);\n\n if (this.connection.driver instanceof OracleDriver) {\n qb.where(`dbms_lob.compare(\"query\", :condition) = 0`, { condition: insertedValues.query });\n\n } else {\n qb.where(`${qb.escape(\"query\")} = :condition`, { condition: insertedValues.query });\n }\n\n await qb.execute();\n\n } else { // otherwise insert\n await queryRunner.manager\n .createQueryBuilder()\n .insert()\n .into(this.queryResultCacheTable)\n .values(insertedValues)\n .execute();\n }\n\n if (shouldCreateQueryRunner) {\n await queryRunner.release();\n }\n }\n\n /**\n * Clears everything stored in the cache.\n */\n async clear(queryRunner: QueryRunner): Promise<void> {\n return this.getQueryRunner(queryRunner).clearTable(this.queryResultCacheTable);\n }\n\n /**\n * Removes all cached results by given identifiers from cache.\n */\n async remove(identifiers: string[], queryRunner?: QueryRunner): Promise<void> {\n await Promise.all(identifiers.map(identifier => {\n const qb = this.getQueryRunner(queryRunner).manager.createQueryBuilder();\n return qb.delete()\n .from(this.queryResultCacheTable)\n .where(`${qb.escape(\"identifier\")} = :identifier`, {identifier})\n .execute();\n }));\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Gets a query runner to work with.\n */\n protected getQueryRunner(queryRunner: QueryRunner|undefined): QueryRunner {\n if (queryRunner)\n return queryRunner;\n\n return this.connection.createQueryRunner();\n }\n\n}\n"],"sourceRoot":".."}
@@ -1,4 +1,4 @@
1
- import { __awaiter, __generator } from "tslib";
1
+ import { __assign, __awaiter, __generator } from "tslib";
2
2
  import { PlatformTools } from "../platform/PlatformTools";
3
3
  import { TypeORMError } from "../error/TypeORMError";
4
4
  /**
@@ -23,43 +23,48 @@ var RedisQueryResultCache = /** @class */ (function () {
23
23
  return __awaiter(this, void 0, void 0, function () {
24
24
  var cacheOptions;
25
25
  return __generator(this, function (_a) {
26
- cacheOptions = this.connection.options.cache;
27
- if (this.clientType === "redis") {
28
- if (cacheOptions && cacheOptions.options) {
29
- this.client = this.redis.createClient(cacheOptions.options);
30
- }
31
- else {
32
- this.client = this.redis.createClient();
33
- }
34
- }
35
- else if (this.clientType === "ioredis") {
36
- if (cacheOptions && cacheOptions.port) {
37
- if (cacheOptions.options) {
38
- this.client = new this.redis(cacheOptions.port, cacheOptions.options);
26
+ switch (_a.label) {
27
+ case 0:
28
+ cacheOptions = this.connection.options.cache;
29
+ if (!(this.clientType === "redis")) return [3 /*break*/, 3];
30
+ this.client = this.redis.createClient(__assign(__assign({}, cacheOptions === null || cacheOptions === void 0 ? void 0 : cacheOptions.options), { legacyMode: true }));
31
+ if (!("connect" in this.client)) return [3 /*break*/, 2];
32
+ return [4 /*yield*/, this.client.connect()];
33
+ case 1:
34
+ _a.sent();
35
+ _a.label = 2;
36
+ case 2: return [3 /*break*/, 4];
37
+ case 3:
38
+ if (this.clientType === "ioredis") {
39
+ if (cacheOptions && cacheOptions.port) {
40
+ if (cacheOptions.options) {
41
+ this.client = new this.redis(cacheOptions.port, cacheOptions.options);
42
+ }
43
+ else {
44
+ this.client = new this.redis(cacheOptions.port);
45
+ }
46
+ }
47
+ else if (cacheOptions && cacheOptions.options) {
48
+ this.client = new this.redis(cacheOptions.options);
49
+ }
50
+ else {
51
+ this.client = new this.redis();
52
+ }
39
53
  }
40
- else {
41
- this.client = new this.redis(cacheOptions.port);
54
+ else if (this.clientType === "ioredis/cluster") {
55
+ if (cacheOptions && cacheOptions.options && Array.isArray(cacheOptions.options)) {
56
+ this.client = new this.redis.Cluster(cacheOptions.options);
57
+ }
58
+ else if (cacheOptions && cacheOptions.options && cacheOptions.options.startupNodes) {
59
+ this.client = new this.redis.Cluster(cacheOptions.options.startupNodes, cacheOptions.options.options);
60
+ }
61
+ else {
62
+ throw new TypeORMError("options.startupNodes required for " + this.clientType + ".");
63
+ }
42
64
  }
43
- }
44
- else if (cacheOptions && cacheOptions.options) {
45
- this.client = new this.redis(cacheOptions.options);
46
- }
47
- else {
48
- this.client = new this.redis();
49
- }
50
- }
51
- else if (this.clientType === "ioredis/cluster") {
52
- if (cacheOptions && cacheOptions.options && Array.isArray(cacheOptions.options)) {
53
- this.client = new this.redis.Cluster(cacheOptions.options);
54
- }
55
- else if (cacheOptions && cacheOptions.options && cacheOptions.options.startupNodes) {
56
- this.client = new this.redis.Cluster(cacheOptions.options.startupNodes, cacheOptions.options.options);
57
- }
58
- else {
59
- throw new TypeORMError("options.startupNodes required for " + this.clientType + ".");
60
- }
65
+ _a.label = 4;
66
+ case 4: return [2 /*return*/];
61
67
  }
62
- return [2 /*return*/];
63
68
  });
64
69
  });
65
70
  };
@@ -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 {Connection} from \"../connection/Connection\";\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 // -------------------------------------------------------------------------\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(protected connection: Connection, clientType: \"redis\" | \"ioredis\" | \"ioredis/cluster\") {\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\n\n async connect(): Promise<void> {\n const cacheOptions: any = this.connection.options.cache;\n if (this.clientType === \"redis\") {\n if (cacheOptions && cacheOptions.options) {\n this.client = this.redis.createClient(cacheOptions.options);\n } else {\n this.client = this.redis.createClient();\n }\n } else if (this.clientType === \"ioredis\") {\n if (cacheOptions && cacheOptions.port) {\n if (cacheOptions.options) {\n this.client = new this.redis( cacheOptions.port, cacheOptions.options );\n } else {\n this.client = new this.redis( cacheOptions.port );\n }\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 (cacheOptions && cacheOptions.options && Array.isArray(cacheOptions.options)) {\n this.client = new this.redis.Cluster(cacheOptions.options);\n } else if (cacheOptions && cacheOptions.options && cacheOptions.options.startupNodes) {\n this.client = new this.redis.Cluster(cacheOptions.options.startupNodes, cacheOptions.options.options);\n } else {\n throw new TypeORMError(`options.startupNodes required for ${this.clientType}.`);\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 /**\n * Caches given query result.\n * Returns cache result if found.\n * Returns undefined if result is not cached.\n */\n getFromCache(options: QueryResultCacheOptions, queryRunner?: QueryRunner): Promise<QueryResultCacheOptions|undefined> {\n return new Promise<QueryResultCacheOptions|undefined>((ok, fail) => {\n\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\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\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) < new Date().getTime();\n }\n\n /**\n * Stores given query result in the cache.\n */\n async storeInCache(options: QueryResultCacheOptions, savedCache: QueryResultCacheOptions, queryRunner?: QueryRunner): Promise<void> {\n return new Promise<void>((ok, fail) => {\n if (options.identifier) {\n this.client.set(options.identifier, JSON.stringify(options), \"PX\", options.duration, (err: any, result: any) => {\n if (err) return fail(err);\n ok();\n });\n\n } else if (options.query) {\n this.client.set(options.query, JSON.stringify(options), \"PX\", options.duration, (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 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(identifiers: string[], queryRunner?: QueryRunner): Promise<void> {\n await Promise.all(identifiers.map(identifier => {\n return this.deleteKey(identifier);\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(`Cannot use cache because ${this.clientType} is not installed. Please run \"npm i ${this.clientType} --save\".`);\n }\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 {Connection} from \"../connection/Connection\";\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 // -------------------------------------------------------------------------\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(protected connection: Connection, clientType: \"redis\" | \"ioredis\" | \"ioredis/cluster\") {\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\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 (\"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( cacheOptions.port, cacheOptions.options );\n } else {\n this.client = new this.redis( cacheOptions.port );\n }\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 (cacheOptions && cacheOptions.options && Array.isArray(cacheOptions.options)) {\n this.client = new this.redis.Cluster(cacheOptions.options);\n } else if (cacheOptions && cacheOptions.options && cacheOptions.options.startupNodes) {\n this.client = new this.redis.Cluster(cacheOptions.options.startupNodes, cacheOptions.options.options);\n } else {\n throw new TypeORMError(`options.startupNodes required for ${this.clientType}.`);\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 /**\n * Caches given query result.\n * Returns cache result if found.\n * Returns undefined if result is not cached.\n */\n getFromCache(options: QueryResultCacheOptions, queryRunner?: QueryRunner): Promise<QueryResultCacheOptions|undefined> {\n return new Promise<QueryResultCacheOptions|undefined>((ok, fail) => {\n\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\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\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) < new Date().getTime();\n }\n\n /**\n * Stores given query result in the cache.\n */\n async storeInCache(options: QueryResultCacheOptions, savedCache: QueryResultCacheOptions, queryRunner?: QueryRunner): Promise<void> {\n return new Promise<void>((ok, fail) => {\n if (options.identifier) {\n this.client.set(options.identifier, JSON.stringify(options), \"PX\", options.duration, (err: any, result: any) => {\n if (err) return fail(err);\n ok();\n });\n\n } else if (options.query) {\n this.client.set(options.query, JSON.stringify(options), \"PX\", options.duration, (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 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(identifiers: string[], queryRunner?: QueryRunner): Promise<void> {\n await Promise.all(identifiers.map(identifier => {\n return this.deleteKey(identifier);\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(`Cannot use cache because ${this.clientType} is not installed. Please run \"npm i ${this.clientType} --save\".`);\n }\n }\n\n\n}\n"],"sourceRoot":".."}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Wrapper type for relation type definitions in entities.
3
+ * Used to circumvent ESM modules circular dependency issue caused by reflection metadata saving the type of the property.
4
+ *
5
+ * Usage example:
6
+ * @Entity()
7
+ * export default class User {
8
+ *
9
+ * @OneToOne(() => Profile, profile => profile.user)
10
+ * profile: Relation<Profile>;
11
+ *
12
+ * }
13
+ */
14
+ export declare type Relation<T> = T;
@@ -0,0 +1,3 @@
1
+ export {};
2
+
3
+ //# sourceMappingURL=RelationType.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../browser/src/common/RelationType.ts"],"names":[],"mappings":"","file":"RelationType.js","sourcesContent":["/**\n * Wrapper type for relation type definitions in entities.\n * Used to circumvent ESM modules circular dependency issue caused by reflection metadata saving the type of the property.\n *\n * Usage example:\n * @Entity()\n * export default class User {\n *\n * @OneToOne(() => Profile, profile => profile.user)\n * profile: Relation<Profile>;\n *\n * }\n */\nexport type Relation<T> = T;\n"],"sourceRoot":".."}
@@ -45,6 +45,11 @@ export interface BaseConnectionOptions {
45
45
  * Transaction mode for migrations to run in
46
46
  */
47
47
  readonly migrationsTransactionMode?: "all" | "none" | "each";
48
+ /**
49
+ * Typeorm metadata table name, in case of different name from "typeorm_metadata".
50
+ * Accepts single string name.
51
+ */
52
+ readonly metadataTableName?: string;
48
53
  /**
49
54
  * Naming strategy to be used to name tables and columns in the database.
50
55
  */
@@ -1 +1 @@
1
- {"version":3,"sources":["../browser/src/connection/BaseConnectionOptions.ts"],"names":[],"mappings":"","file":"BaseConnectionOptions.js","sourcesContent":["import {EntitySchema} from \"../entity-schema/EntitySchema\";\nimport {LoggerOptions} from \"../logger/LoggerOptions\";\nimport {NamingStrategyInterface} from \"../naming-strategy/NamingStrategyInterface\";\nimport {DatabaseType} from \"../driver/types/DatabaseType\";\nimport {Logger} from \"../logger/Logger\";\nimport {Connection} from \"./Connection\";\nimport {QueryResultCache} from \"../cache/QueryResultCache\";\n\n/**\n * BaseConnectionOptions is set of connection options shared by all database types.\n */\nexport interface BaseConnectionOptions {\n\n /**\n * Database type. This value is required.\n */\n readonly type: DatabaseType;\n\n /**\n * Connection name. If connection name is not given then it will be called \"default\".\n * Different connections must have different names.\n */\n readonly name?: string;\n\n /**\n * Entities to be loaded for this connection.\n * Accepts both entity classes and directories where from entities need to be loaded.\n * Directories support glob patterns.\n */\n readonly entities?: ((Function|string|EntitySchema<any>))[];\n\n /**\n * Subscribers to be loaded for this connection.\n * Accepts both subscriber classes and directories where from subscribers need to be loaded.\n * Directories support glob patterns.\n */\n readonly subscribers?: (Function|string)[];\n\n /**\n * Migrations to be loaded for this connection.\n * Accepts both migration classes and directories where from migrations need to be loaded.\n * Directories support glob patterns.\n */\n readonly migrations?: (Function|string)[];\n\n /**\n * Migrations table name, in case of different name from \"migrations\".\n * Accepts single string name.\n */\n readonly migrationsTableName?: string;\n\n /**\n * Transaction mode for migrations to run in\n */\n readonly migrationsTransactionMode?: \"all\" | \"none\" | \"each\";\n\n /**\n * Naming strategy to be used to name tables and columns in the database.\n */\n readonly namingStrategy?: NamingStrategyInterface;\n\n /**\n * Logging options.\n */\n readonly logging?: LoggerOptions;\n\n /**\n * Logger instance used to log queries and events in the ORM.\n */\n readonly logger?: \"advanced-console\"|\"simple-console\"|\"file\"|\"debug\"|Logger;\n\n /**\n * Maximum number of milliseconds query should be executed before logger log a warning.\n */\n readonly maxQueryExecutionTime?: number;\n\n /**\n * Indicates if database schema should be auto created on every application launch.\n * Be careful with this option and don't use this in production - otherwise you can lose production data.\n * This option is useful during debug and development.\n * Alternative to it, you can use CLI and run schema:sync command.\n *\n * Note that for MongoDB database it does not create schema, because MongoDB is schemaless.\n * Instead, it syncs just by creating indices.\n */\n readonly synchronize?: boolean;\n\n /**\n * Indicates if migrations should be auto run on every application launch.\n * Alternative to it, you can use CLI and run migrations:run command.\n */\n readonly migrationsRun?: boolean;\n\n /**\n * Drops the schema each time connection is being established.\n * Be careful with this option and don't use this in production - otherwise you'll lose all production data.\n * This option is useful during debug and development.\n */\n readonly dropSchema?: boolean;\n\n /**\n * Prefix to use on all tables (collections) of this connection in the database.\n */\n readonly entityPrefix?: string;\n\n /**\n * When creating new Entity instances, skip all constructors when true.\n */\n readonly entitySkipConstructor?: boolean;\n\n /**\n * Extra connection options to be passed to the underlying driver.\n *\n * todo: deprecate this and move all database-specific types into hts own connection options object.\n */\n readonly extra?: any;\n\n /**\n * Allows to setup cache options.\n */\n readonly cache?: boolean|{\n\n /**\n * Type of caching.\n *\n * - \"database\" means cached values will be stored in the separate table in database. This is default value.\n * - \"redis\" means cached values will be stored inside redis. You must provide redis connection options.\n */\n readonly type?: \"database\" | \"redis\" | \"ioredis\" | \"ioredis/cluster\"; // todo: add mongodb and other cache providers as well in the future\n\n /**\n * Factory function for custom cache providers that implement QueryResultCache.\n */\n readonly provider?: (connection: Connection) => QueryResultCache;\n\n /**\n * Configurable table name for \"database\" type cache.\n * Default value is \"query-result-cache\"\n */\n readonly tableName?: string;\n\n /**\n * Used to provide redis connection options.\n */\n readonly options?: any;\n\n /**\n * If set to true then queries (using find methods and QueryBuilder's methods) will always be cached.\n */\n readonly alwaysEnabled?: boolean;\n\n /**\n * Time in milliseconds in which cache will expire.\n * This can be setup per-query.\n * Default value is 1000 which is equivalent to 1 second.\n */\n readonly duration?: number;\n\n /**\n * Used to specify if cache errors should be ignored, and pass through the call to the Database.\n */\n readonly ignoreErrors?: boolean;\n };\n\n /**\n * CLI settings.\n */\n readonly cli?: {\n\n /**\n * Directory where entities should be created by default.\n */\n readonly entitiesDir?: string;\n\n /**\n * Directory where migrations should be created by default.\n */\n readonly migrationsDir?: string;\n\n /**\n * Directory where subscribers should be created by default.\n */\n readonly subscribersDir?: string;\n\n };\n\n}\n"],"sourceRoot":".."}
1
+ {"version":3,"sources":["../browser/src/connection/BaseConnectionOptions.ts"],"names":[],"mappings":"","file":"BaseConnectionOptions.js","sourcesContent":["import {EntitySchema} from \"../entity-schema/EntitySchema\";\nimport {LoggerOptions} from \"../logger/LoggerOptions\";\nimport {NamingStrategyInterface} from \"../naming-strategy/NamingStrategyInterface\";\nimport {DatabaseType} from \"../driver/types/DatabaseType\";\nimport {Logger} from \"../logger/Logger\";\nimport {Connection} from \"./Connection\";\nimport {QueryResultCache} from \"../cache/QueryResultCache\";\n\n/**\n * BaseConnectionOptions is set of connection options shared by all database types.\n */\nexport interface BaseConnectionOptions {\n\n /**\n * Database type. This value is required.\n */\n readonly type: DatabaseType;\n\n /**\n * Connection name. If connection name is not given then it will be called \"default\".\n * Different connections must have different names.\n */\n readonly name?: string;\n\n /**\n * Entities to be loaded for this connection.\n * Accepts both entity classes and directories where from entities need to be loaded.\n * Directories support glob patterns.\n */\n readonly entities?: ((Function|string|EntitySchema<any>))[];\n\n /**\n * Subscribers to be loaded for this connection.\n * Accepts both subscriber classes and directories where from subscribers need to be loaded.\n * Directories support glob patterns.\n */\n readonly subscribers?: (Function|string)[];\n\n /**\n * Migrations to be loaded for this connection.\n * Accepts both migration classes and directories where from migrations need to be loaded.\n * Directories support glob patterns.\n */\n readonly migrations?: (Function|string)[];\n\n /**\n * Migrations table name, in case of different name from \"migrations\".\n * Accepts single string name.\n */\n readonly migrationsTableName?: string;\n\n /**\n * Transaction mode for migrations to run in\n */\n readonly migrationsTransactionMode?: \"all\" | \"none\" | \"each\";\n\n /**\n * Typeorm metadata table name, in case of different name from \"typeorm_metadata\".\n * Accepts single string name.\n */\n readonly metadataTableName?: string;\n\n /**\n * Naming strategy to be used to name tables and columns in the database.\n */\n readonly namingStrategy?: NamingStrategyInterface;\n\n /**\n * Logging options.\n */\n readonly logging?: LoggerOptions;\n\n /**\n * Logger instance used to log queries and events in the ORM.\n */\n readonly logger?: \"advanced-console\"|\"simple-console\"|\"file\"|\"debug\"|Logger;\n\n /**\n * Maximum number of milliseconds query should be executed before logger log a warning.\n */\n readonly maxQueryExecutionTime?: number;\n\n /**\n * Indicates if database schema should be auto created on every application launch.\n * Be careful with this option and don't use this in production - otherwise you can lose production data.\n * This option is useful during debug and development.\n * Alternative to it, you can use CLI and run schema:sync command.\n *\n * Note that for MongoDB database it does not create schema, because MongoDB is schemaless.\n * Instead, it syncs just by creating indices.\n */\n readonly synchronize?: boolean;\n\n /**\n * Indicates if migrations should be auto run on every application launch.\n * Alternative to it, you can use CLI and run migrations:run command.\n */\n readonly migrationsRun?: boolean;\n\n /**\n * Drops the schema each time connection is being established.\n * Be careful with this option and don't use this in production - otherwise you'll lose all production data.\n * This option is useful during debug and development.\n */\n readonly dropSchema?: boolean;\n\n /**\n * Prefix to use on all tables (collections) of this connection in the database.\n */\n readonly entityPrefix?: string;\n\n /**\n * When creating new Entity instances, skip all constructors when true.\n */\n readonly entitySkipConstructor?: boolean;\n\n /**\n * Extra connection options to be passed to the underlying driver.\n *\n * todo: deprecate this and move all database-specific types into hts own connection options object.\n */\n readonly extra?: any;\n\n /**\n * Allows to setup cache options.\n */\n readonly cache?: boolean|{\n\n /**\n * Type of caching.\n *\n * - \"database\" means cached values will be stored in the separate table in database. This is default value.\n * - \"redis\" means cached values will be stored inside redis. You must provide redis connection options.\n */\n readonly type?: \"database\" | \"redis\" | \"ioredis\" | \"ioredis/cluster\"; // todo: add mongodb and other cache providers as well in the future\n\n /**\n * Factory function for custom cache providers that implement QueryResultCache.\n */\n readonly provider?: (connection: Connection) => QueryResultCache;\n\n /**\n * Configurable table name for \"database\" type cache.\n * Default value is \"query-result-cache\"\n */\n readonly tableName?: string;\n\n /**\n * Used to provide redis connection options.\n */\n readonly options?: any;\n\n /**\n * If set to true then queries (using find methods and QueryBuilder's methods) will always be cached.\n */\n readonly alwaysEnabled?: boolean;\n\n /**\n * Time in milliseconds in which cache will expire.\n * This can be setup per-query.\n * Default value is 1000 which is equivalent to 1 second.\n */\n readonly duration?: number;\n\n /**\n * Used to specify if cache errors should be ignored, and pass through the call to the Database.\n */\n readonly ignoreErrors?: boolean;\n };\n\n /**\n * CLI settings.\n */\n readonly cli?: {\n\n /**\n * Directory where entities should be created by default.\n */\n readonly entitiesDir?: string;\n\n /**\n * Directory where migrations should be created by default.\n */\n readonly migrationsDir?: string;\n\n /**\n * Directory where subscribers should be created by default.\n */\n readonly subscribersDir?: string;\n\n };\n\n}\n"],"sourceRoot":".."}
@@ -50,6 +50,10 @@ export declare class Connection {
50
50
  * Naming strategy used in the connection.
51
51
  */
52
52
  readonly namingStrategy: NamingStrategyInterface;
53
+ /**
54
+ * Name for the metadata table
55
+ */
56
+ readonly metadataTableName: string;
53
57
  /**
54
58
  * Logger used to log orm events.
55
59
  */
@@ -169,11 +173,11 @@ export declare class Connection {
169
173
  */
170
174
  query(query: string, parameters?: any[], queryRunner?: QueryRunner): Promise<any>;
171
175
  /**
172
- * Creates a new query builder that can be used to build a sql query.
176
+ * Creates a new query builder that can be used to build a SQL query.
173
177
  */
174
178
  createQueryBuilder<Entity>(entityClass: EntityTarget<Entity>, alias: string, queryRunner?: QueryRunner): SelectQueryBuilder<Entity>;
175
179
  /**
176
- * Creates a new query builder that can be used to build a sql query.
180
+ * Creates a new query builder that can be used to build a SQL query.
177
181
  */
178
182
  createQueryBuilder(queryRunner?: QueryRunner): SelectQueryBuilder<any>;
179
183
  /**
@@ -202,5 +206,5 @@ export declare class Connection {
202
206
  /**
203
207
  * Builds metadatas for all registered classes inside this connection.
204
208
  */
205
- protected buildMetadatas(): void;
209
+ protected buildMetadatas(): Promise<void>;
206
210
  }
@@ -50,6 +50,7 @@ var Connection = /** @class */ (function () {
50
50
  this.driver = new DriverFactory().create(this);
51
51
  this.manager = this.createEntityManager();
52
52
  this.namingStrategy = options.namingStrategy || new DefaultNamingStrategy();
53
+ this.metadataTableName = options.metadataTableName || "typeorm_metadata";
53
54
  this.queryResultCache = options.cache ? new QueryResultCacheFactory(this).create() : undefined;
54
55
  this.relationLoader = new RelationLoader(this);
55
56
  this.isConnected = false;
@@ -118,41 +119,44 @@ var Connection = /** @class */ (function () {
118
119
  ObjectUtils.assign(this, { isConnected: true });
119
120
  _a.label = 4;
120
121
  case 4:
121
- _a.trys.push([4, 12, , 14]);
122
+ _a.trys.push([4, 13, , 15]);
122
123
  // build all metadatas registered in the current connection
123
- this.buildMetadatas();
124
- return [4 /*yield*/, this.driver.afterConnect()];
124
+ return [4 /*yield*/, this.buildMetadatas()];
125
125
  case 5:
126
+ // build all metadatas registered in the current connection
126
127
  _a.sent();
127
- if (!this.options.dropSchema) return [3 /*break*/, 7];
128
- return [4 /*yield*/, this.dropDatabase()];
128
+ return [4 /*yield*/, this.driver.afterConnect()];
129
129
  case 6:
130
130
  _a.sent();
131
- _a.label = 7;
131
+ if (!this.options.dropSchema) return [3 /*break*/, 8];
132
+ return [4 /*yield*/, this.dropDatabase()];
132
133
  case 7:
133
- if (!this.options.synchronize) return [3 /*break*/, 9];
134
- return [4 /*yield*/, this.synchronize()];
135
- case 8:
136
134
  _a.sent();
137
- _a.label = 9;
135
+ _a.label = 8;
136
+ case 8:
137
+ if (!this.options.synchronize) return [3 /*break*/, 10];
138
+ return [4 /*yield*/, this.synchronize()];
138
139
  case 9:
139
- if (!this.options.migrationsRun) return [3 /*break*/, 11];
140
- return [4 /*yield*/, this.runMigrations({ transaction: this.options.migrationsTransactionMode })];
140
+ _a.sent();
141
+ _a.label = 10;
141
142
  case 10:
143
+ if (!this.options.migrationsRun) return [3 /*break*/, 12];
144
+ return [4 /*yield*/, this.runMigrations({ transaction: this.options.migrationsTransactionMode })];
145
+ case 11:
142
146
  _a.sent();
143
- _a.label = 11;
144
- case 11: return [3 /*break*/, 14];
145
- case 12:
147
+ _a.label = 12;
148
+ case 12: return [3 /*break*/, 15];
149
+ case 13:
146
150
  error_1 = _a.sent();
147
151
  // if for some reason build metadata fail (for example validation error during entity metadata check)
148
152
  // connection needs to be closed
149
153
  return [4 /*yield*/, this.close()];
150
- case 13:
154
+ case 14:
151
155
  // if for some reason build metadata fail (for example validation error during entity metadata check)
152
156
  // connection needs to be closed
153
157
  _a.sent();
154
158
  throw error_1;
155
- case 14: return [2 /*return*/, this];
159
+ case 15: return [2 /*return*/, this];
156
160
  }
157
161
  });
158
162
  });
@@ -423,7 +427,7 @@ var Connection = /** @class */ (function () {
423
427
  });
424
428
  };
425
429
  /**
426
- * Creates a new query builder that can be used to build a sql query.
430
+ * Creates a new query builder that can be used to build a SQL query.
427
431
  */
428
432
  Connection.prototype.createQueryBuilder = function (entityOrRunner, alias, queryRunner) {
429
433
  if (this instanceof MongoEntityManager)
@@ -501,19 +505,31 @@ var Connection = /** @class */ (function () {
501
505
  * Builds metadatas for all registered classes inside this connection.
502
506
  */
503
507
  Connection.prototype.buildMetadatas = function () {
504
- var connectionMetadataBuilder = new ConnectionMetadataBuilder(this);
505
- var entityMetadataValidator = new EntityMetadataValidator();
506
- // create subscribers instances if they are not disallowed from high-level (for example they can disallowed from migrations run process)
507
- var subscribers = connectionMetadataBuilder.buildSubscribers(this.options.subscribers || []);
508
- ObjectUtils.assign(this, { subscribers: subscribers });
509
- // build entity metadatas
510
- var entityMetadatas = connectionMetadataBuilder.buildEntityMetadatas(this.options.entities || []);
511
- ObjectUtils.assign(this, { entityMetadatas: entityMetadatas });
512
- // create migration instances
513
- var migrations = connectionMetadataBuilder.buildMigrations(this.options.migrations || []);
514
- ObjectUtils.assign(this, { migrations: migrations });
515
- // validate all created entity metadatas to make sure user created entities are valid and correct
516
- entityMetadataValidator.validateMany(this.entityMetadatas.filter(function (metadata) { return metadata.tableType !== "view"; }), this.driver);
508
+ return __awaiter(this, void 0, void 0, function () {
509
+ var connectionMetadataBuilder, entityMetadataValidator, subscribers, entityMetadatas, migrations;
510
+ return __generator(this, function (_a) {
511
+ switch (_a.label) {
512
+ case 0:
513
+ connectionMetadataBuilder = new ConnectionMetadataBuilder(this);
514
+ entityMetadataValidator = new EntityMetadataValidator();
515
+ return [4 /*yield*/, connectionMetadataBuilder.buildSubscribers(this.options.subscribers || [])];
516
+ case 1:
517
+ subscribers = _a.sent();
518
+ ObjectUtils.assign(this, { subscribers: subscribers });
519
+ return [4 /*yield*/, connectionMetadataBuilder.buildEntityMetadatas(this.options.entities || [])];
520
+ case 2:
521
+ entityMetadatas = _a.sent();
522
+ ObjectUtils.assign(this, { entityMetadatas: entityMetadatas });
523
+ return [4 /*yield*/, connectionMetadataBuilder.buildMigrations(this.options.migrations || [])];
524
+ case 3:
525
+ migrations = _a.sent();
526
+ ObjectUtils.assign(this, { migrations: migrations });
527
+ // validate all created entity metadatas to make sure user created entities are valid and correct
528
+ entityMetadataValidator.validateMany(this.entityMetadatas.filter(function (metadata) { return metadata.tableType !== "view"; }), this.driver);
529
+ return [2 /*return*/];
530
+ }
531
+ });
532
+ });
517
533
  };
518
534
  return Connection;
519
535
  }());