typeorm 0.2.41-dev.c895680 → 0.2.42-dev.1cfd7b9

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 (343) 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/Connection.d.ts +3 -3
  10. package/browser/connection/Connection.js +46 -31
  11. package/browser/connection/Connection.js.map +1 -1
  12. package/browser/connection/ConnectionMetadataBuilder.d.ts +3 -3
  13. package/browser/connection/ConnectionMetadataBuilder.js +54 -22
  14. package/browser/connection/ConnectionMetadataBuilder.js.map +1 -1
  15. package/browser/connection/ConnectionOptionsReader.js +33 -28
  16. package/browser/connection/ConnectionOptionsReader.js.map +1 -1
  17. package/browser/decorator/Unique.d.ts +5 -4
  18. package/browser/decorator/Unique.js +7 -3
  19. package/browser/decorator/Unique.js.map +1 -1
  20. package/browser/decorator/columns/PrimaryGeneratedColumn.d.ts +2 -1
  21. package/browser/decorator/columns/PrimaryGeneratedColumn.js.map +1 -1
  22. package/browser/decorator/options/ColumnOptions.d.ts +4 -0
  23. package/browser/decorator/options/ColumnOptions.js.map +1 -1
  24. package/browser/decorator/options/PrimaryGeneratedColumnIdentityOptions.d.ts +22 -0
  25. package/browser/decorator/options/PrimaryGeneratedColumnIdentityOptions.js +3 -0
  26. package/browser/decorator/options/PrimaryGeneratedColumnIdentityOptions.js.map +1 -0
  27. package/browser/decorator/options/RelationOptions.d.ts +1 -1
  28. package/browser/decorator/options/RelationOptions.js.map +1 -1
  29. package/browser/decorator/options/UniqueOptions.d.ts +10 -0
  30. package/browser/decorator/options/UniqueOptions.js +3 -0
  31. package/browser/decorator/options/UniqueOptions.js.map +1 -0
  32. package/browser/driver/aurora-data-api/AuroraDataApiQueryRunner.js +34 -40
  33. package/browser/driver/aurora-data-api/AuroraDataApiQueryRunner.js.map +1 -1
  34. package/browser/driver/better-sqlite3/BetterSqlite3Driver.js +7 -5
  35. package/browser/driver/better-sqlite3/BetterSqlite3Driver.js.map +1 -1
  36. package/browser/driver/cockroachdb/CockroachQueryRunner.js +25 -31
  37. package/browser/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  38. package/browser/driver/mongodb/MongoQueryRunner.d.ts +2 -0
  39. package/browser/driver/mongodb/MongoQueryRunner.js +3 -0
  40. package/browser/driver/mongodb/MongoQueryRunner.js.map +1 -1
  41. package/browser/driver/mysql/MysqlQueryRunner.js +38 -40
  42. package/browser/driver/mysql/MysqlQueryRunner.js.map +1 -1
  43. package/browser/driver/oracle/OracleDriver.js +1 -1
  44. package/browser/driver/oracle/OracleDriver.js.map +1 -1
  45. package/browser/driver/oracle/OracleQueryRunner.js +14 -25
  46. package/browser/driver/oracle/OracleQueryRunner.js.map +1 -1
  47. package/browser/driver/postgres/PostgresDriver.d.ts +1 -0
  48. package/browser/driver/postgres/PostgresDriver.js +16 -7
  49. package/browser/driver/postgres/PostgresDriver.js.map +1 -1
  50. package/browser/driver/postgres/PostgresQueryRunner.d.ts +5 -0
  51. package/browser/driver/postgres/PostgresQueryRunner.js +327 -139
  52. package/browser/driver/postgres/PostgresQueryRunner.js.map +1 -1
  53. package/browser/driver/sap/SapQueryRunner.js +37 -43
  54. package/browser/driver/sap/SapQueryRunner.js.map +1 -1
  55. package/browser/driver/sqlite/SqliteDriver.js +11 -10
  56. package/browser/driver/sqlite/SqliteDriver.js.map +1 -1
  57. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +9 -15
  58. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  59. package/browser/driver/sqlserver/SqlServerQueryRunner.js +32 -34
  60. package/browser/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  61. package/browser/driver/types/MetadataTableType.d.ts +5 -0
  62. package/browser/driver/types/MetadataTableType.js +8 -0
  63. package/browser/driver/types/MetadataTableType.js.map +1 -0
  64. package/browser/entity-manager/EntityManager.d.ts +2 -2
  65. package/browser/entity-manager/EntityManager.js +1 -1
  66. package/browser/entity-manager/EntityManager.js.map +1 -1
  67. package/browser/entity-manager/MongoEntityManager.js +2 -1
  68. package/browser/entity-manager/MongoEntityManager.js.map +1 -1
  69. package/browser/entity-schema/EntitySchemaOptions.d.ts +6 -0
  70. package/browser/entity-schema/EntitySchemaOptions.js.map +1 -1
  71. package/browser/entity-schema/EntitySchemaRelationOptions.d.ts +1 -1
  72. package/browser/entity-schema/EntitySchemaRelationOptions.js.map +1 -1
  73. package/browser/entity-schema/EntitySchemaTransformer.js +3 -1
  74. package/browser/entity-schema/EntitySchemaTransformer.js.map +1 -1
  75. package/browser/entity-schema/EntitySchemaUniqueOptions.d.ts +5 -0
  76. package/browser/entity-schema/EntitySchemaUniqueOptions.js.map +1 -1
  77. package/browser/find-options/operator/Like.d.ts +1 -1
  78. package/browser/find-options/operator/Like.js +1 -1
  79. package/browser/find-options/operator/Like.js.map +1 -1
  80. package/browser/globals.js +34 -7
  81. package/browser/globals.js.map +1 -1
  82. package/browser/index.d.ts +10 -0
  83. package/browser/index.js +10 -0
  84. package/browser/index.js.map +1 -1
  85. package/browser/metadata/ColumnMetadata.d.ts +4 -0
  86. package/browser/metadata/ColumnMetadata.js +2 -0
  87. package/browser/metadata/ColumnMetadata.js.map +1 -1
  88. package/browser/metadata/RelationMetadata.d.ts +1 -1
  89. package/browser/metadata/RelationMetadata.js.map +1 -1
  90. package/browser/metadata/UniqueMetadata.d.ts +5 -0
  91. package/browser/metadata/UniqueMetadata.js +1 -0
  92. package/browser/metadata/UniqueMetadata.js.map +1 -1
  93. package/browser/metadata-args/UniqueMetadataArgs.d.ts +5 -0
  94. package/browser/metadata-args/UniqueMetadataArgs.js.map +1 -1
  95. package/browser/metadata-builder/EntityMetadataValidator.js +1 -0
  96. package/browser/metadata-builder/EntityMetadataValidator.js.map +1 -1
  97. package/browser/migration/MigrationExecutor.js +56 -49
  98. package/browser/migration/MigrationExecutor.js.map +1 -1
  99. package/browser/persistence/SubjectExecutor.js +2 -2
  100. package/browser/persistence/SubjectExecutor.js.map +1 -1
  101. package/browser/persistence/subject-builder/OneToManySubjectBuilder.js +3 -0
  102. package/browser/persistence/subject-builder/OneToManySubjectBuilder.js.map +1 -1
  103. package/browser/query-builder/DeleteQueryBuilder.d.ts +4 -2
  104. package/browser/query-builder/DeleteQueryBuilder.js +4 -2
  105. package/browser/query-builder/DeleteQueryBuilder.js.map +1 -1
  106. package/browser/query-builder/InsertQueryBuilder.d.ts +1 -1
  107. package/browser/query-builder/InsertQueryBuilder.js +1 -1
  108. package/browser/query-builder/InsertQueryBuilder.js.map +1 -1
  109. package/browser/query-builder/NotBrackets.d.ts +7 -0
  110. package/browser/query-builder/NotBrackets.js +16 -0
  111. package/browser/query-builder/NotBrackets.js.map +1 -0
  112. package/browser/query-builder/QueryBuilder.d.ts +3 -2
  113. package/browser/query-builder/QueryBuilder.js +2 -1
  114. package/browser/query-builder/QueryBuilder.js.map +1 -1
  115. package/browser/query-builder/RelationLoader.js +11 -6
  116. package/browser/query-builder/RelationLoader.js.map +1 -1
  117. package/browser/query-builder/RelationQueryBuilder.d.ts +1 -1
  118. package/browser/query-builder/RelationQueryBuilder.js +1 -1
  119. package/browser/query-builder/RelationQueryBuilder.js.map +1 -1
  120. package/browser/query-builder/ReturningResultsEntityUpdator.d.ts +4 -0
  121. package/browser/query-builder/ReturningResultsEntityUpdator.js +11 -2
  122. package/browser/query-builder/ReturningResultsEntityUpdator.js.map +1 -1
  123. package/browser/query-builder/SelectQueryBuilder.d.ts +1 -1
  124. package/browser/query-builder/SelectQueryBuilder.js +5 -5
  125. package/browser/query-builder/SelectQueryBuilder.js.map +1 -1
  126. package/browser/query-builder/SoftDeleteQueryBuilder.d.ts +1 -1
  127. package/browser/query-builder/SoftDeleteQueryBuilder.js +2 -2
  128. package/browser/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
  129. package/browser/query-builder/UpdateQueryBuilder.d.ts +4 -2
  130. package/browser/query-builder/UpdateQueryBuilder.js +11 -6
  131. package/browser/query-builder/UpdateQueryBuilder.js.map +1 -1
  132. package/browser/query-builder/WhereExpressionBuilder.d.ts +3 -1
  133. package/browser/query-builder/WhereExpressionBuilder.js.map +1 -1
  134. package/browser/query-runner/BaseQueryRunner.d.ts +23 -0
  135. package/browser/query-runner/BaseQueryRunner.js +37 -0
  136. package/browser/query-runner/BaseQueryRunner.js.map +1 -1
  137. package/browser/query-runner/QueryRunner.d.ts +5 -0
  138. package/browser/query-runner/QueryRunner.js.map +1 -1
  139. package/browser/repository/AbstractRepository.d.ts +2 -2
  140. package/browser/repository/AbstractRepository.js +2 -2
  141. package/browser/repository/AbstractRepository.js.map +1 -1
  142. package/browser/repository/BaseEntity.d.ts +1 -1
  143. package/browser/repository/BaseEntity.js +1 -1
  144. package/browser/repository/BaseEntity.js.map +1 -1
  145. package/browser/repository/Repository.d.ts +1 -1
  146. package/browser/repository/Repository.js +1 -1
  147. package/browser/repository/Repository.js.map +1 -1
  148. package/browser/schema-builder/RdbmsSchemaBuilder.d.ts +5 -1
  149. package/browser/schema-builder/RdbmsSchemaBuilder.js +58 -49
  150. package/browser/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
  151. package/browser/schema-builder/options/TableColumnOptions.d.ts +4 -0
  152. package/browser/schema-builder/options/TableColumnOptions.js.map +1 -1
  153. package/browser/schema-builder/options/TableUniqueOptions.d.ts +5 -0
  154. package/browser/schema-builder/options/TableUniqueOptions.js.map +1 -1
  155. package/browser/schema-builder/table/TableColumn.d.ts +4 -0
  156. package/browser/schema-builder/table/TableColumn.js +2 -0
  157. package/browser/schema-builder/table/TableColumn.js.map +1 -1
  158. package/browser/schema-builder/table/TableUnique.d.ts +5 -0
  159. package/browser/schema-builder/table/TableUnique.js +5 -2
  160. package/browser/schema-builder/table/TableUnique.js.map +1 -1
  161. package/browser/schema-builder/util/TableUtils.js +1 -0
  162. package/browser/schema-builder/util/TableUtils.js.map +1 -1
  163. package/browser/util/DirectoryExportedClassesLoader.d.ts +1 -1
  164. package/browser/util/DirectoryExportedClassesLoader.js +55 -31
  165. package/browser/util/DirectoryExportedClassesLoader.js.map +1 -1
  166. package/browser/util/ImportUtils.d.ts +1 -0
  167. package/browser/util/ImportUtils.js +90 -0
  168. package/browser/util/ImportUtils.js.map +1 -0
  169. package/cache/DbQueryResultCache.js +12 -3
  170. package/cache/DbQueryResultCache.js.map +1 -1
  171. package/cache/RedisQueryResultCache.js +39 -34
  172. package/cache/RedisQueryResultCache.js.map +1 -1
  173. package/commands/InitCommand.d.ts +9 -7
  174. package/commands/InitCommand.js +72 -43
  175. package/commands/InitCommand.js.map +1 -1
  176. package/commands/QueryCommand.d.ts +1 -1
  177. package/commands/QueryCommand.js +1 -1
  178. package/commands/QueryCommand.js.map +1 -1
  179. package/common/RelationType.d.ts +14 -0
  180. package/common/RelationType.js +4 -0
  181. package/common/RelationType.js.map +1 -0
  182. package/connection/Connection.d.ts +3 -3
  183. package/connection/Connection.js +46 -31
  184. package/connection/Connection.js.map +1 -1
  185. package/connection/ConnectionMetadataBuilder.d.ts +3 -3
  186. package/connection/ConnectionMetadataBuilder.js +53 -21
  187. package/connection/ConnectionMetadataBuilder.js.map +1 -1
  188. package/connection/ConnectionOptionsReader.js +32 -27
  189. package/connection/ConnectionOptionsReader.js.map +1 -1
  190. package/decorator/Unique.d.ts +5 -4
  191. package/decorator/Unique.js +7 -3
  192. package/decorator/Unique.js.map +1 -1
  193. package/decorator/columns/PrimaryGeneratedColumn.d.ts +2 -1
  194. package/decorator/columns/PrimaryGeneratedColumn.js.map +1 -1
  195. package/decorator/options/ColumnOptions.d.ts +4 -0
  196. package/decorator/options/ColumnOptions.js.map +1 -1
  197. package/decorator/options/PrimaryGeneratedColumnIdentityOptions.d.ts +22 -0
  198. package/decorator/options/PrimaryGeneratedColumnIdentityOptions.js +4 -0
  199. package/decorator/options/PrimaryGeneratedColumnIdentityOptions.js.map +1 -0
  200. package/decorator/options/RelationOptions.d.ts +1 -1
  201. package/decorator/options/RelationOptions.js.map +1 -1
  202. package/decorator/options/UniqueOptions.d.ts +10 -0
  203. package/decorator/options/UniqueOptions.js +4 -0
  204. package/decorator/options/UniqueOptions.js.map +1 -0
  205. package/driver/aurora-data-api/AuroraDataApiQueryRunner.js +34 -40
  206. package/driver/aurora-data-api/AuroraDataApiQueryRunner.js.map +1 -1
  207. package/driver/better-sqlite3/BetterSqlite3Driver.js +7 -5
  208. package/driver/better-sqlite3/BetterSqlite3Driver.js.map +1 -1
  209. package/driver/cockroachdb/CockroachQueryRunner.js +25 -31
  210. package/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  211. package/driver/mongodb/MongoQueryRunner.d.ts +2 -0
  212. package/driver/mongodb/MongoQueryRunner.js +3 -0
  213. package/driver/mongodb/MongoQueryRunner.js.map +1 -1
  214. package/driver/mysql/MysqlQueryRunner.js +38 -40
  215. package/driver/mysql/MysqlQueryRunner.js.map +1 -1
  216. package/driver/oracle/OracleDriver.js +1 -1
  217. package/driver/oracle/OracleDriver.js.map +1 -1
  218. package/driver/oracle/OracleQueryRunner.js +14 -25
  219. package/driver/oracle/OracleQueryRunner.js.map +1 -1
  220. package/driver/postgres/PostgresDriver.d.ts +1 -0
  221. package/driver/postgres/PostgresDriver.js +16 -7
  222. package/driver/postgres/PostgresDriver.js.map +1 -1
  223. package/driver/postgres/PostgresQueryRunner.d.ts +5 -0
  224. package/driver/postgres/PostgresQueryRunner.js +327 -139
  225. package/driver/postgres/PostgresQueryRunner.js.map +1 -1
  226. package/driver/sap/SapQueryRunner.js +37 -43
  227. package/driver/sap/SapQueryRunner.js.map +1 -1
  228. package/driver/sqlite/SqliteDriver.js +11 -10
  229. package/driver/sqlite/SqliteDriver.js.map +1 -1
  230. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +9 -15
  231. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  232. package/driver/sqlserver/SqlServerQueryRunner.js +32 -34
  233. package/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  234. package/driver/types/MetadataTableType.d.ts +5 -0
  235. package/driver/types/MetadataTableType.js +11 -0
  236. package/driver/types/MetadataTableType.js.map +1 -0
  237. package/entity-manager/EntityManager.d.ts +2 -2
  238. package/entity-manager/EntityManager.js +1 -1
  239. package/entity-manager/EntityManager.js.map +1 -1
  240. package/entity-manager/MongoEntityManager.js +2 -1
  241. package/entity-manager/MongoEntityManager.js.map +1 -1
  242. package/entity-schema/EntitySchemaOptions.d.ts +6 -0
  243. package/entity-schema/EntitySchemaOptions.js.map +1 -1
  244. package/entity-schema/EntitySchemaRelationOptions.d.ts +1 -1
  245. package/entity-schema/EntitySchemaRelationOptions.js.map +1 -1
  246. package/entity-schema/EntitySchemaTransformer.js +3 -1
  247. package/entity-schema/EntitySchemaTransformer.js.map +1 -1
  248. package/entity-schema/EntitySchemaUniqueOptions.d.ts +5 -0
  249. package/entity-schema/EntitySchemaUniqueOptions.js.map +1 -1
  250. package/find-options/operator/Like.d.ts +1 -1
  251. package/find-options/operator/Like.js +1 -1
  252. package/find-options/operator/Like.js.map +1 -1
  253. package/globals.js +33 -6
  254. package/globals.js.map +1 -1
  255. package/index.d.ts +10 -0
  256. package/index.js +12 -1
  257. package/index.js.map +1 -1
  258. package/index.mjs +352 -0
  259. package/metadata/ColumnMetadata.d.ts +4 -0
  260. package/metadata/ColumnMetadata.js +2 -0
  261. package/metadata/ColumnMetadata.js.map +1 -1
  262. package/metadata/RelationMetadata.d.ts +1 -1
  263. package/metadata/RelationMetadata.js.map +1 -1
  264. package/metadata/UniqueMetadata.d.ts +5 -0
  265. package/metadata/UniqueMetadata.js +1 -0
  266. package/metadata/UniqueMetadata.js.map +1 -1
  267. package/metadata-args/UniqueMetadataArgs.d.ts +5 -0
  268. package/metadata-args/UniqueMetadataArgs.js.map +1 -1
  269. package/metadata-builder/EntityMetadataValidator.js +1 -0
  270. package/metadata-builder/EntityMetadataValidator.js.map +1 -1
  271. package/migration/MigrationExecutor.js +56 -49
  272. package/migration/MigrationExecutor.js.map +1 -1
  273. package/package.json +1 -1
  274. package/persistence/SubjectExecutor.js +2 -2
  275. package/persistence/SubjectExecutor.js.map +1 -1
  276. package/persistence/subject-builder/OneToManySubjectBuilder.js +3 -0
  277. package/persistence/subject-builder/OneToManySubjectBuilder.js.map +1 -1
  278. package/query-builder/DeleteQueryBuilder.d.ts +4 -2
  279. package/query-builder/DeleteQueryBuilder.js +4 -2
  280. package/query-builder/DeleteQueryBuilder.js.map +1 -1
  281. package/query-builder/InsertQueryBuilder.d.ts +1 -1
  282. package/query-builder/InsertQueryBuilder.js +1 -1
  283. package/query-builder/InsertQueryBuilder.js.map +1 -1
  284. package/query-builder/NotBrackets.d.ts +7 -0
  285. package/query-builder/NotBrackets.js +19 -0
  286. package/query-builder/NotBrackets.js.map +1 -0
  287. package/query-builder/QueryBuilder.d.ts +3 -2
  288. package/query-builder/QueryBuilder.js +2 -1
  289. package/query-builder/QueryBuilder.js.map +1 -1
  290. package/query-builder/RelationLoader.js +11 -6
  291. package/query-builder/RelationLoader.js.map +1 -1
  292. package/query-builder/RelationQueryBuilder.d.ts +1 -1
  293. package/query-builder/RelationQueryBuilder.js +1 -1
  294. package/query-builder/RelationQueryBuilder.js.map +1 -1
  295. package/query-builder/ReturningResultsEntityUpdator.d.ts +4 -0
  296. package/query-builder/ReturningResultsEntityUpdator.js +11 -2
  297. package/query-builder/ReturningResultsEntityUpdator.js.map +1 -1
  298. package/query-builder/SelectQueryBuilder.d.ts +1 -1
  299. package/query-builder/SelectQueryBuilder.js +5 -5
  300. package/query-builder/SelectQueryBuilder.js.map +1 -1
  301. package/query-builder/SoftDeleteQueryBuilder.d.ts +1 -1
  302. package/query-builder/SoftDeleteQueryBuilder.js +2 -2
  303. package/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
  304. package/query-builder/UpdateQueryBuilder.d.ts +4 -2
  305. package/query-builder/UpdateQueryBuilder.js +11 -6
  306. package/query-builder/UpdateQueryBuilder.js.map +1 -1
  307. package/query-builder/WhereExpressionBuilder.d.ts +3 -1
  308. package/query-builder/WhereExpressionBuilder.js.map +1 -1
  309. package/query-runner/BaseQueryRunner.d.ts +23 -0
  310. package/query-runner/BaseQueryRunner.js +37 -0
  311. package/query-runner/BaseQueryRunner.js.map +1 -1
  312. package/query-runner/QueryRunner.d.ts +5 -0
  313. package/query-runner/QueryRunner.js.map +1 -1
  314. package/repository/AbstractRepository.d.ts +2 -2
  315. package/repository/AbstractRepository.js +2 -2
  316. package/repository/AbstractRepository.js.map +1 -1
  317. package/repository/BaseEntity.d.ts +1 -1
  318. package/repository/BaseEntity.js +1 -1
  319. package/repository/BaseEntity.js.map +1 -1
  320. package/repository/Repository.d.ts +1 -1
  321. package/repository/Repository.js +1 -1
  322. package/repository/Repository.js.map +1 -1
  323. package/schema-builder/RdbmsSchemaBuilder.d.ts +5 -1
  324. package/schema-builder/RdbmsSchemaBuilder.js +58 -49
  325. package/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
  326. package/schema-builder/options/TableColumnOptions.d.ts +4 -0
  327. package/schema-builder/options/TableColumnOptions.js.map +1 -1
  328. package/schema-builder/options/TableUniqueOptions.d.ts +5 -0
  329. package/schema-builder/options/TableUniqueOptions.js.map +1 -1
  330. package/schema-builder/table/TableColumn.d.ts +4 -0
  331. package/schema-builder/table/TableColumn.js +2 -0
  332. package/schema-builder/table/TableColumn.js.map +1 -1
  333. package/schema-builder/table/TableUnique.d.ts +5 -0
  334. package/schema-builder/table/TableUnique.js +5 -2
  335. package/schema-builder/table/TableUnique.js.map +1 -1
  336. package/schema-builder/util/TableUtils.js +1 -0
  337. package/schema-builder/util/TableUtils.js.map +1 -1
  338. package/util/DirectoryExportedClassesLoader.d.ts +1 -1
  339. package/util/DirectoryExportedClassesLoader.js +54 -31
  340. package/util/DirectoryExportedClassesLoader.js.map +1 -1
  341. package/util/ImportUtils.d.ts +1 -0
  342. package/util/ImportUtils.js +94 -0
  343. 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":".."}
