@pristine-ts/core 0.0.174 → 0.0.178

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 (212) hide show
  1. package/dist/lib/cjs/core.module.js +7 -4
  2. package/dist/lib/cjs/core.module.js.map +1 -1
  3. package/dist/lib/cjs/dispatchers/dispatchers.js +14 -0
  4. package/dist/lib/cjs/dispatchers/dispatchers.js.map +1 -0
  5. package/dist/lib/cjs/dispatchers/event.dispatcher.js +108 -0
  6. package/dist/lib/cjs/dispatchers/event.dispatcher.js.map +1 -0
  7. package/dist/lib/cjs/enums/enums.js +14 -0
  8. package/dist/lib/cjs/enums/enums.js.map +1 -0
  9. package/dist/lib/cjs/enums/execution-context-keyname.enum.js +11 -0
  10. package/dist/lib/cjs/enums/execution-context-keyname.enum.js.map +1 -0
  11. package/dist/lib/cjs/errors/error-response-interception-execution.error.js.map +1 -1
  12. package/dist/lib/cjs/errors/errors.js +6 -4
  13. package/dist/lib/cjs/errors/errors.js.map +1 -1
  14. package/dist/lib/cjs/errors/event-dispatcher-no-event-handlers.error.js +20 -0
  15. package/dist/lib/cjs/errors/event-dispatcher-no-event-handlers.error.js.map +1 -0
  16. package/dist/lib/cjs/errors/event-dispatching.error.js +21 -0
  17. package/dist/lib/cjs/errors/event-dispatching.error.js.map +1 -0
  18. package/dist/lib/cjs/errors/event-mapping.error.js +23 -0
  19. package/dist/lib/cjs/errors/event-mapping.error.js.map +1 -0
  20. package/dist/lib/cjs/errors/event-post-mapping-interception.error.js +22 -0
  21. package/dist/lib/cjs/errors/event-post-mapping-interception.error.js.map +1 -0
  22. package/dist/lib/cjs/errors/event-post-response-mapping-interception.error.js +22 -0
  23. package/dist/lib/cjs/errors/event-post-response-mapping-interception.error.js.map +1 -0
  24. package/dist/lib/cjs/errors/event-pre-mapping-interception.error.js +23 -0
  25. package/dist/lib/cjs/errors/event-pre-mapping-interception.error.js.map +1 -0
  26. package/dist/lib/cjs/errors/event-pre-response-mapping-interception.error.js +22 -0
  27. package/dist/lib/cjs/errors/event-pre-response-mapping-interception.error.js.map +1 -0
  28. package/dist/lib/cjs/handlers/default-event.handler.js +28 -0
  29. package/dist/lib/cjs/handlers/default-event.handler.js.map +1 -0
  30. package/dist/lib/cjs/handlers/handlers.js +14 -0
  31. package/dist/lib/cjs/handlers/handlers.js.map +1 -0
  32. package/dist/lib/cjs/interceptors/event-logging.interceptor.js +21 -12
  33. package/dist/lib/cjs/interceptors/event-logging.interceptor.js.map +1 -1
  34. package/dist/lib/cjs/interceptors/interceptors.js +0 -2
  35. package/dist/lib/cjs/interceptors/interceptors.js.map +1 -1
  36. package/dist/lib/cjs/interfaces/{request-interceptor.interface.js → event-dispatcher.interface.js} +1 -1
  37. package/dist/lib/cjs/interfaces/event-dispatcher.interface.js.map +1 -0
  38. package/dist/lib/cjs/interfaces/{response-interceptor.interface.js → event-handler.interface.js} +1 -1
  39. package/dist/lib/cjs/interfaces/event-handler.interface.js.map +1 -0
  40. package/dist/lib/cjs/interfaces/{error-response-interceptor.interface.js → event-listener.interface.js} +1 -1
  41. package/dist/lib/cjs/interfaces/event-listener.interface.js.map +1 -0
  42. package/dist/lib/cjs/interfaces/event-mapper.interface.js +3 -0
  43. package/dist/lib/cjs/interfaces/event-mapper.interface.js.map +1 -0
  44. package/dist/lib/cjs/interfaces/events-execution-options.interface.js +3 -0
  45. package/dist/lib/cjs/interfaces/events-execution-options.interface.js.map +1 -0
  46. package/dist/lib/cjs/interfaces/execution-context.interface.js +3 -0
  47. package/dist/lib/cjs/interfaces/execution-context.interface.js.map +1 -0
  48. package/dist/lib/cjs/interfaces/interfaces.js +6 -3
  49. package/dist/lib/cjs/interfaces/interfaces.js.map +1 -1
  50. package/dist/lib/cjs/kernel.js +31 -393
  51. package/dist/lib/cjs/kernel.js.map +1 -1
  52. package/dist/lib/cjs/listeners/default-event.listener.js +27 -0
  53. package/dist/lib/cjs/listeners/default-event.listener.js.map +1 -0
  54. package/dist/lib/cjs/listeners/listeners.js +14 -0
  55. package/dist/lib/cjs/listeners/listeners.js.map +1 -0
  56. package/dist/lib/cjs/mappers/default-event.mapper.js +38 -0
  57. package/dist/lib/cjs/mappers/default-event.mapper.js.map +1 -0
  58. package/dist/lib/cjs/mappers/mappers.js +14 -0
  59. package/dist/lib/cjs/mappers/mappers.js.map +1 -0
  60. package/dist/lib/cjs/models/event.js +15 -0
  61. package/dist/lib/cjs/models/event.js.map +1 -0
  62. package/dist/lib/cjs/models/event.response.js +11 -0
  63. package/dist/lib/cjs/models/event.response.js.map +1 -0
  64. package/dist/lib/cjs/models/models.js +15 -0
  65. package/dist/lib/cjs/models/models.js.map +1 -0
  66. package/dist/lib/cjs/pipelines/event.pipeline.js +282 -0
  67. package/dist/lib/cjs/pipelines/event.pipeline.js.map +1 -0
  68. package/dist/lib/cjs/pipelines/pipelines.js +14 -0
  69. package/dist/lib/cjs/pipelines/pipelines.js.map +1 -0
  70. package/dist/lib/esm/core.module.js +7 -4
  71. package/dist/lib/esm/core.module.js.map +1 -1
  72. package/dist/lib/esm/dispatchers/dispatchers.js +2 -0
  73. package/dist/lib/esm/dispatchers/dispatchers.js.map +1 -0
  74. package/dist/lib/esm/dispatchers/event.dispatcher.js +105 -0
  75. package/dist/lib/esm/dispatchers/event.dispatcher.js.map +1 -0
  76. package/dist/lib/esm/enums/enums.js +2 -0
  77. package/dist/lib/esm/enums/enums.js.map +1 -0
  78. package/dist/lib/esm/enums/execution-context-keyname.enum.js +8 -0
  79. package/dist/lib/esm/enums/execution-context-keyname.enum.js.map +1 -0
  80. package/dist/lib/esm/errors/error-response-interception-execution.error.js.map +1 -1
  81. package/dist/lib/esm/errors/errors.js +6 -4
  82. package/dist/lib/esm/errors/errors.js.map +1 -1
  83. package/dist/lib/esm/errors/event-dispatcher-no-event-handlers.error.js +16 -0
  84. package/dist/lib/esm/errors/event-dispatcher-no-event-handlers.error.js.map +1 -0
  85. package/dist/lib/esm/errors/event-dispatching.error.js +17 -0
  86. package/dist/lib/esm/errors/event-dispatching.error.js.map +1 -0
  87. package/dist/lib/esm/errors/event-mapping.error.js +19 -0
  88. package/dist/lib/esm/errors/event-mapping.error.js.map +1 -0
  89. package/dist/lib/esm/errors/event-post-mapping-interception.error.js +18 -0
  90. package/dist/lib/esm/errors/event-post-mapping-interception.error.js.map +1 -0
  91. package/dist/lib/esm/errors/event-post-response-mapping-interception.error.js +18 -0
  92. package/dist/lib/esm/errors/event-post-response-mapping-interception.error.js.map +1 -0
  93. package/dist/lib/esm/errors/event-pre-mapping-interception.error.js +19 -0
  94. package/dist/lib/esm/errors/event-pre-mapping-interception.error.js.map +1 -0
  95. package/dist/lib/esm/errors/event-pre-response-mapping-interception.error.js +18 -0
  96. package/dist/lib/esm/errors/event-pre-response-mapping-interception.error.js.map +1 -0
  97. package/dist/lib/esm/handlers/default-event.handler.js +25 -0
  98. package/dist/lib/esm/handlers/default-event.handler.js.map +1 -0
  99. package/dist/lib/esm/handlers/handlers.js +2 -0
  100. package/dist/lib/esm/handlers/handlers.js.map +1 -0
  101. package/dist/lib/esm/interceptors/event-logging.interceptor.js +21 -12
  102. package/dist/lib/esm/interceptors/event-logging.interceptor.js.map +1 -1
  103. package/dist/lib/esm/interceptors/interceptors.js +0 -2
  104. package/dist/lib/esm/interceptors/interceptors.js.map +1 -1
  105. package/dist/lib/esm/interfaces/event-dispatcher.interface.js +2 -0
  106. package/dist/lib/esm/interfaces/event-dispatcher.interface.js.map +1 -0
  107. package/dist/lib/esm/interfaces/event-handler.interface.js +2 -0
  108. package/dist/lib/esm/interfaces/event-handler.interface.js.map +1 -0
  109. package/dist/lib/esm/interfaces/event-listener.interface.js +2 -0
  110. package/dist/lib/esm/interfaces/event-listener.interface.js.map +1 -0
  111. package/dist/lib/esm/interfaces/event-mapper.interface.js +2 -0
  112. package/dist/lib/esm/interfaces/event-mapper.interface.js.map +1 -0
  113. package/dist/lib/esm/interfaces/events-execution-options.interface.js +2 -0
  114. package/dist/lib/esm/interfaces/events-execution-options.interface.js.map +1 -0
  115. package/dist/lib/esm/interfaces/execution-context.interface.js +2 -0
  116. package/dist/lib/esm/interfaces/execution-context.interface.js.map +1 -0
  117. package/dist/lib/esm/interfaces/interfaces.js +6 -3
  118. package/dist/lib/esm/interfaces/interfaces.js.map +1 -1
  119. package/dist/lib/esm/kernel.js +32 -394
  120. package/dist/lib/esm/kernel.js.map +1 -1
  121. package/dist/lib/esm/listeners/default-event.listener.js +24 -0
  122. package/dist/lib/esm/listeners/default-event.listener.js.map +1 -0
  123. package/dist/lib/esm/listeners/listeners.js +2 -0
  124. package/dist/lib/esm/listeners/listeners.js.map +1 -0
  125. package/dist/lib/esm/mappers/default-event.mapper.js +35 -0
  126. package/dist/lib/esm/mappers/default-event.mapper.js.map +1 -0
  127. package/dist/lib/esm/mappers/mappers.js +2 -0
  128. package/dist/lib/esm/mappers/mappers.js.map +1 -0
  129. package/dist/lib/esm/models/event.js +11 -0
  130. package/dist/lib/esm/models/event.js.map +1 -0
  131. package/dist/lib/esm/models/event.response.js +7 -0
  132. package/dist/lib/esm/models/event.response.js.map +1 -0
  133. package/dist/lib/esm/models/models.js +3 -0
  134. package/dist/lib/esm/models/models.js.map +1 -0
  135. package/dist/lib/esm/pipelines/event.pipeline.js +279 -0
  136. package/dist/lib/esm/pipelines/event.pipeline.js.map +1 -0
  137. package/dist/lib/esm/pipelines/pipelines.js +2 -0
  138. package/dist/lib/esm/pipelines/pipelines.js.map +1 -0
  139. package/dist/types/core.module.d.ts +7 -0
  140. package/dist/types/dispatchers/dispatchers.d.ts +1 -0
  141. package/dist/types/dispatchers/event.dispatcher.d.ts +29 -0
  142. package/dist/types/enums/enums.d.ts +1 -0
  143. package/dist/types/enums/execution-context-keyname.enum.d.ts +6 -0
  144. package/dist/types/errors/error-response-interception-execution.error.d.ts +3 -2
  145. package/dist/types/errors/errors.d.ts +6 -4
  146. package/dist/types/errors/event-dispatcher-no-event-handlers.error.d.ts +8 -0
  147. package/dist/types/errors/event-dispatching.error.d.ts +8 -0
  148. package/dist/types/errors/event-mapping.error.d.ts +8 -0
  149. package/dist/types/errors/event-post-mapping-interception.error.d.ts +8 -0
  150. package/dist/types/errors/event-post-response-mapping-interception.error.d.ts +7 -0
  151. package/dist/types/errors/event-pre-mapping-interception.error.d.ts +8 -0
  152. package/dist/types/errors/event-pre-response-mapping-interception.error.d.ts +8 -0
  153. package/dist/types/handlers/default-event.handler.d.ts +7 -0
  154. package/dist/types/handlers/handlers.d.ts +1 -0
  155. package/dist/types/interceptors/event-logging.interceptor.d.ts +7 -11
  156. package/dist/types/interceptors/interceptors.d.ts +0 -2
  157. package/dist/types/interfaces/event-dispatcher.interface.d.ts +5 -0
  158. package/dist/types/interfaces/event-handler.interface.d.ts +23 -0
  159. package/dist/types/interfaces/event-interceptor.interface.d.ts +22 -3
  160. package/dist/types/interfaces/event-listener.interface.d.ts +17 -0
  161. package/dist/types/interfaces/event-mapper.interface.d.ts +9 -0
  162. package/dist/types/interfaces/events-execution-options.interface.d.ts +5 -0
  163. package/dist/types/interfaces/execution-context.interface.d.ts +5 -0
  164. package/dist/types/interfaces/interfaces.d.ts +6 -3
  165. package/dist/types/kernel.d.ts +11 -83
  166. package/dist/types/listeners/default-event.listener.d.ts +6 -0
  167. package/dist/types/listeners/listeners.d.ts +1 -0
  168. package/dist/types/mappers/default-event.mapper.d.ts +13 -0
  169. package/dist/types/mappers/mappers.d.ts +1 -0
  170. package/dist/types/models/event.d.ts +9 -0
  171. package/dist/types/models/event.response.d.ts +6 -0
  172. package/dist/types/models/models.d.ts +2 -0
  173. package/dist/types/pipelines/event.pipeline.d.ts +61 -0
  174. package/dist/types/pipelines/pipelines.d.ts +1 -0
  175. package/package.json +7 -10
  176. package/dist/lib/cjs/errors/request-handling.error.js +0 -21
  177. package/dist/lib/cjs/errors/request-handling.error.js.map +0 -1
  178. package/dist/lib/cjs/errors/request-interception-execution.error.js +0 -22
  179. package/dist/lib/cjs/errors/request-interception-execution.error.js.map +0 -1
  180. package/dist/lib/cjs/errors/response-interception-execution.error.js +0 -23
  181. package/dist/lib/cjs/errors/response-interception-execution.error.js.map +0 -1
  182. package/dist/lib/cjs/interceptors/request-body-converter.interceptor.js +0 -89
  183. package/dist/lib/cjs/interceptors/request-body-converter.interceptor.js.map +0 -1
  184. package/dist/lib/cjs/interceptors/request-logging.interceptor.js +0 -83
  185. package/dist/lib/cjs/interceptors/request-logging.interceptor.js.map +0 -1
  186. package/dist/lib/cjs/interfaces/error-response-interceptor.interface.js.map +0 -1
  187. package/dist/lib/cjs/interfaces/request-interceptor.interface.js.map +0 -1
  188. package/dist/lib/cjs/interfaces/response-interceptor.interface.js.map +0 -1
  189. package/dist/lib/esm/errors/request-handling.error.js +0 -17
  190. package/dist/lib/esm/errors/request-handling.error.js.map +0 -1
  191. package/dist/lib/esm/errors/request-interception-execution.error.js +0 -18
  192. package/dist/lib/esm/errors/request-interception-execution.error.js.map +0 -1
  193. package/dist/lib/esm/errors/response-interception-execution.error.js +0 -19
  194. package/dist/lib/esm/errors/response-interception-execution.error.js.map +0 -1
  195. package/dist/lib/esm/interceptors/request-body-converter.interceptor.js +0 -86
  196. package/dist/lib/esm/interceptors/request-body-converter.interceptor.js.map +0 -1
  197. package/dist/lib/esm/interceptors/request-logging.interceptor.js +0 -80
  198. package/dist/lib/esm/interceptors/request-logging.interceptor.js.map +0 -1
  199. package/dist/lib/esm/interfaces/error-response-interceptor.interface.js +0 -2
  200. package/dist/lib/esm/interfaces/error-response-interceptor.interface.js.map +0 -1
  201. package/dist/lib/esm/interfaces/request-interceptor.interface.js +0 -2
  202. package/dist/lib/esm/interfaces/request-interceptor.interface.js.map +0 -1
  203. package/dist/lib/esm/interfaces/response-interceptor.interface.js +0 -2
  204. package/dist/lib/esm/interfaces/response-interceptor.interface.js.map +0 -1
  205. package/dist/types/errors/request-handling.error.d.ts +0 -8
  206. package/dist/types/errors/request-interception-execution.error.d.ts +0 -8
  207. package/dist/types/errors/response-interception-execution.error.d.ts +0 -8
  208. package/dist/types/interceptors/request-body-converter.interceptor.d.ts +0 -9
  209. package/dist/types/interceptors/request-logging.interceptor.d.ts +0 -27
  210. package/dist/types/interfaces/error-response-interceptor.interface.d.ts +0 -21
  211. package/dist/types/interfaces/request-interceptor.interface.d.ts +0 -17
  212. package/dist/types/interfaces/response-interceptor.interface.d.ts +0 -20
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event.response.js","sourceRoot":"","sources":["../../../../src/models/event.response.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,aAAa;IACtB,YAA4B,KAA0B,EAAkB,QAA8B;QAA1E,UAAK,GAAL,KAAK,CAAqB;QAAkB,aAAQ,GAAR,QAAQ,CAAsB;IACtG,CAAC;CACJ"}
@@ -0,0 +1,3 @@
1
+ export * from "./event";
2
+ export * from "./event.response";
3
+ //# sourceMappingURL=models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../../../src/models/models.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,279 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
11
+ return function (target, key) { decorator(target, key, paramIndex); }
12
+ };
13
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
+ return new (P || (P = Promise))(function (resolve, reject) {
16
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
17
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
18
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
19
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
20
+ });
21
+ };
22
+ import { injectable, injectAll, inject } from "tsyringe";
23
+ import { Event } from "../models/event";
24
+ import { ServiceDefinitionTagEnum } from "@pristine-ts/common";
25
+ import { EventMappingError } from "../errors/event-mapping.error";
26
+ import { EventPreMappingInterceptionError } from "../errors/event-pre-mapping-interception.error";
27
+ import { EventPostMappingInterceptionError } from "../errors/event-post-mapping-interception.error";
28
+ import { EventDispatchingError } from "../errors/event-dispatching.error";
29
+ import { EventPreResponseMappingInterceptionError } from "../errors/event-pre-response-mapping-interception.error";
30
+ import { EventPostResponseMappingInterceptionError } from "../errors/event-post-response-mapping-interception.error";
31
+ import { SpanKeynameEnum } from "@pristine-ts/telemetry";
32
+ let EventPipeline = class EventPipeline {
33
+ constructor(eventInterceptors, eventMappers, logHandler, tracingManager) {
34
+ this.eventInterceptors = eventInterceptors;
35
+ this.eventMappers = eventMappers;
36
+ this.logHandler = logHandler;
37
+ this.tracingManager = tracingManager;
38
+ }
39
+ /**
40
+ * This method calls the interceptors that are to be executed just before the EventMappers are executed. It allows
41
+ * for changing the raw event coming directly into the kernel.
42
+ *
43
+ * @param event
44
+ * @param executionContext
45
+ * @private
46
+ */
47
+ preMappingIntercept(event, executionContext) {
48
+ var _a, _b;
49
+ return __awaiter(this, void 0, void 0, function* () {
50
+ let interceptedEvent = event;
51
+ const span = this.tracingManager.startSpan(SpanKeynameEnum.EventPreMappingInterception);
52
+ for (const eventInterceptor of this.eventInterceptors) {
53
+ try {
54
+ interceptedEvent = (_b = yield ((_a = eventInterceptor.preMappingIntercept) === null || _a === void 0 ? void 0 : _a.call(eventInterceptor, interceptedEvent, executionContext))) !== null && _b !== void 0 ? _b : interceptedEvent;
55
+ }
56
+ catch (error) {
57
+ throw new EventPreMappingInterceptionError("There was an error while executing the PreMapping Event interceptors", error, eventInterceptor.constructor.name, event, executionContext);
58
+ }
59
+ }
60
+ span.end();
61
+ return interceptedEvent;
62
+ });
63
+ }
64
+ /**
65
+ * This method calls the interceptors that are executed just after the EventMappers have mapped the raw event into
66
+ * an Event object.
67
+ *
68
+ * @param event
69
+ * @private
70
+ */
71
+ postMappingIntercept(event) {
72
+ var _a, _b;
73
+ return __awaiter(this, void 0, void 0, function* () {
74
+ let interceptedEvent = event;
75
+ const span = this.tracingManager.startSpan(SpanKeynameEnum.EventPostMappingInterception);
76
+ for (const eventInterceptor of this.eventInterceptors) {
77
+ try {
78
+ interceptedEvent = (_b = yield ((_a = eventInterceptor.postMappingIntercept) === null || _a === void 0 ? void 0 : _a.call(eventInterceptor, interceptedEvent))) !== null && _b !== void 0 ? _b : interceptedEvent;
79
+ }
80
+ catch (error) {
81
+ throw new EventPostMappingInterceptionError("There was an error while executing the PostMapping Event interceptors", error, eventInterceptor.constructor.name, event);
82
+ }
83
+ }
84
+ span.end();
85
+ return interceptedEvent;
86
+ });
87
+ }
88
+ /**
89
+ * This method calls the interceptors that are to be executed just after the EventResponse has been returned from
90
+ * the EventDispatcher but before it is reverse mapped by the EventMappers.
91
+ *
92
+ * @param eventResponse
93
+ * @private
94
+ */
95
+ preResponseMappingIntercept(eventResponse) {
96
+ var _a, _b;
97
+ return __awaiter(this, void 0, void 0, function* () {
98
+ let interceptedEventResponse = eventResponse;
99
+ const span = this.tracingManager.startSpan(SpanKeynameEnum.EventPreResponseMappingInterception);
100
+ for (const eventInterceptor of this.eventInterceptors) {
101
+ try {
102
+ interceptedEventResponse = (_b = yield ((_a = eventInterceptor.preResponseMappingIntercept) === null || _a === void 0 ? void 0 : _a.call(eventInterceptor, interceptedEventResponse))) !== null && _b !== void 0 ? _b : interceptedEventResponse;
103
+ }
104
+ catch (error) {
105
+ throw new EventPreResponseMappingInterceptionError("There was an error while executing the PreResponseMapping Event interceptors", error, eventInterceptor.constructor.name, eventResponse);
106
+ }
107
+ }
108
+ span.end();
109
+ return interceptedEventResponse;
110
+ });
111
+ }
112
+ /**
113
+ * This method calls the interceptors that are executed after the EventResponse object has been mapped into a simple
114
+ * object.
115
+ *
116
+ * @param eventResponse The event response object to be returned from the handle method in the kernel.
117
+ * @private
118
+ */
119
+ postResponseMappingIntercept(eventResponse) {
120
+ var _a, _b;
121
+ return __awaiter(this, void 0, void 0, function* () {
122
+ let interceptedEventResponse = eventResponse;
123
+ const span = this.tracingManager.startSpan(SpanKeynameEnum.EventPostResponseMappingInterception);
124
+ for (const eventInterceptor of this.eventInterceptors) {
125
+ try {
126
+ interceptedEventResponse = (_b = yield ((_a = eventInterceptor.postResponseMappingIntercept) === null || _a === void 0 ? void 0 : _a.call(eventInterceptor, interceptedEventResponse))) !== null && _b !== void 0 ? _b : interceptedEventResponse;
127
+ }
128
+ catch (error) {
129
+ throw new EventPostResponseMappingInterceptionError("There was an error while executing the PostResponseMapping Event interceptors", error, eventInterceptor.constructor.name, eventResponse);
130
+ }
131
+ }
132
+ span.end();
133
+ return interceptedEventResponse;
134
+ });
135
+ }
136
+ /**
137
+ * This method executes the postMappingInterceptors and then dispatches the Event by using the EventDispatcher.
138
+ *
139
+ * @param event This is the event that must be dispatched.
140
+ * @param eventDispatcher This is the eventDispatcher instance that will dispatch the Event.
141
+ * @private
142
+ */
143
+ executeEvent(event, eventDispatcher) {
144
+ return __awaiter(this, void 0, void 0, function* () {
145
+ // 1 - Run the post mapped interceptors on every single event before they get executed.
146
+ let interceptedEvent = yield this.postMappingIntercept(event);
147
+ try {
148
+ const eventExecutionSpan = this.tracingManager.startSpan(SpanKeynameEnum.EventExecution);
149
+ // 2 - Call the EventDispatcher and retrieve the Event Response
150
+ const response = yield eventDispatcher.dispatch(interceptedEvent);
151
+ eventExecutionSpan.end();
152
+ return response;
153
+ }
154
+ catch (error) {
155
+ this.logHandler.error("There was an error while dispatching the event", {
156
+ error,
157
+ interceptedEvent,
158
+ });
159
+ throw new EventDispatchingError("There was an error while dispatching the event", error, interceptedEvent);
160
+ }
161
+ });
162
+ }
163
+ /**
164
+ *
165
+ * @param event
166
+ * @param executionContext
167
+ * @param container
168
+ */
169
+ execute(event, executionContext, container) {
170
+ return __awaiter(this, void 0, void 0, function* () {
171
+ const eventExecutions = [];
172
+ // If the event passed is already properly typed, we simply execute it, without mapping and without calling the pre-mapping interceptors
173
+ if (event instanceof Event) {
174
+ eventExecutions.push({
175
+ events: [event],
176
+ executionOrder: "sequential",
177
+ });
178
+ }
179
+ else {
180
+ // 1- We have the raw event, we start by executing the PreMapping Interceptors
181
+ const interceptedEvent = yield this.preMappingIntercept(event, executionContext);
182
+ // 2- With the intercepted raw event, run the Events Mapping to get all the Events and the EventsExecutionOptions.
183
+ // For each event mapper that supports the event, we batch the executions for each mapper. So it's possible to execute the same
184
+ // event twice. This is up to the EventMappers to properly identify when they map or don't map an event. Pristine
185
+ // isn't responsible to determine if two events are executed twice, so be careful.
186
+ let numberOfEventMappers = 0;
187
+ try {
188
+ const span = this.tracingManager.startSpan(SpanKeynameEnum.EventMapping);
189
+ this.eventMappers.forEach(eventMapper => {
190
+ if (eventMapper.supportsMapping(interceptedEvent, executionContext)) {
191
+ eventExecutions.push(eventMapper.map(interceptedEvent, executionContext));
192
+ numberOfEventMappers++;
193
+ }
194
+ });
195
+ span.end();
196
+ }
197
+ catch (error) {
198
+ throw new EventMappingError("There was an error mapping the event into an Event object", event, interceptedEvent, executionContext, error);
199
+ }
200
+ if (numberOfEventMappers === 0) {
201
+ throw new EventMappingError("There are no Event Mappers that support the event", event, interceptedEvent, executionContext);
202
+ }
203
+ if (eventExecutions.length === 0 || eventExecutions.reduce((agg, eventExecution) => {
204
+ return agg + eventExecution.events.length;
205
+ }, 0) === 0) {
206
+ throw new EventMappingError("There are no events to execute.", event, interceptedEvent, executionContext);
207
+ }
208
+ }
209
+ const eventsExecutionPromises = [];
210
+ // 3- Loop over the EventExecutionOptions array and start executing the events
211
+ eventExecutions.forEach(eventExecutionOptions => {
212
+ switch (eventExecutionOptions.executionOrder) {
213
+ case 'sequential':
214
+ eventsExecutionPromises.push(new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
215
+ // await all events and then resolve.
216
+ const eventResponses = [];
217
+ for (const event of eventExecutionOptions.events) {
218
+ const childContainer = container.createChildContainer();
219
+ // It's important to register the CurrentChildContainer since even though it's not 100% recommended,
220
+ // some handlers might want to retrieve the container. For example, the RequestHandler needs this mechanism
221
+ // to dynamically load the controllers and not load all the containers all the time.
222
+ childContainer.register(ServiceDefinitionTagEnum.CurrentChildContainer, {
223
+ useValue: childContainer,
224
+ });
225
+ const eventDispatcher = childContainer.resolve("EventDispatcherInterface");
226
+ try {
227
+ eventResponses.push(yield this.executeEvent(event, eventDispatcher));
228
+ }
229
+ catch (error) {
230
+ return reject(error);
231
+ }
232
+ }
233
+ return resolve(eventResponses);
234
+ })));
235
+ break;
236
+ case 'parallel':
237
+ for (const event of eventExecutionOptions.events) {
238
+ eventsExecutionPromises.push(new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
239
+ const childContainer = container.createChildContainer();
240
+ // It's important to register the CurrentChildContainer since even though it's not 100% recommended,
241
+ // some handlers might want to retrieve the container. For example, the RequestHandler needs this mechanism
242
+ // to dynamically load the controllers and not load all the containers all the time.
243
+ childContainer.register(ServiceDefinitionTagEnum.CurrentChildContainer, {
244
+ useValue: childContainer,
245
+ });
246
+ const eventDispatcher = childContainer.resolve("EventDispatcherInterface");
247
+ this.executeEvent(event, eventDispatcher).then(eventResponse => resolve(eventResponse)).catch(error => reject(error));
248
+ })));
249
+ }
250
+ break;
251
+ }
252
+ });
253
+ // 4- For each event, call the PreResponseMapping Interceptors
254
+ const eventResponses = yield Promise.all((yield Promise.all(eventsExecutionPromises)).flat().map((eventResponse) => __awaiter(this, void 0, void 0, function* () { return yield this.preResponseMappingIntercept(eventResponse); })));
255
+ let finalResponse = {};
256
+ // 5 - Construct the final response by calling the events mapper (reverse map method) for each eventResponse;
257
+ // This method updates the response object that will be returned from the kernel.
258
+ eventResponses.forEach(eventResponse => {
259
+ this.eventMappers.forEach(eventMapper => {
260
+ if (eventMapper.supportsReverseMapping(eventResponse, finalResponse, executionContext)) {
261
+ finalResponse = eventMapper.reverseMap(eventResponse, finalResponse, executionContext);
262
+ }
263
+ });
264
+ });
265
+ // 6 - Call the PostResponseMapping interceptors and return the final intercepted response.
266
+ return this.postResponseMappingIntercept(finalResponse);
267
+ });
268
+ }
269
+ };
270
+ EventPipeline = __decorate([
271
+ injectable(),
272
+ __param(0, injectAll(ServiceDefinitionTagEnum.EventInterceptor)),
273
+ __param(1, injectAll(ServiceDefinitionTagEnum.EventMapper)),
274
+ __param(2, inject('LogHandlerInterface')),
275
+ __param(3, inject("TracingManagerInterface")),
276
+ __metadata("design:paramtypes", [Array, Array, Object, Object])
277
+ ], EventPipeline);
278
+ export { EventPipeline };
279
+ //# sourceMappingURL=event.pipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event.pipeline.js","sourceRoot":"","sources":["../../../../src/pipelines/event.pipeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from "./event.pipeline";
2
+ //# sourceMappingURL=pipelines.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipelines.js","sourceRoot":"","sources":["../../../../src/pipelines/pipelines.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC"}
@@ -1,7 +1,14 @@
1
1
  import { ModuleInterface } from "@pristine-ts/common";
