typeorm 0.2.24 → 0.2.28

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 (1002) hide show
  1. package/README.md +12 -8
  2. package/browser/cache/DbQueryResultCache.js +14 -14
  3. package/browser/cache/DbQueryResultCache.js.map +1 -1
  4. package/browser/cache/RedisQueryResultCache.js +20 -15
  5. package/browser/cache/RedisQueryResultCache.js.map +1 -1
  6. package/browser/common/DeepPartial.d.ts +1 -1
  7. package/browser/common/DeepPartial.js.map +1 -1
  8. package/browser/common/EntityTarget.d.ts +9 -0
  9. package/browser/common/EntityTarget.js +3 -0
  10. package/browser/common/EntityTarget.js.map +1 -0
  11. package/browser/connection/Connection.d.ts +11 -10
  12. package/browser/connection/Connection.js +66 -42
  13. package/browser/connection/Connection.js.map +1 -1
  14. package/browser/connection/ConnectionMetadataBuilder.js +8 -8
  15. package/browser/connection/ConnectionMetadataBuilder.js.map +1 -1
  16. package/browser/connection/ConnectionOptions.d.ts +3 -1
  17. package/browser/connection/ConnectionOptions.js.map +1 -1
  18. package/browser/connection/ConnectionOptionsReader.js +47 -42
  19. package/browser/connection/ConnectionOptionsReader.js.map +1 -1
  20. package/browser/connection/options-reader/ConnectionOptionsEnvReader.d.ts +5 -1
  21. package/browser/connection/options-reader/ConnectionOptionsEnvReader.js +45 -31
  22. package/browser/connection/options-reader/ConnectionOptionsEnvReader.js.map +1 -1
  23. package/browser/connection/options-reader/ConnectionOptionsXmlReader.js +4 -4
  24. package/browser/connection/options-reader/ConnectionOptionsXmlReader.js.map +1 -1
  25. package/browser/connection/options-reader/ConnectionOptionsYmlReader.d.ts +1 -1
  26. package/browser/connection/options-reader/ConnectionOptionsYmlReader.js +15 -4
  27. package/browser/connection/options-reader/ConnectionOptionsYmlReader.js.map +1 -1
  28. package/browser/decorator/Check.d.ts +2 -2
  29. package/browser/decorator/Check.js.map +1 -1
  30. package/browser/decorator/EntityRepository.d.ts +1 -1
  31. package/browser/decorator/EntityRepository.js.map +1 -1
  32. package/browser/decorator/Exclusion.d.ts +2 -2
  33. package/browser/decorator/Exclusion.js.map +1 -1
  34. package/browser/decorator/Generated.d.ts +1 -1
  35. package/browser/decorator/Generated.js.map +1 -1
  36. package/browser/decorator/Index.d.ts +7 -7
  37. package/browser/decorator/Index.js.map +1 -1
  38. package/browser/decorator/Unique.d.ts +4 -4
  39. package/browser/decorator/Unique.js +12 -1
  40. package/browser/decorator/Unique.js.map +1 -1
  41. package/browser/decorator/columns/Column.d.ts +12 -12
  42. package/browser/decorator/columns/Column.js.map +1 -1
  43. package/browser/decorator/columns/CreateDateColumn.d.ts +1 -1
  44. package/browser/decorator/columns/CreateDateColumn.js.map +1 -1
  45. package/browser/decorator/columns/DeleteDateColumn.d.ts +1 -1
  46. package/browser/decorator/columns/DeleteDateColumn.js.map +1 -1
  47. package/browser/decorator/columns/ObjectIdColumn.d.ts +1 -1
  48. package/browser/decorator/columns/ObjectIdColumn.js.map +1 -1
  49. package/browser/decorator/columns/PrimaryColumn.d.ts +2 -2
  50. package/browser/decorator/columns/PrimaryColumn.js.map +1 -1
  51. package/browser/decorator/columns/PrimaryGeneratedColumn.d.ts +5 -5
  52. package/browser/decorator/columns/PrimaryGeneratedColumn.js.map +1 -1
  53. package/browser/decorator/columns/UpdateDateColumn.d.ts +1 -1
  54. package/browser/decorator/columns/UpdateDateColumn.js.map +1 -1
  55. package/browser/decorator/columns/VersionColumn.d.ts +1 -1
  56. package/browser/decorator/columns/VersionColumn.js.map +1 -1
  57. package/browser/decorator/columns/ViewColumn.d.ts +2 -1
  58. package/browser/decorator/columns/ViewColumn.js +2 -2
  59. package/browser/decorator/columns/ViewColumn.js.map +1 -1
  60. package/browser/decorator/entity/ChildEntity.d.ts +1 -1
  61. package/browser/decorator/entity/ChildEntity.js.map +1 -1
  62. package/browser/decorator/entity/Entity.d.ts +2 -2
  63. package/browser/decorator/entity/Entity.js.map +1 -1
  64. package/browser/decorator/entity/TableInheritance.d.ts +1 -1
  65. package/browser/decorator/entity/TableInheritance.js.map +1 -1
  66. package/browser/decorator/entity-view/ViewEntity.d.ts +2 -2
  67. package/browser/decorator/entity-view/ViewEntity.js.map +1 -1
  68. package/browser/decorator/listeners/AfterInsert.d.ts +1 -1
  69. package/browser/decorator/listeners/AfterInsert.js.map +1 -1
  70. package/browser/decorator/listeners/AfterLoad.d.ts +1 -1
  71. package/browser/decorator/listeners/AfterLoad.js.map +1 -1
  72. package/browser/decorator/listeners/AfterRemove.d.ts +1 -1
  73. package/browser/decorator/listeners/AfterRemove.js.map +1 -1
  74. package/browser/decorator/listeners/AfterUpdate.d.ts +1 -1
  75. package/browser/decorator/listeners/AfterUpdate.js.map +1 -1
  76. package/browser/decorator/listeners/BeforeInsert.d.ts +1 -1
  77. package/browser/decorator/listeners/BeforeInsert.js.map +1 -1
  78. package/browser/decorator/listeners/BeforeRemove.d.ts +1 -1
  79. package/browser/decorator/listeners/BeforeRemove.js.map +1 -1
  80. package/browser/decorator/listeners/BeforeUpdate.d.ts +1 -1
  81. package/browser/decorator/listeners/BeforeUpdate.js.map +1 -1
  82. package/browser/decorator/listeners/EventSubscriber.d.ts +1 -1
  83. package/browser/decorator/listeners/EventSubscriber.js.map +1 -1
  84. package/browser/decorator/options/ColumnOptions.js.map +1 -1
  85. package/browser/decorator/options/TransactionOptions.js.map +1 -1
  86. package/browser/decorator/options/ViewColumnOptions.d.ts +9 -0
  87. package/browser/decorator/options/ViewColumnOptions.js +3 -0
  88. package/browser/decorator/options/ViewColumnOptions.js.map +1 -0
  89. package/browser/decorator/relations/JoinColumn.d.ts +3 -3
  90. package/browser/decorator/relations/JoinColumn.js.map +1 -1
  91. package/browser/decorator/relations/JoinTable.d.ts +3 -3
  92. package/browser/decorator/relations/JoinTable.js.map +1 -1
  93. package/browser/decorator/relations/ManyToMany.d.ts +2 -2
  94. package/browser/decorator/relations/ManyToMany.js.map +1 -1
  95. package/browser/decorator/relations/ManyToOne.d.ts +2 -2
  96. package/browser/decorator/relations/ManyToOne.js.map +1 -1
  97. package/browser/decorator/relations/OneToMany.d.ts +3 -3
  98. package/browser/decorator/relations/OneToMany.js +2 -2
  99. package/browser/decorator/relations/OneToMany.js.map +1 -1
  100. package/browser/decorator/relations/OneToOne.d.ts +2 -2
  101. package/browser/decorator/relations/OneToOne.js.map +1 -1
  102. package/browser/decorator/relations/RelationCount.d.ts +1 -1
  103. package/browser/decorator/relations/RelationCount.js.map +1 -1
  104. package/browser/decorator/relations/RelationId.d.ts +1 -1
  105. package/browser/decorator/relations/RelationId.js.map +1 -1
  106. package/browser/decorator/transaction/Transaction.js +4 -4
  107. package/browser/decorator/transaction/Transaction.js.map +1 -1
  108. package/browser/decorator/transaction/TransactionManager.d.ts +1 -1
  109. package/browser/decorator/transaction/TransactionManager.js.map +1 -1
  110. package/browser/decorator/tree/Tree.d.ts +1 -1
  111. package/browser/decorator/tree/Tree.js.map +1 -1
  112. package/browser/decorator/tree/TreeChildren.d.ts +1 -1
  113. package/browser/decorator/tree/TreeChildren.js.map +1 -1
  114. package/browser/decorator/tree/TreeLevelColumn.d.ts +1 -1
  115. package/browser/decorator/tree/TreeLevelColumn.js.map +1 -1
  116. package/browser/decorator/tree/TreeParent.d.ts +1 -1
  117. package/browser/decorator/tree/TreeParent.js.map +1 -1
  118. package/browser/driver/Driver.d.ts +7 -2
  119. package/browser/driver/Driver.js.map +1 -1
  120. package/browser/driver/DriverFactory.js +6 -0
  121. package/browser/driver/DriverFactory.js.map +1 -1
  122. package/browser/driver/DriverUtils.d.ts +2 -2
  123. package/browser/driver/DriverUtils.js +8 -4
  124. package/browser/driver/DriverUtils.js.map +1 -1
  125. package/browser/driver/aurora-data-api/AuroraDataApiConnection.d.ts +2 -1
  126. package/browser/driver/aurora-data-api/AuroraDataApiConnection.js +2 -3
  127. package/browser/driver/aurora-data-api/AuroraDataApiConnection.js.map +1 -1
  128. package/browser/driver/aurora-data-api/AuroraDataApiConnectionOptions.d.ts +6 -0
  129. package/browser/driver/aurora-data-api/AuroraDataApiConnectionOptions.js.map +1 -1
  130. package/browser/driver/aurora-data-api/AuroraDataApiDriver.d.ts +6 -1
  131. package/browser/driver/aurora-data-api/AuroraDataApiDriver.js +14 -9
  132. package/browser/driver/aurora-data-api/AuroraDataApiDriver.js.map +1 -1
  133. package/browser/driver/aurora-data-api/AuroraDataApiQueryRunner.d.ts +5 -0
  134. package/browser/driver/aurora-data-api/AuroraDataApiQueryRunner.js +230 -143
  135. package/browser/driver/aurora-data-api/AuroraDataApiQueryRunner.js.map +1 -1
  136. package/browser/driver/aurora-data-api-pg/AuroraDataApiPostgresConnectionOptions.d.ts +27 -0
  137. package/browser/driver/aurora-data-api-pg/AuroraDataApiPostgresConnectionOptions.js +3 -0
  138. package/browser/driver/aurora-data-api-pg/AuroraDataApiPostgresConnectionOptions.js.map +1 -0
  139. package/browser/driver/aurora-data-api-pg/AuroraDataApiPostgresDriver.d.ts +57 -0
  140. package/browser/driver/aurora-data-api-pg/AuroraDataApiPostgresDriver.js +99 -0
  141. package/browser/driver/aurora-data-api-pg/AuroraDataApiPostgresDriver.js.map +1 -0
  142. package/browser/driver/aurora-data-api-pg/AuroraDataApiPostgresQueryRunner.d.ts +51 -0
  143. package/browser/driver/aurora-data-api-pg/AuroraDataApiPostgresQueryRunner.js +142 -0
  144. package/browser/driver/aurora-data-api-pg/AuroraDataApiPostgresQueryRunner.js.map +1 -0
  145. package/browser/driver/better-sqlite3/BetterSqlite3ConnectionOptions.d.ts +50 -0
  146. package/browser/driver/better-sqlite3/BetterSqlite3ConnectionOptions.js +3 -0
  147. package/browser/driver/better-sqlite3/BetterSqlite3ConnectionOptions.js.map +1 -0
  148. package/browser/driver/better-sqlite3/BetterSqlite3Driver.d.ts +46 -0
  149. package/browser/driver/better-sqlite3/BetterSqlite3Driver.js +125 -0
  150. package/browser/driver/better-sqlite3/BetterSqlite3Driver.js.map +1 -0
  151. package/browser/driver/better-sqlite3/BetterSqlite3QueryRunner.d.ts +22 -0
  152. package/browser/driver/better-sqlite3/BetterSqlite3QueryRunner.js +113 -0
  153. package/browser/driver/better-sqlite3/BetterSqlite3QueryRunner.js.map +1 -0
  154. package/browser/driver/cockroachdb/CockroachConnectionCredentialsOptions.js.map +1 -1
  155. package/browser/driver/cockroachdb/CockroachDriver.d.ts +6 -1
  156. package/browser/driver/cockroachdb/CockroachDriver.js +18 -13
  157. package/browser/driver/cockroachdb/CockroachDriver.js.map +1 -1
  158. package/browser/driver/cockroachdb/CockroachQueryRunner.d.ts +3 -1
  159. package/browser/driver/cockroachdb/CockroachQueryRunner.js +420 -192
  160. package/browser/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  161. package/browser/driver/cordova/CordovaDriver.d.ts +2 -1
  162. package/browser/driver/cordova/CordovaDriver.js +4 -5
  163. package/browser/driver/cordova/CordovaDriver.js.map +1 -1
  164. package/browser/driver/cordova/CordovaQueryRunner.js +4 -4
  165. package/browser/driver/cordova/CordovaQueryRunner.js.map +1 -1
  166. package/browser/driver/expo/ExpoDriver.d.ts +2 -1
  167. package/browser/driver/expo/ExpoDriver.js +5 -5
  168. package/browser/driver/expo/ExpoDriver.js.map +1 -1
  169. package/browser/driver/expo/ExpoQueryRunner.js +10 -10
  170. package/browser/driver/expo/ExpoQueryRunner.js.map +1 -1
  171. package/browser/driver/mongodb/MongoDriver.d.ts +6 -1
  172. package/browser/driver/mongodb/MongoDriver.js +9 -4
  173. package/browser/driver/mongodb/MongoDriver.js.map +1 -1
  174. package/browser/driver/mongodb/MongoQueryRunner.d.ts +1 -0
  175. package/browser/driver/mongodb/MongoQueryRunner.js +175 -175
  176. package/browser/driver/mongodb/MongoQueryRunner.js.map +1 -1
  177. package/browser/driver/mongodb/typings.d.ts +4 -1
  178. package/browser/driver/mongodb/typings.js.map +1 -1
  179. package/browser/driver/mysql/MysqlDriver.d.ts +7 -2
  180. package/browser/driver/mysql/MysqlDriver.js +16 -9
  181. package/browser/driver/mysql/MysqlDriver.js.map +1 -1
  182. package/browser/driver/mysql/MysqlQueryRunner.d.ts +7 -1
  183. package/browser/driver/mysql/MysqlQueryRunner.js +246 -149
  184. package/browser/driver/mysql/MysqlQueryRunner.js.map +1 -1
  185. package/browser/driver/nativescript/NativescriptDriver.d.ts +2 -1
  186. package/browser/driver/nativescript/NativescriptDriver.js +4 -5
  187. package/browser/driver/nativescript/NativescriptDriver.js.map +1 -1
  188. package/browser/driver/nativescript/NativescriptQueryRunner.js +2 -2
  189. package/browser/driver/nativescript/NativescriptQueryRunner.js.map +1 -1
  190. package/browser/driver/oracle/OracleDriver.d.ts +6 -1
  191. package/browser/driver/oracle/OracleDriver.js +17 -12
  192. package/browser/driver/oracle/OracleDriver.js.map +1 -1
  193. package/browser/driver/oracle/OracleQueryRunner.d.ts +3 -1
  194. package/browser/driver/oracle/OracleQueryRunner.js +195 -128
  195. package/browser/driver/oracle/OracleQueryRunner.js.map +1 -1
  196. package/browser/driver/postgres/PostgresConnectionCredentialsOptions.d.ts +1 -1
  197. package/browser/driver/postgres/PostgresConnectionCredentialsOptions.js.map +1 -1
  198. package/browser/driver/postgres/PostgresConnectionOptions.d.ts +9 -0
  199. package/browser/driver/postgres/PostgresConnectionOptions.js.map +1 -1
  200. package/browser/driver/postgres/PostgresDriver.d.ts +19 -4
  201. package/browser/driver/postgres/PostgresDriver.js +194 -124
  202. package/browser/driver/postgres/PostgresDriver.js.map +1 -1
  203. package/browser/driver/postgres/PostgresQueryRunner.d.ts +3 -1
  204. package/browser/driver/postgres/PostgresQueryRunner.js +416 -196
  205. package/browser/driver/postgres/PostgresQueryRunner.js.map +1 -1
  206. package/browser/driver/react-native/ReactNativeDriver.d.ts +2 -1
  207. package/browser/driver/react-native/ReactNativeDriver.js +6 -6
  208. package/browser/driver/react-native/ReactNativeDriver.js.map +1 -1
  209. package/browser/driver/react-native/ReactNativeQueryRunner.js +4 -4
  210. package/browser/driver/react-native/ReactNativeQueryRunner.js.map +1 -1
  211. package/browser/driver/sap/SapConnectionCredentialsOptions.d.ts +1 -1
  212. package/browser/driver/sap/SapConnectionCredentialsOptions.js.map +1 -1
  213. package/browser/driver/sap/SapDriver.d.ts +6 -1
  214. package/browser/driver/sap/SapDriver.js +25 -15
  215. package/browser/driver/sap/SapDriver.js.map +1 -1
  216. package/browser/driver/sap/SapQueryRunner.d.ts +3 -1
  217. package/browser/driver/sap/SapQueryRunner.js +224 -156
  218. package/browser/driver/sap/SapQueryRunner.js.map +1 -1
  219. package/browser/driver/sqlite/SqliteConnectionOptions.d.ts +18 -0
  220. package/browser/driver/sqlite/SqliteConnectionOptions.js.map +1 -1
  221. package/browser/driver/sqlite/SqliteDriver.d.ts +2 -1
  222. package/browser/driver/sqlite/SqliteDriver.js +30 -18
  223. package/browser/driver/sqlite/SqliteDriver.js.map +1 -1
  224. package/browser/driver/sqlite/SqliteQueryRunner.js +33 -18
  225. package/browser/driver/sqlite/SqliteQueryRunner.js.map +1 -1
  226. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.d.ts +7 -2
  227. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js +36 -9
  228. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
  229. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.d.ts +1 -0
  230. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +134 -120
  231. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  232. package/browser/driver/sqljs/SqljsDriver.d.ts +2 -1
  233. package/browser/driver/sqljs/SqljsDriver.js +15 -16
  234. package/browser/driver/sqljs/SqljsDriver.js.map +1 -1
  235. package/browser/driver/sqljs/SqljsQueryRunner.js +11 -7
  236. package/browser/driver/sqljs/SqljsQueryRunner.js.map +1 -1
  237. package/browser/driver/sqlserver/SqlServerDriver.d.ts +6 -1
  238. package/browser/driver/sqlserver/SqlServerDriver.js +13 -8
  239. package/browser/driver/sqlserver/SqlServerDriver.js.map +1 -1
  240. package/browser/driver/sqlserver/SqlServerQueryRunner.d.ts +3 -1
  241. package/browser/driver/sqlserver/SqlServerQueryRunner.js +237 -170
  242. package/browser/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  243. package/browser/driver/types/ColumnTypes.d.ts +1 -1
  244. package/browser/driver/types/ColumnTypes.js.map +1 -1
  245. package/browser/driver/types/DatabaseType.d.ts +1 -1
  246. package/browser/driver/types/DatabaseType.js.map +1 -1
  247. package/browser/driver/types/ReplicationMode.d.ts +1 -0
  248. package/browser/driver/types/ReplicationMode.js +3 -0
  249. package/browser/driver/types/ReplicationMode.js.map +1 -0
  250. package/browser/entity-manager/EntityManager.d.ts +42 -257
  251. package/browser/entity-manager/EntityManager.js +39 -39
  252. package/browser/entity-manager/EntityManager.js.map +1 -1
  253. package/browser/entity-manager/MongoEntityManager.d.ts +46 -46
  254. package/browser/entity-manager/MongoEntityManager.js +17 -17
  255. package/browser/entity-manager/MongoEntityManager.js.map +1 -1
  256. package/browser/entity-manager/SqljsEntityManager.js +6 -6
  257. package/browser/entity-manager/SqljsEntityManager.js.map +1 -1
  258. package/browser/entity-schema/EntitySchemaColumnOptions.js.map +1 -1
  259. package/browser/entity-schema/EntitySchemaRelationOptions.d.ts +1 -1
  260. package/browser/entity-schema/EntitySchemaRelationOptions.js.map +1 -1
  261. package/browser/entity-schema/EntitySchemaTransformer.js +22 -7
  262. package/browser/entity-schema/EntitySchemaTransformer.js.map +1 -1
  263. package/browser/error/AlreadyHasActiveConnectionError.js +2 -2
  264. package/browser/error/AlreadyHasActiveConnectionError.js.map +1 -1
  265. package/browser/error/CannotAttachTreeChildrenEntityError.js +2 -2
  266. package/browser/error/CannotAttachTreeChildrenEntityError.js.map +1 -1
  267. package/browser/error/CannotConnectAlreadyConnectedError.js +2 -2
  268. package/browser/error/CannotConnectAlreadyConnectedError.js.map +1 -1
  269. package/browser/error/CannotCreateEntityIdMapError.js +2 -2
  270. package/browser/error/CannotCreateEntityIdMapError.js.map +1 -1
  271. package/browser/error/CannotDetermineEntityError.js +2 -2
  272. package/browser/error/CannotDetermineEntityError.js.map +1 -1
  273. package/browser/error/CannotExecuteNotConnectedError.js +2 -2
  274. package/browser/error/CannotExecuteNotConnectedError.js.map +1 -1
  275. package/browser/error/CannotGetEntityManagerNotConnectedError.js +2 -2
  276. package/browser/error/CannotGetEntityManagerNotConnectedError.js.map +1 -1
  277. package/browser/error/CannotReflectMethodParameterTypeError.js +2 -2
  278. package/browser/error/CannotReflectMethodParameterTypeError.js.map +1 -1
  279. package/browser/error/CircularRelationsError.js +2 -2
  280. package/browser/error/CircularRelationsError.js.map +1 -1
  281. package/browser/error/ColumnTypeUndefinedError.js +2 -2
  282. package/browser/error/ColumnTypeUndefinedError.js.map +1 -1
  283. package/browser/error/ConnectionIsNotSetError.js +2 -2
  284. package/browser/error/ConnectionIsNotSetError.js.map +1 -1
  285. package/browser/error/ConnectionNotFoundError.js +2 -2
  286. package/browser/error/ConnectionNotFoundError.js.map +1 -1
  287. package/browser/error/CustomRepositoryCannotInheritRepositoryError.js +2 -2
  288. package/browser/error/CustomRepositoryCannotInheritRepositoryError.js.map +1 -1
  289. package/browser/error/CustomRepositoryDoesNotHaveEntityError.js +2 -2
  290. package/browser/error/CustomRepositoryDoesNotHaveEntityError.js.map +1 -1
  291. package/browser/error/CustomRepositoryNotFoundError.js +2 -2
  292. package/browser/error/CustomRepositoryNotFoundError.js.map +1 -1
  293. package/browser/error/DataTypeNotSupportedError.js +2 -2
  294. package/browser/error/DataTypeNotSupportedError.js.map +1 -1
  295. package/browser/error/DriverOptionNotSetError.js +2 -2
  296. package/browser/error/DriverOptionNotSetError.js.map +1 -1
  297. package/browser/error/DriverPackageNotInstalledError.js +2 -2
  298. package/browser/error/DriverPackageNotInstalledError.js.map +1 -1
  299. package/browser/error/EntityColumnNotFound.js +2 -2
  300. package/browser/error/EntityColumnNotFound.js.map +1 -1
  301. package/browser/error/EntityMetadataNotFoundError.d.ts +2 -2
  302. package/browser/error/EntityMetadataNotFoundError.js +5 -2
  303. package/browser/error/EntityMetadataNotFoundError.js.map +1 -1
  304. package/browser/error/EntityNotFoundError.d.ts +2 -3
  305. package/browser/error/EntityNotFoundError.js +5 -2
  306. package/browser/error/EntityNotFoundError.js.map +1 -1
  307. package/browser/error/FindRelationsNotFoundError.js +4 -4
  308. package/browser/error/FindRelationsNotFoundError.js.map +1 -1
  309. package/browser/error/InitializedRelationError.js +2 -2
  310. package/browser/error/InitializedRelationError.js.map +1 -1
  311. package/browser/error/InsertValuesMissingError.js +2 -2
  312. package/browser/error/InsertValuesMissingError.js.map +1 -1
  313. package/browser/error/LimitOnUpdateNotSupportedError.js +2 -2
  314. package/browser/error/LimitOnUpdateNotSupportedError.js.map +1 -1
  315. package/browser/error/LockNotSupportedOnGivenDriverError.js +2 -2
  316. package/browser/error/LockNotSupportedOnGivenDriverError.js.map +1 -1
  317. package/browser/error/MetadataAlreadyExistsError.js +2 -2
  318. package/browser/error/MetadataAlreadyExistsError.js.map +1 -1
  319. package/browser/error/MetadataWithSuchNameAlreadyExistsError.js +2 -2
  320. package/browser/error/MetadataWithSuchNameAlreadyExistsError.js.map +1 -1
  321. package/browser/error/MissingDeleteDateColumnError.js +2 -2
  322. package/browser/error/MissingDeleteDateColumnError.js.map +1 -1
  323. package/browser/error/MissingDriverError.js +3 -3
  324. package/browser/error/MissingDriverError.js.map +1 -1
  325. package/browser/error/MissingJoinColumnError.js +2 -2
  326. package/browser/error/MissingJoinColumnError.js.map +1 -1
  327. package/browser/error/MissingJoinTableError.js +2 -2
  328. package/browser/error/MissingJoinTableError.js.map +1 -1
  329. package/browser/error/MissingPrimaryColumnError.js +2 -2
  330. package/browser/error/MissingPrimaryColumnError.js.map +1 -1
  331. package/browser/error/MustBeEntityError.js +2 -2
  332. package/browser/error/MustBeEntityError.js.map +1 -1
  333. package/browser/error/NamingStrategyNotFoundError.js +2 -2
  334. package/browser/error/NamingStrategyNotFoundError.js.map +1 -1
  335. package/browser/error/NoConnectionForRepositoryError.js +2 -2
  336. package/browser/error/NoConnectionForRepositoryError.js.map +1 -1
  337. package/browser/error/NoConnectionOptionError.js +2 -2
  338. package/browser/error/NoConnectionOptionError.js.map +1 -1
  339. package/browser/error/NoNeedToReleaseEntityManagerError.js +2 -2
  340. package/browser/error/NoNeedToReleaseEntityManagerError.js.map +1 -1
  341. package/browser/error/NoVersionOrUpdateDateColumnError.js +2 -2
  342. package/browser/error/NoVersionOrUpdateDateColumnError.js.map +1 -1
  343. package/browser/error/OffsetWithoutLimitNotSupportedError.js +2 -2
  344. package/browser/error/OffsetWithoutLimitNotSupportedError.js.map +1 -1
  345. package/browser/error/OptimisticLockCanNotBeUsedError.js +2 -2
  346. package/browser/error/OptimisticLockCanNotBeUsedError.js.map +1 -1
  347. package/browser/error/OptimisticLockVersionMismatchError.js +2 -2
  348. package/browser/error/OptimisticLockVersionMismatchError.js.map +1 -1
  349. package/browser/error/PersistedEntityNotFoundError.js +2 -2
  350. package/browser/error/PersistedEntityNotFoundError.js.map +1 -1
  351. package/browser/error/PessimisticLockTransactionRequiredError.js +2 -2
  352. package/browser/error/PessimisticLockTransactionRequiredError.js.map +1 -1
  353. package/browser/error/PrimaryColumnCannotBeNullableError.js +2 -2
  354. package/browser/error/PrimaryColumnCannotBeNullableError.js.map +1 -1
  355. package/browser/error/QueryFailedError.js +3 -3
  356. package/browser/error/QueryFailedError.js.map +1 -1
  357. package/browser/error/QueryRunnerAlreadyReleasedError.js +2 -2
  358. package/browser/error/QueryRunnerAlreadyReleasedError.js.map +1 -1
  359. package/browser/error/QueryRunnerProviderAlreadyReleasedError.js +2 -2
  360. package/browser/error/QueryRunnerProviderAlreadyReleasedError.js.map +1 -1
  361. package/browser/error/RepositoryNotFoundError.d.ts +2 -2
  362. package/browser/error/RepositoryNotFoundError.js +5 -2
  363. package/browser/error/RepositoryNotFoundError.js.map +1 -1
  364. package/browser/error/RepositoryNotTreeError.d.ts +2 -2
  365. package/browser/error/RepositoryNotTreeError.js +11 -8
  366. package/browser/error/RepositoryNotTreeError.js.map +1 -1
  367. package/browser/error/ReturningStatementNotSupportedError.js +2 -2
  368. package/browser/error/ReturningStatementNotSupportedError.js.map +1 -1
  369. package/browser/error/SubjectRemovedAndUpdatedError.js +2 -2
  370. package/browser/error/SubjectRemovedAndUpdatedError.js.map +1 -1
  371. package/browser/error/SubjectWithoutIdentifierError.js +2 -2
  372. package/browser/error/SubjectWithoutIdentifierError.js.map +1 -1
  373. package/browser/error/TransactionAlreadyStartedError.js +2 -2
  374. package/browser/error/TransactionAlreadyStartedError.js.map +1 -1
  375. package/browser/error/TransactionNotStartedError.js +2 -2
  376. package/browser/error/TransactionNotStartedError.js.map +1 -1
  377. package/browser/error/TreeRepositoryNotSupportedError.js +2 -2
  378. package/browser/error/TreeRepositoryNotSupportedError.js.map +1 -1
  379. package/browser/error/UpdateValuesMissingError.js +2 -2
  380. package/browser/error/UpdateValuesMissingError.js.map +1 -1
  381. package/browser/error/UsingJoinColumnIsNotAllowedError.js +2 -2
  382. package/browser/error/UsingJoinColumnIsNotAllowedError.js.map +1 -1
  383. package/browser/error/UsingJoinColumnOnlyOnOneSideAllowedError.js +2 -2
  384. package/browser/error/UsingJoinColumnOnlyOnOneSideAllowedError.js.map +1 -1
  385. package/browser/error/UsingJoinTableIsNotAllowedError.js +2 -2
  386. package/browser/error/UsingJoinTableIsNotAllowedError.js.map +1 -1
  387. package/browser/error/UsingJoinTableOnlyOnOneSideAllowedError.js +2 -2
  388. package/browser/error/UsingJoinTableOnlyOnOneSideAllowedError.js.map +1 -1
  389. package/browser/find-options/FindOneOptions.d.ts +2 -2
  390. package/browser/find-options/FindOneOptions.js.map +1 -1
  391. package/browser/find-options/FindOperator.d.ts +6 -3
  392. package/browser/find-options/FindOperator.js +22 -45
  393. package/browser/find-options/FindOperator.js.map +1 -1
  394. package/browser/find-options/FindOptionsUtils.d.ts +2 -2
  395. package/browser/find-options/FindOptionsUtils.js +1 -1
  396. package/browser/find-options/FindOptionsUtils.js.map +1 -1
  397. package/browser/find-options/operator/Any.d.ts +1 -1
  398. package/browser/find-options/operator/Any.js.map +1 -1
  399. package/browser/find-options/operator/Between.d.ts +1 -1
  400. package/browser/find-options/operator/Between.js.map +1 -1
  401. package/browser/find-options/operator/In.d.ts +1 -1
  402. package/browser/find-options/operator/In.js.map +1 -1
  403. package/browser/find-options/operator/Raw.d.ts +1 -1
  404. package/browser/find-options/operator/Raw.js.map +1 -1
  405. package/browser/index.d.ts +8 -11
  406. package/browser/index.js +8 -15
  407. package/browser/index.js.map +1 -1
  408. package/browser/logger/DebugLogger.d.ts +0 -1
  409. package/browser/logger/DebugLogger.js +9 -9
  410. package/browser/logger/DebugLogger.js.map +1 -1
  411. package/browser/logger/FileLogger.d.ts +3 -1
  412. package/browser/logger/FileLogger.js +9 -3
  413. package/browser/logger/FileLogger.js.map +1 -1
  414. package/browser/logger/LoggerOptions.d.ts +9 -0
  415. package/browser/logger/LoggerOptions.js.map +1 -1
  416. package/browser/metadata/ColumnMetadata.js +15 -16
  417. package/browser/metadata/ColumnMetadata.js.map +1 -1
  418. package/browser/metadata/EmbeddedMetadata.js +2 -2
  419. package/browser/metadata/EmbeddedMetadata.js.map +1 -1
  420. package/browser/metadata/EntityMetadata.d.ts +1 -5
  421. package/browser/metadata/EntityMetadata.js +15 -16
  422. package/browser/metadata/EntityMetadata.js.map +1 -1
  423. package/browser/metadata/RelationMetadata.js +12 -12
  424. package/browser/metadata/RelationMetadata.js.map +1 -1
  425. package/browser/metadata-args/EntityRepositoryMetadataArgs.d.ts +2 -2
  426. package/browser/metadata-args/EntityRepositoryMetadataArgs.js.map +1 -1
  427. package/browser/metadata-args/RelationCountMetadataArgs.js.map +1 -1
  428. package/browser/metadata-args/RelationIdMetadataArgs.js.map +1 -1
  429. package/browser/metadata-builder/EntityMetadataBuilder.js +14 -12
  430. package/browser/metadata-builder/EntityMetadataBuilder.js.map +1 -1
  431. package/browser/metadata-builder/JunctionEntityMetadataBuilder.js +3 -2
  432. package/browser/metadata-builder/JunctionEntityMetadataBuilder.js.map +1 -1
  433. package/browser/migration/MigrationExecutor.js +132 -103
  434. package/browser/migration/MigrationExecutor.js.map +1 -1
  435. package/browser/naming-strategy/DefaultNamingStrategy.d.ts +5 -0
  436. package/browser/naming-strategy/DefaultNamingStrategy.js +8 -6
  437. package/browser/naming-strategy/DefaultNamingStrategy.js.map +1 -1
  438. package/browser/naming-strategy/NamingStrategyInterface.d.ts +11 -0
  439. package/browser/naming-strategy/NamingStrategyInterface.js.map +1 -1
  440. package/browser/persistence/EntityPersistExecutor.js +64 -46
  441. package/browser/persistence/EntityPersistExecutor.js.map +1 -1
  442. package/browser/persistence/Subject.js +2 -2
  443. package/browser/persistence/Subject.js.map +1 -1
  444. package/browser/persistence/SubjectChangedColumnsComputer.js +11 -7
  445. package/browser/persistence/SubjectChangedColumnsComputer.js.map +1 -1
  446. package/browser/persistence/SubjectDatabaseEntityLoader.js +9 -8
  447. package/browser/persistence/SubjectDatabaseEntityLoader.js.map +1 -1
  448. package/browser/persistence/SubjectExecutor.js +263 -206
  449. package/browser/persistence/SubjectExecutor.js.map +1 -1
  450. package/browser/persistence/SubjectTopoligicalSorter.js +6 -6
  451. package/browser/persistence/SubjectTopoligicalSorter.js.map +1 -1
  452. package/browser/persistence/subject-builder/CascadesSubjectBuilder.js +2 -2
  453. package/browser/persistence/subject-builder/CascadesSubjectBuilder.js.map +1 -1
  454. package/browser/persistence/subject-builder/ManyToManySubjectBuilder.js +2 -3
  455. package/browser/persistence/subject-builder/ManyToManySubjectBuilder.js.map +1 -1
  456. package/browser/persistence/subject-builder/OneToManySubjectBuilder.js +1 -1
  457. package/browser/persistence/subject-builder/OneToManySubjectBuilder.js.map +1 -1
  458. package/browser/persistence/subject-builder/OneToOneInverseSideSubjectBuilder.js +1 -1
  459. package/browser/persistence/subject-builder/OneToOneInverseSideSubjectBuilder.js.map +1 -1
  460. package/browser/persistence/tree/ClosureSubjectExecutor.js +4 -4
  461. package/browser/persistence/tree/ClosureSubjectExecutor.js.map +1 -1
  462. package/browser/persistence/tree/MaterializedPathSubjectExecutor.js +5 -4
  463. package/browser/persistence/tree/MaterializedPathSubjectExecutor.js.map +1 -1
  464. package/browser/persistence/tree/NestedSetSubjectExecutor.js +3 -3
  465. package/browser/platform/BrowserConnectionOptionsReaderDummy.d.ts +38 -0
  466. package/browser/platform/BrowserConnectionOptionsReaderDummy.js +93 -0
  467. package/browser/platform/BrowserConnectionOptionsReaderDummy.js.map +1 -0
  468. package/browser/platform/BrowserDirectoryExportedClassesLoader.d.ts +15 -0
  469. package/browser/platform/BrowserDirectoryExportedClassesLoader.js +22 -0
  470. package/browser/platform/BrowserDirectoryExportedClassesLoader.js.map +1 -0
  471. package/browser/platform/BrowserDisabledDriversDummy.d.ts +32 -2
  472. package/browser/platform/BrowserDisabledDriversDummy.js +52 -2
  473. package/browser/platform/BrowserDisabledDriversDummy.js.map +1 -1
  474. package/browser/platform/BrowserFileLoggerDummy.d.ts +33 -0
  475. package/browser/platform/BrowserFileLoggerDummy.js +58 -0
  476. package/browser/platform/BrowserFileLoggerDummy.js.map +1 -0
  477. package/browser/platform/BrowserPlatformTools.d.ts +74 -0
  478. package/browser/platform/BrowserPlatformTools.js +157 -0
  479. package/browser/platform/BrowserPlatformTools.js.map +1 -0
  480. package/browser/platform/PlatformTools.d.ts +15 -21
  481. package/browser/platform/PlatformTools.js +142 -81
  482. package/browser/platform/PlatformTools.js.map +1 -1
  483. package/browser/query-builder/Alias.js.map +1 -1
  484. package/browser/query-builder/DeleteQueryBuilder.d.ts +2 -3
  485. package/browser/query-builder/DeleteQueryBuilder.js +10 -5
  486. package/browser/query-builder/DeleteQueryBuilder.js.map +1 -1
  487. package/browser/query-builder/InsertQueryBuilder.d.ts +2 -3
  488. package/browser/query-builder/InsertQueryBuilder.js +23 -9
  489. package/browser/query-builder/InsertQueryBuilder.js.map +1 -1
  490. package/browser/query-builder/JoinAttribute.js +2 -2
  491. package/browser/query-builder/JoinAttribute.js.map +1 -1
  492. package/browser/query-builder/QueryBuilder.d.ts +11 -15
  493. package/browser/query-builder/QueryBuilder.js +92 -31
  494. package/browser/query-builder/QueryBuilder.js.map +1 -1
  495. package/browser/query-builder/QueryBuilderUtils.js +2 -2
  496. package/browser/query-builder/QueryBuilderUtils.js.map +1 -1
  497. package/browser/query-builder/QueryExpressionMap.d.ts +1 -1
  498. package/browser/query-builder/QueryExpressionMap.js +4 -4
  499. package/browser/query-builder/QueryExpressionMap.js.map +1 -1
  500. package/browser/query-builder/QueryPartialEntity.d.ts +1 -1
  501. package/browser/query-builder/QueryPartialEntity.js.map +1 -1
  502. package/browser/query-builder/RelationIdLoader.js +5 -5
  503. package/browser/query-builder/RelationLoader.js +3 -3
  504. package/browser/query-builder/RelationLoader.js.map +1 -1
  505. package/browser/query-builder/RelationQueryBuilder.js +14 -14
  506. package/browser/query-builder/RelationQueryBuilder.js.map +1 -1
  507. package/browser/query-builder/RelationRemover.js +7 -7
  508. package/browser/query-builder/RelationRemover.js.map +1 -1
  509. package/browser/query-builder/RelationUpdater.js +3 -3
  510. package/browser/query-builder/ReturningResultsEntityUpdator.js +30 -31
  511. package/browser/query-builder/ReturningResultsEntityUpdator.js.map +1 -1
  512. package/browser/query-builder/SelectQueryBuilder.d.ts +5 -4
  513. package/browser/query-builder/SelectQueryBuilder.js +77 -41
  514. package/browser/query-builder/SelectQueryBuilder.js.map +1 -1
  515. package/browser/query-builder/SoftDeleteQueryBuilder.d.ts +2 -3
  516. package/browser/query-builder/SoftDeleteQueryBuilder.js +7 -7
  517. package/browser/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
  518. package/browser/query-builder/UpdateQueryBuilder.js +22 -8
  519. package/browser/query-builder/UpdateQueryBuilder.js.map +1 -1
  520. package/browser/query-builder/relation-count/RelationCountAttribute.js +3 -3
  521. package/browser/query-builder/relation-count/RelationCountAttribute.js.map +1 -1
  522. package/browser/query-builder/relation-count/RelationCountLoader.js +5 -5
  523. package/browser/query-builder/relation-id/RelationIdAttribute.js +2 -2
  524. package/browser/query-builder/relation-id/RelationIdAttribute.js.map +1 -1
  525. package/browser/query-builder/relation-id/RelationIdLoader.js +6 -6
  526. package/browser/query-builder/relation-id/RelationIdLoader.js.map +1 -1
  527. package/browser/query-builder/transformer/PlainObjectToDatabaseEntityTransformer.js +4 -4
  528. package/browser/query-builder/transformer/PlainObjectToDatabaseEntityTransformer.js.map +1 -1
  529. package/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.js +4 -7
  530. package/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.js.map +1 -1
  531. package/browser/query-runner/BaseQueryRunner.d.ts +2 -5
  532. package/browser/query-runner/BaseQueryRunner.js +106 -56
  533. package/browser/query-runner/BaseQueryRunner.js.map +1 -1
  534. package/browser/query-runner/QueryRunner.d.ts +1 -0
  535. package/browser/repository/AbstractRepository.js.map +1 -1
  536. package/browser/repository/BaseEntity.d.ts +17 -1
  537. package/browser/repository/BaseEntity.js +24 -6
  538. package/browser/repository/BaseEntity.js.map +1 -1
  539. package/browser/repository/MongoRepository.js +2 -2
  540. package/browser/repository/MongoRepository.js.map +1 -1
  541. package/browser/repository/Repository.d.ts +1 -1
  542. package/browser/repository/Repository.js +4 -4
  543. package/browser/repository/Repository.js.map +1 -1
  544. package/browser/repository/TreeRepository.js +4 -4
  545. package/browser/repository/TreeRepository.js.map +1 -1
  546. package/browser/schema-builder/MongoSchemaBuilder.js +4 -4
  547. package/browser/schema-builder/MongoSchemaBuilder.js.map +1 -1
  548. package/browser/schema-builder/RdbmsSchemaBuilder.js +924 -368
  549. package/browser/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
  550. package/browser/schema-builder/options/TableIndexOptions.d.ts +1 -1
  551. package/browser/schema-builder/options/TableIndexOptions.js.map +1 -1
  552. package/browser/schema-builder/table/TableCheck.js +2 -2
  553. package/browser/schema-builder/table/TableCheck.js.map +1 -1
  554. package/browser/schema-builder/table/TableForeignKey.js +3 -3
  555. package/browser/schema-builder/table/TableForeignKey.js.map +1 -1
  556. package/browser/schema-builder/table/TableIndex.js +2 -2
  557. package/browser/schema-builder/table/TableIndex.js.map +1 -1
  558. package/browser/schema-builder/table/TableUnique.js +2 -2
  559. package/browser/schema-builder/table/TableUnique.js.map +1 -1
  560. package/browser/schema-builder/view/View.d.ts +1 -2
  561. package/browser/schema-builder/view/View.js.map +1 -1
  562. package/browser/util/ApplyValueTransformers.js.map +1 -1
  563. package/browser/util/DateUtils.js +3 -3
  564. package/browser/util/DateUtils.js.map +1 -1
  565. package/browser/util/DirectoryExportedClassesLoader.js +6 -5
  566. package/browser/util/DirectoryExportedClassesLoader.js.map +1 -1
  567. package/browser/util/ObjectUtils.js +4 -4
  568. package/browser/util/ObjectUtils.js.map +1 -1
  569. package/browser/util/OrmUtils.d.ts +4 -0
  570. package/browser/util/OrmUtils.js +19 -4
  571. package/browser/util/OrmUtils.js.map +1 -1
  572. package/browser/util/StringUtils.js +1 -1
  573. package/browser/util/StringUtils.js.map +1 -1
  574. package/cache/DbQueryResultCache.js +1 -1
  575. package/cache/DbQueryResultCache.js.map +1 -1
  576. package/cache/RedisQueryResultCache.js +7 -2
  577. package/cache/RedisQueryResultCache.js.map +1 -1
  578. package/cli.js +2 -1
  579. package/cli.js.map +1 -1
  580. package/commands/CacheClearCommand.js +4 -4
  581. package/commands/CacheClearCommand.js.map +1 -1
  582. package/commands/CommandUtils.d.ts +1 -1
  583. package/commands/CommandUtils.js +4 -4
  584. package/commands/CommandUtils.js.map +1 -1
  585. package/commands/EntityCreateCommand.js +4 -4
  586. package/commands/EntityCreateCommand.js.map +1 -1
  587. package/commands/InitCommand.js +15 -5
  588. package/commands/InitCommand.js.map +1 -1
  589. package/commands/MigrationCreateCommand.js +6 -6
  590. package/commands/MigrationCreateCommand.js.map +1 -1
  591. package/commands/MigrationGenerateCommand.d.ts +11 -1
  592. package/commands/MigrationGenerateCommand.js +42 -10
  593. package/commands/MigrationGenerateCommand.js.map +1 -1
  594. package/commands/MigrationRevertCommand.js +2 -2
  595. package/commands/MigrationRevertCommand.js.map +1 -1
  596. package/commands/MigrationRunCommand.js +3 -3
  597. package/commands/MigrationRunCommand.js.map +1 -1
  598. package/commands/MigrationShowCommand.js +3 -3
  599. package/commands/MigrationShowCommand.js.map +1 -1
  600. package/commands/QueryCommand.js +5 -5
  601. package/commands/QueryCommand.js.map +1 -1
  602. package/commands/SchemaDropCommand.js +3 -3
  603. package/commands/SchemaDropCommand.js.map +1 -1
  604. package/commands/SchemaLogCommand.js +6 -6
  605. package/commands/SchemaLogCommand.js.map +1 -1
  606. package/commands/SchemaSyncCommand.js +3 -3
  607. package/commands/SchemaSyncCommand.js.map +1 -1
  608. package/commands/SubscriberCreateCommand.js +3 -3
  609. package/commands/SubscriberCreateCommand.js.map +1 -1
  610. package/commands/VersionCommand.js +2 -2
  611. package/commands/VersionCommand.js.map +1 -1
  612. package/common/DeepPartial.d.ts +1 -1
  613. package/common/DeepPartial.js.map +1 -1
  614. package/common/EntityTarget.d.ts +9 -0
  615. package/common/EntityTarget.js +4 -0
  616. package/common/EntityTarget.js.map +1 -0
  617. package/connection/Connection.d.ts +11 -10
  618. package/connection/Connection.js +48 -24
  619. package/connection/Connection.js.map +1 -1
  620. package/connection/ConnectionOptions.d.ts +3 -1
  621. package/connection/ConnectionOptions.js.map +1 -1
  622. package/connection/ConnectionOptionsReader.js +38 -33
  623. package/connection/ConnectionOptionsReader.js.map +1 -1
  624. package/connection/options-reader/ConnectionOptionsEnvReader.d.ts +5 -1
  625. package/connection/options-reader/ConnectionOptionsEnvReader.js +45 -31
  626. package/connection/options-reader/ConnectionOptionsEnvReader.js.map +1 -1
  627. package/connection/options-reader/ConnectionOptionsXmlReader.js +2 -2
  628. package/connection/options-reader/ConnectionOptionsXmlReader.js.map +1 -1
  629. package/connection/options-reader/ConnectionOptionsYmlReader.d.ts +1 -1
  630. package/connection/options-reader/ConnectionOptionsYmlReader.js +15 -4
  631. package/connection/options-reader/ConnectionOptionsYmlReader.js.map +1 -1
  632. package/decorator/Check.d.ts +2 -2
  633. package/decorator/Check.js.map +1 -1
  634. package/decorator/EntityRepository.d.ts +1 -1
  635. package/decorator/EntityRepository.js.map +1 -1
  636. package/decorator/Exclusion.d.ts +2 -2
  637. package/decorator/Exclusion.js.map +1 -1
  638. package/decorator/Generated.d.ts +1 -1
  639. package/decorator/Generated.js.map +1 -1
  640. package/decorator/Index.d.ts +7 -7
  641. package/decorator/Index.js.map +1 -1
  642. package/decorator/Unique.d.ts +4 -4
  643. package/decorator/Unique.js +12 -1
  644. package/decorator/Unique.js.map +1 -1
  645. package/decorator/columns/Column.d.ts +12 -12
  646. package/decorator/columns/Column.js.map +1 -1
  647. package/decorator/columns/CreateDateColumn.d.ts +1 -1
  648. package/decorator/columns/CreateDateColumn.js.map +1 -1
  649. package/decorator/columns/DeleteDateColumn.d.ts +1 -1
  650. package/decorator/columns/DeleteDateColumn.js.map +1 -1
  651. package/decorator/columns/ObjectIdColumn.d.ts +1 -1
  652. package/decorator/columns/ObjectIdColumn.js.map +1 -1
  653. package/decorator/columns/PrimaryColumn.d.ts +2 -2
  654. package/decorator/columns/PrimaryColumn.js.map +1 -1
  655. package/decorator/columns/PrimaryGeneratedColumn.d.ts +5 -5
  656. package/decorator/columns/PrimaryGeneratedColumn.js.map +1 -1
  657. package/decorator/columns/UpdateDateColumn.d.ts +1 -1
  658. package/decorator/columns/UpdateDateColumn.js.map +1 -1
  659. package/decorator/columns/VersionColumn.d.ts +1 -1
  660. package/decorator/columns/VersionColumn.js.map +1 -1
  661. package/decorator/columns/ViewColumn.d.ts +2 -1
  662. package/decorator/columns/ViewColumn.js +2 -2
  663. package/decorator/columns/ViewColumn.js.map +1 -1
  664. package/decorator/entity/ChildEntity.d.ts +1 -1
  665. package/decorator/entity/ChildEntity.js.map +1 -1
  666. package/decorator/entity/Entity.d.ts +2 -2
  667. package/decorator/entity/Entity.js.map +1 -1
  668. package/decorator/entity/TableInheritance.d.ts +1 -1
  669. package/decorator/entity/TableInheritance.js.map +1 -1
  670. package/decorator/entity-view/ViewEntity.d.ts +2 -2
  671. package/decorator/entity-view/ViewEntity.js.map +1 -1
  672. package/decorator/listeners/AfterInsert.d.ts +1 -1
  673. package/decorator/listeners/AfterInsert.js.map +1 -1
  674. package/decorator/listeners/AfterLoad.d.ts +1 -1
  675. package/decorator/listeners/AfterLoad.js.map +1 -1
  676. package/decorator/listeners/AfterRemove.d.ts +1 -1
  677. package/decorator/listeners/AfterRemove.js.map +1 -1
  678. package/decorator/listeners/AfterUpdate.d.ts +1 -1
  679. package/decorator/listeners/AfterUpdate.js.map +1 -1
  680. package/decorator/listeners/BeforeInsert.d.ts +1 -1
  681. package/decorator/listeners/BeforeInsert.js.map +1 -1
  682. package/decorator/listeners/BeforeRemove.d.ts +1 -1
  683. package/decorator/listeners/BeforeRemove.js.map +1 -1
  684. package/decorator/listeners/BeforeUpdate.d.ts +1 -1
  685. package/decorator/listeners/BeforeUpdate.js.map +1 -1
  686. package/decorator/listeners/EventSubscriber.d.ts +1 -1
  687. package/decorator/listeners/EventSubscriber.js.map +1 -1
  688. package/decorator/options/ColumnOptions.js.map +1 -1
  689. package/decorator/options/TransactionOptions.js.map +1 -1
  690. package/decorator/options/ViewColumnOptions.d.ts +9 -0
  691. package/decorator/options/ViewColumnOptions.js +4 -0
  692. package/decorator/options/ViewColumnOptions.js.map +1 -0
  693. package/decorator/relations/JoinColumn.d.ts +3 -3
  694. package/decorator/relations/JoinColumn.js.map +1 -1
  695. package/decorator/relations/JoinTable.d.ts +3 -3
  696. package/decorator/relations/JoinTable.js.map +1 -1
  697. package/decorator/relations/ManyToMany.d.ts +2 -2
  698. package/decorator/relations/ManyToMany.js.map +1 -1
  699. package/decorator/relations/ManyToOne.d.ts +2 -2
  700. package/decorator/relations/ManyToOne.js.map +1 -1
  701. package/decorator/relations/OneToMany.d.ts +3 -3
  702. package/decorator/relations/OneToMany.js +2 -2
  703. package/decorator/relations/OneToMany.js.map +1 -1
  704. package/decorator/relations/OneToOne.d.ts +2 -2
  705. package/decorator/relations/OneToOne.js.map +1 -1
  706. package/decorator/relations/RelationCount.d.ts +1 -1
  707. package/decorator/relations/RelationCount.js.map +1 -1
  708. package/decorator/relations/RelationId.d.ts +1 -1
  709. package/decorator/relations/RelationId.js.map +1 -1
  710. package/decorator/transaction/TransactionManager.d.ts +1 -1
  711. package/decorator/transaction/TransactionManager.js.map +1 -1
  712. package/decorator/tree/Tree.d.ts +1 -1
  713. package/decorator/tree/Tree.js.map +1 -1
  714. package/decorator/tree/TreeChildren.d.ts +1 -1
  715. package/decorator/tree/TreeChildren.js.map +1 -1
  716. package/decorator/tree/TreeLevelColumn.d.ts +1 -1
  717. package/decorator/tree/TreeLevelColumn.js.map +1 -1
  718. package/decorator/tree/TreeParent.d.ts +1 -1
  719. package/decorator/tree/TreeParent.js.map +1 -1
  720. package/driver/Driver.d.ts +7 -2
  721. package/driver/Driver.js.map +1 -1
  722. package/driver/DriverFactory.js +6 -0
  723. package/driver/DriverFactory.js.map +1 -1
  724. package/driver/DriverUtils.d.ts +2 -2
  725. package/driver/DriverUtils.js +6 -2
  726. package/driver/DriverUtils.js.map +1 -1
  727. package/driver/aurora-data-api/AuroraDataApiConnection.d.ts +2 -1
  728. package/driver/aurora-data-api/AuroraDataApiConnection.js +0 -1
  729. package/driver/aurora-data-api/AuroraDataApiConnection.js.map +1 -1
  730. package/driver/aurora-data-api/AuroraDataApiConnectionOptions.d.ts +6 -0
  731. package/driver/aurora-data-api/AuroraDataApiConnectionOptions.js.map +1 -1
  732. package/driver/aurora-data-api/AuroraDataApiDriver.d.ts +6 -1
  733. package/driver/aurora-data-api/AuroraDataApiDriver.js +7 -2
  734. package/driver/aurora-data-api/AuroraDataApiDriver.js.map +1 -1
  735. package/driver/aurora-data-api/AuroraDataApiQueryRunner.d.ts +4 -0
  736. package/driver/aurora-data-api/AuroraDataApiQueryRunner.js +106 -19
  737. package/driver/aurora-data-api/AuroraDataApiQueryRunner.js.map +1 -1
  738. package/driver/aurora-data-api-pg/AuroraDataApiPostgresConnectionOptions.d.ts +27 -0
  739. package/driver/aurora-data-api-pg/AuroraDataApiPostgresConnectionOptions.js +4 -0
  740. package/driver/aurora-data-api-pg/AuroraDataApiPostgresConnectionOptions.js.map +1 -0
  741. package/driver/aurora-data-api-pg/AuroraDataApiPostgresDriver.d.ts +57 -0
  742. package/driver/aurora-data-api-pg/AuroraDataApiPostgresDriver.js +101 -0
  743. package/driver/aurora-data-api-pg/AuroraDataApiPostgresDriver.js.map +1 -0
  744. package/driver/aurora-data-api-pg/AuroraDataApiPostgresQueryRunner.d.ts +51 -0
  745. package/driver/aurora-data-api-pg/AuroraDataApiPostgresQueryRunner.js +144 -0
  746. package/driver/aurora-data-api-pg/AuroraDataApiPostgresQueryRunner.js.map +1 -0
  747. package/driver/better-sqlite3/BetterSqlite3ConnectionOptions.d.ts +50 -0
  748. package/driver/better-sqlite3/BetterSqlite3ConnectionOptions.js +4 -0
  749. package/driver/better-sqlite3/BetterSqlite3ConnectionOptions.js.map +1 -0
  750. package/driver/better-sqlite3/BetterSqlite3Driver.d.ts +46 -0
  751. package/driver/better-sqlite3/BetterSqlite3Driver.js +127 -0
  752. package/driver/better-sqlite3/BetterSqlite3Driver.js.map +1 -0
  753. package/driver/better-sqlite3/BetterSqlite3QueryRunner.d.ts +22 -0
  754. package/driver/better-sqlite3/BetterSqlite3QueryRunner.js +115 -0
  755. package/driver/better-sqlite3/BetterSqlite3QueryRunner.js.map +1 -0
  756. package/driver/cockroachdb/CockroachConnectionCredentialsOptions.js.map +1 -1
  757. package/driver/cockroachdb/CockroachDriver.d.ts +6 -1
  758. package/driver/cockroachdb/CockroachDriver.js +6 -1
  759. package/driver/cockroachdb/CockroachDriver.js.map +1 -1
  760. package/driver/cockroachdb/CockroachQueryRunner.d.ts +2 -1
  761. package/driver/cockroachdb/CockroachQueryRunner.js +303 -75
  762. package/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  763. package/driver/cordova/CordovaDriver.d.ts +2 -1
  764. package/driver/cordova/CordovaDriver.js +0 -1
  765. package/driver/cordova/CordovaDriver.js.map +1 -1
  766. package/driver/expo/ExpoDriver.d.ts +2 -1
  767. package/driver/expo/ExpoDriver.js +1 -1
  768. package/driver/expo/ExpoDriver.js.map +1 -1
  769. package/driver/mongodb/MongoDriver.d.ts +6 -1
  770. package/driver/mongodb/MongoDriver.js +6 -1
  771. package/driver/mongodb/MongoDriver.js.map +1 -1
  772. package/driver/mongodb/MongoQueryRunner.js.map +1 -1
  773. package/driver/mongodb/typings.d.ts +4 -1
  774. package/driver/mongodb/typings.js.map +1 -1
  775. package/driver/mysql/MysqlDriver.d.ts +7 -2
  776. package/driver/mysql/MysqlDriver.js +10 -3
  777. package/driver/mysql/MysqlDriver.js.map +1 -1
  778. package/driver/mysql/MysqlQueryRunner.d.ts +6 -1
  779. package/driver/mysql/MysqlQueryRunner.js +122 -25
  780. package/driver/mysql/MysqlQueryRunner.js.map +1 -1
  781. package/driver/nativescript/NativescriptDriver.d.ts +2 -1
  782. package/driver/nativescript/NativescriptDriver.js +0 -1
  783. package/driver/nativescript/NativescriptDriver.js.map +1 -1
  784. package/driver/oracle/OracleDriver.d.ts +6 -1
  785. package/driver/oracle/OracleDriver.js +8 -3
  786. package/driver/oracle/OracleDriver.js.map +1 -1
  787. package/driver/oracle/OracleQueryRunner.d.ts +2 -1
  788. package/driver/oracle/OracleQueryRunner.js +87 -20
  789. package/driver/oracle/OracleQueryRunner.js.map +1 -1
  790. package/driver/postgres/PostgresConnectionCredentialsOptions.d.ts +1 -1
  791. package/driver/postgres/PostgresConnectionCredentialsOptions.js.map +1 -1
  792. package/driver/postgres/PostgresConnectionOptions.d.ts +9 -0
  793. package/driver/postgres/PostgresConnectionOptions.js.map +1 -1
  794. package/driver/postgres/PostgresDriver.d.ts +19 -4
  795. package/driver/postgres/PostgresDriver.js +179 -109
  796. package/driver/postgres/PostgresDriver.js.map +1 -1
  797. package/driver/postgres/PostgresQueryRunner.d.ts +2 -1
  798. package/driver/postgres/PostgresQueryRunner.js +288 -68
  799. package/driver/postgres/PostgresQueryRunner.js.map +1 -1
  800. package/driver/react-native/ReactNativeDriver.d.ts +2 -1
  801. package/driver/react-native/ReactNativeDriver.js +2 -2
  802. package/driver/react-native/ReactNativeDriver.js.map +1 -1
  803. package/driver/sap/SapConnectionCredentialsOptions.d.ts +1 -1
  804. package/driver/sap/SapConnectionCredentialsOptions.js.map +1 -1
  805. package/driver/sap/SapDriver.d.ts +6 -1
  806. package/driver/sap/SapDriver.js +19 -9
  807. package/driver/sap/SapDriver.js.map +1 -1
  808. package/driver/sap/SapQueryRunner.d.ts +2 -1
  809. package/driver/sap/SapQueryRunner.js +91 -23
  810. package/driver/sap/SapQueryRunner.js.map +1 -1
  811. package/driver/sqlite/SqliteConnectionOptions.d.ts +18 -0
  812. package/driver/sqlite/SqliteConnectionOptions.js.map +1 -1
  813. package/driver/sqlite/SqliteDriver.d.ts +2 -1
  814. package/driver/sqlite/SqliteDriver.js +24 -12
  815. package/driver/sqlite/SqliteDriver.js.map +1 -1
  816. package/driver/sqlite/SqliteQueryRunner.js +29 -14
  817. package/driver/sqlite/SqliteQueryRunner.js.map +1 -1
  818. package/driver/sqlite-abstract/AbstractSqliteDriver.d.ts +7 -2
  819. package/driver/sqlite-abstract/AbstractSqliteDriver.js +31 -4
  820. package/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
  821. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +17 -3
  822. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  823. package/driver/sqljs/SqljsDriver.d.ts +2 -1
  824. package/driver/sqljs/SqljsDriver.js +1 -2
  825. package/driver/sqljs/SqljsDriver.js.map +1 -1
  826. package/driver/sqljs/SqljsQueryRunner.js +5 -1
  827. package/driver/sqljs/SqljsQueryRunner.js.map +1 -1
  828. package/driver/sqlserver/SqlServerDriver.d.ts +6 -1
  829. package/driver/sqlserver/SqlServerDriver.js +6 -1
  830. package/driver/sqlserver/SqlServerDriver.js.map +1 -1
  831. package/driver/sqlserver/SqlServerQueryRunner.d.ts +2 -1
  832. package/driver/sqlserver/SqlServerQueryRunner.js +91 -24
  833. package/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  834. package/driver/types/ColumnTypes.d.ts +1 -1
  835. package/driver/types/ColumnTypes.js.map +1 -1
  836. package/driver/types/DatabaseType.d.ts +1 -1
  837. package/driver/types/DatabaseType.js.map +1 -1
  838. package/driver/types/ReplicationMode.d.ts +1 -0
  839. package/driver/types/ReplicationMode.js +4 -0
  840. package/driver/types/ReplicationMode.js.map +1 -0
  841. package/entity-manager/EntityManager.d.ts +42 -257
  842. package/entity-manager/EntityManager.js +10 -10
  843. package/entity-manager/EntityManager.js.map +1 -1
  844. package/entity-manager/MongoEntityManager.d.ts +46 -46
  845. package/entity-manager/MongoEntityManager.js.map +1 -1
  846. package/entity-schema/EntitySchemaColumnOptions.js.map +1 -1
  847. package/entity-schema/EntitySchemaRelationOptions.d.ts +1 -1
  848. package/entity-schema/EntitySchemaRelationOptions.js.map +1 -1
  849. package/entity-schema/EntitySchemaTransformer.js +22 -7
  850. package/entity-schema/EntitySchemaTransformer.js.map +1 -1
  851. package/error/EntityMetadataNotFoundError.d.ts +2 -2
  852. package/error/EntityMetadataNotFoundError.js +3 -0
  853. package/error/EntityMetadataNotFoundError.js.map +1 -1
  854. package/error/EntityNotFoundError.d.ts +2 -3
  855. package/error/EntityNotFoundError.js +3 -0
  856. package/error/EntityNotFoundError.js.map +1 -1
  857. package/error/FindRelationsNotFoundError.js +2 -2
  858. package/error/FindRelationsNotFoundError.js.map +1 -1
  859. package/error/MissingDriverError.js +1 -1
  860. package/error/MissingDriverError.js.map +1 -1
  861. package/error/QueryFailedError.js +1 -1
  862. package/error/QueryFailedError.js.map +1 -1
  863. package/error/RepositoryNotFoundError.d.ts +2 -2
  864. package/error/RepositoryNotFoundError.js +3 -0
  865. package/error/RepositoryNotFoundError.js.map +1 -1
  866. package/error/RepositoryNotTreeError.d.ts +2 -2
  867. package/error/RepositoryNotTreeError.js +9 -6
  868. package/error/RepositoryNotTreeError.js.map +1 -1
  869. package/find-options/FindOneOptions.d.ts +2 -2
  870. package/find-options/FindOneOptions.js.map +1 -1
  871. package/find-options/FindOperator.d.ts +6 -3
  872. package/find-options/FindOperator.js +22 -45
  873. package/find-options/FindOperator.js.map +1 -1
  874. package/find-options/FindOptionsUtils.d.ts +2 -2
  875. package/find-options/FindOptionsUtils.js +1 -1
  876. package/find-options/FindOptionsUtils.js.map +1 -1
  877. package/find-options/operator/Any.d.ts +1 -1
  878. package/find-options/operator/Any.js.map +1 -1
  879. package/find-options/operator/Between.d.ts +1 -1
  880. package/find-options/operator/Between.js.map +1 -1
  881. package/find-options/operator/In.d.ts +1 -1
  882. package/find-options/operator/In.js.map +1 -1
  883. package/find-options/operator/Raw.d.ts +1 -1
  884. package/find-options/operator/Raw.js.map +1 -1
  885. package/index.d.ts +8 -11
  886. package/index.js +1 -14
  887. package/index.js.map +1 -1
  888. package/logger/DebugLogger.d.ts +0 -1
  889. package/logger/DebugLogger.js +10 -9
  890. package/logger/DebugLogger.js.map +1 -1
  891. package/logger/FileLogger.d.ts +3 -1
  892. package/logger/FileLogger.js +10 -3
  893. package/logger/FileLogger.js.map +1 -1
  894. package/logger/LoggerOptions.d.ts +9 -0
  895. package/logger/LoggerOptions.js.map +1 -1
  896. package/metadata/ColumnMetadata.js +10 -11
  897. package/metadata/ColumnMetadata.js.map +1 -1
  898. package/metadata/EntityMetadata.d.ts +1 -5
  899. package/metadata/EntityMetadata.js +13 -14
  900. package/metadata/EntityMetadata.js.map +1 -1
  901. package/metadata/RelationMetadata.js +7 -7
  902. package/metadata/RelationMetadata.js.map +1 -1
  903. package/metadata-args/EntityRepositoryMetadataArgs.d.ts +2 -2
  904. package/metadata-args/EntityRepositoryMetadataArgs.js.map +1 -1
  905. package/metadata-args/RelationCountMetadataArgs.js.map +1 -1
  906. package/metadata-args/RelationIdMetadataArgs.js.map +1 -1
  907. package/metadata-builder/EntityMetadataBuilder.js +8 -6
  908. package/metadata-builder/EntityMetadataBuilder.js.map +1 -1
  909. package/metadata-builder/JunctionEntityMetadataBuilder.js +1 -0
  910. package/metadata-builder/JunctionEntityMetadataBuilder.js.map +1 -1
  911. package/migration/MigrationExecutor.js +103 -74
  912. package/migration/MigrationExecutor.js.map +1 -1
  913. package/naming-strategy/DefaultNamingStrategy.d.ts +5 -0
  914. package/naming-strategy/DefaultNamingStrategy.js +2 -0
  915. package/naming-strategy/DefaultNamingStrategy.js.map +1 -1
  916. package/naming-strategy/NamingStrategyInterface.d.ts +11 -0
  917. package/naming-strategy/NamingStrategyInterface.js.map +1 -1
  918. package/package.json +72 -51
  919. package/persistence/EntityPersistExecutor.js +60 -42
  920. package/persistence/EntityPersistExecutor.js.map +1 -1
  921. package/persistence/SubjectChangedColumnsComputer.js +11 -7
  922. package/persistence/SubjectChangedColumnsComputer.js.map +1 -1
  923. package/persistence/SubjectDatabaseEntityLoader.js +2 -1
  924. package/persistence/SubjectDatabaseEntityLoader.js.map +1 -1
  925. package/persistence/SubjectExecutor.js +244 -187
  926. package/persistence/SubjectExecutor.js.map +1 -1
  927. package/persistence/subject-builder/ManyToManySubjectBuilder.js +2 -3
  928. package/persistence/subject-builder/ManyToManySubjectBuilder.js.map +1 -1
  929. package/persistence/subject-builder/OneToManySubjectBuilder.js +1 -1
  930. package/persistence/subject-builder/OneToManySubjectBuilder.js.map +1 -1
  931. package/persistence/subject-builder/OneToOneInverseSideSubjectBuilder.js +1 -1
  932. package/persistence/subject-builder/OneToOneInverseSideSubjectBuilder.js.map +1 -1
  933. package/persistence/tree/MaterializedPathSubjectExecutor.js +2 -1
  934. package/persistence/tree/MaterializedPathSubjectExecutor.js.map +1 -1
  935. package/platform/PlatformTools.d.ts +7 -1
  936. package/platform/PlatformTools.js +44 -43
  937. package/platform/PlatformTools.js.map +1 -1
  938. package/query-builder/Alias.js.map +1 -1
  939. package/query-builder/DeleteQueryBuilder.d.ts +2 -3
  940. package/query-builder/DeleteQueryBuilder.js +5 -0
  941. package/query-builder/DeleteQueryBuilder.js.map +1 -1
  942. package/query-builder/InsertQueryBuilder.d.ts +2 -3
  943. package/query-builder/InsertQueryBuilder.js +18 -4
  944. package/query-builder/InsertQueryBuilder.js.map +1 -1
  945. package/query-builder/QueryBuilder.d.ts +11 -15
  946. package/query-builder/QueryBuilder.js +84 -23
  947. package/query-builder/QueryBuilder.js.map +1 -1
  948. package/query-builder/QueryExpressionMap.d.ts +1 -1
  949. package/query-builder/QueryExpressionMap.js.map +1 -1
  950. package/query-builder/QueryPartialEntity.d.ts +1 -1
  951. package/query-builder/QueryPartialEntity.js.map +1 -1
  952. package/query-builder/ReturningResultsEntityUpdator.js +23 -24
  953. package/query-builder/ReturningResultsEntityUpdator.js.map +1 -1
  954. package/query-builder/SelectQueryBuilder.d.ts +4 -4
  955. package/query-builder/SelectQueryBuilder.js +41 -5
  956. package/query-builder/SelectQueryBuilder.js.map +1 -1
  957. package/query-builder/SoftDeleteQueryBuilder.d.ts +2 -3
  958. package/query-builder/SoftDeleteQueryBuilder.js +2 -2
  959. package/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
  960. package/query-builder/UpdateQueryBuilder.js +17 -3
  961. package/query-builder/UpdateQueryBuilder.js.map +1 -1
  962. package/query-builder/transformer/RawSqlResultsToEntityTransformer.js +1 -4
  963. package/query-builder/transformer/RawSqlResultsToEntityTransformer.js.map +1 -1
  964. package/query-runner/BaseQueryRunner.d.ts +2 -5
  965. package/query-runner/BaseQueryRunner.js +90 -40
  966. package/query-runner/BaseQueryRunner.js.map +1 -1
  967. package/repository/AbstractRepository.js.map +1 -1
  968. package/repository/BaseEntity.d.ts +17 -1
  969. package/repository/BaseEntity.js +20 -2
  970. package/repository/BaseEntity.js.map +1 -1
  971. package/repository/MongoRepository.js.map +1 -1
  972. package/repository/Repository.d.ts +1 -1
  973. package/repository/Repository.js +2 -2
  974. package/repository/Repository.js.map +1 -1
  975. package/schema-builder/MongoSchemaBuilder.js +1 -1
  976. package/schema-builder/MongoSchemaBuilder.js.map +1 -1
  977. package/schema-builder/RdbmsSchemaBuilder.js +875 -319
  978. package/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
  979. package/schema-builder/options/TableIndexOptions.d.ts +1 -1
  980. package/schema-builder/options/TableIndexOptions.js.map +1 -1
  981. package/schema-builder/view/View.d.ts +1 -2
  982. package/schema-builder/view/View.js.map +1 -1
  983. package/typeorm-class-transformer-shim.js +16 -2
  984. package/typeorm-model-shim.js +18 -0
  985. package/util/ApplyValueTransformers.js.map +1 -1
  986. package/util/DateUtils.js +1 -1
  987. package/util/DateUtils.js.map +1 -1
  988. package/util/DirectoryExportedClassesLoader.js +7 -5
  989. package/util/DirectoryExportedClassesLoader.js.map +1 -1
  990. package/util/ObjectUtils.js +2 -2
  991. package/util/ObjectUtils.js.map +1 -1
  992. package/util/OrmUtils.d.ts +4 -0
  993. package/util/OrmUtils.js +17 -2
  994. package/util/OrmUtils.js.map +1 -1
  995. package/util/StringUtils.js +3 -2
  996. package/util/StringUtils.js.map +1 -1
  997. package/browser/util/PromiseUtils.d.ts +0 -24
  998. package/browser/util/PromiseUtils.js +0 -62
  999. package/browser/util/PromiseUtils.js.map +0 -1
  1000. package/util/PromiseUtils.d.ts +0 -24
  1001. package/util/PromiseUtils.js +0 -64
  1002. package/util/PromiseUtils.js.map +0 -1
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "typeorm",
3
3
  "private": false,
