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
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/metadata-builder/EntityMetadataValidator.ts"],"names":[],"mappings":"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","file":"EntityMetadataValidator.js","sourcesContent":["import {EntityMetadata} from \"../metadata/EntityMetadata\";\nimport {MissingPrimaryColumnError} from \"../error/MissingPrimaryColumnError\";\nimport {CircularRelationsError} from \"../error/CircularRelationsError\";\nimport {DepGraph} from \"../util/DepGraph\";\nimport {Driver} from \"../driver/Driver\";\nimport {DataTypeNotSupportedError} from \"../error/DataTypeNotSupportedError\";\nimport {ColumnType} from \"../driver/types/ColumnTypes\";\nimport {MongoDriver} from \"../driver/mongodb/MongoDriver\";\nimport {SqlServerDriver} from \"../driver/sqlserver/SqlServerDriver\";\nimport {MysqlDriver} from \"../driver/mysql/MysqlDriver\";\nimport {NoConnectionOptionError} from \"../error/NoConnectionOptionError\";\nimport {InitializedRelationError} from \"../error/InitializedRelationError\";\nimport {AuroraDataApiDriver} from \"../driver/aurora-data-api/AuroraDataApiDriver\";\nimport { TypeORMError } from \"../error\";\n\n/// todo: add check if there are multiple tables with the same name\n/// todo: add checks when generated column / table names are too long for the specific driver\n// todo: type in function validation, inverse side function validation\n// todo: check on build for duplicate names, since naming checking was removed from MetadataStorage\n// todo: duplicate name checking for: table, relation, column, index, naming strategy, join tables/columns?\n// todo: check if multiple tree parent metadatas in validator\n// todo: tree decorators can be used only on closure table (validation)\n// todo: throw error if parent tree metadata was not specified in a closure table\n\n// todo: MetadataArgsStorage: type in function validation, inverse side function validation\n// todo: MetadataArgsStorage: check on build for duplicate names, since naming checking was removed from MetadataStorage\n// todo: MetadataArgsStorage: duplicate name checking for: table, relation, column, index, naming strategy, join tables/columns?\n// todo: MetadataArgsStorage: check for duplicate targets too since this check has been removed too\n// todo: check if relation decorator contains primary: true and nullable: true\n// todo: check column length, precision. scale\n// todo: MySQL index can be unique or spatial or fulltext\n\n/**\n * Validates built entity metadatas.\n */\nexport class EntityMetadataValidator {\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Validates all given entity metadatas.\n */\n validateMany(entityMetadatas: EntityMetadata[], driver: Driver) {\n entityMetadatas.forEach(entityMetadata => this.validate(entityMetadata, entityMetadatas, driver));\n this.validateDependencies(entityMetadatas);\n this.validateEagerRelations(entityMetadatas);\n }\n\n /**\n * Validates given entity metadata.\n */\n validate(entityMetadata: EntityMetadata, allEntityMetadatas: EntityMetadata[], driver: Driver) {\n\n // check if table metadata has an id\n if (!entityMetadata.primaryColumns.length && !entityMetadata.isJunction)\n throw new MissingPrimaryColumnError(entityMetadata);\n\n // validate if table is using inheritance it has a discriminator\n // also validate if discriminator values are not empty and not repeated\n if (entityMetadata.inheritancePattern === \"STI\" || entityMetadata.tableType === \"entity-child\") {\n if (!entityMetadata.discriminatorColumn)\n throw new TypeORMError(`Entity ${entityMetadata.name} using single-table inheritance, it should also have a discriminator column. Did you forget to put discriminator column options?`);\n\n if (typeof entityMetadata.discriminatorValue === \"undefined\")\n throw new TypeORMError(`Entity ${entityMetadata.name} has an undefined discriminator value. Discriminator value should be defined.`);\n\n const sameDiscriminatorValueEntityMetadata = allEntityMetadatas.find(metadata => {\n return metadata !== entityMetadata\n && (metadata.inheritancePattern === \"STI\" || metadata.tableType === \"entity-child\")\n && metadata.discriminatorValue === entityMetadata.discriminatorValue\n && metadata.inheritanceTree.some(parent => entityMetadata.inheritanceTree.indexOf(parent) !== -1);\n });\n if (sameDiscriminatorValueEntityMetadata)\n throw new TypeORMError(`Entities ${entityMetadata.name} and ${sameDiscriminatorValueEntityMetadata.name} have the same discriminator values. Make sure they are different while using the @ChildEntity decorator.`);\n }\n\n entityMetadata.relationCounts.forEach(relationCount => {\n if (relationCount.relation.isManyToOne || relationCount.relation.isOneToOne)\n throw new TypeORMError(`Relation count can not be implemented on ManyToOne or OneToOne relations.`);\n });\n\n if (!(driver instanceof MongoDriver)) {\n entityMetadata.columns.forEach(column => {\n const normalizedColumn = driver.normalizeType(column) as ColumnType;\n if (driver.supportedDataTypes.indexOf(normalizedColumn) === -1)\n throw new DataTypeNotSupportedError(column, normalizedColumn, driver.options.type);\n if (column.length && driver.withLengthColumnTypes.indexOf(normalizedColumn) === -1)\n throw new TypeORMError(`Column ${column.propertyName} of Entity ${entityMetadata.name} does not support length property.`);\n if (column.type === \"enum\" && !column.enum && !column.enumName)\n throw new TypeORMError(`Column \"${column.propertyName}\" of Entity \"${entityMetadata.name}\" is defined as enum, but missing \"enum\" or \"enumName\" properties.`);\n });\n }\n\n if (driver instanceof MysqlDriver || driver instanceof AuroraDataApiDriver) {\n const generatedColumns = entityMetadata.columns.filter(column => column.isGenerated && column.generationStrategy !== \"uuid\");\n if (generatedColumns.length > 1)\n throw new TypeORMError(`Error in ${entityMetadata.name} entity. There can be only one auto-increment column in MySql table.`);\n }\n\n // for mysql we are able to not define a default selected database, instead all entities can have their database\n // defined in their decorators. To make everything work either all entities must have database define and we\n // can live without database set in the connection options, either database in the connection options must be set\n if (driver instanceof MysqlDriver) {\n const metadatasWithDatabase = allEntityMetadatas.filter(metadata => metadata.database);\n if (metadatasWithDatabase.length === 0 && !driver.database)\n throw new NoConnectionOptionError(\"database\");\n }\n\n if (driver instanceof SqlServerDriver) {\n const charsetColumns = entityMetadata.columns.filter(column => column.charset);\n if (charsetColumns.length > 1)\n throw new TypeORMError(`Character set specifying is not supported in Sql Server`);\n }\n\n // check if relations are all without initialized properties\n const entityInstance = entityMetadata.create();\n entityMetadata.relations.forEach(relation => {\n if (relation.isManyToMany || relation.isOneToMany) {\n\n // we skip relations for which persistence is disabled since initialization in them cannot harm somehow\n if (relation.persistenceEnabled === false)\n return;\n\n // get entity relation value and check if its an array\n const relationInitializedValue = relation.getEntityValue(entityInstance);\n if (Array.isArray(relationInitializedValue))\n throw new InitializedRelationError(relation);\n }\n });\n\n // validate relations\n entityMetadata.relations.forEach(relation => {\n\n // check join tables:\n // using JoinTable is possible only on one side of the many-to-many relation\n // todo(dima): fix\n // if (relation.joinTable) {\n // if (!relation.isManyToMany)\n // throw new UsingJoinTableIsNotAllowedError(entityMetadata, relation);\n\n // // if there is inverse side of the relation, then check if it does not have join table too\n // if (relation.hasInverseSide && relation.inverseRelation.joinTable)\n // throw new UsingJoinTableOnlyOnOneSideAllowedError(entityMetadata, relation);\n // }\n\n // check join columns:\n // using JoinColumn is possible only on one side of the relation and on one-to-one, many-to-one relation types\n // first check if relation is one-to-one or many-to-one\n // todo(dima): fix\n /*if (relation.joinColumn) {\n\n // join column can be applied only on one-to-one and many-to-one relations\n if (!relation.isOneToOne && !relation.isManyToOne)\n throw new UsingJoinColumnIsNotAllowedError(entityMetadata, relation);\n\n // if there is inverse side of the relation, then check if it does not have join table too\n if (relation.hasInverseSide && relation.inverseRelation.joinColumn && relation.isOneToOne)\n throw new UsingJoinColumnOnlyOnOneSideAllowedError(entityMetadata, relation);\n\n // check if join column really has referenced column\n if (relation.joinColumn && !relation.joinColumn.referencedColumn)\n throw new TypeORMError(`Join column does not have referenced column set`);\n\n }\n\n // if its a one-to-one relation and JoinColumn is missing on both sides of the relation\n // or its one-side relation without JoinColumn we should give an error\n if (!relation.joinColumn && relation.isOneToOne && (!relation.hasInverseSide || !relation.inverseRelation.joinColumn))\n throw new MissingJoinColumnError(entityMetadata, relation);*/\n\n // if its a many-to-many relation and JoinTable is missing on both sides of the relation\n // or its one-side relation without JoinTable we should give an error\n // todo(dima): fix it\n // if (!relation.joinTable && relation.isManyToMany && (!relation.hasInverseSide || !relation.inverseRelation.joinTable))\n // throw new MissingJoinTableError(entityMetadata, relation);\n\n\n // todo: validate if its one-to-one and side which does not have join column MUST have inverse side\n // todo: validate if its many-to-many and side which does not have join table MUST have inverse side\n // todo: if there is a relation, and inverse side is specified only on one side, shall we give error\n // todo: with message like: \"Inverse side is specified only on one side of the relationship. Specify on other side too to prevent confusion\".\n // todo: add validation if there two entities with the same target, and show error message with description of the problem (maybe file was renamed/moved but left in output directory)\n // todo: check if there are multiple columns on the same column applied.\n // todo: check column type if is missing in relational databases (throw new TypeORMError(`Column type of ${type} cannot be determined.`);)\n // todo: include driver-specific checks. for example in mongodb empty prefixes are not allowed\n // todo: if multiple columns with same name - throw exception, including cases when columns are in embeds with same prefixes or without prefix at all\n // todo: if multiple primary key used, at least one of them must be unique or @Index decorator must be set on entity\n // todo: check if entity with duplicate names, some decorators exist\n\n\n });\n\n // make sure cascade remove is not set for both sides of relationships (can be set in OneToOne decorators)\n entityMetadata.relations.forEach(relation => {\n const isCircularCascadeRemove = relation.isCascadeRemove && relation.inverseRelation && relation.inverseRelation!.isCascadeRemove;\n if (isCircularCascadeRemove)\n throw new TypeORMError(`Relation ${entityMetadata.name}#${relation.propertyName} and ${relation.inverseRelation!.entityMetadata.name}#${relation.inverseRelation!.propertyName} both has cascade remove set. ` +\n `This may lead to unexpected circular removals. Please set cascade remove only from one side of relationship.`);\n }); // todo: maybe better just deny removal from one to one relation without join column?\n\n entityMetadata.eagerRelations.forEach(relation => {\n\n });\n }\n\n /**\n * Validates dependencies of the entity metadatas.\n */\n protected validateDependencies(entityMetadatas: EntityMetadata[]) {\n\n const graph = new DepGraph();\n entityMetadatas.forEach(entityMetadata => {\n graph.addNode(entityMetadata.name);\n });\n entityMetadatas.forEach(entityMetadata => {\n entityMetadata.relationsWithJoinColumns\n .filter(relation => !relation.isNullable)\n .forEach(relation => {\n graph.addDependency(entityMetadata.name, relation.inverseEntityMetadata.name);\n });\n });\n try {\n graph.overallOrder();\n\n } catch (err) {\n throw new CircularRelationsError(err.toString().replace(\"Error: Dependency Cycle Found: \", \"\"));\n }\n }\n\n /**\n * Validates eager relations to prevent circular dependency in them.\n */\n protected validateEagerRelations(entityMetadatas: EntityMetadata[]) {\n entityMetadatas.forEach(entityMetadata => {\n entityMetadata.eagerRelations.forEach(relation => {\n if (relation.inverseRelation && relation.inverseRelation.isEager)\n throw new TypeORMError(`Circular eager relations are disallowed. ` +\n `${entityMetadata.targetName}#${relation.propertyPath} contains \"eager: true\", and its inverse side ` +\n `${relation.inverseEntityMetadata.targetName}#${relation.inverseRelation.propertyPath} contains \"eager: true\" as well.` +\n ` Remove \"eager: true\" from one side of the relation.`);\n });\n });\n }\n\n}\n"],"sourceRoot":".."}
1
+ {"version":3,"sources":["../../src/metadata-builder/EntityMetadataValidator.ts"],"names":[],"mappings":"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","file":"EntityMetadataValidator.js","sourcesContent":["import {EntityMetadata} from \"../metadata/EntityMetadata\";\nimport {MissingPrimaryColumnError} from \"../error/MissingPrimaryColumnError\";\nimport {CircularRelationsError} from \"../error/CircularRelationsError\";\nimport {DepGraph} from \"../util/DepGraph\";\nimport {Driver} from \"../driver/Driver\";\nimport {DataTypeNotSupportedError} from \"../error/DataTypeNotSupportedError\";\nimport {ColumnType} from \"../driver/types/ColumnTypes\";\nimport {MongoDriver} from \"../driver/mongodb/MongoDriver\";\nimport {SqlServerDriver} from \"../driver/sqlserver/SqlServerDriver\";\nimport {MysqlDriver} from \"../driver/mysql/MysqlDriver\";\nimport {NoConnectionOptionError} from \"../error/NoConnectionOptionError\";\nimport {InitializedRelationError} from \"../error/InitializedRelationError\";\nimport {AuroraDataApiDriver} from \"../driver/aurora-data-api/AuroraDataApiDriver\";\nimport { TypeORMError } from \"../error\";\n\n/// todo: add check if there are multiple tables with the same name\n/// todo: add checks when generated column / table names are too long for the specific driver\n// todo: type in function validation, inverse side function validation\n// todo: check on build for duplicate names, since naming checking was removed from MetadataStorage\n// todo: duplicate name checking for: table, relation, column, index, naming strategy, join tables/columns?\n// todo: check if multiple tree parent metadatas in validator\n// todo: tree decorators can be used only on closure table (validation)\n// todo: throw error if parent tree metadata was not specified in a closure table\n\n// todo: MetadataArgsStorage: type in function validation, inverse side function validation\n// todo: MetadataArgsStorage: check on build for duplicate names, since naming checking was removed from MetadataStorage\n// todo: MetadataArgsStorage: duplicate name checking for: table, relation, column, index, naming strategy, join tables/columns?\n// todo: MetadataArgsStorage: check for duplicate targets too since this check has been removed too\n// todo: check if relation decorator contains primary: true and nullable: true\n// todo: check column length, precision. scale\n// todo: MySQL index can be unique or spatial or fulltext\n\n/**\n * Validates built entity metadatas.\n */\nexport class EntityMetadataValidator {\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Validates all given entity metadatas.\n */\n validateMany(entityMetadatas: EntityMetadata[], driver: Driver) {\n entityMetadatas.forEach(entityMetadata => this.validate(entityMetadata, entityMetadatas, driver));\n this.validateDependencies(entityMetadatas);\n this.validateEagerRelations(entityMetadatas);\n }\n\n /**\n * Validates given entity metadata.\n */\n validate(entityMetadata: EntityMetadata, allEntityMetadatas: EntityMetadata[], driver: Driver) {\n\n // check if table metadata has an id\n if (!entityMetadata.primaryColumns.length && !entityMetadata.isJunction)\n throw new MissingPrimaryColumnError(entityMetadata);\n\n // validate if table is using inheritance it has a discriminator\n // also validate if discriminator values are not empty and not repeated\n if (entityMetadata.inheritancePattern === \"STI\" || entityMetadata.tableType === \"entity-child\") {\n if (!entityMetadata.discriminatorColumn)\n throw new TypeORMError(`Entity ${entityMetadata.name} using single-table inheritance, it should also have a discriminator column. Did you forget to put discriminator column options?`);\n\n if (typeof entityMetadata.discriminatorValue === \"undefined\")\n throw new TypeORMError(`Entity ${entityMetadata.name} has an undefined discriminator value. Discriminator value should be defined.`);\n\n const sameDiscriminatorValueEntityMetadata = allEntityMetadatas.find(metadata => {\n return metadata !== entityMetadata\n && (metadata.inheritancePattern === \"STI\" || metadata.tableType === \"entity-child\")\n && metadata.tableName === entityMetadata.tableName\n && metadata.discriminatorValue === entityMetadata.discriminatorValue\n && metadata.inheritanceTree.some(parent => entityMetadata.inheritanceTree.indexOf(parent) !== -1);\n });\n if (sameDiscriminatorValueEntityMetadata)\n throw new TypeORMError(`Entities ${entityMetadata.name} and ${sameDiscriminatorValueEntityMetadata.name} have the same discriminator values. Make sure they are different while using the @ChildEntity decorator.`);\n }\n\n entityMetadata.relationCounts.forEach(relationCount => {\n if (relationCount.relation.isManyToOne || relationCount.relation.isOneToOne)\n throw new TypeORMError(`Relation count can not be implemented on ManyToOne or OneToOne relations.`);\n });\n\n if (!(driver instanceof MongoDriver)) {\n entityMetadata.columns.forEach(column => {\n const normalizedColumn = driver.normalizeType(column) as ColumnType;\n if (driver.supportedDataTypes.indexOf(normalizedColumn) === -1)\n throw new DataTypeNotSupportedError(column, normalizedColumn, driver.options.type);\n if (column.length && driver.withLengthColumnTypes.indexOf(normalizedColumn) === -1)\n throw new TypeORMError(`Column ${column.propertyName} of Entity ${entityMetadata.name} does not support length property.`);\n if (column.type === \"enum\" && !column.enum && !column.enumName)\n throw new TypeORMError(`Column \"${column.propertyName}\" of Entity \"${entityMetadata.name}\" is defined as enum, but missing \"enum\" or \"enumName\" properties.`);\n });\n }\n\n if (driver instanceof MysqlDriver || driver instanceof AuroraDataApiDriver) {\n const generatedColumns = entityMetadata.columns.filter(column => column.isGenerated && column.generationStrategy !== \"uuid\");\n if (generatedColumns.length > 1)\n throw new TypeORMError(`Error in ${entityMetadata.name} entity. There can be only one auto-increment column in MySql table.`);\n }\n\n // for mysql we are able to not define a default selected database, instead all entities can have their database\n // defined in their decorators. To make everything work either all entities must have database define and we\n // can live without database set in the connection options, either database in the connection options must be set\n if (driver instanceof MysqlDriver) {\n const metadatasWithDatabase = allEntityMetadatas.filter(metadata => metadata.database);\n if (metadatasWithDatabase.length === 0 && !driver.database)\n throw new NoConnectionOptionError(\"database\");\n }\n\n if (driver instanceof SqlServerDriver) {\n const charsetColumns = entityMetadata.columns.filter(column => column.charset);\n if (charsetColumns.length > 1)\n throw new TypeORMError(`Character set specifying is not supported in Sql Server`);\n }\n\n // check if relations are all without initialized properties\n const entityInstance = entityMetadata.create();\n entityMetadata.relations.forEach(relation => {\n if (relation.isManyToMany || relation.isOneToMany) {\n\n // we skip relations for which persistence is disabled since initialization in them cannot harm somehow\n if (relation.persistenceEnabled === false)\n return;\n\n // get entity relation value and check if its an array\n const relationInitializedValue = relation.getEntityValue(entityInstance);\n if (Array.isArray(relationInitializedValue))\n throw new InitializedRelationError(relation);\n }\n });\n\n // validate relations\n entityMetadata.relations.forEach(relation => {\n\n // check join tables:\n // using JoinTable is possible only on one side of the many-to-many relation\n // todo(dima): fix\n // if (relation.joinTable) {\n // if (!relation.isManyToMany)\n // throw new UsingJoinTableIsNotAllowedError(entityMetadata, relation);\n\n // // if there is inverse side of the relation, then check if it does not have join table too\n // if (relation.hasInverseSide && relation.inverseRelation.joinTable)\n // throw new UsingJoinTableOnlyOnOneSideAllowedError(entityMetadata, relation);\n // }\n\n // check join columns:\n // using JoinColumn is possible only on one side of the relation and on one-to-one, many-to-one relation types\n // first check if relation is one-to-one or many-to-one\n // todo(dima): fix\n /*if (relation.joinColumn) {\n\n // join column can be applied only on one-to-one and many-to-one relations\n if (!relation.isOneToOne && !relation.isManyToOne)\n throw new UsingJoinColumnIsNotAllowedError(entityMetadata, relation);\n\n // if there is inverse side of the relation, then check if it does not have join table too\n if (relation.hasInverseSide && relation.inverseRelation.joinColumn && relation.isOneToOne)\n throw new UsingJoinColumnOnlyOnOneSideAllowedError(entityMetadata, relation);\n\n // check if join column really has referenced column\n if (relation.joinColumn && !relation.joinColumn.referencedColumn)\n throw new TypeORMError(`Join column does not have referenced column set`);\n\n }\n\n // if its a one-to-one relation and JoinColumn is missing on both sides of the relation\n // or its one-side relation without JoinColumn we should give an error\n if (!relation.joinColumn && relation.isOneToOne && (!relation.hasInverseSide || !relation.inverseRelation.joinColumn))\n throw new MissingJoinColumnError(entityMetadata, relation);*/\n\n // if its a many-to-many relation and JoinTable is missing on both sides of the relation\n // or its one-side relation without JoinTable we should give an error\n // todo(dima): fix it\n // if (!relation.joinTable && relation.isManyToMany && (!relation.hasInverseSide || !relation.inverseRelation.joinTable))\n // throw new MissingJoinTableError(entityMetadata, relation);\n\n\n // todo: validate if its one-to-one and side which does not have join column MUST have inverse side\n // todo: validate if its many-to-many and side which does not have join table MUST have inverse side\n // todo: if there is a relation, and inverse side is specified only on one side, shall we give error\n // todo: with message like: \"Inverse side is specified only on one side of the relationship. Specify on other side too to prevent confusion\".\n // todo: add validation if there two entities with the same target, and show error message with description of the problem (maybe file was renamed/moved but left in output directory)\n // todo: check if there are multiple columns on the same column applied.\n // todo: check column type if is missing in relational databases (throw new TypeORMError(`Column type of ${type} cannot be determined.`);)\n // todo: include driver-specific checks. for example in mongodb empty prefixes are not allowed\n // todo: if multiple columns with same name - throw exception, including cases when columns are in embeds with same prefixes or without prefix at all\n // todo: if multiple primary key used, at least one of them must be unique or @Index decorator must be set on entity\n // todo: check if entity with duplicate names, some decorators exist\n\n\n });\n\n // make sure cascade remove is not set for both sides of relationships (can be set in OneToOne decorators)\n entityMetadata.relations.forEach(relation => {\n const isCircularCascadeRemove = relation.isCascadeRemove && relation.inverseRelation && relation.inverseRelation!.isCascadeRemove;\n if (isCircularCascadeRemove)\n throw new TypeORMError(`Relation ${entityMetadata.name}#${relation.propertyName} and ${relation.inverseRelation!.entityMetadata.name}#${relation.inverseRelation!.propertyName} both has cascade remove set. ` +\n `This may lead to unexpected circular removals. Please set cascade remove only from one side of relationship.`);\n }); // todo: maybe better just deny removal from one to one relation without join column?\n\n entityMetadata.eagerRelations.forEach(relation => {\n\n });\n }\n\n /**\n * Validates dependencies of the entity metadatas.\n */\n protected validateDependencies(entityMetadatas: EntityMetadata[]) {\n\n const graph = new DepGraph();\n entityMetadatas.forEach(entityMetadata => {\n graph.addNode(entityMetadata.name);\n });\n entityMetadatas.forEach(entityMetadata => {\n entityMetadata.relationsWithJoinColumns\n .filter(relation => !relation.isNullable)\n .forEach(relation => {\n graph.addDependency(entityMetadata.name, relation.inverseEntityMetadata.name);\n });\n });\n try {\n graph.overallOrder();\n\n } catch (err) {\n throw new CircularRelationsError(err.toString().replace(\"Error: Dependency Cycle Found: \", \"\"));\n }\n }\n\n /**\n * Validates eager relations to prevent circular dependency in them.\n */\n protected validateEagerRelations(entityMetadatas: EntityMetadata[]) {\n entityMetadatas.forEach(entityMetadata => {\n entityMetadata.eagerRelations.forEach(relation => {\n if (relation.inverseRelation && relation.inverseRelation.isEager)\n throw new TypeORMError(`Circular eager relations are disallowed. ` +\n `${entityMetadata.targetName}#${relation.propertyPath} contains \"eager: true\", and its inverse side ` +\n `${relation.inverseEntityMetadata.targetName}#${relation.inverseRelation.propertyPath} contains \"eager: true\" as well.` +\n ` Remove \"eager: true\" from one side of the relation.`);\n });\n });\n }\n\n}\n"],"sourceRoot":".."}
@@ -6,6 +6,7 @@ var Table_1 = require("../schema-builder/table/Table");
6
6
  var Migration_1 = require("./Migration");