2
2
  export * from "./kernel";
3
+ export * from "./dispatchers/dispatchers";
4
+ export * from "./enums/enums";
3
5
  export * from "./errors/errors";
6
+ export * from "./handlers/handlers";
4
7
  export * from "./interceptors/interceptors";
5
8
  export * from "./interfaces/interfaces";
9
+ export * from "./listeners/listeners";
10
+ export * from "./mappers/mappers";
11
+ export * from "./models/models";
12
+ export * from "./pipelines/pipelines";
6
13
  export * from "./core.module.keyname";
7
14
  export declare const CoreModule: ModuleInterface;
@@ -0,0 +1 @@
1
+ export * from "./event.dispatcher";
@@ -0,0 +1,29 @@
1
+ import { Event } from "../models/event";
2
+ import { LogHandlerInterface } from "@pristine-ts/logging";
3
+ import { EventHandlerInterface } from "../interfaces/event-handler.interface";
4
+ import { EventResponse } from "../models/event.response";
5
+ import { EventDispatcherInterface } from "../interfaces/event-dispatcher.interface";
6
+ import { EventListenerInterface } from "../interfaces/event-listener.interface";
7
+ /**
8
+ * This class receives all the event handlers and listeners that were registered and calls them if they support the event.
9
+ */
10
+ export declare class EventDispatcher implements EventDispatcherInterface {
11
+ private readonly eventHandlers;
12
+ private readonly eventListeners;
13
+ private readonly logHandler;
14
+ /**
15
+ * Dispatcher to dispatch the events to the event handlers that support them.
16
+ * @param eventHandlers All the event handlers that are tagged with ServiceDefinitionTagEnum.EventHandler
17
+ * @param eventListeners
18
+ * @param logHandler
19
+ */
20
+ constructor(eventHandlers: EventHandlerInterface<any, any>[], eventListeners: EventListenerInterface[], logHandler: LogHandlerInterface);
21
+ /**
22
+ * This method receives an event, loops through its event handlers and listeners and if they support the event,
23
+ * will call their handle method.
24
+ * Resolves once all the event handlers and listeners have settled, but does not return a response.
25
+ *
26
+ * @param event
27
+ */
28
+ dispatch(event: Event<any>): Promise<EventResponse<any, any>>;
29
+ }
@@ -0,0 +1 @@
1
+ export * from "./execution-context-keyname.enum";
@@ -0,0 +1,6 @@
1
+ export declare enum ExecutionContextKeynameEnum {
2
+ AwsLambda = "AWS_LAMBDA",
3
+ Cloudflare = "CLOUDFLARE",
4
+ Express = "EXPRESS",
5
+ Jest = "JEST"
6
+ }
@@ -1,7 +1,8 @@
1
- import { LoggableError, RequestInterface } from "@pristine-ts/common";
1
+ import { LoggableError } from "@pristine-ts/common";
2
+ import { Request } from "@pristine-ts/common";
2
3
  /**
3
4
  * This Error is thrown when an error happens in the execution of an error response interceptor.
4
5
  */
