typeorm 0.2.42-dev.90a8deb → 0.2.42-dev.9e844d9

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 (457) hide show
  1. package/README.md +38 -0
  2. package/browser/common/DeepPartial.d.ts +3 -3
  3. package/browser/common/DeepPartial.js.map +1 -1
  4. package/browser/common/RelationType.d.ts +14 -0
  5. package/browser/common/RelationType.js +3 -0
  6. package/browser/common/RelationType.js.map +1 -0
  7. package/browser/connection/BaseConnectionOptions.d.ts +5 -0
  8. package/browser/connection/BaseConnectionOptions.js.map +1 -1
  9. package/browser/connection/Connection.d.ts +5 -1
  10. package/browser/connection/Connection.js +79 -54
  11. package/browser/connection/Connection.js.map +1 -1
  12. package/browser/connection/ConnectionMetadataBuilder.d.ts +3 -3
  13. package/browser/connection/ConnectionMetadataBuilder.js +54 -22
  14. package/browser/connection/ConnectionMetadataBuilder.js.map +1 -1
  15. package/browser/connection/ConnectionOptionsReader.js +36 -29
  16. package/browser/connection/ConnectionOptionsReader.js.map +1 -1
  17. package/browser/connection/options-reader/ConnectionOptionsEnvReader.js +1 -0
  18. package/browser/connection/options-reader/ConnectionOptionsEnvReader.js.map +1 -1
  19. package/browser/decorator/Unique.d.ts +5 -4
  20. package/browser/decorator/Unique.js +7 -3
  21. package/browser/decorator/Unique.js.map +1 -1
  22. package/browser/decorator/listeners/AfterRecover.d.ts +4 -0
  23. package/browser/decorator/listeners/AfterRecover.js +16 -0
  24. package/browser/decorator/listeners/AfterRecover.js.map +1 -0
  25. package/browser/decorator/listeners/AfterSoftRemove.d.ts +4 -0
  26. package/browser/decorator/listeners/AfterSoftRemove.js +16 -0
  27. package/browser/decorator/listeners/AfterSoftRemove.js.map +1 -0
  28. package/browser/decorator/listeners/BeforeRecover.d.ts +4 -0
  29. package/browser/decorator/listeners/BeforeRecover.js +16 -0
  30. package/browser/decorator/listeners/BeforeRecover.js.map +1 -0
  31. package/browser/decorator/listeners/BeforeSoftRemove.d.ts +4 -0
  32. package/browser/decorator/listeners/BeforeSoftRemove.js +16 -0
  33. package/browser/decorator/listeners/BeforeSoftRemove.js.map +1 -0
  34. package/browser/decorator/options/RelationOptions.d.ts +1 -1
  35. package/browser/decorator/options/RelationOptions.js.map +1 -1
  36. package/browser/decorator/options/UniqueOptions.d.ts +10 -0
  37. package/browser/decorator/options/UniqueOptions.js +3 -0
  38. package/browser/decorator/options/UniqueOptions.js.map +1 -0
  39. package/browser/driver/aurora-data-api/AuroraDataApiQueryRunner.js +2 -2
  40. package/browser/driver/aurora-data-api/AuroraDataApiQueryRunner.js.map +1 -1
  41. package/browser/driver/better-sqlite3/BetterSqlite3Driver.d.ts +14 -1
  42. package/browser/driver/better-sqlite3/BetterSqlite3Driver.js +94 -9
  43. package/browser/driver/better-sqlite3/BetterSqlite3Driver.js.map +1 -1
  44. package/browser/driver/better-sqlite3/BetterSqlite3QueryRunner.d.ts +10 -0
  45. package/browser/driver/better-sqlite3/BetterSqlite3QueryRunner.js +64 -1
  46. package/browser/driver/better-sqlite3/BetterSqlite3QueryRunner.js.map +1 -1
  47. package/browser/driver/capacitor/CapacitorQueryRunner.d.ts +8 -0
  48. package/browser/driver/capacitor/CapacitorQueryRunner.js +30 -0
  49. package/browser/driver/capacitor/CapacitorQueryRunner.js.map +1 -1
  50. package/browser/driver/cockroachdb/CockroachQueryRunner.js +1 -1
  51. package/browser/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  52. package/browser/driver/cordova/CordovaQueryRunner.d.ts +8 -0
  53. package/browser/driver/cordova/CordovaQueryRunner.js +30 -0
  54. package/browser/driver/cordova/CordovaQueryRunner.js.map +1 -1
  55. package/browser/driver/expo/ExpoQueryRunner.d.ts +8 -0
  56. package/browser/driver/expo/ExpoQueryRunner.js +30 -0
  57. package/browser/driver/expo/ExpoQueryRunner.js.map +1 -1
  58. package/browser/driver/mongodb/MongoConnectionOptions.d.ts +1 -1
  59. package/browser/driver/mongodb/MongoConnectionOptions.js.map +1 -1
  60. package/browser/driver/mongodb/MongoQueryRunner.d.ts +8 -0
  61. package/browser/driver/mongodb/MongoQueryRunner.js +20 -0
  62. package/browser/driver/mongodb/MongoQueryRunner.js.map +1 -1
  63. package/browser/driver/mysql/MysqlQueryRunner.js +1 -1
  64. package/browser/driver/mysql/MysqlQueryRunner.js.map +1 -1
  65. package/browser/driver/nativescript/NativescriptQueryRunner.d.ts +8 -0
  66. package/browser/driver/nativescript/NativescriptQueryRunner.js +30 -0
  67. package/browser/driver/nativescript/NativescriptQueryRunner.js.map +1 -1
  68. package/browser/driver/oracle/OracleQueryRunner.js +1 -1
  69. package/browser/driver/oracle/OracleQueryRunner.js.map +1 -1
  70. package/browser/driver/postgres/PostgresQueryRunner.js +49 -18
  71. package/browser/driver/postgres/PostgresQueryRunner.js.map +1 -1
  72. package/browser/driver/react-native/ReactNativeQueryRunner.d.ts +8 -0
  73. package/browser/driver/react-native/ReactNativeQueryRunner.js +30 -0
  74. package/browser/driver/react-native/ReactNativeQueryRunner.js.map +1 -1
  75. package/browser/driver/sap/SapQueryRunner.js +1 -1
  76. package/browser/driver/sap/SapQueryRunner.js.map +1 -1
  77. package/browser/driver/sqlite/SqliteDriver.d.ts +13 -0
  78. package/browser/driver/sqlite/SqliteDriver.js +95 -11
  79. package/browser/driver/sqlite/SqliteDriver.js.map +1 -1
  80. package/browser/driver/sqlite/SqliteQueryRunner.d.ts +8 -0
  81. package/browser/driver/sqlite/SqliteQueryRunner.js +30 -0
  82. package/browser/driver/sqlite/SqliteQueryRunner.js.map +1 -1
  83. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.d.ts +13 -0
  84. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js +25 -2
  85. package/browser/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
  86. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.d.ts +11 -1
  87. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +119 -58
  88. package/browser/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  89. package/browser/driver/sqljs/SqljsQueryRunner.d.ts +8 -0
  90. package/browser/driver/sqljs/SqljsQueryRunner.js +30 -0
  91. package/browser/driver/sqljs/SqljsQueryRunner.js.map +1 -1
  92. package/browser/entity-manager/EntityManager.js +1 -11
  93. package/browser/entity-manager/EntityManager.js.map +1 -1
  94. package/browser/entity-manager/MongoEntityManager.d.ts +2 -0
  95. package/browser/entity-manager/MongoEntityManager.js +37 -5
  96. package/browser/entity-manager/MongoEntityManager.js.map +1 -1
  97. package/browser/entity-schema/EntitySchemaRelationOptions.d.ts +7 -1
  98. package/browser/entity-schema/EntitySchemaRelationOptions.js.map +1 -1
  99. package/browser/entity-schema/EntitySchemaTransformer.js +3 -1
  100. package/browser/entity-schema/EntitySchemaTransformer.js.map +1 -1
  101. package/browser/entity-schema/EntitySchemaUniqueOptions.d.ts +5 -0
  102. package/browser/entity-schema/EntitySchemaUniqueOptions.js.map +1 -1
  103. package/browser/find-options/FindOneOptions.d.ts +6 -0
  104. package/browser/find-options/FindOneOptions.js.map +1 -1
  105. package/browser/find-options/FindOptionsUtils.js +4 -0
  106. package/browser/find-options/FindOptionsUtils.js.map +1 -1
  107. package/browser/find-options/operator/Like.d.ts +1 -1
  108. package/browser/find-options/operator/Like.js +1 -1
  109. package/browser/find-options/operator/Like.js.map +1 -1
  110. package/browser/find-options/operator/Not.d.ts +1 -1
  111. package/browser/find-options/operator/Not.js +1 -1
  112. package/browser/find-options/operator/Not.js.map +1 -1
  113. package/browser/globals.js +34 -7
  114. package/browser/globals.js.map +1 -1
  115. package/browser/index.d.ts +6 -0
  116. package/browser/index.js +6 -0
  117. package/browser/index.js.map +1 -1
  118. package/browser/metadata/EntityMetadata.d.ts +16 -0
  119. package/browser/metadata/EntityMetadata.js +16 -0
  120. package/browser/metadata/EntityMetadata.js.map +1 -1
  121. package/browser/metadata/RelationMetadata.d.ts +1 -1
  122. package/browser/metadata/RelationMetadata.js.map +1 -1
  123. package/browser/metadata/UniqueMetadata.d.ts +5 -0
  124. package/browser/metadata/UniqueMetadata.js +1 -0
  125. package/browser/metadata/UniqueMetadata.js.map +1 -1
  126. package/browser/metadata/types/EventListenerTypes.d.ts +5 -1
  127. package/browser/metadata/types/EventListenerTypes.js +4 -0
  128. package/browser/metadata/types/EventListenerTypes.js.map +1 -1
  129. package/browser/metadata-args/UniqueMetadataArgs.d.ts +5 -0
  130. package/browser/metadata-args/UniqueMetadataArgs.js.map +1 -1
  131. package/browser/metadata-builder/EntityMetadataBuilder.js +4 -0
  132. package/browser/metadata-builder/EntityMetadataBuilder.js.map +1 -1
  133. package/browser/metadata-builder/EntityMetadataValidator.js +2 -1
  134. package/browser/metadata-builder/EntityMetadataValidator.js.map +1 -1
  135. package/browser/migration/MigrationExecutor.js +38 -26
  136. package/browser/migration/MigrationExecutor.js.map +1 -1
  137. package/browser/persistence/SubjectExecutor.d.ts +4 -2
  138. package/browser/persistence/SubjectExecutor.js +105 -13
  139. package/browser/persistence/SubjectExecutor.js.map +1 -1
  140. package/browser/persistence/subject-builder/OneToManySubjectBuilder.js +3 -0
  141. package/browser/persistence/subject-builder/OneToManySubjectBuilder.js.map +1 -1
  142. package/browser/persistence/tree/MaterializedPathSubjectExecutor.js +1 -1
  143. package/browser/persistence/tree/MaterializedPathSubjectExecutor.js.map +1 -1
  144. package/browser/platform/PlatformTools.d.ts +1 -0
  145. package/browser/platform/PlatformTools.js +5 -0
  146. package/browser/platform/PlatformTools.js.map +1 -1
  147. package/browser/query-builder/DeleteQueryBuilder.d.ts +3 -1
  148. package/browser/query-builder/DeleteQueryBuilder.js +3 -1
  149. package/browser/query-builder/DeleteQueryBuilder.js.map +1 -1
  150. package/browser/query-builder/InsertQueryBuilder.js +11 -2
  151. package/browser/query-builder/InsertQueryBuilder.js.map +1 -1
  152. package/browser/query-builder/NotBrackets.d.ts +7 -0
  153. package/browser/query-builder/NotBrackets.js +16 -0
  154. package/browser/query-builder/NotBrackets.js.map +1 -0
  155. package/browser/query-builder/QueryBuilder.d.ts +2 -1
  156. package/browser/query-builder/QueryBuilder.js +2 -1
  157. package/browser/query-builder/QueryBuilder.js.map +1 -1
  158. package/browser/query-builder/RelationLoader.js +11 -6
  159. package/browser/query-builder/RelationLoader.js.map +1 -1
  160. package/browser/query-builder/SelectQueryBuilder.d.ts +9 -0
  161. package/browser/query-builder/SelectQueryBuilder.js +27 -20
  162. package/browser/query-builder/SelectQueryBuilder.js.map +1 -1
  163. package/browser/query-builder/SoftDeleteQueryBuilder.js +44 -30
  164. package/browser/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
  165. package/browser/query-builder/UpdateQueryBuilder.d.ts +3 -1
  166. package/browser/query-builder/UpdateQueryBuilder.js +10 -5
  167. package/browser/query-builder/UpdateQueryBuilder.js.map +1 -1
  168. package/browser/query-builder/WhereExpressionBuilder.d.ts +3 -1
  169. package/browser/query-builder/WhereExpressionBuilder.js.map +1 -1
  170. package/browser/query-builder/relation-id/RelationIdLoader.js +9 -9
  171. package/browser/query-builder/relation-id/RelationIdLoader.js.map +1 -1
  172. package/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.d.ts +13 -0
  173. package/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.js +94 -50
  174. package/browser/query-builder/transformer/RawSqlResultsToEntityTransformer.js.map +1 -1
  175. package/browser/query-runner/BaseQueryRunner.d.ts +10 -2
  176. package/browser/query-runner/BaseQueryRunner.js +23 -3
  177. package/browser/query-runner/BaseQueryRunner.js.map +1 -1
  178. package/browser/query-runner/QueryRunner.d.ts +8 -0
  179. package/browser/query-runner/QueryRunner.js.map +1 -1
  180. package/browser/repository/TreeRepository.js +3 -2
  181. package/browser/repository/TreeRepository.js.map +1 -1
  182. package/browser/schema-builder/RdbmsSchemaBuilder.js +37 -31
  183. package/browser/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
  184. package/browser/schema-builder/options/TableUniqueOptions.d.ts +5 -0
  185. package/browser/schema-builder/options/TableUniqueOptions.js.map +1 -1
  186. package/browser/schema-builder/table/TableUnique.d.ts +5 -0
  187. package/browser/schema-builder/table/TableUnique.js +5 -2
  188. package/browser/schema-builder/table/TableUnique.js.map +1 -1
  189. package/browser/subscriber/Broadcaster.d.ts +40 -0
  190. package/browser/subscriber/Broadcaster.js +191 -31
  191. package/browser/subscriber/Broadcaster.js.map +1 -1
  192. package/browser/subscriber/EntitySubscriberInterface.d.ts +18 -0
  193. package/browser/subscriber/EntitySubscriberInterface.js.map +1 -1
  194. package/browser/subscriber/event/RecoverEvent.d.ts +6 -0
  195. package/browser/subscriber/event/RecoverEvent.js +3 -0
  196. package/browser/subscriber/event/RecoverEvent.js.map +1 -0
  197. package/browser/subscriber/event/SoftRemoveEvent.d.ts +6 -0
  198. package/browser/subscriber/event/SoftRemoveEvent.js +3 -0
  199. package/browser/subscriber/event/SoftRemoveEvent.js.map +1 -0
  200. package/browser/util/DirectoryExportedClassesLoader.d.ts +1 -1
  201. package/browser/util/DirectoryExportedClassesLoader.js +55 -31
  202. package/browser/util/DirectoryExportedClassesLoader.js.map +1 -1
  203. package/browser/util/ImportUtils.d.ts +1 -0
  204. package/browser/util/ImportUtils.js +90 -0
  205. package/browser/util/ImportUtils.js.map +1 -0
  206. package/browser/util/PathUtils.d.ts +10 -0
  207. package/browser/util/PathUtils.js +28 -0
  208. package/browser/util/PathUtils.js.map +1 -0
  209. package/browser/util/RandomGenerator.d.ts +0 -4
  210. package/browser/util/RandomGenerator.js +0 -9
  211. package/browser/util/RandomGenerator.js.map +1 -1
  212. package/commands/CacheClearCommand.js +3 -3
  213. package/commands/CacheClearCommand.js.map +1 -1
  214. package/commands/CommandUtils.d.ts +4 -0
  215. package/commands/CommandUtils.js +10 -0
  216. package/commands/CommandUtils.js.map +1 -1
  217. package/commands/EntityCreateCommand.js +2 -2
  218. package/commands/EntityCreateCommand.js.map +1 -1
  219. package/commands/InitCommand.d.ts +9 -7
  220. package/commands/InitCommand.js +74 -45
  221. package/commands/InitCommand.js.map +1 -1
  222. package/commands/MigrationCreateCommand.d.ts +2 -0
  223. package/commands/MigrationCreateCommand.js +9 -3
  224. package/commands/MigrationCreateCommand.js.map +1 -1
  225. package/commands/MigrationGenerateCommand.d.ts +2 -0
  226. package/commands/MigrationGenerateCommand.js +9 -3
  227. package/commands/MigrationGenerateCommand.js.map +1 -1
  228. package/commands/MigrationRevertCommand.js +2 -3
  229. package/commands/MigrationRevertCommand.js.map +1 -1
  230. package/commands/MigrationRunCommand.js +2 -3
  231. package/commands/MigrationRunCommand.js.map +1 -1
  232. package/commands/MigrationShowCommand.js +5 -7
  233. package/commands/MigrationShowCommand.js.map +1 -1
  234. package/commands/QueryCommand.js +1 -2
  235. package/commands/QueryCommand.js.map +1 -1
  236. package/commands/SchemaDropCommand.js +2 -2
  237. package/commands/SchemaDropCommand.js.map +1 -1
  238. package/commands/SchemaLogCommand.js +2 -2
  239. package/commands/SchemaLogCommand.js.map +1 -1
  240. package/commands/SchemaSyncCommand.js +2 -2
  241. package/commands/SchemaSyncCommand.js.map +1 -1
  242. package/commands/SubscriberCreateCommand.js +3 -3
  243. package/commands/SubscriberCreateCommand.js.map +1 -1
  244. package/common/DeepPartial.d.ts +3 -3
  245. package/common/DeepPartial.js.map +1 -1
  246. package/common/RelationType.d.ts +14 -0
  247. package/common/RelationType.js +4 -0
  248. package/common/RelationType.js.map +1 -0
  249. package/connection/BaseConnectionOptions.d.ts +5 -0
  250. package/connection/BaseConnectionOptions.js.map +1 -1
  251. package/connection/Connection.d.ts +5 -1
  252. package/connection/Connection.js +79 -54
  253. package/connection/Connection.js.map +1 -1
  254. package/connection/ConnectionMetadataBuilder.d.ts +3 -3
  255. package/connection/ConnectionMetadataBuilder.js +53 -21
  256. package/connection/ConnectionMetadataBuilder.js.map +1 -1
  257. package/connection/ConnectionOptionsReader.js +35 -28
  258. package/connection/ConnectionOptionsReader.js.map +1 -1
  259. package/connection/options-reader/ConnectionOptionsEnvReader.js +1 -0
  260. package/connection/options-reader/ConnectionOptionsEnvReader.js.map +1 -1
  261. package/decorator/Unique.d.ts +5 -4
  262. package/decorator/Unique.js +7 -3
  263. package/decorator/Unique.js.map +1 -1
  264. package/decorator/listeners/AfterRecover.d.ts +4 -0
  265. package/decorator/listeners/AfterRecover.js +20 -0
  266. package/decorator/listeners/AfterRecover.js.map +1 -0
  267. package/decorator/listeners/AfterSoftRemove.d.ts +4 -0
  268. package/decorator/listeners/AfterSoftRemove.js +20 -0
  269. package/decorator/listeners/AfterSoftRemove.js.map +1 -0
  270. package/decorator/listeners/BeforeRecover.d.ts +4 -0
  271. package/decorator/listeners/BeforeRecover.js +20 -0
  272. package/decorator/listeners/BeforeRecover.js.map +1 -0
  273. package/decorator/listeners/BeforeSoftRemove.d.ts +4 -0
  274. package/decorator/listeners/BeforeSoftRemove.js +20 -0
  275. package/decorator/listeners/BeforeSoftRemove.js.map +1 -0
  276. package/decorator/options/RelationOptions.d.ts +1 -1
  277. package/decorator/options/RelationOptions.js.map +1 -1
  278. package/decorator/options/UniqueOptions.d.ts +10 -0
  279. package/decorator/options/UniqueOptions.js +4 -0
  280. package/decorator/options/UniqueOptions.js.map +1 -0
  281. package/driver/aurora-data-api/AuroraDataApiQueryRunner.js +2 -2
  282. package/driver/aurora-data-api/AuroraDataApiQueryRunner.js.map +1 -1
  283. package/driver/better-sqlite3/BetterSqlite3Driver.d.ts +14 -1
  284. package/driver/better-sqlite3/BetterSqlite3Driver.js +93 -8
  285. package/driver/better-sqlite3/BetterSqlite3Driver.js.map +1 -1
  286. package/driver/better-sqlite3/BetterSqlite3QueryRunner.d.ts +10 -0
  287. package/driver/better-sqlite3/BetterSqlite3QueryRunner.js +63 -0
  288. package/driver/better-sqlite3/BetterSqlite3QueryRunner.js.map +1 -1
  289. package/driver/capacitor/CapacitorQueryRunner.d.ts +8 -0
  290. package/driver/capacitor/CapacitorQueryRunner.js +30 -0
  291. package/driver/capacitor/CapacitorQueryRunner.js.map +1 -1
  292. package/driver/cockroachdb/CockroachQueryRunner.js +1 -1
  293. package/driver/cockroachdb/CockroachQueryRunner.js.map +1 -1
  294. package/driver/cordova/CordovaQueryRunner.d.ts +8 -0
  295. package/driver/cordova/CordovaQueryRunner.js +30 -0
  296. package/driver/cordova/CordovaQueryRunner.js.map +1 -1
  297. package/driver/expo/ExpoQueryRunner.d.ts +8 -0
  298. package/driver/expo/ExpoQueryRunner.js +30 -0
  299. package/driver/expo/ExpoQueryRunner.js.map +1 -1
  300. package/driver/mongodb/MongoConnectionOptions.d.ts +1 -1
  301. package/driver/mongodb/MongoConnectionOptions.js.map +1 -1
  302. package/driver/mongodb/MongoQueryRunner.d.ts +8 -0
  303. package/driver/mongodb/MongoQueryRunner.js +20 -0
  304. package/driver/mongodb/MongoQueryRunner.js.map +1 -1
  305. package/driver/mysql/MysqlQueryRunner.js +1 -1
  306. package/driver/mysql/MysqlQueryRunner.js.map +1 -1
  307. package/driver/nativescript/NativescriptQueryRunner.d.ts +8 -0
  308. package/driver/nativescript/NativescriptQueryRunner.js +30 -0
  309. package/driver/nativescript/NativescriptQueryRunner.js.map +1 -1
  310. package/driver/oracle/OracleQueryRunner.js +1 -1
  311. package/driver/oracle/OracleQueryRunner.js.map +1 -1
  312. package/driver/postgres/PostgresQueryRunner.js +49 -18
  313. package/driver/postgres/PostgresQueryRunner.js.map +1 -1
  314. package/driver/react-native/ReactNativeQueryRunner.d.ts +8 -0
  315. package/driver/react-native/ReactNativeQueryRunner.js +30 -0
  316. package/driver/react-native/ReactNativeQueryRunner.js.map +1 -1
  317. package/driver/sap/SapQueryRunner.js +1 -1
  318. package/driver/sap/SapQueryRunner.js.map +1 -1
  319. package/driver/sqlite/SqliteDriver.d.ts +13 -0
  320. package/driver/sqlite/SqliteDriver.js +94 -10
  321. package/driver/sqlite/SqliteDriver.js.map +1 -1
  322. package/driver/sqlite/SqliteQueryRunner.d.ts +8 -0
  323. package/driver/sqlite/SqliteQueryRunner.js +30 -0
  324. package/driver/sqlite/SqliteQueryRunner.js.map +1 -1
  325. package/driver/sqlite-abstract/AbstractSqliteDriver.d.ts +13 -0
  326. package/driver/sqlite-abstract/AbstractSqliteDriver.js +25 -2
  327. package/driver/sqlite-abstract/AbstractSqliteDriver.js.map +1 -1
  328. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.d.ts +11 -1
  329. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js +119 -58
  330. package/driver/sqlite-abstract/AbstractSqliteQueryRunner.js.map +1 -1
  331. package/driver/sqljs/SqljsQueryRunner.d.ts +8 -0
  332. package/driver/sqljs/SqljsQueryRunner.js +30 -0
  333. package/driver/sqljs/SqljsQueryRunner.js.map +1 -1
  334. package/entity-manager/EntityManager.js +1 -11
  335. package/entity-manager/EntityManager.js.map +1 -1
  336. package/entity-manager/MongoEntityManager.d.ts +2 -0
  337. package/entity-manager/MongoEntityManager.js +37 -5
  338. package/entity-manager/MongoEntityManager.js.map +1 -1
  339. package/entity-schema/EntitySchemaRelationOptions.d.ts +7 -1
  340. package/entity-schema/EntitySchemaRelationOptions.js.map +1 -1
  341. package/entity-schema/EntitySchemaTransformer.js +3 -1
  342. package/entity-schema/EntitySchemaTransformer.js.map +1 -1
  343. package/entity-schema/EntitySchemaUniqueOptions.d.ts +5 -0
  344. package/entity-schema/EntitySchemaUniqueOptions.js.map +1 -1
  345. package/find-options/FindOneOptions.d.ts +6 -0
  346. package/find-options/FindOneOptions.js.map +1 -1
  347. package/find-options/FindOptionsUtils.js +4 -0
  348. package/find-options/FindOptionsUtils.js.map +1 -1
  349. package/find-options/operator/Like.d.ts +1 -1
  350. package/find-options/operator/Like.js +1 -1
  351. package/find-options/operator/Like.js.map +1 -1
  352. package/find-options/operator/Not.d.ts +1 -1
  353. package/find-options/operator/Not.js +1 -1
  354. package/find-options/operator/Not.js.map +1 -1
  355. package/globals.js +33 -6
  356. package/globals.js.map +1 -1
  357. package/index.d.ts +6 -0
  358. package/index.js +8 -1
  359. package/index.js.map +1 -1
  360. package/index.mjs +360 -0
  361. package/metadata/EntityMetadata.d.ts +16 -0
  362. package/metadata/EntityMetadata.js +16 -0
  363. package/metadata/EntityMetadata.js.map +1 -1
  364. package/metadata/RelationMetadata.d.ts +1 -1
  365. package/metadata/RelationMetadata.js.map +1 -1
  366. package/metadata/UniqueMetadata.d.ts +5 -0
  367. package/metadata/UniqueMetadata.js +1 -0
  368. package/metadata/UniqueMetadata.js.map +1 -1
  369. package/metadata/types/EventListenerTypes.d.ts +5 -1
  370. package/metadata/types/EventListenerTypes.js +4 -0
  371. package/metadata/types/EventListenerTypes.js.map +1 -1
  372. package/metadata-args/UniqueMetadataArgs.d.ts +5 -0
  373. package/metadata-args/UniqueMetadataArgs.js.map +1 -1
  374. package/metadata-builder/EntityMetadataBuilder.js +4 -0
  375. package/metadata-builder/EntityMetadataBuilder.js.map +1 -1
  376. package/metadata-builder/EntityMetadataValidator.js +2 -1
  377. package/metadata-builder/EntityMetadataValidator.js.map +1 -1
  378. package/migration/MigrationExecutor.js +38 -26
  379. package/migration/MigrationExecutor.js.map +1 -1
  380. package/package.json +1 -1
  381. package/persistence/SubjectExecutor.d.ts +4 -2
  382. package/persistence/SubjectExecutor.js +105 -13
  383. package/persistence/SubjectExecutor.js.map +1 -1
  384. package/persistence/subject-builder/OneToManySubjectBuilder.js +3 -0
  385. package/persistence/subject-builder/OneToManySubjectBuilder.js.map +1 -1
  386. package/persistence/tree/MaterializedPathSubjectExecutor.js +1 -1
  387. package/persistence/tree/MaterializedPathSubjectExecutor.js.map +1 -1
  388. package/platform/PlatformTools.d.ts +1 -0
  389. package/platform/PlatformTools.js +5 -0
  390. package/platform/PlatformTools.js.map +1 -1
  391. package/query-builder/DeleteQueryBuilder.d.ts +3 -1
  392. package/query-builder/DeleteQueryBuilder.js +3 -1
  393. package/query-builder/DeleteQueryBuilder.js.map +1 -1
  394. package/query-builder/InsertQueryBuilder.js +11 -2
  395. package/query-builder/InsertQueryBuilder.js.map +1 -1
  396. package/query-builder/NotBrackets.d.ts +7 -0
  397. package/query-builder/NotBrackets.js +19 -0
  398. package/query-builder/NotBrackets.js.map +1 -0
  399. package/query-builder/QueryBuilder.d.ts +2 -1
  400. package/query-builder/QueryBuilder.js +2 -1
  401. package/query-builder/QueryBuilder.js.map +1 -1
  402. package/query-builder/RelationLoader.js +11 -6
  403. package/query-builder/RelationLoader.js.map +1 -1
  404. package/query-builder/SelectQueryBuilder.d.ts +9 -0
  405. package/query-builder/SelectQueryBuilder.js +27 -20
  406. package/query-builder/SelectQueryBuilder.js.map +1 -1
  407. package/query-builder/SoftDeleteQueryBuilder.js +44 -30
  408. package/query-builder/SoftDeleteQueryBuilder.js.map +1 -1
  409. package/query-builder/UpdateQueryBuilder.d.ts +3 -1
  410. package/query-builder/UpdateQueryBuilder.js +10 -5
  411. package/query-builder/UpdateQueryBuilder.js.map +1 -1
  412. package/query-builder/WhereExpressionBuilder.d.ts +3 -1
  413. package/query-builder/WhereExpressionBuilder.js.map +1 -1
  414. package/query-builder/relation-id/RelationIdLoader.js +9 -9
  415. package/query-builder/relation-id/RelationIdLoader.js.map +1 -1
  416. package/query-builder/transformer/RawSqlResultsToEntityTransformer.d.ts +13 -0
  417. package/query-builder/transformer/RawSqlResultsToEntityTransformer.js +94 -50
  418. package/query-builder/transformer/RawSqlResultsToEntityTransformer.js.map +1 -1
  419. package/query-runner/BaseQueryRunner.d.ts +10 -2
  420. package/query-runner/BaseQueryRunner.js +23 -3
  421. package/query-runner/BaseQueryRunner.js.map +1 -1
  422. package/query-runner/QueryRunner.d.ts +8 -0
  423. package/query-runner/QueryRunner.js.map +1 -1
  424. package/repository/TreeRepository.js +3 -2
  425. package/repository/TreeRepository.js.map +1 -1
  426. package/schema-builder/RdbmsSchemaBuilder.js +37 -31
  427. package/schema-builder/RdbmsSchemaBuilder.js.map +1 -1
  428. package/schema-builder/options/TableUniqueOptions.d.ts +5 -0
  429. package/schema-builder/options/TableUniqueOptions.js.map +1 -1
  430. package/schema-builder/table/TableUnique.d.ts +5 -0
  431. package/schema-builder/table/TableUnique.js +5 -2
  432. package/schema-builder/table/TableUnique.js.map +1 -1
  433. package/subscriber/Broadcaster.d.ts +40 -0
  434. package/subscriber/Broadcaster.js +191 -31
  435. package/subscriber/Broadcaster.js.map +1 -1
  436. package/subscriber/EntitySubscriberInterface.d.ts +18 -0
  437. package/subscriber/EntitySubscriberInterface.js.map +1 -1
  438. package/subscriber/event/RecoverEvent.d.ts +6 -0
  439. package/subscriber/event/RecoverEvent.js +4 -0
  440. package/subscriber/event/RecoverEvent.js.map +1 -0
  441. package/subscriber/event/SoftRemoveEvent.d.ts +6 -0
  442. package/subscriber/event/SoftRemoveEvent.js +4 -0
  443. package/subscriber/event/SoftRemoveEvent.js.map +1 -0
  444. package/typeorm-class-transformer-shim.js +20 -0
  445. package/typeorm-model-shim.js +20 -0
  446. package/util/DirectoryExportedClassesLoader.d.ts +1 -1
  447. package/util/DirectoryExportedClassesLoader.js +54 -31
  448. package/util/DirectoryExportedClassesLoader.js.map +1 -1
  449. package/util/ImportUtils.d.ts +1 -0
  450. package/util/ImportUtils.js +94 -0
  451. package/util/ImportUtils.js.map +1 -0
  452. package/util/PathUtils.d.ts +10 -0
  453. package/util/PathUtils.js +34 -0
  454. package/util/PathUtils.js.map +1 -0
  455. package/util/RandomGenerator.d.ts +0 -4
  456. package/util/RandomGenerator.js +0 -9
  457. package/util/RandomGenerator.js.map +1 -1