@@ -169,11 +169,11 @@ export declare class Connection {
169
169
  */
170
170
  query(query: string, parameters?: any[], queryRunner?: QueryRunner): Promise<any>;
171
171
  /**
172
- * Creates a new query builder that can be used to build a sql query.
172
+ * Creates a new query builder that can be used to build a SQL query.
173
173
  */
174
174
  createQueryBuilder<Entity>(entityClass: EntityTarget<Entity>, alias: string, queryRunner?: QueryRunner): SelectQueryBuilder<Entity>;
175
175
  /**
176
- * 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.
177
177
  */
178
178
  createQueryBuilder(queryRunner?: QueryRunner): SelectQueryBuilder<any>;
179
179
  /**
@@ -202,5 +202,5 @@ export declare class Connection {
202
202
  /**
203
203
  * Builds metadatas for all registered classes inside this connection.
204
204
  */
205
- protected buildMetadatas(): void;
205
+ protected buildMetadatas(): Promise<void>;
206
206
  }
@@ -118,41 +118,44 @@ var Connection = /** @class */ (function () {
118
118
  ObjectUtils.assign(this, { isConnected: true });
119
119
  _a.label = 4;
120
120
  case 4:
121
- _a.trys.push([4, 12, , 14]);
121
+ _a.trys.push([4, 13, , 15]);
122
122
  // build all metadatas registered in the current connection
123
- this.buildMetadatas();
124
- return [4 /*yield*/, this.driver.afterConnect()];
123
+ return [4 /*yield*/, this.buildMetadatas()];
125
124
  case 5:
125
+ // build all metadatas registered in the current connection
126
126
  _a.sent();
127
- if (!this.options.dropSchema) return [3 /*break*/, 7];
128
- return [4 /*yield*/, this.dropDatabase()];
127
+ return [4 /*yield*/, this.driver.afterConnect()];
129
128
  case 6:
130
129
  _a.sent();
131
- _a.label = 7;
130
+ if (!this.options.dropSchema) return [3 /*break*/, 8];
131
+ return [4 /*yield*/, this.dropDatabase()];
132
132
  case 7:
133
- if (!this.options.synchronize) return [3 /*break*/, 9];
134
- return [4 /*yield*/, this.synchronize()];
135
- case 8:
136
133
  _a.sent();
137
- _a.label = 9;
134
+ _a.label = 8;
135
+ case 8:
136
+ if (!this.options.synchronize) return [3 /*break*/, 10];
137
+ return [4 /*yield*/, this.synchronize()];
138
138
  case 9:
139
- if (!this.options.migrationsRun) return [3 /*break*/, 11];
140
- return [4 /*yield*/, this.runMigrations({ transaction: this.options.migrationsTransactionMode })];
139
+ _a.sent();
140
+ _a.label = 10;
141
141
  case 10:
142
+ if (!this.options.migrationsRun) return [3 /*break*/, 12];
143
+ return [4 /*yield*/, this.runMigrations({ transaction: this.options.migrationsTransactionMode })];
144
+ case 11:
142
145
  _a.sent();
143
- _a.label = 11;
144
- case 11: return [3 /*break*/, 14];
145
- case 12:
146
+ _a.label = 12;
147
+ case 12: return [3 /*break*/, 15];
148
+ case 13:
146
149
  error_1 = _a.sent();
147
150
  // if for some reason build metadata fail (for example validation error during entity metadata check)
148
151
  // connection needs to be closed
149
152
  return [4 /*yield*/, this.close()];
150
- case 13:
153
+ case 14:
151
154
  // if for some reason build metadata fail (for example validation error during entity metadata check)
152
155
  // connection needs to be closed
153
156
  _a.sent();
154
157
  throw error_1;
155
- case 14: return [2 /*return*/, this];
158
+ case 15: return [2 /*return*/, this];
156
159
  }
157
160
  });