5
6
  export declare class ErrorResponseInterceptionExecutionError extends LoggableError {
6
- constructor(message: string, error: Error, request: RequestInterface, interceptor: any, previousError?: Error);
7
+ constructor(message: string, error: Error, request: Request, interceptor: any, previousError?: Error);
7
8
  }
@@ -1,8 +1,10 @@
1
1
  export * from "./error-response-interception-execution.error";
2
- export * from "./provider-registration.error";
2
+ export * from "./event-dispatcher-no-event-handlers.error";
3
+ export * from "./event-dispatching.error";
3
4
  export * from "./event-interception-execution.error";
5
+ export * from "./event-mapping.error";
6
+ export * from "./event-post-mapping-interception.error";
7
+ export * from "./event-pre-mapping-interception.error";
4
8
  export * from "./kernel-initialization.error";
5
- export * from "./request-handling.error";
6
- export * from "./request-interception-execution.error";
7
- export * from "./response-interception-execution.error";
9
+ export * from "./provider-registration.error";
8
10
  export * from "./runtime.error";
@@ -0,0 +1,8 @@
1
+ import { LoggableError } from "@pristine-ts/common";
2
+ import { Event } from "../models/event";
3
+ /**
4
+ * This Error is thrown when there are not event handlers that support this event.
5
+ */
6
+ export declare class EventDispatcherNoEventHandlersError extends LoggableError {
7
+ constructor(message: string, event: Event<any>);
8
+ }
@@ -0,0 +1,8 @@
1
+ import { LoggableError } from "@pristine-ts/common";
2
+ import { Event } from "../models/event";
3
+ /**
4
+ * This Error is thrown when there's an error when dispatching an event.
5
+ */
6
+ export declare class EventDispatchingError extends LoggableError {
7
+ constructor(message: string, originalError: Error, event: Event<any>);
8
+ }
@@ -0,0 +1,8 @@
1
+ import { LoggableError } from "@pristine-ts/common";
2
+ import { ExecutionContextInterface } from "../interfaces/execution-context.interface";
3
+ /**
4
+ * This Error is thrown when there's an error while Mapping an Event in the EventPipeline
5
+ */
6
+ export declare class EventMappingError extends LoggableError {
7
+ constructor(message: string, event: object, interceptedEvent: object, executionContext: ExecutionContextInterface<any>, originalError?: Error);
8
+ }
@@ -0,0 +1,8 @@
1
+ import { LoggableError } from "@pristine-ts/common";
2
+ import { Event } from "../models/event";
3
+ /**
4
+ * This Error is thrown when there's an error when executing any event post mapping interceptors.
5
+ */
6
+ export declare class EventPostMappingInterceptionError extends LoggableError {
7
+ constructor(message: string, originalError: Error, interceptorName: string, event: Event<any>);
8
+ }
@@ -0,0 +1,7 @@
1
+ import { LoggableError } from "@pristine-ts/common";
2
+ /**
3
+ * This Error is thrown when there's an error when executing any event pre mapping interceptors.
4
+ */
5
+ export declare class EventPostResponseMappingInterceptionError extends LoggableError {
6
+ constructor(message: string, originalError: Error, interceptorName: string, eventResponse: object);
7
+ }
@@ -0,0 +1,8 @@
1
+ import { LoggableError } from "@pristine-ts/common";
2
+ import { ExecutionContextInterface } from "../interfaces/execution-context.interface";
3
+ /**
4
+ * This Error is thrown when there's an error when executing any event pre mapping interceptors.
5
+ */
6
+ export declare class EventPreMappingInterceptionError extends LoggableError {
7
+ constructor(message: string, originalError: Error, interceptorName: string, event: object, executionContext: ExecutionContextInterface<any>);
8
+ }
@@ -0,0 +1,8 @@
1
+ import { LoggableError } from "@pristine-ts/common";
2
+ import { EventResponse } from "../models/event.response";
3
+ /**
4
+ * This Error is thrown when there's an error when executing any event pre mapping interceptors.
5
+ */
6
+ export declare class EventPreResponseMappingInterceptionError extends LoggableError {
7
+ constructor(message: string, originalError: Error, interceptorName: string, eventResponse: EventResponse<any, any>);
8
+ }
@@ -0,0 +1,7 @@
1
+ import { EventHandlerInterface } from "../interfaces/event-handler.interface";
2
+ import { Event } from "../models/event";
3
+ import { EventResponse } from "../models/event.response";
4
+ export declare class DefaultEventHandler implements EventHandlerInterface<any, any> {
5
+ handle(event: Event<any>): Promise<EventResponse<any, any>>;
6
+ supports<T>(event: Event<T>): boolean;
7
+ }
@@ -0,0 +1 @@
1
+ export * from "./default-event.handler";
@@ -1,6 +1,8 @@
1
1
  import { EventInterceptorInterface } from "../interfaces/event-interceptor.interface";
