typeorm 0.3.12-dev.ef64bfc → 0.3.13-dev.0619aca

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 (296) hide show
  1. package/browser/cli-ts-node-commonjs.js +0 -0
  2. package/browser/cli-ts-node-esm.js +0 -0
  3. package/browser/common/DeepPartial.d.ts +1 -1
  4. package/browser/common/EntityTarget.d.ts +1 -1
  5. package/browser/common/MixedList.d.ts +1 -1
  6. package/browser/common/NonNever.d.ts +1 -1
  7. package/browser/common/ObjectType.d.ts +1 -1
  8. package/browser/common/PickKeysByType.d.ts +6 -0
  9. package/browser/common/PickKeysByType.js +3 -0
  10. package/browser/common/PickKeysByType.js.map +1 -0
  11. package/browser/common/RelationType.d.ts +1 -1
  12. package/browser/connection/BaseConnectionOptions.d.ts +1 -1
  13. package/browser/connection/ConnectionOptions.d.ts +1 -1
  14. package/browser/container.d.ts +1 -1
  15. package/browser/data-source/DataSourceOptions.d.ts +1 -1
  16. package/browser/decorator/columns/PrimaryColumn.d.ts +1 -1
  17. package/browser/driver/Driver.d.ts +1 -1
  18. package/browser/driver/better-sqlite3/BetterSqlite3ConnectionOptions.d.ts +6 -0
  19. package/browser/driver/better-sqlite3/BetterSqlite3ConnectionOptions.js.map +1 -1
  20. package/browser/driver/better-sqlite3/BetterSqlite3Driver.js +3 -1
  21. package/browser/driver/better-sqlite3/BetterSqlite3Driver.js.map +1 -1
  22. package/browser/driver/mongodb/MongoDriver.d.ts +1 -1
  23. package/browser/driver/mongodb/MongoDriver.js.map +1 -1
  24. package/browser/driver/mongodb/typings.d.ts +6 -6
  25. package/browser/driver/oracle/OracleDriver.d.ts +1 -1
  26. package/browser/driver/oracle/OracleDriver.js.map +1 -1
  27. package/browser/driver/postgres/PostgresQueryRunner.js +1 -1
  28. package/browser/driver/postgres/PostgresQueryRunner.js.map +1 -1
  29. package/browser/driver/react-native/ReactNativeDriver.d.ts +219 -6
  30. package/browser/driver/react-native/ReactNativeDriver.js +662 -10
  31. package/browser/driver/react-native/ReactNativeDriver.js.map +1 -1
  32. package/browser/driver/react-native/ReactNativeQueryRunner.js.map +1 -1
  33. package/browser/driver/sap/SapDriver.d.ts +1 -1
  34. package/browser/driver/sap/SapDriver.js.map +1 -1
  35. package/browser/driver/spanner/SpannerDriver.d.ts +1 -1
  36. package/browser/driver/spanner/SpannerDriver.js.map +1 -1
  37. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.d.ts +1 -1
  38. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js +12 -0
  39. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
  40. package/browser/driver/sqlserver/SqlServerConnectionCredentialsOptions.d.ts +1 -1
  41. package/browser/driver/sqlserver/SqlServerDriver.d.ts +1 -1
  42. package/browser/driver/sqlserver/SqlServerDriver.js +7 -2
  43. package/browser/driver/sqlserver/SqlServerDriver.js.map +1 -1
  44. package/browser/driver/sqlserver/SqlServerQueryRunner.d.ts +2 -1
  45. package/browser/driver/sqlserver/SqlServerQueryRunner.js +31 -9
  46. package/browser/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  47. package/browser/driver/types/ColumnTypes.d.ts +7 -7
  48. package/browser/driver/types/DatabaseType.d.ts +1 -1
  49. package/browser/driver/types/GeoJsonTypes.d.ts +12 -12
  50. package/browser/driver/types/IsolationLevel.d.ts +1 -1
  51. package/browser/driver/types/ReplicationMode.d.ts +1 -1
  52. package/browser/driver/types/UpsertType.d.ts +1 -1
  53. package/browser/entity-manager/EntityManager.d.ts +18 -0
  54. package/browser/entity-manager/EntityManager.js +32 -0
  55. package/browser/entity-manager/EntityManager.js.map +1 -1
  56. package/browser/entity-manager/MongoEntityManager.js +4 -4
  57. package/browser/entity-manager/MongoEntityManager.js.map +1 -1
  58. package/browser/find-options/FindOperator.d.ts +1 -1
  59. package/browser/find-options/FindOperatorType.d.ts +1 -1
  60. package/browser/find-options/FindOperatorType.js.map +1 -1
  61. package/browser/find-options/FindOptionsOrder.d.ts +3 -3
  62. package/browser/find-options/FindOptionsOrder.js.map +1 -1
  63. package/browser/find-options/FindOptionsRelations.d.ts +3 -3
  64. package/browser/find-options/FindOptionsSelect.d.ts +3 -3
  65. package/browser/find-options/FindOptionsWhere.d.ts +6 -2
  66. package/browser/find-options/FindOptionsWhere.js.map +1 -1
  67. package/browser/find-options/OrderByCondition.d.ts +1 -1
  68. package/browser/find-options/mongodb/MongoFindOneOptions.d.ts +1 -1
  69. package/browser/find-options/operator/JsonContains.d.ts +6 -0
  70. package/browser/find-options/operator/JsonContains.js +10 -0
  71. package/browser/find-options/operator/JsonContains.js.map +1 -0
  72. package/browser/index.d.ts +3 -0
  73. package/browser/index.js +3 -0
  74. package/browser/index.js.map +1 -1
  75. package/browser/logger/AbstractLogger.d.ts +49 -0
  76. package/browser/logger/AbstractLogger.js +230 -0
  77. package/browser/logger/AbstractLogger.js.map +1 -0
  78. package/browser/logger/AdvancedConsoleLogger.d.ts +5 -33
  79. package/browser/logger/AdvancedConsoleLogger.js +41 -106
  80. package/browser/logger/AdvancedConsoleLogger.js.map +1 -1
  81. package/browser/logger/DebugLogger.d.ts +9 -29
  82. package/browser/logger/DebugLogger.js +56 -74
  83. package/browser/logger/DebugLogger.js.map +1 -1
  84. package/browser/logger/FileLogger.d.ts +6 -32
  85. package/browser/logger/FileLogger.js +50 -97
  86. package/browser/logger/FileLogger.js.map +1 -1
  87. package/browser/logger/Logger.d.ts +31 -0
  88. package/browser/logger/Logger.js.map +1 -1
  89. package/browser/logger/LoggerOptions.d.ts +3 -2
  90. package/browser/logger/LoggerOptions.js.map +1 -1
  91. package/browser/logger/SimpleConsoleLogger.d.ts +5 -33
  92. package/browser/logger/SimpleConsoleLogger.js +43 -106
  93. package/browser/logger/SimpleConsoleLogger.js.map +1 -1
  94. package/browser/metadata/types/DeferrableType.d.ts +1 -1
  95. package/browser/metadata/types/EventListenerTypes.d.ts +1 -1
  96. package/browser/metadata/types/OnDeleteType.d.ts +1 -1
  97. package/browser/metadata/types/OnUpdateType.d.ts +1 -1
  98. package/browser/metadata/types/PropertyTypeInFunction.d.ts +1 -1
  99. package/browser/metadata/types/RelationTypeInFunction.d.ts +1 -1
  100. package/browser/metadata/types/RelationTypes.d.ts +1 -1
  101. package/browser/metadata/types/TableTypes.d.ts +1 -1
  102. package/browser/metadata/types/TreeTypes.d.ts +1 -1
  103. package/browser/metadata-args/types/ColumnMode.d.ts +1 -1
  104. package/browser/metadata-builder/RelationJoinColumnBuilder.js +2 -1
  105. package/browser/metadata-builder/RelationJoinColumnBuilder.js.map +1 -1
  106. package/browser/migration/MigrationExecutor.js +1 -1
  107. package/browser/migration/MigrationExecutor.js.map +1 -1
  108. package/browser/naming-strategy/LegacyOracleNamingStrategy.d.ts +21 -0
  109. package/browser/naming-strategy/LegacyOracleNamingStrategy.js +46 -0
  110. package/browser/naming-strategy/LegacyOracleNamingStrategy.js.map +1 -0
  111. package/browser/persistence/SubjectExecutor.js +6 -6
  112. package/browser/persistence/SubjectExecutor.js.map +1 -1
  113. package/browser/persistence/SubjectTopoligicalSorter.js +2 -6
  114. package/browser/persistence/SubjectTopoligicalSorter.js.map +1 -1
  115. package/browser/platform/BrowserPlatformTools.js +2 -2
  116. package/browser/platform/BrowserPlatformTools.js.map +1 -1
  117. package/browser/platform/PlatformTools.d.ts +3 -1
  118. package/browser/platform/PlatformTools.js +11 -2
  119. package/browser/platform/PlatformTools.js.map +1 -1
  120. package/browser/query-builder/InsertOrUpdateOptions.d.ts +1 -1
  121. package/browser/query-builder/QueryBuilder.js +2 -0
  122. package/browser/query-builder/QueryBuilder.js.map +1 -1
  123. package/browser/query-builder/QueryPartialEntity.d.ts +3 -3
  124. package/browser/query-builder/SelectQueryBuilder.d.ts +1 -1
  125. package/browser/query-builder/SelectQueryBuilder.js +8 -4
  126. package/browser/query-builder/SelectQueryBuilder.js.map +1 -1
  127. package/browser/query-builder/SelectQueryBuilderOption.d.ts +1 -1
  128. package/browser/query-builder/WhereClause.d.ts +3 -3
  129. package/browser/query-builder/WhereClause.js.map +1 -1
  130. package/browser/query-runner/BaseQueryRunner.d.ts +2 -1
  131. package/browser/query-runner/BaseQueryRunner.js +5 -2
  132. package/browser/query-runner/BaseQueryRunner.js.map +1 -1
  133. package/browser/repository/BaseEntity.d.ts +25 -0
  134. package/browser/repository/BaseEntity.js +24 -0
  135. package/browser/repository/BaseEntity.js.map +1 -1
  136. package/browser/repository/EntityId.d.ts +1 -1
  137. package/browser/repository/Repository.d.ts +17 -0
  138. package/browser/repository/Repository.js +32 -8
  139. package/browser/repository/Repository.js.map +1 -1
  140. package/browser/subscriber/Broadcaster.d.ts +6 -6
  141. package/browser/subscriber/Broadcaster.js +12 -12
  142. package/browser/subscriber/Broadcaster.js.map +1 -1
  143. package/browser/util/DateUtils.d.ts +12 -0
  144. package/browser/util/DateUtils.js +20 -16
  145. package/browser/util/DateUtils.js.map +1 -1
  146. package/browser/util/VersionUtils.d.ts +1 -1
  147. package/cli-ts-node-commonjs.js +0 -0
  148. package/cli-ts-node-esm.js +0 -0
  149. package/cli.js +0 -0
  150. package/commands/CommandUtils.d.ts +1 -1
  151. package/commands/MigrationCreateCommand.d.ts +1 -1
  152. package/commands/MigrationGenerateCommand.d.ts +1 -1
  153. package/common/DeepPartial.d.ts +1 -1
  154. package/common/EntityTarget.d.ts +1 -1
  155. package/common/MixedList.d.ts +1 -1
  156. package/common/NonNever.d.ts +1 -1
  157. package/common/ObjectType.d.ts +1 -1
  158. package/common/PickKeysByType.d.ts +6 -0
  159. package/common/PickKeysByType.js +4 -0
  160. package/common/PickKeysByType.js.map +1 -0
  161. package/common/RelationType.d.ts +1 -1
  162. package/connection/BaseConnectionOptions.d.ts +1 -1
  163. package/connection/ConnectionOptions.d.ts +1 -1
  164. package/container.d.ts +1 -1
  165. package/data-source/DataSourceOptions.d.ts +1 -1
  166. package/decorator/columns/PrimaryColumn.d.ts +1 -1
  167. package/driver/Driver.d.ts +1 -1
  168. package/driver/better-sqlite3/BetterSqlite3ConnectionOptions.d.ts +6 -0
  169. package/driver/better-sqlite3/BetterSqlite3ConnectionOptions.js.map +1 -1
  170. package/driver/better-sqlite3/BetterSqlite3Driver.js +3 -1
  171. package/driver/better-sqlite3/BetterSqlite3Driver.js.map +1 -1
  172. package/driver/mongodb/MongoDriver.d.ts +1 -1
  173. package/driver/mongodb/MongoDriver.js.map +1 -1
  174. package/driver/mongodb/typings.d.ts +6 -6
  175. package/driver/oracle/OracleDriver.d.ts +1 -1
  176. package/driver/oracle/OracleDriver.js.map +1 -1
  177. package/driver/postgres/PostgresQueryRunner.js +1 -1
  178. package/driver/postgres/PostgresQueryRunner.js.map +1 -1
  179. package/driver/react-native/ReactNativeDriver.d.ts +219 -6
  180. package/driver/react-native/ReactNativeDriver.js +663 -11
  181. package/driver/react-native/ReactNativeDriver.js.map +1 -1
  182. package/driver/react-native/ReactNativeQueryRunner.js.map +1 -1
  183. package/driver/sap/SapDriver.d.ts +1 -1
  184. package/driver/sap/SapDriver.js.map +1 -1
  185. package/driver/spanner/SpannerDriver.d.ts +1 -1
  186. package/driver/spanner/SpannerDriver.js.map +1 -1
  187. package/driver/sqlite-abstract/AbstractSqliteDriver.d.ts +1 -1
  188. package/driver/sqlite-abstract/AbstractSqliteDriver.js +12 -0
  189. package/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
  190. package/driver/sqlserver/SqlServerConnectionCredentialsOptions.d.ts +1 -1
  191. package/driver/sqlserver/SqlServerDriver.d.ts +1 -1
  192. package/driver/sqlserver/SqlServerDriver.js +7 -2
  193. package/driver/sqlserver/SqlServerDriver.js.map +1 -1
  194. package/driver/sqlserver/SqlServerQueryRunner.d.ts +2 -1
  195. package/driver/sqlserver/SqlServerQueryRunner.js +31 -9
  196. package/driver/sqlserver/SqlServerQueryRunner.js.map +1 -1
  197. package/driver/types/ColumnTypes.d.ts +7 -7
  198. package/driver/types/DatabaseType.d.ts +1 -1
  199. package/driver/types/GeoJsonTypes.d.ts +12 -12
  200. package/driver/types/IsolationLevel.d.ts +1 -1
  201. package/driver/types/ReplicationMode.d.ts +1 -1
  202. package/driver/types/UpsertType.d.ts +1 -1
  203. package/entity-manager/EntityManager.d.ts +18 -0
  204. package/entity-manager/EntityManager.js +32 -0
  205. package/entity-manager/EntityManager.js.map +1 -1
  206. package/entity-manager/MongoEntityManager.js +4 -4
  207. package/entity-manager/MongoEntityManager.js.map +1 -1
  208. package/find-options/FindOperator.d.ts +1 -1
  209. package/find-options/FindOperatorType.d.ts +1 -1
  210. package/find-options/FindOperatorType.js.map +1 -1
  211. package/find-options/FindOptionsOrder.d.ts +3 -3
  212. package/find-options/FindOptionsOrder.js.map +1 -1
  213. package/find-options/FindOptionsRelations.d.ts +3 -3
  214. package/find-options/FindOptionsSelect.d.ts +3 -3
  215. package/find-options/FindOptionsWhere.d.ts +6 -2
  216. package/find-options/FindOptionsWhere.js.map +1 -1
  217. package/find-options/OrderByCondition.d.ts +1 -1
  218. package/find-options/mongodb/MongoFindOneOptions.d.ts +1 -1
  219. package/find-options/operator/JsonContains.d.ts +6 -0
  220. package/find-options/operator/JsonContains.js +14 -0
  221. package/find-options/operator/JsonContains.js.map +1 -0
  222. package/index.d.ts +3 -0
  223. package/index.js +5 -1
  224. package/index.js.map +1 -1
  225. package/index.mjs +6 -0
  226. package/logger/AbstractLogger.d.ts +49 -0
  227. package/logger/AbstractLogger.js +234 -0
  228. package/logger/AbstractLogger.js.map +1 -0
  229. package/logger/AdvancedConsoleLogger.d.ts +5 -33
  230. package/logger/AdvancedConsoleLogger.js +41 -106
  231. package/logger/AdvancedConsoleLogger.js.map +1 -1
  232. package/logger/DebugLogger.d.ts +9 -29
  233. package/logger/DebugLogger.js +56 -75
  234. package/logger/DebugLogger.js.map +1 -1
  235. package/logger/FileLogger.d.ts +6 -32
  236. package/logger/FileLogger.js +50 -97
  237. package/logger/FileLogger.js.map +1 -1
  238. package/logger/Logger.d.ts +31 -0
  239. package/logger/Logger.js.map +1 -1
  240. package/logger/LoggerOptions.d.ts +3 -2
  241. package/logger/LoggerOptions.js.map +1 -1
  242. package/logger/SimpleConsoleLogger.d.ts +5 -33
  243. package/logger/SimpleConsoleLogger.js +43 -106
  244. package/logger/SimpleConsoleLogger.js.map +1 -1
  245. package/metadata/types/DeferrableType.d.ts +1 -1
  246. package/metadata/types/EventListenerTypes.d.ts +1 -1
  247. package/metadata/types/OnDeleteType.d.ts +1 -1
  248. package/metadata/types/OnUpdateType.d.ts +1 -1
  249. package/metadata/types/PropertyTypeInFunction.d.ts +1 -1
  250. package/metadata/types/RelationTypeInFunction.d.ts +1 -1
  251. package/metadata/types/RelationTypes.d.ts +1 -1
  252. package/metadata/types/TableTypes.d.ts +1 -1
  253. package/metadata/types/TreeTypes.d.ts +1 -1
  254. package/metadata-args/types/ColumnMode.d.ts +1 -1
  255. package/metadata-builder/RelationJoinColumnBuilder.js +2 -1
  256. package/metadata-builder/RelationJoinColumnBuilder.js.map +1 -1
  257. package/migration/MigrationExecutor.js +1 -1
  258. package/migration/MigrationExecutor.js.map +1 -1
  259. package/naming-strategy/LegacyOracleNamingStrategy.d.ts +21 -0
  260. package/naming-strategy/LegacyOracleNamingStrategy.js +50 -0
  261. package/naming-strategy/LegacyOracleNamingStrategy.js.map +1 -0
  262. package/package.json +1 -1
  263. package/persistence/SubjectExecutor.js +6 -6
  264. package/persistence/SubjectExecutor.js.map +1 -1
  265. package/persistence/SubjectTopoligicalSorter.js +2 -6
  266. package/persistence/SubjectTopoligicalSorter.js.map +1 -1
  267. package/platform/PlatformTools.d.ts +3 -1
  268. package/platform/PlatformTools.js +11 -2
  269. package/platform/PlatformTools.js.map +1 -1
  270. package/query-builder/InsertOrUpdateOptions.d.ts +1 -1
  271. package/query-builder/QueryBuilder.js +2 -0
  272. package/query-builder/QueryBuilder.js.map +1 -1
  273. package/query-builder/QueryPartialEntity.d.ts +3 -3
  274. package/query-builder/SelectQueryBuilder.d.ts +1 -1
  275. package/query-builder/SelectQueryBuilder.js +8 -4
  276. package/query-builder/SelectQueryBuilder.js.map +1 -1
  277. package/query-builder/SelectQueryBuilderOption.d.ts +1 -1
  278. package/query-builder/WhereClause.d.ts +3 -3
  279. package/query-builder/WhereClause.js.map +1 -1
  280. package/query-runner/BaseQueryRunner.d.ts +2 -1
  281. package/query-runner/BaseQueryRunner.js +5 -2
  282. package/query-runner/BaseQueryRunner.js.map +1 -1
  283. package/repository/BaseEntity.d.ts +25 -0
  284. package/repository/BaseEntity.js +24 -0
  285. package/repository/BaseEntity.js.map +1 -1
  286. package/repository/EntityId.d.ts +1 -1
  287. package/repository/Repository.d.ts +17 -0
  288. package/repository/Repository.js +32 -8
  289. package/repository/Repository.js.map +1 -1
  290. package/subscriber/Broadcaster.d.ts +6 -6
  291. package/subscriber/Broadcaster.js +12 -12
  292. package/subscriber/Broadcaster.js.map +1 -1
  293. package/util/DateUtils.d.ts +12 -0
  294. package/util/DateUtils.js +20 -16
  295. package/util/DateUtils.js.map +1 -1
  296. package/util/VersionUtils.d.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../browser/src/repository/Repository.ts"],"names":[],"mappings":"AAkBA;;GAEG;AACH,MAAM,OAAO,UAAU;IAiCnB,4EAA4E;IAC5E,cAAc;IACd,4EAA4E;IAE5E,YACI,MAA4B,EAC5B,OAAsB,EACtB,WAAyB;QAEzB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;IAClC,CAAC;IAvBD,4EAA4E;IAC5E,YAAY;IACZ,4EAA4E;IAE5E;;OAEG;IACH,IAAI,QAAQ;QACR,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAC3D,CAAC;IAgBD,4EAA4E;IAC5E,iBAAiB;IACjB,4EAA4E;IAE5E;;OAEG;IACH,kBAAkB,CACd,KAAc,EACd,WAAyB;QAEzB,OAAO,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAClC,IAAI,CAAC,QAAQ,CAAC,MAAa,EAC3B,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,EACjC,WAAW,IAAI,IAAI,CAAC,WAAW,CAClC,CAAA;IACL,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,MAAc;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC3D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAc;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC3D,CAAC;IAmBD;;;OAGG;IACH,MAAM,CACF,iCAE2B;QAE3B,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CACtB,IAAI,CAAC,QAAQ,CAAC,MAAa,EAC3B,iCAAwC,CAC3C,CAAA;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CACD,eAAuB,EACvB,GAAG,WAAkC;QAErC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CACrB,IAAI,CAAC,QAAQ,CAAC,MAAa,EAC3B,eAAe,EACf,GAAG,WAAW,CACjB,CAAA;IACL,CAAC;IAED;;;;;;;;OAQG;IACH,OAAO,CAAC,UAA+B;QACnC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAa,EAAE,UAAU,CAAC,CAAA;IACxE,CAAC;IAsCD;;OAEG;IACH,IAAI,CACA,gBAAyB,EACzB,OAAqB;QAErB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CACpB,IAAI,CAAC,QAAQ,CAAC,MAAa,EAC3B,gBAAuB,EACvB,OAAO,CACV,CAAA;IACL,CAAC;IAYD;;OAEG;IACH,MAAM,CACF,gBAAmC,EACnC,OAAuB;QAEvB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CACtB,IAAI,CAAC,QAAQ,CAAC,MAAa,EAC3B,gBAAuB,EACvB,OAAO,CACV,CAAA;IACL,CAAC;IAkCD;;OAEG;IACH,UAAU,CACN,gBAAyB,EACzB,OAAqB;QAErB,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAC1B,IAAI,CAAC,QAAQ,CAAC,MAAa,EAC3B,gBAAuB,EACvB,OAAO,CACV,CAAA;IACL,CAAC;IAkCD;;OAEG;IACH,OAAO,CACH,gBAAyB,EACzB,OAAqB;QAErB,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CACvB,IAAI,CAAC,QAAQ,CAAC,MAAa,EAC3B,gBAAuB,EACvB,OAAO,CACV,CAAA;IACL,CAAC;IAED;;;;;OAKG;IACH,MAAM,CACF,MAEsC;QAEtC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAa,EAAE,MAAM,CAAC,CAAA;IACnE,CAAC;IAED;;;;;OAKG;IACH,MAAM,CACF,QAS8B,EAC9B,aAA6C;QAE7C,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CACtB,IAAI,CAAC,QAAQ,CAAC,MAAa,EAC3B,QAAe,EACf,aAAa,CAChB,CAAA;IACL,CAAC;IAED;;;;OAIG;IACH,MAAM,CACF,gBAEsC,EACtC,sBAAwD;QAExD,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CACtB,IAAI,CAAC,QAAQ,CAAC,MAAa,EAC3B,gBAAgB,EAChB,sBAAsB,CACzB,CAAA;IACL,CAAC;IAED;;;;;OAKG;IACH,MAAM,CACF,QAS8B;QAE9B,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAa,EAAE,QAAe,CAAC,CAAA;IAC5E,CAAC;IAED;;;;;OAKG;IACH,UAAU,CACN,QAS8B;QAE9B,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAC1B,IAAI,CAAC,QAAQ,CAAC,MAAa,EAC3B,QAAe,CAClB,CAAA;IACL,CAAC;IAED;;;;;OAKG;IACH,OAAO,CACH,QAS8B;QAE9B,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CACvB,IAAI,CAAC,QAAQ,CAAC,MAAa,EAC3B,QAAe,CAClB,CAAA;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAiC;QACnC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7D,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,OAAiC;QACnC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC5D,CAAC;IAED;;;OAGG;IACH,OAAO,CACH,KAA4D;QAE5D,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IAC5D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI,CAAC,OAAiC;QACxC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC3D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CACR,KAA4D;QAE5D,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IAC3D,CAAC;IAED;;;;OAIG;IACH,YAAY,CACR,OAAiC;QAEjC,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACnE,CAAC;IAED;;;;OAIG;IACH,cAAc,CACV,KAA4D;QAE5D,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IACnE,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,SAAS,CAAC,GAAU;QACtB,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC5D,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,OAAO,CAAC,OAA+B;QACzC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9D,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,SAAS,CACX,KAA4D;QAE5D,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IAC9D,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,WAAW,CACb,EAAqC;QAErC,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IAC7D,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,aAAa,CAAC,OAA+B;QAC/C,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACpE,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,eAAe,CACjB,KAA4D;QAE5D,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IACpE,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,KAAa,EAAE,UAAkB;QACnC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,CAAC,CAAA;IAChD,CAAC;IAED;;;;;OAKG;IACH,KAAK;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;IACnD,CAAC;IAED;;OAEG;IACH,SAAS,CACL,UAAoC,EACpC,YAAoB,EACpB,KAAsB;QAEtB,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CACzB,IAAI,CAAC,QAAQ,CAAC,MAAM,EACpB,UAAU,EACV,YAAY,EACZ,KAAK,CACR,CAAA;IACL,CAAC;IAED;;OAEG;IACH,SAAS,CACL,UAAoC,EACpC,YAAoB,EACpB,KAAsB;QAEtB,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CACzB,IAAI,CAAC,QAAQ,CAAC,MAAM,EACpB,UAAU,EACV,YAAY,EACZ,KAAK,CACR,CAAA;IACL,CAAC;IAED;;OAEG;IACH,MAAM,CACF,MAA4D;QAE5D,WAAW;QACX,eAAe;QACf,gBAAgB;QAChB,KAAK;QACL,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAkD,CAAA;QACxE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,IAAI,CAAA;QAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAM,SAAQ,QAAQ;SAAG,CAAC,CACvC,MAAM,EACN,OAAO,EACP,WAAW,CACd,CAAA;QACD,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;QAC1B,OAAO,GAAU,CAAA;IACrB,CAAC;CACJ","file":"Repository.js","sourcesContent":["import { FindManyOptions } from \"../find-options/FindManyOptions\"\nimport { ObjectLiteral } from \"../common/ObjectLiteral\"\nimport { FindOneOptions } from \"../find-options/FindOneOptions\"\nimport { DeepPartial } from \"../common/DeepPartial\"\nimport { SaveOptions } from \"./SaveOptions\"\nimport { RemoveOptions } from \"./RemoveOptions\"\nimport { EntityManager } from \"../entity-manager/EntityManager\"\nimport { QueryRunner } from \"../query-runner/QueryRunner\"\nimport { SelectQueryBuilder } from \"../query-builder/SelectQueryBuilder\"\nimport { DeleteResult } from \"../query-builder/result/DeleteResult\"\nimport { UpdateResult } from \"../query-builder/result/UpdateResult\"\nimport { InsertResult } from \"../query-builder/result/InsertResult\"\nimport { QueryDeepPartialEntity } from \"../query-builder/QueryPartialEntity\"\nimport { ObjectID } from \"../driver/mongodb/typings\"\nimport { FindOptionsWhere } from \"../find-options/FindOptionsWhere\"\nimport { UpsertOptions } from \"./UpsertOptions\"\nimport { EntityTarget } from \"../common/EntityTarget\"\n\n/**\n * Repository is supposed to work with your entity objects. Find entities, insert, update, delete, etc.\n */\nexport class Repository<Entity extends ObjectLiteral> {\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n\n /**\n * Entity target that is managed by this repository.\n * If this repository manages entity from schema,\n * then it returns a name of that schema instead.\n */\n readonly target: EntityTarget<Entity>\n\n /**\n * Entity Manager used by this repository.\n */\n readonly manager: EntityManager\n\n /**\n * Query runner provider used for this repository.\n */\n readonly queryRunner?: QueryRunner\n\n // -------------------------------------------------------------------------\n // Accessors\n // -------------------------------------------------------------------------\n\n /**\n * Entity metadata of the entity current repository manages.\n */\n get metadata() {\n return this.manager.connection.getMetadata(this.target)\n }\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(\n target: EntityTarget<Entity>,\n manager: EntityManager,\n queryRunner?: QueryRunner,\n ) {\n this.target = target\n this.manager = manager\n this.queryRunner = queryRunner\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates a new query builder that can be used to build a SQL query.\n */\n createQueryBuilder(\n alias?: string,\n queryRunner?: QueryRunner,\n ): SelectQueryBuilder<Entity> {\n return this.manager.createQueryBuilder<Entity>(\n this.metadata.target as any,\n alias || this.metadata.targetName,\n queryRunner || this.queryRunner,\n )\n }\n\n /**\n * Checks if entity has an id.\n * If entity composite compose ids, it will check them all.\n */\n hasId(entity: Entity): boolean {\n return this.manager.hasId(this.metadata.target, entity)\n }\n\n /**\n * Gets entity mixed id.\n */\n getId(entity: Entity): any {\n return this.manager.getId(this.metadata.target, entity)\n }\n\n /**\n * Creates a new entity instance.\n */\n create(): Entity\n\n /**\n * Creates new entities and copies all entity properties from given objects into their new entities.\n * Note that it copies only properties that are present in entity schema.\n */\n create(entityLikeArray: DeepPartial<Entity>[]): Entity[]\n\n /**\n * Creates a new entity instance and copies all entity properties from this object into a new entity.\n * Note that it copies only properties that are present in entity schema.\n */\n create(entityLike: DeepPartial<Entity>): Entity\n\n /**\n * Creates a new entity instance or instances.\n * Can copy properties from the given object into new entities.\n */\n create(\n plainEntityLikeOrPlainEntityLikes?:\n | DeepPartial<Entity>\n | DeepPartial<Entity>[],\n ): Entity | Entity[] {\n return this.manager.create<any>(\n this.metadata.target as any,\n plainEntityLikeOrPlainEntityLikes as any,\n )\n }\n\n /**\n * Merges multiple entities (or entity-like objects) into a given entity.\n */\n merge(\n mergeIntoEntity: Entity,\n ...entityLikes: DeepPartial<Entity>[]\n ): Entity {\n return this.manager.merge(\n this.metadata.target as any,\n mergeIntoEntity,\n ...entityLikes,\n )\n }\n\n /**\n * Creates a new entity from the given plain javascript object. If entity already exist in the database, then\n * it loads it (and everything related to it), replaces all values with the new ones from the given object\n * and returns this new entity. This new entity is actually a loaded from the db entity with all properties\n * replaced from the new object.\n *\n * Note that given entity-like object must have an entity id / primary key to find entity by.\n * Returns undefined if entity with given id was not found.\n */\n preload(entityLike: DeepPartial<Entity>): Promise<Entity | undefined> {\n return this.manager.preload(this.metadata.target as any, entityLike)\n }\n\n /**\n * Saves all given entities in the database.\n * If entities do not exist in the database then inserts, otherwise updates.\n */\n save<T extends DeepPartial<Entity>>(\n entities: T[],\n options: SaveOptions & { reload: false },\n ): Promise<T[]>\n\n /**\n * Saves all given entities in the database.\n * If entities do not exist in the database then inserts, otherwise updates.\n */\n save<T extends DeepPartial<Entity>>(\n entities: T[],\n options?: SaveOptions,\n ): Promise<(T & Entity)[]>\n\n /**\n * Saves a given entity in the database.\n * If entity does not exist in the database then inserts, otherwise updates.\n */\n save<T extends DeepPartial<Entity>>(\n entity: T,\n options: SaveOptions & { reload: false },\n ): Promise<T>\n\n /**\n * Saves a given entity in the database.\n * If entity does not exist in the database then inserts, otherwise updates.\n */\n save<T extends DeepPartial<Entity>>(\n entity: T,\n options?: SaveOptions,\n ): Promise<T & Entity>\n\n /**\n * Saves one or many given entities.\n */\n save<T extends DeepPartial<Entity>>(\n entityOrEntities: T | T[],\n options?: SaveOptions,\n ): Promise<T | T[]> {\n return this.manager.save<Entity, T>(\n this.metadata.target as any,\n entityOrEntities as any,\n options,\n )\n }\n\n /**\n * Removes a given entities from the database.\n */\n remove(entities: Entity[], options?: RemoveOptions): Promise<Entity[]>\n\n /**\n * Removes a given entity from the database.\n */\n remove(entity: Entity, options?: RemoveOptions): Promise<Entity>\n\n /**\n * Removes one or many given entities.\n */\n remove(\n entityOrEntities: Entity | Entity[],\n options?: RemoveOptions,\n ): Promise<Entity | Entity[]> {\n return this.manager.remove(\n this.metadata.target as any,\n entityOrEntities as any,\n options,\n )\n }\n\n /**\n * Records the delete date of all given entities.\n */\n softRemove<T extends DeepPartial<Entity>>(\n entities: T[],\n options: SaveOptions & { reload: false },\n ): Promise<T[]>\n\n /**\n * Records the delete date of all given entities.\n */\n softRemove<T extends DeepPartial<Entity>>(\n entities: T[],\n options?: SaveOptions,\n ): Promise<(T & Entity)[]>\n\n /**\n * Records the delete date of a given entity.\n */\n softRemove<T extends DeepPartial<Entity>>(\n entity: T,\n options: SaveOptions & { reload: false },\n ): Promise<T>\n\n /**\n * Records the delete date of a given entity.\n */\n softRemove<T extends DeepPartial<Entity>>(\n entity: T,\n options?: SaveOptions,\n ): Promise<T & Entity>\n\n /**\n * Records the delete date of one or many given entities.\n */\n softRemove<T extends DeepPartial<Entity>>(\n entityOrEntities: T | T[],\n options?: SaveOptions,\n ): Promise<T | T[]> {\n return this.manager.softRemove<Entity, T>(\n this.metadata.target as any,\n entityOrEntities as any,\n options,\n )\n }\n\n /**\n * Recovers all given entities in the database.\n */\n recover<T extends DeepPartial<Entity>>(\n entities: T[],\n options: SaveOptions & { reload: false },\n ): Promise<T[]>\n\n /**\n * Recovers all given entities in the database.\n */\n recover<T extends DeepPartial<Entity>>(\n entities: T[],\n options?: SaveOptions,\n ): Promise<(T & Entity)[]>\n\n /**\n * Recovers a given entity in the database.\n */\n recover<T extends DeepPartial<Entity>>(\n entity: T,\n options: SaveOptions & { reload: false },\n ): Promise<T>\n\n /**\n * Recovers a given entity in the database.\n */\n recover<T extends DeepPartial<Entity>>(\n entity: T,\n options?: SaveOptions,\n ): Promise<T & Entity>\n\n /**\n * Recovers one or many given entities.\n */\n recover<T extends DeepPartial<Entity>>(\n entityOrEntities: T | T[],\n options?: SaveOptions,\n ): Promise<T | T[]> {\n return this.manager.recover<Entity, T>(\n this.metadata.target as any,\n entityOrEntities as any,\n options,\n )\n }\n\n /**\n * Inserts a given entity into the database.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient INSERT query.\n * Does not check if entity exist in the database, so query will fail if duplicate entity is being inserted.\n */\n insert(\n entity:\n | QueryDeepPartialEntity<Entity>\n | QueryDeepPartialEntity<Entity>[],\n ): Promise<InsertResult> {\n return this.manager.insert(this.metadata.target as any, entity)\n }\n\n /**\n * Updates entity partially. Entity can be found by a given conditions.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient UPDATE query.\n * Does not check if entity exist in the database.\n */\n update(\n criteria:\n | string\n | string[]\n | number\n | number[]\n | Date\n | Date[]\n | ObjectID\n | ObjectID[]\n | FindOptionsWhere<Entity>,\n partialEntity: QueryDeepPartialEntity<Entity>,\n ): Promise<UpdateResult> {\n return this.manager.update(\n this.metadata.target as any,\n criteria as any,\n partialEntity,\n )\n }\n\n /**\n * Inserts a given entity into the database, unless a unique constraint conflicts then updates the entity\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient INSERT ... ON CONFLICT DO UPDATE/ON DUPLICATE KEY UPDATE query.\n */\n upsert(\n entityOrEntities:\n | QueryDeepPartialEntity<Entity>\n | QueryDeepPartialEntity<Entity>[],\n conflictPathsOrOptions: string[] | UpsertOptions<Entity>,\n ): Promise<InsertResult> {\n return this.manager.upsert(\n this.metadata.target as any,\n entityOrEntities,\n conflictPathsOrOptions,\n )\n }\n\n /**\n * Deletes entities by a given criteria.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient DELETE query.\n * Does not check if entity exist in the database.\n */\n delete(\n criteria:\n | string\n | string[]\n | number\n | number[]\n | Date\n | Date[]\n | ObjectID\n | ObjectID[]\n | FindOptionsWhere<Entity>,\n ): Promise<DeleteResult> {\n return this.manager.delete(this.metadata.target as any, criteria as any)\n }\n\n /**\n * Records the delete date of entities by a given criteria.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient SOFT-DELETE query.\n * Does not check if entity exist in the database.\n */\n softDelete(\n criteria:\n | string\n | string[]\n | number\n | number[]\n | Date\n | Date[]\n | ObjectID\n | ObjectID[]\n | FindOptionsWhere<Entity>,\n ): Promise<UpdateResult> {\n return this.manager.softDelete(\n this.metadata.target as any,\n criteria as any,\n )\n }\n\n /**\n * Restores entities by a given criteria.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient SOFT-DELETE query.\n * Does not check if entity exist in the database.\n */\n restore(\n criteria:\n | string\n | string[]\n | number\n | number[]\n | Date\n | Date[]\n | ObjectID\n | ObjectID[]\n | FindOptionsWhere<Entity>,\n ): Promise<UpdateResult> {\n return this.manager.restore(\n this.metadata.target as any,\n criteria as any,\n )\n }\n\n /**\n * Checks whether any entity exists that match given options.\n */\n exist(options?: FindManyOptions<Entity>): Promise<boolean> {\n return this.manager.exists(this.metadata.target, options)\n }\n\n /**\n * Counts entities that match given options.\n * Useful for pagination.\n */\n count(options?: FindManyOptions<Entity>): Promise<number> {\n return this.manager.count(this.metadata.target, options)\n }\n\n /**\n * Counts entities that match given conditions.\n * Useful for pagination.\n */\n countBy(\n where: FindOptionsWhere<Entity> | FindOptionsWhere<Entity>[],\n ): Promise<number> {\n return this.manager.countBy(this.metadata.target, where)\n }\n\n /**\n * Finds entities that match given find options.\n */\n async find(options?: FindManyOptions<Entity>): Promise<Entity[]> {\n return this.manager.find(this.metadata.target, options)\n }\n\n /**\n * Finds entities that match given find options.\n */\n async findBy(\n where: FindOptionsWhere<Entity> | FindOptionsWhere<Entity>[],\n ): Promise<Entity[]> {\n return this.manager.findBy(this.metadata.target, where)\n }\n\n /**\n * Finds entities that match given find options.\n * Also counts all entities that match given conditions,\n * but ignores pagination settings (from and take options).\n */\n findAndCount(\n options?: FindManyOptions<Entity>,\n ): Promise<[Entity[], number]> {\n return this.manager.findAndCount(this.metadata.target, options)\n }\n\n /**\n * Finds entities that match given WHERE conditions.\n * Also counts all entities that match given conditions,\n * but ignores pagination settings (from and take options).\n */\n findAndCountBy(\n where: FindOptionsWhere<Entity> | FindOptionsWhere<Entity>[],\n ): Promise<[Entity[], number]> {\n return this.manager.findAndCountBy(this.metadata.target, where)\n }\n\n /**\n * Finds entities with ids.\n * Optionally find options or conditions can be applied.\n *\n * @deprecated use `findBy` method instead in conjunction with `In` operator, for example:\n *\n * .findBy({\n * id: In([1, 2, 3])\n * })\n */\n async findByIds(ids: any[]): Promise<Entity[]> {\n return this.manager.findByIds(this.metadata.target, ids)\n }\n\n /**\n * Finds first entity by a given find options.\n * If entity was not found in the database - returns null.\n */\n async findOne(options: FindOneOptions<Entity>): Promise<Entity | null> {\n return this.manager.findOne(this.metadata.target, options)\n }\n\n /**\n * Finds first entity that matches given where condition.\n * If entity was not found in the database - returns null.\n */\n async findOneBy(\n where: FindOptionsWhere<Entity> | FindOptionsWhere<Entity>[],\n ): Promise<Entity | null> {\n return this.manager.findOneBy(this.metadata.target, where)\n }\n\n /**\n * Finds first entity that matches given id.\n * If entity was not found in the database - returns null.\n *\n * @deprecated use `findOneBy` method instead in conjunction with `In` operator, for example:\n *\n * .findOneBy({\n * id: 1 // where \"id\" is your primary column name\n * })\n */\n async findOneById(\n id: number | string | Date | ObjectID,\n ): Promise<Entity | null> {\n return this.manager.findOneById(this.metadata.target, id)\n }\n\n /**\n * Finds first entity by a given find options.\n * If entity was not found in the database - rejects with error.\n */\n async findOneOrFail(options: FindOneOptions<Entity>): Promise<Entity> {\n return this.manager.findOneOrFail(this.metadata.target, options)\n }\n\n /**\n * Finds first entity that matches given where condition.\n * If entity was not found in the database - rejects with error.\n */\n async findOneByOrFail(\n where: FindOptionsWhere<Entity> | FindOptionsWhere<Entity>[],\n ): Promise<Entity> {\n return this.manager.findOneByOrFail(this.metadata.target, where)\n }\n\n /**\n * Executes a raw SQL query and returns a raw database results.\n * Raw query execution is supported only by relational databases (MongoDB is not supported).\n */\n query(query: string, parameters?: any[]): Promise<any> {\n return this.manager.query(query, parameters)\n }\n\n /**\n * Clears all the data from the given table/collection (truncates/drops it).\n *\n * Note: this method uses TRUNCATE and may not work as you expect in transactions on some platforms.\n * @see https://stackoverflow.com/a/5972738/925151\n */\n clear(): Promise<void> {\n return this.manager.clear(this.metadata.target)\n }\n\n /**\n * Increments some column by provided value of the entities matched given conditions.\n */\n increment(\n conditions: FindOptionsWhere<Entity>,\n propertyPath: string,\n value: number | string,\n ): Promise<UpdateResult> {\n return this.manager.increment(\n this.metadata.target,\n conditions,\n propertyPath,\n value,\n )\n }\n\n /**\n * Decrements some column by provided value of the entities matched given conditions.\n */\n decrement(\n conditions: FindOptionsWhere<Entity>,\n propertyPath: string,\n value: number | string,\n ): Promise<UpdateResult> {\n return this.manager.decrement(\n this.metadata.target,\n conditions,\n propertyPath,\n value,\n )\n }\n\n /**\n * Extends repository with provided functions.\n */\n extend<CustomRepository>(\n custom: CustomRepository & ThisType<this & CustomRepository>,\n ): this & CustomRepository {\n // return {\n // ...this,\n // ...custom\n // };\n const thisRepo = this.constructor as new (...args: any[]) => typeof this\n const { target, manager, queryRunner } = this\n const cls = new (class extends thisRepo {})(\n target,\n manager,\n queryRunner,\n )\n Object.assign(cls, custom)\n return cls as any\n }\n}\n"],"sourceRoot":".."}