4
- "version": "0.2.24",
4
+ "version": "0.2.28",
5
5
  "description": "Data-Mapper ORM for TypeScript, ES7, ES6, ES5. Supports MySQL, PostgreSQL, MariaDB, SQLite, MS SQL Server, Oracle, MongoDB databases.",
6
6
  "license": "MIT",
7
7
  "readmeFilename": "README.md",
@@ -11,6 +11,8 @@
11
11
  },
12
12
  "main": "./index.js",
13
13
  "browser": {
14
+ "./browser/driver/aurora-data-api/AuroraDataApiDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js",
15
+ "./browser/driver/cockroachdb/CockroachDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js",
14
16
  "./browser/driver/postgres/PostgresDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js",
15
17
  "./browser/driver/oracle/OracleDriver.ts": "./browser/platform/BrowserDisabledDriversDummy.js",
16
18
  "./browser/driver/sap/SapDriver.ts": "./browser/platform/BrowserDisabledDriversDummy.js",
@@ -20,6 +22,14 @@
20
22
  "./browser/driver/mongodb/MongoQueryRunner.js": "./browser/platform/BrowserDisabledDriversDummy.js",
21
23
  "./browser/entity-manager/MongoEntityManager.js": "./browser/platform/BrowserDisabledDriversDummy.js",
22
24
  "./browser/repository/MongoRepository.js": "./browser/platform/BrowserDisabledDriversDummy.js",
25
+ "./browser/driver/sqlite/SqliteDriver.js": "./browser/platform/BrowserDisabledDriversDummy.js",
26
+ "./browser/driver/better-sqlite3/BetterSqlite3Driver.js": "./browser/platform/BrowserDisabledDriversDummy.js",
27
+ "./browser/util/DirectoryExportedClassesLoader.js": "./browser/platform/BrowserDirectoryExportedClassesLoader.js",
28
+ "./browser/logger/FileLogger.js": "./browser/platform/BrowserFileLoggerDummy.js",
29
+ "./browser/connection/ConnectionOptionsReader.js": "./browser/platform/BrowserConnectionOptionsReaderDummy.js",
30
+ "./browser/connection/options-reader/ConnectionOptionsXmlReader.js": "./browser/platform/BrowserConnectionOptionsReaderDummy.js",
31
+ "./browser/connection/options-reader/ConnectionOptionsYmlReader.js": "./browser/platform/BrowserConnectionOptionsReaderDummy.js",
32
+ "./browser/platform/PlatformTools.js": "./browser/platform/BrowserPlatformTools.js",
23
33
  "./index.js": "./browser/index.js"
24
34
  },