2
- import { Event } from "@pristine-ts/event";
3
2
  import { LogHandlerInterface } from "@pristine-ts/logging";
3
+ import { Event } from "../models/event";
4
+ import { ExecutionContextInterface } from "../interfaces/execution-context.interface";
5
+ import { EventResponse } from "../models/event.response";
4
6
  /**
5
7
  * This class is an interceptor to log the events. It is module scoped to Core module.
6
8
  * It is tagged as an EventInterceptor so it can be automatically injected with the all the other EventInterceptors.
@@ -8,14 +10,8 @@ import { LogHandlerInterface } from "@pristine-ts/logging";
8
10
  export declare class EventLoggingInterceptor implements EventInterceptorInterface {
9
11
  private readonly logHandler;
10
12
  constructor(logHandler: LogHandlerInterface);
11
- /**
12
- * This method intercepts an event and logs it.
13
- * @param event
14
- */
15
- interceptEvent(event: Event<any>): Promise<Event<any>>;
16
- /**
17
- * This method intercepts a raw event and logs it.
18
- * @param event
19
- */
20
- interceptRawEvent(event: any): Promise<any>;
13
+ preMappingIntercept(event: object, executionContextInterface: ExecutionContextInterface<any>): Promise<object>;
14
+ postMappingIntercept(event: Event<any>): Promise<Event<any>>;
15
+ preResponseMappingIntercept(eventResponse: EventResponse<any, any>): Promise<EventResponse<any, any>>;
16
+ postResponseMappingIntercept(eventResponse: object): Promise<object>;
21
17
  }
