@punks/backend-entity-manager 0.0.70 → 0.0.72

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 (224) hide show
  1. package/dist/cjs/index.js +604 -30
  2. package/dist/cjs/index.js.map +1 -1
  3. package/dist/cjs/types/__test__/entity/foo.d.ts +7 -2
  4. package/dist/cjs/types/__test__/providers/typeorm/entity/foo.d.ts +14 -2
  5. package/dist/cjs/types/abstractions/actions.d.ts +21 -8
  6. package/dist/cjs/types/abstractions/adapters.d.ts +3 -2
  7. package/dist/cjs/types/abstractions/authorization.d.ts +6 -4
  8. package/dist/cjs/types/abstractions/commands.d.ts +11 -0
  9. package/dist/cjs/types/abstractions/errors.d.ts +3 -2
  10. package/dist/cjs/types/abstractions/index.d.ts +2 -1
  11. package/dist/cjs/types/abstractions/manager.d.ts +12 -9
  12. package/dist/cjs/types/abstractions/pipelines.d.ts +10 -0
  13. package/dist/cjs/types/abstractions/queries.d.ts +11 -1
  14. package/dist/cjs/types/abstractions/repository.d.ts +9 -5
  15. package/dist/cjs/types/actions/count.d.ts +8 -0
  16. package/dist/cjs/types/actions/deleteItems.d.ts +8 -0
  17. package/dist/cjs/types/actions/exists.d.ts +8 -0
  18. package/dist/cjs/types/authorization/allowAll.d.ts +1 -0
  19. package/dist/cjs/types/commands/deleteItems.d.ts +9 -0
  20. package/dist/cjs/types/concrete/index.d.ts +23 -17
  21. package/dist/cjs/types/index.d.ts +1 -0
  22. package/dist/cjs/types/integrations/repository/typeorm/queryBuilder.d.ts +4 -0
  23. package/dist/cjs/types/integrations/repository/typeorm/repository.d.ts +4 -4
  24. package/dist/cjs/types/platforms/nest/__test__/server/app/companies/company.actions.d.ts +2 -2
  25. package/dist/cjs/types/platforms/nest/__test__/server/app/divisions/division.actions.d.ts +2 -2
  26. package/dist/cjs/types/platforms/nest/__test__/server/app/organizations/organization.actions.d.ts +2 -2
  27. package/dist/cjs/types/platforms/nest/__test__/server/app/organizations/templates/index.d.ts +2 -0
  28. package/dist/cjs/types/platforms/nest/__test__/server/app/organizations/templates/organization-register/index.d.ts +34 -0
  29. package/dist/cjs/types/platforms/nest/__test__/server/app/roles/role.actions.d.ts +2 -2
  30. package/dist/cjs/types/platforms/nest/__test__/server/app/tenants/tenant.actions.d.ts +2 -2
  31. package/dist/cjs/types/platforms/nest/__test__/server/app/userGroupMembers/userGroupMember.actions.d.ts +2 -2
  32. package/dist/cjs/types/platforms/nest/__test__/server/app/userGroups/userGroup.actions.d.ts +2 -2
  33. package/dist/cjs/types/platforms/nest/__test__/server/app/userProfiles/userProfile.actions.d.ts +2 -2
  34. package/dist/cjs/types/platforms/nest/__test__/server/app/userRoles/userRole.actions.d.ts +2 -2
  35. package/dist/cjs/types/platforms/nest/__test__/server/app/users/user.actions.d.ts +2 -2
  36. package/dist/cjs/types/platforms/nest/__test__/server/entities/companies/company.adapter.d.ts +3 -3
  37. package/dist/cjs/types/platforms/nest/__test__/server/entities/companies/company.authentication.d.ts +1 -0
  38. package/dist/cjs/types/platforms/nest/__test__/server/entities/companies/company.manager.d.ts +2 -2
  39. package/dist/cjs/types/platforms/nest/__test__/server/entities/companies/company.models.d.ts +8 -3
  40. package/dist/cjs/types/platforms/nest/__test__/server/entities/divisions/division.adapter.d.ts +3 -3
  41. package/dist/cjs/types/platforms/nest/__test__/server/entities/divisions/division.authentication.d.ts +1 -0
  42. package/dist/cjs/types/platforms/nest/__test__/server/entities/divisions/division.manager.d.ts +2 -2
  43. package/dist/cjs/types/platforms/nest/__test__/server/entities/divisions/division.models.d.ts +8 -3
  44. package/dist/cjs/types/platforms/nest/__test__/server/entities/foo/actions.d.ts +2 -2
  45. package/dist/cjs/types/platforms/nest/__test__/server/entities/foo/authentication.d.ts +1 -0
  46. package/dist/cjs/types/platforms/nest/__test__/server/entities/foo/manager.d.ts +2 -2
  47. package/dist/cjs/types/platforms/nest/__test__/server/entities/foo/models.d.ts +13 -1
  48. package/dist/cjs/types/platforms/nest/__test__/server/entities/organizations/organization.adapter.d.ts +3 -3
  49. package/dist/cjs/types/platforms/nest/__test__/server/entities/organizations/organization.authentication.d.ts +1 -0
  50. package/dist/cjs/types/platforms/nest/__test__/server/entities/organizations/organization.manager.d.ts +2 -2
  51. package/dist/cjs/types/platforms/nest/__test__/server/entities/organizations/organization.models.d.ts +8 -3
  52. package/dist/cjs/types/platforms/nest/__test__/server/entities/roles/role.adapter.d.ts +3 -3
  53. package/dist/cjs/types/platforms/nest/__test__/server/entities/roles/role.authentication.d.ts +1 -0
  54. package/dist/cjs/types/platforms/nest/__test__/server/entities/roles/role.manager.d.ts +2 -2
  55. package/dist/cjs/types/platforms/nest/__test__/server/entities/roles/role.models.d.ts +8 -3
  56. package/dist/cjs/types/platforms/nest/__test__/server/entities/tenants/tenant.adapter.d.ts +3 -3
  57. package/dist/cjs/types/platforms/nest/__test__/server/entities/tenants/tenant.authentication.d.ts +1 -0
  58. package/dist/cjs/types/platforms/nest/__test__/server/entities/tenants/tenant.manager.d.ts +2 -2
  59. package/dist/cjs/types/platforms/nest/__test__/server/entities/tenants/tenant.models.d.ts +10 -3
  60. package/dist/cjs/types/platforms/nest/__test__/server/entities/userGroupMembers/userGroupMember.authentication.d.ts +1 -0
  61. package/dist/cjs/types/platforms/nest/__test__/server/entities/userGroupMembers/userGroupMember.manager.d.ts +2 -2
  62. package/dist/cjs/types/platforms/nest/__test__/server/entities/userGroupMembers/userGroupMember.models.d.ts +5 -0
  63. package/dist/cjs/types/platforms/nest/__test__/server/entities/userGroups/userGroup.adapter.d.ts +3 -3
  64. package/dist/cjs/types/platforms/nest/__test__/server/entities/userGroups/userGroup.authentication.d.ts +1 -0
  65. package/dist/cjs/types/platforms/nest/__test__/server/entities/userGroups/userGroup.manager.d.ts +2 -2
  66. package/dist/cjs/types/platforms/nest/__test__/server/entities/userGroups/userGroup.models.d.ts +8 -3
  67. package/dist/cjs/types/platforms/nest/__test__/server/entities/userProfiles/userProfile.adapter.d.ts +3 -3
  68. package/dist/cjs/types/platforms/nest/__test__/server/entities/userProfiles/userProfile.authentication.d.ts +1 -0
  69. package/dist/cjs/types/platforms/nest/__test__/server/entities/userProfiles/userProfile.manager.d.ts +2 -2
  70. package/dist/cjs/types/platforms/nest/__test__/server/entities/userProfiles/userProfile.models.d.ts +8 -3
  71. package/dist/cjs/types/platforms/nest/__test__/server/entities/userRoles/userRole.adapter.d.ts +3 -3
  72. package/dist/cjs/types/platforms/nest/__test__/server/entities/userRoles/userRole.authentication.d.ts +1 -0
  73. package/dist/cjs/types/platforms/nest/__test__/server/entities/userRoles/userRole.manager.d.ts +2 -2
  74. package/dist/cjs/types/platforms/nest/__test__/server/entities/userRoles/userRole.models.d.ts +8 -3
  75. package/dist/cjs/types/platforms/nest/__test__/server/entities/users/user.adapter.d.ts +3 -3
  76. package/dist/cjs/types/platforms/nest/__test__/server/entities/users/user.authentication.d.ts +1 -0
  77. package/dist/cjs/types/platforms/nest/__test__/server/entities/users/user.manager.d.ts +2 -2
  78. package/dist/cjs/types/platforms/nest/__test__/server/entities/users/user.models.d.ts +8 -3
  79. package/dist/cjs/types/platforms/nest/__test__/server/infrastructure/authentication/processors/entity-auth/index.d.ts +1 -0
  80. package/dist/cjs/types/platforms/nest/__test__/tests/pipelines/test_crud_pipeline.test.d.ts +1 -0
  81. package/dist/cjs/types/platforms/nest/__test__/tests/pipelines/test_simple_pipeline.test.d.ts +1 -0
  82. package/dist/cjs/types/platforms/nest/authentication/entityAuthorizationMiddleware.d.ts +1 -0
  83. package/dist/cjs/types/platforms/nest/base/entityActions.d.ts +3 -2
  84. package/dist/cjs/types/platforms/nest/base/entityManager.d.ts +3 -2
  85. package/dist/cjs/types/platforms/nest/decorators/index.d.ts +1 -0
  86. package/dist/cjs/types/platforms/nest/decorators/pipelines.d.ts +4 -0
  87. package/dist/cjs/types/platforms/nest/decorators/symbols.d.ts +1 -0
  88. package/dist/cjs/types/platforms/nest/index.d.ts +1 -0
  89. package/dist/cjs/types/platforms/nest/pipelines/builder/concrete.d.ts +4 -0
  90. package/dist/cjs/types/platforms/nest/pipelines/builder/index.d.ts +7 -0
  91. package/dist/cjs/types/platforms/nest/pipelines/builder/types.d.ts +14 -0
  92. package/dist/cjs/types/platforms/nest/pipelines/index.d.ts +2 -0
  93. package/dist/cjs/types/platforms/nest/pipelines/providers.d.ts +3 -0
  94. package/dist/cjs/types/platforms/nest/pipelines/runner/index.d.ts +11 -0
  95. package/dist/cjs/types/platforms/nest/pipelines/template/index.d.ts +17 -0
  96. package/dist/cjs/types/platforms/nest/processors/initializer/index.d.ts +1 -0
  97. package/dist/cjs/types/platforms/nest/services/manager/index.d.ts +2 -2
  98. package/dist/cjs/types/providers/services.d.ts +31 -10
  99. package/dist/cjs/types/queries/count.d.ts +10 -0
  100. package/dist/cjs/types/queries/exists.d.ts +10 -0
  101. package/dist/cjs/types/symbols/ioc.d.ts +9 -0
  102. package/dist/cjs/types/templates/index.d.ts +1 -0
  103. package/dist/cjs/types/templates/pipelines/controller/index.d.ts +5 -0
  104. package/dist/cjs/types/templates/pipelines/converters/index.d.ts +4 -0
  105. package/dist/cjs/types/templates/pipelines/index.d.ts +1 -0
  106. package/dist/cjs/types/templates/pipelines/instance/index.d.ts +19 -0
  107. package/dist/cjs/types/templates/{queryBuilder.d.ts → queryBuilder/index.d.ts} +7 -3
  108. package/dist/cjs/types/testing/mocks/repository.d.ts +2 -2
  109. package/dist/cjs/types/types/index.d.ts +2 -0
  110. package/dist/cjs/types/types/objects.d.ts +4 -0
  111. package/dist/cjs/types/types/pipelines.d.ts +95 -0
  112. package/dist/esm/index.js +603 -31
  113. package/dist/esm/index.js.map +1 -1
  114. package/dist/esm/types/__test__/entity/foo.d.ts +7 -2
  115. package/dist/esm/types/__test__/providers/typeorm/entity/foo.d.ts +14 -2
  116. package/dist/esm/types/abstractions/actions.d.ts +21 -8
  117. package/dist/esm/types/abstractions/adapters.d.ts +3 -2
  118. package/dist/esm/types/abstractions/authorization.d.ts +6 -4
  119. package/dist/esm/types/abstractions/commands.d.ts +11 -0
  120. package/dist/esm/types/abstractions/errors.d.ts +3 -2
  121. package/dist/esm/types/abstractions/index.d.ts +2 -1
  122. package/dist/esm/types/abstractions/manager.d.ts +12 -9
  123. package/dist/esm/types/abstractions/pipelines.d.ts +10 -0
  124. package/dist/esm/types/abstractions/queries.d.ts +11 -1
  125. package/dist/esm/types/abstractions/repository.d.ts +9 -5
  126. package/dist/esm/types/actions/count.d.ts +8 -0
  127. package/dist/esm/types/actions/deleteItems.d.ts +8 -0
  128. package/dist/esm/types/actions/exists.d.ts +8 -0
  129. package/dist/esm/types/authorization/allowAll.d.ts +1 -0
  130. package/dist/esm/types/commands/deleteItems.d.ts +9 -0
  131. package/dist/esm/types/concrete/index.d.ts +23 -17
  132. package/dist/esm/types/index.d.ts +1 -0
  133. package/dist/esm/types/integrations/repository/typeorm/queryBuilder.d.ts +4 -0
  134. package/dist/esm/types/integrations/repository/typeorm/repository.d.ts +4 -4
  135. package/dist/esm/types/platforms/nest/__test__/server/app/companies/company.actions.d.ts +2 -2
  136. package/dist/esm/types/platforms/nest/__test__/server/app/divisions/division.actions.d.ts +2 -2
  137. package/dist/esm/types/platforms/nest/__test__/server/app/organizations/organization.actions.d.ts +2 -2
  138. package/dist/esm/types/platforms/nest/__test__/server/app/organizations/templates/index.d.ts +2 -0
  139. package/dist/esm/types/platforms/nest/__test__/server/app/organizations/templates/organization-register/index.d.ts +34 -0
  140. package/dist/esm/types/platforms/nest/__test__/server/app/roles/role.actions.d.ts +2 -2
  141. package/dist/esm/types/platforms/nest/__test__/server/app/tenants/tenant.actions.d.ts +2 -2
  142. package/dist/esm/types/platforms/nest/__test__/server/app/userGroupMembers/userGroupMember.actions.d.ts +2 -2
  143. package/dist/esm/types/platforms/nest/__test__/server/app/userGroups/userGroup.actions.d.ts +2 -2
  144. package/dist/esm/types/platforms/nest/__test__/server/app/userProfiles/userProfile.actions.d.ts +2 -2
  145. package/dist/esm/types/platforms/nest/__test__/server/app/userRoles/userRole.actions.d.ts +2 -2
  146. package/dist/esm/types/platforms/nest/__test__/server/app/users/user.actions.d.ts +2 -2
  147. package/dist/esm/types/platforms/nest/__test__/server/entities/companies/company.adapter.d.ts +3 -3
  148. package/dist/esm/types/platforms/nest/__test__/server/entities/companies/company.authentication.d.ts +1 -0
  149. package/dist/esm/types/platforms/nest/__test__/server/entities/companies/company.manager.d.ts +2 -2
  150. package/dist/esm/types/platforms/nest/__test__/server/entities/companies/company.models.d.ts +8 -3
  151. package/dist/esm/types/platforms/nest/__test__/server/entities/divisions/division.adapter.d.ts +3 -3
  152. package/dist/esm/types/platforms/nest/__test__/server/entities/divisions/division.authentication.d.ts +1 -0
  153. package/dist/esm/types/platforms/nest/__test__/server/entities/divisions/division.manager.d.ts +2 -2
  154. package/dist/esm/types/platforms/nest/__test__/server/entities/divisions/division.models.d.ts +8 -3
  155. package/dist/esm/types/platforms/nest/__test__/server/entities/foo/actions.d.ts +2 -2
  156. package/dist/esm/types/platforms/nest/__test__/server/entities/foo/authentication.d.ts +1 -0
  157. package/dist/esm/types/platforms/nest/__test__/server/entities/foo/manager.d.ts +2 -2
  158. package/dist/esm/types/platforms/nest/__test__/server/entities/foo/models.d.ts +13 -1
  159. package/dist/esm/types/platforms/nest/__test__/server/entities/organizations/organization.adapter.d.ts +3 -3
  160. package/dist/esm/types/platforms/nest/__test__/server/entities/organizations/organization.authentication.d.ts +1 -0
  161. package/dist/esm/types/platforms/nest/__test__/server/entities/organizations/organization.manager.d.ts +2 -2
  162. package/dist/esm/types/platforms/nest/__test__/server/entities/organizations/organization.models.d.ts +8 -3
  163. package/dist/esm/types/platforms/nest/__test__/server/entities/roles/role.adapter.d.ts +3 -3
  164. package/dist/esm/types/platforms/nest/__test__/server/entities/roles/role.authentication.d.ts +1 -0
  165. package/dist/esm/types/platforms/nest/__test__/server/entities/roles/role.manager.d.ts +2 -2
  166. package/dist/esm/types/platforms/nest/__test__/server/entities/roles/role.models.d.ts +8 -3
  167. package/dist/esm/types/platforms/nest/__test__/server/entities/tenants/tenant.adapter.d.ts +3 -3
  168. package/dist/esm/types/platforms/nest/__test__/server/entities/tenants/tenant.authentication.d.ts +1 -0
  169. package/dist/esm/types/platforms/nest/__test__/server/entities/tenants/tenant.manager.d.ts +2 -2
  170. package/dist/esm/types/platforms/nest/__test__/server/entities/tenants/tenant.models.d.ts +10 -3
  171. package/dist/esm/types/platforms/nest/__test__/server/entities/userGroupMembers/userGroupMember.authentication.d.ts +1 -0
  172. package/dist/esm/types/platforms/nest/__test__/server/entities/userGroupMembers/userGroupMember.manager.d.ts +2 -2
  173. package/dist/esm/types/platforms/nest/__test__/server/entities/userGroupMembers/userGroupMember.models.d.ts +5 -0
  174. package/dist/esm/types/platforms/nest/__test__/server/entities/userGroups/userGroup.adapter.d.ts +3 -3
  175. package/dist/esm/types/platforms/nest/__test__/server/entities/userGroups/userGroup.authentication.d.ts +1 -0
  176. package/dist/esm/types/platforms/nest/__test__/server/entities/userGroups/userGroup.manager.d.ts +2 -2
  177. package/dist/esm/types/platforms/nest/__test__/server/entities/userGroups/userGroup.models.d.ts +8 -3
  178. package/dist/esm/types/platforms/nest/__test__/server/entities/userProfiles/userProfile.adapter.d.ts +3 -3
  179. package/dist/esm/types/platforms/nest/__test__/server/entities/userProfiles/userProfile.authentication.d.ts +1 -0
  180. package/dist/esm/types/platforms/nest/__test__/server/entities/userProfiles/userProfile.manager.d.ts +2 -2
  181. package/dist/esm/types/platforms/nest/__test__/server/entities/userProfiles/userProfile.models.d.ts +8 -3
  182. package/dist/esm/types/platforms/nest/__test__/server/entities/userRoles/userRole.adapter.d.ts +3 -3
  183. package/dist/esm/types/platforms/nest/__test__/server/entities/userRoles/userRole.authentication.d.ts +1 -0
  184. package/dist/esm/types/platforms/nest/__test__/server/entities/userRoles/userRole.manager.d.ts +2 -2
  185. package/dist/esm/types/platforms/nest/__test__/server/entities/userRoles/userRole.models.d.ts +8 -3
  186. package/dist/esm/types/platforms/nest/__test__/server/entities/users/user.adapter.d.ts +3 -3
  187. package/dist/esm/types/platforms/nest/__test__/server/entities/users/user.authentication.d.ts +1 -0
  188. package/dist/esm/types/platforms/nest/__test__/server/entities/users/user.manager.d.ts +2 -2
  189. package/dist/esm/types/platforms/nest/__test__/server/entities/users/user.models.d.ts +8 -3
  190. package/dist/esm/types/platforms/nest/__test__/server/infrastructure/authentication/processors/entity-auth/index.d.ts +1 -0
  191. package/dist/esm/types/platforms/nest/__test__/tests/pipelines/test_crud_pipeline.test.d.ts +1 -0
  192. package/dist/esm/types/platforms/nest/__test__/tests/pipelines/test_simple_pipeline.test.d.ts +1 -0
  193. package/dist/esm/types/platforms/nest/authentication/entityAuthorizationMiddleware.d.ts +1 -0
  194. package/dist/esm/types/platforms/nest/base/entityActions.d.ts +3 -2
  195. package/dist/esm/types/platforms/nest/base/entityManager.d.ts +3 -2
  196. package/dist/esm/types/platforms/nest/decorators/index.d.ts +1 -0
  197. package/dist/esm/types/platforms/nest/decorators/pipelines.d.ts +4 -0
  198. package/dist/esm/types/platforms/nest/decorators/symbols.d.ts +1 -0
  199. package/dist/esm/types/platforms/nest/index.d.ts +1 -0
  200. package/dist/esm/types/platforms/nest/pipelines/builder/concrete.d.ts +4 -0
  201. package/dist/esm/types/platforms/nest/pipelines/builder/index.d.ts +7 -0
  202. package/dist/esm/types/platforms/nest/pipelines/builder/types.d.ts +14 -0
  203. package/dist/esm/types/platforms/nest/pipelines/index.d.ts +2 -0
  204. package/dist/esm/types/platforms/nest/pipelines/providers.d.ts +3 -0
  205. package/dist/esm/types/platforms/nest/pipelines/runner/index.d.ts +11 -0
  206. package/dist/esm/types/platforms/nest/pipelines/template/index.d.ts +17 -0
  207. package/dist/esm/types/platforms/nest/processors/initializer/index.d.ts +1 -0
  208. package/dist/esm/types/platforms/nest/services/manager/index.d.ts +2 -2
  209. package/dist/esm/types/providers/services.d.ts +31 -10
  210. package/dist/esm/types/queries/count.d.ts +10 -0
  211. package/dist/esm/types/queries/exists.d.ts +10 -0
  212. package/dist/esm/types/symbols/ioc.d.ts +9 -0
  213. package/dist/esm/types/templates/index.d.ts +1 -0
  214. package/dist/esm/types/templates/pipelines/controller/index.d.ts +5 -0
  215. package/dist/esm/types/templates/pipelines/converters/index.d.ts +4 -0
  216. package/dist/esm/types/templates/pipelines/index.d.ts +1 -0
  217. package/dist/esm/types/templates/pipelines/instance/index.d.ts +19 -0
  218. package/dist/esm/types/templates/{queryBuilder.d.ts → queryBuilder/index.d.ts} +7 -3
  219. package/dist/esm/types/testing/mocks/repository.d.ts +2 -2
  220. package/dist/esm/types/types/index.d.ts +2 -0
  221. package/dist/esm/types/types/objects.d.ts +4 -0
  222. package/dist/esm/types/types/pipelines.d.ts +95 -0
  223. package/dist/index.d.ts +278 -64
  224. package/package.json +1 -1