25
35
  "repository": {
@@ -47,73 +57,83 @@
47
57
  "oracle-orm"
48
58
  ],
49
59
  "devDependencies": {
50
- "@types/chai": "^4.1.2",
51
- "@types/chai-as-promised": "7.1.0",
52
- "@types/debug": "4.1.2",
53
- "@types/mocha": "^5.2.6",
54
- "@types/node": "^9.6.0",
55
- "@types/rimraf": "^2.0.2",
60
+ "@types/app-root-path": "^1.2.4",
61
+ "@types/chai": "^4.2.0",
62
+ "@types/chai-as-promised": "^7.1.3",
63
+ "@types/debug": "^4.1.5",
64
+ "@types/dotenv": "^8.2.0",
65
+ "@types/js-yaml": "^3.12.5",
66
+ "@types/mkdirp": "^1.0.1",
67
+ "@types/mocha": "^8.0.3",
68
+ "@types/node": "^14.6.4",
69
+ "@types/rimraf": "^3.0.0",
56
70
  "@types/sha.js": "^2.4.0",
57
- "@types/sinon": "^7.0.8",
58
- "@types/source-map-support": "^0.4.2",
59
- "@types/yargs": "^12.0.9",
71
+ "@types/sinon": "^9.0.5",
72
+ "@types/source-map-support": "^0.5.1",
73
+ "@types/xml2js": "^0.4.5",
74
+ "@types/yargs": "^15.0.4",
75
+ "@typescript-eslint/eslint-plugin": "^4.1.0",
76
+ "@typescript-eslint/parser": "^4.1.0",
77
+ "better-sqlite3": "^7.1.0",
60
78
  "chai": "^4.2.0",
61
79
  "chai-as-promised": "^7.1.1",
62
- "class-transformer": "^0.2.3",
63
- "conventional-changelog-angular": "^5.0.3",
64
- "conventional-changelog-cli": "^2.0.21",
65
- "del": "^3.0.0",
66
- "gulp": "^4.0.0",
80
+ "class-transformer": "^0.3.1",
81
+ "conventional-changelog-angular": "^5.0.11",
82
+ "conventional-changelog-cli": "^2.1.0",
83
+ "del": "^5.1.0",
84
+ "eslint": "^7.8.1",
85
+ "gulp": "^4.0.2",
86
+ "gulp-eslint": "^6.0.0",
67
87
  "gulp-istanbul": "^1.1.3",
68
- "gulp-mocha": "^6.0.0",
69
- "gulp-rename": "^1.2.2",
88
+ "gulp-mocha": "^7.0.2",
89
+ "gulp-rename": "^2.0.0",
70
90
  "gulp-replace": "^1.0.0",
71
- "gulp-shell": "^0.6.5",
91
+ "gulp-shell": "^0.8.0",
72
92
  "gulp-sourcemaps": "^2.6.5",
73
- "gulp-tslint": "^8.1.4",
74
- "gulp-typescript": "^5.0.0",
93
+ "gulp-typescript": "^6.0.0-alpha.1",
75
94
  "gulpclass": "^0.2.0",
76
- "husky": "^1.3.1",
77
- "lint-staged": "^8.1.4",
78
- "mocha": "^6.1.4",
79
- "mongodb": "^3.1.13",
80
- "mssql": "^4.3.2",
81
- "mysql": "^2.15.0",
82
- "mysql2": "^1.6.5",
83
- "pg": "^7.8.1",
84
- "redis": "^2.8.0",
95
+ "husky": "^4.2.3",
96
+ "lint-staged": "^10.0.8",
97
+ "mocha": "^8.1.3",
98
+ "mongodb": "^3.5.4",
99
+ "mssql": "^6.1.0",
100
+ "mysql": "^2.18.1",
101
+ "mysql2": "^2.1.0",
102
+ "oracledb": "^5.0.0",
103
+ "pg": "^8.3.0",
104
+ "redis": "^3.0.2",
85
105
  "remap-istanbul": "^0.13.0",
86
- "rimraf": "^2.6.3",
87
- "sinon": "^7.2.5",
88
- "sinon-chai": "^3.3.0",
89
- "source-map-support": "^0.5.10",
90
- "sql.js": "^1.0.0",
91
- "sqlite3": "^4.0.9",
92
- "ts-node": "^8.0.2",
93
- "tslint": "^5.13.1",
94
- "typeorm-aurora-data-api-driver": "^1.1.1",
95
- "typescript": "^3.3.3333"
106
+ "rimraf": "^3.0.2",
107
+ "sinon": "^9.0.0",
108
+ "sinon-chai": "^3.5.0",
109
+ "source-map-support": "^0.5.16",
110
+ "sql.js": "^1.3.0",
111
+ "sqlite3": "^5.0.0",
112
+ "ts-node": "^9.0.0",
113
+ "typeorm-aurora-data-api-driver": "^1.4.0",
114
+ "typescript": "~3.6.0"
96
115
  },