@@ -1,3 +1 @@
1
1
  export * from "./event-logging.interceptor";
2
- export * from "./request-body-converter.interceptor";
3
- export * from "./request-logging.interceptor";
@@ -0,0 +1,5 @@
1
+ import { Event } from "../models/event";
2
+ import { EventResponse } from "../models/event.response";
3
+ export interface EventDispatcherInterface {
4
+ dispatch(event: Event<any>): Promise<EventResponse<any, any>>;
5
+ }
@@ -0,0 +1,23 @@
1
+ import { Event } from "../models/event";
2
+ import { EventResponse } from "../models/event.response";
3
+ /**
4
+ * The Event Listener Interface defines the methods that an Event Listener must implement.
5
+ */
6
+ export interface EventHandlerInterface<EventPayload, EventResponsePayload> {
7
+ /**
8
+ * This property represents the priority (highest number has the highest priority). Use this to specify
9
+ * which listener will be called the first one.
10
+ */
11
+ priority?: number;
12
+ /**
13
+ * This method receives an event and returns whether or not the event listener supports that type of event.
14
+ * This should always be called before calling handle.
15
+ * @param event
16
+ */
17
+ supports<T>(event: Event<T>): boolean;
18
+ /**
19
+ * This method receives an event and handles it and returns an EventResponse.
20
+ * @param event
21
+ */
22
+ handle(event: Event<EventPayload>): Promise<EventResponse<EventPayload, EventResponsePayload>>;
23
+ }
@@ -1,4 +1,6 @@
1
- import { Event } from "@pristine-ts/event";
1
+ import { ExecutionContextInterface } from "./execution-context.interface";
2
+ import { EventResponse } from "../models/event.response";
3
+ import { Event } from "../models/event";
2
4
  /**
3
5
  * The Event Interceptor Interface defines the methods that an Event Interceptor must implement. This
4
6
  * interceptor is called before the event is being dispatched to the event listeners.
@@ -11,8 +13,9 @@ export interface EventInterceptorInterface {
11
13
  * If you force to never resolve the promise, the execution will stall. Be careful.
12
14
  *
13
15
  * @param event
16
+ * @param executionContextInterface
14
17
  */