@@ -157,6 +157,84 @@ var Broadcaster = /** @class */ (function () {
157
157
  });
158
158
  }
159
159
  };
160
+ /**
161
+ * Broadcasts "BEFORE_SOFT_REMOVE" event.
162
+ * Before soft remove event is executed before entity is being soft removed from the database.
163
+ * All subscribers and entity listeners who listened to this event will be executed at this point.
164
+ * Subscribers and entity listeners can return promises, it will wait until they are resolved.
165
+ *
166
+ * Note: this method has a performance-optimized code organization, do not change code structure.
167
+ */
168
+ Broadcaster.prototype.broadcastBeforeSoftRemoveEvent = function (result, metadata, entity, databaseEntity) {
169
+ var _this = this;
170
+ if (entity && metadata.beforeSoftRemoveListeners.length) {
171
+ metadata.beforeSoftRemoveListeners.forEach(function (listener) {
172
+ if (listener.isAllowed(entity)) {
173
+ var executionResult = listener.execute(entity);
174
+ if (executionResult instanceof Promise)
175
+ result.promises.push(executionResult);
176
+ result.count++;
177
+ }
178
+ });
179
+ }
180
+ if (this.queryRunner.connection.subscribers.length) {
181
+ this.queryRunner.connection.subscribers.forEach(function (subscriber) {
182
+ if (_this.isAllowedSubscriber(subscriber, metadata.target) && subscriber.beforeSoftRemove) {
183
+ var executionResult = subscriber.beforeSoftRemove({
184
+ connection: _this.queryRunner.connection,
185
+ queryRunner: _this.queryRunner,
186
+ manager: _this.queryRunner.manager,
187
+ entity: entity,
188
+ metadata: metadata,
189
+ databaseEntity: databaseEntity,
190
+ entityId: metadata.getEntityIdMixedMap(databaseEntity)
191
+ });
192
+ if (executionResult instanceof Promise)
193
+ result.promises.push(executionResult);
194
+ result.count++;
195
+ }
196
+ });
197
+ }
198
+ };
199
+ /**
200
+ * Broadcasts "BEFORE_RECOVER" event.
201
+ * Before recover event is executed before entity is being recovered in the database.
202
+ * All subscribers and entity listeners who listened to this event will be executed at this point.
203
+ * Subscribers and entity listeners can return promises, it will wait until they are resolved.
204
+ *
205
+ * Note: this method has a performance-optimized code organization, do not change code structure.
206
+ */
207
+ Broadcaster.prototype.broadcastBeforeRecoverEvent = function (result, metadata, entity, databaseEntity) {
208
+ var _this = this;
209
+ if (entity && metadata.beforeRecoverListeners.length) {
210
+ metadata.beforeRecoverListeners.forEach(function (listener) {
211
+ if (listener.isAllowed(entity)) {
212
+ var executionResult = listener.execute(entity);
213
+ if (executionResult instanceof Promise)
214
+ result.promises.push(executionResult);
215
+ result.count++;
216
+ }
217
+ });
218
+ }
219
+ if (this.queryRunner.connection.subscribers.length) {
220
+ this.queryRunner.connection.subscribers.forEach(function (subscriber) {
221
+ if (_this.isAllowedSubscriber(subscriber, metadata.target) && subscriber.beforeRecover) {
222
+ var executionResult = subscriber.beforeRecover({
223
+ connection: _this.queryRunner.connection,
224
+ queryRunner: _this.queryRunner,
225
+ manager: _this.queryRunner.manager,
226
+ entity: entity,
227
+ metadata: metadata,
228
+ databaseEntity: databaseEntity,
229
+ entityId: metadata.getEntityIdMixedMap(databaseEntity)
230
+ });
231
+ if (executionResult instanceof Promise)
232
+ result.promises.push(executionResult);
233
+ result.count++;
234
+ }
235
+ });
236
+ }
237
+ };
160
238
  /**
161
239
  * Broadcasts "AFTER_INSERT" event.
162
240
  * After insert event is executed after entity is being persisted to the database for the first time.
@@ -393,6 +471,84 @@ var Broadcaster = /** @class */ (function () {
393
471
  });