97
116
  "dependencies": {
117
+ "@sqltools/formatter": "1.2.2",
98
118
  "app-root-path": "^3.0.0",
99
- "buffer": "^5.1.0",
100
- "chalk": "^2.4.2",
101
- "cli-highlight": "^2.0.0",
119
+ "buffer": "^5.5.0",
120
+ "chalk": "^4.1.0",
121
+ "cli-highlight": "^2.1.4",
102
122
  "debug": "^4.1.1",
103
- "dotenv": "^6.2.0",
104
- "glob": "^7.1.2",
105
- "js-yaml": "^3.13.1",
106
- "mkdirp": "^0.5.1",
123
+ "dotenv": "^8.2.0",
124
+ "glob": "^7.1.6",
125
+ "js-yaml": "^3.14.0",
126
+ "mkdirp": "^1.0.4",
107
127
  "reflect-metadata": "^0.1.13",
108
128
  "sha.js": "^2.4.11",
109
- "tslib": "^1.9.0",
110
- "xml2js": "^0.4.17",
129
+ "tslib": "^1.13.0",
130
+ "xml2js": "^0.4.23",
111
131
  "yargonaut": "^1.1.2",
112
- "yargs": "^13.2.1"
132
+ "yargs": "^16.0.3"
113
133
  },