15
- interceptRawEvent(event: any): Promise<any>;
18
+ preMappingIntercept?(event: object, executionContextInterface: ExecutionContextInterface<any>): Promise<object>;
16
19
  /**
17
20
  * This method receives an event object and must return a transformed event object. If you don't want to
18
21
  * manipulate the event object (when logging for example), juste resolve a promise with the event passed to this method.
@@ -21,5 +24,21 @@ export interface EventInterceptorInterface {
21
24
  *
22
25
  * @param event
23
26
  */
24
- interceptEvent(event: Event<any>): Promise<Event<any>>;
27
+ postMappingIntercept?(event: Event<any>): Promise<Event<any>>;
28
+ /**
29
+ * This method receives the EventResponse returned by the EventDispatcher before it is being reverse mapped by the EventMappers.
30
+ *
31
+ * If you force to never resolve the promise, the execution will stall. Be careful.
32
+ *
33
+ * @param eventResponse
34
+ */
35
+ preResponseMappingIntercept?(eventResponse: EventResponse<any, any>): Promise<EventResponse<any, any>>;
36
+ /**
37
+ * This method receives the reverse mapped EventResponse returned by the EventMappers, but before they are leaving Pristine entirely.
38
+ *
39
+ * If you force to never resolve the promise, the execution will stall. Be careful.
40
+ *
41
+ * @param eventResponse
42
+ */
43
+ postResponseMappingIntercept?(eventResponse: object): Promise<object>;
25
44
  }
