typeorm 1.0.0-beta.1 → 1.0.0-beta.2

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 (1249) hide show
  1. package/browser/cache/DbQueryResultCache.d.ts +7 -0
  2. package/browser/cache/DbQueryResultCache.js +12 -4
  3. package/browser/cache/DbQueryResultCache.js.map +1 -1
  4. package/browser/cache/RedisQueryResultCache.d.ts +7 -0
  5. package/browser/cache/RedisQueryResultCache.js +15 -10
  6. package/browser/cache/RedisQueryResultCache.js.map +1 -1
  7. package/browser/cli-ts-node-esm.js +2 -2
  8. package/browser/cli-ts-node-esm.js.map +1 -1
  9. package/browser/common/RelationType.d.ts +2 -0
  10. package/browser/common/RelationType.js.map +1 -1
  11. package/browser/connection/ConnectionMetadataBuilder.d.ts +3 -0
  12. package/browser/connection/ConnectionMetadataBuilder.js +3 -0
  13. package/browser/connection/ConnectionMetadataBuilder.js.map +1 -1
  14. package/browser/connection/ConnectionOptionsReader.d.ts +5 -4
  15. package/browser/connection/ConnectionOptionsReader.js +14 -12
  16. package/browser/connection/ConnectionOptionsReader.js.map +1 -1
  17. package/browser/data-source/BaseDataSourceOptions.d.ts +8 -0
  18. package/browser/data-source/BaseDataSourceOptions.js.map +1 -1
  19. package/browser/data-source/DataSource.d.ts +20 -1
  20. package/browser/data-source/DataSource.js +37 -15
  21. package/browser/data-source/DataSource.js.map +1 -1
  22. package/browser/decorator/Check.d.ts +2 -0
  23. package/browser/decorator/Check.js +2 -1
  24. package/browser/decorator/Check.js.map +1 -1
  25. package/browser/decorator/Exclusion.d.ts +2 -0
  26. package/browser/decorator/Exclusion.js +1 -0
  27. package/browser/decorator/Exclusion.js.map +1 -1
  28. package/browser/decorator/ForeignKey.d.ts +3 -0
  29. package/browser/decorator/ForeignKey.js +1 -0
  30. package/browser/decorator/ForeignKey.js.map +1 -1
  31. package/browser/decorator/Generated.d.ts +1 -0
  32. package/browser/decorator/Generated.js +1 -0
  33. package/browser/decorator/Generated.js.map +1 -1
  34. package/browser/decorator/Index.d.ts +7 -0
  35. package/browser/decorator/Index.js +13 -13
  36. package/browser/decorator/Index.js.map +1 -1
  37. package/browser/decorator/Unique.d.ts +4 -0
  38. package/browser/decorator/Unique.js +6 -6
  39. package/browser/decorator/Unique.js.map +1 -1
  40. package/browser/decorator/columns/Column.d.ts +11 -0
  41. package/browser/decorator/columns/Column.js +3 -3
  42. package/browser/decorator/columns/Column.js.map +1 -1
  43. package/browser/decorator/columns/CreateDateColumn.d.ts +1 -0
  44. package/browser/decorator/columns/CreateDateColumn.js +2 -1
  45. package/browser/decorator/columns/CreateDateColumn.js.map +1 -1
  46. package/browser/decorator/columns/DeleteDateColumn.d.ts +1 -0
  47. package/browser/decorator/columns/DeleteDateColumn.js +2 -1
  48. package/browser/decorator/columns/DeleteDateColumn.js.map +1 -1
  49. package/browser/decorator/columns/ObjectIdColumn.d.ts +1 -0
  50. package/browser/decorator/columns/ObjectIdColumn.js +3 -4
  51. package/browser/decorator/columns/ObjectIdColumn.js.map +1 -1
  52. package/browser/decorator/columns/PrimaryColumn.d.ts +2 -0
  53. package/browser/decorator/columns/PrimaryColumn.js +2 -2
  54. package/browser/decorator/columns/PrimaryColumn.js.map +1 -1
  55. package/browser/decorator/columns/PrimaryGeneratedColumn.d.ts +4 -0
  56. package/browser/decorator/columns/PrimaryGeneratedColumn.js +1 -0
  57. package/browser/decorator/columns/PrimaryGeneratedColumn.js.map +1 -1
  58. package/browser/decorator/columns/UpdateDateColumn.d.ts +1 -0
  59. package/browser/decorator/columns/UpdateDateColumn.js +2 -1
  60. package/browser/decorator/columns/UpdateDateColumn.js.map +1 -1
  61. package/browser/decorator/columns/VersionColumn.d.ts +1 -0
  62. package/browser/decorator/columns/VersionColumn.js +2 -1
  63. package/browser/decorator/columns/VersionColumn.js.map +1 -1
  64. package/browser/decorator/columns/ViewColumn.d.ts +1 -0
  65. package/browser/decorator/columns/ViewColumn.js +2 -1
  66. package/browser/decorator/columns/ViewColumn.js.map +1 -1
  67. package/browser/decorator/columns/VirtualColumn.d.ts +2 -0
  68. package/browser/decorator/columns/VirtualColumn.js +1 -0
  69. package/browser/decorator/columns/VirtualColumn.js.map +1 -1
  70. package/browser/decorator/entity/ChildEntity.d.ts +1 -0
  71. package/browser/decorator/entity/ChildEntity.js +1 -0
  72. package/browser/decorator/entity/ChildEntity.js.map +1 -1
  73. package/browser/decorator/entity/Entity.d.ts +2 -0
  74. package/browser/decorator/entity/Entity.js +7 -6
  75. package/browser/decorator/entity/Entity.js.map +1 -1
  76. package/browser/decorator/entity/TableInheritance.d.ts +1 -0
  77. package/browser/decorator/entity/TableInheritance.js +3 -2
  78. package/browser/decorator/entity/TableInheritance.js.map +1 -1
  79. package/browser/decorator/entity-view/ViewEntity.d.ts +2 -0
  80. package/browser/decorator/entity-view/ViewEntity.js +4 -3
  81. package/browser/decorator/entity-view/ViewEntity.js.map +1 -1
  82. package/browser/decorator/options/ColumnOptions.d.ts +3 -0
  83. package/browser/decorator/options/ColumnOptions.js.map +1 -1
  84. package/browser/decorator/options/EntityOptions.d.ts +1 -0
  85. package/browser/decorator/options/EntityOptions.js.map +1 -1
  86. package/browser/decorator/options/RelationOptions.d.ts +2 -0
  87. package/browser/decorator/options/RelationOptions.js.map +1 -1
  88. package/browser/decorator/options/VirtualColumnOptions.d.ts +1 -0
  89. package/browser/decorator/options/VirtualColumnOptions.js.map +1 -1
  90. package/browser/decorator/relations/JoinColumn.d.ts +2 -0
  91. package/browser/decorator/relations/JoinColumn.js +2 -1
  92. package/browser/decorator/relations/JoinColumn.js.map +1 -1
  93. package/browser/decorator/relations/JoinTable.d.ts +2 -0
  94. package/browser/decorator/relations/JoinTable.js +5 -4
  95. package/browser/decorator/relations/JoinTable.js.map +1 -1
  96. package/browser/decorator/relations/ManyToMany.d.ts +2 -0
  97. package/browser/decorator/relations/ManyToMany.js +2 -2
  98. package/browser/decorator/relations/ManyToMany.js.map +1 -1
  99. package/browser/decorator/relations/ManyToOne.d.ts +2 -0
  100. package/browser/decorator/relations/ManyToOne.js +3 -3
  101. package/browser/decorator/relations/ManyToOne.js.map +1 -1
  102. package/browser/decorator/relations/OneToMany.d.ts +1 -0
  103. package/browser/decorator/relations/OneToMany.js +3 -3
  104. package/browser/decorator/relations/OneToMany.js.map +1 -1
  105. package/browser/decorator/relations/OneToOne.d.ts +2 -0
  106. package/browser/decorator/relations/OneToOne.js +3 -3
  107. package/browser/decorator/relations/OneToOne.js.map +1 -1
  108. package/browser/decorator/relations/RelationId.d.ts +1 -0
  109. package/browser/decorator/relations/RelationId.js +1 -0
  110. package/browser/decorator/relations/RelationId.js.map +1 -1
  111. package/browser/decorator/tree/Tree.d.ts +1 -0
  112. package/browser/decorator/tree/Tree.js +1 -0
  113. package/browser/decorator/tree/Tree.js.map +1 -1
  114. package/browser/decorator/tree/TreeChildren.d.ts +1 -0
  115. package/browser/decorator/tree/TreeChildren.js +3 -3
  116. package/browser/decorator/tree/TreeChildren.js.map +1 -1
  117. package/browser/decorator/tree/TreeParent.d.ts +1 -0
  118. package/browser/decorator/tree/TreeParent.js +3 -3
  119. package/browser/decorator/tree/TreeParent.js.map +1 -1
  120. package/browser/driver/Driver.d.ts +5 -0
  121. package/browser/driver/Driver.js.map +1 -1
  122. package/browser/driver/DriverFactory.d.ts +1 -0
  123. package/browser/driver/DriverFactory.js +1 -0
  124. package/browser/driver/DriverFactory.js.map +1 -1
  125. package/browser/driver/DriverUtils.d.ts +7 -0
  126. package/browser/driver/DriverUtils.js +34 -21
  127. package/browser/driver/DriverUtils.js.map +1 -1
  128. package/browser/driver/aurora-mysql/AuroraMysqlConnectionCredentialsOptions.d.ts +1 -0
  129. package/browser/driver/aurora-mysql/AuroraMysqlConnectionCredentialsOptions.js.map +1 -1
  130. package/browser/driver/aurora-mysql/AuroraMysqlDataSourceOptions.d.ts +1 -0
  131. package/browser/driver/aurora-mysql/AuroraMysqlDataSourceOptions.js.map +1 -1
  132. package/browser/driver/aurora-mysql/AuroraMysqlDriver.d.ts +37 -0
  133. package/browser/driver/aurora-mysql/AuroraMysqlDriver.js +53 -16
  134. package/browser/driver/aurora-mysql/AuroraMysqlDriver.js.map +1 -1
  135. package/browser/driver/aurora-mysql/AuroraMysqlQueryRunner.d.ts +64 -0
  136. package/browser/driver/aurora-mysql/AuroraMysqlQueryRunner.js +90 -30
  137. package/browser/driver/aurora-mysql/AuroraMysqlQueryRunner.js.map +1 -1
  138. package/browser/driver/aurora-postgres/AuroraPostgresDriver.d.ts +13 -0
  139. package/browser/driver/aurora-postgres/AuroraPostgresDriver.js +26 -5
  140. package/browser/driver/aurora-postgres/AuroraPostgresDriver.js.map +1 -1
  141. package/browser/driver/aurora-postgres/AuroraPostgresQueryRunner.d.ts +3 -0
  142. package/browser/driver/aurora-postgres/AuroraPostgresQueryRunner.js +27 -1
  143. package/browser/driver/aurora-postgres/AuroraPostgresQueryRunner.js.map +1 -1
  144. package/browser/driver/better-sqlite3/BetterSqlite3DataSourceOptions.d.ts +1 -0
  145. package/browser/driver/better-sqlite3/BetterSqlite3DataSourceOptions.js.map +1 -1
  146. package/browser/driver/better-sqlite3/BetterSqlite3Driver.d.ts +3 -0
  147. package/browser/driver/better-sqlite3/BetterSqlite3Driver.js +5 -3
  148. package/browser/driver/better-sqlite3/BetterSqlite3Driver.js.map +1 -1
  149. package/browser/driver/better-sqlite3/BetterSqlite3QueryRunner.d.ts +1 -0
  150. package/browser/driver/better-sqlite3/BetterSqlite3QueryRunner.js +1 -0
  151. package/browser/driver/better-sqlite3/BetterSqlite3QueryRunner.js.map +1 -1
  152. package/browser/driver/capacitor/CapacitorDriver.d.ts +1 -0
  153. package/browser/driver/capacitor/CapacitorDriver.js +3 -3
  154. package/browser/driver/capacitor/CapacitorDriver.js.map +1 -1
  155. package/browser/driver/capacitor/CapacitorQueryRunner.d.ts +2 -0
  156. package/browser/driver/capacitor/CapacitorQueryRunner.js +4 -2
  157. package/browser/driver/capacitor/CapacitorQueryRunner.js.map +1 -1
  158. package/browser/driver/cockroachdb/CockroachDataSourceOptions.d.ts +1 -0
  159. package/browser/driver/cockroachdb/CockroachDataSourceOptions.js.map +1 -1
  160. package/browser/driver/cockroachdb/CockroachDriver.d.ts +35 -0
  161. package/browser/driver/cockroachdb/CockroachDriver.js +64 -29
  162. package/browser/driver/cockroachdb/CockroachDriver.js.map +1 -1
  163. package/browser/driver/cockroachdb/CockroachQueryRunner.d.ts +74 -0
  164. package/browser/driver/cockroachdb/CockroachQueryRunner.js +143 -119
  165. package/browser/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  166. package/browser/driver/cordova/CordovaDriver.d.ts +6 -0
  167. package/browser/driver/cordova/CordovaDriver.js +14 -4
  168. package/browser/driver/cordova/CordovaDriver.js.map +1 -1
  169. package/browser/driver/cordova/CordovaQueryRunner.d.ts +2 -0
  170. package/browser/driver/cordova/CordovaQueryRunner.js +3 -1
  171. package/browser/driver/cordova/CordovaQueryRunner.js.map +1 -1
  172. package/browser/driver/expo/ExpoDriver.js +1 -2
  173. package/browser/driver/expo/ExpoDriver.js.map +1 -1
  174. package/browser/driver/mongodb/MongoDriver.d.ts +25 -0
  175. package/browser/driver/mongodb/MongoDriver.js +35 -6
  176. package/browser/driver/mongodb/MongoDriver.js.map +1 -1
  177. package/browser/driver/mongodb/MongoQueryRunner.d.ts +84 -0
  178. package/browser/driver/mongodb/MongoQueryRunner.js +102 -18
  179. package/browser/driver/mongodb/MongoQueryRunner.js.map +1 -1
  180. package/browser/driver/mongodb/bson.typings.d.ts +1 -0
  181. package/browser/driver/mongodb/bson.typings.js.map +1 -1
  182. package/browser/driver/mysql/MysqlConnectionCredentialsOptions.d.ts +1 -0
  183. package/browser/driver/mysql/MysqlConnectionCredentialsOptions.js.map +1 -1
  184. package/browser/driver/mysql/MysqlDataSourceOptions.d.ts +2 -0
  185. package/browser/driver/mysql/MysqlDataSourceOptions.js.map +1 -1
  186. package/browser/driver/mysql/MysqlDriver.d.ts +37 -0
  187. package/browser/driver/mysql/MysqlDriver.js +57 -17
  188. package/browser/driver/mysql/MysqlDriver.js.map +1 -1
  189. package/browser/driver/mysql/MysqlQueryRunner.d.ts +64 -0
  190. package/browser/driver/mysql/MysqlQueryRunner.js +140 -111
  191. package/browser/driver/mysql/MysqlQueryRunner.js.map +1 -1
  192. package/browser/driver/nativescript/NativescriptDriver.d.ts +1 -0
  193. package/browser/driver/nativescript/NativescriptDriver.js +3 -4
  194. package/browser/driver/nativescript/NativescriptDriver.js.map +1 -1
  195. package/browser/driver/nativescript/NativescriptQueryRunner.d.ts +2 -0
  196. package/browser/driver/nativescript/NativescriptQueryRunner.js +3 -1
  197. package/browser/driver/nativescript/NativescriptQueryRunner.js.map +1 -1
  198. package/browser/driver/oracle/OracleDriver.d.ts +32 -0
  199. package/browser/driver/oracle/OracleDriver.js +48 -15
  200. package/browser/driver/oracle/OracleDriver.js.map +1 -1
  201. package/browser/driver/oracle/OracleQueryRunner.d.ts +66 -0
  202. package/browser/driver/oracle/OracleQueryRunner.js +119 -83
  203. package/browser/driver/oracle/OracleQueryRunner.js.map +1 -1
  204. package/browser/driver/postgres/PostgresDataSourceOptions.d.ts +2 -0
  205. package/browser/driver/postgres/PostgresDataSourceOptions.js.map +1 -1
  206. package/browser/driver/postgres/PostgresDriver.d.ts +37 -0
  207. package/browser/driver/postgres/PostgresDriver.js +67 -31
  208. package/browser/driver/postgres/PostgresDriver.js.map +1 -1
  209. package/browser/driver/postgres/PostgresQueryRunner.d.ts +81 -0
  210. package/browser/driver/postgres/PostgresQueryRunner.js +152 -121
  211. package/browser/driver/postgres/PostgresQueryRunner.js.map +1 -1
  212. package/browser/driver/react-native/ReactNativeDriver.d.ts +29 -0
  213. package/browser/driver/react-native/ReactNativeDriver.js +45 -12
  214. package/browser/driver/react-native/ReactNativeDriver.js.map +1 -1
  215. package/browser/driver/react-native/ReactNativeQueryRunner.d.ts +2 -0
  216. package/browser/driver/react-native/ReactNativeQueryRunner.js +3 -1
  217. package/browser/driver/react-native/ReactNativeQueryRunner.js.map +1 -1
  218. package/browser/driver/sap/SapDataSourceOptions.d.ts +1 -0
  219. package/browser/driver/sap/SapDataSourceOptions.js.map +1 -1
  220. package/browser/driver/sap/SapDriver.d.ts +30 -0
  221. package/browser/driver/sap/SapDriver.js +45 -11
  222. package/browser/driver/sap/SapDriver.js.map +1 -1
  223. package/browser/driver/sap/SapQueryRunner.d.ts +66 -0
  224. package/browser/driver/sap/SapQueryRunner.js +101 -56
  225. package/browser/driver/sap/SapQueryRunner.js.map +1 -1
  226. package/browser/driver/spanner/SpannerDataSourceOptions.d.ts +1 -0
  227. package/browser/driver/spanner/SpannerDataSourceOptions.js.map +1 -1
  228. package/browser/driver/spanner/SpannerDriver.d.ts +33 -0
  229. package/browser/driver/spanner/SpannerDriver.js +50 -10
  230. package/browser/driver/spanner/SpannerDriver.js.map +1 -1
  231. package/browser/driver/spanner/SpannerQueryRunner.d.ts +64 -0
  232. package/browser/driver/spanner/SpannerQueryRunner.js +89 -32
  233. package/browser/driver/spanner/SpannerQueryRunner.js.map +1 -1
  234. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.d.ts +30 -0
  235. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js +43 -77
  236. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
  237. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.d.ts +59 -0
  238. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +89 -45
  239. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  240. package/browser/driver/sqljs/SqljsDriver.d.ts +5 -0
  241. package/browser/driver/sqljs/SqljsDriver.js +8 -4
  242. package/browser/driver/sqljs/SqljsDriver.js.map +1 -1
  243. package/browser/driver/sqljs/SqljsQueryRunner.d.ts +1 -0
  244. package/browser/driver/sqljs/SqljsQueryRunner.js +1 -0
  245. package/browser/driver/sqljs/SqljsQueryRunner.js.map +1 -1
  246. package/browser/driver/sqlserver/MssqlParameter.d.ts +1 -0
  247. package/browser/driver/sqlserver/MssqlParameter.js +1 -0
  248. package/browser/driver/sqlserver/MssqlParameter.js.map +1 -1
  249. package/browser/driver/sqlserver/SqlServerDataSourceOptions.d.ts +14 -5
  250. package/browser/driver/sqlserver/SqlServerDataSourceOptions.js.map +1 -1
  251. package/browser/driver/sqlserver/SqlServerDriver.d.ts +42 -0
  252. package/browser/driver/sqlserver/SqlServerDriver.js +100 -26
  253. package/browser/driver/sqlserver/SqlServerDriver.js.map +1 -1
  254. package/browser/driver/sqlserver/SqlServerQueryRunner.d.ts +76 -10
  255. package/browser/driver/sqlserver/SqlServerQueryRunner.js +160 -163
  256. package/browser/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  257. package/browser/driver/types/IsolationLevel.d.ts +2 -1
  258. package/browser/driver/types/IsolationLevel.js +8 -0
  259. package/browser/driver/types/IsolationLevel.js.map +1 -1
  260. package/browser/driver/validate-isolation-level.d.ts +9 -0
  261. package/browser/driver/validate-isolation-level.js +23 -0
  262. package/browser/driver/validate-isolation-level.js.map +1 -0
  263. package/browser/entity-manager/EntityManager.d.ts +38 -1
  264. package/browser/entity-manager/EntityManager.js +58 -12
  265. package/browser/entity-manager/EntityManager.js.map +1 -1
  266. package/browser/entity-manager/EntityManagerFactory.d.ts +1 -0
  267. package/browser/entity-manager/EntityManagerFactory.js +1 -0
  268. package/browser/entity-manager/EntityManagerFactory.js.map +1 -1
  269. package/browser/entity-manager/MongoEntityManager.d.ts +54 -1
  270. package/browser/entity-manager/MongoEntityManager.js +103 -12
  271. package/browser/entity-manager/MongoEntityManager.js.map +1 -1
  272. package/browser/entity-manager/SqljsEntityManager.d.ts +2 -0
  273. package/browser/entity-manager/SqljsEntityManager.js +2 -0
  274. package/browser/entity-manager/SqljsEntityManager.js.map +1 -1
  275. package/browser/entity-schema/EntitySchemaColumnOptions.d.ts +1 -0
  276. package/browser/entity-schema/EntitySchemaColumnOptions.js.map +1 -1
  277. package/browser/entity-schema/EntitySchemaOptions.d.ts +1 -0
  278. package/browser/entity-schema/EntitySchemaOptions.js.map +1 -1
  279. package/browser/entity-schema/EntitySchemaTransformer.d.ts +1 -0
  280. package/browser/entity-schema/EntitySchemaTransformer.js +25 -26
  281. package/browser/entity-schema/EntitySchemaTransformer.js.map +1 -1
  282. package/browser/error/InitializedRelationError.d.ts +1 -0
  283. package/browser/error/InitializedRelationError.js +1 -0
  284. package/browser/error/InitializedRelationError.js.map +1 -1
  285. package/browser/find-options/FindOptionsUtils.d.ts +7 -0
  286. package/browser/find-options/FindOptionsUtils.js +7 -0
  287. package/browser/find-options/FindOptionsUtils.js.map +1 -1
  288. package/browser/find-options/OrderByCondition.d.ts +2 -1
  289. package/browser/find-options/OrderByCondition.js.map +1 -1
  290. package/browser/find-options/operator/Any.d.ts +4 -1
  291. package/browser/find-options/operator/Any.js +4 -1
  292. package/browser/find-options/operator/Any.js.map +1 -1
  293. package/browser/find-options/operator/ArrayContainedBy.d.ts +4 -1
  294. package/browser/find-options/operator/ArrayContainedBy.js +4 -1
  295. package/browser/find-options/operator/ArrayContainedBy.js.map +1 -1
  296. package/browser/find-options/operator/ArrayContains.d.ts +4 -1
  297. package/browser/find-options/operator/ArrayContains.js +4 -1
  298. package/browser/find-options/operator/ArrayContains.js.map +1 -1
  299. package/browser/find-options/operator/ArrayOverlap.d.ts +4 -1
  300. package/browser/find-options/operator/ArrayOverlap.js +4 -1
  301. package/browser/find-options/operator/ArrayOverlap.js.map +1 -1
  302. package/browser/find-options/operator/Between.d.ts +4 -1
  303. package/browser/find-options/operator/Between.js +4 -1
  304. package/browser/find-options/operator/Between.js.map +1 -1
  305. package/browser/find-options/operator/Equal.d.ts +6 -3
  306. package/browser/find-options/operator/Equal.js +6 -3
  307. package/browser/find-options/operator/Equal.js.map +1 -1
  308. package/browser/find-options/operator/ILike.d.ts +4 -1
  309. package/browser/find-options/operator/ILike.js +4 -1
  310. package/browser/find-options/operator/ILike.js.map +1 -1
  311. package/browser/find-options/operator/In.d.ts +4 -1
  312. package/browser/find-options/operator/In.js +4 -1
  313. package/browser/find-options/operator/In.js.map +1 -1
  314. package/browser/find-options/operator/IsNull.d.ts +4 -1
  315. package/browser/find-options/operator/IsNull.js +4 -1
  316. package/browser/find-options/operator/IsNull.js.map +1 -1
  317. package/browser/find-options/operator/JsonContains.d.ts +4 -1
  318. package/browser/find-options/operator/JsonContains.js +4 -1
  319. package/browser/find-options/operator/JsonContains.js.map +1 -1
  320. package/browser/find-options/operator/LessThan.d.ts +4 -1
  321. package/browser/find-options/operator/LessThan.js +4 -1
  322. package/browser/find-options/operator/LessThan.js.map +1 -1
  323. package/browser/find-options/operator/LessThanOrEqual.d.ts +4 -1
  324. package/browser/find-options/operator/LessThanOrEqual.js +4 -1
  325. package/browser/find-options/operator/LessThanOrEqual.js.map +1 -1
  326. package/browser/find-options/operator/Like.d.ts +4 -1
  327. package/browser/find-options/operator/Like.js +4 -1
  328. package/browser/find-options/operator/Like.js.map +1 -1
  329. package/browser/find-options/operator/MoreThan.d.ts +4 -1
  330. package/browser/find-options/operator/MoreThan.js +4 -1
  331. package/browser/find-options/operator/MoreThan.js.map +1 -1
  332. package/browser/find-options/operator/MoreThanOrEqual.d.ts +4 -1
  333. package/browser/find-options/operator/MoreThanOrEqual.js +4 -1
  334. package/browser/find-options/operator/MoreThanOrEqual.js.map +1 -1
  335. package/browser/find-options/operator/Not.d.ts +4 -1
  336. package/browser/find-options/operator/Not.js +4 -1
  337. package/browser/find-options/operator/Not.js.map +1 -1
  338. package/browser/find-options/operator/Raw.d.ts +12 -3
  339. package/browser/find-options/operator/Raw.js.map +1 -1
  340. package/browser/globals.js +1 -2
  341. package/browser/globals.js.map +1 -1
  342. package/browser/logger/AbstractLogger.d.ts +9 -0
  343. package/browser/logger/AbstractLogger.js +10 -2
  344. package/browser/logger/AbstractLogger.js.map +1 -1
  345. package/browser/logger/AdvancedConsoleLogger.d.ts +1 -0
  346. package/browser/logger/AdvancedConsoleLogger.js +1 -0
  347. package/browser/logger/AdvancedConsoleLogger.js.map +1 -1
  348. package/browser/logger/DebugLogger.d.ts +2 -0
  349. package/browser/logger/DebugLogger.js +3 -1
  350. package/browser/logger/DebugLogger.js.map +1 -1
  351. package/browser/logger/FileLogger.d.ts +13 -2
  352. package/browser/logger/FileLogger.js +4 -5
  353. package/browser/logger/FileLogger.js.map +1 -1
  354. package/browser/logger/FormattedConsoleLogger.d.ts +1 -0
  355. package/browser/logger/FormattedConsoleLogger.js +1 -0
  356. package/browser/logger/FormattedConsoleLogger.js.map +1 -1
  357. package/browser/logger/LoggerFactory.d.ts +1 -0
  358. package/browser/logger/LoggerFactory.js +1 -0
  359. package/browser/logger/LoggerFactory.js.map +1 -1
  360. package/browser/logger/LoggerOptions.d.ts +0 -9
  361. package/browser/logger/LoggerOptions.js.map +1 -1
  362. package/browser/logger/SimpleConsoleLogger.d.ts +1 -0
  363. package/browser/logger/SimpleConsoleLogger.js +1 -0
  364. package/browser/logger/SimpleConsoleLogger.js.map +1 -1
  365. package/browser/metadata/CheckMetadata.d.ts +1 -0
  366. package/browser/metadata/CheckMetadata.js +4 -3
  367. package/browser/metadata/CheckMetadata.js.map +1 -1
  368. package/browser/metadata/ColumnMetadata.d.ts +8 -5
  369. package/browser/metadata/ColumnMetadata.js +17 -25
  370. package/browser/metadata/ColumnMetadata.js.map +1 -1
  371. package/browser/metadata/EmbeddedMetadata.d.ts +1 -0
  372. package/browser/metadata/EmbeddedMetadata.js +1 -0
  373. package/browser/metadata/EmbeddedMetadata.js.map +1 -1
  374. package/browser/metadata/EntityListenerMetadata.d.ts +3 -0
  375. package/browser/metadata/EntityListenerMetadata.js +3 -0
  376. package/browser/metadata/EntityListenerMetadata.js.map +1 -1
  377. package/browser/metadata/EntityMetadata.d.ts +25 -5
  378. package/browser/metadata/EntityMetadata.js +32 -12
  379. package/browser/metadata/EntityMetadata.js.map +1 -1
  380. package/browser/metadata/ExclusionMetadata.d.ts +1 -0
  381. package/browser/metadata/ExclusionMetadata.js +4 -3
  382. package/browser/metadata/ExclusionMetadata.js.map +1 -1
  383. package/browser/metadata/ForeignKeyMetadata.d.ts +1 -0
  384. package/browser/metadata/ForeignKeyMetadata.js +6 -5
  385. package/browser/metadata/ForeignKeyMetadata.js.map +1 -1
  386. package/browser/metadata/IndexMetadata.d.ts +1 -0
  387. package/browser/metadata/IndexMetadata.js +4 -3
  388. package/browser/metadata/IndexMetadata.js.map +1 -1
  389. package/browser/metadata/RelationIdMetadata.d.ts +1 -0
  390. package/browser/metadata/RelationIdMetadata.js +1 -0
  391. package/browser/metadata/RelationIdMetadata.js.map +1 -1
  392. package/browser/metadata/RelationMetadata.d.ts +8 -0
  393. package/browser/metadata/RelationMetadata.js +15 -15
  394. package/browser/metadata/RelationMetadata.js.map +1 -1
  395. package/browser/metadata/UniqueMetadata.d.ts +1 -0
  396. package/browser/metadata/UniqueMetadata.js +4 -3
  397. package/browser/metadata/UniqueMetadata.js.map +1 -1
  398. package/browser/metadata-args/MetadataArgsStorage.d.ts +4 -0
  399. package/browser/metadata-args/MetadataArgsStorage.js +4 -0
  400. package/browser/metadata-args/MetadataArgsStorage.js.map +1 -1
  401. package/browser/metadata-builder/ClosureJunctionEntityMetadataBuilder.d.ts +1 -0
  402. package/browser/metadata-builder/ClosureJunctionEntityMetadataBuilder.js +7 -11
  403. package/browser/metadata-builder/ClosureJunctionEntityMetadataBuilder.js.map +1 -1
  404. package/browser/metadata-builder/EntityMetadataBuilder.d.ts +7 -0
  405. package/browser/metadata-builder/EntityMetadataBuilder.js +11 -6
  406. package/browser/metadata-builder/EntityMetadataBuilder.js.map +1 -1
  407. package/browser/metadata-builder/EntityMetadataValidator.d.ts +4 -0
  408. package/browser/metadata-builder/EntityMetadataValidator.js +6 -43
  409. package/browser/metadata-builder/EntityMetadataValidator.js.map +1 -1
  410. package/browser/metadata-builder/JunctionEntityMetadataBuilder.d.ts +3 -0
  411. package/browser/metadata-builder/JunctionEntityMetadataBuilder.js +39 -20
  412. package/browser/metadata-builder/JunctionEntityMetadataBuilder.js.map +1 -1
  413. package/browser/metadata-builder/MetadataUtils.d.ts +3 -0
  414. package/browser/metadata-builder/MetadataUtils.js +4 -1
  415. package/browser/metadata-builder/MetadataUtils.js.map +1 -1
  416. package/browser/metadata-builder/RelationJoinColumnBuilder.d.ts +3 -0
  417. package/browser/metadata-builder/RelationJoinColumnBuilder.js +17 -1
  418. package/browser/metadata-builder/RelationJoinColumnBuilder.js.map +1 -1
  419. package/browser/migration/MigrationExecutor.d.ts +9 -0
  420. package/browser/migration/MigrationExecutor.js +16 -7
  421. package/browser/migration/MigrationExecutor.js.map +1 -1
  422. package/browser/naming-strategy/DefaultNamingStrategy.d.ts +3 -0
  423. package/browser/naming-strategy/DefaultNamingStrategy.js +13 -10
  424. package/browser/naming-strategy/DefaultNamingStrategy.js.map +1 -1
  425. package/browser/naming-strategy/NamingStrategyInterface.d.ts +2 -0
  426. package/browser/naming-strategy/NamingStrategyInterface.js.map +1 -1
  427. package/browser/persistence/EntityPersistExecutor.js +2 -4
  428. package/browser/persistence/EntityPersistExecutor.js.map +1 -1
  429. package/browser/persistence/Subject.js +4 -6
  430. package/browser/persistence/Subject.js.map +1 -1
  431. package/browser/persistence/SubjectChangedColumnsComputer.d.ts +3 -0
  432. package/browser/persistence/SubjectChangedColumnsComputer.js +3 -0
  433. package/browser/persistence/SubjectChangedColumnsComputer.js.map +1 -1
  434. package/browser/persistence/SubjectDatabaseEntityLoader.d.ts +1 -0
  435. package/browser/persistence/SubjectDatabaseEntityLoader.js +3 -1
  436. package/browser/persistence/SubjectDatabaseEntityLoader.js.map +1 -1
  437. package/browser/persistence/SubjectExecutor.d.ts +2 -0
  438. package/browser/persistence/SubjectExecutor.js +15 -27
  439. package/browser/persistence/SubjectExecutor.js.map +1 -1
  440. package/browser/persistence/SubjectTopologicalSorter.d.ts +4 -0
  441. package/browser/persistence/SubjectTopologicalSorter.js +4 -0
  442. package/browser/persistence/SubjectTopologicalSorter.js.map +1 -1
  443. package/browser/persistence/subject-builder/CascadesSubjectBuilder.d.ts +2 -0
  444. package/browser/persistence/subject-builder/CascadesSubjectBuilder.js +37 -11
  445. package/browser/persistence/subject-builder/CascadesSubjectBuilder.js.map +1 -1
  446. package/browser/persistence/subject-builder/ManyToManySubjectBuilder.d.ts +11 -8
  447. package/browser/persistence/subject-builder/ManyToManySubjectBuilder.js +15 -13
  448. package/browser/persistence/subject-builder/ManyToManySubjectBuilder.js.map +1 -1
  449. package/browser/persistence/subject-builder/OneToManySubjectBuilder.d.ts +9 -10
  450. package/browser/persistence/subject-builder/OneToManySubjectBuilder.js +30 -24
  451. package/browser/persistence/subject-builder/OneToManySubjectBuilder.js.map +1 -1
  452. package/browser/persistence/subject-builder/OneToOneInverseSideSubjectBuilder.d.ts +9 -10
  453. package/browser/persistence/subject-builder/OneToOneInverseSideSubjectBuilder.js +9 -10
  454. package/browser/persistence/subject-builder/OneToOneInverseSideSubjectBuilder.js.map +1 -1
  455. package/browser/persistence/tree/ClosureSubjectExecutor.d.ts +4 -0
  456. package/browser/persistence/tree/ClosureSubjectExecutor.js +10 -8
  457. package/browser/persistence/tree/ClosureSubjectExecutor.js.map +1 -1
  458. package/browser/persistence/tree/MaterializedPathSubjectExecutor.d.ts +2 -0
  459. package/browser/persistence/tree/MaterializedPathSubjectExecutor.js +8 -6
  460. package/browser/persistence/tree/MaterializedPathSubjectExecutor.js.map +1 -1
  461. package/browser/persistence/tree/NestedSetSubjectExecutor.d.ts +5 -0
  462. package/browser/persistence/tree/NestedSetSubjectExecutor.js +10 -5
  463. package/browser/persistence/tree/NestedSetSubjectExecutor.js.map +1 -1
  464. package/browser/platform/PlatformTools.d.ts +9 -0
  465. package/browser/platform/PlatformTools.js +10 -1
  466. package/browser/platform/PlatformTools.js.map +1 -1
  467. package/browser/query-builder/Alias.js +1 -1
  468. package/browser/query-builder/Alias.js.map +1 -1
  469. package/browser/query-builder/Brackets.d.ts +1 -0
  470. package/browser/query-builder/Brackets.js +1 -0
  471. package/browser/query-builder/Brackets.js.map +1 -1
  472. package/browser/query-builder/DeleteQueryBuilder.d.ts +7 -0
  473. package/browser/query-builder/DeleteQueryBuilder.js +9 -0
  474. package/browser/query-builder/DeleteQueryBuilder.js.map +1 -1
  475. package/browser/query-builder/InsertQueryBuilder.d.ts +9 -0
  476. package/browser/query-builder/InsertQueryBuilder.js +14 -8
  477. package/browser/query-builder/InsertQueryBuilder.js.map +1 -1
  478. package/browser/query-builder/JoinAttribute.js +3 -3
  479. package/browser/query-builder/JoinAttribute.js.map +1 -1
  480. package/browser/query-builder/QueryBuilder.d.ts +25 -4
  481. package/browser/query-builder/QueryBuilder.js +58 -15
  482. package/browser/query-builder/QueryBuilder.js.map +1 -1
  483. package/browser/query-builder/QueryBuilderUtils.d.ts +1 -0
  484. package/browser/query-builder/QueryBuilderUtils.js +1 -0
  485. package/browser/query-builder/QueryBuilderUtils.js.map +1 -1
  486. package/browser/query-builder/QueryExpressionMap.d.ts +5 -0
  487. package/browser/query-builder/QueryExpressionMap.js +4 -1
  488. package/browser/query-builder/QueryExpressionMap.js.map +1 -1
  489. package/browser/query-builder/RelationIdLoader.d.ts +6 -35
  490. package/browser/query-builder/RelationIdLoader.js +19 -43
  491. package/browser/query-builder/RelationIdLoader.js.map +1 -1
  492. package/browser/query-builder/RelationLoader.d.ts +11 -2
  493. package/browser/query-builder/RelationLoader.js +20 -17
  494. package/browser/query-builder/RelationLoader.js.map +1 -1
  495. package/browser/query-builder/RelationQueryBuilder.d.ts +5 -0
  496. package/browser/query-builder/RelationQueryBuilder.js +5 -0
  497. package/browser/query-builder/RelationQueryBuilder.js.map +1 -1
  498. package/browser/query-builder/RelationRemover.d.ts +1 -0
  499. package/browser/query-builder/RelationRemover.js +1 -0
  500. package/browser/query-builder/RelationRemover.js.map +1 -1
  501. package/browser/query-builder/RelationUpdater.d.ts +1 -0
  502. package/browser/query-builder/RelationUpdater.js +1 -0
  503. package/browser/query-builder/RelationUpdater.js.map +1 -1
  504. package/browser/query-builder/ReturningResultsEntityUpdator.d.ts +2 -0
  505. package/browser/query-builder/ReturningResultsEntityUpdator.js +3 -1
  506. package/browser/query-builder/ReturningResultsEntityUpdator.js.map +1 -1
  507. package/browser/query-builder/SelectQueryBuilder.d.ts +31 -8
  508. package/browser/query-builder/SelectQueryBuilder.js +98 -70
  509. package/browser/query-builder/SelectQueryBuilder.js.map +1 -1
  510. package/browser/query-builder/SoftDeleteQueryBuilder.d.ts +11 -0
  511. package/browser/query-builder/SoftDeleteQueryBuilder.js +17 -0
  512. package/browser/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
  513. package/browser/query-builder/UpdateQueryBuilder.d.ts +11 -0
  514. package/browser/query-builder/UpdateQueryBuilder.js +18 -1
  515. package/browser/query-builder/UpdateQueryBuilder.js.map +1 -1
  516. package/browser/query-builder/relation-id/RelationIdAttribute.js +5 -5
  517. package/browser/query-builder/relation-id/RelationIdAttribute.js.map +1 -1
  518. package/browser/query-builder/relation-id/RelationIdLoader.d.ts +2 -1
  519. package/browser/query-builder/relation-id/RelationIdLoader.js +6 -3
  520. package/browser/query-builder/relation-id/RelationIdLoader.js.map +1 -1
  521. package/browser/query-builder/transformer/DocumentToEntityTransformer.js +3 -16
  522. package/browser/query-builder/transformer/DocumentToEntityTransformer.js.map +1 -1
  523. package/browser/query-builder/transformer/PlainObjectToDatabaseEntityTransformer.js +2 -4
  524. package/browser/query-builder/transformer/PlainObjectToDatabaseEntityTransformer.js.map +1 -1
  525. package/browser/query-builder/transformer/PlainObjectToNewEntityTransformer.d.ts +1 -0
  526. package/browser/query-builder/transformer/PlainObjectToNewEntityTransformer.js +1 -0
  527. package/browser/query-builder/transformer/PlainObjectToNewEntityTransformer.js.map +1 -1
  528. package/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.d.ts +6 -0
  529. package/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.js +6 -7
  530. package/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.js.map +1 -1
  531. package/browser/query-runner/BaseQueryRunner.d.ts +21 -1
  532. package/browser/query-runner/BaseQueryRunner.js +36 -49
  533. package/browser/query-runner/BaseQueryRunner.js.map +1 -1
  534. package/browser/query-runner/QueryRunner.d.ts +5 -1
  535. package/browser/query-runner/QueryRunner.js.map +1 -1
  536. package/browser/repository/BaseEntity.d.ts +32 -0
  537. package/browser/repository/BaseEntity.js +36 -0
  538. package/browser/repository/BaseEntity.js.map +1 -1
  539. package/browser/repository/MongoRepository.d.ts +39 -0
  540. package/browser/repository/MongoRepository.js +41 -2
  541. package/browser/repository/MongoRepository.js.map +1 -1
  542. package/browser/repository/Repository.d.ts +37 -1
  543. package/browser/repository/Repository.js +43 -2
  544. package/browser/repository/Repository.js.map +1 -1
  545. package/browser/repository/TreeRepository.d.ts +11 -0
  546. package/browser/repository/TreeRepository.js +12 -1
  547. package/browser/repository/TreeRepository.js.map +1 -1
  548. package/browser/schema-builder/RdbmsSchemaBuilder.d.ts +6 -4
  549. package/browser/schema-builder/RdbmsSchemaBuilder.js +10 -13
  550. package/browser/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
  551. package/browser/schema-builder/table/Table.d.ts +17 -0
  552. package/browser/schema-builder/table/Table.js +19 -2
  553. package/browser/schema-builder/table/Table.js.map +1 -1
  554. package/browser/schema-builder/table/TableCheck.d.ts +1 -0
  555. package/browser/schema-builder/table/TableCheck.js +1 -0
  556. package/browser/schema-builder/table/TableCheck.js.map +1 -1
  557. package/browser/schema-builder/table/TableColumn.js +7 -7
  558. package/browser/schema-builder/table/TableColumn.js.map +1 -1
  559. package/browser/schema-builder/table/TableExclusion.d.ts +1 -0
  560. package/browser/schema-builder/table/TableExclusion.js +1 -0
  561. package/browser/schema-builder/table/TableExclusion.js.map +1 -1
  562. package/browser/schema-builder/table/TableForeignKey.d.ts +1 -0
  563. package/browser/schema-builder/table/TableForeignKey.js +1 -0
  564. package/browser/schema-builder/table/TableForeignKey.js.map +1 -1
  565. package/browser/schema-builder/table/TableIndex.d.ts +1 -0
  566. package/browser/schema-builder/table/TableIndex.js +2 -1
  567. package/browser/schema-builder/table/TableIndex.js.map +1 -1
  568. package/browser/schema-builder/table/TableUnique.d.ts +1 -0
  569. package/browser/schema-builder/table/TableUnique.js +1 -0
  570. package/browser/schema-builder/table/TableUnique.js.map +1 -1
  571. package/browser/schema-builder/util/ViewUtils.d.ts +1 -0
  572. package/browser/schema-builder/util/ViewUtils.js +1 -0
  573. package/browser/schema-builder/util/ViewUtils.js.map +1 -1
  574. package/browser/schema-builder/view/View.d.ts +3 -0
  575. package/browser/schema-builder/view/View.js +3 -0
  576. package/browser/schema-builder/view/View.js.map +1 -1
  577. package/browser/subscriber/Broadcaster.d.ts +20 -0
  578. package/browser/subscriber/Broadcaster.js +25 -6
  579. package/browser/subscriber/Broadcaster.js.map +1 -1
  580. package/browser/subscriber/event/BaseEvent.d.ts +1 -0
  581. package/browser/subscriber/event/BaseEvent.js.map +1 -1
  582. package/browser/util/DateUtils.d.ts +15 -0
  583. package/browser/util/DateUtils.js +15 -0
  584. package/browser/util/DateUtils.js.map +1 -1
  585. package/browser/util/DepGraph.d.ts +10 -0
  586. package/browser/util/DepGraph.js +11 -0
  587. package/browser/util/DepGraph.js.map +1 -1
  588. package/browser/util/DirectoryExportedClassesLoader.d.ts +1 -0
  589. package/browser/util/DirectoryExportedClassesLoader.js +1 -0
  590. package/browser/util/DirectoryExportedClassesLoader.js.map +1 -1
  591. package/browser/util/ObjectUtils.d.ts +6 -0
  592. package/browser/util/ObjectUtils.js +4 -0
  593. package/browser/util/ObjectUtils.js.map +1 -1
  594. package/browser/util/OrmUtils.d.ts +14 -0
  595. package/browser/util/OrmUtils.js +18 -6
  596. package/browser/util/OrmUtils.js.map +1 -1
  597. package/browser/util/PathUtils.d.ts +2 -0
  598. package/browser/util/PathUtils.js +2 -0
  599. package/browser/util/PathUtils.js.map +1 -1
  600. package/browser/util/RandomGenerator.d.ts +2 -0
  601. package/browser/util/RandomGenerator.js +2 -0
  602. package/browser/util/RandomGenerator.js.map +1 -1
  603. package/browser/util/StringUtils.d.ts +11 -4
  604. package/browser/util/StringUtils.js +15 -7
  605. package/browser/util/StringUtils.js.map +1 -1
  606. package/browser/util/TreeRepositoryUtils.js +2 -2
  607. package/browser/util/TreeRepositoryUtils.js.map +1 -1
  608. package/cache/DbQueryResultCache.d.ts +7 -0
  609. package/cache/DbQueryResultCache.js +12 -4
  610. package/cache/DbQueryResultCache.js.map +1 -1
  611. package/cache/RedisQueryResultCache.d.ts +7 -0
  612. package/cache/RedisQueryResultCache.js +15 -10
  613. package/cache/RedisQueryResultCache.js.map +1 -1
  614. package/cli-ts-node-esm.js +2 -2
  615. package/cli-ts-node-esm.js.map +1 -1
  616. package/commands/CacheClearCommand.js +1 -1
  617. package/commands/CacheClearCommand.js.map +1 -1
  618. package/commands/CommandUtils.d.ts +4 -0
  619. package/commands/CommandUtils.js +4 -0
  620. package/commands/CommandUtils.js.map +1 -1
  621. package/commands/EntityCreateCommand.d.ts +1 -0
  622. package/commands/EntityCreateCommand.js +1 -0
  623. package/commands/EntityCreateCommand.js.map +1 -1
  624. package/commands/InitCommand.d.ts +10 -0
  625. package/commands/InitCommand.js +16 -9
  626. package/commands/InitCommand.js.map +1 -1
  627. package/commands/MigrationCreateCommand.d.ts +2 -0
  628. package/commands/MigrationCreateCommand.js +2 -0
  629. package/commands/MigrationCreateCommand.js.map +1 -1
  630. package/commands/MigrationGenerateCommand.d.ts +3 -0
  631. package/commands/MigrationGenerateCommand.js +4 -1
  632. package/commands/MigrationGenerateCommand.js.map +1 -1
  633. package/commands/MigrationRevertCommand.js +1 -1
  634. package/commands/MigrationRevertCommand.js.map +1 -1
  635. package/commands/MigrationRunCommand.js +1 -1
  636. package/commands/MigrationRunCommand.js.map +1 -1
  637. package/commands/MigrationShowCommand.js +1 -1
  638. package/commands/MigrationShowCommand.js.map +1 -1
  639. package/commands/QueryCommand.js +1 -1
  640. package/commands/QueryCommand.js.map +1 -1
  641. package/commands/SchemaDropCommand.js +1 -1
  642. package/commands/SchemaDropCommand.js.map +1 -1
  643. package/commands/SchemaSyncCommand.js +1 -1
  644. package/commands/SchemaSyncCommand.js.map +1 -1
  645. package/commands/SubscriberCreateCommand.d.ts +1 -0
  646. package/commands/SubscriberCreateCommand.js +1 -0
  647. package/commands/SubscriberCreateCommand.js.map +1 -1
  648. package/commands/VersionCommand.js +2 -2
  649. package/commands/VersionCommand.js.map +1 -1
  650. package/common/RelationType.d.ts +2 -0
  651. package/common/RelationType.js.map +1 -1
  652. package/connection/ConnectionMetadataBuilder.d.ts +3 -0
  653. package/connection/ConnectionMetadataBuilder.js +3 -0
  654. package/connection/ConnectionMetadataBuilder.js.map +1 -1
  655. package/connection/ConnectionOptionsReader.d.ts +5 -4
  656. package/connection/ConnectionOptionsReader.js +14 -12
  657. package/connection/ConnectionOptionsReader.js.map +1 -1
  658. package/data-source/BaseDataSourceOptions.d.ts +8 -0
  659. package/data-source/BaseDataSourceOptions.js.map +1 -1
  660. package/data-source/DataSource.d.ts +20 -1
  661. package/data-source/DataSource.js +37 -15
  662. package/data-source/DataSource.js.map +1 -1
  663. package/decorator/Check.d.ts +2 -0
  664. package/decorator/Check.js +2 -1
  665. package/decorator/Check.js.map +1 -1
  666. package/decorator/Exclusion.d.ts +2 -0
  667. package/decorator/Exclusion.js +1 -0
  668. package/decorator/Exclusion.js.map +1 -1
  669. package/decorator/ForeignKey.d.ts +3 -0
  670. package/decorator/ForeignKey.js +1 -0
  671. package/decorator/ForeignKey.js.map +1 -1
  672. package/decorator/Generated.d.ts +1 -0
  673. package/decorator/Generated.js +1 -0
  674. package/decorator/Generated.js.map +1 -1
  675. package/decorator/Index.d.ts +7 -0
  676. package/decorator/Index.js +13 -13
  677. package/decorator/Index.js.map +1 -1
  678. package/decorator/Unique.d.ts +4 -0
  679. package/decorator/Unique.js +6 -6
  680. package/decorator/Unique.js.map +1 -1
  681. package/decorator/columns/Column.d.ts +11 -0
  682. package/decorator/columns/Column.js +3 -3
  683. package/decorator/columns/Column.js.map +1 -1
  684. package/decorator/columns/CreateDateColumn.d.ts +1 -0
  685. package/decorator/columns/CreateDateColumn.js +2 -1
  686. package/decorator/columns/CreateDateColumn.js.map +1 -1
  687. package/decorator/columns/DeleteDateColumn.d.ts +1 -0
  688. package/decorator/columns/DeleteDateColumn.js +2 -1
  689. package/decorator/columns/DeleteDateColumn.js.map +1 -1
  690. package/decorator/columns/ObjectIdColumn.d.ts +1 -0
  691. package/decorator/columns/ObjectIdColumn.js +3 -4
  692. package/decorator/columns/ObjectIdColumn.js.map +1 -1
  693. package/decorator/columns/PrimaryColumn.d.ts +2 -0
  694. package/decorator/columns/PrimaryColumn.js +2 -2
  695. package/decorator/columns/PrimaryColumn.js.map +1 -1
  696. package/decorator/columns/PrimaryGeneratedColumn.d.ts +4 -0
  697. package/decorator/columns/PrimaryGeneratedColumn.js +1 -0
  698. package/decorator/columns/PrimaryGeneratedColumn.js.map +1 -1
  699. package/decorator/columns/UpdateDateColumn.d.ts +1 -0
  700. package/decorator/columns/UpdateDateColumn.js +2 -1
  701. package/decorator/columns/UpdateDateColumn.js.map +1 -1
  702. package/decorator/columns/VersionColumn.d.ts +1 -0
  703. package/decorator/columns/VersionColumn.js +2 -1
  704. package/decorator/columns/VersionColumn.js.map +1 -1
  705. package/decorator/columns/ViewColumn.d.ts +1 -0
  706. package/decorator/columns/ViewColumn.js +2 -1
  707. package/decorator/columns/ViewColumn.js.map +1 -1
  708. package/decorator/columns/VirtualColumn.d.ts +2 -0
  709. package/decorator/columns/VirtualColumn.js +1 -0
  710. package/decorator/columns/VirtualColumn.js.map +1 -1
  711. package/decorator/entity/ChildEntity.d.ts +1 -0
  712. package/decorator/entity/ChildEntity.js +1 -0
  713. package/decorator/entity/ChildEntity.js.map +1 -1
  714. package/decorator/entity/Entity.d.ts +2 -0
  715. package/decorator/entity/Entity.js +7 -6
  716. package/decorator/entity/Entity.js.map +1 -1
  717. package/decorator/entity/TableInheritance.d.ts +1 -0
  718. package/decorator/entity/TableInheritance.js +3 -2
  719. package/decorator/entity/TableInheritance.js.map +1 -1
  720. package/decorator/entity-view/ViewEntity.d.ts +2 -0
  721. package/decorator/entity-view/ViewEntity.js +4 -3
  722. package/decorator/entity-view/ViewEntity.js.map +1 -1
  723. package/decorator/options/ColumnOptions.d.ts +3 -0
  724. package/decorator/options/ColumnOptions.js.map +1 -1
  725. package/decorator/options/EntityOptions.d.ts +1 -0
  726. package/decorator/options/EntityOptions.js.map +1 -1
  727. package/decorator/options/RelationOptions.d.ts +2 -0
  728. package/decorator/options/RelationOptions.js.map +1 -1
  729. package/decorator/options/VirtualColumnOptions.d.ts +1 -0
  730. package/decorator/options/VirtualColumnOptions.js.map +1 -1
  731. package/decorator/relations/JoinColumn.d.ts +2 -0
  732. package/decorator/relations/JoinColumn.js +2 -1
  733. package/decorator/relations/JoinColumn.js.map +1 -1
  734. package/decorator/relations/JoinTable.d.ts +2 -0
  735. package/decorator/relations/JoinTable.js +5 -4
  736. package/decorator/relations/JoinTable.js.map +1 -1
  737. package/decorator/relations/ManyToMany.d.ts +2 -0
  738. package/decorator/relations/ManyToMany.js +2 -2
  739. package/decorator/relations/ManyToMany.js.map +1 -1
  740. package/decorator/relations/ManyToOne.d.ts +2 -0
  741. package/decorator/relations/ManyToOne.js +3 -3
  742. package/decorator/relations/ManyToOne.js.map +1 -1
  743. package/decorator/relations/OneToMany.d.ts +1 -0
  744. package/decorator/relations/OneToMany.js +3 -3
  745. package/decorator/relations/OneToMany.js.map +1 -1
  746. package/decorator/relations/OneToOne.d.ts +2 -0
  747. package/decorator/relations/OneToOne.js +3 -3
  748. package/decorator/relations/OneToOne.js.map +1 -1
  749. package/decorator/relations/RelationId.d.ts +1 -0
  750. package/decorator/relations/RelationId.js +1 -0
  751. package/decorator/relations/RelationId.js.map +1 -1
  752. package/decorator/tree/Tree.d.ts +1 -0
  753. package/decorator/tree/Tree.js +1 -0
  754. package/decorator/tree/Tree.js.map +1 -1
  755. package/decorator/tree/TreeChildren.d.ts +1 -0
  756. package/decorator/tree/TreeChildren.js +3 -3
  757. package/decorator/tree/TreeChildren.js.map +1 -1
  758. package/decorator/tree/TreeParent.d.ts +1 -0
  759. package/decorator/tree/TreeParent.js +3 -3
  760. package/decorator/tree/TreeParent.js.map +1 -1
  761. package/driver/Driver.d.ts +5 -0
  762. package/driver/Driver.js.map +1 -1
  763. package/driver/DriverFactory.d.ts +1 -0
  764. package/driver/DriverFactory.js +1 -0
  765. package/driver/DriverFactory.js.map +1 -1
  766. package/driver/DriverUtils.d.ts +7 -0
  767. package/driver/DriverUtils.js +34 -21
  768. package/driver/DriverUtils.js.map +1 -1
  769. package/driver/aurora-mysql/AuroraMysqlConnectionCredentialsOptions.d.ts +1 -0
  770. package/driver/aurora-mysql/AuroraMysqlConnectionCredentialsOptions.js.map +1 -1
  771. package/driver/aurora-mysql/AuroraMysqlDataSourceOptions.d.ts +1 -0
  772. package/driver/aurora-mysql/AuroraMysqlDataSourceOptions.js.map +1 -1
  773. package/driver/aurora-mysql/AuroraMysqlDriver.d.ts +37 -0
  774. package/driver/aurora-mysql/AuroraMysqlDriver.js +53 -16
  775. package/driver/aurora-mysql/AuroraMysqlDriver.js.map +1 -1
  776. package/driver/aurora-mysql/AuroraMysqlQueryRunner.d.ts +64 -0
  777. package/driver/aurora-mysql/AuroraMysqlQueryRunner.js +90 -30
  778. package/driver/aurora-mysql/AuroraMysqlQueryRunner.js.map +1 -1
  779. package/driver/aurora-postgres/AuroraPostgresDriver.d.ts +13 -0
  780. package/driver/aurora-postgres/AuroraPostgresDriver.js +26 -5
  781. package/driver/aurora-postgres/AuroraPostgresDriver.js.map +1 -1
  782. package/driver/aurora-postgres/AuroraPostgresQueryRunner.d.ts +3 -0
  783. package/driver/aurora-postgres/AuroraPostgresQueryRunner.js +27 -1
  784. package/driver/aurora-postgres/AuroraPostgresQueryRunner.js.map +1 -1
  785. package/driver/better-sqlite3/BetterSqlite3DataSourceOptions.d.ts +1 -0
  786. package/driver/better-sqlite3/BetterSqlite3DataSourceOptions.js.map +1 -1
  787. package/driver/better-sqlite3/BetterSqlite3Driver.d.ts +3 -0
  788. package/driver/better-sqlite3/BetterSqlite3Driver.js +5 -3
  789. package/driver/better-sqlite3/BetterSqlite3Driver.js.map +1 -1
  790. package/driver/better-sqlite3/BetterSqlite3QueryRunner.d.ts +1 -0
  791. package/driver/better-sqlite3/BetterSqlite3QueryRunner.js +1 -0
  792. package/driver/better-sqlite3/BetterSqlite3QueryRunner.js.map +1 -1
  793. package/driver/capacitor/CapacitorDriver.d.ts +1 -0
  794. package/driver/capacitor/CapacitorDriver.js +3 -3
  795. package/driver/capacitor/CapacitorDriver.js.map +1 -1
  796. package/driver/capacitor/CapacitorQueryRunner.d.ts +2 -0
  797. package/driver/capacitor/CapacitorQueryRunner.js +4 -2
  798. package/driver/capacitor/CapacitorQueryRunner.js.map +1 -1
  799. package/driver/cockroachdb/CockroachDataSourceOptions.d.ts +1 -0
  800. package/driver/cockroachdb/CockroachDataSourceOptions.js.map +1 -1
  801. package/driver/cockroachdb/CockroachDriver.d.ts +35 -0
  802. package/driver/cockroachdb/CockroachDriver.js +64 -29
  803. package/driver/cockroachdb/CockroachDriver.js.map +1 -1
  804. package/driver/cockroachdb/CockroachQueryRunner.d.ts +74 -0
  805. package/driver/cockroachdb/CockroachQueryRunner.js +143 -119
  806. package/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  807. package/driver/cordova/CordovaDriver.d.ts +6 -0
  808. package/driver/cordova/CordovaDriver.js +14 -4
  809. package/driver/cordova/CordovaDriver.js.map +1 -1
  810. package/driver/cordova/CordovaQueryRunner.d.ts +2 -0
  811. package/driver/cordova/CordovaQueryRunner.js +3 -1
  812. package/driver/cordova/CordovaQueryRunner.js.map +1 -1
  813. package/driver/expo/ExpoDriver.js +1 -2
  814. package/driver/expo/ExpoDriver.js.map +1 -1
  815. package/driver/mongodb/MongoDriver.d.ts +25 -0
  816. package/driver/mongodb/MongoDriver.js +35 -6
  817. package/driver/mongodb/MongoDriver.js.map +1 -1
  818. package/driver/mongodb/MongoQueryRunner.d.ts +84 -0
  819. package/driver/mongodb/MongoQueryRunner.js +102 -18
  820. package/driver/mongodb/MongoQueryRunner.js.map +1 -1
  821. package/driver/mongodb/bson.typings.d.ts +1 -0
  822. package/driver/mongodb/bson.typings.js.map +1 -1
  823. package/driver/mysql/MysqlConnectionCredentialsOptions.d.ts +1 -0
  824. package/driver/mysql/MysqlConnectionCredentialsOptions.js.map +1 -1
  825. package/driver/mysql/MysqlDataSourceOptions.d.ts +2 -0
  826. package/driver/mysql/MysqlDataSourceOptions.js.map +1 -1
  827. package/driver/mysql/MysqlDriver.d.ts +37 -0
  828. package/driver/mysql/MysqlDriver.js +57 -17
  829. package/driver/mysql/MysqlDriver.js.map +1 -1
  830. package/driver/mysql/MysqlQueryRunner.d.ts +64 -0
  831. package/driver/mysql/MysqlQueryRunner.js +140 -111
  832. package/driver/mysql/MysqlQueryRunner.js.map +1 -1
  833. package/driver/nativescript/NativescriptDriver.d.ts +1 -0
  834. package/driver/nativescript/NativescriptDriver.js +3 -4
  835. package/driver/nativescript/NativescriptDriver.js.map +1 -1
  836. package/driver/nativescript/NativescriptQueryRunner.d.ts +2 -0
  837. package/driver/nativescript/NativescriptQueryRunner.js +3 -1
  838. package/driver/nativescript/NativescriptQueryRunner.js.map +1 -1
  839. package/driver/oracle/OracleDriver.d.ts +32 -0
  840. package/driver/oracle/OracleDriver.js +48 -15
  841. package/driver/oracle/OracleDriver.js.map +1 -1
  842. package/driver/oracle/OracleQueryRunner.d.ts +66 -0
  843. package/driver/oracle/OracleQueryRunner.js +119 -83
  844. package/driver/oracle/OracleQueryRunner.js.map +1 -1
  845. package/driver/postgres/PostgresDataSourceOptions.d.ts +2 -0
  846. package/driver/postgres/PostgresDataSourceOptions.js.map +1 -1
  847. package/driver/postgres/PostgresDriver.d.ts +37 -0
  848. package/driver/postgres/PostgresDriver.js +67 -31
  849. package/driver/postgres/PostgresDriver.js.map +1 -1
  850. package/driver/postgres/PostgresQueryRunner.d.ts +81 -0
  851. package/driver/postgres/PostgresQueryRunner.js +152 -121
  852. package/driver/postgres/PostgresQueryRunner.js.map +1 -1
  853. package/driver/react-native/ReactNativeDriver.d.ts +29 -0
  854. package/driver/react-native/ReactNativeDriver.js +45 -12
  855. package/driver/react-native/ReactNativeDriver.js.map +1 -1
  856. package/driver/react-native/ReactNativeQueryRunner.d.ts +2 -0
  857. package/driver/react-native/ReactNativeQueryRunner.js +3 -1
  858. package/driver/react-native/ReactNativeQueryRunner.js.map +1 -1
  859. package/driver/sap/SapDataSourceOptions.d.ts +1 -0
  860. package/driver/sap/SapDataSourceOptions.js.map +1 -1
  861. package/driver/sap/SapDriver.d.ts +30 -0
  862. package/driver/sap/SapDriver.js +45 -11
  863. package/driver/sap/SapDriver.js.map +1 -1
  864. package/driver/sap/SapQueryRunner.d.ts +66 -0
  865. package/driver/sap/SapQueryRunner.js +101 -56
  866. package/driver/sap/SapQueryRunner.js.map +1 -1
  867. package/driver/spanner/SpannerDataSourceOptions.d.ts +1 -0
  868. package/driver/spanner/SpannerDataSourceOptions.js.map +1 -1
  869. package/driver/spanner/SpannerDriver.d.ts +33 -0
  870. package/driver/spanner/SpannerDriver.js +50 -10
  871. package/driver/spanner/SpannerDriver.js.map +1 -1
  872. package/driver/spanner/SpannerQueryRunner.d.ts +64 -0
  873. package/driver/spanner/SpannerQueryRunner.js +89 -32
  874. package/driver/spanner/SpannerQueryRunner.js.map +1 -1
  875. package/driver/sqlite-abstract/AbstractSqliteDriver.d.ts +30 -0
  876. package/driver/sqlite-abstract/AbstractSqliteDriver.js +43 -77
  877. package/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
  878. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.d.ts +59 -0
  879. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +89 -45
  880. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  881. package/driver/sqljs/SqljsDriver.d.ts +5 -0
  882. package/driver/sqljs/SqljsDriver.js +8 -4
  883. package/driver/sqljs/SqljsDriver.js.map +1 -1
  884. package/driver/sqljs/SqljsQueryRunner.d.ts +1 -0
  885. package/driver/sqljs/SqljsQueryRunner.js +1 -0
  886. package/driver/sqljs/SqljsQueryRunner.js.map +1 -1
  887. package/driver/sqlserver/MssqlParameter.d.ts +1 -0
  888. package/driver/sqlserver/MssqlParameter.js +1 -0
  889. package/driver/sqlserver/MssqlParameter.js.map +1 -1
  890. package/driver/sqlserver/SqlServerDataSourceOptions.d.ts +14 -5
  891. package/driver/sqlserver/SqlServerDataSourceOptions.js.map +1 -1
  892. package/driver/sqlserver/SqlServerDriver.d.ts +42 -0
  893. package/driver/sqlserver/SqlServerDriver.js +100 -26
  894. package/driver/sqlserver/SqlServerDriver.js.map +1 -1
  895. package/driver/sqlserver/SqlServerQueryRunner.d.ts +76 -10
  896. package/driver/sqlserver/SqlServerQueryRunner.js +160 -163
  897. package/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  898. package/driver/types/IsolationLevel.d.ts +2 -1
  899. package/driver/types/IsolationLevel.js +8 -0
  900. package/driver/types/IsolationLevel.js.map +1 -1
  901. package/driver/validate-isolation-level.d.ts +9 -0
  902. package/driver/validate-isolation-level.js +23 -0
  903. package/driver/validate-isolation-level.js.map +1 -0
  904. package/entity-manager/EntityManager.d.ts +38 -1
  905. package/entity-manager/EntityManager.js +58 -12
  906. package/entity-manager/EntityManager.js.map +1 -1
  907. package/entity-manager/EntityManagerFactory.d.ts +1 -0
  908. package/entity-manager/EntityManagerFactory.js +1 -0
  909. package/entity-manager/EntityManagerFactory.js.map +1 -1
  910. package/entity-manager/MongoEntityManager.d.ts +54 -1
  911. package/entity-manager/MongoEntityManager.js +103 -12
  912. package/entity-manager/MongoEntityManager.js.map +1 -1
  913. package/entity-manager/SqljsEntityManager.d.ts +2 -0
  914. package/entity-manager/SqljsEntityManager.js +2 -0
  915. package/entity-manager/SqljsEntityManager.js.map +1 -1
  916. package/entity-schema/EntitySchemaColumnOptions.d.ts +1 -0
  917. package/entity-schema/EntitySchemaColumnOptions.js.map +1 -1
  918. package/entity-schema/EntitySchemaOptions.d.ts +1 -0
  919. package/entity-schema/EntitySchemaOptions.js.map +1 -1
  920. package/entity-schema/EntitySchemaTransformer.d.ts +1 -0
  921. package/entity-schema/EntitySchemaTransformer.js +25 -26
  922. package/entity-schema/EntitySchemaTransformer.js.map +1 -1
  923. package/error/InitializedRelationError.d.ts +1 -0
  924. package/error/InitializedRelationError.js +1 -0
  925. package/error/InitializedRelationError.js.map +1 -1
  926. package/find-options/FindOptionsUtils.d.ts +7 -0
  927. package/find-options/FindOptionsUtils.js +7 -0
  928. package/find-options/FindOptionsUtils.js.map +1 -1
  929. package/find-options/OrderByCondition.d.ts +2 -1
  930. package/find-options/OrderByCondition.js.map +1 -1
  931. package/find-options/operator/Any.d.ts +4 -1
  932. package/find-options/operator/Any.js +4 -1
  933. package/find-options/operator/Any.js.map +1 -1
  934. package/find-options/operator/ArrayContainedBy.d.ts +4 -1
  935. package/find-options/operator/ArrayContainedBy.js +4 -1
  936. package/find-options/operator/ArrayContainedBy.js.map +1 -1
  937. package/find-options/operator/ArrayContains.d.ts +4 -1
  938. package/find-options/operator/ArrayContains.js +4 -1
  939. package/find-options/operator/ArrayContains.js.map +1 -1
  940. package/find-options/operator/ArrayOverlap.d.ts +4 -1
  941. package/find-options/operator/ArrayOverlap.js +4 -1
  942. package/find-options/operator/ArrayOverlap.js.map +1 -1
  943. package/find-options/operator/Between.d.ts +4 -1
  944. package/find-options/operator/Between.js +4 -1
  945. package/find-options/operator/Between.js.map +1 -1
  946. package/find-options/operator/Equal.d.ts +6 -3
  947. package/find-options/operator/Equal.js +6 -3
  948. package/find-options/operator/Equal.js.map +1 -1
  949. package/find-options/operator/ILike.d.ts +4 -1
  950. package/find-options/operator/ILike.js +4 -1
  951. package/find-options/operator/ILike.js.map +1 -1
  952. package/find-options/operator/In.d.ts +4 -1
  953. package/find-options/operator/In.js +4 -1
  954. package/find-options/operator/In.js.map +1 -1
  955. package/find-options/operator/IsNull.d.ts +4 -1
  956. package/find-options/operator/IsNull.js +4 -1
  957. package/find-options/operator/IsNull.js.map +1 -1
  958. package/find-options/operator/JsonContains.d.ts +4 -1
  959. package/find-options/operator/JsonContains.js +4 -1
  960. package/find-options/operator/JsonContains.js.map +1 -1
  961. package/find-options/operator/LessThan.d.ts +4 -1
  962. package/find-options/operator/LessThan.js +4 -1
  963. package/find-options/operator/LessThan.js.map +1 -1
  964. package/find-options/operator/LessThanOrEqual.d.ts +4 -1
  965. package/find-options/operator/LessThanOrEqual.js +4 -1
  966. package/find-options/operator/LessThanOrEqual.js.map +1 -1
  967. package/find-options/operator/Like.d.ts +4 -1
  968. package/find-options/operator/Like.js +4 -1
  969. package/find-options/operator/Like.js.map +1 -1
  970. package/find-options/operator/MoreThan.d.ts +4 -1
  971. package/find-options/operator/MoreThan.js +4 -1
  972. package/find-options/operator/MoreThan.js.map +1 -1
  973. package/find-options/operator/MoreThanOrEqual.d.ts +4 -1
  974. package/find-options/operator/MoreThanOrEqual.js +4 -1
  975. package/find-options/operator/MoreThanOrEqual.js.map +1 -1
  976. package/find-options/operator/Not.d.ts +4 -1
  977. package/find-options/operator/Not.js +4 -1
  978. package/find-options/operator/Not.js.map +1 -1
  979. package/find-options/operator/Raw.d.ts +12 -3
  980. package/find-options/operator/Raw.js.map +1 -1
  981. package/globals.js +1 -2
  982. package/globals.js.map +1 -1
  983. package/logger/AbstractLogger.d.ts +9 -0
  984. package/logger/AbstractLogger.js +10 -2
  985. package/logger/AbstractLogger.js.map +1 -1
  986. package/logger/AdvancedConsoleLogger.d.ts +1 -0
  987. package/logger/AdvancedConsoleLogger.js +1 -0
  988. package/logger/AdvancedConsoleLogger.js.map +1 -1
  989. package/logger/DebugLogger.d.ts +2 -0
  990. package/logger/DebugLogger.js +3 -1
  991. package/logger/DebugLogger.js.map +1 -1
  992. package/logger/FileLogger.d.ts +13 -2
  993. package/logger/FileLogger.js +4 -5
  994. package/logger/FileLogger.js.map +1 -1
  995. package/logger/FormattedConsoleLogger.d.ts +1 -0
  996. package/logger/FormattedConsoleLogger.js +1 -0
  997. package/logger/FormattedConsoleLogger.js.map +1 -1
  998. package/logger/LoggerFactory.d.ts +1 -0
  999. package/logger/LoggerFactory.js +1 -0
  1000. package/logger/LoggerFactory.js.map +1 -1
  1001. package/logger/LoggerOptions.d.ts +0 -9
  1002. package/logger/LoggerOptions.js.map +1 -1
  1003. package/logger/SimpleConsoleLogger.d.ts +1 -0
  1004. package/logger/SimpleConsoleLogger.js +1 -0
  1005. package/logger/SimpleConsoleLogger.js.map +1 -1
  1006. package/metadata/CheckMetadata.d.ts +1 -0
  1007. package/metadata/CheckMetadata.js +4 -3
  1008. package/metadata/CheckMetadata.js.map +1 -1
  1009. package/metadata/ColumnMetadata.d.ts +8 -5
  1010. package/metadata/ColumnMetadata.js +17 -25
  1011. package/metadata/ColumnMetadata.js.map +1 -1
  1012. package/metadata/EmbeddedMetadata.d.ts +1 -0
  1013. package/metadata/EmbeddedMetadata.js +1 -0
  1014. package/metadata/EmbeddedMetadata.js.map +1 -1
  1015. package/metadata/EntityListenerMetadata.d.ts +3 -0
  1016. package/metadata/EntityListenerMetadata.js +3 -0
  1017. package/metadata/EntityListenerMetadata.js.map +1 -1
  1018. package/metadata/EntityMetadata.d.ts +25 -5
  1019. package/metadata/EntityMetadata.js +32 -12
  1020. package/metadata/EntityMetadata.js.map +1 -1
  1021. package/metadata/ExclusionMetadata.d.ts +1 -0
  1022. package/metadata/ExclusionMetadata.js +4 -3
  1023. package/metadata/ExclusionMetadata.js.map +1 -1
  1024. package/metadata/ForeignKeyMetadata.d.ts +1 -0
  1025. package/metadata/ForeignKeyMetadata.js +6 -5
  1026. package/metadata/ForeignKeyMetadata.js.map +1 -1
  1027. package/metadata/IndexMetadata.d.ts +1 -0
  1028. package/metadata/IndexMetadata.js +4 -3
  1029. package/metadata/IndexMetadata.js.map +1 -1
  1030. package/metadata/RelationIdMetadata.d.ts +1 -0
  1031. package/metadata/RelationIdMetadata.js +1 -0
  1032. package/metadata/RelationIdMetadata.js.map +1 -1
  1033. package/metadata/RelationMetadata.d.ts +8 -0
  1034. package/metadata/RelationMetadata.js +15 -15
  1035. package/metadata/RelationMetadata.js.map +1 -1
  1036. package/metadata/UniqueMetadata.d.ts +1 -0
  1037. package/metadata/UniqueMetadata.js +4 -3
  1038. package/metadata/UniqueMetadata.js.map +1 -1
  1039. package/metadata-args/MetadataArgsStorage.d.ts +4 -0
  1040. package/metadata-args/MetadataArgsStorage.js +4 -0
  1041. package/metadata-args/MetadataArgsStorage.js.map +1 -1
  1042. package/metadata-builder/ClosureJunctionEntityMetadataBuilder.d.ts +1 -0
  1043. package/metadata-builder/ClosureJunctionEntityMetadataBuilder.js +7 -11
  1044. package/metadata-builder/ClosureJunctionEntityMetadataBuilder.js.map +1 -1
  1045. package/metadata-builder/EntityMetadataBuilder.d.ts +7 -0
  1046. package/metadata-builder/EntityMetadataBuilder.js +11 -6
  1047. package/metadata-builder/EntityMetadataBuilder.js.map +1 -1
  1048. package/metadata-builder/EntityMetadataValidator.d.ts +4 -0
  1049. package/metadata-builder/EntityMetadataValidator.js +6 -43
  1050. package/metadata-builder/EntityMetadataValidator.js.map +1 -1
  1051. package/metadata-builder/JunctionEntityMetadataBuilder.d.ts +3 -0
  1052. package/metadata-builder/JunctionEntityMetadataBuilder.js +39 -20
  1053. package/metadata-builder/JunctionEntityMetadataBuilder.js.map +1 -1
  1054. package/metadata-builder/MetadataUtils.d.ts +3 -0
  1055. package/metadata-builder/MetadataUtils.js +4 -1
  1056. package/metadata-builder/MetadataUtils.js.map +1 -1
  1057. package/metadata-builder/RelationJoinColumnBuilder.d.ts +3 -0
  1058. package/metadata-builder/RelationJoinColumnBuilder.js +17 -1
  1059. package/metadata-builder/RelationJoinColumnBuilder.js.map +1 -1
  1060. package/migration/MigrationExecutor.d.ts +9 -0
  1061. package/migration/MigrationExecutor.js +16 -7
  1062. package/migration/MigrationExecutor.js.map +1 -1
  1063. package/naming-strategy/DefaultNamingStrategy.d.ts +3 -0
  1064. package/naming-strategy/DefaultNamingStrategy.js +13 -10
  1065. package/naming-strategy/DefaultNamingStrategy.js.map +1 -1
  1066. package/naming-strategy/NamingStrategyInterface.d.ts +2 -0
  1067. package/naming-strategy/NamingStrategyInterface.js.map +1 -1
  1068. package/package.json +6 -2
  1069. package/persistence/EntityPersistExecutor.js +2 -4
  1070. package/persistence/EntityPersistExecutor.js.map +1 -1
  1071. package/persistence/Subject.js +4 -6
  1072. package/persistence/Subject.js.map +1 -1
  1073. package/persistence/SubjectChangedColumnsComputer.d.ts +3 -0
  1074. package/persistence/SubjectChangedColumnsComputer.js +3 -0
  1075. package/persistence/SubjectChangedColumnsComputer.js.map +1 -1
  1076. package/persistence/SubjectDatabaseEntityLoader.d.ts +1 -0
  1077. package/persistence/SubjectDatabaseEntityLoader.js +3 -1
  1078. package/persistence/SubjectDatabaseEntityLoader.js.map +1 -1
  1079. package/persistence/SubjectExecutor.d.ts +2 -0
  1080. package/persistence/SubjectExecutor.js +15 -27
  1081. package/persistence/SubjectExecutor.js.map +1 -1
  1082. package/persistence/SubjectTopologicalSorter.d.ts +4 -0
  1083. package/persistence/SubjectTopologicalSorter.js +4 -0
  1084. package/persistence/SubjectTopologicalSorter.js.map +1 -1
  1085. package/persistence/subject-builder/CascadesSubjectBuilder.d.ts +2 -0
  1086. package/persistence/subject-builder/CascadesSubjectBuilder.js +37 -11
  1087. package/persistence/subject-builder/CascadesSubjectBuilder.js.map +1 -1
  1088. package/persistence/subject-builder/ManyToManySubjectBuilder.d.ts +11 -8
  1089. package/persistence/subject-builder/ManyToManySubjectBuilder.js +15 -13
  1090. package/persistence/subject-builder/ManyToManySubjectBuilder.js.map +1 -1
  1091. package/persistence/subject-builder/OneToManySubjectBuilder.d.ts +9 -10
  1092. package/persistence/subject-builder/OneToManySubjectBuilder.js +30 -24
  1093. package/persistence/subject-builder/OneToManySubjectBuilder.js.map +1 -1
  1094. package/persistence/subject-builder/OneToOneInverseSideSubjectBuilder.d.ts +9 -10
  1095. package/persistence/subject-builder/OneToOneInverseSideSubjectBuilder.js +9 -10
  1096. package/persistence/subject-builder/OneToOneInverseSideSubjectBuilder.js.map +1 -1
  1097. package/persistence/tree/ClosureSubjectExecutor.d.ts +4 -0
  1098. package/persistence/tree/ClosureSubjectExecutor.js +10 -8
  1099. package/persistence/tree/ClosureSubjectExecutor.js.map +1 -1
  1100. package/persistence/tree/MaterializedPathSubjectExecutor.d.ts +2 -0
  1101. package/persistence/tree/MaterializedPathSubjectExecutor.js +8 -6
  1102. package/persistence/tree/MaterializedPathSubjectExecutor.js.map +1 -1
  1103. package/persistence/tree/NestedSetSubjectExecutor.d.ts +5 -0
  1104. package/persistence/tree/NestedSetSubjectExecutor.js +10 -5
  1105. package/persistence/tree/NestedSetSubjectExecutor.js.map +1 -1
  1106. package/platform/PlatformTools.d.ts +9 -0
  1107. package/platform/PlatformTools.js +10 -1
  1108. package/platform/PlatformTools.js.map +1 -1
  1109. package/query-builder/Alias.js +1 -1
  1110. package/query-builder/Alias.js.map +1 -1
  1111. package/query-builder/Brackets.d.ts +1 -0
  1112. package/query-builder/Brackets.js +1 -0
  1113. package/query-builder/Brackets.js.map +1 -1
  1114. package/query-builder/DeleteQueryBuilder.d.ts +7 -0
  1115. package/query-builder/DeleteQueryBuilder.js +9 -0
  1116. package/query-builder/DeleteQueryBuilder.js.map +1 -1
  1117. package/query-builder/InsertQueryBuilder.d.ts +9 -0
  1118. package/query-builder/InsertQueryBuilder.js +14 -8
  1119. package/query-builder/InsertQueryBuilder.js.map +1 -1
  1120. package/query-builder/JoinAttribute.js +3 -3
  1121. package/query-builder/JoinAttribute.js.map +1 -1
  1122. package/query-builder/QueryBuilder.d.ts +25 -4
  1123. package/query-builder/QueryBuilder.js +58 -15
  1124. package/query-builder/QueryBuilder.js.map +1 -1
  1125. package/query-builder/QueryBuilderUtils.d.ts +1 -0
  1126. package/query-builder/QueryBuilderUtils.js +1 -0
  1127. package/query-builder/QueryBuilderUtils.js.map +1 -1
  1128. package/query-builder/QueryExpressionMap.d.ts +5 -0
  1129. package/query-builder/QueryExpressionMap.js +4 -1
  1130. package/query-builder/QueryExpressionMap.js.map +1 -1
  1131. package/query-builder/RelationIdLoader.d.ts +6 -35
  1132. package/query-builder/RelationIdLoader.js +19 -43
  1133. package/query-builder/RelationIdLoader.js.map +1 -1
  1134. package/query-builder/RelationLoader.d.ts +11 -2
  1135. package/query-builder/RelationLoader.js +20 -17
  1136. package/query-builder/RelationLoader.js.map +1 -1
  1137. package/query-builder/RelationQueryBuilder.d.ts +5 -0
  1138. package/query-builder/RelationQueryBuilder.js +5 -0
  1139. package/query-builder/RelationQueryBuilder.js.map +1 -1
  1140. package/query-builder/RelationRemover.d.ts +1 -0
  1141. package/query-builder/RelationRemover.js +1 -0
  1142. package/query-builder/RelationRemover.js.map +1 -1
  1143. package/query-builder/RelationUpdater.d.ts +1 -0
  1144. package/query-builder/RelationUpdater.js +1 -0
  1145. package/query-builder/RelationUpdater.js.map +1 -1
  1146. package/query-builder/ReturningResultsEntityUpdator.d.ts +2 -0
  1147. package/query-builder/ReturningResultsEntityUpdator.js +3 -1
  1148. package/query-builder/ReturningResultsEntityUpdator.js.map +1 -1
  1149. package/query-builder/SelectQueryBuilder.d.ts +31 -8
  1150. package/query-builder/SelectQueryBuilder.js +98 -70
  1151. package/query-builder/SelectQueryBuilder.js.map +1 -1
  1152. package/query-builder/SoftDeleteQueryBuilder.d.ts +11 -0
  1153. package/query-builder/SoftDeleteQueryBuilder.js +17 -0
  1154. package/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
  1155. package/query-builder/UpdateQueryBuilder.d.ts +11 -0
  1156. package/query-builder/UpdateQueryBuilder.js +18 -1
  1157. package/query-builder/UpdateQueryBuilder.js.map +1 -1
  1158. package/query-builder/relation-id/RelationIdAttribute.js +5 -5
  1159. package/query-builder/relation-id/RelationIdAttribute.js.map +1 -1
  1160. package/query-builder/relation-id/RelationIdLoader.d.ts +2 -1
  1161. package/query-builder/relation-id/RelationIdLoader.js +6 -3
  1162. package/query-builder/relation-id/RelationIdLoader.js.map +1 -1
  1163. package/query-builder/transformer/DocumentToEntityTransformer.js +3 -16
  1164. package/query-builder/transformer/DocumentToEntityTransformer.js.map +1 -1
  1165. package/query-builder/transformer/PlainObjectToDatabaseEntityTransformer.js +2 -4
  1166. package/query-builder/transformer/PlainObjectToDatabaseEntityTransformer.js.map +1 -1
  1167. package/query-builder/transformer/PlainObjectToNewEntityTransformer.d.ts +1 -0
  1168. package/query-builder/transformer/PlainObjectToNewEntityTransformer.js +1 -0
  1169. package/query-builder/transformer/PlainObjectToNewEntityTransformer.js.map +1 -1
  1170. package/query-builder/transformer/RawSqlResultsToEntityTransformer.d.ts +6 -0
  1171. package/query-builder/transformer/RawSqlResultsToEntityTransformer.js +6 -7
  1172. package/query-builder/transformer/RawSqlResultsToEntityTransformer.js.map +1 -1
  1173. package/query-runner/BaseQueryRunner.d.ts +21 -1
  1174. package/query-runner/BaseQueryRunner.js +36 -49
  1175. package/query-runner/BaseQueryRunner.js.map +1 -1
  1176. package/query-runner/QueryRunner.d.ts +5 -1
  1177. package/query-runner/QueryRunner.js.map +1 -1
  1178. package/repository/BaseEntity.d.ts +32 -0
  1179. package/repository/BaseEntity.js +36 -0
  1180. package/repository/BaseEntity.js.map +1 -1
  1181. package/repository/MongoRepository.d.ts +39 -0
  1182. package/repository/MongoRepository.js +41 -2
  1183. package/repository/MongoRepository.js.map +1 -1
  1184. package/repository/Repository.d.ts +37 -1
  1185. package/repository/Repository.js +43 -2
  1186. package/repository/Repository.js.map +1 -1
  1187. package/repository/TreeRepository.d.ts +11 -0
  1188. package/repository/TreeRepository.js +12 -1
  1189. package/repository/TreeRepository.js.map +1 -1
  1190. package/schema-builder/RdbmsSchemaBuilder.d.ts +6 -4
  1191. package/schema-builder/RdbmsSchemaBuilder.js +10 -13
  1192. package/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
  1193. package/schema-builder/table/Table.d.ts +17 -0
  1194. package/schema-builder/table/Table.js +19 -2
  1195. package/schema-builder/table/Table.js.map +1 -1
  1196. package/schema-builder/table/TableCheck.d.ts +1 -0
  1197. package/schema-builder/table/TableCheck.js +1 -0
  1198. package/schema-builder/table/TableCheck.js.map +1 -1
  1199. package/schema-builder/table/TableColumn.js +7 -7
  1200. package/schema-builder/table/TableColumn.js.map +1 -1
  1201. package/schema-builder/table/TableExclusion.d.ts +1 -0
  1202. package/schema-builder/table/TableExclusion.js +1 -0
  1203. package/schema-builder/table/TableExclusion.js.map +1 -1
  1204. package/schema-builder/table/TableForeignKey.d.ts +1 -0
  1205. package/schema-builder/table/TableForeignKey.js +1 -0
  1206. package/schema-builder/table/TableForeignKey.js.map +1 -1
  1207. package/schema-builder/table/TableIndex.d.ts +1 -0
  1208. package/schema-builder/table/TableIndex.js +2 -1
  1209. package/schema-builder/table/TableIndex.js.map +1 -1
  1210. package/schema-builder/table/TableUnique.d.ts +1 -0
  1211. package/schema-builder/table/TableUnique.js +1 -0
  1212. package/schema-builder/table/TableUnique.js.map +1 -1
  1213. package/schema-builder/util/ViewUtils.d.ts +1 -0
  1214. package/schema-builder/util/ViewUtils.js +1 -0
  1215. package/schema-builder/util/ViewUtils.js.map +1 -1
  1216. package/schema-builder/view/View.d.ts +3 -0
  1217. package/schema-builder/view/View.js +3 -0
  1218. package/schema-builder/view/View.js.map +1 -1
  1219. package/subscriber/Broadcaster.d.ts +20 -0
  1220. package/subscriber/Broadcaster.js +25 -6
  1221. package/subscriber/Broadcaster.js.map +1 -1
  1222. package/subscriber/event/BaseEvent.d.ts +1 -0
  1223. package/subscriber/event/BaseEvent.js.map +1 -1
  1224. package/util/DateUtils.d.ts +15 -0
  1225. package/util/DateUtils.js +15 -0
  1226. package/util/DateUtils.js.map +1 -1
  1227. package/util/DepGraph.d.ts +10 -0
  1228. package/util/DepGraph.js +11 -0
  1229. package/util/DepGraph.js.map +1 -1
  1230. package/util/DirectoryExportedClassesLoader.d.ts +1 -0
  1231. package/util/DirectoryExportedClassesLoader.js +1 -0
  1232. package/util/DirectoryExportedClassesLoader.js.map +1 -1
  1233. package/util/ObjectUtils.d.ts +6 -0
  1234. package/util/ObjectUtils.js +4 -0
  1235. package/util/ObjectUtils.js.map +1 -1
  1236. package/util/OrmUtils.d.ts +14 -0
  1237. package/util/OrmUtils.js +18 -6
  1238. package/util/OrmUtils.js.map +1 -1
  1239. package/util/PathUtils.d.ts +2 -0
  1240. package/util/PathUtils.js +2 -0
  1241. package/util/PathUtils.js.map +1 -1
  1242. package/util/RandomGenerator.d.ts +2 -0
  1243. package/util/RandomGenerator.js +2 -0
  1244. package/util/RandomGenerator.js.map +1 -1
  1245. package/util/StringUtils.d.ts +11 -4
  1246. package/util/StringUtils.js +15 -7
  1247. package/util/StringUtils.js.map +1 -1
  1248. package/util/TreeRepositoryUtils.js +2 -2
  1249. package/util/TreeRepositoryUtils.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"SubjectTopologicalSorter.js","sourceRoot":"","sources":["../../../src/persistence/SubjectTopologicalSorter.ts"],"names":[],"mappings":";;;AAEA,oCAAuC;AAEvC;;;GAGG;AACH,MAAa,wBAAwB;IAejC,4EAA4E;IAC5E,cAAc;IACd,4EAA4E;IAE5E,YAAY,QAAmB;QAC3B,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAA,CAAC,kDAAkD;QAChF,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAC3D,CAAC;IAED,4EAA4E;IAC5E,iBAAiB;IACjB,4EAA4E;IAE5E;;;OAGG;IACH,IAAI,CAAC,SAA8B;QAC/B,uGAAuG;QACvG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC,QAAQ,CAAA;QAEhD,MAAM,cAAc,GAAc,EAAE,CAAA;QAEpC,sDAAsD;QACtD,wEAAwE;QACxE,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;YACzB,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CACzC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAC1D,CAAA;YACD,cAAc,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,CAAA;YACxC,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,CAAA;QAC9C,CAAC;QAED,8EAA8E;QAC9E,MAAM,uBAAuB,GAAG,IAAI,CAAC,0BAA0B,EAAE,CAAA;QACjE,IAAI,8BAA8B,GAAG,IAAI,CAAC,QAAQ,CAC9C,uBAAuB,CAC1B,CAAA;QACD,IAAI,SAAS,KAAK,QAAQ;YACtB,8BAA8B;gBAC1B,8BAA8B,CAAC,OAAO,EAAE,CAAA;QAEhD,qCAAqC;QACrC,0EAA0E;QAC1E,0EAA0E;QAC1E,8BAA8B,CAAC,OAAO,CAAC,CAAC,kBAAkB,EAAE,EAAE;YAC1D,MAAM,oBAAoB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAC7C,CAAC,OAAO,EAAE,EAAE,CACR,OAAO,CAAC,QAAQ,CAAC,UAAU,KAAK,kBAAkB;gBAClD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CACjC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,kBAAkB,CACvC,CACR,CAAA;YACD,cAAc,CAAC,IAAI,CAAC,GAAG,oBAAoB,CAAC,CAAA;YAC5C,IAAI,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,CAAA;QAClD,CAAC,CAAC,CAAA;QAEF,+BAA+B;QAC/B,mDAAmD;QACnD,MAAM,iBAAiB,GAAe,IAAI,CAAC,eAAe,EAAE,CAAA;QAC5D,IAAI,wBAAwB,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAA;QAC/D,IAAI,SAAS,KAAK,QAAQ;YACtB,wBAAwB,GAAG,wBAAwB,CAAC,OAAO,EAAE,CAAA;QAEjE,wBAAwB,CAAC,OAAO,CAAC,CAAC,kBAAkB,EAAE,EAAE;YACpD,MAAM,oBAAoB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAC7C,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,KAAK,kBAAkB,CAClE,CAAA;YACD,cAAc,CAAC,IAAI,CAAC,GAAG,oBAAoB,CAAC,CAAA;YAC5C,IAAI,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,CAAA;QAClD,CAAC,CAAC,CAAA;QAEF,6DAA6D;QAC7D,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAA;QACrC,OAAO,cAAc,CAAA;IACzB,CAAC;IAED,4EAA4E;IAC5E,oBAAoB;IACpB,4EAA4E;IAE5E;;;OAGG;IACO,mBAAmB,CAAC,QAAmB;QAC7C,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YACzB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAA;QAC3D,CAAC,CAAC,CAAA;IACN,CAAC;IAED;;;OAGG;IACO,kBAAkB,CAAC,QAAmB;QAC5C,MAAM,SAAS,GAAqB,EAAE,CAAA;QACtC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YACzB,IAAI,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAC1C,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;QACxC,CAAC,CAAC,CAAA;QACF,OAAO,SAAS,CAAA;IACpB,CAAC;IAED;;;OAGG;IACO,0BAA0B;QAChC,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,QAAQ,EAAE,EAAE;YACpD,QAAQ,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;gBACnD,IAAI,QAAQ,CAAC,UAAU;oBAAE,OAAM;gBAE/B,YAAY,CAAC,IAAI,CAAC;oBACd,QAAQ,CAAC,UAAU;oBACnB,QAAQ,CAAC,qBAAqB,CAAC,UAAU;iBAC5C,CAAC,CAAA;YACN,CAAC,CAAC,CAAA;YACF,OAAO,YAAY,CAAA;QACvB,CAAC,EAAE,EAAgB,CAAC,CAAA;IACxB,CAAC;IAED;;;OAGG;IACO,eAAe;QACrB,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE,QAAQ,EAAE,EAAE;YACpD,QAAQ,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;gBACnD,4CAA4C;gBAC5C,IAAI,QAAQ,CAAC,qBAAqB,KAAK,QAAQ;oBAAE,OAAM;gBAEvD,YAAY,CAAC,IAAI,CAAC;oBACd,QAAQ,CAAC,UAAU;oBACnB,QAAQ,CAAC,qBAAqB,CAAC,UAAU;iBAC5C,CAAC,CAAA;YACN,CAAC,CAAC,CAAA;YACF,OAAO,YAAY,CAAA;QACvB,CAAC,EAAE,EAAgB,CAAC,CAAA;IACxB,CAAC;IAED;;;;;OAKG;IACO,QAAQ,CAAC,KAAc;QAC7B;;;WAGG;QACH,SAAS,WAAW,CAAC,GAAU;YAC3B,MAAM,GAAG,GAAG,EAAE,CAAA;YACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7C,MAAM,IAAI,GAAQ,GAAG,CAAC,CAAC,CAAC,CAAA;gBACxB,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;oBAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;gBAC/C,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;oBAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;YACnD,CAAC;YACD,OAAO,GAAG,CAAA;QACd,CAAC;QAED,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,CAAA;QAChC,IAAI,MAAM,GAAG,KAAK,CAAC,MAAM,EACrB,CAAC,GAAG,MAAM,CAAA;QACd,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,EAC5B,OAAO,GAAG,IAAI,GAAG,EAAU,CAAA;QAE/B,OAAO,CAAC,EAAE,EAAE,CAAC;YACT,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAA;QAC/C,CAAC;QAED;;;;;WAKG;QACH,SAAS,KAAK,CAAC,IAAS,EAAE,CAAS,EAAE,YAAmB;YACpD,IAAI,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClC,MAAM,IAAI,oBAAY,CAClB,qBAAqB,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAC/C,CAAA,CAAC,qBAAqB;YAC3B,CAAC;YAED,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACxB,MAAM,IAAI,oBAAY,CAClB,8EAA8E;oBAC1E,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAC3B,CAAA;YACL,CAAC;YAED,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAE,OAAM;YAC1B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;YAEd,iBAAiB;YACjB,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,IAAI;gBACxC,OAAO,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAA;YAC3B,CAAC,CAAC,CAAA;YACF,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACxB,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;gBACvC,GAAG,CAAC;oBACA,MAAM,KAAK,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;oBAC9B,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAA;gBAC7C,CAAC,QAAQ,CAAC,EAAC;YACf,CAAC;YAED,MAAM,CAAC,EAAE,MAAM,CAAC,GAAG,IAAI,CAAA;QAC3B,CAAC;QAED,OAAO,MAAM,CAAA;IACjB,CAAC;CACJ;AAnOD,4DAmOC","sourcesContent":["import type { Subject } from \"./Subject\"\nimport type { EntityMetadata } from \"../metadata/EntityMetadata\"\nimport { TypeORMError } from \"../error\"\n\n/**\n * Orders insert or remove subjects in proper order (using topological sorting)\n * to make sure insert or remove operations are executed in a proper order.\n */\nexport class SubjectTopologicalSorter {\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n\n /**\n * Insert subjects needs to be sorted.\n */\n subjects: Subject[]\n\n /**\n * Unique list of entity metadatas of this subject.\n */\n metadatas: EntityMetadata[]\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(subjects: Subject[]) {\n this.subjects = [...subjects] // copy subjects to prevent changing of sent array\n this.metadatas = this.getUniqueMetadatas(this.subjects)\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Sorts (orders) subjects in their topological order.\n * @param direction\n */\n sort(direction: \"insert\" | \"delete\"): Subject[] {\n // if there are no metadatas it probably mean there is no subjects... we don't have to do anything here\n if (!this.metadatas.length) return this.subjects\n\n const sortedSubjects: Subject[] = []\n\n // first if we sort for deletion all junction subjects\n // junction subjects are subjects without entity and database entity set\n if (direction === \"delete\") {\n const junctionSubjects = this.subjects.filter(\n (subject) => !subject.entity && !subject.databaseEntity,\n )\n sortedSubjects.push(...junctionSubjects)\n this.removeAlreadySorted(junctionSubjects)\n }\n\n // next we always insert entities with non-nullable relations, sort them first\n const nonNullableDependencies = this.getNonNullableDependencies()\n let sortedNonNullableEntityTargets = this.toposort(\n nonNullableDependencies,\n )\n if (direction === \"insert\")\n sortedNonNullableEntityTargets =\n sortedNonNullableEntityTargets.reverse()\n\n // so we have a sorted entity targets\n // go thought each of them and find all subjects with sorted entity target\n // add those sorted targets and remove them from original array of targets\n sortedNonNullableEntityTargets.forEach((sortedEntityTarget) => {\n const entityTargetSubjects = this.subjects.filter(\n (subject) =>\n subject.metadata.targetName === sortedEntityTarget ||\n subject.metadata.inheritanceTree.some(\n (s) => s.name === sortedEntityTarget,\n ),\n )\n sortedSubjects.push(...entityTargetSubjects)\n this.removeAlreadySorted(entityTargetSubjects)\n })\n\n // next sort all other entities\n // same process as in above but with other entities\n const otherDependencies: string[][] = this.getDependencies()\n let sortedOtherEntityTargets = this.toposort(otherDependencies)\n if (direction === \"insert\")\n sortedOtherEntityTargets = sortedOtherEntityTargets.reverse()\n\n sortedOtherEntityTargets.forEach((sortedEntityTarget) => {\n const entityTargetSubjects = this.subjects.filter(\n (subject) => subject.metadata.targetName === sortedEntityTarget,\n )\n sortedSubjects.push(...entityTargetSubjects)\n this.removeAlreadySorted(entityTargetSubjects)\n })\n\n // if we have something left in the subjects add them as well\n sortedSubjects.push(...this.subjects)\n return sortedSubjects\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Removes already sorted subjects from this.subjects list of subjects.\n * @param subjects\n */\n protected removeAlreadySorted(subjects: Subject[]) {\n subjects.forEach((subject) => {\n this.subjects.splice(this.subjects.indexOf(subject), 1)\n })\n }\n\n /**\n * Extracts all unique metadatas from the given subjects.\n * @param subjects\n */\n protected getUniqueMetadatas(subjects: Subject[]) {\n const metadatas: EntityMetadata[] = []\n subjects.forEach((subject) => {\n if (metadatas.indexOf(subject.metadata) === -1)\n metadatas.push(subject.metadata)\n })\n return metadatas\n }\n\n /**\n * Gets dependency tree for all entity metadatas with non-nullable relations.\n * We need to execute insertions first for entities which non-nullable relations.\n */\n protected getNonNullableDependencies(): string[][] {\n return this.metadatas.reduce((dependencies, metadata) => {\n metadata.relationsWithJoinColumns.forEach((relation) => {\n if (relation.isNullable) return\n\n dependencies.push([\n metadata.targetName,\n relation.inverseEntityMetadata.targetName,\n ])\n })\n return dependencies\n }, [] as string[][])\n }\n\n /**\n * Gets dependency tree for all entity metadatas with non-nullable relations.\n * We need to execute insertions first for entities which non-nullable relations.\n */\n protected getDependencies(): string[][] {\n return this.metadatas.reduce((dependencies, metadata) => {\n metadata.relationsWithJoinColumns.forEach((relation) => {\n // if relation is self-referenced we skip it\n if (relation.inverseEntityMetadata === metadata) return\n\n dependencies.push([\n metadata.targetName,\n relation.inverseEntityMetadata.targetName,\n ])\n })\n return dependencies\n }, [] as string[][])\n }\n\n /**\n * Sorts given graph using topological sorting algorithm.\n *\n * Algorithm is kindly taken from https://github.com/marcelklehr/toposort repository.\n * @param edges\n */\n protected toposort(edges: any[][]) {\n /**\n *\n * @param arr\n */\n function uniqueNodes(arr: any[]) {\n const res = []\n for (let i = 0, len = arr.length; i < len; i++) {\n const edge: any = arr[i]\n if (res.indexOf(edge[0]) < 0) res.push(edge[0])\n if (res.indexOf(edge[1]) < 0) res.push(edge[1])\n }\n return res\n }\n\n const nodes = uniqueNodes(edges)\n let cursor = nodes.length,\n i = cursor\n const sorted = new Array(cursor),\n visited = new Set<number>()\n\n while (i--) {\n if (!visited.has(i)) visit(nodes[i], i, [])\n }\n\n /**\n *\n * @param node\n * @param i\n * @param predecessors\n */\n function visit(node: any, i: number, predecessors: any[]) {\n if (predecessors.indexOf(node) >= 0) {\n throw new TypeORMError(\n \"Cyclic dependency: \" + JSON.stringify(node),\n ) // todo: better error\n }\n\n if (!~nodes.indexOf(node)) {\n throw new TypeORMError(\n \"Found unknown node. Make sure to provided all involved nodes. Unknown node: \" +\n JSON.stringify(node),\n )\n }\n\n if (visited.has(i)) return\n visited.add(i)\n\n // outgoing edges\n const outgoing = edges.filter(function (edge) {\n return edge[0] === node\n })\n if ((i = outgoing.length)) {\n const preds = predecessors.concat(node)\n do {\n const child = outgoing[--i][1]\n visit(child, nodes.indexOf(child), preds)\n } while (i)\n }\n\n sorted[--cursor] = node\n }\n\n return sorted\n }\n}\n"]}