394
472
  }
395
473
  };
474
+ /**
475
+ * Broadcasts "AFTER_SOFT_REMOVE" event.
476
+ * After soft remove event is executed after entity is being soft removed from the database.
477
+ * All subscribers and entity listeners who listened to this event will be executed at this point.
478
+ * Subscribers and entity listeners can return promises, it will wait until they are resolved.
479
+ *
480
+ * Note: this method has a performance-optimized code organization, do not change code structure.
481
+ */
482
+ Broadcaster.prototype.broadcastAfterSoftRemoveEvent = function (result, metadata, entity, databaseEntity) {
483
+ var _this = this;
484
+ if (entity && metadata.afterSoftRemoveListeners.length) {
485
+ metadata.afterSoftRemoveListeners.forEach(function (listener) {
486
+ if (listener.isAllowed(entity)) {
487
+ var executionResult = listener.execute(entity);
488
+ if (executionResult instanceof Promise)
489
+ result.promises.push(executionResult);
490
+ result.count++;
491
+ }
492
+ });
493
+ }
494
+ if (this.queryRunner.connection.subscribers.length) {
495
+ this.queryRunner.connection.subscribers.forEach(function (subscriber) {
496
+ if (_this.isAllowedSubscriber(subscriber, metadata.target) && subscriber.afterSoftRemove) {
497
+ var executionResult = subscriber.afterSoftRemove({
498
+ connection: _this.queryRunner.connection,
499
+ queryRunner: _this.queryRunner,
500
+ manager: _this.queryRunner.manager,
501
+ entity: entity,
502
+ metadata: metadata,
503
+ databaseEntity: databaseEntity,
504
+ entityId: metadata.getEntityIdMixedMap(databaseEntity)
505
+ });
506
+ if (executionResult instanceof Promise)
507
+ result.promises.push(executionResult);
508
+ result.count++;
509
+ }
510
+ });
511
+ }
512
+ };
513
+ /**
514
+ * Broadcasts "AFTER_RECOVER" event.
515
+ * After recover event is executed after entity is being recovered in the database.
516
+ * All subscribers and entity listeners who listened to this event will be executed at this point.
517
+ * Subscribers and entity listeners can return promises, it will wait until they are resolved.
518
+ *
519
+ * Note: this method has a performance-optimized code organization, do not change code structure.
520
+ */
521
+ Broadcaster.prototype.broadcastAfterRecoverEvent = function (result, metadata, entity, databaseEntity) {
522
+ var _this = this;
523
+ if (entity && metadata.afterRecoverListeners.length) {
524
+ metadata.afterRecoverListeners.forEach(function (listener) {
525
+ if (listener.isAllowed(entity)) {
526
+ var executionResult = listener.execute(entity);
527
+ if (executionResult instanceof Promise)
528
+ result.promises.push(executionResult);
529
+ result.count++;
530
+ }
531
+ });
532
+ }
533
+ if (this.queryRunner.connection.subscribers.length) {
534
+ this.queryRunner.connection.subscribers.forEach(function (subscriber) {
535
+ if (_this.isAllowedSubscriber(subscriber, metadata.target) && subscriber.afterRecover) {
536
+ var executionResult = subscriber.afterRecover({
537
+ connection: _this.queryRunner.connection,
538
+ queryRunner: _this.queryRunner,
539
+ manager: _this.queryRunner.manager,
540
+ entity: entity,
541
+ metadata: metadata,
542
+ databaseEntity: databaseEntity,
543
+ entityId: metadata.getEntityIdMixedMap(databaseEntity)
544
+ });
545
+ if (executionResult instanceof Promise)
546
+ result.promises.push(executionResult);
547
+ result.count++;
548
+ }
549
+ });
550
+ }
551
+ };
396
552
  /**
397
553
  * @deprecated Use `broadcastLoadForAllEvent`
398
554
  */