158
161
  });
@@ -423,7 +426,7 @@ var Connection = /** @class */ (function () {
423
426
  });
424
427
  };
425
428
  /**
426
- * Creates a new query builder that can be used to build a sql query.
429
+ * Creates a new query builder that can be used to build a SQL query.
427
430
  */
428
431
  Connection.prototype.createQueryBuilder = function (entityOrRunner, alias, queryRunner) {
429
432
  if (this instanceof MongoEntityManager)
@@ -501,19 +504,31 @@ var Connection = /** @class */ (function () {
501
504
  * Builds metadatas for all registered classes inside this connection.
502
505
  */
503
506
  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);
507
+ return __awaiter(this, void 0, void 0, function () {
508
+ var connectionMetadataBuilder, entityMetadataValidator, subscribers, entityMetadatas, migrations;
509
+ return __generator(this, function (_a) {
510
+ switch (_a.label) {
511
+ case 0:
512
+ connectionMetadataBuilder = new ConnectionMetadataBuilder(this);
513
+ entityMetadataValidator = new EntityMetadataValidator();
514
+ return [4 /*yield*/, connectionMetadataBuilder.buildSubscribers(this.options.subscribers || [])];
515
+ case 1:
516
+ subscribers = _a.sent();
517
+ ObjectUtils.assign(this, { subscribers: subscribers });
518
+ return [4 /*yield*/, connectionMetadataBuilder.buildEntityMetadatas(this.options.entities || [])];
519
+ case 2:
520
+ entityMetadatas = _a.sent();
521
+ ObjectUtils.assign(this, { entityMetadatas: entityMetadatas });
522
+ return [4 /*yield*/, connectionMetadataBuilder.buildMigrations(this.options.migrations || [])];
523
+ case 3:
524
+ migrations = _a.sent();
525
+ ObjectUtils.assign(this, { migrations: migrations });
526
+ // validate all created entity metadatas to make sure user created entities are valid and correct
527
+ entityMetadataValidator.validateMany(this.entityMetadatas.filter(function (metadata) { return metadata.tableType !== "view"; }), this.driver);
528
+ return [2 /*return*/];
529
+ }
530
+ });
531
+ });
517
532
  };
518
533
  return Connection;
519
534
  }());