1
+ {"version":3,"file":"SubjectTopologicalSorter.js","sourceRoot":"","sources":["../../../src/persistence/SubjectTopologicalSorter.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Subject } from \"./Subject\"\nimport type { EntityMetadata } from \"../metadata/EntityMetadata\"\nimport { TypeORMError } from \"../error\"\n\n/**\n * Orders insert or remove subjects in proper order (using topological sorting)\n * to make sure insert or remove operations are executed in a proper order.\n */\nexport class SubjectTopologicalSorter {\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n\n /**\n * Insert subjects needs to be sorted.\n */\n subjects: Subject[]\n\n /**\n * Unique list of entity metadatas of this subject.\n */\n metadatas: EntityMetadata[]\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(subjects: Subject[]) {\n this.subjects = [...subjects] // copy subjects to prevent changing of sent array\n this.metadatas = this.getUniqueMetadatas(this.subjects)\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Sorts (orders) subjects in their topological order.\n *\n * @param direction\n */\n sort(direction: \"insert\" | \"delete\"): Subject[] {\n // if there are no metadatas it probably mean there is no subjects... we don't have to do anything here\n if (!this.metadatas.length) return this.subjects\n\n const sortedSubjects: Subject[] = []\n\n // first if we sort for deletion all junction subjects\n // junction subjects are subjects without entity and database entity set\n if (direction === \"delete\") {\n const junctionSubjects = this.subjects.filter(\n (subject) => !subject.entity && !subject.databaseEntity,\n )\n sortedSubjects.push(...junctionSubjects)\n this.removeAlreadySorted(junctionSubjects)\n }\n\n // next we always insert entities with non-nullable relations, sort them first\n const nonNullableDependencies = this.getNonNullableDependencies()\n let sortedNonNullableEntityTargets = this.toposort(\n nonNullableDependencies,\n )\n if (direction === \"insert\")\n sortedNonNullableEntityTargets =\n sortedNonNullableEntityTargets.reverse()\n\n // so we have a sorted entity targets\n // go thought each of them and find all subjects with sorted entity target\n // add those sorted targets and remove them from original array of targets\n sortedNonNullableEntityTargets.forEach((sortedEntityTarget) => {\n const entityTargetSubjects = this.subjects.filter(\n (subject) =>\n subject.metadata.targetName === sortedEntityTarget ||\n subject.metadata.inheritanceTree.some(\n (s) => s.name === sortedEntityTarget,\n ),\n )\n sortedSubjects.push(...entityTargetSubjects)\n this.removeAlreadySorted(entityTargetSubjects)\n })\n\n // next sort all other entities\n // same process as in above but with other entities\n const otherDependencies: string[][] = this.getDependencies()\n let sortedOtherEntityTargets = this.toposort(otherDependencies)\n if (direction === \"insert\")\n sortedOtherEntityTargets = sortedOtherEntityTargets.reverse()\n\n sortedOtherEntityTargets.forEach((sortedEntityTarget) => {\n const entityTargetSubjects = this.subjects.filter(\n (subject) => subject.metadata.targetName === sortedEntityTarget,\n )\n sortedSubjects.push(...entityTargetSubjects)\n this.removeAlreadySorted(entityTargetSubjects)\n })\n\n // if we have something left in the subjects add them as well\n sortedSubjects.push(...this.subjects)\n return sortedSubjects\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Removes already sorted subjects from this.subjects list of subjects.\n *\n * @param subjects\n */\n protected removeAlreadySorted(subjects: Subject[]) {\n subjects.forEach((subject) => {\n this.subjects.splice(this.subjects.indexOf(subject), 1)\n })\n }\n\n /**\n * Extracts all unique metadatas from the given subjects.\n *\n * @param subjects\n */\n protected getUniqueMetadatas(subjects: Subject[]) {\n const metadatas: EntityMetadata[] = []\n subjects.forEach((subject) => {\n if (metadatas.indexOf(subject.metadata) === -1)\n metadatas.push(subject.metadata)\n })\n return metadatas\n }\n\n /**\n * Gets dependency tree for all entity metadatas with non-nullable relations.\n * We need to execute insertions first for entities which non-nullable relations.\n */\n protected getNonNullableDependencies(): string[][] {\n return this.metadatas.reduce((dependencies, metadata) => {\n metadata.relationsWithJoinColumns.forEach((relation) => {\n if (relation.isNullable) return\n\n dependencies.push([\n metadata.targetName,\n relation.inverseEntityMetadata.targetName,\n ])\n })\n return dependencies\n }, [] as string[][])\n }\n\n /**\n * Gets dependency tree for all entity metadatas with non-nullable relations.\n * We need to execute insertions first for entities which non-nullable relations.\n */\n protected getDependencies(): string[][] {\n return this.metadatas.reduce((dependencies, metadata) => {\n metadata.relationsWithJoinColumns.forEach((relation) => {\n // if relation is self-referenced we skip it\n if (relation.inverseEntityMetadata === metadata) return\n\n dependencies.push([\n metadata.targetName,\n relation.inverseEntityMetadata.targetName,\n ])\n })\n return dependencies\n }, [] as string[][])\n }\n\n /**\n * Sorts given graph using topological sorting algorithm.\n *\n * Algorithm is kindly taken from https://github.com/marcelklehr/toposort repository.\n *\n * @param edges\n */\n protected toposort(edges: any[][]) {\n /**\n *\n * @param arr\n */\n function uniqueNodes(arr: any[]) {\n const res = []\n for (let i = 0, len = arr.length; i < len; i++) {\n const edge: any = arr[i]\n if (res.indexOf(edge[0]) < 0) res.push(edge[0])\n if (res.indexOf(edge[1]) < 0) res.push(edge[1])\n }\n return res\n }\n\n const nodes = uniqueNodes(edges)\n let cursor = nodes.length,\n i = cursor\n const sorted = new Array(cursor),\n visited = new Set<number>()\n\n while (i--) {\n if (!visited.has(i)) visit(nodes[i], i, [])\n }\n\n /**\n *\n * @param node\n * @param i\n * @param predecessors\n */\n function visit(node: any, i: number, predecessors: any[]) {\n if (predecessors.indexOf(node) >= 0) {\n throw new TypeORMError(\n \"Cyclic dependency: \" + JSON.stringify(node),\n ) // todo: better error\n }\n\n if (!~nodes.indexOf(node)) {\n throw new TypeORMError(\n \"Found unknown node. Make sure to provided all involved nodes. Unknown node: \" +\n JSON.stringify(node),\n )\n }\n\n if (visited.has(i)) return\n visited.add(i)\n\n // outgoing edges\n const outgoing = edges.filter(function (edge) {\n return edge[0] === node\n })\n if ((i = outgoing.length)) {\n const preds = predecessors.concat(node)\n do {\n const child = outgoing[--i][1]\n visit(child, nodes.indexOf(child), preds)\n } while (i)\n }\n\n sorted[--cursor] = node\n }\n\n return sorted\n }\n}\n"]}
@@ -9,6 +9,7 @@ export declare class CascadesSubjectBuilder {
9
9
  constructor(allSubjects: Subject[]);
10
10
  /**
11
11
  * Builds a cascade subjects tree and pushes them in into the given array of subjects.
12
+ *
12
13
  * @param subject
13
14
  * @param operationType
14
15
  */
@@ -16,6 +17,7 @@ export declare class CascadesSubjectBuilder {
16
17
  /**
17
18
  * Finds subject where entity like given subject's entity.
18
19
  * Comparison made by entity id.
20
+ *
19
21
  * @param entityTarget
20
22
  * @param entity
21
23
  */
@@ -19,6 +19,7 @@ class CascadesSubjectBuilder {
19
19
  // ---------------------------------------------------------------------
20
20
  /**
21
21
  * Builds a cascade subjects tree and pushes them in into the given array of subjects.
22
+ *
22
23
  * @param subject
23
24
  * @param operationType
24
25
  */
@@ -26,13 +27,29 @@ class CascadesSubjectBuilder {
26
27
  subject.metadata
27
28
  .extractRelationValuesFromEntity(subject.entity, subject.metadata.relations) // todo: we can create EntityMetadata.cascadeRelations
28
29
  .forEach(([relation, relationEntity, relationEntityMetadata]) => {
29
- // we need only defined values and insert, update, soft-remove or recover cascades of the relation should be set
30
- if (relationEntity === undefined ||
31
- relationEntity === null ||
32
- (!relation.isCascadeInsert &&
33
- !relation.isCascadeUpdate &&
34
- !relation.isCascadeSoftRemove &&
35
- !relation.isCascadeRecover))
30
+ // skip undefined/null values and relations whose cascade flags
31
+ // don't match the current operation type
32
+ if (relationEntity === undefined || relationEntity === null)
33
+ return;
34
+ let shouldCascade;
35
+ switch (operationType) {
36
+ case "save":
37
+ shouldCascade =
38
+ relation.isCascadeInsert || relation.isCascadeUpdate;
39
+ break;
40
+ case "remove":
41
+ shouldCascade = relation.isCascadeRemove;
42
+ break;
43
+ case "soft-remove":
44
+ shouldCascade = relation.isCascadeSoftRemove;
45
+ break;
46
+ case "recover":
47
+ shouldCascade = relation.isCascadeRecover;
48
+ break;
49
+ default:
50
+ shouldCascade = false;
51
+ }
52
+ if (!shouldCascade)
36
53
  return;
37
54
  // if relation entity is just a relation id set (for example post.tag = 1)
38
55
  // then we don't really need to check cascades since there is no object to insert or update
@@ -43,24 +60,25 @@ class CascadesSubjectBuilder {
43
60
  if (alreadyExistRelationEntitySubject) {
44
61
  if (alreadyExistRelationEntitySubject.canBeInserted ===
45
62
  false)
46
- // if its not marked for insertion yet
47
63
  alreadyExistRelationEntitySubject.canBeInserted =
48
64
  relation.isCascadeInsert === true &&
49
65
  operationType === "save";
50
66
  if (alreadyExistRelationEntitySubject.canBeUpdated === false)
51
- // if its not marked for update yet
52
67
  alreadyExistRelationEntitySubject.canBeUpdated =
53
68
  relation.isCascadeUpdate === true &&
54
69
  operationType === "save";
70
+ if (!alreadyExistRelationEntitySubject.mustBeRemoved)
71
+ alreadyExistRelationEntitySubject.mustBeRemoved =
72
+ relation.isCascadeRemove === true &&
73
+ operationType === "remove" &&
74
+ !!alreadyExistRelationEntitySubject.identifier;
55
75
  if (alreadyExistRelationEntitySubject.canBeSoftRemoved ===
56
76
  false)
57
- // if its not marked for removal yet
58
77
  alreadyExistRelationEntitySubject.canBeSoftRemoved =
59
78
  relation.isCascadeSoftRemove === true &&
60
79
  operationType === "soft-remove";
61
80
  if (alreadyExistRelationEntitySubject.canBeRecovered ===
62
81
  false)
63
- // if its not marked for recovery yet
64
82
  alreadyExistRelationEntitySubject.canBeRecovered =
65
83
  relation.isCascadeRecover === true &&
66
84
  operationType === "recover";
@@ -81,6 +99,13 @@ class CascadesSubjectBuilder {
81
99
  canBeRecovered: relation.isCascadeRecover === true &&
82
100
  operationType === "recover",
83
101
  });
102
+ // only mark for removal if the subject has an identifier,
103
+ // otherwise SubjectExecutor will throw SubjectWithoutIdentifierError
104
+ if (relation.isCascadeRemove === true &&
105
+ operationType === "remove" &&
106
+ relationEntitySubject.identifier) {
107
+ relationEntitySubject.mustBeRemoved = true;
108
+ }
84
109
  this.allSubjects.push(relationEntitySubject);
85
110
  // go recursively and find other entities we need to insert/update
86
111
  this.build(relationEntitySubject, operationType);
@@ -92,6 +117,7 @@ class CascadesSubjectBuilder {
92
117
  /**
93
118
  * Finds subject where entity like given subject's entity.
94
119
  * Comparison made by entity id.
120
+ *
95
121
  * @param entityTarget
96
122
  * @param entity
97
123
  */
@@ -1 +1 @@
1
- {"version":3,"file":"CascadesSubjectBuilder.js","sourceRoot":"","sources":["../../../../src/persistence/subject-builder/CascadesSubjectBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["import { Subject } from \"../Subject\"\nimport type { ObjectLiteral } from \"../../common/ObjectLiteral\"\nimport { ObjectUtils } from \"../../util/ObjectUtils\"\n\n/**\n * Finds all cascade operations of the given subject and cascade operations of the found cascaded subjects,\n * e.g. builds a cascade tree and creates a subjects for them.\n */\nexport class CascadesSubjectBuilder {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n\n constructor(protected allSubjects: Subject[]) {}\n\n // ---------------------------------------------------------------------\n // Public Methods\n // ---------------------------------------------------------------------\n\n /**\n * Builds a cascade subjects tree and pushes them in into the given array of subjects.\n * @param subject\n * @param operationType\n */\n build(\n subject: Subject,\n operationType: \"save\" | \"remove\" | \"soft-remove\" | \"recover\",\n ) {\n subject.metadata\n .extractRelationValuesFromEntity(\n subject.entity!,\n subject.metadata.relations,\n ) // todo: we can create EntityMetadata.cascadeRelations\n .forEach(([relation, relationEntity, relationEntityMetadata]) => {\n // we need only defined values and insert, update, soft-remove or recover cascades of the relation should be set\n if (\n relationEntity === undefined ||\n relationEntity === null ||\n (!relation.isCascadeInsert &&\n !relation.isCascadeUpdate &&\n !relation.isCascadeSoftRemove &&\n !relation.isCascadeRecover)\n )\n return\n\n // if relation entity is just a relation id set (for example post.tag = 1)\n // then we don't really need to check cascades since there is no object to insert or update\n if (!ObjectUtils.isObject(relationEntity)) return\n\n // if we already has this entity in list of operated subjects then skip it to avoid recursion\n const alreadyExistRelationEntitySubject =\n this.findByPersistEntityLike(\n relationEntityMetadata.target,\n relationEntity,\n )\n if (alreadyExistRelationEntitySubject) {\n if (\n alreadyExistRelationEntitySubject.canBeInserted ===\n false\n )\n // if its not marked for insertion yet\n alreadyExistRelationEntitySubject.canBeInserted =\n relation.isCascadeInsert === true &&\n operationType === \"save\"\n if (\n alreadyExistRelationEntitySubject.canBeUpdated === false\n )\n // if its not marked for update yet\n alreadyExistRelationEntitySubject.canBeUpdated =\n relation.isCascadeUpdate === true &&\n operationType === \"save\"\n if (\n alreadyExistRelationEntitySubject.canBeSoftRemoved ===\n false\n )\n // if its not marked for removal yet\n alreadyExistRelationEntitySubject.canBeSoftRemoved =\n relation.isCascadeSoftRemove === true &&\n operationType === \"soft-remove\"\n if (\n alreadyExistRelationEntitySubject.canBeRecovered ===\n false\n )\n // if its not marked for recovery yet\n alreadyExistRelationEntitySubject.canBeRecovered =\n relation.isCascadeRecover === true &&\n operationType === \"recover\"\n return\n }\n\n // mark subject with what we can do with it\n // and add to the array of subjects to load only if there is no same entity there already\n const relationEntitySubject = new Subject({\n metadata: relationEntityMetadata,\n parentSubject: subject,\n entity: relationEntity,\n canBeInserted:\n relation.isCascadeInsert === true &&\n operationType === \"save\",\n canBeUpdated:\n relation.isCascadeUpdate === true &&\n operationType === \"save\",\n canBeSoftRemoved:\n relation.isCascadeSoftRemove === true &&\n operationType === \"soft-remove\",\n canBeRecovered:\n relation.isCascadeRecover === true &&\n operationType === \"recover\",\n })\n this.allSubjects.push(relationEntitySubject)\n\n // go recursively and find other entities we need to insert/update\n this.build(relationEntitySubject, operationType)\n })\n }\n\n // ---------------------------------------------------------------------\n // Protected Methods\n // ---------------------------------------------------------------------\n\n /**\n * Finds subject where entity like given subject's entity.\n * Comparison made by entity id.\n * @param entityTarget\n * @param entity\n */\n protected findByPersistEntityLike(\n entityTarget: Function | string,\n entity: ObjectLiteral,\n ): Subject | undefined {\n return this.allSubjects.find((subject) => {\n if (!subject.entity) return false\n\n if (subject.entity === entity) return true\n\n return (\n subject.metadata.target === entityTarget &&\n subject.metadata.compareEntities(\n subject.entityWithFulfilledIds!,\n entity,\n )\n )\n })\n }\n}\n"]}
1
+ {"version":3,"file":"CascadesSubjectBuilder.js","sourceRoot":"","sources":["../../../../src/persistence/subject-builder/CascadesSubjectBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["import { Subject } from \"../Subject\"\nimport type { ObjectLiteral } from \"../../common/ObjectLiteral\"\nimport { ObjectUtils } from \"../../util/ObjectUtils\"\n\n/**\n * Finds all cascade operations of the given subject and cascade operations of the found cascaded subjects,\n * e.g. builds a cascade tree and creates a subjects for them.\n */\nexport class CascadesSubjectBuilder {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n\n constructor(protected allSubjects: Subject[]) {}\n\n // ---------------------------------------------------------------------\n // Public Methods\n // ---------------------------------------------------------------------\n\n /**\n * Builds a cascade subjects tree and pushes them in into the given array of subjects.\n *\n * @param subject\n * @param operationType\n */\n build(\n subject: Subject,\n operationType: \"save\" | \"remove\" | \"soft-remove\" | \"recover\",\n ) {\n subject.metadata\n .extractRelationValuesFromEntity(\n subject.entity!,\n subject.metadata.relations,\n ) // todo: we can create EntityMetadata.cascadeRelations\n .forEach(([relation, relationEntity, relationEntityMetadata]) => {\n // skip undefined/null values and relations whose cascade flags\n // don't match the current operation type\n if (relationEntity === undefined || relationEntity === null)\n return\n\n let shouldCascade: boolean\n switch (operationType) {\n case \"save\":\n shouldCascade =\n relation.isCascadeInsert || relation.isCascadeUpdate\n break\n case \"remove\":\n shouldCascade = relation.isCascadeRemove\n break\n case \"soft-remove\":\n shouldCascade = relation.isCascadeSoftRemove\n break\n case \"recover\":\n shouldCascade = relation.isCascadeRecover\n break\n default:\n shouldCascade = false\n }\n\n if (!shouldCascade) return\n\n // if relation entity is just a relation id set (for example post.tag = 1)\n // then we don't really need to check cascades since there is no object to insert or update\n if (!ObjectUtils.isObject(relationEntity)) return\n\n // if we already has this entity in list of operated subjects then skip it to avoid recursion\n const alreadyExistRelationEntitySubject =\n this.findByPersistEntityLike(\n relationEntityMetadata.target,\n relationEntity,\n )\n if (alreadyExistRelationEntitySubject) {\n if (\n alreadyExistRelationEntitySubject.canBeInserted ===\n false\n )\n alreadyExistRelationEntitySubject.canBeInserted =\n relation.isCascadeInsert === true &&\n operationType === \"save\"\n if (\n alreadyExistRelationEntitySubject.canBeUpdated === false\n )\n alreadyExistRelationEntitySubject.canBeUpdated =\n relation.isCascadeUpdate === true &&\n operationType === \"save\"\n if (!alreadyExistRelationEntitySubject.mustBeRemoved)\n alreadyExistRelationEntitySubject.mustBeRemoved =\n relation.isCascadeRemove === true &&\n operationType === \"remove\" &&\n !!alreadyExistRelationEntitySubject.identifier\n if (\n alreadyExistRelationEntitySubject.canBeSoftRemoved ===\n false\n )\n alreadyExistRelationEntitySubject.canBeSoftRemoved =\n relation.isCascadeSoftRemove === true &&\n operationType === \"soft-remove\"\n if (\n alreadyExistRelationEntitySubject.canBeRecovered ===\n false\n )\n alreadyExistRelationEntitySubject.canBeRecovered =\n relation.isCascadeRecover === true &&\n operationType === \"recover\"\n return\n }\n\n // mark subject with what we can do with it\n // and add to the array of subjects to load only if there is no same entity there already\n const relationEntitySubject = new Subject({\n metadata: relationEntityMetadata,\n parentSubject: subject,\n entity: relationEntity,\n canBeInserted:\n relation.isCascadeInsert === true &&\n operationType === \"save\",\n canBeUpdated:\n relation.isCascadeUpdate === true &&\n operationType === \"save\",\n canBeSoftRemoved:\n relation.isCascadeSoftRemove === true &&\n operationType === \"soft-remove\",\n canBeRecovered:\n relation.isCascadeRecover === true &&\n operationType === \"recover\",\n })\n\n // only mark for removal if the subject has an identifier,\n // otherwise SubjectExecutor will throw SubjectWithoutIdentifierError\n if (\n relation.isCascadeRemove === true &&\n operationType === \"remove\" &&\n relationEntitySubject.identifier\n ) {\n relationEntitySubject.mustBeRemoved = true\n }\n\n this.allSubjects.push(relationEntitySubject)\n\n // go recursively and find other entities we need to insert/update\n this.build(relationEntitySubject, operationType)\n })\n }\n\n // ---------------------------------------------------------------------\n // Protected Methods\n // ---------------------------------------------------------------------\n\n /**\n * Finds subject where entity like given subject's entity.\n * Comparison made by entity id.\n *\n * @param entityTarget\n * @param entity\n */\n protected findByPersistEntityLike(\n entityTarget: Function | string,\n entity: ObjectLiteral,\n ): Subject | undefined {\n return this.allSubjects.find((subject) => {\n if (!subject.entity) return false\n\n if (subject.entity === entity) return true\n\n return (\n subject.metadata.target === entityTarget &&\n subject.metadata.compareEntities(\n subject.entityWithFulfilledIds!,\n entity,\n )\n )\n })\n }\n}\n"]}
@@ -4,14 +4,12 @@ import type { RelationMetadata } from "../../metadata/RelationMetadata";
4
4
  /**
5
5
  * Builds operations needs to be executed for many-to-many relations of the given subjects.
6
6
  *
7
- * Example:
7
+ * @example
8
+ * // Post owns a many-to-many relation with Category in the property called "categories".
9
+ * // If the user adds categories into the post and saves post we need to bind them.
10
+ * // This operation requires updating the junction table.
11
+ * \@ManyToMany(type => Category, category => category.posts) categories: Category[]
8
12
  *
9
- * `Post` owns a many-to-many relation with `Category` in the property called `categories`, e.g.:
10
- *
11
- * `@ManyToMany(type => Category, category => category.posts) categories: Category[]`
12
- *
13
- * If the user adds categories into the post and saves post we need to bind them.
14
- * This operation requires updating the junction table.
15
13
  */
16
14
  export declare class ManyToManySubjectBuilder {
17
15
  protected subjects: Subject[];
@@ -22,6 +20,7 @@ export declare class ManyToManySubjectBuilder {
22
20
  build(): void;
23
21
  /**
24
22
  * Builds operations for removal of all many-to-many records of all many-to-many relations of the given subject.
23
+ *
25
24
  * @param subject
26
25
  */
27
26
  buildForAllRemoval(subject: Subject): void;
@@ -29,13 +28,17 @@ export declare class ManyToManySubjectBuilder {
29
28
  * Builds operations for a given subject and relation.
30
29
  *
31
30
  * by example: subject is "post" entity we are saving here and relation is "categories" inside it here.
31
+ *
32
32
  * @param subject
33
33
  * @param relation
34
34
  */
35
35
  protected buildForSubjectRelation(subject: Subject, relation: RelationMetadata): void;
36
36
  /**
37
37
  * Creates identifiers for junction table.
38
- * Example: { postId: 1, categoryId: 2 }
38
+ *
39
+ * @example
40
+ * { postId: 1, categoryId: 2 }
41
+ *
39
42
  * @param subject
40
43
  * @param relation
41
44
  * @param relationId
@@ -6,14 +6,12 @@ const OrmUtils_1 = require("../../util/OrmUtils");
6
6
  /**
7
7
  * Builds operations needs to be executed for many-to-many relations of the given subjects.
8
8
  *
9
- * Example:
9
+ * @example
10
+ * // Post owns a many-to-many relation with Category in the property called "categories".
11
+ * // If the user adds categories into the post and saves post we need to bind them.
12
+ * // This operation requires updating the junction table.
13
+ * \@ManyToMany(type => Category, category => category.posts) categories: Category[]
10
14
  *
11
- * `Post` owns a many-to-many relation with `Category` in the property called `categories`, e.g.:
12
- *
13
- * `@ManyToMany(type => Category, category => category.posts) categories: Category[]`
14
- *
15
- * If the user adds categories into the post and saves post we need to bind them.
16
- * This operation requires updating the junction table.
17
15
  */
18
16
  class ManyToManySubjectBuilder {
19
17
  // ---------------------------------------------------------------------
@@ -44,6 +42,7 @@ class ManyToManySubjectBuilder {
44
42
  }
45
43
  /**
46
44
  * Builds operations for removal of all many-to-many records of all many-to-many relations of the given subject.
45
+ *
47
46
  * @param subject
48
47
  */
49
48
  buildForAllRemoval(subject) {
@@ -81,6 +80,7 @@ class ManyToManySubjectBuilder {
81
80
  * Builds operations for a given subject and relation.
82
81
  *
83
82
  * by example: subject is "post" entity we are saving here and relation is "categories" inside it here.
83
+ *
84
84
  * @param subject
85
85
  * @param relation
86
86
  */
@@ -99,9 +99,8 @@ class ManyToManySubjectBuilder {
99
99
  // extract entity's relation value
100
100
  // by example: categories inside our post (subject.entity is post)
101
101
  let relatedEntities = relation.getEntityValue(subject.entity);
102
- if (relatedEntities === null)
103
- // if value set to null its equal if we set it to empty array - all items must be removed from the database
104
- relatedEntities = [];
102
+ // if value set to null its equal if we set it to empty array - all items must be removed from the database
103
+ relatedEntities ??= [];
105
104
  if (!Array.isArray(relatedEntities))
106
105
  return;
107
106
  // from all related entities find only those which aren't found in the db - for them we will create operation subjects
@@ -142,9 +141,9 @@ class ManyToManySubjectBuilder {
142
141
  return;
143
142
  const ownerValue = relation.isOwning
144
143
  ? subject
145
- : relatedEntitySubject || relatedEntity; // by example: ownerEntityMap is post from subject here
144
+ : (relatedEntitySubject ?? relatedEntity); // by example: ownerEntityMap is post from subject here
146
145
  const inverseValue = relation.isOwning
147
- ? relatedEntitySubject || relatedEntity
146
+ ? (relatedEntitySubject ?? relatedEntity)
148
147
  : subject; // by example: inverseEntityMap is category from categories array here
149
148
  // create a new subject for insert operation of junction rows
150
149
  const junctionSubject = new Subject_1.Subject({
@@ -203,7 +202,10 @@ class ManyToManySubjectBuilder {
203
202
  }
204
203
  /**
205
204
  * Creates identifiers for junction table.
206
- * Example: { postId: 1, categoryId: 2 }
205
+ *
206
+ * @example
207
+ * { postId: 1, categoryId: 2 }
208
+ *
207
209
  * @param subject
208
210
  * @param relation
209
211
  * @param relationId
@@ -1 +1 @@
1
- {"version":3,"file":"ManyToManySubjectBuilder.js","sourceRoot":"","sources":["../../../../src/persistence/subject-builder/ManyToManySubjectBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["import { Subject } from \"../Subject\"\nimport { OrmUtils } from \"../../util/OrmUtils\"\nimport type { ObjectLiteral } from \"../../common/ObjectLiteral\"\nimport type { RelationMetadata } from \"../../metadata/RelationMetadata\"\n\n/**\n * Builds operations needs to be executed for many-to-many relations of the given subjects.\n *\n * Example:\n *\n * `Post` owns a many-to-many relation with `Category` in the property called `categories`, e.g.:\n *\n * `@ManyToMany(type => Category, category => category.posts) categories: Category[]`\n *\n * If the user adds categories into the post and saves post we need to bind them.\n * This operation requires updating the junction table.\n */\nexport class ManyToManySubjectBuilder {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n\n constructor(protected subjects: Subject[]) {}\n\n // ---------------------------------------------------------------------\n // Public Methods\n // ---------------------------------------------------------------------\n\n /**\n * Builds operations for any changes in the many-to-many relations of the subjects.\n */\n build(): void {\n this.subjects.forEach((subject) => {\n // if subject doesn't have entity then no need to find something that should be inserted or removed\n if (!subject.entity) return\n\n // go through all persistence enabled many-to-many relations and build subject operations for them\n subject.metadata.manyToManyRelations.forEach((relation) => {\n // skip relations for which persistence is disabled\n if (relation.persistenceEnabled === false) return\n\n this.buildForSubjectRelation(subject, relation)\n })\n })\n }\n\n /**\n * Builds operations for removal of all many-to-many records of all many-to-many relations of the given subject.\n * @param subject\n */\n buildForAllRemoval(subject: Subject) {\n // if subject does not have a database entity then it means it does not exist in the database\n // if it does not exist in the database then we don't have anything for deletion\n if (!subject.databaseEntity) return\n\n // go through all persistence enabled many-to-many relations and build subject operations for them\n subject.metadata.manyToManyRelations.forEach((relation) => {\n // skip relations for which persistence is disabled\n if (relation.persistenceEnabled === false) return\n\n // get all related entities (actually related entity relation ids) bind to this subject entity\n // by example: returns category ids of the post we are currently working with (subject.entity is post)\n const relatedEntityRelationIdsInDatabase: ObjectLiteral[] =\n relation.getEntityValue(subject.databaseEntity!)\n\n // go through all related entities and create a new junction subject for each row in junction table\n relatedEntityRelationIdsInDatabase.forEach((relationId) => {\n const junctionSubject = new Subject({\n metadata: relation.junctionEntityMetadata!,\n parentSubject: subject,\n mustBeRemoved: true,\n identifier: this.buildJunctionIdentifier(\n subject,\n relation,\n relationId,\n ),\n })\n\n // we use unshift because we need to perform those operations before post deletion is performed\n // but post deletion was already added as an subject\n // this is temporary solution, later we need to implement proper sorting of subjects before their removal\n this.subjects.push(junctionSubject)\n })\n })\n }\n\n // ---------------------------------------------------------------------\n // Protected Methods\n // ---------------------------------------------------------------------\n\n /**\n * Builds operations for a given subject and relation.\n *\n * by example: subject is \"post\" entity we are saving here and relation is \"categories\" inside it here.\n * @param subject\n * @param relation\n */\n protected buildForSubjectRelation(\n subject: Subject,\n relation: RelationMetadata,\n ) {\n // load from db all relation ids of inverse entities that are \"bind\" to the subject's entity\n // this way we gonna check which relation ids are missing and which are new (e.g. inserted or removed)\n let databaseRelatedEntityIds: ObjectLiteral[] = []\n\n // if subject don't have database entity it means all related entities in persisted subject are new and must be bind\n // and we don't need to remove something that is not exist\n if (subject.databaseEntity) {\n const databaseRelatedEntityValue = relation.getEntityValue(\n subject.databaseEntity,\n )\n if (databaseRelatedEntityValue) {\n databaseRelatedEntityIds = databaseRelatedEntityValue.map(\n (e: any) =>\n relation.inverseEntityMetadata.getEntityIdMap(e),\n )\n }\n }\n\n // extract entity's relation value\n // by example: categories inside our post (subject.entity is post)\n let relatedEntities: ObjectLiteral[] = relation.getEntityValue(\n subject.entity!,\n )\n if (relatedEntities === null)\n // if value set to null its equal if we set it to empty array - all items must be removed from the database\n relatedEntities = []\n if (!Array.isArray(relatedEntities)) return\n\n // from all related entities find only those which aren't found in the db - for them we will create operation subjects\n relatedEntities.forEach((relatedEntity) => {\n // by example: relatedEntity is category from categories saved with post\n\n // todo: check how it will work for entities which are saved by cascades, but aren't saved in the database yet\n\n // extract only relation id from the related entities, since we only need it for comparison\n // by example: extract from category only relation id (category id, or let's say category title, depend on join column options)\n let relatedEntityRelationIdMap =\n relation.inverseEntityMetadata!.getEntityIdMap(relatedEntity)\n\n // try to find a subject of this related entity, maybe it was loaded or was marked for persistence\n const relatedEntitySubject = this.subjects.find((subject) => {\n return subject.entity === relatedEntity\n })\n\n // if subject with entity was found take subject identifier as relation id map since it may contain extra properties resolved\n if (relatedEntitySubject)\n relatedEntityRelationIdMap = relatedEntitySubject.identifier\n\n // if related entity relation id map is empty it means related entity is newly persisted\n if (!relatedEntityRelationIdMap) {\n // we decided to remove this error because it brings complications when saving object with non-saved entities\n // if related entity does not have a subject then it means user tries to bind entity which wasn't saved\n // in this persistence because he didn't pass this entity for save or he did not set cascades\n // but without entity being inserted we cannot bind it in the relation operation, so we throw an exception here\n // we decided to remove this error because it brings complications when saving object with non-saved entities\n // if (!relatedEntitySubject)\n // throw new TypeORMError(`Many-to-many relation \"${relation.entityMetadata.name}.${relation.propertyPath}\" contains ` +\n // `entities which do not exist in the database yet, thus they cannot be bind in the database. ` +\n // `Please setup cascade insertion or save entities before binding it.`);\n if (!relatedEntitySubject) return\n }\n\n // try to find related entity in the database\n // by example: find post's category in the database post's categories\n const relatedEntityExistInDatabase = databaseRelatedEntityIds.find(\n (databaseRelatedEntityRelationId) => {\n return OrmUtils.compareIds(\n databaseRelatedEntityRelationId,\n relatedEntityRelationIdMap,\n )\n },\n )\n\n // if entity is found then don't do anything - it means binding in junction table already exist, we don't need to add anything\n if (relatedEntityExistInDatabase) return\n\n const ownerValue = relation.isOwning\n ? subject\n : relatedEntitySubject || relatedEntity // by example: ownerEntityMap is post from subject here\n const inverseValue = relation.isOwning\n ? relatedEntitySubject || relatedEntity\n : subject // by example: inverseEntityMap is category from categories array here\n\n // create a new subject for insert operation of junction rows\n const junctionSubject = new Subject({\n metadata: relation.junctionEntityMetadata!,\n parentSubject: subject,\n canBeInserted: true,\n })\n this.subjects.push(junctionSubject)\n\n relation.junctionEntityMetadata!.ownerColumns.forEach((column) => {\n junctionSubject.changeMaps.push({\n column: column,\n value: ownerValue,\n // valueFactory: (value) => column.referencedColumn!.getEntityValue(value) // column.referencedColumn!.getEntityValue(ownerEntityMap),\n })\n })\n\n relation.junctionEntityMetadata!.inverseColumns.forEach(\n (column) => {\n junctionSubject.changeMaps.push({\n column: column,\n value: inverseValue,\n // valueFactory: (value) => column.referencedColumn!.getEntityValue(value) // column.referencedColumn!.getEntityValue(inverseEntityMap),\n })\n },\n )\n })\n\n // get all inverse entities relation ids that are \"bind\" to the currently persisted entity\n const changedInverseEntityRelationIds: ObjectLiteral[] = []\n relatedEntities.forEach((relatedEntity) => {\n // relation.inverseEntityMetadata!.getEntityIdMap(relatedEntity)\n let relatedEntityRelationIdMap =\n relation.inverseEntityMetadata!.getEntityIdMap(relatedEntity)\n\n // try to find a subject of this related entity, maybe it was loaded or was marked for persistence\n const relatedEntitySubject = this.subjects.find((subject) => {\n return subject.entity === relatedEntity\n })\n\n // if subject with entity was found take subject identifier as relation id map since it may contain extra properties resolved\n if (relatedEntitySubject)\n relatedEntityRelationIdMap = relatedEntitySubject.identifier\n\n if (\n relatedEntityRelationIdMap !== undefined &&\n relatedEntityRelationIdMap !== null\n )\n changedInverseEntityRelationIds.push(relatedEntityRelationIdMap)\n })\n\n // now from all entities in the persisted entity find only those which aren't found in the db\n const removedJunctionEntityIds = databaseRelatedEntityIds.filter(\n (existRelationId) => {\n return !changedInverseEntityRelationIds.find(\n (changedRelationId) => {\n return OrmUtils.compareIds(\n changedRelationId,\n existRelationId,\n )\n },\n )\n },\n )\n\n // finally create a new junction remove operations for missing related entities\n removedJunctionEntityIds.forEach((removedEntityRelationId) => {\n const junctionSubject = new Subject({\n metadata: relation.junctionEntityMetadata!,\n parentSubject: subject,\n mustBeRemoved: true,\n identifier: this.buildJunctionIdentifier(\n subject,\n relation,\n removedEntityRelationId,\n ),\n })\n this.subjects.push(junctionSubject)\n })\n }\n\n /**\n * Creates identifiers for junction table.\n * Example: { postId: 1, categoryId: 2 }\n * @param subject\n * @param relation\n * @param relationId\n */\n protected buildJunctionIdentifier(\n subject: Subject,\n relation: RelationMetadata,\n relationId: ObjectLiteral,\n ) {\n const ownerEntityMap = relation.isOwning ? subject.entity! : relationId\n const inverseEntityMap = relation.isOwning\n ? relationId\n : subject.entity!\n\n const identifier: ObjectLiteral = {}\n relation.junctionEntityMetadata!.ownerColumns.forEach((column) => {\n OrmUtils.mergeDeep(\n identifier,\n column.createValueMap(\n column.referencedColumn!.getEntityValue(ownerEntityMap),\n ),\n )\n })\n relation.junctionEntityMetadata!.inverseColumns.forEach((column) => {\n OrmUtils.mergeDeep(\n identifier,\n column.createValueMap(\n column.referencedColumn!.getEntityValue(inverseEntityMap),\n ),\n )\n })\n return identifier\n }\n}\n"]}
1
+ {"version":3,"file":"ManyToManySubjectBuilder.js","sourceRoot":"","sources":["../../../../src/persistence/subject-builder/ManyToManySubjectBuilder.ts"],"names":[],"mappings":"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","sourcesContent":["import { Subject } from \"../Subject\"\nimport { OrmUtils } from \"../../util/OrmUtils\"\nimport type { ObjectLiteral } from \"../../common/ObjectLiteral\"\nimport type { RelationMetadata } from \"../../metadata/RelationMetadata\"\n\n/**\n * Builds operations needs to be executed for many-to-many relations of the given subjects.\n *\n * @example\n * // Post owns a many-to-many relation with Category in the property called \"categories\".\n * // If the user adds categories into the post and saves post we need to bind them.\n * // This operation requires updating the junction table.\n * \\@ManyToMany(type => Category, category => category.posts) categories: Category[]\n *\n */\nexport class ManyToManySubjectBuilder {\n // ---------------------------------------------------------------------\n // Constructor\n // ---------------------------------------------------------------------\n\n constructor(protected subjects: Subject[]) {}\n\n // ---------------------------------------------------------------------\n // Public Methods\n // ---------------------------------------------------------------------\n\n /**\n * Builds operations for any changes in the many-to-many relations of the subjects.\n */\n build(): void {\n this.subjects.forEach((subject) => {\n // if subject doesn't have entity then no need to find something that should be inserted or removed\n if (!subject.entity) return\n\n // go through all persistence enabled many-to-many relations and build subject operations for them\n subject.metadata.manyToManyRelations.forEach((relation) => {\n // skip relations for which persistence is disabled\n if (relation.persistenceEnabled === false) return\n\n this.buildForSubjectRelation(subject, relation)\n })\n })\n }\n\n /**\n * Builds operations for removal of all many-to-many records of all many-to-many relations of the given subject.\n *\n * @param subject\n */\n buildForAllRemoval(subject: Subject) {\n // if subject does not have a database entity then it means it does not exist in the database\n // if it does not exist in the database then we don't have anything for deletion\n if (!subject.databaseEntity) return\n\n // go through all persistence enabled many-to-many relations and build subject operations for them\n subject.metadata.manyToManyRelations.forEach((relation) => {\n // skip relations for which persistence is disabled\n if (relation.persistenceEnabled === false) return\n\n // get all related entities (actually related entity relation ids) bind to this subject entity\n // by example: returns category ids of the post we are currently working with (subject.entity is post)\n const relatedEntityRelationIdsInDatabase: ObjectLiteral[] =\n relation.getEntityValue(subject.databaseEntity!)\n\n // go through all related entities and create a new junction subject for each row in junction table\n relatedEntityRelationIdsInDatabase.forEach((relationId) => {\n const junctionSubject = new Subject({\n metadata: relation.junctionEntityMetadata!,\n parentSubject: subject,\n mustBeRemoved: true,\n identifier: this.buildJunctionIdentifier(\n subject,\n relation,\n relationId,\n ),\n })\n\n // we use unshift because we need to perform those operations before post deletion is performed\n // but post deletion was already added as an subject\n // this is temporary solution, later we need to implement proper sorting of subjects before their removal\n this.subjects.push(junctionSubject)\n })\n })\n }\n\n // ---------------------------------------------------------------------\n // Protected Methods\n // ---------------------------------------------------------------------\n\n /**\n * Builds operations for a given subject and relation.\n *\n * by example: subject is \"post\" entity we are saving here and relation is \"categories\" inside it here.\n *\n * @param subject\n * @param relation\n */\n protected buildForSubjectRelation(\n subject: Subject,\n relation: RelationMetadata,\n ) {\n // load from db all relation ids of inverse entities that are \"bind\" to the subject's entity\n // this way we gonna check which relation ids are missing and which are new (e.g. inserted or removed)\n let databaseRelatedEntityIds: ObjectLiteral[] = []\n\n // if subject don't have database entity it means all related entities in persisted subject are new and must be bind\n // and we don't need to remove something that is not exist\n if (subject.databaseEntity) {\n const databaseRelatedEntityValue = relation.getEntityValue(\n subject.databaseEntity,\n )\n if (databaseRelatedEntityValue) {\n databaseRelatedEntityIds = databaseRelatedEntityValue.map(\n (e: any) =>\n relation.inverseEntityMetadata.getEntityIdMap(e),\n )\n }\n }\n\n // extract entity's relation value\n // by example: categories inside our post (subject.entity is post)\n let relatedEntities: ObjectLiteral[] = relation.getEntityValue(\n subject.entity!,\n )\n // if value set to null its equal if we set it to empty array - all items must be removed from the database\n relatedEntities ??= []\n if (!Array.isArray(relatedEntities)) return\n\n // from all related entities find only those which aren't found in the db - for them we will create operation subjects\n relatedEntities.forEach((relatedEntity) => {\n // by example: relatedEntity is category from categories saved with post\n\n // todo: check how it will work for entities which are saved by cascades, but aren't saved in the database yet\n\n // extract only relation id from the related entities, since we only need it for comparison\n // by example: extract from category only relation id (category id, or let's say category title, depend on join column options)\n let relatedEntityRelationIdMap =\n relation.inverseEntityMetadata!.getEntityIdMap(relatedEntity)\n\n // try to find a subject of this related entity, maybe it was loaded or was marked for persistence\n const relatedEntitySubject = this.subjects.find((subject) => {\n return subject.entity === relatedEntity\n })\n\n // if subject with entity was found take subject identifier as relation id map since it may contain extra properties resolved\n if (relatedEntitySubject)\n relatedEntityRelationIdMap = relatedEntitySubject.identifier\n\n // if related entity relation id map is empty it means related entity is newly persisted\n if (!relatedEntityRelationIdMap) {\n // we decided to remove this error because it brings complications when saving object with non-saved entities\n // if related entity does not have a subject then it means user tries to bind entity which wasn't saved\n // in this persistence because he didn't pass this entity for save or he did not set cascades\n // but without entity being inserted we cannot bind it in the relation operation, so we throw an exception here\n // we decided to remove this error because it brings complications when saving object with non-saved entities\n // if (!relatedEntitySubject)\n // throw new TypeORMError(`Many-to-many relation \"${relation.entityMetadata.name}.${relation.propertyPath}\" contains ` +\n // `entities which do not exist in the database yet, thus they cannot be bind in the database. ` +\n // `Please setup cascade insertion or save entities before binding it.`);\n if (!relatedEntitySubject) return\n }\n\n // try to find related entity in the database\n // by example: find post's category in the database post's categories\n const relatedEntityExistInDatabase = databaseRelatedEntityIds.find(\n (databaseRelatedEntityRelationId) => {\n return OrmUtils.compareIds(\n databaseRelatedEntityRelationId,\n relatedEntityRelationIdMap,\n )\n },\n )\n\n // if entity is found then don't do anything - it means binding in junction table already exist, we don't need to add anything\n if (relatedEntityExistInDatabase) return\n\n const ownerValue = relation.isOwning\n ? subject\n : (relatedEntitySubject ?? relatedEntity) // by example: ownerEntityMap is post from subject here\n const inverseValue = relation.isOwning\n ? (relatedEntitySubject ?? relatedEntity)\n : subject // by example: inverseEntityMap is category from categories array here\n\n // create a new subject for insert operation of junction rows\n const junctionSubject = new Subject({\n metadata: relation.junctionEntityMetadata!,\n parentSubject: subject,\n canBeInserted: true,\n })\n this.subjects.push(junctionSubject)\n\n relation.junctionEntityMetadata!.ownerColumns.forEach((column) => {\n junctionSubject.changeMaps.push({\n column: column,\n value: ownerValue,\n // valueFactory: (value) => column.referencedColumn!.getEntityValue(value) // column.referencedColumn!.getEntityValue(ownerEntityMap),\n })\n })\n\n relation.junctionEntityMetadata!.inverseColumns.forEach(\n (column) => {\n junctionSubject.changeMaps.push({\n column: column,\n value: inverseValue,\n // valueFactory: (value) => column.referencedColumn!.getEntityValue(value) // column.referencedColumn!.getEntityValue(inverseEntityMap),\n })\n },\n )\n })\n\n // get all inverse entities relation ids that are \"bind\" to the currently persisted entity\n const changedInverseEntityRelationIds: ObjectLiteral[] = []\n relatedEntities.forEach((relatedEntity) => {\n // relation.inverseEntityMetadata!.getEntityIdMap(relatedEntity)\n let relatedEntityRelationIdMap =\n relation.inverseEntityMetadata!.getEntityIdMap(relatedEntity)\n\n // try to find a subject of this related entity, maybe it was loaded or was marked for persistence\n const relatedEntitySubject = this.subjects.find((subject) => {\n return subject.entity === relatedEntity\n })\n\n // if subject with entity was found take subject identifier as relation id map since it may contain extra properties resolved\n if (relatedEntitySubject)\n relatedEntityRelationIdMap = relatedEntitySubject.identifier\n\n if (\n relatedEntityRelationIdMap !== undefined &&\n relatedEntityRelationIdMap !== null\n )\n changedInverseEntityRelationIds.push(relatedEntityRelationIdMap)\n })\n\n // now from all entities in the persisted entity find only those which aren't found in the db\n const removedJunctionEntityIds = databaseRelatedEntityIds.filter(\n (existRelationId) => {\n return !changedInverseEntityRelationIds.find(\n (changedRelationId) => {\n return OrmUtils.compareIds(\n changedRelationId,\n existRelationId,\n )\n },\n )\n },\n )\n\n // finally create a new junction remove operations for missing related entities\n removedJunctionEntityIds.forEach((removedEntityRelationId) => {\n const junctionSubject = new Subject({\n metadata: relation.junctionEntityMetadata!,\n parentSubject: subject,\n mustBeRemoved: true,\n identifier: this.buildJunctionIdentifier(\n subject,\n relation,\n removedEntityRelationId,\n ),\n })\n this.subjects.push(junctionSubject)\n })\n }\n\n /**\n * Creates identifiers for junction table.\n *\n * @example\n * { postId: 1, categoryId: 2 }\n *\n * @param subject\n * @param relation\n * @param relationId\n */\n protected buildJunctionIdentifier(\n subject: Subject,\n relation: RelationMetadata,\n relationId: ObjectLiteral,\n ) {\n const ownerEntityMap = relation.isOwning ? subject.entity! : relationId\n const inverseEntityMap = relation.isOwning\n ? relationId\n : subject.entity!\n\n const identifier: ObjectLiteral = {}\n relation.junctionEntityMetadata!.ownerColumns.forEach((column) => {\n OrmUtils.mergeDeep(\n identifier,\n column.createValueMap(\n column.referencedColumn!.getEntityValue(ownerEntityMap),\n ),\n )\n })\n relation.junctionEntityMetadata!.inverseColumns.forEach((column) => {\n OrmUtils.mergeDeep(\n identifier,\n column.createValueMap(\n column.referencedColumn!.getEntityValue(inverseEntityMap),\n ),\n )\n })\n return identifier\n }\n}\n"]}
@@ -3,18 +3,16 @@ import type { RelationMetadata } from "../../metadata/RelationMetadata";
3
3
  /**
4
4
  * Builds operations needs to be executed for one-to-many relations of the given subjects.
5
5
  *
6
- * Example:
7
- *
8
- * `Post` contains one-to-many relation with `Category` in the property called `categories`, e.g.:
9
- *
10
- * `@OneToMany(type => Category, category => category.post) categories: Category[]`
11
- *
12
- * If user adds categories into the post and saves post we need to bind them.
13
- * This operation requires updating the category table since it's the owner of
14
- * the relation and contains a join column.
15
- *
16
6
  * Note: this class shares lot of things with OneToOneInverseSideOperationBuilder,
17
7
  * so when you change this class make sure to reflect changes there as well.
8
+ *
9
+ * @example
10
+ * // Post contains one-to-many relation with Category in the property called "categories".
11
+ * // If user adds categories into the post and saves post we need to bind them.
12
+ * // This operation requires updating the category table since it's the owner of
13
+ * // the relation and contains a join column.
14
+ * \@OneToMany(type => Category, category => category.post) categories: Category[]
15
+ *
18
16
  */
19
17
  export declare class OneToManySubjectBuilder {
20
18
  protected subjects: Subject[];
@@ -27,6 +25,7 @@ export declare class OneToManySubjectBuilder {
27
25
  * Builds operations for a given subject and relation.
28
26
  *
29
27
  * by example: subject is "post" entity we are saving here and relation is "categories" inside it here.
28
+ *
30
29
  * @param subject
31
30
  * @param relation
32
31
  */
@@ -7,18 +7,16 @@ const EntityMetadata_1 = require("../../metadata/EntityMetadata");
7
7
  /**
8
8
  * Builds operations needs to be executed for one-to-many relations of the given subjects.
9
9
  *
10
- * Example:
11
- *
12
- * `Post` contains one-to-many relation with `Category` in the property called `categories`, e.g.:
13
- *
14
- * `@OneToMany(type => Category, category => category.post) categories: Category[]`
15
- *
16
- * If user adds categories into the post and saves post we need to bind them.
17
- * This operation requires updating the category table since it's the owner of
18
- * the relation and contains a join column.
19
- *
20
10
  * Note: this class shares lot of things with OneToOneInverseSideOperationBuilder,
21
11
  * so when you change this class make sure to reflect changes there as well.
12
+ *
13
+ * @example
14
+ * // Post contains one-to-many relation with Category in the property called "categories".
15
+ * // If user adds categories into the post and saves post we need to bind them.
16
+ * // This operation requires updating the category table since it's the owner of
17
+ * // the relation and contains a join column.
18
+ * \@OneToMany(type => Category, category => category.post) categories: Category[]
19
+ *
22
20
  */
23
21
  class OneToManySubjectBuilder {
24
22
  // ---------------------------------------------------------------------
@@ -50,6 +48,7 @@ class OneToManySubjectBuilder {
50
48
  * Builds operations for a given subject and relation.
51
49
  *
52
50
  * by example: subject is "post" entity we are saving here and relation is "categories" inside it here.
51
+ *
53
52
  * @param subject
54
53
  * @param relation
55
54
  */
@@ -73,12 +72,11 @@ class OneToManySubjectBuilder {
73
72
  // get related entities of persisted entity
74
73
  // by example: get categories from the passed to persist post entity
75
74
  let relatedEntities = relation.getEntityValue(subject.entity);
76
- if (relatedEntities === null)
77
- // we treat relations set to null as removed, so we don't skip it
78
- relatedEntities = [];
79
75
  if (relatedEntities === undefined)
80
76
  // if relation is undefined then nothing to update
81
77
  return;
78
+ // we treat relations set to null as removed, so we don't skip it
79
+ relatedEntities ??= [];
82
80
  // extract only relation ids from the related entities, since we only need them for comparison
83
81
  // by example: extract from categories only relation ids (category id, or let's say category title, depend on join column options)
84
82
  const relatedPersistedEntityRelationIds = [];
@@ -162,20 +160,28 @@ class OneToManySubjectBuilder {
162
160
  parentSubject: subject,
163
161
  identifier: removedRelatedEntityRelationId,
164
162
  });
165
- if (!relation.inverseRelation ||
166
- relation.inverseRelation.orphanedRowAction === "nullify") {
167
- removedRelatedEntitySubject.canBeUpdated = true;
168
- removedRelatedEntitySubject.changeMaps = [
169
- {
170
- relation: relation.inverseRelation,
171
- value: null,
172
- },
173
- ];
163
+ const orphanedRowAction = relation.inverseRelation?.orphanedRowAction ?? "nullify";
164
+ if (orphanedRowAction === "nullify") {
165
+ const allColumnsNullable = relation.inverseRelation?.joinColumns.every((column) => column.isNullable) ?? true;
166
+ if (allColumnsNullable) {
167
+ removedRelatedEntitySubject.canBeUpdated = true;
168
+ removedRelatedEntitySubject.changeMaps = [
169
+ {
170
+ relation: relation.inverseRelation,
171
+ value: null,
172
+ },
173
+ ];
174
+ }
175
+ else {
176
+ // FK is not nullable — cannot set to null, so delete
177
+ // the orphaned entity to keep DB consistent
178
+ removedRelatedEntitySubject.mustBeRemoved = true;
179
+ }
174
180
  }
175
- else if (relation.inverseRelation.orphanedRowAction === "delete") {
181
+ else if (orphanedRowAction === "delete") {
176
182
  removedRelatedEntitySubject.mustBeRemoved = true;
177
183
  }
178
- else if (relation.inverseRelation.orphanedRowAction === "soft-delete") {
184
+ else if (orphanedRowAction === "soft-delete") {
179
185
  removedRelatedEntitySubject.canBeSoftRemoved = true;
180
186
  }
181
187
  this.subjects.push(removedRelatedEntitySubject);