1
+ {"version":3,"sources":["../browser/src/repository/Repository.ts"],"names":[],"mappings":"AAmBA;;GAEG;AACH,MAAM,OAAO,UAAU;IAsBnB,4EAA4E;IAC5E,YAAY;IACZ,4EAA4E;IAE5E;;OAEG;IACH,IAAI,QAAQ;QACR,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAC3D,CAAC;IAED,4EAA4E;IAC5E,cAAc;IACd,4EAA4E;IAE5E,YACI,MAA4B,EAC5B,OAAsB,EACtB,WAAyB;QAEzB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;IAClC,CAAC;IAED,4EAA4E;IAC5E,iBAAiB;IACjB,4EAA4E;IAE5E;;OAEG;IACH,kBAAkB,CACd,KAAc,EACd,WAAyB;QAEzB,OAAO,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAClC,IAAI,CAAC,QAAQ,CAAC,MAAa,EAC3B,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,EACjC,WAAW,IAAI,IAAI,CAAC,WAAW,CAClC,CAAA;IACL,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,MAAc;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC3D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAc;QAChB,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC3D,CAAC;IAmBD;;;OAGG;IACH,MAAM,CACF,iCAE2B;QAE3B,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CACtB,IAAI,CAAC,QAAQ,CAAC,MAAa,EAC3B,iCAAwC,CAC3C,CAAA;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CACD,eAAuB,EACvB,GAAG,WAAkC;QAErC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CACrB,IAAI,CAAC,QAAQ,CAAC,MAAa,EAC3B,eAAe,EACf,GAAG,WAAW,CACjB,CAAA;IACL,CAAC;IAED;;;;;;;;OAQG;IACH,OAAO,CAAC,UAA+B;QACnC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAa,EAAE,UAAU,CAAC,CAAA;IACxE,CAAC;IAsCD;;OAEG;IACH,IAAI,CACA,gBAAyB,EACzB,OAAqB;QAErB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CACpB,IAAI,CAAC,QAAQ,CAAC,MAAa,EAC3B,gBAAuB,EACvB,OAAO,CACV,CAAA;IACL,CAAC;IAYD;;OAEG;IACH,MAAM,CACF,gBAAmC,EACnC,OAAuB;QAEvB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CACtB,IAAI,CAAC,QAAQ,CAAC,MAAa,EAC3B,gBAAuB,EACvB,OAAO,CACV,CAAA;IACL,CAAC;IAkCD;;OAEG;IACH,UAAU,CACN,gBAAyB,EACzB,OAAqB;QAErB,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAC1B,IAAI,CAAC,QAAQ,CAAC,MAAa,EAC3B,gBAAuB,EACvB,OAAO,CACV,CAAA;IACL,CAAC;IAkCD;;OAEG;IACH,OAAO,CACH,gBAAyB,EACzB,OAAqB;QAErB,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CACvB,IAAI,CAAC,QAAQ,CAAC,MAAa,EAC3B,gBAAuB,EACvB,OAAO,CACV,CAAA;IACL,CAAC;IAED;;;;;OAKG;IACH,MAAM,CACF,MAEsC;QAEtC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAa,EAAE,MAAM,CAAC,CAAA;IACnE,CAAC;IAED;;;;;OAKG;IACH,MAAM,CACF,QAS8B,EAC9B,aAA6C;QAE7C,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CACtB,IAAI,CAAC,QAAQ,CAAC,MAAa,EAC3B,QAAe,EACf,aAAa,CAChB,CAAA;IACL,CAAC;IAED;;;;OAIG;IACH,MAAM,CACF,gBAEsC,EACtC,sBAAwD;QAExD,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CACtB,IAAI,CAAC,QAAQ,CAAC,MAAa,EAC3B,gBAAgB,EAChB,sBAAsB,CACzB,CAAA;IACL,CAAC;IAED;;;;;OAKG;IACH,MAAM,CACF,QAS8B;QAE9B,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAa,EAAE,QAAe,CAAC,CAAA;IAC5E,CAAC;IAED;;;;;OAKG;IACH,UAAU,CACN,QAS8B;QAE9B,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAC1B,IAAI,CAAC,QAAQ,CAAC,MAAa,EAC3B,QAAe,CAClB,CAAA;IACL,CAAC;IAED;;;;;OAKG;IACH,OAAO,CACH,QAS8B;QAE9B,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CACvB,IAAI,CAAC,QAAQ,CAAC,MAAa,EAC3B,QAAe,CAClB,CAAA;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAiC;QACnC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC7D,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,OAAiC;QACnC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC5D,CAAC;IAED;;;OAGG;IACH,OAAO,CACH,KAA4D;QAE5D,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IAC5D,CAAC;IAED;;OAEG;IACH,GAAG,CACC,UAA0C,EAC1C,KAA6D;QAE7D,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,CAAA;IACpE,CAAC;IAED;;OAEG;IACH,OAAO,CACH,UAA0C,EAC1C,KAA6D;QAE7D,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,CAAA;IACxE,CAAC;IAED;;OAEG;IACH,OAAO,CACH,UAA0C,EAC1C,KAA6D;QAE7D,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,CAAA;IACxE,CAAC;IAED;;OAEG;IACH,OAAO,CACH,UAA0C,EAC1C,KAA6D;QAE7D,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,CAAA;IACxE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI,CAAC,OAAiC;QACxC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC3D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CACR,KAA4D;QAE5D,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IAC3D,CAAC;IAED;;;;OAIG;IACH,YAAY,CACR,OAAiC;QAEjC,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACnE,CAAC;IAED;;;;OAIG;IACH,cAAc,CACV,KAA4D;QAE5D,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IACnE,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,SAAS,CAAC,GAAU;QACtB,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC5D,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,OAAO,CAAC,OAA+B;QACzC,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9D,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,SAAS,CACX,KAA4D;QAE5D,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IAC9D,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,WAAW,CACb,EAAqC;QAErC,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IAC7D,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,aAAa,CAAC,OAA+B;QAC/C,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACpE,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,eAAe,CACjB,KAA4D;QAE5D,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IACpE,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,KAAa,EAAE,UAAkB;QACnC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,CAAC,CAAA;IAChD,CAAC;IAED;;;;;OAKG;IACH,KAAK;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;IACnD,CAAC;IAED;;OAEG;IACH,SAAS,CACL,UAAoC,EACpC,YAAoB,EACpB,KAAsB;QAEtB,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CACzB,IAAI,CAAC,QAAQ,CAAC,MAAM,EACpB,UAAU,EACV,YAAY,EACZ,KAAK,CACR,CAAA;IACL,CAAC;IAED;;OAEG;IACH,SAAS,CACL,UAAoC,EACpC,YAAoB,EACpB,KAAsB;QAEtB,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CACzB,IAAI,CAAC,QAAQ,CAAC,MAAM,EACpB,UAAU,EACV,YAAY,EACZ,KAAK,CACR,CAAA;IACL,CAAC;IAED;;OAEG;IACH,MAAM,CACF,MAA4D;QAE5D,WAAW;QACX,eAAe;QACf,gBAAgB;QAChB,KAAK;QACL,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAkD,CAAA;QACxE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,IAAI,CAAA;QAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAM,SAAQ,QAAQ;SAAG,CAAC,CACvC,MAAM,EACN,OAAO,EACP,WAAW,CACd,CAAA;QACD,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;QAC1B,OAAO,GAAU,CAAA;IACrB,CAAC;CACJ","file":"Repository.js","sourcesContent":["import { FindManyOptions } from \"../find-options/FindManyOptions\"\nimport { ObjectLiteral } from \"../common/ObjectLiteral\"\nimport { FindOneOptions } from \"../find-options/FindOneOptions\"\nimport { DeepPartial } from \"../common/DeepPartial\"\nimport { SaveOptions } from \"./SaveOptions\"\nimport { RemoveOptions } from \"./RemoveOptions\"\nimport { EntityManager } from \"../entity-manager/EntityManager\"\nimport { QueryRunner } from \"../query-runner/QueryRunner\"\nimport { SelectQueryBuilder } from \"../query-builder/SelectQueryBuilder\"\nimport { DeleteResult } from \"../query-builder/result/DeleteResult\"\nimport { UpdateResult } from \"../query-builder/result/UpdateResult\"\nimport { InsertResult } from \"../query-builder/result/InsertResult\"\nimport { QueryDeepPartialEntity } from \"../query-builder/QueryPartialEntity\"\nimport { ObjectID } from \"../driver/mongodb/typings\"\nimport { FindOptionsWhere } from \"../find-options/FindOptionsWhere\"\nimport { UpsertOptions } from \"./UpsertOptions\"\nimport { EntityTarget } from \"../common/EntityTarget\"\nimport { PickKeysByType } from \"../common/PickKeysByType\"\n\n/**\n * Repository is supposed to work with your entity objects. Find entities, insert, update, delete, etc.\n */\nexport class Repository<Entity extends ObjectLiteral> {\n // -------------------------------------------------------------------------\n // Public Properties\n // -------------------------------------------------------------------------\n\n /**\n * Entity target that is managed by this repository.\n * If this repository manages entity from schema,\n * then it returns a name of that schema instead.\n */\n readonly target: EntityTarget<Entity>\n\n /**\n * Entity Manager used by this repository.\n */\n readonly manager: EntityManager\n\n /**\n * Query runner provider used for this repository.\n */\n readonly queryRunner?: QueryRunner\n\n // -------------------------------------------------------------------------\n // Accessors\n // -------------------------------------------------------------------------\n\n /**\n * Entity metadata of the entity current repository manages.\n */\n get metadata() {\n return this.manager.connection.getMetadata(this.target)\n }\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(\n target: EntityTarget<Entity>,\n manager: EntityManager,\n queryRunner?: QueryRunner,\n ) {\n this.target = target\n this.manager = manager\n this.queryRunner = queryRunner\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n /**\n * Creates a new query builder that can be used to build a SQL query.\n */\n createQueryBuilder(\n alias?: string,\n queryRunner?: QueryRunner,\n ): SelectQueryBuilder<Entity> {\n return this.manager.createQueryBuilder<Entity>(\n this.metadata.target as any,\n alias || this.metadata.targetName,\n queryRunner || this.queryRunner,\n )\n }\n\n /**\n * Checks if entity has an id.\n * If entity composite compose ids, it will check them all.\n */\n hasId(entity: Entity): boolean {\n return this.manager.hasId(this.metadata.target, entity)\n }\n\n /**\n * Gets entity mixed id.\n */\n getId(entity: Entity): any {\n return this.manager.getId(this.metadata.target, entity)\n }\n\n /**\n * Creates a new entity instance.\n */\n create(): Entity\n\n /**\n * Creates new entities and copies all entity properties from given objects into their new entities.\n * Note that it copies only properties that are present in entity schema.\n */\n create(entityLikeArray: DeepPartial<Entity>[]): Entity[]\n\n /**\n * Creates a new entity instance and copies all entity properties from this object into a new entity.\n * Note that it copies only properties that are present in entity schema.\n */\n create(entityLike: DeepPartial<Entity>): Entity\n\n /**\n * Creates a new entity instance or instances.\n * Can copy properties from the given object into new entities.\n */\n create(\n plainEntityLikeOrPlainEntityLikes?:\n | DeepPartial<Entity>\n | DeepPartial<Entity>[],\n ): Entity | Entity[] {\n return this.manager.create<any>(\n this.metadata.target as any,\n plainEntityLikeOrPlainEntityLikes as any,\n )\n }\n\n /**\n * Merges multiple entities (or entity-like objects) into a given entity.\n */\n merge(\n mergeIntoEntity: Entity,\n ...entityLikes: DeepPartial<Entity>[]\n ): Entity {\n return this.manager.merge(\n this.metadata.target as any,\n mergeIntoEntity,\n ...entityLikes,\n )\n }\n\n /**\n * Creates a new entity from the given plain javascript object. If entity already exist in the database, then\n * it loads it (and everything related to it), replaces all values with the new ones from the given object\n * and returns this new entity. This new entity is actually a loaded from the db entity with all properties\n * replaced from the new object.\n *\n * Note that given entity-like object must have an entity id / primary key to find entity by.\n * Returns undefined if entity with given id was not found.\n */\n preload(entityLike: DeepPartial<Entity>): Promise<Entity | undefined> {\n return this.manager.preload(this.metadata.target as any, entityLike)\n }\n\n /**\n * Saves all given entities in the database.\n * If entities do not exist in the database then inserts, otherwise updates.\n */\n save<T extends DeepPartial<Entity>>(\n entities: T[],\n options: SaveOptions & { reload: false },\n ): Promise<T[]>\n\n /**\n * Saves all given entities in the database.\n * If entities do not exist in the database then inserts, otherwise updates.\n */\n save<T extends DeepPartial<Entity>>(\n entities: T[],\n options?: SaveOptions,\n ): Promise<(T & Entity)[]>\n\n /**\n * Saves a given entity in the database.\n * If entity does not exist in the database then inserts, otherwise updates.\n */\n save<T extends DeepPartial<Entity>>(\n entity: T,\n options: SaveOptions & { reload: false },\n ): Promise<T>\n\n /**\n * Saves a given entity in the database.\n * If entity does not exist in the database then inserts, otherwise updates.\n */\n save<T extends DeepPartial<Entity>>(\n entity: T,\n options?: SaveOptions,\n ): Promise<T & Entity>\n\n /**\n * Saves one or many given entities.\n */\n save<T extends DeepPartial<Entity>>(\n entityOrEntities: T | T[],\n options?: SaveOptions,\n ): Promise<T | T[]> {\n return this.manager.save<Entity, T>(\n this.metadata.target as any,\n entityOrEntities as any,\n options,\n )\n }\n\n /**\n * Removes a given entities from the database.\n */\n remove(entities: Entity[], options?: RemoveOptions): Promise<Entity[]>\n\n /**\n * Removes a given entity from the database.\n */\n remove(entity: Entity, options?: RemoveOptions): Promise<Entity>\n\n /**\n * Removes one or many given entities.\n */\n remove(\n entityOrEntities: Entity | Entity[],\n options?: RemoveOptions,\n ): Promise<Entity | Entity[]> {\n return this.manager.remove(\n this.metadata.target as any,\n entityOrEntities as any,\n options,\n )\n }\n\n /**\n * Records the delete date of all given entities.\n */\n softRemove<T extends DeepPartial<Entity>>(\n entities: T[],\n options: SaveOptions & { reload: false },\n ): Promise<T[]>\n\n /**\n * Records the delete date of all given entities.\n */\n softRemove<T extends DeepPartial<Entity>>(\n entities: T[],\n options?: SaveOptions,\n ): Promise<(T & Entity)[]>\n\n /**\n * Records the delete date of a given entity.\n */\n softRemove<T extends DeepPartial<Entity>>(\n entity: T,\n options: SaveOptions & { reload: false },\n ): Promise<T>\n\n /**\n * Records the delete date of a given entity.\n */\n softRemove<T extends DeepPartial<Entity>>(\n entity: T,\n options?: SaveOptions,\n ): Promise<T & Entity>\n\n /**\n * Records the delete date of one or many given entities.\n */\n softRemove<T extends DeepPartial<Entity>>(\n entityOrEntities: T | T[],\n options?: SaveOptions,\n ): Promise<T | T[]> {\n return this.manager.softRemove<Entity, T>(\n this.metadata.target as any,\n entityOrEntities as any,\n options,\n )\n }\n\n /**\n * Recovers all given entities in the database.\n */\n recover<T extends DeepPartial<Entity>>(\n entities: T[],\n options: SaveOptions & { reload: false },\n ): Promise<T[]>\n\n /**\n * Recovers all given entities in the database.\n */\n recover<T extends DeepPartial<Entity>>(\n entities: T[],\n options?: SaveOptions,\n ): Promise<(T & Entity)[]>\n\n /**\n * Recovers a given entity in the database.\n */\n recover<T extends DeepPartial<Entity>>(\n entity: T,\n options: SaveOptions & { reload: false },\n ): Promise<T>\n\n /**\n * Recovers a given entity in the database.\n */\n recover<T extends DeepPartial<Entity>>(\n entity: T,\n options?: SaveOptions,\n ): Promise<T & Entity>\n\n /**\n * Recovers one or many given entities.\n */\n recover<T extends DeepPartial<Entity>>(\n entityOrEntities: T | T[],\n options?: SaveOptions,\n ): Promise<T | T[]> {\n return this.manager.recover<Entity, T>(\n this.metadata.target as any,\n entityOrEntities as any,\n options,\n )\n }\n\n /**\n * Inserts a given entity into the database.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient INSERT query.\n * Does not check if entity exist in the database, so query will fail if duplicate entity is being inserted.\n */\n insert(\n entity:\n | QueryDeepPartialEntity<Entity>\n | QueryDeepPartialEntity<Entity>[],\n ): Promise<InsertResult> {\n return this.manager.insert(this.metadata.target as any, entity)\n }\n\n /**\n * Updates entity partially. Entity can be found by a given conditions.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient UPDATE query.\n * Does not check if entity exist in the database.\n */\n update(\n criteria:\n | string\n | string[]\n | number\n | number[]\n | Date\n | Date[]\n | ObjectID\n | ObjectID[]\n | FindOptionsWhere<Entity>,\n partialEntity: QueryDeepPartialEntity<Entity>,\n ): Promise<UpdateResult> {\n return this.manager.update(\n this.metadata.target as any,\n criteria as any,\n partialEntity,\n )\n }\n\n /**\n * Inserts a given entity into the database, unless a unique constraint conflicts then updates the entity\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient INSERT ... ON CONFLICT DO UPDATE/ON DUPLICATE KEY UPDATE query.\n */\n upsert(\n entityOrEntities:\n | QueryDeepPartialEntity<Entity>\n | QueryDeepPartialEntity<Entity>[],\n conflictPathsOrOptions: string[] | UpsertOptions<Entity>,\n ): Promise<InsertResult> {\n return this.manager.upsert(\n this.metadata.target as any,\n entityOrEntities,\n conflictPathsOrOptions,\n )\n }\n\n /**\n * Deletes entities by a given criteria.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient DELETE query.\n * Does not check if entity exist in the database.\n */\n delete(\n criteria:\n | string\n | string[]\n | number\n | number[]\n | Date\n | Date[]\n | ObjectID\n | ObjectID[]\n | FindOptionsWhere<Entity>,\n ): Promise<DeleteResult> {\n return this.manager.delete(this.metadata.target as any, criteria as any)\n }\n\n /**\n * Records the delete date of entities by a given criteria.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient SOFT-DELETE query.\n * Does not check if entity exist in the database.\n */\n softDelete(\n criteria:\n | string\n | string[]\n | number\n | number[]\n | Date\n | Date[]\n | ObjectID\n | ObjectID[]\n | FindOptionsWhere<Entity>,\n ): Promise<UpdateResult> {\n return this.manager.softDelete(\n this.metadata.target as any,\n criteria as any,\n )\n }\n\n /**\n * Restores entities by a given criteria.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient SOFT-DELETE query.\n * Does not check if entity exist in the database.\n */\n restore(\n criteria:\n | string\n | string[]\n | number\n | number[]\n | Date\n | Date[]\n | ObjectID\n | ObjectID[]\n | FindOptionsWhere<Entity>,\n ): Promise<UpdateResult> {\n return this.manager.restore(\n this.metadata.target as any,\n criteria as any,\n )\n }\n\n /**\n * Checks whether any entity exists that match given options.\n */\n exist(options?: FindManyOptions<Entity>): Promise<boolean> {\n return this.manager.exists(this.metadata.target, options)\n }\n\n /**\n * Counts entities that match given options.\n * Useful for pagination.\n */\n count(options?: FindManyOptions<Entity>): Promise<number> {\n return this.manager.count(this.metadata.target, options)\n }\n\n /**\n * Counts entities that match given conditions.\n * Useful for pagination.\n */\n countBy(\n where: FindOptionsWhere<Entity> | FindOptionsWhere<Entity>[],\n ): Promise<number> {\n return this.manager.countBy(this.metadata.target, where)\n }\n\n /**\n * Return the SUM of a column\n */\n sum(\n columnName: PickKeysByType<Entity, number>,\n where?: FindOptionsWhere<Entity> | FindOptionsWhere<Entity>[],\n ): Promise<number | null> {\n return this.manager.sum(this.metadata.target, columnName, where)\n }\n\n /**\n * Return the AVG of a column\n */\n average(\n columnName: PickKeysByType<Entity, number>,\n where?: FindOptionsWhere<Entity> | FindOptionsWhere<Entity>[],\n ): Promise<number | null> {\n return this.manager.average(this.metadata.target, columnName, where)\n }\n\n /**\n * Return the MIN of a column\n */\n minimum(\n columnName: PickKeysByType<Entity, number>,\n where?: FindOptionsWhere<Entity> | FindOptionsWhere<Entity>[],\n ): Promise<number | null> {\n return this.manager.minimum(this.metadata.target, columnName, where)\n }\n\n /**\n * Return the MAX of a column\n */\n maximum(\n columnName: PickKeysByType<Entity, number>,\n where?: FindOptionsWhere<Entity> | FindOptionsWhere<Entity>[],\n ): Promise<number | null> {\n return this.manager.maximum(this.metadata.target, columnName, where)\n }\n\n /**\n * Finds entities that match given find options.\n */\n async find(options?: FindManyOptions<Entity>): Promise<Entity[]> {\n return this.manager.find(this.metadata.target, options)\n }\n\n /**\n * Finds entities that match given find options.\n */\n async findBy(\n where: FindOptionsWhere<Entity> | FindOptionsWhere<Entity>[],\n ): Promise<Entity[]> {\n return this.manager.findBy(this.metadata.target, where)\n }\n\n /**\n * Finds entities that match given find options.\n * Also counts all entities that match given conditions,\n * but ignores pagination settings (from and take options).\n */\n findAndCount(\n options?: FindManyOptions<Entity>,\n ): Promise<[Entity[], number]> {\n return this.manager.findAndCount(this.metadata.target, options)\n }\n\n /**\n * Finds entities that match given WHERE conditions.\n * Also counts all entities that match given conditions,\n * but ignores pagination settings (from and take options).\n */\n findAndCountBy(\n where: FindOptionsWhere<Entity> | FindOptionsWhere<Entity>[],\n ): Promise<[Entity[], number]> {\n return this.manager.findAndCountBy(this.metadata.target, where)\n }\n\n /**\n * Finds entities with ids.\n * Optionally find options or conditions can be applied.\n *\n * @deprecated use `findBy` method instead in conjunction with `In` operator, for example:\n *\n * .findBy({\n * id: In([1, 2, 3])\n * })\n */\n async findByIds(ids: any[]): Promise<Entity[]> {\n return this.manager.findByIds(this.metadata.target, ids)\n }\n\n /**\n * Finds first entity by a given find options.\n * If entity was not found in the database - returns null.\n */\n async findOne(options: FindOneOptions<Entity>): Promise<Entity | null> {\n return this.manager.findOne(this.metadata.target, options)\n }\n\n /**\n * Finds first entity that matches given where condition.\n * If entity was not found in the database - returns null.\n */\n async findOneBy(\n where: FindOptionsWhere<Entity> | FindOptionsWhere<Entity>[],\n ): Promise<Entity | null> {\n return this.manager.findOneBy(this.metadata.target, where)\n }\n\n /**\n * Finds first entity that matches given id.\n * If entity was not found in the database - returns null.\n *\n * @deprecated use `findOneBy` method instead in conjunction with `In` operator, for example:\n *\n * .findOneBy({\n * id: 1 // where \"id\" is your primary column name\n * })\n */\n async findOneById(\n id: number | string | Date | ObjectID,\n ): Promise<Entity | null> {\n return this.manager.findOneById(this.metadata.target, id)\n }\n\n /**\n * Finds first entity by a given find options.\n * If entity was not found in the database - rejects with error.\n */\n async findOneOrFail(options: FindOneOptions<Entity>): Promise<Entity> {\n return this.manager.findOneOrFail(this.metadata.target, options)\n }\n\n /**\n * Finds first entity that matches given where condition.\n * If entity was not found in the database - rejects with error.\n */\n async findOneByOrFail(\n where: FindOptionsWhere<Entity> | FindOptionsWhere<Entity>[],\n ): Promise<Entity> {\n return this.manager.findOneByOrFail(this.metadata.target, where)\n }\n\n /**\n * Executes a raw SQL query and returns a raw database results.\n * Raw query execution is supported only by relational databases (MongoDB is not supported).\n */\n query(query: string, parameters?: any[]): Promise<any> {\n return this.manager.query(query, parameters)\n }\n\n /**\n * Clears all the data from the given table/collection (truncates/drops it).\n *\n * Note: this method uses TRUNCATE and may not work as you expect in transactions on some platforms.\n * @see https://stackoverflow.com/a/5972738/925151\n */\n clear(): Promise<void> {\n return this.manager.clear(this.metadata.target)\n }\n\n /**\n * Increments some column by provided value of the entities matched given conditions.\n */\n increment(\n conditions: FindOptionsWhere<Entity>,\n propertyPath: string,\n value: number | string,\n ): Promise<UpdateResult> {\n return this.manager.increment(\n this.metadata.target,\n conditions,\n propertyPath,\n value,\n )\n }\n\n /**\n * Decrements some column by provided value of the entities matched given conditions.\n */\n decrement(\n conditions: FindOptionsWhere<Entity>,\n propertyPath: string,\n value: number | string,\n ): Promise<UpdateResult> {\n return this.manager.decrement(\n this.metadata.target,\n conditions,\n propertyPath,\n value,\n )\n }\n\n /**\n * Extends repository with provided functions.\n */\n extend<CustomRepository>(\n custom: CustomRepository & ThisType<this & CustomRepository>,\n ): this & CustomRepository {\n // return {\n // ...this,\n // ...custom\n // };\n const thisRepo = this.constructor as new (...args: any[]) => typeof this\n const { target, manager, queryRunner } = this\n const cls = new (class extends thisRepo {})(\n target,\n manager,\n queryRunner,\n )\n Object.assign(cls, custom)\n return cls as any\n }\n}\n"],"sourceRoot":".."}
@@ -57,7 +57,7 @@ export declare class Broadcaster {
57
57
  *
58
58
  * Note: this method has a performance-optimized code organization, do not change code structure.
59
59
  */
60
- broadcastBeforeRemoveEvent(result: BroadcasterResult, metadata: EntityMetadata, entity?: ObjectLiteral, databaseEntity?: ObjectLiteral): void;
60
+ broadcastBeforeRemoveEvent(result: BroadcasterResult, metadata: EntityMetadata, entity?: ObjectLiteral, databaseEntity?: ObjectLiteral, identifier?: ObjectLiteral): void;
61
61
  /**
62
62
  * Broadcasts "BEFORE_SOFT_REMOVE" event.
63
63
  * Before soft remove event is executed before entity is being soft removed from the database.
@@ -66,7 +66,7 @@ export declare class Broadcaster {
66
66
  *
67
67
  * Note: this method has a performance-optimized code organization, do not change code structure.
68
68
  */
69
- broadcastBeforeSoftRemoveEvent(result: BroadcasterResult, metadata: EntityMetadata, entity?: ObjectLiteral, databaseEntity?: ObjectLiteral): void;
69
+ broadcastBeforeSoftRemoveEvent(result: BroadcasterResult, metadata: EntityMetadata, entity?: ObjectLiteral, databaseEntity?: ObjectLiteral, identifier?: ObjectLiteral): void;
70
70
  /**
71
71
  * Broadcasts "BEFORE_RECOVER" event.
72
72
  * Before recover event is executed before entity is being recovered in the database.
@@ -75,7 +75,7 @@ export declare class Broadcaster {
75
75
  *
76
76
  * Note: this method has a performance-optimized code organization, do not change code structure.
77
77
  */
78
- broadcastBeforeRecoverEvent(result: BroadcasterResult, metadata: EntityMetadata, entity?: ObjectLiteral, databaseEntity?: ObjectLiteral): void;
78
+ broadcastBeforeRecoverEvent(result: BroadcasterResult, metadata: EntityMetadata, entity?: ObjectLiteral, databaseEntity?: ObjectLiteral, identifier?: ObjectLiteral): void;
79
79
  /**
80
80
  * Broadcasts "AFTER_INSERT" event.
81
81
  * After insert event is executed after entity is being persisted to the database for the first time.
@@ -126,7 +126,7 @@ export declare class Broadcaster {
126
126
  *
127
127
  * Note: this method has a performance-optimized code organization, do not change code structure.
128
128
  */
129
- broadcastAfterRemoveEvent(result: BroadcasterResult, metadata: EntityMetadata, entity?: ObjectLiteral, databaseEntity?: ObjectLiteral): void;
129
+ broadcastAfterRemoveEvent(result: BroadcasterResult, metadata: EntityMetadata, entity?: ObjectLiteral, databaseEntity?: ObjectLiteral, identifier?: ObjectLiteral): void;
130
130
  /**
131
131
  * Broadcasts "AFTER_SOFT_REMOVE" event.
132
132
  * After soft remove event is executed after entity is being soft removed from the database.
@@ -135,7 +135,7 @@ export declare class Broadcaster {
135
135
  *
136
136
  * Note: this method has a performance-optimized code organization, do not change code structure.
137
137
  */
138
- broadcastAfterSoftRemoveEvent(result: BroadcasterResult, metadata: EntityMetadata, entity?: ObjectLiteral, databaseEntity?: ObjectLiteral): void;
138
+ broadcastAfterSoftRemoveEvent(result: BroadcasterResult, metadata: EntityMetadata, entity?: ObjectLiteral, databaseEntity?: ObjectLiteral, identifier?: ObjectLiteral): void;
139
139
  /**
140
140
  * Broadcasts "AFTER_RECOVER" event.
141
141
  * After recover event is executed after entity is being recovered in the database.
@@ -144,7 +144,7 @@ export declare class Broadcaster {
144
144
  *
145
145
  * Note: this method has a performance-optimized code organization, do not change code structure.
146
146
  */
147
- broadcastAfterRecoverEvent(result: BroadcasterResult, metadata: EntityMetadata, entity?: ObjectLiteral, databaseEntity?: ObjectLiteral): void;
147
+ broadcastAfterRecoverEvent(result: BroadcasterResult, metadata: EntityMetadata, entity?: ObjectLiteral, databaseEntity?: ObjectLiteral, identifier?: ObjectLiteral): void;
148
148
  /**
149
149
  * @deprecated Use `broadcastLoadForAllEvent`
150
150
  */
@@ -108,7 +108,7 @@ export class Broadcaster {
108
108
  *
109
109
  * Note: this method has a performance-optimized code organization, do not change code structure.
110
110
  */
111
- broadcastBeforeRemoveEvent(result, metadata, entity, databaseEntity) {
111
+ broadcastBeforeRemoveEvent(result, metadata, entity, databaseEntity, identifier) {
112
112
  if (entity && metadata.beforeRemoveListeners.length) {
113
113
  metadata.beforeRemoveListeners.forEach((listener) => {
114
114
  if (listener.isAllowed(entity)) {
@@ -130,7 +130,7 @@ export class Broadcaster {
130
130
  entity: entity,
131
131
  metadata: metadata,
132
132
  databaseEntity: databaseEntity,
133
- entityId: metadata.getEntityIdMixedMap(databaseEntity),
133
+ entityId: metadata.getEntityIdMixedMap(databaseEntity !== null && databaseEntity !== void 0 ? databaseEntity : identifier),
134
134
  });
135
135
  if (executionResult instanceof Promise)
136
136
  result.promises.push(executionResult);
@@ -147,7 +147,7 @@ export class Broadcaster {
147
147
  *
148
148
  * Note: this method has a performance-optimized code organization, do not change code structure.
149
149
  */
150
- broadcastBeforeSoftRemoveEvent(result, metadata, entity, databaseEntity) {
150
+ broadcastBeforeSoftRemoveEvent(result, metadata, entity, databaseEntity, identifier) {
151
151
  if (entity && metadata.beforeSoftRemoveListeners.length) {
152
152
  metadata.beforeSoftRemoveListeners.forEach((listener) => {
153
153
  if (listener.isAllowed(entity)) {
@@ -169,7 +169,7 @@ export class Broadcaster {
169
169
  entity: entity,
170
170
  metadata: metadata,
171
171
  databaseEntity: databaseEntity,
172
- entityId: metadata.getEntityIdMixedMap(databaseEntity),
172
+ entityId: metadata.getEntityIdMixedMap(databaseEntity !== null && databaseEntity !== void 0 ? databaseEntity : identifier),
173
173
  });
174
174
  if (executionResult instanceof Promise)
175
175
  result.promises.push(executionResult);
@@ -186,7 +186,7 @@ export class Broadcaster {
186
186
  *
187
187
  * Note: this method has a performance-optimized code organization, do not change code structure.
188
188
  */
189
- broadcastBeforeRecoverEvent(result, metadata, entity, databaseEntity) {
189
+ broadcastBeforeRecoverEvent(result, metadata, entity, databaseEntity, identifier) {
190
190
  if (entity && metadata.beforeRecoverListeners.length) {
191
191
  metadata.beforeRecoverListeners.forEach((listener) => {
192
192
  if (listener.isAllowed(entity)) {
@@ -208,7 +208,7 @@ export class Broadcaster {
208
208
  entity: entity,
209
209
  metadata: metadata,
210
210
  databaseEntity: databaseEntity,
211
- entityId: metadata.getEntityIdMixedMap(databaseEntity),
211
+ entityId: metadata.getEntityIdMixedMap(databaseEntity !== null && databaseEntity !== void 0 ? databaseEntity : identifier),
212
212
  });
213
213
  if (executionResult instanceof Promise)
214
214
  result.promises.push(executionResult);
@@ -416,7 +416,7 @@ export class Broadcaster {
416
416
  *
417
417
  * Note: this method has a performance-optimized code organization, do not change code structure.
418
418
  */
419
- broadcastAfterRemoveEvent(result, metadata, entity, databaseEntity) {
419
+ broadcastAfterRemoveEvent(result, metadata, entity, databaseEntity, identifier) {
420
420
  if (entity && metadata.afterRemoveListeners.length) {
421
421
  metadata.afterRemoveListeners.forEach((listener) => {
422
422
  if (listener.isAllowed(entity)) {
@@ -438,7 +438,7 @@ export class Broadcaster {
438
438
  entity: entity,
439
439
  metadata: metadata,
440
440
  databaseEntity: databaseEntity,
441
- entityId: metadata.getEntityIdMixedMap(databaseEntity),
441
+ entityId: metadata.getEntityIdMixedMap(databaseEntity !== null && databaseEntity !== void 0 ? databaseEntity : identifier),
442
442
  });
443
443
  if (executionResult instanceof Promise)
444
444
  result.promises.push(executionResult);
@@ -455,7 +455,7 @@ export class Broadcaster {
455
455
  *
456
456
  * Note: this method has a performance-optimized code organization, do not change code structure.
457
457
  */
458
- broadcastAfterSoftRemoveEvent(result, metadata, entity, databaseEntity) {
458
+ broadcastAfterSoftRemoveEvent(result, metadata, entity, databaseEntity, identifier) {
459
459
  if (entity && metadata.afterSoftRemoveListeners.length) {
460
460
  metadata.afterSoftRemoveListeners.forEach((listener) => {
461
461
  if (listener.isAllowed(entity)) {
@@ -477,7 +477,7 @@ export class Broadcaster {
477
477
  entity: entity,
478
478
  metadata: metadata,
479
479
  databaseEntity: databaseEntity,
480
- entityId: metadata.getEntityIdMixedMap(databaseEntity),
480
+ entityId: metadata.getEntityIdMixedMap(databaseEntity !== null && databaseEntity !== void 0 ? databaseEntity : identifier),
481
481
  });
482
482
  if (executionResult instanceof Promise)
483
483
  result.promises.push(executionResult);
@@ -494,7 +494,7 @@ export class Broadcaster {
494
494
  *
495
495
  * Note: this method has a performance-optimized code organization, do not change code structure.
496
496
  */
497
- broadcastAfterRecoverEvent(result, metadata, entity, databaseEntity) {
497
+ broadcastAfterRecoverEvent(result, metadata, entity, databaseEntity, identifier) {
498
498
  if (entity && metadata.afterRecoverListeners.length) {
499
499
  metadata.afterRecoverListeners.forEach((listener) => {
500
500
  if (listener.isAllowed(entity)) {
@@ -516,7 +516,7 @@ export class Broadcaster {
516
516
  entity: entity,
517
517
  metadata: metadata,
518
518
  databaseEntity: databaseEntity,
519
- entityId: metadata.getEntityIdMixedMap(databaseEntity),
519
+ entityId: metadata.getEntityIdMixedMap(databaseEntity !== null && databaseEntity !== void 0 ? databaseEntity : identifier),
520
520
  });
521
521
  if (executionResult instanceof Promise)
522
522
  result.promises.push(executionResult);
@@ -1 +1 @@
1
- {"version":3,"sources":["../browser/src/subscriber/Broadcaster.ts"],"names":[],"mappings":"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","file":"Broadcaster.js","sourcesContent":["import { EntitySubscriberInterface } from \"./EntitySubscriberInterface\"\nimport { ObjectLiteral } from \"../common/ObjectLiteral\"\nimport { QueryRunner } from \"../query-runner/QueryRunner\"\nimport { EntityMetadata } from \"../metadata/EntityMetadata\"\nimport { BroadcasterResult } from \"./BroadcasterResult\"\nimport { ColumnMetadata } from \"../metadata/ColumnMetadata\"\nimport { RelationMetadata } from \"../metadata/RelationMetadata\"\nimport { ObjectUtils } from \"../util/ObjectUtils\"\n\ninterface BroadcasterEvents {\n BeforeTransactionCommit: () => void\n AfterTransactionCommit: () => void\n BeforeTransactionStart: () => void\n AfterTransactionStart: () => void\n BeforeTransactionRollback: () => void\n AfterTransactionRollback: () => void\n\n BeforeUpdate: (\n metadata: EntityMetadata,\n entity?: ObjectLiteral,\n databaseEntity?: ObjectLiteral,\n updatedColumns?: ColumnMetadata[],\n updatedRelations?: RelationMetadata[],\n ) => void\n AfterUpdate: (\n metadata: EntityMetadata,\n entity?: ObjectLiteral,\n databaseEntity?: ObjectLiteral,\n updatedColumns?: ColumnMetadata[],\n updatedRelations?: RelationMetadata[],\n ) => void\n\n BeforeInsert: (\n metadata: EntityMetadata,\n entity: ObjectLiteral | undefined,\n ) => void\n AfterInsert: (\n metadata: EntityMetadata,\n entity: ObjectLiteral | undefined,\n ) => void\n\n BeforeRemove: (\n metadata: EntityMetadata,\n entity?: ObjectLiteral,\n databaseEntity?: ObjectLiteral,\n ) => void\n AfterRemove: (\n metadata: EntityMetadata,\n entity?: ObjectLiteral,\n databaseEntity?: ObjectLiteral,\n ) => void\n\n BeforeSoftRemove: (\n metadata: EntityMetadata,\n entity?: ObjectLiteral,\n databaseEntity?: ObjectLiteral,\n ) => void\n AfterSoftRemove: (\n metadata: EntityMetadata,\n entity?: ObjectLiteral,\n databaseEntity?: ObjectLiteral,\n ) => void\n\n BeforeRecover: (\n metadata: EntityMetadata,\n entity?: ObjectLiteral,\n databaseEntity?: ObjectLiteral,\n ) => void\n AfterRecover: (\n metadata: EntityMetadata,\n entity?: ObjectLiteral,\n databaseEntity?: ObjectLiteral,\n ) => void\n\n Load: (metadata: EntityMetadata, entities: ObjectLiteral[]) => void\n}\n\n/**\n * Broadcaster provides a helper methods to broadcast events to the subscribers.\n */\nexport class Broadcaster {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(private queryRunner: QueryRunner) {}\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n async broadcast<U extends keyof BroadcasterEvents>(\n event: U,\n ...args: Parameters<BroadcasterEvents[U]>\n ): Promise<void> {\n const result = new BroadcasterResult()\n\n const broadcastFunction = this[`broadcast${event}Event` as keyof this]\n\n if (typeof broadcastFunction === \"function\") {\n ;(broadcastFunction as any).call(this, result, ...args)\n }\n\n await result.wait()\n }\n\n /**\n * Broadcasts \"BEFORE_INSERT\" event.\n * Before insert event is executed before entity is being inserted to the database for the first time.\n * All subscribers and entity listeners who listened to this event will be executed at this point.\n * Subscribers and entity listeners can return promises, it will wait until they are resolved.\n *\n * Note: this method has a performance-optimized code organization, do not change code structure.\n */\n broadcastBeforeInsertEvent(\n result: BroadcasterResult,\n metadata: EntityMetadata,\n entity: undefined | ObjectLiteral,\n ): void {\n if (entity && metadata.beforeInsertListeners.length) {\n metadata.beforeInsertListeners.forEach((listener) => {\n if (listener.isAllowed(entity)) {\n const executionResult = listener.execute(entity)\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n }\n })\n }\n\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach((subscriber) => {\n if (\n this.isAllowedSubscriber(subscriber, metadata.target) &&\n subscriber.beforeInsert\n ) {\n const executionResult = subscriber.beforeInsert({\n connection: this.queryRunner.connection,\n queryRunner: this.queryRunner,\n manager: this.queryRunner.manager,\n entity: entity,\n metadata: metadata,\n })\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n }\n })\n }\n }\n\n /**\n * Broadcasts \"BEFORE_UPDATE\" event.\n * Before update event is executed before entity is being updated in the database.\n * All subscribers and entity listeners who listened to this event will be executed at this point.\n * Subscribers and entity listeners can return promises, it will wait until they are resolved.\n *\n * Note: this method has a performance-optimized code organization, do not change code structure.\n */\n broadcastBeforeUpdateEvent(\n result: BroadcasterResult,\n metadata: EntityMetadata,\n entity?: ObjectLiteral,\n databaseEntity?: ObjectLiteral,\n updatedColumns?: ColumnMetadata[],\n updatedRelations?: RelationMetadata[],\n ): void {\n // todo: send relations too?\n if (entity && metadata.beforeUpdateListeners.length) {\n metadata.beforeUpdateListeners.forEach((listener) => {\n if (listener.isAllowed(entity)) {\n const executionResult = listener.execute(entity)\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n }\n })\n }\n\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach((subscriber) => {\n if (\n this.isAllowedSubscriber(subscriber, metadata.target) &&\n subscriber.beforeUpdate\n ) {\n const executionResult = subscriber.beforeUpdate({\n connection: this.queryRunner.connection,\n queryRunner: this.queryRunner,\n manager: this.queryRunner.manager,\n entity: entity,\n metadata: metadata,\n databaseEntity: databaseEntity,\n updatedColumns: updatedColumns || [],\n updatedRelations: updatedRelations || [],\n })\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n }\n })\n }\n }\n\n /**\n * Broadcasts \"BEFORE_REMOVE\" event.\n * Before remove event is executed before entity is being removed from the database.\n * All subscribers and entity listeners who listened to this event will be executed at this point.\n * Subscribers and entity listeners can return promises, it will wait until they are resolved.\n *\n * Note: this method has a performance-optimized code organization, do not change code structure.\n */\n broadcastBeforeRemoveEvent(\n result: BroadcasterResult,\n metadata: EntityMetadata,\n entity?: ObjectLiteral,\n databaseEntity?: ObjectLiteral,\n ): void {\n if (entity && metadata.beforeRemoveListeners.length) {\n metadata.beforeRemoveListeners.forEach((listener) => {\n if (listener.isAllowed(entity)) {\n const executionResult = listener.execute(entity)\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n }\n })\n }\n\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach((subscriber) => {\n if (\n this.isAllowedSubscriber(subscriber, metadata.target) &&\n subscriber.beforeRemove\n ) {\n const executionResult = subscriber.beforeRemove({\n connection: this.queryRunner.connection,\n queryRunner: this.queryRunner,\n manager: this.queryRunner.manager,\n entity: entity,\n metadata: metadata,\n databaseEntity: databaseEntity,\n entityId: metadata.getEntityIdMixedMap(databaseEntity),\n })\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n }\n })\n }\n }\n\n /**\n * Broadcasts \"BEFORE_SOFT_REMOVE\" event.\n * Before soft remove event is executed before entity is being soft removed from the database.\n * All subscribers and entity listeners who listened to this event will be executed at this point.\n * Subscribers and entity listeners can return promises, it will wait until they are resolved.\n *\n * Note: this method has a performance-optimized code organization, do not change code structure.\n */\n broadcastBeforeSoftRemoveEvent(\n result: BroadcasterResult,\n metadata: EntityMetadata,\n entity?: ObjectLiteral,\n databaseEntity?: ObjectLiteral,\n ): void {\n if (entity && metadata.beforeSoftRemoveListeners.length) {\n metadata.beforeSoftRemoveListeners.forEach((listener) => {\n if (listener.isAllowed(entity)) {\n const executionResult = listener.execute(entity)\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n }\n })\n }\n\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach((subscriber) => {\n if (\n this.isAllowedSubscriber(subscriber, metadata.target) &&\n subscriber.beforeSoftRemove\n ) {\n const executionResult = subscriber.beforeSoftRemove({\n connection: this.queryRunner.connection,\n queryRunner: this.queryRunner,\n manager: this.queryRunner.manager,\n entity: entity,\n metadata: metadata,\n databaseEntity: databaseEntity,\n entityId: metadata.getEntityIdMixedMap(databaseEntity),\n })\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n }\n })\n }\n }\n\n /**\n * Broadcasts \"BEFORE_RECOVER\" event.\n * Before recover event is executed before entity is being recovered in the database.\n * All subscribers and entity listeners who listened to this event will be executed at this point.\n * Subscribers and entity listeners can return promises, it will wait until they are resolved.\n *\n * Note: this method has a performance-optimized code organization, do not change code structure.\n */\n broadcastBeforeRecoverEvent(\n result: BroadcasterResult,\n metadata: EntityMetadata,\n entity?: ObjectLiteral,\n databaseEntity?: ObjectLiteral,\n ): void {\n if (entity && metadata.beforeRecoverListeners.length) {\n metadata.beforeRecoverListeners.forEach((listener) => {\n if (listener.isAllowed(entity)) {\n const executionResult = listener.execute(entity)\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n }\n })\n }\n\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach((subscriber) => {\n if (\n this.isAllowedSubscriber(subscriber, metadata.target) &&\n subscriber.beforeRecover\n ) {\n const executionResult = subscriber.beforeRecover({\n connection: this.queryRunner.connection,\n queryRunner: this.queryRunner,\n manager: this.queryRunner.manager,\n entity: entity,\n metadata: metadata,\n databaseEntity: databaseEntity,\n entityId: metadata.getEntityIdMixedMap(databaseEntity),\n })\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n }\n })\n }\n }\n\n /**\n * Broadcasts \"AFTER_INSERT\" event.\n * After insert event is executed after entity is being persisted to the database for the first time.\n * All subscribers and entity listeners who listened to this event will be executed at this point.\n * Subscribers and entity listeners can return promises, it will wait until they are resolved.\n *\n * Note: this method has a performance-optimized code organization, do not change code structure.\n */\n broadcastAfterInsertEvent(\n result: BroadcasterResult,\n metadata: EntityMetadata,\n entity?: ObjectLiteral,\n ): void {\n if (entity && metadata.afterInsertListeners.length) {\n metadata.afterInsertListeners.forEach((listener) => {\n if (listener.isAllowed(entity)) {\n const executionResult = listener.execute(entity)\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n }\n })\n }\n\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach((subscriber) => {\n if (\n this.isAllowedSubscriber(subscriber, metadata.target) &&\n subscriber.afterInsert\n ) {\n const executionResult = subscriber.afterInsert({\n connection: this.queryRunner.connection,\n queryRunner: this.queryRunner,\n manager: this.queryRunner.manager,\n entity: entity,\n metadata: metadata,\n })\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n }\n })\n }\n }\n\n /**\n * Broadcasts \"BEFORE_TRANSACTION_START\" event.\n */\n broadcastBeforeTransactionStartEvent(result: BroadcasterResult): void {\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach((subscriber) => {\n if (subscriber.beforeTransactionStart) {\n const executionResult = subscriber.beforeTransactionStart({\n connection: this.queryRunner.connection,\n queryRunner: this.queryRunner,\n manager: this.queryRunner.manager,\n })\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n }\n })\n }\n }\n\n /**\n * Broadcasts \"AFTER_TRANSACTION_START\" event.\n */\n broadcastAfterTransactionStartEvent(result: BroadcasterResult): void {\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach((subscriber) => {\n if (subscriber.afterTransactionStart) {\n const executionResult = subscriber.afterTransactionStart({\n connection: this.queryRunner.connection,\n queryRunner: this.queryRunner,\n manager: this.queryRunner.manager,\n })\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n }\n })\n }\n }\n\n /**\n * Broadcasts \"BEFORE_TRANSACTION_COMMIT\" event.\n */\n broadcastBeforeTransactionCommitEvent(result: BroadcasterResult): void {\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach((subscriber) => {\n if (subscriber.beforeTransactionCommit) {\n const executionResult = subscriber.beforeTransactionCommit({\n connection: this.queryRunner.connection,\n queryRunner: this.queryRunner,\n manager: this.queryRunner.manager,\n })\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n }\n })\n }\n }\n\n /**\n * Broadcasts \"AFTER_TRANSACTION_COMMIT\" event.\n */\n broadcastAfterTransactionCommitEvent(result: BroadcasterResult): void {\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach((subscriber) => {\n if (subscriber.afterTransactionCommit) {\n const executionResult = subscriber.afterTransactionCommit({\n connection: this.queryRunner.connection,\n queryRunner: this.queryRunner,\n manager: this.queryRunner.manager,\n })\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n }\n })\n }\n }\n\n /**\n * Broadcasts \"BEFORE_TRANSACTION_ROLLBACK\" event.\n */\n broadcastBeforeTransactionRollbackEvent(result: BroadcasterResult): void {\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach((subscriber) => {\n if (subscriber.beforeTransactionRollback) {\n const executionResult =\n subscriber.beforeTransactionRollback({\n connection: this.queryRunner.connection,\n queryRunner: this.queryRunner,\n manager: this.queryRunner.manager,\n })\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n }\n })\n }\n }\n\n /**\n * Broadcasts \"AFTER_TRANSACTION_ROLLBACK\" event.\n */\n broadcastAfterTransactionRollbackEvent(result: BroadcasterResult): void {\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach((subscriber) => {\n if (subscriber.afterTransactionRollback) {\n const executionResult = subscriber.afterTransactionRollback(\n {\n connection: this.queryRunner.connection,\n queryRunner: this.queryRunner,\n manager: this.queryRunner.manager,\n },\n )\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n }\n })\n }\n }\n\n /**\n * Broadcasts \"AFTER_UPDATE\" event.\n * After update event is executed after entity is being updated in the database.\n * All subscribers and entity listeners who listened to this event will be executed at this point.\n * Subscribers and entity listeners can return promises, it will wait until they are resolved.\n *\n * Note: this method has a performance-optimized code organization, do not change code structure.\n */\n broadcastAfterUpdateEvent(\n result: BroadcasterResult,\n metadata: EntityMetadata,\n entity?: ObjectLiteral,\n databaseEntity?: ObjectLiteral,\n updatedColumns?: ColumnMetadata[],\n updatedRelations?: RelationMetadata[],\n ): void {\n if (entity && metadata.afterUpdateListeners.length) {\n metadata.afterUpdateListeners.forEach((listener) => {\n if (listener.isAllowed(entity)) {\n const executionResult = listener.execute(entity)\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n }\n })\n }\n\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach((subscriber) => {\n if (\n this.isAllowedSubscriber(subscriber, metadata.target) &&\n subscriber.afterUpdate\n ) {\n const executionResult = subscriber.afterUpdate({\n connection: this.queryRunner.connection,\n queryRunner: this.queryRunner,\n manager: this.queryRunner.manager,\n entity: entity,\n metadata: metadata,\n databaseEntity: databaseEntity,\n updatedColumns: updatedColumns || [],\n updatedRelations: updatedRelations || [],\n })\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n }\n })\n }\n }\n\n /**\n * Broadcasts \"AFTER_REMOVE\" event.\n * After remove event is executed after entity is being removed from the database.\n * All subscribers and entity listeners who listened to this event will be executed at this point.\n * Subscribers and entity listeners can return promises, it will wait until they are resolved.\n *\n * Note: this method has a performance-optimized code organization, do not change code structure.\n */\n broadcastAfterRemoveEvent(\n result: BroadcasterResult,\n metadata: EntityMetadata,\n entity?: ObjectLiteral,\n databaseEntity?: ObjectLiteral,\n ): void {\n if (entity && metadata.afterRemoveListeners.length) {\n metadata.afterRemoveListeners.forEach((listener) => {\n if (listener.isAllowed(entity)) {\n const executionResult = listener.execute(entity)\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n }\n })\n }\n\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach((subscriber) => {\n if (\n this.isAllowedSubscriber(subscriber, metadata.target) &&\n subscriber.afterRemove\n ) {\n const executionResult = subscriber.afterRemove({\n connection: this.queryRunner.connection,\n queryRunner: this.queryRunner,\n manager: this.queryRunner.manager,\n entity: entity,\n metadata: metadata,\n databaseEntity: databaseEntity,\n entityId: metadata.getEntityIdMixedMap(databaseEntity),\n })\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n }\n })\n }\n }\n\n /**\n * Broadcasts \"AFTER_SOFT_REMOVE\" event.\n * After soft remove event is executed after entity is being soft removed from the database.\n * All subscribers and entity listeners who listened to this event will be executed at this point.\n * Subscribers and entity listeners can return promises, it will wait until they are resolved.\n *\n * Note: this method has a performance-optimized code organization, do not change code structure.\n */\n broadcastAfterSoftRemoveEvent(\n result: BroadcasterResult,\n metadata: EntityMetadata,\n entity?: ObjectLiteral,\n databaseEntity?: ObjectLiteral,\n ): void {\n if (entity && metadata.afterSoftRemoveListeners.length) {\n metadata.afterSoftRemoveListeners.forEach((listener) => {\n if (listener.isAllowed(entity)) {\n const executionResult = listener.execute(entity)\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n }\n })\n }\n\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach((subscriber) => {\n if (\n this.isAllowedSubscriber(subscriber, metadata.target) &&\n subscriber.afterSoftRemove\n ) {\n const executionResult = subscriber.afterSoftRemove({\n connection: this.queryRunner.connection,\n queryRunner: this.queryRunner,\n manager: this.queryRunner.manager,\n entity: entity,\n metadata: metadata,\n databaseEntity: databaseEntity,\n entityId: metadata.getEntityIdMixedMap(databaseEntity),\n })\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n }\n })\n }\n }\n\n /**\n * Broadcasts \"AFTER_RECOVER\" event.\n * After recover event is executed after entity is being recovered in the database.\n * All subscribers and entity listeners who listened to this event will be executed at this point.\n * Subscribers and entity listeners can return promises, it will wait until they are resolved.\n *\n * Note: this method has a performance-optimized code organization, do not change code structure.\n */\n broadcastAfterRecoverEvent(\n result: BroadcasterResult,\n metadata: EntityMetadata,\n entity?: ObjectLiteral,\n databaseEntity?: ObjectLiteral,\n ): void {\n if (entity && metadata.afterRecoverListeners.length) {\n metadata.afterRecoverListeners.forEach((listener) => {\n if (listener.isAllowed(entity)) {\n const executionResult = listener.execute(entity)\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n }\n })\n }\n\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach((subscriber) => {\n if (\n this.isAllowedSubscriber(subscriber, metadata.target) &&\n subscriber.afterRecover\n ) {\n const executionResult = subscriber.afterRecover({\n connection: this.queryRunner.connection,\n queryRunner: this.queryRunner,\n manager: this.queryRunner.manager,\n entity: entity,\n metadata: metadata,\n databaseEntity: databaseEntity,\n entityId: metadata.getEntityIdMixedMap(databaseEntity),\n })\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n }\n })\n }\n }\n\n /**\n * @deprecated Use `broadcastLoadForAllEvent`\n */\n broadcastLoadEventsForAll(\n result: BroadcasterResult,\n metadata: EntityMetadata,\n entities: ObjectLiteral[],\n ): void {\n return this.broadcastLoadEvent(result, metadata, entities)\n }\n\n /**\n * Broadcasts \"AFTER_LOAD\" event for all given entities, and their sub-entities.\n * After load event is executed after entity has been loaded from the database.\n * All subscribers and entity listeners who listened to this event will be executed at this point.\n * Subscribers and entity listeners can return promises, it will wait until they are resolved.\n *\n * Note: this method has a performance-optimized code organization, do not change code structure.\n */\n broadcastLoadEvent(\n result: BroadcasterResult,\n metadata: EntityMetadata,\n entities: ObjectLiteral[],\n ): void {\n // Calculate which subscribers are fitting for the given entity type\n const fittingSubscribers =\n this.queryRunner.connection.subscribers.filter(\n (subscriber) =>\n this.isAllowedSubscriber(subscriber, metadata.target) &&\n subscriber.afterLoad,\n )\n\n if (\n metadata.relations.length ||\n metadata.afterLoadListeners.length ||\n fittingSubscribers.length\n ) {\n // todo: check why need this?\n const nonPromiseEntities = entities.filter(\n (entity) => !(entity instanceof Promise),\n )\n\n // collect load events for all children entities that were loaded with the main entity\n if (metadata.relations.length) {\n metadata.relations.forEach((relation) => {\n nonPromiseEntities.forEach((entity) => {\n // in lazy relations we cannot simply access to entity property because it will cause a getter and a database query\n if (\n relation.isLazy &&\n !entity.hasOwnProperty(relation.propertyName)\n )\n return\n\n const value = relation.getEntityValue(entity)\n if (ObjectUtils.isObject(value))\n this.broadcastLoadEvent(\n result,\n relation.inverseEntityMetadata,\n Array.isArray(value) ? value : [value],\n )\n })\n })\n }\n\n if (metadata.afterLoadListeners.length) {\n metadata.afterLoadListeners.forEach((listener) => {\n nonPromiseEntities.forEach((entity) => {\n if (listener.isAllowed(entity)) {\n const executionResult = listener.execute(entity)\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n }\n })\n })\n }\n\n fittingSubscribers.forEach((subscriber) => {\n nonPromiseEntities.forEach((entity) => {\n const executionResult = subscriber.afterLoad!(entity, {\n entity,\n metadata,\n connection: this.queryRunner.connection,\n queryRunner: this.queryRunner,\n manager: this.queryRunner.manager,\n })\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n })\n })\n }\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Checks if subscriber's methods can be executed by checking if its don't listen to the particular entity,\n * or listens our entity.\n */\n protected isAllowedSubscriber(\n subscriber: EntitySubscriberInterface<any>,\n target: Function | string,\n ): boolean {\n return (\n !subscriber.listenTo ||\n !subscriber.listenTo() ||\n subscriber.listenTo() === Object ||\n subscriber.listenTo() === target ||\n subscriber.listenTo().isPrototypeOf(target)\n )\n }\n}\n"],"sourceRoot":".."}
1
+ {"version":3,"sources":["../browser/src/subscriber/Broadcaster.ts"],"names":[],"mappings":"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","file":"Broadcaster.js","sourcesContent":["import { EntitySubscriberInterface } from \"./EntitySubscriberInterface\"\nimport { ObjectLiteral } from \"../common/ObjectLiteral\"\nimport { QueryRunner } from \"../query-runner/QueryRunner\"\nimport { EntityMetadata } from \"../metadata/EntityMetadata\"\nimport { BroadcasterResult } from \"./BroadcasterResult\"\nimport { ColumnMetadata } from \"../metadata/ColumnMetadata\"\nimport { RelationMetadata } from \"../metadata/RelationMetadata\"\nimport { ObjectUtils } from \"../util/ObjectUtils\"\n\ninterface BroadcasterEvents {\n BeforeTransactionCommit: () => void\n AfterTransactionCommit: () => void\n BeforeTransactionStart: () => void\n AfterTransactionStart: () => void\n BeforeTransactionRollback: () => void\n AfterTransactionRollback: () => void\n\n BeforeUpdate: (\n metadata: EntityMetadata,\n entity?: ObjectLiteral,\n databaseEntity?: ObjectLiteral,\n updatedColumns?: ColumnMetadata[],\n updatedRelations?: RelationMetadata[],\n ) => void\n AfterUpdate: (\n metadata: EntityMetadata,\n entity?: ObjectLiteral,\n databaseEntity?: ObjectLiteral,\n updatedColumns?: ColumnMetadata[],\n updatedRelations?: RelationMetadata[],\n ) => void\n\n BeforeInsert: (\n metadata: EntityMetadata,\n entity: ObjectLiteral | undefined,\n ) => void\n AfterInsert: (\n metadata: EntityMetadata,\n entity: ObjectLiteral | undefined,\n ) => void\n\n BeforeRemove: (\n metadata: EntityMetadata,\n entity?: ObjectLiteral,\n databaseEntity?: ObjectLiteral,\n ) => void\n AfterRemove: (\n metadata: EntityMetadata,\n entity?: ObjectLiteral,\n databaseEntity?: ObjectLiteral,\n ) => void\n\n BeforeSoftRemove: (\n metadata: EntityMetadata,\n entity?: ObjectLiteral,\n databaseEntity?: ObjectLiteral,\n ) => void\n AfterSoftRemove: (\n metadata: EntityMetadata,\n entity?: ObjectLiteral,\n databaseEntity?: ObjectLiteral,\n ) => void\n\n BeforeRecover: (\n metadata: EntityMetadata,\n entity?: ObjectLiteral,\n databaseEntity?: ObjectLiteral,\n ) => void\n AfterRecover: (\n metadata: EntityMetadata,\n entity?: ObjectLiteral,\n databaseEntity?: ObjectLiteral,\n ) => void\n\n Load: (metadata: EntityMetadata, entities: ObjectLiteral[]) => void\n}\n\n/**\n * Broadcaster provides a helper methods to broadcast events to the subscribers.\n */\nexport class Broadcaster {\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(private queryRunner: QueryRunner) {}\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n async broadcast<U extends keyof BroadcasterEvents>(\n event: U,\n ...args: Parameters<BroadcasterEvents[U]>\n ): Promise<void> {\n const result = new BroadcasterResult()\n\n const broadcastFunction = this[`broadcast${event}Event` as keyof this]\n\n if (typeof broadcastFunction === \"function\") {\n ;(broadcastFunction as any).call(this, result, ...args)\n }\n\n await result.wait()\n }\n\n /**\n * Broadcasts \"BEFORE_INSERT\" event.\n * Before insert event is executed before entity is being inserted to the database for the first time.\n * All subscribers and entity listeners who listened to this event will be executed at this point.\n * Subscribers and entity listeners can return promises, it will wait until they are resolved.\n *\n * Note: this method has a performance-optimized code organization, do not change code structure.\n */\n broadcastBeforeInsertEvent(\n result: BroadcasterResult,\n metadata: EntityMetadata,\n entity: undefined | ObjectLiteral,\n ): void {\n if (entity && metadata.beforeInsertListeners.length) {\n metadata.beforeInsertListeners.forEach((listener) => {\n if (listener.isAllowed(entity)) {\n const executionResult = listener.execute(entity)\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n }\n })\n }\n\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach((subscriber) => {\n if (\n this.isAllowedSubscriber(subscriber, metadata.target) &&\n subscriber.beforeInsert\n ) {\n const executionResult = subscriber.beforeInsert({\n connection: this.queryRunner.connection,\n queryRunner: this.queryRunner,\n manager: this.queryRunner.manager,\n entity: entity,\n metadata: metadata,\n })\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n }\n })\n }\n }\n\n /**\n * Broadcasts \"BEFORE_UPDATE\" event.\n * Before update event is executed before entity is being updated in the database.\n * All subscribers and entity listeners who listened to this event will be executed at this point.\n * Subscribers and entity listeners can return promises, it will wait until they are resolved.\n *\n * Note: this method has a performance-optimized code organization, do not change code structure.\n */\n broadcastBeforeUpdateEvent(\n result: BroadcasterResult,\n metadata: EntityMetadata,\n entity?: ObjectLiteral,\n databaseEntity?: ObjectLiteral,\n updatedColumns?: ColumnMetadata[],\n updatedRelations?: RelationMetadata[],\n ): void {\n // todo: send relations too?\n if (entity && metadata.beforeUpdateListeners.length) {\n metadata.beforeUpdateListeners.forEach((listener) => {\n if (listener.isAllowed(entity)) {\n const executionResult = listener.execute(entity)\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n }\n })\n }\n\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach((subscriber) => {\n if (\n this.isAllowedSubscriber(subscriber, metadata.target) &&\n subscriber.beforeUpdate\n ) {\n const executionResult = subscriber.beforeUpdate({\n connection: this.queryRunner.connection,\n queryRunner: this.queryRunner,\n manager: this.queryRunner.manager,\n entity: entity,\n metadata: metadata,\n databaseEntity: databaseEntity,\n updatedColumns: updatedColumns || [],\n updatedRelations: updatedRelations || [],\n })\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n }\n })\n }\n }\n\n /**\n * Broadcasts \"BEFORE_REMOVE\" event.\n * Before remove event is executed before entity is being removed from the database.\n * All subscribers and entity listeners who listened to this event will be executed at this point.\n * Subscribers and entity listeners can return promises, it will wait until they are resolved.\n *\n * Note: this method has a performance-optimized code organization, do not change code structure.\n */\n broadcastBeforeRemoveEvent(\n result: BroadcasterResult,\n metadata: EntityMetadata,\n entity?: ObjectLiteral,\n databaseEntity?: ObjectLiteral,\n identifier?: ObjectLiteral,\n ): void {\n if (entity && metadata.beforeRemoveListeners.length) {\n metadata.beforeRemoveListeners.forEach((listener) => {\n if (listener.isAllowed(entity)) {\n const executionResult = listener.execute(entity)\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n }\n })\n }\n\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach((subscriber) => {\n if (\n this.isAllowedSubscriber(subscriber, metadata.target) &&\n subscriber.beforeRemove\n ) {\n const executionResult = subscriber.beforeRemove({\n connection: this.queryRunner.connection,\n queryRunner: this.queryRunner,\n manager: this.queryRunner.manager,\n entity: entity,\n metadata: metadata,\n databaseEntity: databaseEntity,\n entityId: metadata.getEntityIdMixedMap(\n databaseEntity ?? identifier,\n ),\n })\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n }\n })\n }\n }\n\n /**\n * Broadcasts \"BEFORE_SOFT_REMOVE\" event.\n * Before soft remove event is executed before entity is being soft removed from the database.\n * All subscribers and entity listeners who listened to this event will be executed at this point.\n * Subscribers and entity listeners can return promises, it will wait until they are resolved.\n *\n * Note: this method has a performance-optimized code organization, do not change code structure.\n */\n broadcastBeforeSoftRemoveEvent(\n result: BroadcasterResult,\n metadata: EntityMetadata,\n entity?: ObjectLiteral,\n databaseEntity?: ObjectLiteral,\n identifier?: ObjectLiteral,\n ): void {\n if (entity && metadata.beforeSoftRemoveListeners.length) {\n metadata.beforeSoftRemoveListeners.forEach((listener) => {\n if (listener.isAllowed(entity)) {\n const executionResult = listener.execute(entity)\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n }\n })\n }\n\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach((subscriber) => {\n if (\n this.isAllowedSubscriber(subscriber, metadata.target) &&\n subscriber.beforeSoftRemove\n ) {\n const executionResult = subscriber.beforeSoftRemove({\n connection: this.queryRunner.connection,\n queryRunner: this.queryRunner,\n manager: this.queryRunner.manager,\n entity: entity,\n metadata: metadata,\n databaseEntity: databaseEntity,\n entityId: metadata.getEntityIdMixedMap(\n databaseEntity ?? identifier,\n ),\n })\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n }\n })\n }\n }\n\n /**\n * Broadcasts \"BEFORE_RECOVER\" event.\n * Before recover event is executed before entity is being recovered in the database.\n * All subscribers and entity listeners who listened to this event will be executed at this point.\n * Subscribers and entity listeners can return promises, it will wait until they are resolved.\n *\n * Note: this method has a performance-optimized code organization, do not change code structure.\n */\n broadcastBeforeRecoverEvent(\n result: BroadcasterResult,\n metadata: EntityMetadata,\n entity?: ObjectLiteral,\n databaseEntity?: ObjectLiteral,\n identifier?: ObjectLiteral,\n ): void {\n if (entity && metadata.beforeRecoverListeners.length) {\n metadata.beforeRecoverListeners.forEach((listener) => {\n if (listener.isAllowed(entity)) {\n const executionResult = listener.execute(entity)\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n }\n })\n }\n\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach((subscriber) => {\n if (\n this.isAllowedSubscriber(subscriber, metadata.target) &&\n subscriber.beforeRecover\n ) {\n const executionResult = subscriber.beforeRecover({\n connection: this.queryRunner.connection,\n queryRunner: this.queryRunner,\n manager: this.queryRunner.manager,\n entity: entity,\n metadata: metadata,\n databaseEntity: databaseEntity,\n entityId: metadata.getEntityIdMixedMap(\n databaseEntity ?? identifier,\n ),\n })\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n }\n })\n }\n }\n\n /**\n * Broadcasts \"AFTER_INSERT\" event.\n * After insert event is executed after entity is being persisted to the database for the first time.\n * All subscribers and entity listeners who listened to this event will be executed at this point.\n * Subscribers and entity listeners can return promises, it will wait until they are resolved.\n *\n * Note: this method has a performance-optimized code organization, do not change code structure.\n */\n broadcastAfterInsertEvent(\n result: BroadcasterResult,\n metadata: EntityMetadata,\n entity?: ObjectLiteral,\n ): void {\n if (entity && metadata.afterInsertListeners.length) {\n metadata.afterInsertListeners.forEach((listener) => {\n if (listener.isAllowed(entity)) {\n const executionResult = listener.execute(entity)\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n }\n })\n }\n\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach((subscriber) => {\n if (\n this.isAllowedSubscriber(subscriber, metadata.target) &&\n subscriber.afterInsert\n ) {\n const executionResult = subscriber.afterInsert({\n connection: this.queryRunner.connection,\n queryRunner: this.queryRunner,\n manager: this.queryRunner.manager,\n entity: entity,\n metadata: metadata,\n })\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n }\n })\n }\n }\n\n /**\n * Broadcasts \"BEFORE_TRANSACTION_START\" event.\n */\n broadcastBeforeTransactionStartEvent(result: BroadcasterResult): void {\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach((subscriber) => {\n if (subscriber.beforeTransactionStart) {\n const executionResult = subscriber.beforeTransactionStart({\n connection: this.queryRunner.connection,\n queryRunner: this.queryRunner,\n manager: this.queryRunner.manager,\n })\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n }\n })\n }\n }\n\n /**\n * Broadcasts \"AFTER_TRANSACTION_START\" event.\n */\n broadcastAfterTransactionStartEvent(result: BroadcasterResult): void {\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach((subscriber) => {\n if (subscriber.afterTransactionStart) {\n const executionResult = subscriber.afterTransactionStart({\n connection: this.queryRunner.connection,\n queryRunner: this.queryRunner,\n manager: this.queryRunner.manager,\n })\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n }\n })\n }\n }\n\n /**\n * Broadcasts \"BEFORE_TRANSACTION_COMMIT\" event.\n */\n broadcastBeforeTransactionCommitEvent(result: BroadcasterResult): void {\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach((subscriber) => {\n if (subscriber.beforeTransactionCommit) {\n const executionResult = subscriber.beforeTransactionCommit({\n connection: this.queryRunner.connection,\n queryRunner: this.queryRunner,\n manager: this.queryRunner.manager,\n })\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n }\n })\n }\n }\n\n /**\n * Broadcasts \"AFTER_TRANSACTION_COMMIT\" event.\n */\n broadcastAfterTransactionCommitEvent(result: BroadcasterResult): void {\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach((subscriber) => {\n if (subscriber.afterTransactionCommit) {\n const executionResult = subscriber.afterTransactionCommit({\n connection: this.queryRunner.connection,\n queryRunner: this.queryRunner,\n manager: this.queryRunner.manager,\n })\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n }\n })\n }\n }\n\n /**\n * Broadcasts \"BEFORE_TRANSACTION_ROLLBACK\" event.\n */\n broadcastBeforeTransactionRollbackEvent(result: BroadcasterResult): void {\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach((subscriber) => {\n if (subscriber.beforeTransactionRollback) {\n const executionResult =\n subscriber.beforeTransactionRollback({\n connection: this.queryRunner.connection,\n queryRunner: this.queryRunner,\n manager: this.queryRunner.manager,\n })\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n }\n })\n }\n }\n\n /**\n * Broadcasts \"AFTER_TRANSACTION_ROLLBACK\" event.\n */\n broadcastAfterTransactionRollbackEvent(result: BroadcasterResult): void {\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach((subscriber) => {\n if (subscriber.afterTransactionRollback) {\n const executionResult = subscriber.afterTransactionRollback(\n {\n connection: this.queryRunner.connection,\n queryRunner: this.queryRunner,\n manager: this.queryRunner.manager,\n },\n )\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n }\n })\n }\n }\n\n /**\n * Broadcasts \"AFTER_UPDATE\" event.\n * After update event is executed after entity is being updated in the database.\n * All subscribers and entity listeners who listened to this event will be executed at this point.\n * Subscribers and entity listeners can return promises, it will wait until they are resolved.\n *\n * Note: this method has a performance-optimized code organization, do not change code structure.\n */\n broadcastAfterUpdateEvent(\n result: BroadcasterResult,\n metadata: EntityMetadata,\n entity?: ObjectLiteral,\n databaseEntity?: ObjectLiteral,\n updatedColumns?: ColumnMetadata[],\n updatedRelations?: RelationMetadata[],\n ): void {\n if (entity && metadata.afterUpdateListeners.length) {\n metadata.afterUpdateListeners.forEach((listener) => {\n if (listener.isAllowed(entity)) {\n const executionResult = listener.execute(entity)\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n }\n })\n }\n\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach((subscriber) => {\n if (\n this.isAllowedSubscriber(subscriber, metadata.target) &&\n subscriber.afterUpdate\n ) {\n const executionResult = subscriber.afterUpdate({\n connection: this.queryRunner.connection,\n queryRunner: this.queryRunner,\n manager: this.queryRunner.manager,\n entity: entity,\n metadata: metadata,\n databaseEntity: databaseEntity,\n updatedColumns: updatedColumns || [],\n updatedRelations: updatedRelations || [],\n })\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n }\n })\n }\n }\n\n /**\n * Broadcasts \"AFTER_REMOVE\" event.\n * After remove event is executed after entity is being removed from the database.\n * All subscribers and entity listeners who listened to this event will be executed at this point.\n * Subscribers and entity listeners can return promises, it will wait until they are resolved.\n *\n * Note: this method has a performance-optimized code organization, do not change code structure.\n */\n broadcastAfterRemoveEvent(\n result: BroadcasterResult,\n metadata: EntityMetadata,\n entity?: ObjectLiteral,\n databaseEntity?: ObjectLiteral,\n identifier?: ObjectLiteral,\n ): void {\n if (entity && metadata.afterRemoveListeners.length) {\n metadata.afterRemoveListeners.forEach((listener) => {\n if (listener.isAllowed(entity)) {\n const executionResult = listener.execute(entity)\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n }\n })\n }\n\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach((subscriber) => {\n if (\n this.isAllowedSubscriber(subscriber, metadata.target) &&\n subscriber.afterRemove\n ) {\n const executionResult = subscriber.afterRemove({\n connection: this.queryRunner.connection,\n queryRunner: this.queryRunner,\n manager: this.queryRunner.manager,\n entity: entity,\n metadata: metadata,\n databaseEntity: databaseEntity,\n entityId: metadata.getEntityIdMixedMap(\n databaseEntity ?? identifier,\n ),\n })\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n }\n })\n }\n }\n\n /**\n * Broadcasts \"AFTER_SOFT_REMOVE\" event.\n * After soft remove event is executed after entity is being soft removed from the database.\n * All subscribers and entity listeners who listened to this event will be executed at this point.\n * Subscribers and entity listeners can return promises, it will wait until they are resolved.\n *\n * Note: this method has a performance-optimized code organization, do not change code structure.\n */\n broadcastAfterSoftRemoveEvent(\n result: BroadcasterResult,\n metadata: EntityMetadata,\n entity?: ObjectLiteral,\n databaseEntity?: ObjectLiteral,\n identifier?: ObjectLiteral,\n ): void {\n if (entity && metadata.afterSoftRemoveListeners.length) {\n metadata.afterSoftRemoveListeners.forEach((listener) => {\n if (listener.isAllowed(entity)) {\n const executionResult = listener.execute(entity)\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n }\n })\n }\n\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach((subscriber) => {\n if (\n this.isAllowedSubscriber(subscriber, metadata.target) &&\n subscriber.afterSoftRemove\n ) {\n const executionResult = subscriber.afterSoftRemove({\n connection: this.queryRunner.connection,\n queryRunner: this.queryRunner,\n manager: this.queryRunner.manager,\n entity: entity,\n metadata: metadata,\n databaseEntity: databaseEntity,\n entityId: metadata.getEntityIdMixedMap(\n databaseEntity ?? identifier,\n ),\n })\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n }\n })\n }\n }\n\n /**\n * Broadcasts \"AFTER_RECOVER\" event.\n * After recover event is executed after entity is being recovered in the database.\n * All subscribers and entity listeners who listened to this event will be executed at this point.\n * Subscribers and entity listeners can return promises, it will wait until they are resolved.\n *\n * Note: this method has a performance-optimized code organization, do not change code structure.\n */\n broadcastAfterRecoverEvent(\n result: BroadcasterResult,\n metadata: EntityMetadata,\n entity?: ObjectLiteral,\n databaseEntity?: ObjectLiteral,\n identifier?: ObjectLiteral,\n ): void {\n if (entity && metadata.afterRecoverListeners.length) {\n metadata.afterRecoverListeners.forEach((listener) => {\n if (listener.isAllowed(entity)) {\n const executionResult = listener.execute(entity)\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n }\n })\n }\n\n if (this.queryRunner.connection.subscribers.length) {\n this.queryRunner.connection.subscribers.forEach((subscriber) => {\n if (\n this.isAllowedSubscriber(subscriber, metadata.target) &&\n subscriber.afterRecover\n ) {\n const executionResult = subscriber.afterRecover({\n connection: this.queryRunner.connection,\n queryRunner: this.queryRunner,\n manager: this.queryRunner.manager,\n entity: entity,\n metadata: metadata,\n databaseEntity: databaseEntity,\n entityId: metadata.getEntityIdMixedMap(\n databaseEntity ?? identifier,\n ),\n })\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n }\n })\n }\n }\n\n /**\n * @deprecated Use `broadcastLoadForAllEvent`\n */\n broadcastLoadEventsForAll(\n result: BroadcasterResult,\n metadata: EntityMetadata,\n entities: ObjectLiteral[],\n ): void {\n return this.broadcastLoadEvent(result, metadata, entities)\n }\n\n /**\n * Broadcasts \"AFTER_LOAD\" event for all given entities, and their sub-entities.\n * After load event is executed after entity has been loaded from the database.\n * All subscribers and entity listeners who listened to this event will be executed at this point.\n * Subscribers and entity listeners can return promises, it will wait until they are resolved.\n *\n * Note: this method has a performance-optimized code organization, do not change code structure.\n */\n broadcastLoadEvent(\n result: BroadcasterResult,\n metadata: EntityMetadata,\n entities: ObjectLiteral[],\n ): void {\n // Calculate which subscribers are fitting for the given entity type\n const fittingSubscribers =\n this.queryRunner.connection.subscribers.filter(\n (subscriber) =>\n this.isAllowedSubscriber(subscriber, metadata.target) &&\n subscriber.afterLoad,\n )\n\n if (\n metadata.relations.length ||\n metadata.afterLoadListeners.length ||\n fittingSubscribers.length\n ) {\n // todo: check why need this?\n const nonPromiseEntities = entities.filter(\n (entity) => !(entity instanceof Promise),\n )\n\n // collect load events for all children entities that were loaded with the main entity\n if (metadata.relations.length) {\n metadata.relations.forEach((relation) => {\n nonPromiseEntities.forEach((entity) => {\n // in lazy relations we cannot simply access to entity property because it will cause a getter and a database query\n if (\n relation.isLazy &&\n !entity.hasOwnProperty(relation.propertyName)\n )\n return\n\n const value = relation.getEntityValue(entity)\n if (ObjectUtils.isObject(value))\n this.broadcastLoadEvent(\n result,\n relation.inverseEntityMetadata,\n Array.isArray(value) ? value : [value],\n )\n })\n })\n }\n\n if (metadata.afterLoadListeners.length) {\n metadata.afterLoadListeners.forEach((listener) => {\n nonPromiseEntities.forEach((entity) => {\n if (listener.isAllowed(entity)) {\n const executionResult = listener.execute(entity)\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n }\n })\n })\n }\n\n fittingSubscribers.forEach((subscriber) => {\n nonPromiseEntities.forEach((entity) => {\n const executionResult = subscriber.afterLoad!(entity, {\n entity,\n metadata,\n connection: this.queryRunner.connection,\n queryRunner: this.queryRunner,\n manager: this.queryRunner.manager,\n })\n if (executionResult instanceof Promise)\n result.promises.push(executionResult)\n result.count++\n })\n })\n }\n }\n\n // -------------------------------------------------------------------------\n // Protected Methods\n // -------------------------------------------------------------------------\n\n /**\n * Checks if subscriber's methods can be executed by checking if its don't listen to the particular entity,\n * or listens our entity.\n */\n protected isAllowedSubscriber(\n subscriber: EntitySubscriberInterface<any>,\n target: Function | string,\n ): boolean {\n return (\n !subscriber.listenTo ||\n !subscriber.listenTo() ||\n subscriber.listenTo() === Object ||\n subscriber.listenTo() === target ||\n subscriber.listenTo().isPrototypeOf(target)\n )\n }\n}\n"],"sourceRoot":".."}
@@ -55,4 +55,16 @@ export declare class DateUtils {
55
55
  * Formats given number to "0x" format, e.g. if it is 1 then it will return "01".
56
56
  */
57
57
  private static formatMilliseconds;
58
+ /**
59
+ * Parse a date without the UTC-offset of the device
60
+ *
61
+ * The problem here is with wrong timezone.
62
+ *
63
+ * For example:
64
+ *
65
+ * ``new Date('2021-04-28')`` will generate `2021-04-28T00:00:00.000Z`
66
+ * in my timezone, which is not true for my timezone (GMT-0300). It should
67
+ * be `2021-04-28T03:00:00.000Z` as `new Date(2021, 3, 28)` generates.
68
+ */
69
+ private static parseDateAsISO;
58
70
  }