package/dist/esm/index.js CHANGED
@@ -114,12 +114,11 @@ class NestEntityActions {
114
114
  constructor(entityName, registry) {
115
115
  this.services = registry.resolveEntityServicesCollection(entityName);
116
116
  }
117
- get provider() {
117
+ get manager() {
118
118
  if (!this.actionsInstance) {
119
119
  this.actionsInstance =
120
120
  this.services.resolveEntityActions();
121
121
  }
122
- this.services.resolveEntityActions;
123
122
  return this.actionsInstance;
124
123
  }
125
124
  }
@@ -129,7 +128,7 @@ class NestEntityManager {
129
128
  constructor(entityName, registry) {
130
129
  this.services = registry.resolveEntityServicesCollection(entityName);
131
130
  }
132
- get provider() {
131
+ get manager() {
133
132
  if (!this.managerInstance) {
134
133
  this.managerInstance =
135
134
  this.services.resolveEntityManager();
@@ -153,6 +152,7 @@ const EntityManagerSymbols = {
153
152
  EntitySeeder: Symbol.for("WP:ENTITY_SEEDER"),
154
153
  EmailProvider: Symbol.for("WP:EMAIL_PROVIDER"),
155
154
  EmailTemplate: Symbol.for("WP:EMAIL_TEMPLATE"),
155
+ PipelineTemplate: Symbol.for("WP:PIPELINE_TEMPLATE"),
156
156
  };
157
157
 
158
158
  const WpEntityAuthMiddleware = (entityName, props = {}) => applyDecorators(Injectable(), SetMetadata(EntityManagerSymbols.EntityAuthMiddleware, {
@@ -209,6 +209,11 @@ const WpEntityQueryBuilder = (entityName, props = {}) => applyDecorators(Injecta
209
209
  ...props,
210
210
  }));
211
211
 
212
+ const WpPipeline = (name, props = {}) => applyDecorators(Injectable(), SetMetadata(EntityManagerSymbols.PipelineTemplate, {
213
+ name,
214
+ ...props,
215
+ }));
216
+
212
217
  const WpEntitySeeder = (entityName, props = {}) => applyDecorators(Injectable(), SetMetadata(EntityManagerSymbols.EntitySeeder, {
213
218
  entityName,
214
219
  ...props,
@@ -459,6 +464,15 @@ AppHashingService = __decorate([
459
464
  Injectable()
460
465
  ], AppHashingService);
461
466
 
467
+ class EntitiesCountAction {
468
+ constructor(services) {
469
+ this.services = services;
470
+ }
471
+ async execute(filters) {
472
+ return await this.services.resolveCountQuery().execute(filters);
473
+ }
474
+ }
475
+
462
476
  class EntityCreateAction {
463
477
  constructor(services) {
464
478
  this.services = services;
@@ -486,6 +500,24 @@ class EntityDeleteAction {
486
500
  }
487
501
  }
488
502
 
503
+ class EntitiesDeleteAction {
504
+ constructor(services) {
505
+ this.services = services;
506
+ }
507
+ async execute(params) {
508
+ await this.services.resolveDeleteItemsCommand().execute(params);
509
+ }
510
+ }
511
+
512
+ class EntityExistsAction {
513
+ constructor(services) {
514
+ this.services = services;
515
+ }
516
+ async execute(filters) {
517
+ return await this.services.resolveExistsQuery().execute(filters);
518
+ }
519
+ }
520
+
489
521
  class EntityGetAction {
490
522
  constructor(services) {
491
523
  this.services = services;
@@ -603,6 +635,40 @@ class EntityDeleteCommand {
603
635
  }
604
636
  }
605
637
 
638
+ class EntitiesDeleteCommand {
639
+ constructor(services) {
640
+ this.services = services;
641
+ }
642
+ async execute(params) {
643
+ await this.authorize();
644
+ const context = await this.getContext();
645
+ const deleteResult = await this.services
646
+ .resolveQueryBuilder()
647
+ .delete(params.filters, context);
648
+ // todo: add entities deleted event
649
+ return deleteResult;
650
+ }
651
+ async getContext() {
652
+ const authorization = this.services.resolveAuthorizationMiddleware();
653
+ if (!authorization) {
654
+ return undefined;
655
+ }
656
+ const contextService = this.services.resolveAuthenticationContextProvider();
657
+ return await contextService.getContext();
658
+ }
659
+ async authorize() {
660
+ const authorization = this.services.resolveAuthorizationMiddleware();
661
+ if (!authorization) {
662
+ return;
663
+ }
664
+ const contextService = this.services.resolveAuthenticationContextProvider();
665
+ const context = await contextService.getContext();
666
+ const authorizationResult = await authorization.canDeleteItems(context);
667
+ if (!authorizationResult.isAuthorized)
668
+ throw new EntityOperationUnauthorizedException(EntityOperationType.Delete, this.services.getEntityName());
669
+ }
670
+ }
671
+
606
672
  class EntityUpdateCommand {
607
673
  constructor(services) {
608
674
  this.services = services;
@@ -687,23 +753,31 @@ class EntityManager {
687
753
  constructor(services) {
688
754
  this.services = services;
689
755
  }
690
- get() {
756
+ get exists() {
757
+ return this.services.resolveExistsQuery();
758
+ }
759
+ get count() {
760
+ return this.services.resolveCountQuery();
761
+ }
762
+ get deleteItems() {
763
+ return this.services.resolveDeleteItemsCommand();
764
+ }
765
+ get get() {
691
766
  return this.services.resolveGetQuery();
692
767
  }
693
- // @ts-ignore
694
- search() {
768
+ get search() {
695
769
  return this.services.resolveSearchQuery();
696
770
  }
697
- create() {
771
+ get create() {
698
772
  return this.services.resolveCreateCommand();
699
773
  }
700
- update() {
774
+ get update() {
701
775
  return this.services.resolveUpdateCommand();
702
776
  }
703
- upsert() {
777
+ get upsert() {
704
778
  return this.services.resolveUpsertCommand();
705
779
  }
706
- delete() {
780
+ get delete() {
707
781
  return this.services.resolveDeleteCommand();
708
782
  }
709
783
  }
@@ -711,22 +785,31 @@ class EntityActions {
711
785
  constructor(services) {
712
786
  this.services = services;
713
787
  }
714
- get() {
788
+ get exists() {
789
+ return this.services.resolveExistsAction();
790
+ }
791
+ get count() {
792
+ return this.services.resolveCountAction();
793
+ }
794
+ get deleteItems() {
795
+ return this.services.resolveDeleteItemsAction();
796
+ }
797
+ get get() {
715
798
  return this.services.resolveGetAction();
716
799
  }
717
- search() {
800
+ get search() {
718
801
  return this.services.resolveSearchAction();
719
802
  }
720
- create() {
803
+ get create() {
721
804
  return this.services.resolveCreateAction();
722
805
  }
723
- update() {
806
+ get update() {
724
807
  return this.services.resolveUpdateAction();
725
808
  }
726
- upsert() {
809
+ get upsert() {
727
810
  return this.services.resolveUpsertAction();
728
811
  }
729
- delete() {
812
+ get delete() {
730
813
  return this.services.resolveDeleteAction();
731
814
  }
732
815
  }
@@ -772,6 +855,9 @@ class ServiceLocator {
772
855
  const EntityServices = {
773
856
  Actions: {
774
857
  IEntityGetAction: "IEntityGetAction",
858
+ IEntityExistsAction: "IEntityExistsAction",
859
+ IEntitiesCountAction: "IEntitiesCountAction",
860
+ IEntitiesDeleteAction: "IEntitiesDeleteAction",
775
861
  IEntitiesSearchAction: "IEntitiesSearchAction",
776
862
  IEntityCreateAction: "IEntityCreateAction",
777
863
  IEntityUpdateAction: "IEntityUpdateAction",
@@ -788,6 +874,7 @@ const EntityServices = {
788
874
  IEntityUpsertCommand: "IEntityUpsertCommand",
789
875
  IEntityMergeCommand: "IEntityMergeCommand",
790
876
  IEntityDeleteCommand: "IEntityDeleteCommand",
877
+ IEntitiesDeleteCommand: "IEntitiesDeleteCommand",
791
878
  },
792
879
  Converters: {
793
880
  IEntityAdapter: "IEntityAdapter",
@@ -802,6 +889,8 @@ const EntityServices = {
802
889
  IEntityEventsManager: "IEntityEventsManager",
803
890
  },
804
891
  Queries: {
892
+ IEntityCountQuery: "IEntityCountQuery",
893
+ IEntityExistsQuery: "IEntityExistsQuery",
805
894
  IEntityGetQuery: "IEntityGetQuery",
806
895
  IEntitiesSearchQuery: "IEntitiesSearchQuery",
807
896
  IEntitiesQueryBuilder: "IEntitiesQueryBuilder",
@@ -831,6 +920,9 @@ const GlobalServices = {
831
920
  IEmailProvider: "IEmailProvider",
832
921
  IEmailTemplatesCollection: "IEmailTemplatesCollection",
833
922
  },
923
+ Pipelines: {
924
+ IPipelineController: "IPipelineController",
925
+ },
834
926
  };
835
927
 
836
928
  class EntityServiceLocator {
@@ -886,6 +978,12 @@ class EntityServiceLocator {
886
978
  resolveGetQuery() {
887
979
  return this.services.resolveGetQuery(this.entityName);
888
980
  }
981
+ resolveExistsQuery() {
982
+ return this.services.resolveExistsQuery(this.entityName);
983
+ }
984
+ resolveCountQuery() {
985
+ return this.services.resolveCountQuery(this.entityName);
986
+ }
889
987
  resolveSearchQuery() {
890
988
  return this.services.resolveSearchQuery(this.entityName);
891
989
  }
@@ -904,9 +1002,18 @@ class EntityServiceLocator {
904
1002
  resolveDeleteCommand() {
905
1003
  return this.services.resolveDeleteCommand(this.entityName);
906
1004
  }
1005
+ resolveDeleteItemsCommand() {
1006
+ return this.services.resolveDeleteItemsCommand(this.entityName);
1007
+ }
907
1008
  resolveGetAction() {
908
1009
  return this.services.resolveGetAction(this.entityName);
909
1010
  }
1011
+ resolveExistsAction() {
1012
+ return this.services.resolveExistsAction(this.entityName);
1013
+ }
1014
+ resolveCountAction() {
1015
+ return this.services.resolveCountAction(this.entityName);
1016
+ }
910
1017
  resolveSearchAction() {
911
1018
  return this.services.resolveSearchAction(this.entityName);
912
1019
  }
@@ -922,6 +1029,9 @@ class EntityServiceLocator {
922
1029
  resolveDeleteAction() {
923
1030
  return this.services.resolveDeleteAction(this.entityName);
924
1031
  }
1032
+ resolveDeleteItemsAction() {
1033
+ return this.services.resolveDeleteItemsAction(this.entityName);
1034
+ }
925
1035
  resolveQueryBuilder() {
926
1036
  return this.services.resolveQueryBuilder(this.entityName);
927
1037
  }
@@ -962,6 +1072,12 @@ class EntitiesServiceLocator {
962
1072
  registerEmailTemplatesCollection(instance) {
963
1073
  this.provider.register(GlobalServices.Messaging.IEmailTemplatesCollection, instance);
964
1074
  }
1075
+ resolvePipelinesController() {
1076
+ return this.provider.resolve(GlobalServices.Pipelines.IPipelineController);
1077
+ }
1078
+ registerPipelinesController(instance) {
1079
+ this.provider.register(GlobalServices.Pipelines.IPipelineController, instance);
1080
+ }
965
1081
  resolveAuthenticationContextProvider() {
966
1082
  return this.provider.resolve(GlobalServices.Authentication.IAuthenticationContextProvider);
967
1083
  }
@@ -1064,6 +1180,18 @@ class EntitiesServiceLocator {
1064
1180
  registerSearchQuery(entityName, instance) {
1065
1181
  this.provider.registerEntityService(EntityServices.Queries.IEntitiesSearchQuery, entityName, instance);
1066
1182
  }
1183
+ resolveExistsQuery(entityName) {
1184
+ return this.provider.resolveEntityService(EntityServices.Queries.IEntityExistsQuery, entityName);
1185
+ }
1186
+ registerExistsQuery(entityName, instance) {
1187
+ this.provider.registerEntityService(EntityServices.Queries.IEntityExistsQuery, entityName, instance);
1188
+ }
1189
+ resolveCountQuery(entityName) {
1190
+ return this.provider.resolveEntityService(EntityServices.Queries.IEntityCountQuery, entityName);
1191
+ }
1192
+ registerCountQuery(entityName, instance) {
1193
+ this.provider.registerEntityService(EntityServices.Queries.IEntityCountQuery, entityName, instance);
1194
+ }
1067
1195
  resolveCreateCommand(entityName) {
1068
1196
  return this.provider.resolveEntityService(EntityServices.Commands.IEntityCreateCommand, entityName);
1069
1197
  }
@@ -1082,6 +1210,12 @@ class EntitiesServiceLocator {
1082
1210
  registerUpsertCommand(entityName, instance) {
1083
1211
  this.provider.registerEntityService(EntityServices.Commands.IEntityUpsertCommand, entityName, instance);
1084
1212
  }
1213
+ resolveDeleteItemsCommand(entityName) {
1214
+ return this.provider.resolveEntityService(EntityServices.Commands.IEntitiesDeleteCommand, entityName);
1215
+ }
1216
+ registerDeleteItemsCommand(entityName, instance) {
1217
+ this.provider.registerEntityService(EntityServices.Commands.IEntitiesDeleteCommand, entityName, instance);
1218
+ }
1085
1219
  // resolveMergeCommand<TEntity>(
1086
1220
  // entityName: string
1087
1221
  // ): IEntityMergeCommand<TEntity> {
@@ -1122,6 +1256,18 @@ class EntitiesServiceLocator {
1122
1256
  registerGetAction(entityName, instance) {
1123
1257
  this.provider.registerEntityService(EntityServices.Actions.IEntityGetAction, entityName, instance);
1124
1258
  }
1259
+ resolveExistsAction(entityName) {
1260
+ return this.provider.resolveEntityService(EntityServices.Actions.IEntityExistsAction, entityName);
1261
+ }
1262
+ registerExistsAction(entityName, instance) {
1263
+ this.provider.registerEntityService(EntityServices.Actions.IEntityExistsAction, entityName, instance);
1264
+ }
1265
+ resolveCountAction(entityName) {
1266
+ return this.provider.resolveEntityService(EntityServices.Actions.IEntitiesCountAction, entityName);
1267
+ }
1268
+ registerCountAction(entityName, instance) {
1269
+ this.provider.registerEntityService(EntityServices.Actions.IEntitiesCountAction, entityName, instance);
1270
+ }
1125
1271
  resolveSearchAction(entityName) {
1126
1272
  return this.provider.resolveEntityService(EntityServices.Actions.IEntitiesSearchAction, entityName);
1127
1273
  }
@@ -1152,6 +1298,12 @@ class EntitiesServiceLocator {
1152
1298
  registerDeleteAction(entityName, instance) {
1153
1299
  this.provider.registerEntityService(EntityServices.Actions.IEntityDeleteAction, entityName, instance);
1154
1300
  }
1301
+ resolveDeleteItemsAction(entityName) {
1302
+ return this.provider.resolveEntityService(EntityServices.Actions.IEntitiesDeleteAction, entityName);
1303
+ }
1304
+ registerDeleteItemsAction(entityName, instance) {
1305
+ this.provider.registerEntityService(EntityServices.Actions.IEntitiesDeleteAction, entityName, instance);
1306
+ }
1155
1307
  resolveQueryBuilder(entityName) {
1156
1308
  return this.provider.resolveEntityService(EntityServices.Queries.IEntitiesQueryBuilder, entityName);
1157
1309
  }
@@ -1160,12 +1312,74 @@ class EntitiesServiceLocator {
1160
1312
  }
1161
1313
  }
1162
1314
 
1315
+ class EntitiesCountQuery {
1316
+ constructor(services) {
1317
+ this.services = services;
1318
+ }
1319
+ async execute(filters) {
1320
+ const context = await this.getContext();
1321
+ await this.authorizeSearch(context);
1322
+ return await this.services
1323
+ .resolveQueryBuilder()
1324
+ .count(filters, context);
1325
+ }
1326
+ async getContext() {
1327
+ const authorization = this.services.resolveAuthorizationMiddleware();
1328
+ if (!authorization) {
1329
+ return undefined;
1330
+ }
1331
+ const contextService = this.services.resolveAuthenticationContextProvider();
1332
+ return await contextService.getContext();
1333
+ }
1334
+ async authorizeSearch(context) {
1335
+ const authorization = this.services.resolveAuthorizationMiddleware();
1336
+ if (!authorization) {
1337
+ return;
1338
+ }
1339
+ const { isAuthorized } = await authorization.canSearch(context);
1340
+ if (!isAuthorized) {
1341
+ throw new EntityOperationUnauthorizedException(EntityOperationType.Search, this.services.getEntityName());
1342
+ }
1343
+ }
1344
+ }
1345
+
1346
+ class EntityExistsQuery {
1347
+ constructor(services) {
1348
+ this.services = services;
1349
+ }
1350
+ async execute(filters) {
1351
+ const context = await this.getContext();
1352
+ await this.authorizeSearch(context);
1353
+ return await this.services
1354
+ .resolveQueryBuilder()
1355
+ .exists(filters, context);
1356
+ }
1357
+ async getContext() {
1358
+ const authorization = this.services.resolveAuthorizationMiddleware();
1359
+ if (!authorization) {
1360
+ return undefined;
1361
+ }
1362
+ const contextService = this.services.resolveAuthenticationContextProvider();
1363
+ return await contextService.getContext();
1364
+ }
1365
+ async authorizeSearch(context) {
1366
+ const authorization = this.services.resolveAuthorizationMiddleware();
1367
+ if (!authorization) {
1368
+ return;
1369
+ }
1370
+ const { isAuthorized } = await authorization.canSearch(context);
1371
+ if (!isAuthorized) {
1372
+ throw new EntityOperationUnauthorizedException(EntityOperationType.Search, this.services.getEntityName());
1373
+ }
1374
+ }
1375
+ }
1376
+
1163
1377
  class EntityGetQuery {
1164
1378
  constructor(services) {
1165
1379
  this.services = services;
1166
1380
  }
1167
1381
  async execute(id) {
1168
- var entity = await this.services.resolveRepository().get(id);
1382
+ const entity = await this.services.resolveRepository().get(id);
1169
1383
  if (entity) {
1170
1384
  await this.authorize(entity);
1171
1385
  }
@@ -1188,7 +1402,6 @@ class EntitiesSearchQuery {
1188
1402
  constructor(services) {
1189
1403
  this.services = services;
1190
1404
  }
1191
- // @ts-ignore
1192
1405
  async execute(request) {
1193
1406
  const context = await this.getContext();
1194
1407
  await this.authorizeSearch(context);
@@ -1483,6 +1696,8 @@ class EntityManagerServiceCollection {
1483
1696
  }
1484
1697
  mapCrudOperations({ queryBuilder, }) {
1485
1698
  this.mapGet();
1699
+ this.mapCount();
1700
+ this.mapExists();
1486
1701
  this.mapSearch({
1487
1702
  queryBuilder,
1488
1703
  });
@@ -1496,6 +1711,16 @@ class EntityManagerServiceCollection {
1496
1711
  this.locator.registerGetAction(this.entityName, new EntityGetAction(this.resolver));
1497
1712
  return this;
1498
1713
  }
1714
+ mapCount() {
1715
+ this.locator.registerCountQuery(this.entityName, new EntitiesCountQuery(this.resolver));
1716
+ this.locator.registerCountAction(this.entityName, new EntitiesCountAction(this.resolver));
1717
+ return this;
1718
+ }
1719
+ mapExists() {
1720
+ this.locator.registerExistsQuery(this.entityName, new EntityExistsQuery(this.resolver));
1721
+ this.locator.registerExistsAction(this.entityName, new EntityExistsAction(this.resolver));
1722
+ return this;
1723
+ }
1499
1724
  mapSearch({ queryBuilder, }) {
1500
1725
  this.locator.registerSearchQuery(this.entityName, new EntitiesSearchQuery(this.resolver));
1501
1726
  this.locator.registerSearchAction(this.entityName, new EntitiesSearchAction(this.resolver));
@@ -1525,6 +1750,8 @@ class EntityManagerServiceCollection {
1525
1750
  mapDelete() {
1526
1751
  this.locator.registerDeleteCommand(this.entityName, new EntityDeleteCommand(this.resolver));
1527
1752
  this.locator.registerDeleteAction(this.entityName, new EntityDeleteAction(this.resolver));
1753
+ this.locator.registerDeleteItemsCommand(this.entityName, new EntitiesDeleteCommand(this.resolver));
1754
+ this.locator.registerDeleteAction(this.entityName, new EntitiesDeleteAction(this.resolver));
1528
1755
  return this;
1529
1756
  }
1530
1757
  addAdapter(adapter) {
@@ -19771,6 +19998,209 @@ const orderByPriority = (items, priorityFieldSelector, nameFieldSelector) => {
19771
19998
  return sort(items, byField((x) => priorityFieldSelector(x) ?? Number.MAX_VALUE), byField((x) => nameFieldSelector(x)));
19772
19999
  };
19773
20000
 
20001
+ var PipelineStatus;
20002
+ (function (PipelineStatus) {
20003
+ PipelineStatus["Initializing"] = "initializing";
20004
+ PipelineStatus["Running"] = "running";
20005
+ PipelineStatus["RollbackInProgress"] = "rollbackInProgress";
20006
+ PipelineStatus["Completed"] = "completed";
20007
+ PipelineStatus["Failed"] = "failed";
20008
+ })(PipelineStatus || (PipelineStatus = {}));
20009
+
20010
+ const toPipelineOperationError = (error) => ({
20011
+ message: error.message,
20012
+ exception: error,
20013
+ });
20014
+ const getStepOutput = (result) => {
20015
+ return result.type === "success" ? result.output : undefined;
20016
+ };
20017
+ const getOperationOutput = (result) => {
20018
+ return result.type === "success" ? result.output : undefined;
20019
+ };
20020
+
20021
+ class PipelineInstance {
20022
+ constructor(definition, input, context) {
20023
+ this.definition = definition;
20024
+ this.input = input;
20025
+ this.context = context;
20026
+ this.status = PipelineStatus.Initializing;
20027
+ }
20028
+ async execute() {
20029
+ this.status = PipelineStatus.Running;
20030
+ const executedSteps = [];
20031
+ const stepResults = [];
20032
+ let state = this.buildInitialStepState();
20033
+ for (const [i, step] of this.definition.steps.entries()) {
20034
+ executedSteps.push(step);
20035
+ const stepResult = await this.executeStep(step, i > 0 ? getStepOutput(stepResults[i - 1]) : this.input, state);
20036
+ stepResults.push(stepResult);
20037
+ state = this.buildNextStepState(state, stepResult);
20038
+ if (stepResult.type !== "success") {
20039
+ this.status = PipelineStatus.RollbackInProgress;
20040
+ await this.rollbackSteps(executedSteps, stepResults, state);
20041
+ return {
20042
+ type: "error",
20043
+ input: this.input,
20044
+ stepResults,
20045
+ };
20046
+ }
20047
+ }
20048
+ this.status = PipelineStatus.Completed;
20049
+ return {
20050
+ type: "success",
20051
+ input: this.input,
20052
+ output: getStepOutput(stepResults[stepResults.length - 1]),
20053
+ stepResults,
20054
+ };
20055
+ }
20056
+ buildInitialStepState() {
20057
+ return {
20058
+ stepInput: this.input,
20059
+ context: this.context,
20060
+ pipelineInput: this.input,
20061
+ };
20062
+ }
20063
+ buildNextStepState(state, stepResult) {
20064
+ return {
20065
+ stepInput: getStepOutput(stepResult),
20066
+ context: this.context,
20067
+ pipelineInput: this.input,
20068
+ previousStep: {
20069
+ stepInput: state.stepInput,
20070
+ stepOutput: getStepOutput(stepResult),
20071
+ context: this.context,
20072
+ pipelineInput: this.input,
20073
+ previousStep: state.previousStep,
20074
+ },
20075
+ };
20076
+ }
20077
+ async rollbackSteps(executedSteps, stepsResults, state) {
20078
+ const rollbackSteps = executedSteps
20079
+ .map((x, i) => ({
20080
+ step: x,
20081
+ result: stepsResults[i],
20082
+ }))
20083
+ .reverse();
20084
+ let rollbackState = state;
20085
+ for (const step of rollbackSteps) {
20086
+ await this.rollbackStep(step.step, step.result, rollbackState);
20087
+ rollbackState = state.previousStep;
20088
+ }
20089
+ }
20090
+ async rollbackStep(step, stepResults, state) {
20091
+ const completedOperations = stepResults.operationResults.map((x, i) => ({
20092
+ result: x,
20093
+ operation: step.operations[i],
20094
+ }));
20095
+ // .filter((x) => x.result.type === "success")
20096
+ const rollbackOperations = completedOperations.map((x) => this.rollbackOperations(x.operation, x.result.input, getOperationOutput(x.result), state));
20097
+ const rollbackResults = await Promise.all(rollbackOperations);
20098
+ const isRollbackError = rollbackResults.some((x) => x.type === "error");
20099
+ if (isRollbackError) {
20100
+ return {
20101
+ type: "error",
20102
+ };
20103
+ }
20104
+ return {
20105
+ type: "success",
20106
+ };
20107
+ }
20108
+ async validateStepPrecondition(step, input, state) {
20109
+ const preconditionOperations = step.operations
20110
+ .filter((x) => x.operation.precondition)
20111
+ .map((x) => x.operation.precondition(input, state));
20112
+ const preconditionResults = await Promise.all(preconditionOperations);
20113
+ return {
20114
+ hasValidPrecondition: preconditionResults.every((x) => x),
20115
+ };
20116
+ }
20117
+ async executeStep(step, input, state) {
20118
+ const preconditionResult = await this.validateStepPrecondition(step, input, state);
20119
+ if (!preconditionResult.hasValidPrecondition) {
20120
+ return {
20121
+ operationResults: [],
20122
+ type: "preconditionFailed",
20123
+ input,
20124
+ };
20125
+ }
20126
+ const stepOperations = step.operations.map((x) => this.executeOperation(x, input, state));
20127
+ const operationResults = await Promise.all(stepOperations);
20128
+ const isSuccess = operationResults.every((x) => x.type === "success");
20129
+ if (isSuccess) {
20130
+ const output = step.outputsReducer
20131
+ ? step.outputsReducer(operationResults.map((x) => getOperationOutput(x)))
20132
+ : operationResults.map((x) => getOperationOutput(x));
20133
+ return {
20134
+ type: "success",
20135
+ operationResults,
20136
+ input,
20137
+ output: output,
20138
+ };
20139
+ }
20140
+ return {
20141
+ type: "error",
20142
+ operationResults,
20143
+ input,
20144
+ };
20145
+ }
20146
+ async executeOperation(operation, input, state) {
20147
+ try {
20148
+ const operationResult = await operation.operation.action(input, state);
20149
+ return {
20150
+ type: "success",
20151
+ input,
20152
+ output: operationResult,
20153
+ };
20154
+ }
20155
+ catch (error) {
20156
+ return {
20157
+ type: "error",
20158
+ input,
20159
+ error: toPipelineOperationError(error),
20160
+ };
20161
+ }
20162
+ }
20163
+ async rollbackOperations(operation, operationInput, operationOutput, state) {
20164
+ if (!operation.rollbackOperations?.length) {
20165
+ return {
20166
+ type: "skipped",
20167
+ };
20168
+ }
20169
+ for (const rollbackOperation of operation.rollbackOperations) {
20170
+ const rollbackResult = await this.rollbackOperation(rollbackOperation, operationInput, operationOutput, state);
20171
+ if (rollbackResult.type === "error") {
20172
+ return {
20173
+ type: "error",
20174
+ error: rollbackResult.error,
20175
+ };
20176
+ }
20177
+ }
20178
+ return {
20179
+ type: "success",
20180
+ };
20181
+ }
20182
+ async rollbackOperation(rollbackOperation, operationInput, operationOutput, state) {
20183
+ try {
20184
+ await rollbackOperation.action(operationInput, operationOutput, state);
20185
+ return {
20186
+ type: "success",
20187
+ };
20188
+ }
20189
+ catch (error) {
20190
+ return {
20191
+ type: "error",
20192
+ error: toPipelineOperationError(error),
20193
+ };
20194
+ }
20195
+ }
20196
+ }
20197
+
20198
+ class PipelineController {
20199
+ async createInstance(definition, input, context) {
20200
+ return new PipelineInstance(definition, input, context);
20201
+ }
20202
+ }
20203
+
19774
20204
  var EntityManagerInitializer_1;
19775
20205
  let EntityManagerInitializer = EntityManagerInitializer_1 = class EntityManagerInitializer {
19776
20206
  constructor(discover, registry, eventEmitter) {
@@ -19792,6 +20222,7 @@ let EntityManagerInitializer = EntityManagerInitializer_1 = class EntityManagerI
19792
20222
  await this.registerAuthentication(staticProviders.authenticationProvider);
19793
20223
  this.logger.log("Entity manager authentication initialized 🔑");
19794
20224
  }
20225
+ await this.registerPipelinesServices();
19795
20226
  await this.registerEmailTemplates();
19796
20227
  await this.registerEmailProviders();
19797
20228
  await this.registerEventTrackingProviders();
@@ -19896,6 +20327,12 @@ let EntityManagerInitializer = EntityManagerInitializer_1 = class EntityManagerI
19896
20327
  .getEntitiesServicesLocator()
19897
20328
  .registerEmailTemplatesCollection(collection);
19898
20329
  }
20330
+ async registerPipelinesServices() {
20331
+ this.registry
20332
+ .getContainer()
20333
+ .getEntitiesServicesLocator()
20334
+ .registerPipelinesController(new PipelineController());
20335
+ }
19899
20336
  async initializeProviders(app, staticProviders) {
19900
20337
  app
19901
20338
  .get(ModulesContainerProvider)
@@ -19943,12 +20380,127 @@ const Processors = [EntityManagerInitializer];
19943
20380
 
19944
20381
  const Providers = [NestEventEmitter];
19945
20382
 
20383
+ class PipelineStepOperationOptionsBuilder {
20384
+ constructor(operation) {
20385
+ this.operation = operation;
20386
+ this.rollbackOperations = [];
20387
+ }
20388
+ withRollback(definition) {
20389
+ this.rollbackOperations.push(definition);
20390
+ return this;
20391
+ }
20392
+ build() {
20393
+ return {
20394
+ name: this.operation.name,
20395
+ operation: this.operation,
20396
+ rollbackOperations: this.rollbackOperations,
20397
+ };
20398
+ }
20399
+ }
20400
+ class PipelineStepOperationsBuilder {
20401
+ constructor() {
20402
+ this.operationBuilders = [];
20403
+ }
20404
+ addOperation(operation) {
20405
+ const operationBuilder = new PipelineStepOperationOptionsBuilder(operation);
20406
+ this.operationBuilders.push(operationBuilder);
20407
+ return operationBuilder;
20408
+ }
20409
+ buildOperations() {
20410
+ return this.operationBuilders.map((builder) => builder.build());
20411
+ }
20412
+ }
20413
+ class PipelineStepBuilder {
20414
+ constructor(previousSteps, currentStepOperationsBuilder) {
20415
+ this.previousSteps = previousSteps;
20416
+ this.currentStep = this.buildCurrentStep(currentStepOperationsBuilder);
20417
+ }
20418
+ addStep(builder) {
20419
+ return new PipelineStepBuilder(this.currentSteps, builder);
20420
+ }
20421
+ buildCurrentStep(currentStepOperationsBuilder) {
20422
+ const operationsBuilder = new PipelineStepOperationsBuilder();
20423
+ currentStepOperationsBuilder(operationsBuilder);
20424
+ return {
20425
+ name: `Step ${this.previousSteps.length + 1}`,
20426
+ operations: operationsBuilder.buildOperations(),
20427
+ // TODO: add support for multiple operation outputs
20428
+ outputsReducer: (outputs) => {
20429
+ if (outputs.length === 0) {
20430
+ throw new Error("Empty pipeline step found");
20431
+ }
20432
+ if (outputs.length !== 1) {
20433
+ throw new Error("Multiple outputs are not supported yet");
20434
+ }
20435
+ return outputs[0];
20436
+ },
20437
+ };
20438
+ }
20439
+ build() {
20440
+ return {
20441
+ steps: this.currentSteps,
20442
+ };
20443
+ }
20444
+ get currentSteps() {
20445
+ return [
20446
+ ...this.previousSteps,
20447
+ this.currentStep,
20448
+ ];
20449
+ }
20450
+ }
20451
+ class PipelineTemplateBuilder {
20452
+ addStep(builder) {
20453
+ return new PipelineStepBuilder([], builder);
20454
+ }
20455
+ }
20456
+
20457
+ let PipelinesBuilder = class PipelinesBuilder {
20458
+ constructor(registry) {
20459
+ this.registry = registry;
20460
+ }
20461
+ createTemplate() {
20462
+ return new PipelineTemplateBuilder();
20463
+ }
20464
+ };
20465
+ PipelinesBuilder = __decorate([
20466
+ Injectable(),
20467
+ __metadata("design:paramtypes", [EntityManagerRegistry])
20468
+ ], PipelinesBuilder);
20469
+
20470
+ let PipelinesRunner = class PipelinesRunner {
20471
+ constructor(registry) {
20472
+ this.registry = registry;
20473
+ }
20474
+ async invokePipeline(definition, data) {
20475
+ const instance = await this.controller.createInstance(definition, data.input, data.context);
20476
+ return await instance.execute();
20477
+ }
20478
+ get controller() {
20479
+ return this.registry
20480
+ .getContainer()
20481
+ .getEntitiesServicesLocator()
20482
+ .resolvePipelinesController();
20483
+ }
20484
+ };
20485
+ PipelinesRunner = __decorate([
20486
+ Injectable(),
20487
+ __metadata("design:paramtypes", [EntityManagerRegistry])
20488
+ ], PipelinesRunner);
20489
+
20490
+ const PipelineProviders = [PipelinesBuilder, PipelinesRunner];
20491
+
19946
20492
  let EntityManagerModule = class EntityManagerModule {
19947
20493
  };
19948
20494
  EntityManagerModule = __decorate([
19949
20495
  Module({
19950
20496
  imports: [CustomDiscoveryModule, EventEmitterModule],
19951
- providers: [...IoC, ...Providers, ...Processors, ...Services$1],
20497
+ providers: [
20498
+ ...IoC,
20499
+ ...Providers,
20500
+ ...Processors,
20501
+ ...Services$1,
20502
+ ...PipelineProviders,
20503
+ ],
19952
20504
  exports: [EntityManagerRegistry, ...Services$1],
19953
20505
  })
19954
20506
  ], EntityManagerModule);
@@ -20195,6 +20747,24 @@ class TypeOrmQueryBuilder extends QueryBuilderBase {
20195
20747
  super();
20196
20748
  this.services = services;
20197
20749
  }
20750
+ async exists(filters, context) {
20751
+ return (await this.count(filters, context)) > 0;
20752
+ }
20753
+ async count(filters, context) {
20754
+ const request = {
20755
+ filters,
20756
+ };
20757
+ return await this.countQueryResults(request, context);
20758
+ }
20759
+ async delete(filters, context) {
20760
+ const request = {
20761
+ filters,
20762
+ };
20763
+ return await this.getRepository().deleteBy({
20764
+ ...(context ? this.buildContextFilter(context) : {}),
20765
+ ...this.buildWhereClause(request),
20766
+ });
20767
+ }
20198
20768
  async search(request, context) {
20199
20769
  // todo: execute inside read transaction in order to perform the three queries on the same dataset
20200
20770
  const queryResults = await this.countQueryResults(request, context);
@@ -20312,7 +20882,10 @@ class TypeOrmRepository {
20312
20882
  });
20313
20883
  }
20314
20884
  async deleteBy(condition) {
20315
- await this.innerRepository.delete(condition);
20885
+ const result = await this.innerRepository.delete(condition);
20886
+ return {
20887
+ deletedCount: result.affected,
20888
+ };
20316
20889
  }
20317
20890
  async create(entity) {
20318
20891
  const createResult = await this.innerRepository.insert(entity);
@@ -20395,19 +20968,18 @@ class NestTypeOrmEntitySeeder extends TypeOrmEntitySeeder {
20395
20968
 
20396
20969
  class AppExceptionsFilterBase {
20397
20970
  catch(exception, host) {
20398
- if (exception instanceof HttpException) {
20399
- return;
20400
- }
20401
20971
  const ctx = host.switchToHttp();
20402
20972
  const response = ctx.getResponse();
20403
20973
  const request = ctx.getRequest();
20404
- this.logError({
20405
- exception,
20406
- request,
20407
- response,
20408
- }).catch((error) => {
20409
- Log.getLogger("AllExceptionsFilter").error("Error logging failed", error);
20410
- });
20974
+ if (!(exception instanceof HttpException)) {
20975
+ this.logError({
20976
+ exception,
20977
+ request,
20978
+ response,
20979
+ }).catch((error) => {
20980
+ Log.getLogger("AllExceptionsFilter").error("Error logging failed", error);
20981
+ });
20982
+ }
20411
20983
  const status = this.getErrorStatusCode(exception);
20412
20984
  response.status(status).json({
20413
20985
  statusCode: status,
@@ -25647,5 +26219,5 @@ SendgridEmailModule = SendgridEmailModule_1 = __decorate([
25647
26219
  })
25648
26220
  ], SendgridEmailModule);
25649
26221
 
25650
- export { AUTHENTICATION_EVENTS_NAMESPACE, AppExceptionsFilterBase, AppHashingService, AppInMemorySettings, AppSessionMiddleware, AppSessionService, AuthGuard, Authenticated, AuthenticationEmailTemplates, AuthenticationError, AuthenticationEvents, AuthenticationExtensionSymbols, AuthenticationModule, AuthenticationService, AwsEmailModule, AwsSesEmailTemplate, BooleanFacet, BooleanFacetItem, EmailService, EntityManagerConfigurationError, EntityManagerException, EntityManagerInitializer, EntityManagerModule, EntityManagerRegistry, EntityManagerService, EntityManagerSymbols, EntityManagerUnauthorizedException, EntityNotFoundException, EntityOperationType, EntityOperationUnauthorizedException, EntitySeeder, EventsService, InvalidCredentialsError, MemberOf, ModulesContainerProvider, MultiTenancyModule, MultipleEntitiesFoundException, NestEntityActions, NestEntityAuthorizationMiddleware, NestEntityManager, NestTypeOrmEntitySeeder, NestTypeOrmQueryBuilder, NestTypeOrmRepository, NumericFacet, NumericFacetItem, OperationTokenMismatchError, PLATFORM_EVENT_NAMESPACE, PlatformEvents, Public, QueryBuilderBase, ReplicationMode, Roles, SendgridEmailModule, SendgridEmailTemplate, SortDirection, StringFacet, StringFacetItem, TrackingService, UserRegistrationError, WpAppInitializer, WpAwsSesEmailTemplate, WpEmailTemplate, WpEntity, WpEntityActions, WpEntityAdapter, WpEntityAuthMiddleware, WpEntityConnector, WpEntityConverter, WpEntityManager, WpEntityQueryBuilder, WpEntityRepository, WpEntitySeeder, WpEventsTracker, WpRolesService, WpSendgridEmailTemplate, WpUserRolesService, WpUserService, getLocalizedText, newUuid, renderHandlebarsTemplate };
26222
+ export { AUTHENTICATION_EVENTS_NAMESPACE, AppExceptionsFilterBase, AppHashingService, AppInMemorySettings, AppSessionMiddleware, AppSessionService, AuthGuard, Authenticated, AuthenticationEmailTemplates, AuthenticationError, AuthenticationEvents, AuthenticationExtensionSymbols, AuthenticationModule, AuthenticationService, AwsEmailModule, AwsSesEmailTemplate, BooleanFacet, BooleanFacetItem, EmailService, EntityManagerConfigurationError, EntityManagerException, EntityManagerInitializer, EntityManagerModule, EntityManagerRegistry, EntityManagerService, EntityManagerSymbols, EntityManagerUnauthorizedException, EntityNotFoundException, EntityOperationType, EntityOperationUnauthorizedException, EntitySeeder, EventsService, InvalidCredentialsError, MemberOf, ModulesContainerProvider, MultiTenancyModule, MultipleEntitiesFoundException, NestEntityActions, NestEntityAuthorizationMiddleware, NestEntityManager, NestTypeOrmEntitySeeder, NestTypeOrmQueryBuilder, NestTypeOrmRepository, NumericFacet, NumericFacetItem, OperationTokenMismatchError, PLATFORM_EVENT_NAMESPACE, PipelineController, PipelineStatus, PipelinesBuilder, PipelinesRunner, PlatformEvents, Public, QueryBuilderBase, ReplicationMode, Roles, SendgridEmailModule, SendgridEmailTemplate, SortDirection, StringFacet, StringFacetItem, TrackingService, UserRegistrationError, WpAppInitializer, WpAwsSesEmailTemplate, WpEmailTemplate, WpEntity, WpEntityActions, WpEntityAdapter, WpEntityAuthMiddleware, WpEntityConnector, WpEntityConverter, WpEntityManager, WpEntityQueryBuilder, WpEntityRepository, WpEntitySeeder, WpEventsTracker, WpPipeline, WpRolesService, WpSendgridEmailTemplate, WpUserRolesService, WpUserService, getLocalizedText, newUuid, renderHandlebarsTemplate };
25651
26223
  //# sourceMappingURL=index.js.map