@@ -409,47 +565,51 @@ var Broadcaster = /** @class */ (function () {
409
565
  */
410
566
  Broadcaster.prototype.broadcastLoadEvent = function (result, metadata, entities) {
411
567
  var _this = this;
412
- entities.forEach(function (entity) {
413
- if (entity instanceof Promise) // todo: check why need this?
414
- return;
568
+ // Calculate which subscribers are fitting for the given entity type
569
+ var fittingSubscribers = this.queryRunner.connection.subscribers.filter(function (subscriber) { return _this.isAllowedSubscriber(subscriber, metadata.target) && subscriber.afterLoad; });
570
+ if (metadata.relations.length || metadata.afterLoadListeners.length || fittingSubscribers.length) {
571
+ // todo: check why need this?
572
+ var nonPromiseEntities_1 = entities.filter(function (entity) { return !(entity instanceof Promise); });
415
573
  // collect load events for all children entities that were loaded with the main entity
416
574
  if (metadata.relations.length) {
417
575
  metadata.relations.forEach(function (relation) {
418
- // in lazy relations we cannot simply access to entity property because it will cause a getter and a database query
419
- if (relation.isLazy && !entity.hasOwnProperty(relation.propertyName))
420
- return;
421
- var value = relation.getEntityValue(entity);
422
- if (value instanceof Object)
423
- _this.broadcastLoadEvent(result, relation.inverseEntityMetadata, Array.isArray(value) ? value : [value]);
576
+ nonPromiseEntities_1.forEach(function (entity) {
577
+ // in lazy relations we cannot simply access to entity property because it will cause a getter and a database query
578
+ if (relation.isLazy && !entity.hasOwnProperty(relation.propertyName))
579
+ return;
580
+ var value = relation.getEntityValue(entity);
581
+ if (value instanceof Object)
582
+ _this.broadcastLoadEvent(result, relation.inverseEntityMetadata, Array.isArray(value) ? value : [value]);
583
+ });
424
584
  });
425
585
  }
426
586
  if (metadata.afterLoadListeners.length) {
427
587
  metadata.afterLoadListeners.forEach(function (listener) {
428
- if (listener.isAllowed(entity)) {
429
- var executionResult = listener.execute(entity);
430
- if (executionResult instanceof Promise)
431
- result.promises.push(executionResult);
432
- result.count++;
433
- }
588
+ nonPromiseEntities_1.forEach(function (entity) {
589
+ if (listener.isAllowed(entity)) {
590
+ var executionResult = listener.execute(entity);
591
+ if (executionResult instanceof Promise)
592
+ result.promises.push(executionResult);
593
+ result.count++;
594
+ }
595
+ });
434
596
  });
435
597
  }
436
- if (_this.queryRunner.connection.subscribers.length) {
437
- _this.queryRunner.connection.subscribers.forEach(function (subscriber) {
438
- if (_this.isAllowedSubscriber(subscriber, metadata.target) && subscriber.afterLoad) {
439
- var executionResult = subscriber.afterLoad(entity, {
440
- connection: _this.queryRunner.connection,
441
- queryRunner: _this.queryRunner,
442
- manager: _this.queryRunner.manager,
443
- entity: entity,
444
- metadata: metadata
445
- });
446
- if (executionResult instanceof Promise)
447
- result.promises.push(executionResult);
448
- result.count++;
449
- }
598
+ fittingSubscribers.forEach(function (subscriber) {
599
+ nonPromiseEntities_1.forEach(function (entity) {
600
+ var executionResult = subscriber.afterLoad(entity, {
601
+ entity: entity,
602
+ metadata: metadata,
603
+ connection: _this.queryRunner.connection,
604
+ queryRunner: _this.queryRunner,
605
+ manager: _this.queryRunner.manager,
606
+ });
607
+ if (executionResult instanceof Promise)
608
+ result.promises.push(executionResult);
609
+ result.count++;
450
610
  });
451
- }
452
- });
611
+ });
612
+ }
453
613
  };
454
614
  // -------------------------------------------------------------------------
455
615
  // Protected Methods
@@ -1 +1 @@
1
- {"version":3,"sources":["../../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\";\n\ninterface BroadcasterEvents {\n \"BeforeTransactionCommit\": () => void;\n \"AfterTransactionCommit\": () => void;\n \"BeforeTransactionStart\": () => void;\n \"AfterTransactionStart\": () => void;\n \"BeforeTransactionRollback\": () => void;\n \"AfterTransactionRollback\": () => void;\n\n \"BeforeUpdate\": (metadata: EntityMetadata, entity?: ObjectLiteral, databaseEntity?: ObjectLiteral, updatedColumns?: ColumnMetadata[], updatedRelations?: RelationMetadata[]) => void;\n \"AfterUpdate\": (metadata: EntityMetadata, entity?: ObjectLiteral, databaseEntity?: ObjectLiteral, updatedColumns?: ColumnMetadata[], updatedRelations?: RelationMetadata[]) => void;\n\n \"BeforeInsert\": (metadata: EntityMetadata, entity: ObjectLiteral | undefined) => void;\n \"AfterInsert\": (metadata: EntityMetadata, entity: ObjectLiteral | undefined) => void;\n\n \"BeforeRemove\": (metadata: EntityMetadata, entity?: ObjectLiteral, databaseEntity?: ObjectLiteral) => void;\n \"AfterRemove\": (metadata: EntityMetadata, entity?: ObjectLiteral, databaseEntity?: ObjectLiteral) => void;\n\n \"Load\": (metadata: EntityMetadata, entities: ObjectLiteral[]) => void;\n}\n\n\n/**\n * Broadcaster provides a helper methods to broadcast events to the subscribers.\n */\nexport class Broadcaster {\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(private queryRunner: QueryRunner) {\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n async broadcast<U extends keyof BroadcasterEvents>(event: U, ...args: Parameters<BroadcasterEvents[U]>): 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(\n this,\n result,\n ...args\n );\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(result: BroadcasterResult, metadata: EntityMetadata, entity: undefined | ObjectLiteral): void {\n\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 (this.isAllowedSubscriber(subscriber, metadata.target) && subscriber.beforeInsert) {\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(result: BroadcasterResult, metadata: EntityMetadata, entity?: ObjectLiteral, databaseEntity?: ObjectLiteral, updatedColumns?: ColumnMetadata[], updatedRelations?: RelationMetadata[]): void { // 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 (this.isAllowedSubscriber(subscriber, metadata.target) && subscriber.beforeUpdate) {\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(result: BroadcasterResult, metadata: EntityMetadata, entity?: ObjectLiteral, databaseEntity?: ObjectLiteral): 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 (this.isAllowedSubscriber(subscriber, metadata.target) && subscriber.beforeRemove) {\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 \"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(result: BroadcasterResult, metadata: EntityMetadata, entity?: ObjectLiteral): void {\n\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 (this.isAllowedSubscriber(subscriber, metadata.target) && subscriber.afterInsert) {\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 = 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 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_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(result: BroadcasterResult, metadata: EntityMetadata, entity?: ObjectLiteral, databaseEntity?: ObjectLiteral, updatedColumns?: ColumnMetadata[], updatedRelations?: RelationMetadata[]): void {\n\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 (this.isAllowedSubscriber(subscriber, metadata.target) && subscriber.afterUpdate) {\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(result: BroadcasterResult, metadata: EntityMetadata, entity?: ObjectLiteral, databaseEntity?: ObjectLiteral): void {\n\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 (this.isAllowedSubscriber(subscriber, metadata.target) && subscriber.afterRemove) {\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 * @deprecated Use `broadcastLoadForAllEvent`\n */\n broadcastLoadEventsForAll(result: BroadcasterResult, metadata: EntityMetadata, entities: ObjectLiteral[]): 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(result: BroadcasterResult, metadata: EntityMetadata, entities: ObjectLiteral[]): void {\n entities.forEach(entity => {\n if (entity instanceof Promise) // todo: check why need this?\n return;\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\n // in lazy relations we cannot simply access to entity property because it will cause a getter and a database query\n if (relation.isLazy && !entity.hasOwnProperty(relation.propertyName))\n return;\n\n const value = relation.getEntityValue(entity);\n if (value instanceof Object)\n this.broadcastLoadEvent(result, relation.inverseEntityMetadata, Array.isArray(value) ? value : [value]);\n });\n }\n\n if (metadata.afterLoadListeners.length) {\n metadata.afterLoadListeners.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 (this.isAllowedSubscriber(subscriber, metadata.target) && subscriber.afterLoad) {\n const executionResult = subscriber.afterLoad!(entity, {\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 // -------------------------------------------------------------------------\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(subscriber: EntitySubscriberInterface<any>, target: Function|string): boolean {\n return !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":["../../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\";\n\ninterface BroadcasterEvents {\n \"BeforeTransactionCommit\": () => void;\n \"AfterTransactionCommit\": () => void;\n \"BeforeTransactionStart\": () => void;\n \"AfterTransactionStart\": () => void;\n \"BeforeTransactionRollback\": () => void;\n \"AfterTransactionRollback\": () => void;\n\n \"BeforeUpdate\": (metadata: EntityMetadata, entity?: ObjectLiteral, databaseEntity?: ObjectLiteral, updatedColumns?: ColumnMetadata[], updatedRelations?: RelationMetadata[]) => void;\n \"AfterUpdate\": (metadata: EntityMetadata, entity?: ObjectLiteral, databaseEntity?: ObjectLiteral, updatedColumns?: ColumnMetadata[], updatedRelations?: RelationMetadata[]) => void;\n\n \"BeforeInsert\": (metadata: EntityMetadata, entity: ObjectLiteral | undefined) => void;\n \"AfterInsert\": (metadata: EntityMetadata, entity: ObjectLiteral | undefined) => void;\n\n \"BeforeRemove\": (metadata: EntityMetadata, entity?: ObjectLiteral, databaseEntity?: ObjectLiteral) => void;\n \"AfterRemove\": (metadata: EntityMetadata, entity?: ObjectLiteral, databaseEntity?: ObjectLiteral) => void;\n\n \"BeforeSoftRemove\": (metadata: EntityMetadata, entity?: ObjectLiteral, databaseEntity?: ObjectLiteral) => void;\n \"AfterSoftRemove\": (metadata: EntityMetadata, entity?: ObjectLiteral, databaseEntity?: ObjectLiteral) => void;\n\n \"BeforeRecover\": (metadata: EntityMetadata, entity?: ObjectLiteral, databaseEntity?: ObjectLiteral) => void;\n \"AfterRecover\": (metadata: EntityMetadata, entity?: ObjectLiteral, databaseEntity?: ObjectLiteral) => void;\n\n \"Load\": (metadata: EntityMetadata, entities: ObjectLiteral[]) => void;\n}\n\n\n/**\n * Broadcaster provides a helper methods to broadcast events to the subscribers.\n */\nexport class Broadcaster {\n\n // -------------------------------------------------------------------------\n // Constructor\n // -------------------------------------------------------------------------\n\n constructor(private queryRunner: QueryRunner) {\n }\n\n // -------------------------------------------------------------------------\n // Public Methods\n // -------------------------------------------------------------------------\n\n async broadcast<U extends keyof BroadcasterEvents>(event: U, ...args: Parameters<BroadcasterEvents[U]>): 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(\n this,\n result,\n ...args\n );\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(result: BroadcasterResult, metadata: EntityMetadata, entity: undefined | ObjectLiteral): void {\n\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 (this.isAllowedSubscriber(subscriber, metadata.target) && subscriber.beforeInsert) {\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(result: BroadcasterResult, metadata: EntityMetadata, entity?: ObjectLiteral, databaseEntity?: ObjectLiteral, updatedColumns?: ColumnMetadata[], updatedRelations?: RelationMetadata[]): void { // 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 (this.isAllowedSubscriber(subscriber, metadata.target) && subscriber.beforeUpdate) {\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(result: BroadcasterResult, metadata: EntityMetadata, entity?: ObjectLiteral, databaseEntity?: ObjectLiteral): 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 (this.isAllowedSubscriber(subscriber, metadata.target) && subscriber.beforeRemove) {\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(result: BroadcasterResult, metadata: EntityMetadata, entity?: ObjectLiteral, databaseEntity?: ObjectLiteral): 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 (this.isAllowedSubscriber(subscriber, metadata.target) && subscriber.beforeSoftRemove) {\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(result: BroadcasterResult, metadata: EntityMetadata, entity?: ObjectLiteral, databaseEntity?: ObjectLiteral): 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 (this.isAllowedSubscriber(subscriber, metadata.target) && subscriber.beforeRecover) {\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(result: BroadcasterResult, metadata: EntityMetadata, entity?: ObjectLiteral): void {\n\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 (this.isAllowedSubscriber(subscriber, metadata.target) && subscriber.afterInsert) {\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 = 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 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_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(result: BroadcasterResult, metadata: EntityMetadata, entity?: ObjectLiteral, databaseEntity?: ObjectLiteral, updatedColumns?: ColumnMetadata[], updatedRelations?: RelationMetadata[]): void {\n\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 (this.isAllowedSubscriber(subscriber, metadata.target) && subscriber.afterUpdate) {\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(result: BroadcasterResult, metadata: EntityMetadata, entity?: ObjectLiteral, databaseEntity?: ObjectLiteral): void {\n\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 (this.isAllowedSubscriber(subscriber, metadata.target) && subscriber.afterRemove) {\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(result: BroadcasterResult, metadata: EntityMetadata, entity?: ObjectLiteral, databaseEntity?: ObjectLiteral): void {\n\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 (this.isAllowedSubscriber(subscriber, metadata.target) && subscriber.afterSoftRemove) {\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(result: BroadcasterResult, metadata: EntityMetadata, entity?: ObjectLiteral, databaseEntity?: ObjectLiteral): void {\n\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 (this.isAllowedSubscriber(subscriber, metadata.target) && subscriber.afterRecover) {\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(result: BroadcasterResult, metadata: EntityMetadata, entities: ObjectLiteral[]): 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(result: BroadcasterResult, metadata: EntityMetadata, entities: ObjectLiteral[]): void {\n // Calculate which subscribers are fitting for the given entity type\n const fittingSubscribers = this.queryRunner.connection.subscribers.filter(subscriber => this.isAllowedSubscriber(subscriber, metadata.target) && subscriber.afterLoad);\n\n if (metadata.relations.length || metadata.afterLoadListeners.length || fittingSubscribers.length) {\n // todo: check why need this?\n const nonPromiseEntities = entities.filter(entity => !(entity instanceof Promise));\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 (relation.isLazy && !entity.hasOwnProperty(relation.propertyName)) return;\n\n const value = relation.getEntityValue(entity);\n if (value instanceof Object) this.broadcastLoadEvent(result, relation.inverseEntityMetadata, Array.isArray(value) ? value : [value]);\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) 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) 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(subscriber: EntitySubscriberInterface<any>, target: Function|string): boolean {\n return !subscriber.listenTo ||\n !subscriber.listenTo() ||\n subscriber.listenTo() === Object ||\n subscriber.listenTo() === target ||\n subscriber.listenTo().isPrototypeOf(target);\n }\n\n}\n"],"sourceRoot":".."}
@@ -5,6 +5,8 @@ import { UpdateEvent } from "./event/UpdateEvent";
5
5
  import { RemoveEvent } from "./event/RemoveEvent";
6
6
  import { InsertEvent } from "./event/InsertEvent";
7
7
  import { LoadEvent } from "./event/LoadEvent";
8
+ import { SoftRemoveEvent } from "./event/SoftRemoveEvent";
9
+ import { RecoverEvent } from "./event/RecoverEvent";
8
10
  /**
9
11
  * Classes that implement this interface are subscribers that subscribe for the specific events in the ORM.
10
12
  */
@@ -43,10 +45,26 @@ export interface EntitySubscriberInterface<Entity = any> {
43
45
  * Called before entity is removed from the database.
44
46
  */
45
47
  beforeRemove?(event: RemoveEvent<Entity>): Promise<any> | void;
48
+ /**
49
+ * Called before entity is soft removed from the database.
50
+ */
51
+ beforeSoftRemove?(event: SoftRemoveEvent<Entity>): Promise<any> | void;
52
+ /**
53
+ * Called before entity is recovered in the database.
54
+ */
55
+ beforeRecover?(event: RecoverEvent<Entity>): Promise<any> | void;
46
56
  /**
47
57
  * Called after entity is removed from the database.
48
58
  */
49
59
  afterRemove?(event: RemoveEvent<Entity>): Promise<any> | void;
60
+ /**
61
+ * Called after entity is soft removed from the database.
62
+ */
63
+ afterSoftRemove?(event: SoftRemoveEvent<Entity>): Promise<any> | void;
64
+ /**
65
+ * Called after entity is recovered in the database.
66
+ */
67
+ afterRecover?(event: RecoverEvent<Entity>): Promise<any> | void;
50
68
  /**
51
69
  * Called before transaction is started.
52
70
  */
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/subscriber/EntitySubscriberInterface.ts"],"names":[],"mappings":"","file":"EntitySubscriberInterface.js","sourcesContent":["import { TransactionCommitEvent } from \"./event/TransactionCommitEvent\";\nimport { TransactionRollbackEvent } from \"./event/TransactionRollbackEvent\";\nimport { TransactionStartEvent } from \"./event/TransactionStartEvent\";\nimport {UpdateEvent} from \"./event/UpdateEvent\";\nimport {RemoveEvent} from \"./event/RemoveEvent\";\nimport {InsertEvent} from \"./event/InsertEvent\";\nimport {LoadEvent} from \"./event/LoadEvent\";\n\n/**\n * Classes that implement this interface are subscribers that subscribe for the specific events in the ORM.\n */\nexport interface EntitySubscriberInterface<Entity = any> {\n\n /**\n * Returns the class of the entity to which events will listen.\n * If this method is omitted, then subscriber will listen to events of all entities.\n */\n listenTo?(): Function | string;\n\n /**\n * Called after entity is loaded from the database.\n *\n * For backward compatibility this signature is slightly different from the\n * others. `event` was added later but is always provided (it is only\n * optional in the signature so that its introduction does not break\n * compilation for existing subscribers).\n */\n afterLoad?(entity: Entity, event?: LoadEvent<Entity>): Promise<any>|void;\n\n /**\n * Called before entity is inserted to the database.\n */\n beforeInsert?(event: InsertEvent<Entity>): Promise<any>|void;\n\n /**\n * Called after entity is inserted to the database.\n */\n afterInsert?(event: InsertEvent<Entity>): Promise<any>|void;\n\n /**\n * Called before entity is updated in the database.\n */\n beforeUpdate?(event: UpdateEvent<Entity>): Promise<any>|void;\n\n /**\n * Called after entity is updated in the database.\n */\n afterUpdate?(event: UpdateEvent<Entity>): Promise<any>|void;\n\n /**\n * Called before entity is removed from the database.\n */\n beforeRemove?(event: RemoveEvent<Entity>): Promise<any>|void;\n\n /**\n * Called after entity is removed from the database.\n */\n afterRemove?(event: RemoveEvent<Entity>): Promise<any>|void;\n\n /**\n * Called before transaction is started.\n */\n beforeTransactionStart?(event: TransactionStartEvent): Promise<any>|void;\n\n /**\n * Called after transaction is started.\n */\n afterTransactionStart?(event: TransactionStartEvent): Promise<any>|void;\n\n /**\n * Called before transaction is committed.\n */\n beforeTransactionCommit?(event: TransactionCommitEvent): Promise<any>|void;\n\n /**\n * Called after transaction is committed.\n */\n afterTransactionCommit?(event: TransactionCommitEvent): Promise<any>|void;\n\n /**\n * Called before transaction rollback.\n */\n beforeTransactionRollback?(event: TransactionRollbackEvent): Promise<any>|void;\n\n /**\n * Called after transaction rollback.\n */\n afterTransactionRollback?(event: TransactionRollbackEvent): Promise<any>|void;\n\n}\n"],"sourceRoot":".."}
1
+ {"version":3,"sources":["../../src/subscriber/EntitySubscriberInterface.ts"],"names":[],"mappings":"","file":"EntitySubscriberInterface.js","sourcesContent":["import { TransactionCommitEvent } from \"./event/TransactionCommitEvent\";\nimport { TransactionRollbackEvent } from \"./event/TransactionRollbackEvent\";\nimport { TransactionStartEvent } from \"./event/TransactionStartEvent\";\nimport {UpdateEvent} from \"./event/UpdateEvent\";\nimport {RemoveEvent} from \"./event/RemoveEvent\";\nimport {InsertEvent} from \"./event/InsertEvent\";\nimport {LoadEvent} from \"./event/LoadEvent\";\nimport { SoftRemoveEvent } from \"./event/SoftRemoveEvent\";\nimport { RecoverEvent } from \"./event/RecoverEvent\";\n\n/**\n * Classes that implement this interface are subscribers that subscribe for the specific events in the ORM.\n */\nexport interface EntitySubscriberInterface<Entity = any> {\n\n /**\n * Returns the class of the entity to which events will listen.\n * If this method is omitted, then subscriber will listen to events of all entities.\n */\n listenTo?(): Function | string;\n\n /**\n * Called after entity is loaded from the database.\n *\n * For backward compatibility this signature is slightly different from the\n * others. `event` was added later but is always provided (it is only\n * optional in the signature so that its introduction does not break\n * compilation for existing subscribers).\n */\n afterLoad?(entity: Entity, event?: LoadEvent<Entity>): Promise<any>|void;\n\n /**\n * Called before entity is inserted to the database.\n */\n beforeInsert?(event: InsertEvent<Entity>): Promise<any>|void;\n\n /**\n * Called after entity is inserted to the database.\n */\n afterInsert?(event: InsertEvent<Entity>): Promise<any>|void;\n\n /**\n * Called before entity is updated in the database.\n */\n beforeUpdate?(event: UpdateEvent<Entity>): Promise<any>|void;\n\n /**\n * Called after entity is updated in the database.\n */\n afterUpdate?(event: UpdateEvent<Entity>): Promise<any>|void;\n\n /**\n * Called before entity is removed from the database.\n */\n beforeRemove?(event: RemoveEvent<Entity>): Promise<any>|void;\n\n /**\n * Called before entity is soft removed from the database.\n */\n beforeSoftRemove?(event: SoftRemoveEvent<Entity>): Promise<any>|void;\n\n /**\n * Called before entity is recovered in the database.\n */\n beforeRecover?(event: RecoverEvent<Entity>): Promise<any>|void;\n\n /**\n * Called after entity is removed from the database.\n */\n afterRemove?(event: RemoveEvent<Entity>): Promise<any>|void;\n\n /**\n * Called after entity is soft removed from the database.\n */\n afterSoftRemove?(event: SoftRemoveEvent<Entity>): Promise<any>|void;\n\n /**\n * Called after entity is recovered in the database.\n */\n afterRecover?(event: RecoverEvent<Entity>): Promise<any>|void;\n\n /**\n * Called before transaction is started.\n */\n beforeTransactionStart?(event: TransactionStartEvent): Promise<any>|void;\n\n /**\n * Called after transaction is started.\n */\n afterTransactionStart?(event: TransactionStartEvent): Promise<any>|void;\n\n /**\n * Called before transaction is committed.\n */\n beforeTransactionCommit?(event: TransactionCommitEvent): Promise<any>|void;\n\n /**\n * Called after transaction is committed.\n */\n afterTransactionCommit?(event: TransactionCommitEvent): Promise<any>|void;\n\n /**\n * Called before transaction rollback.\n */\n beforeTransactionRollback?(event: TransactionRollbackEvent): Promise<any>|void;\n\n /**\n * Called after transaction rollback.\n */\n afterTransactionRollback?(event: TransactionRollbackEvent): Promise<any>|void;\n\n}\n"],"sourceRoot":".."}
@@ -0,0 +1,6 @@
1
+ import { RemoveEvent } from "./RemoveEvent";
2
+ /**
3
+ * RecoverEvent is an object that broadcaster sends to the entity subscriber when entity is being recovered in the database.
4
+ */
5
+ export interface RecoverEvent<Entity> extends RemoveEvent<Entity> {
6
+ }
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+
4
+ //# sourceMappingURL=RecoverEvent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/subscriber/event/RecoverEvent.ts"],"names":[],"mappings":"","file":"RecoverEvent.js","sourcesContent":["import { RemoveEvent } from \"./RemoveEvent\";\n\n/**\n * RecoverEvent is an object that broadcaster sends to the entity subscriber when entity is being recovered in the database.\n */\nexport interface RecoverEvent<Entity> extends RemoveEvent<Entity> {}\n"],"sourceRoot":"../.."}
@@ -0,0 +1,6 @@
1
+ import { RemoveEvent } from "./RemoveEvent";
2
+ /**
3
+ * SoftRemoveEvent is an object that broadcaster sends to the entity subscriber when entity is being soft removed to the database.
4
+ */
5
+ export interface SoftRemoveEvent<Entity> extends RemoveEvent<Entity> {
6
+ }
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+
4
+ //# sourceMappingURL=SoftRemoveEvent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/subscriber/event/SoftRemoveEvent.ts"],"names":[],"mappings":"","file":"SoftRemoveEvent.js","sourcesContent":["import { RemoveEvent } from \"./RemoveEvent\";\n\n/**\n * SoftRemoveEvent is an object that broadcaster sends to the entity subscriber when entity is being soft removed to the database.\n */\nexport interface SoftRemoveEvent<Entity> extends RemoveEvent<Entity> {}\n"],"sourceRoot":"../.."}
@@ -117,6 +117,16 @@ exports.AfterInsert = AfterInsert;
117
117
  }
118
118
  exports.AfterLoad = AfterLoad;
119
119
 
120
+ /* export */ function AfterRecover() {
121
+ return function(object, propertyName) {};
122
+ }
123
+ exports.AfterRecover = AfterRecover;
124
+
125
+ /* export */ function AfterSoftRemove() {
126
+ return function(object, propertyName) {};
127
+ }
128
+ exports.AfterSoftRemove = AfterSoftRemove;
129
+
120
130
  /* export */ function AfterRemove() {
121
131
  return function(object, propertyName) {};
122
132
  }
@@ -132,6 +142,16 @@ exports.AfterUpdate = AfterUpdate;
132
142
  }
133
143
  exports.BeforeInsert = BeforeInsert;
134
144
 
145
+ /* export */ function BeforeRecover() {
146
+ return function(object, propertyName) {};
147
+ }
148
+ exports.BeforeRecover = BeforeRecover;
149
+
150
+ /* export */ function BeforeSoftRemove() {
151
+ return function(object, propertyName) {};
152
+ }
153
+ exports.BeforeSoftRemove = BeforeSoftRemove;
154
+
135
155
  /* export */ function BeforeRemove() {
136
156
  return function(object, propertyName) {};
137
157
  }
@@ -76,6 +76,16 @@ exports.AfterInsert = AfterInsert;
76
76
  }
77
77
  exports.AfterLoad = AfterLoad;
78
78
 
79
+ /* export */ function AfterSoftRemove() {
80
+ return function () {};
81
+ }
82
+ exports.AfterSoftRemove = AfterSoftRemove;
83
+
84
+ /* export */ function AfterRecover() {
85
+ return function () {};
86
+ }
87
+ exports.AfterRecover = AfterRecover;
88
+
79
89
  /* export */ function AfterRemove() {
80
90
  return function () {};
81
91
  }
@@ -91,6 +101,16 @@ exports.AfterUpdate = AfterUpdate;
91
101
  }
92
102
  exports.BeforeInsert = BeforeInsert;
93
103
 
104
+ /* export */ function BeforeSoftRemove() {
105
+ return function () {};
106
+ }
107
+ exports.BeforeSoftRemove = BeforeSoftRemove;
108
+
109
+ /* export */ function BeforeRecover() {
110
+ return function () {};
111
+ }
112
+ exports.BeforeRecover = BeforeRecover;
113
+
94
114
  /* export */ function BeforeRemove() {
95
115
  return function () {};
96
116
  }
@@ -2,7 +2,7 @@ import { Logger } from "../logger/Logger";
2
2
  /**
3
3
  * Loads all exported classes from the given directory.
4
4
  */
5
- export declare function importClassesFromDirectories(logger: Logger, directories: string[], formats?: string[]): Function[];
5
+ export declare function importClassesFromDirectories(logger: Logger, directories: string[], formats?: string[]): Promise<Function[]>;
6
6
  /**
7
7
  * Loads all json files from the given directory.
8
8
  */