@@ -0,0 +1,17 @@
1
+ import { Event } from "../models/event";
2
+ /**
3
+ * The Event Listener Interface defines the methods that an Event Listener must implement.
4
+ */
5
+ export interface EventListenerInterface {
6
+ /**
7
+ * This method receives an event and returns whether or not the event listener supports that type of event.
8
+ * This should always be called before calling handle.
9
+ * @param event
10
+ */
11
+ supports<T>(event: Event<T>): boolean;
12
+ /**
13
+ * This method receives an event and does something with it.
14
+ * @param event
15
+ */
16
+ execute<EventPayload>(event: Event<EventPayload>): Promise<void>;
17
+ }
@@ -0,0 +1,9 @@
1
+ import { ExecutionContextInterface } from "./execution-context.interface";
2
+ import { EventResponse } from "../models/event.response";
3
+ import { EventsExecutionOptionsInterface } from "./events-execution-options.interface";
4
+ export interface EventMapperInterface<EventPayload, EventResponsePayload> {
5
+ supportsMapping(rawEvent: any, executionContext: ExecutionContextInterface<any>): boolean;
6
+ map(rawEvent: any, executionContext: ExecutionContextInterface<any>): EventsExecutionOptionsInterface<EventPayload>;
7
+ supportsReverseMapping(eventResponse: EventResponse<EventPayload, EventResponsePayload>, response: any, executionContext: ExecutionContextInterface<any>): boolean;
8
+ reverseMap(eventResponse: EventResponse<EventPayload, EventResponsePayload>, response: any, executionContext: ExecutionContextInterface<any>): any;
9
+ }
@@ -0,0 +1,5 @@
1
+ import { Event } from "../models/event";
2
+ export interface EventsExecutionOptionsInterface<T> {
3
+ events: Event<T>[];
4
+ executionOrder: "sequential" | "parallel";
5
+ }