114
134
  "lint-staged": {
115
135
  "*.ts": [
116
- "tslint --fix",
136
+ "eslint --fix",
117
137
  "git add"
118
138
  ]
119
139
  },
@@ -122,8 +142,9 @@
122
142
  "test": "rimraf ./build && tsc && mocha --file ./build/compiled/test/utils/test-setup.js --bail --recursive --timeout 60000 ./build/compiled/test",
123
143
  "test-fast": "mocha --file ./build/compiled/test/utils/test-setup.js --bail --recursive --timeout 60000 ./build/compiled/test",
124
144
  "compile": "rimraf ./build && tsc",
145
+ "watch": "./node_modules/.bin/tsc -w",
125
146
  "package": "gulp package",
126
- "lint": "tslint -p .",
147
+ "lint": "eslint -c ./.eslintrc.js src/**/*.ts test/**/*.ts sample/**/*.ts",
127
148
  "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s -r 2"
128
149
  },
129
150
  "bin": {
@@ -11,7 +11,6 @@ var ManyToManySubjectBuilder_1 = require("./subject-builder/ManyToManySubjectBui
11
11
  var SubjectDatabaseEntityLoader_1 = require("./SubjectDatabaseEntityLoader");
12
12
  var CascadesSubjectBuilder_1 = require("./subject-builder/CascadesSubjectBuilder");
13
13
  var OrmUtils_1 = require("../util/OrmUtils");
14
- var PromiseUtils_1 = require("../util/PromiseUtils");
15
14
  /**
16
15
  * Persists a single entity or multiple entities - saves or removes them.
17
16
  */
@@ -40,19 +39,20 @@ var EntityPersistExecutor = /** @class */ (function () {
40
39
  return Promise.reject(new MustBeEntityError_1.MustBeEntityError(this.mode, this.entity));
41
40
  // we MUST call "fake" resolve here to make sure all properties of lazily loaded relations are resolved
42
41
  return Promise.resolve().then(function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
43
- var queryRunner, entities, entitiesInChunks, executors, executorsWithExecutableOperations, isTransactionStartedByUs, error_1, rollbackError_1;
42
+ var queryRunner, entities, entitiesInChunks, executors, executorsWithExecutableOperations, isTransactionStartedByUs, executorsWithExecutableOperations_1, executorsWithExecutableOperations_1_1, executor, e_1_1, error_1, rollbackError_1;
43
+ var e_1, _a;
44
44
  var _this = this;
45
- return tslib_1.__generator(this, function (_a) {
46
- switch (_a.label) {
45
+ return tslib_1.__generator(this, function (_b) {
46
+ switch (_b.label) {
47
47
  case 0:
48
- queryRunner = this.queryRunner || this.connection.createQueryRunner("master");
48
+ queryRunner = this.queryRunner || this.connection.createQueryRunner();
49
49
  // save data in the query runner - this is useful functionality to share data from outside of the world
50
50
  // with third classes - like subscribers and listener methods
51
51
  if (this.options && this.options.data)
52
52
  queryRunner.data = this.options.data;
53
- _a.label = 1;
53
+ _b.label = 1;
54
54
  case 1:
55
- _a.trys.push([1, , 15, 18]);
55
+ _b.trys.push([1, , 21, 24]);
56
56
  entities = Array.isArray(this.entity) ? this.entity : [this.entity];
57
57
  entitiesInChunks = this.options && this.options.chunk && this.options.chunk > 0 ? OrmUtils_1.OrmUtils.chunk(entities, this.options.chunk) : [entities];
58
58
  return [4 /*yield*/, Promise.all(entitiesInChunks.map(function (entities) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
@@ -118,58 +118,76 @@ var EntityPersistExecutor = /** @class */ (function () {
118
118
  });
119
119
  }); }))];
120
120
  case 2:
121
- executors = _a.sent();
121
+ executors = _b.sent();
122
122
  executorsWithExecutableOperations = executors.filter(function (executor) { return executor.hasExecutableOperations; });
123
123
  if (executorsWithExecutableOperations.length === 0)
124
124
  return [2 /*return*/];
125
125
  isTransactionStartedByUs = false;
126
- _a.label = 3;
126
+ _b.label = 3;
127
127
  case 3:
128
- _a.trys.push([3, 9, , 14]);
128
+ _b.trys.push([3, 15, , 20]);
129
129
  if (!!queryRunner.isTransactionActive) return [3 /*break*/, 5];
130
130
  if (!(!this.options || this.options.transaction !== false)) return [3 /*break*/, 5];
131
131
  isTransactionStartedByUs = true;
132
132
  return [4 /*yield*/, queryRunner.startTransaction()];
133
133
  case 4:
134
- _a.sent();
135
- _a.label = 5;
136
- case 5:
137
- // execute all persistence operations for all entities we have
138
- // console.time("executing subject executors...");
139
- return [4 /*yield*/, PromiseUtils_1.PromiseUtils.runInSequence(executorsWithExecutableOperations, function (executor) { return executor.execute(); })];
134
+ _b.sent();
135
+ _b.label = 5;
136
+ case 5:
137
+ _b.trys.push([5, 10, 11, 12]);
138
+ executorsWithExecutableOperations_1 = tslib_1.__values(executorsWithExecutableOperations), executorsWithExecutableOperations_1_1 = executorsWithExecutableOperations_1.next();
139
+ _b.label = 6;
140
140
  case 6:
141
- // execute all persistence operations for all entities we have
142
- // console.time("executing subject executors...");
143
- _a.sent();
144
- if (!(isTransactionStartedByUs === true)) return [3 /*break*/, 8];
145
- return [4 /*yield*/, queryRunner.commitTransaction()];
141
+ if (!!executorsWithExecutableOperations_1_1.done) return [3 /*break*/, 9];
142
+ executor = executorsWithExecutableOperations_1_1.value;
143
+ return [4 /*yield*/, executor.execute()];
146
144
  case 7:
147
- _a.sent();
148
- _a.label = 8;
149
- case 8: return [3 /*break*/, 14];
150
- case 9:
151
- error_1 = _a.sent();
152
- if (!isTransactionStartedByUs) return [3 /*break*/, 13];
153
- _a.label = 10;
145
+ _b.sent();
146
+ _b.label = 8;
147
+ case 8:
148
+ executorsWithExecutableOperations_1_1 = executorsWithExecutableOperations_1.next();
149
+ return [3 /*break*/, 6];
150
+ case 9: return [3 /*break*/, 12];
154
151
  case 10:
155
- _a.trys.push([10, 12, , 13]);
156
- return [4 /*yield*/, queryRunner.rollbackTransaction()];
152
+ e_1_1 = _b.sent();
153
+ e_1 = { error: e_1_1 };
154
+ return [3 /*break*/, 12];
157
155
  case 11:
158
- _a.sent();
159
- return [3 /*break*/, 13];
156
+ try {
157
+ if (executorsWithExecutableOperations_1_1 && !executorsWithExecutableOperations_1_1.done && (_a = executorsWithExecutableOperations_1.return)) _a.call(executorsWithExecutableOperations_1);
158
+ }
159
+ finally { if (e_1) throw e_1.error; }
160
+ return [7 /*endfinally*/];
160
161
  case 12:
161
- rollbackError_1 = _a.sent();
162
- return [3 /*break*/, 13];
163
- case 13: throw error_1;
164
- case 14: return [3 /*break*/, 18];
162
+ if (!(isTransactionStartedByUs === true)) return [3 /*break*/, 14];
163
+ return [4 /*yield*/, queryRunner.commitTransaction()];
164
+ case 13:
165
+ _b.sent();
166
+ _b.label = 14;
167
+ case 14: return [3 /*break*/, 20];
165
168
  case 15:
166
- if (!!this.queryRunner) return [3 /*break*/, 17];
167
- return [4 /*yield*/, queryRunner.release()];
169
+ error_1 = _b.sent();
170
+ if (!isTransactionStartedByUs) return [3 /*break*/, 19];
171
+ _b.label = 16;
168
172
  case 16:
169
- _a.sent();
170
- _a.label = 17;
171
- case 17: return [7 /*endfinally*/];
172
- case 18: return [2 /*return*/];
173
+ _b.trys.push([16, 18, , 19]);
174
+ return [4 /*yield*/, queryRunner.rollbackTransaction()];
175
+ case 17:
176
+ _b.sent();
177
+ return [3 /*break*/, 19];
178
+ case 18:
179
+ rollbackError_1 = _b.sent();
180
+ return [3 /*break*/, 19];
181
+ case 19: throw error_1;
182
+ case 20: return [3 /*break*/, 24];
183
+ case 21:
184
+ if (!!this.queryRunner) return [3 /*break*/, 23];
185
+ return [4 /*yield*/, queryRunner.release()];
186
+ case 22:
187
+ _b.sent();
188
+ _b.label = 23;
189
+ case 23: return [7 /*endfinally*/];
190
+ case 24: return [2 /*return*/];
173
191
  }
174
192
  });
175
193
  }); });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/persistence/EntityPersistExecutor.ts"],"names":[],"mappings":";;;AAGA,gEAA6D;AAC7D,qDAAkD;AAClD,kFAA+E;AAG/E,qCAAkC;AAClC,qFAAkF;AAClF,yGAAsG;AACtG,uFAAoF;AACpF,6EAA0E;AAC1E,mFAAgF;AAChF,6CAA0C;AAC1C,qDAAkD;AAElD;;GAEG;AACH;IAEI,4EAA4E;IAC5E,cAAc;IACd,4EAA4E;IAE5E,+BAAsB,UAAsB,EACtB,WAAkC,EAClC,IAA6C,EAC7C,MAAiC,EACjC,MAAqC,EACrC,OAAqC;QALrC,eAAU,GAAV,UAAU,CAAY;QACtB,gBAAW,GAAX,WAAW,CAAuB;QAClC,SAAI,GAAJ,IAAI,CAAyC;QAC7C,WAAM,GAAN,MAAM,CAA2B;QACjC,WAAM,GAAN,MAAM,CAA+B;QACrC,YAAO,GAAP,OAAO,CAA8B;IAC3D,CAAC;IAED,4EAA4E;IAC5E,iBAAiB;IACjB,4EAA4E;IAE5E;;OAEG;IACH,uCAAO,GAAP;QAAA,iBAoIC;QAlIG,iEAAiE;QACjE,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,YAAY,MAAM,CAAC;YAChD,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,qCAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAEzE,uGAAuG;QACvG,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC;;;;;;wBAIpB,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;wBAEpF,uGAAuG;wBACvG,6DAA6D;wBAC7D,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI;4BACjC,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;;;;wBAK/B,QAAQ,GAAoB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;wBACrF,gBAAgB,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,mBAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;wBAGhI,qBAAM,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAM,QAAQ;;;;;;4CAC7D,QAAQ,GAAc,EAAE,CAAC;4CAE/B,mEAAmE;4CACnE,QAAQ,CAAC,OAAO,CAAC,UAAA,MAAM;gDACnB,IAAM,YAAY,GAAG,KAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;gDACpE,IAAI,YAAY,KAAK,MAAM;oDACvB,MAAM,IAAI,uDAA0B,CAAC,KAAI,CAAC,IAAI,CAAC,CAAC;gDAEpD,QAAQ,CAAC,IAAI,CAAC,IAAI,iBAAO,CAAC;oDACtB,QAAQ,EAAE,KAAI,CAAC,UAAU,CAAC,WAAW,CAAC,YAAY,CAAC;oDACnD,MAAM,EAAE,MAAM;oDACd,aAAa,EAAE,KAAI,CAAC,IAAI,KAAK,MAAM;oDACnC,YAAY,EAAE,KAAI,CAAC,IAAI,KAAK,MAAM;oDAClC,aAAa,EAAE,KAAI,CAAC,IAAI,KAAK,QAAQ;oDACrC,gBAAgB,EAAE,KAAI,CAAC,IAAI,KAAK,aAAa;oDAC7C,cAAc,EAAE,KAAI,CAAC,IAAI,KAAK,SAAS;iDAC1C,CAAC,CAAC,CAAC;4CACR,CAAC,CAAC,CAAC;4CAIG,sBAAsB,GAAG,IAAI,+CAAsB,CAAC,QAAQ,CAAC,CAAC;4CACpE,QAAQ,CAAC,OAAO,CAAC,UAAA,OAAO;gDACpB,2DAA2D;gDAC3D,oGAAoG;gDACpG,sBAAsB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAI,CAAC,IAAI,CAAC,CAAC;4CACrD,CAAC,CAAC,CAAC;4CACH,2CAA2C;4CAE3C,kDAAkD;4CAClD,kEAAkE;4CAClE,8BAA8B;4CAC9B,qBAAM,IAAI,yDAA2B,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAA;;4CAL5E,2CAA2C;4CAE3C,kDAAkD;4CAClD,kEAAkE;4CAClE,8BAA8B;4CAC9B,SAA4E,CAAC;4CAC7E,iCAAiC;4CAEjC,qCAAqC;4CACrC,6CAA6C;4CAC7C,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;gDAChF,IAAI,iDAAuB,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC;gDAC9C,IAAI,qEAAiC,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC;gDACxD,IAAI,mDAAwB,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC;6CAClD;iDAAM;gDACH,QAAQ,CAAC,OAAO,CAAC,UAAA,OAAO;oDACpB,IAAI,OAAO,CAAC,aAAa,EAAE;wDACvB,IAAI,mDAAwB,CAAC,QAAQ,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;qDACtE;gDACL,CAAC,CAAC,CAAC;6CACN;4CACD,wCAAwC;4CACxC,2CAA2C;4CAC3C,qCAAqC;4CAErC,4BAA4B;4CAC5B,sBAAO,IAAI,iCAAe,CAAC,WAAW,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,EAAC;;;iCACnE,CAAC,CAAC,EAAA;;wBAvDG,SAAS,GAAG,SAuDf;wBAKG,iCAAiC,GAAG,SAAS,CAAC,MAAM,CAAC,UAAA,QAAQ,IAAI,OAAA,QAAQ,CAAC,uBAAuB,EAAhC,CAAgC,CAAC,CAAC;wBACzG,IAAI,iCAAiC,CAAC,MAAM,KAAK,CAAC;4BAC9C,sBAAO;wBAKP,wBAAwB,GAAG,KAAK,CAAC;;;;6BAI7B,CAAC,WAAW,CAAC,mBAAmB,EAAhC,wBAAgC;6BAC5B,CAAA,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,KAAK,KAAK,CAAA,EAAnD,wBAAmD;wBACnD,wBAAwB,GAAG,IAAI,CAAC;wBAChC,qBAAM,WAAW,CAAC,gBAAgB,EAAE,EAAA;;wBAApC,SAAoC,CAAC;;;oBAI7C,8DAA8D;oBAC9D,kDAAkD;oBAClD,qBAAM,2BAAY,CAAC,aAAa,CAAC,iCAAiC,EAAE,UAAA,QAAQ,IAAI,OAAA,QAAQ,CAAC,OAAO,EAAE,EAAlB,CAAkB,CAAC,EAAA;;wBAFnG,8DAA8D;wBAC9D,kDAAkD;wBAClD,SAAmG,CAAC;6BAKhG,CAAA,wBAAwB,KAAK,IAAI,CAAA,EAAjC,wBAAiC;wBACjC,qBAAM,WAAW,CAAC,iBAAiB,EAAE,EAAA;;wBAArC,SAAqC,CAAC;;;;;6BAMtC,wBAAwB,EAAxB,yBAAwB;;;;wBAEpB,qBAAM,WAAW,CAAC,mBAAmB,EAAE,EAAA;;wBAAvC,SAAuC,CAAC;;;;;6BAGhD,MAAM,OAAK,CAAC;;;6BAMZ,CAAC,IAAI,CAAC,WAAW,EAAjB,yBAAiB;wBACjB,qBAAM,WAAW,CAAC,OAAO,EAAE,EAAA;;wBAA3B,SAA2B,CAAC;;;;;;aAEvC,CAAC,CAAC;IACP,CAAC;IAEL,4BAAC;AAAD,CA3JA,AA2JC,IAAA;AA3JY,sDAAqB","file":"EntityPersistExecutor.js","sourcesContent":["import {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {SaveOptions} from \"../repository/SaveOptions\";\nimport {RemoveOptions} from \"../repository/RemoveOptions\";\nimport {MustBeEntityError} from \"../error/MustBeEntityError\";\nimport {SubjectExecutor} from \"./SubjectExecutor\";\nimport {CannotDetermineEntityError} from \"../error/CannotDetermineEntityError\";\nimport {QueryRunner} from \"../query-runner/QueryRunner\";\nimport {Connection} from \"../connection/Connection\";\nimport {Subject} from \"./Subject\";\nimport {OneToManySubjectBuilder} from \"./subject-builder/OneToManySubjectBuilder\";\nimport {OneToOneInverseSideSubjectBuilder} from \"./subject-builder/OneToOneInverseSideSubjectBuilder\";\nimport {ManyToManySubjectBuilder} from \"./subject-builder/ManyToManySubjectBuilder\";\nimport {SubjectDatabaseEntityLoader} from \"./SubjectDatabaseEntityLoader\";\nimport {CascadesSubjectBuilder} from \"./subject-builder/CascadesSubjectBuilder\";\nimport {OrmUtils} from \"../util/OrmUtils\";\nimport {PromiseUtils} from \"../util/PromiseUtils\";\n\n/**\n * Persists a single entity or multiple entities - saves or removes them.\n */\nexport class EntityPersistExecutor {\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(protected connection: Connection,\n protected queryRunner: QueryRunner|undefined,\n protected mode: \"save\"|\"remove\"|\"soft-remove\"|\"recover\",\n protected target: Function|string|undefined,\n protected entity: ObjectLiteral|ObjectLiteral[],\n protected options?: SaveOptions & RemoveOptions) {\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Executes persistence operation ob given entity or entities.\n */\n execute(): Promise<void> {\n\n // check if entity we are going to save is valid and is an object\n if (!this.entity || !(this.entity instanceof Object))\n return Promise.reject(new MustBeEntityError(this.mode, this.entity));\n\n // we MUST call \"fake\" resolve here to make sure all properties of lazily loaded relations are resolved\n return Promise.resolve().then(async () => {\n\n // if query runner is already defined in this class, it means this entity manager was already created for a single connection\n // if its not defined we create a new query runner - single connection where we'll execute all our operations\n const queryRunner = this.queryRunner || this.connection.createQueryRunner(\"master\");\n\n // save data in the query runner - this is useful functionality to share data from outside of the world\n // with third classes - like subscribers and listener methods\n if (this.options && this.options.data)\n queryRunner.data = this.options.data;\n\n try {\n\n // collect all operate subjects\n const entities: ObjectLiteral[] = Array.isArray(this.entity) ? this.entity : [this.entity];\n const entitiesInChunks = this.options && this.options.chunk && this.options.chunk > 0 ? OrmUtils.chunk(entities, this.options.chunk) : [entities];\n\n // console.time(\"building subject executors...\");\n const executors = await Promise.all(entitiesInChunks.map(async entities => {\n const subjects: Subject[] = [];\n\n // create subjects for all entities we received for the persistence\n entities.forEach(entity => {\n const entityTarget = this.target ? this.target : entity.constructor;\n if (entityTarget === Object)\n throw new CannotDetermineEntityError(this.mode);\n\n subjects.push(new Subject({\n metadata: this.connection.getMetadata(entityTarget),\n entity: entity,\n canBeInserted: this.mode === \"save\",\n canBeUpdated: this.mode === \"save\",\n mustBeRemoved: this.mode === \"remove\",\n canBeSoftRemoved: this.mode === \"soft-remove\",\n canBeRecovered: this.mode === \"recover\"\n }));\n });\n\n // console.time(\"building cascades...\");\n // go through each entity with metadata and create subjects and subjects by cascades for them\n const cascadesSubjectBuilder = new CascadesSubjectBuilder(subjects);\n subjects.forEach(subject => {\n // next step we build list of subjects we will operate with\n // these subjects are subjects that we need to insert or update alongside with main persisted entity\n cascadesSubjectBuilder.build(subject, this.mode);\n });\n // console.timeEnd(\"building cascades...\");\n\n // load database entities for all subjects we have\n // next step is to load database entities for all operate subjects\n // console.time(\"loading...\");\n await new SubjectDatabaseEntityLoader(queryRunner, subjects).load(this.mode);\n // console.timeEnd(\"loading...\");\n\n // console.time(\"other subjects...\");\n // build all related subjects and change maps\n if (this.mode === \"save\" || this.mode === \"soft-remove\" || this.mode === \"recover\") {\n new OneToManySubjectBuilder(subjects).build();\n new OneToOneInverseSideSubjectBuilder(subjects).build();\n new ManyToManySubjectBuilder(subjects).build();\n } else {\n subjects.forEach(subject => {\n if (subject.mustBeRemoved) {\n new ManyToManySubjectBuilder(subjects).buildForAllRemoval(subject);\n }\n });\n }\n // console.timeEnd(\"other subjects...\");\n // console.timeEnd(\"building subjects...\");\n // console.log(\"subjects\", subjects);\n\n // create a subject executor\n return new SubjectExecutor(queryRunner, subjects, this.options);\n }));\n // console.timeEnd(\"building subject executors...\");\n\n // make sure we have at least one executable operation before we create a transaction and proceed\n // if we don't have operations it means we don't really need to update or remove something\n const executorsWithExecutableOperations = executors.filter(executor => executor.hasExecutableOperations);\n if (executorsWithExecutableOperations.length === 0)\n return;\n\n // start execute queries in a transaction\n // if transaction is already opened in this query runner then we don't touch it\n // if its not opened yet then we open it here, and once we finish - we close it\n let isTransactionStartedByUs = false;\n try {\n\n // open transaction if its not opened yet\n if (!queryRunner.isTransactionActive) {\n if (!this.options || this.options.transaction !== false) { // start transaction until it was not explicitly disabled\n isTransactionStartedByUs = true;\n await queryRunner.startTransaction();\n }\n }\n\n // execute all persistence operations for all entities we have\n // console.time(\"executing subject executors...\");\n await PromiseUtils.runInSequence(executorsWithExecutableOperations, executor => executor.execute());\n // console.timeEnd(\"executing subject executors...\");\n\n // commit transaction if it was started by us\n // console.time(\"commit\");\n if (isTransactionStartedByUs === true)\n await queryRunner.commitTransaction();\n // console.timeEnd(\"commit\");\n\n } catch (error) {\n\n // rollback transaction if it was started by us\n if (isTransactionStartedByUs) {\n try {\n await queryRunner.rollbackTransaction();\n } catch (rollbackError) { }\n }\n throw error;\n }\n\n } finally {\n\n // release query runner only if its created by us\n if (!this.queryRunner)\n await queryRunner.release();\n }\n });\n }\n\n}\n"],"sourceRoot":".."}