7
7
  var SqlServerDriver_1 = require("../driver/sqlserver/SqlServerDriver");
8
8
  var MssqlParameter_1 = require("../driver/sqlserver/MssqlParameter");
9
+ var RdbmsSchemaBuilder_1 = require("../schema-builder/RdbmsSchemaBuilder");
9
10
  var MongoDriver_1 = require("../driver/mongodb/MongoDriver");
10
11
  var error_1 = require("../error");
11
12
  /**
@@ -194,7 +195,7 @@ var MigrationExecutor = /** @class */ (function () {
194
195
  */
195
196
  MigrationExecutor.prototype.executePendingMigrations = function () {
196
197
  return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
197
- var queryRunner, executedMigrations, lastTimeExecutedMigration, allMigrations, successMigrations, pendingMigrations, transactionStartedByUs, _loop_2, this_2, pendingMigrations_1, pendingMigrations_1_1, migration, e_2_1, err_1, rollbackError_1;
198
+ var queryRunner, schemaBuilder, executedMigrations, lastTimeExecutedMigration, allMigrations, successMigrations, pendingMigrations, transactionStartedByUs, _loop_2, this_2, pendingMigrations_1, pendingMigrations_1_1, migration, e_2_1, err_1, rollbackError_1;
198
199
  var e_2, _a;
199
200
  var _this = this;
200
201
  return (0, tslib_1.__generator)(this, function (_b) {
@@ -206,8 +207,14 @@ var MigrationExecutor = /** @class */ (function () {
206
207
  case 1:
207
208
  // create migrations table if its not created yet
208
209
  _b.sent();
209
- return [4 /*yield*/, this.loadExecutedMigrations(queryRunner)];
210
+ schemaBuilder = this.connection.driver.createSchemaBuilder();
211
+ if (!(schemaBuilder instanceof RdbmsSchemaBuilder_1.RdbmsSchemaBuilder)) return [3 /*break*/, 3];
212
+ return [4 /*yield*/, schemaBuilder.createMetadataTableIfNecessary(queryRunner)];
210
213
  case 2:
214
+ _b.sent();
215
+ _b.label = 3;
216
+ case 3: return [4 /*yield*/, this.loadExecutedMigrations(queryRunner)];
217
+ case 4:
211
218
  executedMigrations = _b.sent();
212
219
  lastTimeExecutedMigration = this.getLatestTimestampMigration(executedMigrations);
213
220
  allMigrations = this.getMigrations();
@@ -223,15 +230,15 @@ var MigrationExecutor = /** @class */ (function () {
223
230
  // every check is passed means that migration was not run yet and we need to run it
224
231
  return true;
225
232
  });
226
- if (!!pendingMigrations.length) return [3 /*break*/, 5];
233
+ if (!!pendingMigrations.length) return [3 /*break*/, 7];
227
234
  this.connection.logger.logSchemaBuild("No migrations are pending");
228
- if (!!this.queryRunner) return [3 /*break*/, 4];
235
+ if (!!this.queryRunner) return [3 /*break*/, 6];
229
236
  return [4 /*yield*/, queryRunner.release()];
230
- case 3:
231
- _b.sent();
232
- _b.label = 4;
233
- case 4: return [2 /*return*/, []];
234
237
  case 5:
238
+ _b.sent();
239
+ _b.label = 6;
240
+ case 6: return [2 /*return*/, []];
241
+ case 7:
235
242
  // log information about migration execution
236
243
  this.connection.logger.logSchemaBuild(executedMigrations.length + " migrations are already loaded in the database.");
237
244
  this.connection.logger.logSchemaBuild(allMigrations.length + " migrations were found in the source code.");
@@ -239,14 +246,14 @@ var MigrationExecutor = /** @class */ (function () {
239
246
  this.connection.logger.logSchemaBuild(lastTimeExecutedMigration.name + " is the last executed migration. It was executed on " + new Date(lastTimeExecutedMigration.timestamp).toString() + ".");
240
247
  this.connection.logger.logSchemaBuild(pendingMigrations.length + " migrations are new migrations that needs to be executed.");
241
248
  transactionStartedByUs = false;
242
- if (!(this.transaction === "all" && !queryRunner.isTransactionActive)) return [3 /*break*/, 7];
249
+ if (!(this.transaction === "all" && !queryRunner.isTransactionActive)) return [3 /*break*/, 9];
243
250
  return [4 /*yield*/, queryRunner.startTransaction()];
244
- case 6:
251
+ case 8:
245
252
  _b.sent();
246
253
  transactionStartedByUs = true;
247
- _b.label = 7;
248
- case 7:
249
- _b.trys.push([7, 18, 23, 26]);
254
+ _b.label = 9;
255
+ case 9:
256
+ _b.trys.push([9, 20, 25, 28]);
250
257
  _loop_2 = function (migration) {
251
258
  return (0, tslib_1.__generator)(this, function (_c) {
252
259
  switch (_c.label) {
@@ -259,7 +266,7 @@ var MigrationExecutor = /** @class */ (function () {
259
266
  _c.label = 2;
260
267
  case 2: return [4 /*yield*/, migration.instance.up(queryRunner)
261
268
  .catch(function (error) {
262
- _this.connection.logger.logMigration("Migration \"" + migration.name + "\" has been failed, error: " + (error === null || error === void 0 ? void 0 : error.message));
269
+ _this.connection.logger.logMigration("Migration \"" + migration.name + "\" failed, error: " + (error === null || error === void 0 ? void 0 : error.message));
263
270
  throw error;
264
271
  })
265
272
  .then(function () { return (0, tslib_1.__awaiter)(_this, void 0, void 0, function () {
@@ -289,61 +296,61 @@ var MigrationExecutor = /** @class */ (function () {
289
296
  });
290
297
  };
291
298
  this_2 = this;
292
- _b.label = 8;
293
- case 8:
294
- _b.trys.push([8, 13, 14, 15]);
299
+ _b.label = 10;
300
+ case 10:
301
+ _b.trys.push([10, 15, 16, 17]);
295
302
  pendingMigrations_1 = (0, tslib_1.__values)(pendingMigrations), pendingMigrations_1_1 = pendingMigrations_1.next();
296
- _b.label = 9;
297
- case 9:
298
- if (!!pendingMigrations_1_1.done) return [3 /*break*/, 12];
303
+ _b.label = 11;
304
+ case 11:
305
+ if (!!pendingMigrations_1_1.done) return [3 /*break*/, 14];
299
306
  migration = pendingMigrations_1_1.value;
300
307
  return [5 /*yield**/, _loop_2(migration)];
301
- case 10:
308
+ case 12:
302
309
  _b.sent();
303
- _b.label = 11;
304
- case 11:
305
- pendingMigrations_1_1 = pendingMigrations_1.next();
306
- return [3 /*break*/, 9];
307
- case 12: return [3 /*break*/, 15];
310
+ _b.label = 13;
308
311
  case 13:
312
+ pendingMigrations_1_1 = pendingMigrations_1.next();
313
+ return [3 /*break*/, 11];
314
+ case 14: return [3 /*break*/, 17];
315
+ case 15:
309
316
  e_2_1 = _b.sent();
310
317
  e_2 = { error: e_2_1 };
311
- return [3 /*break*/, 15];
312
- case 14:
318
+ return [3 /*break*/, 17];
319
+ case 16:
313
320
  try {
314
321
  if (pendingMigrations_1_1 && !pendingMigrations_1_1.done && (_a = pendingMigrations_1.return)) _a.call(pendingMigrations_1);
315
322
  }
316
323
  finally { if (e_2) throw e_2.error; }
317
324
  return [7 /*endfinally*/];
318
- case 15:
319
- if (!(this.transaction === "all" && transactionStartedByUs)) return [3 /*break*/, 17];
325
+ case 17:
326
+ if (!(this.transaction === "all" && transactionStartedByUs)) return [3 /*break*/, 19];
320
327
  return [4 /*yield*/, queryRunner.commitTransaction()];
321
- case 16:
322
- _b.sent();
323
- _b.label = 17;
324
- case 17: return [3 /*break*/, 26];
325
328
  case 18:
326
- err_1 = _b.sent();
327
- if (!transactionStartedByUs) return [3 /*break*/, 22];
329
+ _b.sent();
328
330
  _b.label = 19;
329
- case 19:
330
- _b.trys.push([19, 21, , 22]);
331
- return [4 /*yield*/, queryRunner.rollbackTransaction()];
331
+ case 19: return [3 /*break*/, 28];
332
332
  case 20:
333
- _b.sent();
334
- return [3 /*break*/, 22];
333
+ err_1 = _b.sent();
334
+ if (!transactionStartedByUs) return [3 /*break*/, 24];
335
+ _b.label = 21;
335
336
  case 21:
336
- rollbackError_1 = _b.sent();
337
- return [3 /*break*/, 22];
338
- case 22: throw err_1;
337
+ _b.trys.push([21, 23, , 24]);
338
+ return [4 /*yield*/, queryRunner.rollbackTransaction()];
339
+ case 22:
340
+ _b.sent();
341
+ return [3 /*break*/, 24];
339
342
  case 23:
340
- if (!!this.queryRunner) return [3 /*break*/, 25];
343
+ rollbackError_1 = _b.sent();
344
+ return [3 /*break*/, 24];
345
+ case 24: throw err_1;
346
+ case 25:
347
+ if (!!this.queryRunner) return [3 /*break*/, 27];
341
348
  return [4 /*yield*/, queryRunner.release()];
342
- case 24:
349
+ case 26:
343
350
  _b.sent();
344
- _b.label = 25;
345
- case 25: return [7 /*endfinally*/];
346
- case 26: return [2 /*return*/, successMigrations];
351
+ _b.label = 27;
352
+ case 27: return [7 /*endfinally*/];
353
+ case 28: return [2 /*return*/, successMigrations];
347
354
  }
348
355
  });
349
356
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/migration/MigrationExecutor.ts"],"names":[],"mappings":"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","file":"MigrationExecutor.js","sourcesContent":["import {Table} from \"../schema-builder/table/Table\";\nimport {Connection} from \"../connection/Connection\";\nimport {Migration} from \"./Migration\";\nimport {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {QueryRunner} from \"../query-runner/QueryRunner\";\nimport {SqlServerDriver} from \"../driver/sqlserver/SqlServerDriver\";\nimport {MssqlParameter} from \"../driver/sqlserver/MssqlParameter\";\nimport {MongoDriver} from \"../driver/mongodb/MongoDriver\";\nimport {MongoQueryRunner} from \"../driver/mongodb/MongoQueryRunner\";\nimport { TypeORMError } from \"../error\";\n\n/**\n * Executes migrations: runs pending and reverts previously executed migrations.\n */\nexport class MigrationExecutor {\n\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n\n /**\n * Indicates how migrations should be run in transactions.\n * all: all migrations are run in a single transaction\n * none: all migrations are run without a transaction\n * each: each migration is run in a separate transaction\n */\n transaction: \"all\" | \"none\" | \"each\" = \"all\";\n\n // -------------------------------------------------------------------------\n // Private Properties\n // -------------------------------------------------------------------------\n\n private readonly migrationsDatabase?: string;\n private readonly migrationsSchema?: string;\n private readonly migrationsTable: string;\n private readonly migrationsTableName: string;\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(protected connection: Connection,\n protected queryRunner?: QueryRunner) {\n\n const { schema } = this.connection.driver.options as any;\n const database = this.connection.driver.database;\n this.migrationsDatabase = database;\n this.migrationsSchema = schema;\n this.migrationsTableName = connection.options.migrationsTableName || \"migrations\";\n this.migrationsTable = this.connection.driver.buildTableName(this.migrationsTableName, schema, database);\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Tries to execute a single migration given.\n */\n public async executeMigration(migration: Migration): Promise<Migration> {\n return this.withQueryRunner(async (queryRunner) => {\n await this.createMigrationsTableIfNotExist(queryRunner);\n await (migration.instance as any).up(queryRunner);\n await this.insertExecutedMigration(queryRunner, migration);\n\n return migration;\n });\n }\n\n /**\n * Returns an array of all migrations.\n */\n public async getAllMigrations(): Promise<Migration[]> {\n return Promise.resolve(this.getMigrations());\n }\n\n /**\n * Returns an array of all executed migrations.\n */\n public async getExecutedMigrations(): Promise<Migration[]> {\n return this.withQueryRunner(async queryRunner => {\n await this.createMigrationsTableIfNotExist(queryRunner);\n\n return await this.loadExecutedMigrations(queryRunner);\n });\n }\n\n /**\n * Returns an array of all pending migrations.\n */\n public async getPendingMigrations(): Promise<Migration[]> {\n const allMigrations = await this.getAllMigrations();\n const executedMigrations = await this.getExecutedMigrations();\n\n return allMigrations.filter(migration =>\n !executedMigrations.find(\n executedMigration =>\n executedMigration.name === migration.name\n )\n );\n }\n\n /**\n * Inserts an executed migration.\n */\n public insertMigration(migration: Migration): Promise<void> {\n return this.withQueryRunner(q => this.insertExecutedMigration(q, migration));\n }\n\n /**\n * Deletes an executed migration.\n */\n public deleteMigration(migration: Migration): Promise<void> {\n return this.withQueryRunner(q => this.deleteExecutedMigration(q, migration));\n }\n\n /**\n * Lists all migrations and whether they have been executed or not\n * returns true if there are unapplied migrations\n */\n async showMigrations(): Promise<boolean> {\n let hasUnappliedMigrations = false;\n const queryRunner = this.queryRunner || this.connection.createQueryRunner();\n // create migrations table if its not created yet\n await this.createMigrationsTableIfNotExist(queryRunner);\n // get all migrations that are executed and saved in the database\n const executedMigrations = await this.loadExecutedMigrations(queryRunner);\n\n // get all user's migrations in the source code\n const allMigrations = this.getMigrations();\n\n for (const migration of allMigrations) {\n const executedMigration = executedMigrations.find(executedMigration => executedMigration.name === migration.name);\n\n if (executedMigration) {\n this.connection.logger.logSchemaBuild(` [X] ${migration.name}`);\n } else {\n hasUnappliedMigrations = true;\n this.connection.logger.logSchemaBuild(` [ ] ${migration.name}`);\n }\n }\n\n // if query runner was created by us then release it\n if (!this.queryRunner) {\n await queryRunner.release();\n }\n\n return hasUnappliedMigrations;\n }\n\n /**\n * Executes all pending migrations. Pending migrations are migrations that are not yet executed,\n * thus not saved in the database.\n */\n async executePendingMigrations(): Promise<Migration[]> {\n\n const queryRunner = this.queryRunner || this.connection.createQueryRunner();\n // create migrations table if its not created yet\n await this.createMigrationsTableIfNotExist(queryRunner);\n // get all migrations that are executed and saved in the database\n const executedMigrations = await this.loadExecutedMigrations(queryRunner);\n\n // get the time when last migration was executed\n let lastTimeExecutedMigration = this.getLatestTimestampMigration(executedMigrations);\n\n // get all user's migrations in the source code\n const allMigrations = this.getMigrations();\n\n // variable to store all migrations we did successefuly\n const successMigrations: Migration[] = [];\n\n // find all migrations that needs to be executed\n const pendingMigrations = allMigrations.filter(migration => {\n // check if we already have executed migration\n const executedMigration = executedMigrations.find(executedMigration => executedMigration.name === migration.name);\n if (executedMigration)\n return false;\n\n // migration is new and not executed. now check if its timestamp is correct\n // if (lastTimeExecutedMigration && migration.timestamp < lastTimeExecutedMigration.timestamp)\n // throw new TypeORMError(`New migration found: ${migration.name}, however this migration's timestamp is not valid. Migration's timestamp should not be older then migrations already executed in the database.`);\n\n // every check is passed means that migration was not run yet and we need to run it\n return true;\n });\n\n // if no migrations are pending then nothing to do here\n if (!pendingMigrations.length) {\n this.connection.logger.logSchemaBuild(`No migrations are pending`);\n // if query runner was created by us then release it\n if (!this.queryRunner)\n await queryRunner.release();\n return [];\n }\n\n // log information about migration execution\n this.connection.logger.logSchemaBuild(`${executedMigrations.length} migrations are already loaded in the database.`);\n this.connection.logger.logSchemaBuild(`${allMigrations.length} migrations were found in the source code.`);\n if (lastTimeExecutedMigration)\n this.connection.logger.logSchemaBuild(`${lastTimeExecutedMigration.name} is the last executed migration. It was executed on ${new Date(lastTimeExecutedMigration.timestamp).toString()}.`);\n this.connection.logger.logSchemaBuild(`${pendingMigrations.length} migrations are new migrations that needs to be executed.`);\n\n // start transaction if its not started yet\n let transactionStartedByUs = false;\n if (this.transaction === \"all\" && !queryRunner.isTransactionActive) {\n await queryRunner.startTransaction();\n transactionStartedByUs = true;\n }\n\n // run all pending migrations in a sequence\n try {\n for (const migration of pendingMigrations) {\n if (this.transaction === \"each\" && !queryRunner.isTransactionActive) {\n await queryRunner.startTransaction();\n transactionStartedByUs = true;\n }\n\n await migration.instance!.up(queryRunner)\n .catch(error => { // informative log about migration failure\n this.connection.logger.logMigration(`Migration \"${migration.name}\" has been failed, error: ${error?.message}`);\n throw error;\n })\n .then(async () => { // now when migration is executed we need to insert record about it into the database\n await this.insertExecutedMigration(queryRunner, migration);\n // commit transaction if we started it\n if (this.transaction === \"each\" && transactionStartedByUs)\n await queryRunner.commitTransaction();\n })\n .then(() => { // informative log about migration success\n successMigrations.push(migration);\n this.connection.logger.logSchemaBuild(`Migration ${migration.name} has been executed successfully.`);\n });\n }\n\n // commit transaction if we started it\n if (this.transaction === \"all\" && transactionStartedByUs)\n await queryRunner.commitTransaction();\n\n } catch (err) { // rollback transaction if we started it\n if (transactionStartedByUs) {\n try { // we throw original error even if rollback thrown an error\n await queryRunner.rollbackTransaction();\n } catch (rollbackError) { }\n }\n\n throw err;\n\n } finally {\n\n // if query runner was created by us then release it\n if (!this.queryRunner)\n await queryRunner.release();\n }\n return successMigrations;\n\n }\n\n /**\n * Reverts last migration that were run.\n */\n async undoLastMigration(): Promise<void> {\n\n const queryRunner = this.queryRunner || this.connection.createQueryRunner();\n\n // create migrations table if its not created yet\n await this.createMigrationsTableIfNotExist(queryRunner);\n\n // get all migrations that are executed and saved in the database\n const executedMigrations = await this.loadExecutedMigrations(queryRunner);\n\n // get the time when last migration was executed\n let lastTimeExecutedMigration = this.getLatestExecutedMigration(executedMigrations);\n\n // if no migrations found in the database then nothing to revert\n if (!lastTimeExecutedMigration) {\n this.connection.logger.logSchemaBuild(`No migrations was found in the database. Nothing to revert!`);\n return;\n }\n\n // get all user's migrations in the source code\n const allMigrations = this.getMigrations();\n\n // find the instance of the migration we need to remove\n const migrationToRevert = allMigrations.find(migration => migration.name === lastTimeExecutedMigration!.name);\n\n // if no migrations found in the database then nothing to revert\n if (!migrationToRevert)\n throw new TypeORMError(`No migration ${lastTimeExecutedMigration.name} was found in the source code. Make sure you have this migration in your codebase and its included in the connection options.`);\n\n // log information about migration execution\n this.connection.logger.logSchemaBuild(`${executedMigrations.length} migrations are already loaded in the database.`);\n this.connection.logger.logSchemaBuild(`${lastTimeExecutedMigration.name} is the last executed migration. It was executed on ${new Date(lastTimeExecutedMigration.timestamp).toString()}.`);\n this.connection.logger.logSchemaBuild(`Now reverting it...`);\n\n // start transaction if its not started yet\n let transactionStartedByUs = false;\n if ((this.transaction !== \"none\") && !queryRunner.isTransactionActive) {\n await queryRunner.startTransaction();\n transactionStartedByUs = true;\n }\n\n try {\n await migrationToRevert.instance!.down(queryRunner);\n await this.deleteExecutedMigration(queryRunner, migrationToRevert);\n this.connection.logger.logSchemaBuild(`Migration ${migrationToRevert.name} has been reverted successfully.`);\n\n // commit transaction if we started it\n if (transactionStartedByUs)\n await queryRunner.commitTransaction();\n\n } catch (err) { // rollback transaction if we started it\n if (transactionStartedByUs) {\n try { // we throw original error even if rollback thrown an error\n await queryRunner.rollbackTransaction();\n } catch (rollbackError) { }\n }\n\n throw err;\n\n } finally {\n\n // if query runner was created by us then release it\n if (!this.queryRunner)\n await queryRunner.release();\n }\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates table \"migrations\" that will store information about executed migrations.\n */\n protected async createMigrationsTableIfNotExist(queryRunner: QueryRunner): Promise<void> {\n // If driver is mongo no need to create\n if (this.connection.driver instanceof MongoDriver) {\n return;\n }\n const tableExist = await queryRunner.hasTable(this.migrationsTable); // todo: table name should be configurable\n if (!tableExist) {\n await queryRunner.createTable(new Table(\n {\n database: this.migrationsDatabase,\n schema: this.migrationsSchema,\n name: this.migrationsTable,\n columns: [\n {\n name: \"id\",\n type: this.connection.driver.normalizeType({type: this.connection.driver.mappedDataTypes.migrationId}),\n isGenerated: true,\n generationStrategy: \"increment\",\n isPrimary: true,\n isNullable: false\n },\n {\n name: \"timestamp\",\n type: this.connection.driver.normalizeType({type: this.connection.driver.mappedDataTypes.migrationTimestamp}),\n isPrimary: false,\n isNullable: false\n },\n {\n name: \"name\",\n type: this.connection.driver.normalizeType({type: this.connection.driver.mappedDataTypes.migrationName}),\n isNullable: false\n },\n ]\n },\n ));\n }\n }\n\n /**\n * Loads all migrations that were executed and saved into the database (sorts by id).\n */\n protected async loadExecutedMigrations(queryRunner: QueryRunner): Promise<Migration[]> {\n if (this.connection.driver instanceof MongoDriver) {\n const mongoRunner = queryRunner as MongoQueryRunner;\n return await mongoRunner.databaseConnection\n .db(this.connection.driver.database!)\n .collection(this.migrationsTableName)\n .find<Migration>()\n .sort({\"_id\": -1})\n .toArray();\n } else {\n const migrationsRaw: ObjectLiteral[] = await this.connection.manager\n .createQueryBuilder(queryRunner)\n .select()\n .orderBy(this.connection.driver.escape(\"id\"), \"DESC\")\n .from(this.migrationsTable, this.migrationsTableName)\n .getRawMany();\n return migrationsRaw.map(migrationRaw => {\n return new Migration(parseInt(migrationRaw[\"id\"]), parseInt(migrationRaw[\"timestamp\"]), migrationRaw[\"name\"]);\n });\n }\n }\n\n /**\n * Gets all migrations that setup for this connection.\n */\n protected getMigrations(): Migration[] {\n const migrations = this.connection.migrations.map(migration => {\n const migrationClassName = migration.name || (migration.constructor as any).name;\n const migrationTimestamp = parseInt(migrationClassName.substr(-13), 10);\n if (!migrationTimestamp || isNaN(migrationTimestamp)) {\n throw new TypeORMError(`${migrationClassName} migration name is wrong. Migration class name should have a JavaScript timestamp appended.`);\n }\n\n return new Migration(undefined, migrationTimestamp, migrationClassName, migration);\n });\n\n this.checkForDuplicateMigrations(migrations);\n\n // sort them by timestamp\n return migrations.sort((a, b) => a.timestamp - b.timestamp);\n }\n\n protected checkForDuplicateMigrations(migrations: Migration[]) {\n const migrationNames = migrations.map(migration => migration.name);\n const duplicates = Array.from(new Set(migrationNames.filter((migrationName, index) => migrationNames.indexOf(migrationName) < index)));\n if (duplicates.length > 0) {\n throw Error(`Duplicate migrations: ${duplicates.join(\", \")}`);\n }\n }\n\n /**\n * Finds the latest migration (sorts by timestamp) in the given array of migrations.\n */\n protected getLatestTimestampMigration(migrations: Migration[]): Migration|undefined {\n const sortedMigrations = migrations.map(migration => migration).sort((a, b) => (a.timestamp - b.timestamp) * -1);\n return sortedMigrations.length > 0 ? sortedMigrations[0] : undefined;\n }\n\n /**\n * Finds the latest migration in the given array of migrations.\n * PRE: Migration array must be sorted by descending id.\n */\n protected getLatestExecutedMigration(sortedMigrations: Migration[]): Migration|undefined {\n return sortedMigrations.length > 0 ? sortedMigrations[0] : undefined;\n }\n\n /**\n * Inserts new executed migration's data into migrations table.\n */\n protected async insertExecutedMigration(queryRunner: QueryRunner, migration: Migration): Promise<void> {\n const values: ObjectLiteral = {};\n if (this.connection.driver instanceof SqlServerDriver) {\n values[\"timestamp\"] = new MssqlParameter(migration.timestamp, this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.migrationTimestamp }) as any);\n values[\"name\"] = new MssqlParameter(migration.name, this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.migrationName }) as any);\n } else {\n values[\"timestamp\"] = migration.timestamp;\n values[\"name\"] = migration.name;\n }\n if (this.connection.driver instanceof MongoDriver) {\n const mongoRunner = queryRunner as MongoQueryRunner;\n await mongoRunner.databaseConnection.db(this.connection.driver.database!).collection(this.migrationsTableName).insertOne(values);\n } else {\n const qb = queryRunner.manager.createQueryBuilder();\n await qb.insert()\n .into(this.migrationsTable)\n .values(values)\n .execute();\n }\n }\n\n /**\n * Delete previously executed migration's data from the migrations table.\n */\n protected async deleteExecutedMigration(queryRunner: QueryRunner, migration: Migration): Promise<void> {\n\n const conditions: ObjectLiteral = {};\n if (this.connection.driver instanceof SqlServerDriver) {\n conditions[\"timestamp\"] = new MssqlParameter(migration.timestamp, this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.migrationTimestamp }) as any);\n conditions[\"name\"] = new MssqlParameter(migration.name, this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.migrationName }) as any);\n } else {\n conditions[\"timestamp\"] = migration.timestamp;\n conditions[\"name\"] = migration.name;\n }\n\n if (this.connection.driver instanceof MongoDriver) {\n const mongoRunner = queryRunner as MongoQueryRunner;\n await mongoRunner.databaseConnection.db(this.connection.driver.database!).collection(this.migrationsTableName).deleteOne(conditions);\n } else {\n const qb = queryRunner.manager.createQueryBuilder();\n await qb.delete()\n .from(this.migrationsTable)\n .where(`${qb.escape(\"timestamp\")} = :timestamp`)\n .andWhere(`${qb.escape(\"name\")} = :name`)\n .setParameters(conditions)\n .execute();\n }\n\n }\n\n protected async withQueryRunner<T extends any>(callback: (queryRunner: QueryRunner) => T | Promise<T>) {\n const queryRunner = this.queryRunner || this.connection.createQueryRunner();\n\n try {\n return callback(queryRunner);\n } finally {\n if (!this.queryRunner) {\n await queryRunner.release();\n }\n }\n }\n}\n"],"sourceRoot":".."}
1
+ {"version":3,"sources":["../../src/migration/MigrationExecutor.ts"],"names":[],"mappings":"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","file":"MigrationExecutor.js","sourcesContent":["import {Table} from \"../schema-builder/table/Table\";\nimport {Connection} from \"../connection/Connection\";\nimport {Migration} from \"./Migration\";\nimport {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {QueryRunner} from \"../query-runner/QueryRunner\";\nimport {SqlServerDriver} from \"../driver/sqlserver/SqlServerDriver\";\nimport {MssqlParameter} from \"../driver/sqlserver/MssqlParameter\";\nimport {RdbmsSchemaBuilder} from \"../schema-builder/RdbmsSchemaBuilder\";\nimport {MongoDriver} from \"../driver/mongodb/MongoDriver\";\nimport {MongoQueryRunner} from \"../driver/mongodb/MongoQueryRunner\";\nimport {TypeORMError} from \"../error\";\n\n/**\n * Executes migrations: runs pending and reverts previously executed migrations.\n */\nexport class MigrationExecutor {\n\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n\n /**\n * Indicates how migrations should be run in transactions.\n * all: all migrations are run in a single transaction\n * none: all migrations are run without a transaction\n * each: each migration is run in a separate transaction\n */\n transaction: \"all\" | \"none\" | \"each\" = \"all\";\n\n // -------------------------------------------------------------------------\n // Private Properties\n // -------------------------------------------------------------------------\n\n private readonly migrationsDatabase?: string;\n private readonly migrationsSchema?: string;\n private readonly migrationsTable: string;\n private readonly migrationsTableName: string;\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(protected connection: Connection,\n protected queryRunner?: QueryRunner) {\n\n const { schema } = this.connection.driver.options as any;\n const database = this.connection.driver.database;\n this.migrationsDatabase = database;\n this.migrationsSchema = schema;\n this.migrationsTableName = connection.options.migrationsTableName || \"migrations\";\n this.migrationsTable = this.connection.driver.buildTableName(this.migrationsTableName, schema, database);\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Tries to execute a single migration given.\n */\n public async executeMigration(migration: Migration): Promise<Migration> {\n return this.withQueryRunner(async (queryRunner) => {\n await this.createMigrationsTableIfNotExist(queryRunner);\n await (migration.instance as any).up(queryRunner);\n await this.insertExecutedMigration(queryRunner, migration);\n\n return migration;\n });\n }\n\n /**\n * Returns an array of all migrations.\n */\n public async getAllMigrations(): Promise<Migration[]> {\n return Promise.resolve(this.getMigrations());\n }\n\n /**\n * Returns an array of all executed migrations.\n */\n public async getExecutedMigrations(): Promise<Migration[]> {\n return this.withQueryRunner(async queryRunner => {\n await this.createMigrationsTableIfNotExist(queryRunner);\n\n return await this.loadExecutedMigrations(queryRunner);\n });\n }\n\n /**\n * Returns an array of all pending migrations.\n */\n public async getPendingMigrations(): Promise<Migration[]> {\n const allMigrations = await this.getAllMigrations();\n const executedMigrations = await this.getExecutedMigrations();\n\n return allMigrations.filter(migration =>\n !executedMigrations.find(\n executedMigration =>\n executedMigration.name === migration.name\n )\n );\n }\n\n /**\n * Inserts an executed migration.\n */\n public insertMigration(migration: Migration): Promise<void> {\n return this.withQueryRunner(q => this.insertExecutedMigration(q, migration));\n }\n\n /**\n * Deletes an executed migration.\n */\n public deleteMigration(migration: Migration): Promise<void> {\n return this.withQueryRunner(q => this.deleteExecutedMigration(q, migration));\n }\n\n /**\n * Lists all migrations and whether they have been executed or not\n * returns true if there are unapplied migrations\n */\n async showMigrations(): Promise<boolean> {\n let hasUnappliedMigrations = false;\n const queryRunner = this.queryRunner || this.connection.createQueryRunner();\n // create migrations table if its not created yet\n await this.createMigrationsTableIfNotExist(queryRunner);\n // get all migrations that are executed and saved in the database\n const executedMigrations = await this.loadExecutedMigrations(queryRunner);\n\n // get all user's migrations in the source code\n const allMigrations = this.getMigrations();\n\n for (const migration of allMigrations) {\n const executedMigration = executedMigrations.find(executedMigration => executedMigration.name === migration.name);\n\n if (executedMigration) {\n this.connection.logger.logSchemaBuild(` [X] ${migration.name}`);\n } else {\n hasUnappliedMigrations = true;\n this.connection.logger.logSchemaBuild(` [ ] ${migration.name}`);\n }\n }\n\n // if query runner was created by us then release it\n if (!this.queryRunner) {\n await queryRunner.release();\n }\n\n return hasUnappliedMigrations;\n }\n\n /**\n * Executes all pending migrations. Pending migrations are migrations that are not yet executed,\n * thus not saved in the database.\n */\n async executePendingMigrations(): Promise<Migration[]> {\n\n const queryRunner = this.queryRunner || this.connection.createQueryRunner();\n // create migrations table if its not created yet\n await this.createMigrationsTableIfNotExist(queryRunner);\n\n // create the typeorm_metadata table if necessary\n const schemaBuilder = this.connection.driver.createSchemaBuilder();\n\n if (schemaBuilder instanceof RdbmsSchemaBuilder) {\n await schemaBuilder.createMetadataTableIfNecessary(queryRunner);\n }\n\n // get all migrations that are executed and saved in the database\n const executedMigrations = await this.loadExecutedMigrations(queryRunner);\n\n // get the time when last migration was executed\n let lastTimeExecutedMigration = this.getLatestTimestampMigration(executedMigrations);\n\n // get all user's migrations in the source code\n const allMigrations = this.getMigrations();\n\n // variable to store all migrations we did successefuly\n const successMigrations: Migration[] = [];\n\n // find all migrations that needs to be executed\n const pendingMigrations = allMigrations.filter(migration => {\n // check if we already have executed migration\n const executedMigration = executedMigrations.find(executedMigration => executedMigration.name === migration.name);\n if (executedMigration)\n return false;\n\n // migration is new and not executed. now check if its timestamp is correct\n // if (lastTimeExecutedMigration && migration.timestamp < lastTimeExecutedMigration.timestamp)\n // throw new TypeORMError(`New migration found: ${migration.name}, however this migration's timestamp is not valid. Migration's timestamp should not be older then migrations already executed in the database.`);\n\n // every check is passed means that migration was not run yet and we need to run it\n return true;\n });\n\n // if no migrations are pending then nothing to do here\n if (!pendingMigrations.length) {\n this.connection.logger.logSchemaBuild(`No migrations are pending`);\n // if query runner was created by us then release it\n if (!this.queryRunner)\n await queryRunner.release();\n return [];\n }\n\n // log information about migration execution\n this.connection.logger.logSchemaBuild(`${executedMigrations.length} migrations are already loaded in the database.`);\n this.connection.logger.logSchemaBuild(`${allMigrations.length} migrations were found in the source code.`);\n if (lastTimeExecutedMigration)\n this.connection.logger.logSchemaBuild(`${lastTimeExecutedMigration.name} is the last executed migration. It was executed on ${new Date(lastTimeExecutedMigration.timestamp).toString()}.`);\n this.connection.logger.logSchemaBuild(`${pendingMigrations.length} migrations are new migrations that needs to be executed.`);\n\n // start transaction if its not started yet\n let transactionStartedByUs = false;\n if (this.transaction === \"all\" && !queryRunner.isTransactionActive) {\n await queryRunner.startTransaction();\n transactionStartedByUs = true;\n }\n\n // run all pending migrations in a sequence\n try {\n for (const migration of pendingMigrations) {\n if (this.transaction === \"each\" && !queryRunner.isTransactionActive) {\n await queryRunner.startTransaction();\n transactionStartedByUs = true;\n }\n\n await migration.instance!.up(queryRunner)\n .catch(error => { // informative log about migration failure\n this.connection.logger.logMigration(`Migration \"${migration.name}\" failed, error: ${error?.message}`);\n throw error;\n })\n .then(async () => { // now when migration is executed we need to insert record about it into the database\n await this.insertExecutedMigration(queryRunner, migration);\n // commit transaction if we started it\n if (this.transaction === \"each\" && transactionStartedByUs)\n await queryRunner.commitTransaction();\n })\n .then(() => { // informative log about migration success\n successMigrations.push(migration);\n this.connection.logger.logSchemaBuild(`Migration ${migration.name} has been executed successfully.`);\n });\n }\n\n // commit transaction if we started it\n if (this.transaction === \"all\" && transactionStartedByUs)\n await queryRunner.commitTransaction();\n\n } catch (err) { // rollback transaction if we started it\n if (transactionStartedByUs) {\n try { // we throw original error even if rollback thrown an error\n await queryRunner.rollbackTransaction();\n } catch (rollbackError) { }\n }\n\n throw err;\n\n } finally {\n\n // if query runner was created by us then release it\n if (!this.queryRunner)\n await queryRunner.release();\n }\n return successMigrations;\n\n }\n\n /**\n * Reverts last migration that were run.\n */\n async undoLastMigration(): Promise<void> {\n\n const queryRunner = this.queryRunner || this.connection.createQueryRunner();\n\n // create migrations table if its not created yet\n await this.createMigrationsTableIfNotExist(queryRunner);\n\n // get all migrations that are executed and saved in the database\n const executedMigrations = await this.loadExecutedMigrations(queryRunner);\n\n // get the time when last migration was executed\n let lastTimeExecutedMigration = this.getLatestExecutedMigration(executedMigrations);\n\n // if no migrations found in the database then nothing to revert\n if (!lastTimeExecutedMigration) {\n this.connection.logger.logSchemaBuild(`No migrations was found in the database. Nothing to revert!`);\n return;\n }\n\n // get all user's migrations in the source code\n const allMigrations = this.getMigrations();\n\n // find the instance of the migration we need to remove\n const migrationToRevert = allMigrations.find(migration => migration.name === lastTimeExecutedMigration!.name);\n\n // if no migrations found in the database then nothing to revert\n if (!migrationToRevert)\n throw new TypeORMError(`No migration ${lastTimeExecutedMigration.name} was found in the source code. Make sure you have this migration in your codebase and its included in the connection options.`);\n\n // log information about migration execution\n this.connection.logger.logSchemaBuild(`${executedMigrations.length} migrations are already loaded in the database.`);\n this.connection.logger.logSchemaBuild(`${lastTimeExecutedMigration.name} is the last executed migration. It was executed on ${new Date(lastTimeExecutedMigration.timestamp).toString()}.`);\n this.connection.logger.logSchemaBuild(`Now reverting it...`);\n\n // start transaction if its not started yet\n let transactionStartedByUs = false;\n if ((this.transaction !== \"none\") && !queryRunner.isTransactionActive) {\n await queryRunner.startTransaction();\n transactionStartedByUs = true;\n }\n\n try {\n await migrationToRevert.instance!.down(queryRunner);\n await this.deleteExecutedMigration(queryRunner, migrationToRevert);\n this.connection.logger.logSchemaBuild(`Migration ${migrationToRevert.name} has been reverted successfully.`);\n\n // commit transaction if we started it\n if (transactionStartedByUs)\n await queryRunner.commitTransaction();\n\n } catch (err) { // rollback transaction if we started it\n if (transactionStartedByUs) {\n try { // we throw original error even if rollback thrown an error\n await queryRunner.rollbackTransaction();\n } catch (rollbackError) { }\n }\n\n throw err;\n\n } finally {\n\n // if query runner was created by us then release it\n if (!this.queryRunner)\n await queryRunner.release();\n }\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates table \"migrations\" that will store information about executed migrations.\n */\n protected async createMigrationsTableIfNotExist(queryRunner: QueryRunner): Promise<void> {\n // If driver is mongo no need to create\n if (this.connection.driver instanceof MongoDriver) {\n return;\n }\n const tableExist = await queryRunner.hasTable(this.migrationsTable); // todo: table name should be configurable\n if (!tableExist) {\n await queryRunner.createTable(new Table(\n {\n database: this.migrationsDatabase,\n schema: this.migrationsSchema,\n name: this.migrationsTable,\n columns: [\n {\n name: \"id\",\n type: this.connection.driver.normalizeType({type: this.connection.driver.mappedDataTypes.migrationId}),\n isGenerated: true,\n generationStrategy: \"increment\",\n isPrimary: true,\n isNullable: false\n },\n {\n name: \"timestamp\",\n type: this.connection.driver.normalizeType({type: this.connection.driver.mappedDataTypes.migrationTimestamp}),\n isPrimary: false,\n isNullable: false\n },\n {\n name: \"name\",\n type: this.connection.driver.normalizeType({type: this.connection.driver.mappedDataTypes.migrationName}),\n isNullable: false\n },\n ]\n },\n ));\n }\n }\n\n /**\n * Loads all migrations that were executed and saved into the database (sorts by id).\n */\n protected async loadExecutedMigrations(queryRunner: QueryRunner): Promise<Migration[]> {\n if (this.connection.driver instanceof MongoDriver) {\n const mongoRunner = queryRunner as MongoQueryRunner;\n return await mongoRunner.databaseConnection\n .db(this.connection.driver.database!)\n .collection(this.migrationsTableName)\n .find<Migration>()\n .sort({\"_id\": -1})\n .toArray();\n } else {\n const migrationsRaw: ObjectLiteral[] = await this.connection.manager\n .createQueryBuilder(queryRunner)\n .select()\n .orderBy(this.connection.driver.escape(\"id\"), \"DESC\")\n .from(this.migrationsTable, this.migrationsTableName)\n .getRawMany();\n return migrationsRaw.map(migrationRaw => {\n return new Migration(parseInt(migrationRaw[\"id\"]), parseInt(migrationRaw[\"timestamp\"]), migrationRaw[\"name\"]);\n });\n }\n }\n\n /**\n * Gets all migrations that setup for this connection.\n */\n protected getMigrations(): Migration[] {\n const migrations = this.connection.migrations.map(migration => {\n const migrationClassName = migration.name || (migration.constructor as any).name;\n const migrationTimestamp = parseInt(migrationClassName.substr(-13), 10);\n if (!migrationTimestamp || isNaN(migrationTimestamp)) {\n throw new TypeORMError(`${migrationClassName} migration name is wrong. Migration class name should have a JavaScript timestamp appended.`);\n }\n\n return new Migration(undefined, migrationTimestamp, migrationClassName, migration);\n });\n\n this.checkForDuplicateMigrations(migrations);\n\n // sort them by timestamp\n return migrations.sort((a, b) => a.timestamp - b.timestamp);\n }\n\n protected checkForDuplicateMigrations(migrations: Migration[]) {\n const migrationNames = migrations.map(migration => migration.name);\n const duplicates = Array.from(new Set(migrationNames.filter((migrationName, index) => migrationNames.indexOf(migrationName) < index)));\n if (duplicates.length > 0) {\n throw Error(`Duplicate migrations: ${duplicates.join(\", \")}`);\n }\n }\n\n /**\n * Finds the latest migration (sorts by timestamp) in the given array of migrations.\n */\n protected getLatestTimestampMigration(migrations: Migration[]): Migration|undefined {\n const sortedMigrations = migrations.map(migration => migration).sort((a, b) => (a.timestamp - b.timestamp) * -1);\n return sortedMigrations.length > 0 ? sortedMigrations[0] : undefined;\n }\n\n /**\n * Finds the latest migration in the given array of migrations.\n * PRE: Migration array must be sorted by descending id.\n */\n protected getLatestExecutedMigration(sortedMigrations: Migration[]): Migration|undefined {\n return sortedMigrations.length > 0 ? sortedMigrations[0] : undefined;\n }\n\n /**\n * Inserts new executed migration's data into migrations table.\n */\n protected async insertExecutedMigration(queryRunner: QueryRunner, migration: Migration): Promise<void> {\n const values: ObjectLiteral = {};\n if (this.connection.driver instanceof SqlServerDriver) {\n values[\"timestamp\"] = new MssqlParameter(migration.timestamp, this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.migrationTimestamp }) as any);\n values[\"name\"] = new MssqlParameter(migration.name, this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.migrationName }) as any);\n } else {\n values[\"timestamp\"] = migration.timestamp;\n values[\"name\"] = migration.name;\n }\n if (this.connection.driver instanceof MongoDriver) {\n const mongoRunner = queryRunner as MongoQueryRunner;\n await mongoRunner.databaseConnection.db(this.connection.driver.database!).collection(this.migrationsTableName).insertOne(values);\n } else {\n const qb = queryRunner.manager.createQueryBuilder();\n await qb.insert()\n .into(this.migrationsTable)\n .values(values)\n .execute();\n }\n }\n\n /**\n * Delete previously executed migration's data from the migrations table.\n */\n protected async deleteExecutedMigration(queryRunner: QueryRunner, migration: Migration): Promise<void> {\n\n const conditions: ObjectLiteral = {};\n if (this.connection.driver instanceof SqlServerDriver) {\n conditions[\"timestamp\"] = new MssqlParameter(migration.timestamp, this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.migrationTimestamp }) as any);\n conditions[\"name\"] = new MssqlParameter(migration.name, this.connection.driver.normalizeType({ type: this.connection.driver.mappedDataTypes.migrationName }) as any);\n } else {\n conditions[\"timestamp\"] = migration.timestamp;\n conditions[\"name\"] = migration.name;\n }\n\n if (this.connection.driver instanceof MongoDriver) {\n const mongoRunner = queryRunner as MongoQueryRunner;\n await mongoRunner.databaseConnection.db(this.connection.driver.database!).collection(this.migrationsTableName).deleteOne(conditions);\n } else {\n const qb = queryRunner.manager.createQueryBuilder();\n await qb.delete()\n .from(this.migrationsTable)\n .where(`${qb.escape(\"timestamp\")} = :timestamp`)\n .andWhere(`${qb.escape(\"name\")} = :name`)\n .setParameters(conditions)\n .execute();\n }\n\n }\n\n protected async withQueryRunner<T extends any>(callback: (queryRunner: QueryRunner) => T | Promise<T>) {\n const queryRunner = this.queryRunner || this.connection.createQueryRunner();\n\n try {\n return callback(queryRunner);\n } finally {\n if (!this.queryRunner) {\n await queryRunner.release();\n }\n }\n }\n}\n"],"sourceRoot":".."}
package/package.json CHANGED
@@ -1 +1 @@
1
- { "name": "typeorm", "private": false, "version": "0.2.41-dev.c895680", "description": "Data-Mapper ORM for TypeScript, ES7, ES6, ES5. Supports MySQL, PostgreSQL, MariaDB, SQLite, MS SQL Server, Oracle, MongoDB databases.", "license": "MIT", "readmeFilename": "README.md", "author": { "name": "Umed Khudoiberdiev", "email": "pleerock.me@gmail.com" }, "main": "./index.js", "browser": { "./browser/driver/aurora-data-api/AuroraDataApiDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/cockroachdb/CockroachDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/postgres/PostgresDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/oracle/OracleDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/sap/SapDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/mysql/MysqlDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/sqlserver/SqlServerDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/mongodb/MongoDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/mongodb/MongoQueryRunner.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/entity-manager/MongoEntityManager.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/repository/MongoRepository.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/sqlite/SqliteDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/better-sqlite3/BetterSqlite3Driver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/util/DirectoryExportedClassesLoader.js": "./browser/platform/BrowserDirectoryExportedClassesLoader.js", "./browser/logger/FileLogger.js": "./browser/platform/BrowserFileLoggerDummy.js", "./browser/connection/ConnectionOptionsReader.js": "./browser/platform/BrowserConnectionOptionsReaderDummy.js", "./browser/connection/options-reader/ConnectionOptionsXmlReader.js": "./browser/platform/BrowserConnectionOptionsReaderDummy.js", "./browser/connection/options-reader/ConnectionOptionsYmlReader.js": "./browser/platform/BrowserConnectionOptionsReaderDummy.js", "./browser/platform/PlatformTools.js": "./browser/platform/BrowserPlatformTools.js", "./index.js": "./browser/index.js" }, "repository": { "type": "git", "url": "https://github.com/typeorm/typeorm.git" }, "bugs": { "url": "https://github.com/typeorm/typeorm/issues" }, "tags": [ "orm", "typescript", "typescript-orm", "mysql", "mysql-orm", "postgresql", "postgresql-orm", "mariadb", "mariadb-orm", "sqlite", "sqlite-orm", "sql-server", "sql-server-orm", "oracle", "oracle-orm" ], "devDependencies": { "@types/app-root-path": "^1.2.4", "@types/chai": "^4.2.15", "@types/chai-as-promised": "^7.1.3", "@types/debug": "^4.1.5", "@types/dotenv": "^8.2.0", "@types/js-yaml": "^4.0.0", "@types/mkdirp": "^1.0.1", "@types/mocha": "^8.2.1", "@types/node": "^14.14.31", "@types/rimraf": "^3.0.0", "@types/sha.js": "^2.4.0", "@types/sinon": "^9.0.10", "@types/source-map-support": "^0.5.3", "@types/xml2js": "^0.4.8", "@types/yargs": "^17.0.2", "@typescript-eslint/eslint-plugin": "^4.15.2", "@typescript-eslint/parser": "^4.15.2", "better-sqlite3": "^7.1.2", "chai": "^4.3.0", "chai-as-promised": "^7.1.1", "class-transformer": "^0.4.0", "conventional-changelog-angular": "^5.0.12", "conventional-changelog-cli": "^2.1.1", "del": "^6.0.0", "eslint": "^7.20.0", "gulp": "^4.0.2", "gulp-eslint": "^6.0.0", "gulp-istanbul": "^1.1.3", "gulp-mocha": "^8.0.0", "gulp-rename": "^2.0.0", "gulp-replace": "^1.0.0", "gulp-shell": "^0.8.0", "gulp-sourcemaps": "^3.0.0", "gulp-typescript": "^6.0.0-alpha.1", "gulpclass": "^0.2.0", "husky": "^5.1.1", "lint-staged": "^10.5.4", "mocha": "^8.3.0", "mongodb": "^3.6.4", "mssql": "^6.3.1", "mysql": "^2.18.1", "mysql2": "^2.2.5", "oracledb": "^5.1.0", "pg": "^8.5.1", "pg-query-stream": "^4.0.0", "redis": "^3.1.1", "remap-istanbul": "^0.13.0", "rimraf": "^3.0.2", "sinon": "^9.2.4", "sinon-chai": "^3.5.0", "source-map-support": "^0.5.19", "sql.js": "^1.4.0", "sqlite3": "^5.0.2", "ts-node": "^9.1.1", "typeorm-aurora-data-api-driver": "^2.0.0", "typescript": "^4.2.2" }, "peerDependencies": { "@sap/hana-client": "*", "better-sqlite3": "*", "hdb-pool": "*", "ioredis": "*", "mongodb": "^3.6.0", "mssql": "*", "mysql2": "*", "oracledb": "*", "pg": "*", "pg-native": "*", "pg-query-stream": "*", "redis": "*", "sql.js": "*", "sqlite3": "*", "typeorm-aurora-data-api-driver": "*" }, "peerDependenciesMeta": { "@sap/hana-client": { "optional": true }, "better-sqlite3": { "optional": true }, "hdb-pool": { "optional": true }, "ioredis": { "optional": true }, "mongodb": { "optional": true }, "mssql": { "optional": true }, "mysql2": { "optional": true }, "oracledb": { "optional": true }, "pg": { "optional": true }, "pg-native": { "optional": true }, "pg-query-stream": { "optional": true }, "redis": { "optional": true }, "sql.js": { "optional": true }, "sqlite3": { "optional": true }, "typeorm-aurora-data-api-driver": { "optional": true } }, "dependencies": { "@sqltools/formatter": "^1.2.2", "app-root-path": "^3.0.0", "buffer": "^6.0.3", "chalk": "^4.1.0", "cli-highlight": "^2.1.11", "debug": "^4.3.1", "dotenv": "^8.2.0", "glob": "^7.1.6", "js-yaml": "^4.0.0", "mkdirp": "^1.0.4", "reflect-metadata": "^0.1.13", "sha.js": "^2.4.11", "tslib": "^2.1.0", "xml2js": "^0.4.23", "yargs": "^17.0.1", "zen-observable-ts": "^1.0.0" }, "lint-staged": { "*.ts": [ "eslint --fix", "git add" ] }, "scripts": { "test": "rimraf ./build && tsc && mocha --file ./build/compiled/test/utils/test-setup.js --bail --recursive --timeout 60000 ./build/compiled/test", "test-fast": "mocha --file ./build/compiled/test/utils/test-setup.js --bail --recursive --timeout 60000 ./build/compiled/test", "compile": "rimraf ./build && tsc", "watch": "./node_modules/.bin/tsc -w", "package": "gulp package", "pack": "gulp pack", "lint": "eslint -c ./.eslintrc.js src/**/*.ts test/**/*.ts sample/**/*.ts", "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s -r 2" }, "bin": { "typeorm": "./cli.js" }, "funding": "https://opencollective.com/typeorm", "collective": { "type": "opencollective", "url": "https://opencollective.com/typeorm", "logo": "https://opencollective.com/opencollective/logo.txt" }, "nyc": { "all": true, "cache": false, "exclude": [ "**/*.d.ts" ], "extension": [ ".ts" ], "include": [ "build/compiled/src/**", "src/**" ], "reporter": "json" } }
1
+ { "name": "typeorm", "private": false, "version": "0.2.42-dev.1cfd7b9", "description": "Data-Mapper ORM for TypeScript, ES7, ES6, ES5. Supports MySQL, PostgreSQL, MariaDB, SQLite, MS SQL Server, Oracle, MongoDB databases.", "license": "MIT", "readmeFilename": "README.md", "author": { "name": "Umed Khudoiberdiev", "email": "pleerock.me@gmail.com" }, "exports": { ".": { "import": "./index.mjs", "require": "./index.js" }, "./*": "./*" }, "main": "./index.js", "module": "./index.mjs", "types": "./index.d.ts", "type": "commonjs", "browser": { "./browser/driver/aurora-data-api/AuroraDataApiDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/cockroachdb/CockroachDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/postgres/PostgresDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/oracle/OracleDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/sap/SapDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/mysql/MysqlDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/sqlserver/SqlServerDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/mongodb/MongoDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/mongodb/MongoQueryRunner.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/entity-manager/MongoEntityManager.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/repository/MongoRepository.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/sqlite/SqliteDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/driver/better-sqlite3/BetterSqlite3Driver.js": "./browser/platform/BrowserDisabledDriversDummy.js", "./browser/util/DirectoryExportedClassesLoader.js": "./browser/platform/BrowserDirectoryExportedClassesLoader.js", "./browser/logger/FileLogger.js": "./browser/platform/BrowserFileLoggerDummy.js", "./browser/connection/ConnectionOptionsReader.js": "./browser/platform/BrowserConnectionOptionsReaderDummy.js", "./browser/connection/options-reader/ConnectionOptionsXmlReader.js": "./browser/platform/BrowserConnectionOptionsReaderDummy.js", "./browser/connection/options-reader/ConnectionOptionsYmlReader.js": "./browser/platform/BrowserConnectionOptionsReaderDummy.js", "./browser/platform/PlatformTools.js": "./browser/platform/BrowserPlatformTools.js", "./index.js": "./browser/index.js" }, "repository": { "type": "git", "url": "https://github.com/typeorm/typeorm.git" }, "bugs": { "url": "https://github.com/typeorm/typeorm/issues" }, "tags": [ "orm", "typescript", "typescript-orm", "mysql", "mysql-orm", "postgresql", "postgresql-orm", "mariadb", "mariadb-orm", "sqlite", "sqlite-orm", "sql-server", "sql-server-orm", "oracle", "oracle-orm" ], "devDependencies": { "@types/app-root-path": "^1.2.4", "@types/chai": "^4.2.15", "@types/chai-as-promised": "^7.1.3", "@types/debug": "^4.1.5", "@types/dotenv": "^8.2.0", "@types/js-yaml": "^4.0.0", "@types/mkdirp": "^1.0.1", "@types/mocha": "^8.2.1", "@types/node": "^14.14.31", "@types/rimraf": "^3.0.0", "@types/sha.js": "^2.4.0", "@types/sinon": "^9.0.10", "@types/source-map-support": "^0.5.3", "@types/xml2js": "^0.4.8", "@types/yargs": "^17.0.2", "@typescript-eslint/eslint-plugin": "^4.15.2", "@typescript-eslint/parser": "^4.15.2", "better-sqlite3": "^7.1.2", "chai": "^4.3.0", "chai-as-promised": "^7.1.1", "class-transformer": "^0.4.0", "conventional-changelog-angular": "^5.0.12", "conventional-changelog-cli": "^2.1.1", "del": "^6.0.0", "eslint": "^7.20.0", "gulp": "^4.0.2", "gulp-eslint": "^6.0.0", "gulp-istanbul": "^1.1.3", "gulp-mocha": "^8.0.0", "gulp-rename": "^2.0.0", "gulp-replace": "^1.0.0", "gulp-shell": "^0.8.0", "gulp-sourcemaps": "^3.0.0", "gulp-typescript": "^6.0.0-alpha.1", "gulpclass": "^0.2.0", "husky": "^5.1.1", "lint-staged": "^10.5.4", "mocha": "^8.3.0", "mongodb": "^3.6.4", "mssql": "^6.3.1", "mysql": "^2.18.1", "mysql2": "^2.2.5", "oracledb": "^5.1.0", "pg": "^8.5.1", "pg-query-stream": "^4.0.0", "redis": "^3.1.1", "remap-istanbul": "^0.13.0", "rimraf": "^3.0.2", "sinon": "^9.2.4", "sinon-chai": "^3.5.0", "source-map-support": "^0.5.19", "sql.js": "^1.4.0", "sqlite3": "^5.0.2", "ts-node": "^9.1.1", "typeorm-aurora-data-api-driver": "^2.0.0", "typescript": "^4.2.2" }, "peerDependencies": { "@sap/hana-client": "*", "better-sqlite3": "*", "hdb-pool": "*", "ioredis": "*", "mongodb": "^3.6.0", "mssql": "*", "mysql2": "*", "oracledb": "*", "pg": "*", "pg-native": "*", "pg-query-stream": "*", "redis": "*", "sql.js": "*", "sqlite3": "*", "typeorm-aurora-data-api-driver": "*" }, "peerDependenciesMeta": { "@sap/hana-client": { "optional": true }, "better-sqlite3": { "optional": true }, "hdb-pool": { "optional": true }, "ioredis": { "optional": true }, "mongodb": { "optional": true }, "mssql": { "optional": true }, "mysql2": { "optional": true }, "oracledb": { "optional": true }, "pg": { "optional": true }, "pg-native": { "optional": true }, "pg-query-stream": { "optional": true }, "redis": { "optional": true }, "sql.js": { "optional": true }, "sqlite3": { "optional": true }, "typeorm-aurora-data-api-driver": { "optional": true } }, "dependencies": { "@sqltools/formatter": "^1.2.2", "app-root-path": "^3.0.0", "buffer": "^6.0.3", "chalk": "^4.1.0", "cli-highlight": "^2.1.11", "debug": "^4.3.1", "dotenv": "^8.2.0", "glob": "^7.1.6", "js-yaml": "^4.0.0", "mkdirp": "^1.0.4", "reflect-metadata": "^0.1.13", "sha.js": "^2.4.11", "tslib": "^2.1.0", "xml2js": "^0.4.23", "yargs": "^17.0.1", "zen-observable-ts": "^1.0.0" }, "lint-staged": { "*.ts": [ "eslint --fix", "git add" ] }, "scripts": { "test": "rimraf ./build && tsc && mocha --file ./build/compiled/test/utils/test-setup.js --bail --recursive --timeout 60000 ./build/compiled/test", "test-fast": "mocha --file ./build/compiled/test/utils/test-setup.js --bail --recursive --timeout 60000 ./build/compiled/test", "compile": "rimraf ./build && tsc", "watch": "./node_modules/.bin/tsc -w", "package": "gulp package", "pack": "gulp pack", "lint": "eslint -c ./.eslintrc.js src/**/*.ts test/**/*.ts sample/**/*.ts", "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s -r 2" }, "bin": { "typeorm": "./cli.js" }, "funding": "https://opencollective.com/typeorm", "collective": { "type": "opencollective", "url": "https://opencollective.com/typeorm", "logo": "https://opencollective.com/opencollective/logo.txt" }, "nyc": { "all": true, "cache": false, "exclude": [ "**/*.d.ts" ], "extension": [ ".ts" ], "include": [ "build/compiled/src/**", "src/**" ], "reporter": "json" } }
@@ -854,10 +854,10 @@ var SubjectExecutor = /** @class */ (function () {
854
854
  if (this.updateSubjects.length)
855
855
  this.updateSpecialColumnsInInsertedAndUpdatedEntities(this.updateSubjects);
856
856
  // update soft-removed entity properties
857
- if (this.updateSubjects.length)
857
+ if (this.softRemoveSubjects.length)
858
858
  this.updateSpecialColumnsInInsertedAndUpdatedEntities(this.softRemoveSubjects);
859
859
  // update recovered entity properties
860
- if (this.updateSubjects.length)
860
+ if (this.recoverSubjects.length)
861
861
  this.updateSpecialColumnsInInsertedAndUpdatedEntities(this.recoverSubjects);
862
862
  // remove ids from the entities that were removed
863
863
  if (this.removeSubjects.length) {