1
+ {"version":3,"sources":["../../src/persistence/EntityPersistExecutor.ts"],"names":[],"mappings":";;;AAGA,gEAA6D;AAC7D,qDAAkD;AAClD,kFAA+E;AAG/E,qCAAkC;AAClC,qFAAkF;AAClF,yGAAsG;AACtG,uFAAoF;AACpF,6EAA0E;AAC1E,mFAAgF;AAChF,6CAA0C;AAE1C;;GAEG;AACH;IAEI,4EAA4E;IAC5E,cAAc;IACd,4EAA4E;IAE5E,+BAAsB,UAAsB,EACtB,WAAkC,EAClC,IAA6C,EAC7C,MAAiC,EACjC,MAAqC,EACrC,OAAqC;QALrC,eAAU,GAAV,UAAU,CAAY;QACtB,gBAAW,GAAX,WAAW,CAAuB;QAClC,SAAI,GAAJ,IAAI,CAAyC;QAC7C,WAAM,GAAN,MAAM,CAA2B;QACjC,WAAM,GAAN,MAAM,CAA+B;QACrC,YAAO,GAAP,OAAO,CAA8B;IAC3D,CAAC;IAED,4EAA4E;IAC5E,iBAAiB;IACjB,4EAA4E;IAE5E;;OAEG;IACH,uCAAO,GAAP;QAAA,iBAsIC;QApIG,iEAAiE;QACjE,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,YAAY,MAAM,CAAC;YAChD,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,qCAAiB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAEzE,uGAAuG;QACvG,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC;;;;;;;wBAIpB,WAAW,GAAG,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC;wBAE5E,uGAAuG;wBACvG,6DAA6D;wBAC7D,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI;4BACjC,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;;;;wBAK/B,QAAQ,GAAoB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;wBACrF,gBAAgB,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,mBAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;wBAGhI,qBAAM,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAM,QAAQ;;;;;;4CAC7D,QAAQ,GAAc,EAAE,CAAC;4CAE/B,mEAAmE;4CACnE,QAAQ,CAAC,OAAO,CAAC,UAAA,MAAM;gDACnB,IAAM,YAAY,GAAG,KAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC;gDACpE,IAAI,YAAY,KAAK,MAAM;oDACvB,MAAM,IAAI,uDAA0B,CAAC,KAAI,CAAC,IAAI,CAAC,CAAC;gDAEpD,QAAQ,CAAC,IAAI,CAAC,IAAI,iBAAO,CAAC;oDACtB,QAAQ,EAAE,KAAI,CAAC,UAAU,CAAC,WAAW,CAAC,YAAY,CAAC;oDACnD,MAAM,EAAE,MAAM;oDACd,aAAa,EAAE,KAAI,CAAC,IAAI,KAAK,MAAM;oDACnC,YAAY,EAAE,KAAI,CAAC,IAAI,KAAK,MAAM;oDAClC,aAAa,EAAE,KAAI,CAAC,IAAI,KAAK,QAAQ;oDACrC,gBAAgB,EAAE,KAAI,CAAC,IAAI,KAAK,aAAa;oDAC7C,cAAc,EAAE,KAAI,CAAC,IAAI,KAAK,SAAS;iDAC1C,CAAC,CAAC,CAAC;4CACR,CAAC,CAAC,CAAC;4CAIG,sBAAsB,GAAG,IAAI,+CAAsB,CAAC,QAAQ,CAAC,CAAC;4CACpE,QAAQ,CAAC,OAAO,CAAC,UAAA,OAAO;gDACpB,2DAA2D;gDAC3D,oGAAoG;gDACpG,sBAAsB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAI,CAAC,IAAI,CAAC,CAAC;4CACrD,CAAC,CAAC,CAAC;4CACH,2CAA2C;4CAE3C,kDAAkD;4CAClD,kEAAkE;4CAClE,8BAA8B;4CAC9B,qBAAM,IAAI,yDAA2B,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAA;;4CAL5E,2CAA2C;4CAE3C,kDAAkD;4CAClD,kEAAkE;4CAClE,8BAA8B;4CAC9B,SAA4E,CAAC;4CAC7E,iCAAiC;4CAEjC,qCAAqC;4CACrC,6CAA6C;4CAC7C,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE;gDAChF,IAAI,iDAAuB,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC;gDAC9C,IAAI,qEAAiC,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC;gDACxD,IAAI,mDAAwB,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC;6CAClD;iDAAM;gDACH,QAAQ,CAAC,OAAO,CAAC,UAAA,OAAO;oDACpB,IAAI,OAAO,CAAC,aAAa,EAAE;wDACvB,IAAI,mDAAwB,CAAC,QAAQ,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;qDACtE;gDACL,CAAC,CAAC,CAAC;6CACN;4CACD,wCAAwC;4CACxC,2CAA2C;4CAC3C,qCAAqC;4CAErC,4BAA4B;4CAC5B,sBAAO,IAAI,iCAAe,CAAC,WAAW,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,EAAC;;;iCACnE,CAAC,CAAC,EAAA;;wBAvDG,SAAS,GAAG,SAuDf;wBAKG,iCAAiC,GAAG,SAAS,CAAC,MAAM,CAAC,UAAA,QAAQ,IAAI,OAAA,QAAQ,CAAC,uBAAuB,EAAhC,CAAgC,CAAC,CAAC;wBACzG,IAAI,iCAAiC,CAAC,MAAM,KAAK,CAAC;4BAC9C,sBAAO;wBAKP,wBAAwB,GAAG,KAAK,CAAC;;;;6BAI7B,CAAC,WAAW,CAAC,mBAAmB,EAAhC,wBAAgC;6BAC5B,CAAA,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,KAAK,KAAK,CAAA,EAAnD,wBAAmD;wBACnD,wBAAwB,GAAG,IAAI,CAAC;wBAChC,qBAAM,WAAW,CAAC,gBAAgB,EAAE,EAAA;;wBAApC,SAAoC,CAAC;;;;wBAMtB,sCAAA,iBAAA,iCAAiC,CAAA;;;;wBAA7C,QAAQ;wBACf,qBAAM,QAAQ,CAAC,OAAO,EAAE,EAAA;;wBAAxB,SAAwB,CAAC;;;;;;;;;;;;;;;;;6BAMzB,CAAA,wBAAwB,KAAK,IAAI,CAAA,EAAjC,yBAAiC;wBACjC,qBAAM,WAAW,CAAC,iBAAiB,EAAE,EAAA;;wBAArC,SAAqC,CAAC;;;;;6BAMtC,wBAAwB,EAAxB,yBAAwB;;;;wBAEpB,qBAAM,WAAW,CAAC,mBAAmB,EAAE,EAAA;;wBAAvC,SAAuC,CAAC;;;;;6BAGhD,MAAM,OAAK,CAAC;;;6BAMZ,CAAC,IAAI,CAAC,WAAW,EAAjB,yBAAiB;wBACjB,qBAAM,WAAW,CAAC,OAAO,EAAE,EAAA;;wBAA3B,SAA2B,CAAC;;;;;;aAEvC,CAAC,CAAC;IACP,CAAC;IAEL,4BAAC;AAAD,CA7JA,AA6JC,IAAA;AA7JY,sDAAqB","file":"EntityPersistExecutor.js","sourcesContent":["import {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {SaveOptions} from \"../repository/SaveOptions\";\nimport {RemoveOptions} from \"../repository/RemoveOptions\";\nimport {MustBeEntityError} from \"../error/MustBeEntityError\";\nimport {SubjectExecutor} from \"./SubjectExecutor\";\nimport {CannotDetermineEntityError} from \"../error/CannotDetermineEntityError\";\nimport {QueryRunner} from \"../query-runner/QueryRunner\";\nimport {Connection} from \"../connection/Connection\";\nimport {Subject} from \"./Subject\";\nimport {OneToManySubjectBuilder} from \"./subject-builder/OneToManySubjectBuilder\";\nimport {OneToOneInverseSideSubjectBuilder} from \"./subject-builder/OneToOneInverseSideSubjectBuilder\";\nimport {ManyToManySubjectBuilder} from \"./subject-builder/ManyToManySubjectBuilder\";\nimport {SubjectDatabaseEntityLoader} from \"./SubjectDatabaseEntityLoader\";\nimport {CascadesSubjectBuilder} from \"./subject-builder/CascadesSubjectBuilder\";\nimport {OrmUtils} from \"../util/OrmUtils\";\n\n/**\n * Persists a single entity or multiple entities - saves or removes them.\n */\nexport class EntityPersistExecutor {\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(protected connection: Connection,\n protected queryRunner: QueryRunner|undefined,\n protected mode: \"save\"|\"remove\"|\"soft-remove\"|\"recover\",\n protected target: Function|string|undefined,\n protected entity: ObjectLiteral|ObjectLiteral[],\n protected options?: SaveOptions & RemoveOptions) {\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Executes persistence operation ob given entity or entities.\n */\n execute(): Promise<void> {\n\n // check if entity we are going to save is valid and is an object\n if (!this.entity || !(this.entity instanceof Object))\n return Promise.reject(new MustBeEntityError(this.mode, this.entity));\n\n // we MUST call \"fake\" resolve here to make sure all properties of lazily loaded relations are resolved\n return Promise.resolve().then(async () => {\n\n // if query runner is already defined in this class, it means this entity manager was already created for a single connection\n // if its not defined we create a new query runner - single connection where we'll execute all our operations\n const queryRunner = this.queryRunner || this.connection.createQueryRunner();\n\n // save data in the query runner - this is useful functionality to share data from outside of the world\n // with third classes - like subscribers and listener methods\n if (this.options && this.options.data)\n queryRunner.data = this.options.data;\n\n try {\n\n // collect all operate subjects\n const entities: ObjectLiteral[] = Array.isArray(this.entity) ? this.entity : [this.entity];\n const entitiesInChunks = this.options && this.options.chunk && this.options.chunk > 0 ? OrmUtils.chunk(entities, this.options.chunk) : [entities];\n\n // console.time(\"building subject executors...\");\n const executors = await Promise.all(entitiesInChunks.map(async entities => {\n const subjects: Subject[] = [];\n\n // create subjects for all entities we received for the persistence\n entities.forEach(entity => {\n const entityTarget = this.target ? this.target : entity.constructor;\n if (entityTarget === Object)\n throw new CannotDetermineEntityError(this.mode);\n\n subjects.push(new Subject({\n metadata: this.connection.getMetadata(entityTarget),\n entity: entity,\n canBeInserted: this.mode === \"save\",\n canBeUpdated: this.mode === \"save\",\n mustBeRemoved: this.mode === \"remove\",\n canBeSoftRemoved: this.mode === \"soft-remove\",\n canBeRecovered: this.mode === \"recover\"\n }));\n });\n\n // console.time(\"building cascades...\");\n // go through each entity with metadata and create subjects and subjects by cascades for them\n const cascadesSubjectBuilder = new CascadesSubjectBuilder(subjects);\n subjects.forEach(subject => {\n // next step we build list of subjects we will operate with\n // these subjects are subjects that we need to insert or update alongside with main persisted entity\n cascadesSubjectBuilder.build(subject, this.mode);\n });\n // console.timeEnd(\"building cascades...\");\n\n // load database entities for all subjects we have\n // next step is to load database entities for all operate subjects\n // console.time(\"loading...\");\n await new SubjectDatabaseEntityLoader(queryRunner, subjects).load(this.mode);\n // console.timeEnd(\"loading...\");\n\n // console.time(\"other subjects...\");\n // build all related subjects and change maps\n if (this.mode === \"save\" || this.mode === \"soft-remove\" || this.mode === \"recover\") {\n new OneToManySubjectBuilder(subjects).build();\n new OneToOneInverseSideSubjectBuilder(subjects).build();\n new ManyToManySubjectBuilder(subjects).build();\n } else {\n subjects.forEach(subject => {\n if (subject.mustBeRemoved) {\n new ManyToManySubjectBuilder(subjects).buildForAllRemoval(subject);\n }\n });\n }\n // console.timeEnd(\"other subjects...\");\n // console.timeEnd(\"building subjects...\");\n // console.log(\"subjects\", subjects);\n\n // create a subject executor\n return new SubjectExecutor(queryRunner, subjects, this.options);\n }));\n // console.timeEnd(\"building subject executors...\");\n\n // make sure we have at least one executable operation before we create a transaction and proceed\n // if we don't have operations it means we don't really need to update or remove something\n const executorsWithExecutableOperations = executors.filter(executor => executor.hasExecutableOperations);\n if (executorsWithExecutableOperations.length === 0)\n return;\n\n // start execute queries in a transaction\n // if transaction is already opened in this query runner then we don't touch it\n // if its not opened yet then we open it here, and once we finish - we close it\n let isTransactionStartedByUs = false;\n try {\n\n // open transaction if its not opened yet\n if (!queryRunner.isTransactionActive) {\n if (!this.options || this.options.transaction !== false) { // start transaction until it was not explicitly disabled\n isTransactionStartedByUs = true;\n await queryRunner.startTransaction();\n }\n }\n\n // execute all persistence operations for all entities we have\n // console.time(\"executing subject executors...\");\n for (const executor of executorsWithExecutableOperations) {\n await executor.execute();\n }\n // console.timeEnd(\"executing subject executors...\");\n\n // commit transaction if it was started by us\n // console.time(\"commit\");\n if (isTransactionStartedByUs === true)\n await queryRunner.commitTransaction();\n // console.timeEnd(\"commit\");\n\n } catch (error) {\n\n // rollback transaction if it was started by us\n if (isTransactionStartedByUs) {\n try {\n await queryRunner.rollbackTransaction();\n } catch (rollbackError) { }\n }\n throw error;\n }\n\n } finally {\n\n // release query runner only if its created by us\n if (!this.queryRunner)\n await queryRunner.release();\n }\n });\n }\n\n}\n"],"sourceRoot":".."}
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  var DateUtils_1 = require("../util/DateUtils");
4
- var EntityMetadata_1 = require("../metadata/EntityMetadata");
5
4
  var OrmUtils_1 = require("../util/OrmUtils");
5
+ var ApplyValueTransformers_1 = require("../util/ApplyValueTransformers");
6
6
  /**
7
7
  * Finds what columns are changed in the subject entities.
8
8
  */
@@ -35,10 +35,11 @@ var SubjectChangedColumnsComputer = /** @class */ (function () {
35
35
  subject.metadata.columns.forEach(function (column) {
36
36
  // ignore special columns
37
37
  if (column.isVirtual ||
38
- column.isDiscriminator ||
39
- column.isUpdateDate ||
40
- column.isVersion ||
41
- column.isCreateDate)
38
+ column.isDiscriminator // ||
39
+ // column.isUpdateDate ||
40
+ // column.isVersion ||
41
+ // column.isCreateDate
42
+ )
42
43
  return;
43
44
  var changeMap = subject.changeMaps.find(function (changeMap) { return changeMap.column === column; });
44
45
  if (changeMap) {
@@ -52,7 +53,7 @@ var SubjectChangedColumnsComputer = /** @class */ (function () {
52
53
  // if there is no database entity then all columns are treated as new, e.g. changed
53
54
  if (subject.databaseEntity) {
54
55
  // get database value of the column
55
- var databaseValue = column.getEntityValue(subject.databaseEntity);
56
+ var databaseValue = column.getEntityValue(subject.databaseEntity, true);
56
57
  // filter out "relational columns" only in the case if there is a relation object in entity
57
58
  if (column.relationMetadata) {
58
59
  var value = column.relationMetadata.getEntityValue(subject.entity);
@@ -104,6 +105,9 @@ var SubjectChangedColumnsComputer = /** @class */ (function () {
104
105
  databaseValue = DateUtils_1.DateUtils.simpleJsonToString(databaseValue);
105
106
  break;
106
107
  }
108
+ if (column.transformer) {
109
+ normalizedValue = ApplyValueTransformers_1.ApplyValueTransformers.transformTo(column.transformer, entityValue);
110
+ }
107
111
  }
108
112
  // if value is not changed - then do nothing
109
113
  if (normalizedValue === databaseValue)
@@ -143,7 +147,7 @@ var SubjectChangedColumnsComputer = /** @class */ (function () {
143
147
  // related entity will contain only its relation ids
144
148
  var databaseRelatedEntityRelationIdMap = relation.getEntityValue(subject.databaseEntity);
145
149
  // if relation ids are equal then we don't need to update anything
146
- var areRelatedIdsEqual = EntityMetadata_1.EntityMetadata.compareIds(relatedEntityRelationIdMap, databaseRelatedEntityRelationIdMap);
150
+ var areRelatedIdsEqual = OrmUtils_1.OrmUtils.compareIds(relatedEntityRelationIdMap, databaseRelatedEntityRelationIdMap);
147
151
  if (areRelatedIdsEqual) {
148
152
  return;
149
153
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/persistence/SubjectChangedColumnsComputer.ts"],"names":[],"mappings":"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","file":"SubjectChangedColumnsComputer.js","sourcesContent":["import {Subject} from \"./Subject\";\nimport {DateUtils} from \"../util/DateUtils\";\nimport {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {EntityMetadata} from \"../metadata/EntityMetadata\";\nimport {OrmUtils} from \"../util/OrmUtils\";\n\n/**\n * Finds what columns are changed in the subject entities.\n */\nexport class SubjectChangedColumnsComputer {\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Finds what columns are changed in the subject entities.\n */\n compute(subjects: Subject[]) {\n subjects.forEach(subject => {\n this.computeDiffColumns(subject);\n this.computeDiffRelationalColumns(subjects, subject);\n });\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Differentiate columns from the updated entity and entity stored in the database.\n */\n protected computeDiffColumns(subject: Subject): void {\n\n // if there is no persisted entity then nothing to compute changed in it\n if (!subject.entity)\n return;\n\n subject.metadata.columns.forEach(column => {\n\n // ignore special columns\n if (column.isVirtual ||\n column.isDiscriminator ||\n column.isUpdateDate ||\n column.isVersion ||\n column.isCreateDate)\n return;\n\n const changeMap = subject.changeMaps.find(changeMap => changeMap.column === column);\n if (changeMap) {\n subject.changeMaps.splice(subject.changeMaps.indexOf(changeMap), 1);\n }\n\n // get user provided value - column value from the user provided persisted entity\n const entityValue = column.getEntityValue(subject.entity!);\n\n // we don't perform operation over undefined properties (but we DO need null properties!)\n if (entityValue === undefined)\n return;\n\n // if there is no database entity then all columns are treated as new, e.g. changed\n if (subject.databaseEntity) {\n\n // get database value of the column\n let databaseValue = column.getEntityValue(subject.databaseEntity);\n\n // filter out \"relational columns\" only in the case if there is a relation object in entity\n if (column.relationMetadata) {\n const value = column.relationMetadata.getEntityValue(subject.entity!);\n if (value !== null && value !== undefined)\n return;\n }\n let normalizedValue = entityValue;\n // normalize special values to make proper comparision\n if (entityValue !== null) {\n switch (column.type) {\n case \"date\":\n normalizedValue = DateUtils.mixedDateToDateString(entityValue);\n break;\n\n case \"time\":\n case \"time with time zone\":\n case \"time without time zone\":\n case \"timetz\":\n normalizedValue = DateUtils.mixedDateToTimeString(entityValue);\n break;\n\n case \"datetime\":\n case \"datetime2\":\n case Date:\n case \"timestamp\":\n case \"timestamp without time zone\":\n case \"timestamp with time zone\":\n case \"timestamp with local time zone\":\n case \"timestamptz\":\n normalizedValue = DateUtils.mixedDateToUtcDatetimeString(entityValue);\n databaseValue = DateUtils.mixedDateToUtcDatetimeString(databaseValue);\n break;\n\n case \"json\":\n case \"jsonb\":\n // JSON.stringify doesn't work because postgresql sorts jsonb before save.\n // If you try to save json '[{\"messages\": \"\", \"attribute Key\": \"\", \"level\":\"\"}] ' as jsonb,\n // then postgresql will save it as '[{\"level\": \"\", \"message\":\"\", \"attributeKey\": \"\"}]'\n if (OrmUtils.deepCompare(entityValue, databaseValue)) return;\n break;\n\n case \"simple-array\":\n normalizedValue = DateUtils.simpleArrayToString(entityValue);\n databaseValue = DateUtils.simpleArrayToString(databaseValue);\n break;\n case \"simple-enum\":\n normalizedValue = DateUtils.simpleEnumToString(entityValue);\n databaseValue = DateUtils.simpleEnumToString(databaseValue);\n break;\n case \"simple-json\":\n normalizedValue = DateUtils.simpleJsonToString(entityValue);\n databaseValue = DateUtils.simpleJsonToString(databaseValue);\n break;\n }\n }\n\n // if value is not changed - then do nothing\n if (normalizedValue === databaseValue)\n return;\n }\n subject.diffColumns.push(column);\n subject.changeMaps.push({\n column: column,\n value: entityValue\n });\n });\n }\n\n /**\n * Difference columns of the owning one-to-one and many-to-one columns.\n */\n protected computeDiffRelationalColumns(allSubjects: Subject[], subject: Subject): void {\n\n // if there is no persisted entity then nothing to compute changed in it\n if (!subject.entity)\n return;\n\n subject.metadata.relationsWithJoinColumns.forEach(relation => {\n\n // get the related entity from the persisted entity\n let relatedEntity = relation.getEntityValue(subject.entity!);\n\n // we don't perform operation over undefined properties (but we DO need null properties!)\n if (relatedEntity === undefined)\n return;\n\n // if there is no database entity then all relational columns are treated as new, e.g. changed\n if (subject.databaseEntity) {\n\n // here we cover two scenarios:\n // 1. related entity can be another entity which is natural way\n // 2. related entity can be just an entity id\n // if relation entity is just a relation id set (for example post.tag = 1)\n // then we create an id map from it to make a proper comparision\n let relatedEntityRelationIdMap: ObjectLiteral = relatedEntity;\n if (relatedEntityRelationIdMap !== null && relatedEntityRelationIdMap instanceof Object)\n relatedEntityRelationIdMap = relation.getRelationIdMap(relatedEntityRelationIdMap)!;\n\n // get database related entity. Since loadRelationIds are used on databaseEntity\n // related entity will contain only its relation ids\n const databaseRelatedEntityRelationIdMap = relation.getEntityValue(subject.databaseEntity);\n\n // if relation ids are equal then we don't need to update anything\n const areRelatedIdsEqual = EntityMetadata.compareIds(relatedEntityRelationIdMap, databaseRelatedEntityRelationIdMap);\n if (areRelatedIdsEqual) {\n return;\n } else {\n subject.diffRelations.push(relation);\n }\n }\n\n // if there is an inserted subject for the related entity of the persisted entity then use it as related entity\n // this code is used for related entities without ids to be properly inserted (and then updated if needed)\n const valueSubject = allSubjects.find(subject => subject.mustBeInserted && subject.entity === relatedEntity);\n if (valueSubject)\n relatedEntity = valueSubject;\n\n // find if there is already a relation to be changed\n const changeMap = subject.changeMaps.find(changeMap => changeMap.relation === relation);\n if (changeMap) { // and update its value if it was found\n changeMap.value = relatedEntity;\n\n } else { // if it wasn't found add a new relation for change\n subject.changeMaps.push({\n relation: relation,\n value: relatedEntity\n });\n }\n });\n }\n\n}\n"],"sourceRoot":".."}
1
+ {"version":3,"sources":["../../src/persistence/SubjectChangedColumnsComputer.ts"],"names":[],"mappings":"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","file":"SubjectChangedColumnsComputer.js","sourcesContent":["import {Subject} from \"./Subject\";\nimport {DateUtils} from \"../util/DateUtils\";\nimport {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {OrmUtils} from \"../util/OrmUtils\";\nimport {ApplyValueTransformers} from \"../util/ApplyValueTransformers\";\n\n/**\n * Finds what columns are changed in the subject entities.\n */\nexport class SubjectChangedColumnsComputer {\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Finds what columns are changed in the subject entities.\n */\n compute(subjects: Subject[]) {\n subjects.forEach(subject => {\n this.computeDiffColumns(subject);\n this.computeDiffRelationalColumns(subjects, subject);\n });\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Differentiate columns from the updated entity and entity stored in the database.\n */\n protected computeDiffColumns(subject: Subject): void {\n\n // if there is no persisted entity then nothing to compute changed in it\n if (!subject.entity)\n return;\n\n subject.metadata.columns.forEach(column => {\n\n // ignore special columns\n if (column.isVirtual ||\n column.isDiscriminator // ||\n // column.isUpdateDate ||\n // column.isVersion ||\n // column.isCreateDate\n )\n return;\n\n const changeMap = subject.changeMaps.find(changeMap => changeMap.column === column);\n if (changeMap) {\n subject.changeMaps.splice(subject.changeMaps.indexOf(changeMap), 1);\n }\n\n // get user provided value - column value from the user provided persisted entity\n const entityValue = column.getEntityValue(subject.entity!);\n\n // we don't perform operation over undefined properties (but we DO need null properties!)\n if (entityValue === undefined)\n return;\n\n // if there is no database entity then all columns are treated as new, e.g. changed\n if (subject.databaseEntity) {\n\n // get database value of the column\n let databaseValue = column.getEntityValue(subject.databaseEntity, true);\n\n // filter out \"relational columns\" only in the case if there is a relation object in entity\n if (column.relationMetadata) {\n const value = column.relationMetadata.getEntityValue(subject.entity!);\n if (value !== null && value !== undefined)\n return;\n }\n let normalizedValue = entityValue;\n // normalize special values to make proper comparision\n if (entityValue !== null) {\n switch (column.type) {\n case \"date\":\n normalizedValue = DateUtils.mixedDateToDateString(entityValue);\n break;\n\n case \"time\":\n case \"time with time zone\":\n case \"time without time zone\":\n case \"timetz\":\n normalizedValue = DateUtils.mixedDateToTimeString(entityValue);\n break;\n\n case \"datetime\":\n case \"datetime2\":\n case Date:\n case \"timestamp\":\n case \"timestamp without time zone\":\n case \"timestamp with time zone\":\n case \"timestamp with local time zone\":\n case \"timestamptz\":\n normalizedValue = DateUtils.mixedDateToUtcDatetimeString(entityValue);\n databaseValue = DateUtils.mixedDateToUtcDatetimeString(databaseValue);\n break;\n\n case \"json\":\n case \"jsonb\":\n // JSON.stringify doesn't work because postgresql sorts jsonb before save.\n // If you try to save json '[{\"messages\": \"\", \"attribute Key\": \"\", \"level\":\"\"}] ' as jsonb,\n // then postgresql will save it as '[{\"level\": \"\", \"message\":\"\", \"attributeKey\": \"\"}]'\n if (OrmUtils.deepCompare(entityValue, databaseValue)) return;\n break;\n\n case \"simple-array\":\n normalizedValue = DateUtils.simpleArrayToString(entityValue);\n databaseValue = DateUtils.simpleArrayToString(databaseValue);\n break;\n case \"simple-enum\":\n normalizedValue = DateUtils.simpleEnumToString(entityValue);\n databaseValue = DateUtils.simpleEnumToString(databaseValue);\n break;\n case \"simple-json\":\n normalizedValue = DateUtils.simpleJsonToString(entityValue);\n databaseValue = DateUtils.simpleJsonToString(databaseValue);\n break;\n }\n\n if (column.transformer) {\n normalizedValue = ApplyValueTransformers.transformTo(column.transformer, entityValue);\n }\n }\n\n // if value is not changed - then do nothing\n if (normalizedValue === databaseValue)\n return;\n }\n subject.diffColumns.push(column);\n subject.changeMaps.push({\n column: column,\n value: entityValue\n });\n });\n }\n\n /**\n * Difference columns of the owning one-to-one and many-to-one columns.\n */\n protected computeDiffRelationalColumns(allSubjects: Subject[], subject: Subject): void {\n\n // if there is no persisted entity then nothing to compute changed in it\n if (!subject.entity)\n return;\n\n subject.metadata.relationsWithJoinColumns.forEach(relation => {\n\n // get the related entity from the persisted entity\n let relatedEntity = relation.getEntityValue(subject.entity!);\n\n // we don't perform operation over undefined properties (but we DO need null properties!)\n if (relatedEntity === undefined)\n return;\n\n // if there is no database entity then all relational columns are treated as new, e.g. changed\n if (subject.databaseEntity) {\n\n // here we cover two scenarios:\n // 1. related entity can be another entity which is natural way\n // 2. related entity can be just an entity id\n // if relation entity is just a relation id set (for example post.tag = 1)\n // then we create an id map from it to make a proper comparision\n let relatedEntityRelationIdMap: ObjectLiteral = relatedEntity;\n if (relatedEntityRelationIdMap !== null && relatedEntityRelationIdMap instanceof Object)\n relatedEntityRelationIdMap = relation.getRelationIdMap(relatedEntityRelationIdMap)!;\n\n // get database related entity. Since loadRelationIds are used on databaseEntity\n // related entity will contain only its relation ids\n const databaseRelatedEntityRelationIdMap = relation.getEntityValue(subject.databaseEntity);\n\n // if relation ids are equal then we don't need to update anything\n const areRelatedIdsEqual = OrmUtils.compareIds(relatedEntityRelationIdMap, databaseRelatedEntityRelationIdMap);\n if (areRelatedIdsEqual) {\n return;\n } else {\n subject.diffRelations.push(relation);\n }\n }\n\n // if there is an inserted subject for the related entity of the persisted entity then use it as related entity\n // this code is used for related entities without ids to be properly inserted (and then updated if needed)\n const valueSubject = allSubjects.find(subject => subject.mustBeInserted && subject.entity === relatedEntity);\n if (valueSubject)\n relatedEntity = valueSubject;\n\n // find if there is already a relation to be changed\n const changeMap = subject.changeMaps.find(changeMap => changeMap.relation === relation);\n if (changeMap) { // and update its value if it was found\n changeMap.value = relatedEntity;\n\n } else { // if it wasn't found add a new relation for change\n subject.changeMaps.push({\n relation: relation,\n value: relatedEntity\n });\n }\n });\n }\n\n}\n"],"sourceRoot":".."}
@@ -32,7 +32,8 @@ var SubjectDatabaseEntityLoader = /** @class */ (function () {
32
32
  switch (_a.label) {
33
33
  case 0:
34
34
  promises = this.groupByEntityTargets().map(function (subjectGroup) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
35
- var e_1, _a, allIds, allSubjects, loadRelationPropertyPaths, findOptions, entities, allSubjects_1, allSubjects_1_1, subject;
35
+ var allIds, allSubjects, loadRelationPropertyPaths, findOptions, entities, allSubjects_1, allSubjects_1_1, subject;
36
+ var e_1, _a;
36
37
  var _this = this;
37
38
  return tslib_1.__generator(this, function (_b) {
38
39
  switch (_b.label) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/persistence/SubjectDatabaseEntityLoader.ts"],"names":[],"mappings":"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","file":"SubjectDatabaseEntityLoader.js","sourcesContent":["import {Subject} from \"./Subject\";\nimport {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {QueryRunner} from \"../query-runner/QueryRunner\";\nimport {FindManyOptions} from \"../find-options/FindManyOptions\";\n\n/**\n * Loads database entities for all operate subjects which do not have database entity set.\n * All entities that we load database entities for are marked as updated or inserted.\n * To understand which of them really needs to be inserted or updated we need to load\n * their original representations from the database.\n */\nexport class SubjectDatabaseEntityLoader {\n\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n\n constructor(protected queryRunner: QueryRunner,\n protected subjects: Subject[]) {\n }\n\n // ---------------------------------------------------------------------\n // Public Methods\n // ---------------------------------------------------------------------\n\n /**\n * Loads database entities for all subjects.\n *\n * loadAllRelations flag is used to load all relation ids of the object, no matter if they present in subject entity or not.\n * This option is used for deletion.\n */\n async load(operationType: \"save\"|\"remove\"|\"soft-remove\"|\"recover\"): Promise<void> {\n\n // we are grouping subjects by target to perform more optimized queries using WHERE IN operator\n // go through the groups and perform loading of database entities of each subject in the group\n const promises = this.groupByEntityTargets().map(async subjectGroup => {\n\n // prepare entity ids of the subjects we need to load\n const allIds: ObjectLiteral[] = [];\n const allSubjects: Subject[] = [];\n subjectGroup.subjects.forEach(subject => {\n\n // we don't load if subject already has a database entity loaded\n if (subject.databaseEntity || !subject.identifier)\n return;\n\n allIds.push(subject.identifier);\n allSubjects.push(subject);\n });\n\n // if there no ids found (means all entities are new and have generated ids) - then nothing to load there\n if (!allIds.length)\n return;\n\n const loadRelationPropertyPaths: string[] = [];\n\n // for the save, soft-remove and recover operation\n // extract all property paths of the relations we need to load relation ids for\n // this is for optimization purpose - this way we don't load relation ids for entities\n // whose relations are undefined, and since they are undefined its really pointless to\n // load something for them, since undefined properties are skipped by the orm\n if (operationType === \"save\" || operationType === \"soft-remove\" || operationType === \"recover\") {\n subjectGroup.subjects.forEach(subject => {\n\n // gets all relation property paths that exist in the persisted entity.\n subject.metadata.relations.forEach(relation => {\n const value = relation.getEntityValue(subject.entityWithFulfilledIds!);\n if (value === undefined)\n return;\n\n if (loadRelationPropertyPaths.indexOf(relation.propertyPath) === -1)\n loadRelationPropertyPaths.push(relation.propertyPath);\n });\n });\n } else { // remove\n\n // for remove operation\n // we only need to load junction relation ids since only they are removed by cascades\n loadRelationPropertyPaths.push(...subjectGroup.subjects[0].metadata.manyToManyRelations.map(relation => relation.propertyPath));\n }\n\n const findOptions: FindManyOptions<any> = {\n loadEagerRelations: false,\n loadRelationIds: {\n relations: loadRelationPropertyPaths,\n disableMixedMap: true\n },\n // the soft-deleted entities should be included in the loaded entities for recover operation\n withDeleted: true\n };\n\n // load database entities for all given ids\n const entities = await this.queryRunner.manager\n .getRepository<ObjectLiteral>(subjectGroup.target)\n .findByIds(allIds, findOptions);\n\n // now when we have entities we need to find subject of each entity\n // and insert that entity into database entity of the found subjects\n entities.forEach(entity => {\n const subjects = this.findByPersistEntityLike(subjectGroup.target, entity);\n subjects.forEach(subject => {\n subject.databaseEntity = entity;\n if (!subject.identifier)\n subject.identifier = subject.metadata.hasAllPrimaryKeys(entity) ? subject.metadata.getEntityIdMap(entity) : undefined;\n });\n });\n\n // this way we tell what subjects we tried to load database entities of\n for (let subject of allSubjects) {\n subject.databaseEntityLoaded = true;\n }\n });\n\n await Promise.all(promises);\n }\n\n // ---------------------------------------------------------------------\n // Protected Methods\n // ---------------------------------------------------------------------\n\n /**\n * Finds subjects where entity like given subject's entity.\n * Comparision made by entity id.\n * Multiple subjects may be returned if duplicates are present in the subject array.\n * This will likely result in the same row being updated multiple times during a transaction.\n */\n protected findByPersistEntityLike(entityTarget: Function|string, entity: ObjectLiteral): Subject[] {\n return this.subjects.filter(subject => {\n if (!subject.entity)\n return false;\n\n if (subject.entity === entity)\n return true;\n\n return subject.metadata.target === entityTarget && subject.metadata.compareEntities(subject.entityWithFulfilledIds!, entity);\n });\n }\n\n /**\n * Groups given Subject objects into groups separated by entity targets.\n */\n protected groupByEntityTargets(): { target: Function|string, subjects: Subject[] }[] {\n return this.subjects.reduce((groups, operatedEntity) => {\n let group = groups.find(group => group.target === operatedEntity.metadata.target);\n if (!group) {\n group = { target: operatedEntity.metadata.target, subjects: [] };\n groups.push(group);\n }\n group.subjects.push(operatedEntity);\n return groups;\n }, [] as { target: Function|string, subjects: Subject[] }[]);\n }\n\n}\n"],"sourceRoot":".."}
1
+ {"version":3,"sources":["../../src/persistence/SubjectDatabaseEntityLoader.ts"],"names":[],"mappings":"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","file":"SubjectDatabaseEntityLoader.js","sourcesContent":["import {Subject} from \"./Subject\";\nimport {ObjectLiteral} from \"../common/ObjectLiteral\";\nimport {QueryRunner} from \"../query-runner/QueryRunner\";\nimport {FindManyOptions} from \"../find-options/FindManyOptions\";\n\n/**\n * Loads database entities for all operate subjects which do not have database entity set.\n * All entities that we load database entities for are marked as updated or inserted.\n * To understand which of them really needs to be inserted or updated we need to load\n * their original representations from the database.\n */\nexport class SubjectDatabaseEntityLoader {\n\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n\n constructor(protected queryRunner: QueryRunner,\n protected subjects: Subject[]) {\n }\n\n // ---------------------------------------------------------------------\n // Public Methods\n // ---------------------------------------------------------------------\n\n /**\n * Loads database entities for all subjects.\n *\n * loadAllRelations flag is used to load all relation ids of the object, no matter if they present in subject entity or not.\n * This option is used for deletion.\n */\n async load(operationType: \"save\"|\"remove\"|\"soft-remove\"|\"recover\"): Promise<void> {\n\n // we are grouping subjects by target to perform more optimized queries using WHERE IN operator\n // go through the groups and perform loading of database entities of each subject in the group\n const promises = this.groupByEntityTargets().map(async subjectGroup => {\n\n // prepare entity ids of the subjects we need to load\n const allIds: ObjectLiteral[] = [];\n const allSubjects: Subject[] = [];\n subjectGroup.subjects.forEach(subject => {\n\n // we don't load if subject already has a database entity loaded\n if (subject.databaseEntity || !subject.identifier)\n return;\n\n allIds.push(subject.identifier);\n allSubjects.push(subject);\n });\n\n // if there no ids found (means all entities are new and have generated ids) - then nothing to load there\n if (!allIds.length)\n return;\n\n const loadRelationPropertyPaths: string[] = [];\n\n // for the save, soft-remove and recover operation\n // extract all property paths of the relations we need to load relation ids for\n // this is for optimization purpose - this way we don't load relation ids for entities\n // whose relations are undefined, and since they are undefined its really pointless to\n // load something for them, since undefined properties are skipped by the orm\n if (operationType === \"save\" || operationType === \"soft-remove\" || operationType === \"recover\") {\n subjectGroup.subjects.forEach(subject => {\n\n // gets all relation property paths that exist in the persisted entity.\n subject.metadata.relations.forEach(relation => {\n const value = relation.getEntityValue(subject.entityWithFulfilledIds!);\n if (value === undefined)\n return;\n\n if (loadRelationPropertyPaths.indexOf(relation.propertyPath) === -1)\n loadRelationPropertyPaths.push(relation.propertyPath);\n });\n });\n } else { // remove\n\n // for remove operation\n // we only need to load junction relation ids since only they are removed by cascades\n loadRelationPropertyPaths.push(...subjectGroup.subjects[0].metadata.manyToManyRelations.map(relation => relation.propertyPath));\n }\n\n const findOptions: FindManyOptions<any> = {\n loadEagerRelations: false,\n loadRelationIds: {\n relations: loadRelationPropertyPaths,\n disableMixedMap: true\n },\n // the soft-deleted entities should be included in the loaded entities for recover operation\n withDeleted: true\n };\n\n // load database entities for all given ids\n const entities = await this.queryRunner.manager\n .getRepository<ObjectLiteral>(subjectGroup.target)\n .findByIds(allIds, findOptions);\n\n // now when we have entities we need to find subject of each entity\n // and insert that entity into database entity of the found subjects\n entities.forEach(entity => {\n const subjects = this.findByPersistEntityLike(subjectGroup.target, entity);\n subjects.forEach(subject => {\n subject.databaseEntity = entity;\n if (!subject.identifier)\n subject.identifier = subject.metadata.hasAllPrimaryKeys(entity) ? subject.metadata.getEntityIdMap(entity) : undefined;\n });\n });\n\n // this way we tell what subjects we tried to load database entities of\n for (let subject of allSubjects) {\n subject.databaseEntityLoaded = true;\n }\n });\n\n await Promise.all(promises);\n }\n\n // ---------------------------------------------------------------------\n // Protected Methods\n // ---------------------------------------------------------------------\n\n /**\n * Finds subjects where entity like given subject's entity.\n * Comparision made by entity id.\n * Multiple subjects may be returned if duplicates are present in the subject array.\n * This will likely result in the same row being updated multiple times during a transaction.\n */\n protected findByPersistEntityLike(entityTarget: Function|string, entity: ObjectLiteral): Subject[] {\n return this.subjects.filter(subject => {\n if (!subject.entity)\n return false;\n\n if (subject.entity === entity)\n return true;\n\n return subject.metadata.target === entityTarget && subject.metadata.compareEntities(subject.entityWithFulfilledIds!, entity);\n });\n }\n\n /**\n * Groups given Subject objects into groups separated by entity targets.\n */\n protected groupByEntityTargets(): { target: Function|string, subjects: Subject[] }[] {\n return this.subjects.reduce((groups, operatedEntity) => {\n let group = groups.find(group => group.target === operatedEntity.metadata.target);\n if (!group) {\n group = { target: operatedEntity.metadata.target, subjects: [] };\n groups.push(group);\n }\n group.subjects.push(operatedEntity);\n return groups;\n }, [] as { target: Function|string, subjects: Subject[] }[]);\n }\n\n}\n"],"sourceRoot":".."}