@my-devkit/firebase 1.0.106 → 1.0.110

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 (146) hide show
  1. package/dist/aggregate.d.ts +13 -0
  2. package/dist/aggregate.js +85 -0
  3. package/dist/aggregate.js.map +1 -0
  4. package/dist/app-factory.d.ts +31 -0
  5. package/dist/app-factory.js +331 -0
  6. package/dist/app-factory.js.map +1 -0
  7. package/dist/bus.d.ts +17 -0
  8. package/dist/bus.js +128 -0
  9. package/dist/bus.js.map +1 -0
  10. package/dist/constants.d.ts +5 -0
  11. package/dist/constants.js +9 -0
  12. package/dist/constants.js.map +1 -0
  13. package/dist/context.d.ts +28 -0
  14. package/dist/context.js +102 -0
  15. package/dist/context.js.map +1 -0
  16. package/dist/decorators/controller/body.d.ts +1 -0
  17. package/dist/decorators/controller/body.js +17 -0
  18. package/dist/decorators/controller/body.js.map +1 -0
  19. package/dist/decorators/controller/body.spec.d.ts +1 -0
  20. package/dist/decorators/controller/body.spec.js +120 -0
  21. package/dist/decorators/controller/body.spec.js.map +1 -0
  22. package/dist/decorators/controller/controller.d.ts +1 -0
  23. package/dist/decorators/controller/controller.js +14 -0
  24. package/dist/decorators/controller/controller.js.map +1 -0
  25. package/dist/decorators/controller/controller.spec.d.ts +1 -0
  26. package/dist/decorators/controller/controller.spec.js +68 -0
  27. package/dist/decorators/controller/controller.spec.js.map +1 -0
  28. package/dist/decorators/controller/get.d.ts +1 -0
  29. package/dist/decorators/controller/get.js +12 -0
  30. package/dist/decorators/controller/get.js.map +1 -0
  31. package/dist/decorators/controller/get.spec.d.ts +1 -0
  32. package/dist/decorators/controller/get.spec.js +87 -0
  33. package/dist/decorators/controller/get.spec.js.map +1 -0
  34. package/dist/decorators/controller/index.d.ts +6 -0
  35. package/dist/decorators/controller/index.js +19 -0
  36. package/dist/decorators/controller/index.js.map +1 -0
  37. package/dist/decorators/controller/param.d.ts +1 -0
  38. package/dist/decorators/controller/param.js +21 -0
  39. package/dist/decorators/controller/param.js.map +1 -0
  40. package/dist/decorators/controller/param.spec.d.ts +1 -0
  41. package/dist/decorators/controller/param.spec.js +113 -0
  42. package/dist/decorators/controller/param.spec.js.map +1 -0
  43. package/dist/decorators/controller/post.d.ts +1 -0
  44. package/dist/decorators/controller/post.js +12 -0
  45. package/dist/decorators/controller/post.js.map +1 -0
  46. package/dist/decorators/controller/post.spec.d.ts +1 -0
  47. package/dist/decorators/controller/post.spec.js +133 -0
  48. package/dist/decorators/controller/post.spec.js.map +1 -0
  49. package/dist/decorators/controller/query.d.ts +1 -0
  50. package/dist/decorators/controller/query.js +21 -0
  51. package/dist/decorators/controller/query.js.map +1 -0
  52. package/dist/decorators/controller/query.spec.d.ts +1 -0
  53. package/dist/decorators/controller/query.spec.js +113 -0
  54. package/dist/decorators/controller/query.spec.js.map +1 -0
  55. package/dist/decorators/handler/command-handler.d.ts +1 -0
  56. package/dist/decorators/handler/command-handler.js +22 -0
  57. package/dist/decorators/handler/command-handler.js.map +1 -0
  58. package/dist/decorators/handler/command-handler.spec.d.ts +1 -0
  59. package/dist/decorators/handler/command-handler.spec.js +211 -0
  60. package/dist/decorators/handler/command-handler.spec.js.map +1 -0
  61. package/dist/decorators/handler/event-handler.d.ts +2 -0
  62. package/dist/decorators/handler/event-handler.js +22 -0
  63. package/dist/decorators/handler/event-handler.js.map +1 -0
  64. package/dist/decorators/handler/event-handler.spec.d.ts +1 -0
  65. package/dist/decorators/handler/event-handler.spec.js +214 -0
  66. package/dist/decorators/handler/event-handler.spec.js.map +1 -0
  67. package/dist/decorators/handler/index.d.ts +2 -0
  68. package/dist/decorators/handler/index.js +15 -0
  69. package/dist/decorators/handler/index.js.map +1 -0
  70. package/dist/decorators/index.d.ts +5 -0
  71. package/dist/decorators/index.js +18 -0
  72. package/dist/decorators/index.js.map +1 -0
  73. package/dist/decorators/injectable.d.ts +1 -0
  74. package/dist/decorators/injectable.js +11 -0
  75. package/dist/decorators/injectable.js.map +1 -0
  76. package/dist/decorators/module.d.ts +18 -0
  77. package/dist/decorators/module.js +14 -0
  78. package/dist/decorators/module.js.map +1 -0
  79. package/dist/decorators/transactional-client.d.ts +1 -0
  80. package/dist/decorators/transactional-client.js +11 -0
  81. package/dist/decorators/transactional-client.js.map +1 -0
  82. package/dist/execution-mode-enum.d.ts +4 -0
  83. package/dist/execution-mode-enum.js +9 -0
  84. package/dist/execution-mode-enum.js.map +1 -0
  85. package/dist/firestore-client.d.ts +29 -0
  86. package/dist/firestore-client.js +236 -0
  87. package/dist/firestore-client.js.map +1 -0
  88. package/dist/handler-helper.d.ts +9 -0
  89. package/dist/handler-helper.js +159 -0
  90. package/dist/handler-helper.js.map +1 -0
  91. package/dist/index.d.ts +7 -0
  92. package/dist/index.js +20 -0
  93. package/dist/index.js.map +1 -0
  94. package/dist/injector.d.ts +7 -0
  95. package/dist/injector.js +42 -0
  96. package/dist/injector.js.map +1 -0
  97. package/dist/interfaces/app-config.d.ts +0 -0
  98. package/dist/interfaces/app-config.js +1 -0
  99. package/dist/interfaces/app-config.js.map +1 -0
  100. package/dist/interfaces/from-array.d.ts +1 -0
  101. package/dist/interfaces/from-array.js +3 -0
  102. package/dist/interfaces/from-array.js.map +1 -0
  103. package/dist/interfaces/index.d.ts +4 -0
  104. package/dist/interfaces/index.js +17 -0
  105. package/dist/interfaces/index.js.map +1 -0
  106. package/dist/interfaces/newable.d.ts +1 -0
  107. package/dist/interfaces/newable.js +3 -0
  108. package/dist/interfaces/newable.js.map +1 -0
  109. package/dist/interfaces/transactional-client.d.ts +3 -0
  110. package/dist/interfaces/transactional-client.js +3 -0
  111. package/dist/interfaces/transactional-client.js.map +1 -0
  112. package/dist/interfaces/type.d.ts +3 -0
  113. package/dist/interfaces/type.js +3 -0
  114. package/dist/interfaces/type.js.map +1 -0
  115. package/dist/reflect.d.ts +62 -0
  116. package/dist/reflect.js +113 -0
  117. package/dist/reflect.js.map +1 -0
  118. package/dist/request-method.enum.d.ts +4 -0
  119. package/dist/request-method.enum.js +9 -0
  120. package/dist/request-method.enum.js.map +1 -0
  121. package/dist/server/index.d.ts +1 -0
  122. package/dist/server/index.js +14 -0
  123. package/dist/server/index.js.map +1 -0
  124. package/dist/server/middlewares/authentication-middleware.d.ts +3 -0
  125. package/dist/server/middlewares/authentication-middleware.js +110 -0
  126. package/dist/server/middlewares/authentication-middleware.js.map +1 -0
  127. package/dist/server/middlewares/create-context-middleware.d.ts +3 -0
  128. package/dist/server/middlewares/create-context-middleware.js +55 -0
  129. package/dist/server/middlewares/create-context-middleware.js.map +1 -0
  130. package/dist/server/middlewares/error-middleware.d.ts +2 -0
  131. package/dist/server/middlewares/error-middleware.js +78 -0
  132. package/dist/server/middlewares/error-middleware.js.map +1 -0
  133. package/dist/server/middlewares/headers-middleware.d.ts +2 -0
  134. package/dist/server/middlewares/headers-middleware.js +58 -0
  135. package/dist/server/middlewares/headers-middleware.js.map +1 -0
  136. package/dist/server/middlewares/index.d.ts +5 -0
  137. package/dist/server/middlewares/index.js +18 -0
  138. package/dist/server/middlewares/index.js.map +1 -0
  139. package/dist/server/middlewares/not-found-middleware.d.ts +2 -0
  140. package/dist/server/middlewares/not-found-middleware.js +50 -0
  141. package/dist/server/middlewares/not-found-middleware.js.map +1 -0
  142. package/dist/server/server.d.ts +33 -0
  143. package/dist/server/server.js +139 -0
  144. package/dist/server/server.js.map +1 -0
  145. package/dist/tsconfig.tsbuildinfo +1 -0
  146. package/package.json +4 -4
@@ -0,0 +1,13 @@
1
+ import { Document, Event } from '@my-devkit/core';
2
+ export declare abstract class Aggregate implements Document {
3
+ id: string;
4
+ _type: string;
5
+ private _events;
6
+ constructor();
7
+ get _path(): string;
8
+ get hash(): string;
9
+ protected assert(value: boolean, errorMessage: string): void;
10
+ protected apply<E extends Event>(event: E): void;
11
+ get events(): Event[];
12
+ clearEvents(): void;
13
+ }
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
12
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
13
+ if (ar || !(i in from)) {
14
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
15
+ ar[i] = from[i];
16
+ }
17
+ }
18
+ return to.concat(ar || Array.prototype.slice.call(from));
19
+ };
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.Aggregate = void 0;
22
+ var core_1 = require("@my-devkit/core");
23
+ var context_1 = require("./context");
24
+ var Aggregate = /** @class */ (function () {
25
+ function Aggregate() {
26
+ this.id = null;
27
+ this._type = null;
28
+ this._events = [];
29
+ this.id = (0, core_1.guid)();
30
+ this._type = this.constructor.name;
31
+ }
32
+ Object.defineProperty(Aggregate.prototype, "_path", {
33
+ get: function () {
34
+ return "/aggregates/".concat(this.id);
35
+ },
36
+ enumerable: false,
37
+ configurable: true
38
+ });
39
+ Object.defineProperty(Aggregate.prototype, "hash", {
40
+ get: function () {
41
+ return JSON.stringify((0, core_1.serialize)(this));
42
+ },
43
+ enumerable: false,
44
+ configurable: true
45
+ });
46
+ Aggregate.prototype.assert = function (value, errorMessage) {
47
+ if (!value) {
48
+ throw new core_1.DomainError(errorMessage);
49
+ }
50
+ };
51
+ Aggregate.prototype.apply = function (event) {
52
+ var methodName = "apply".concat(event._type);
53
+ if (!(methodName in this)) {
54
+ throw new Error("".concat(this._type, ".").concat(methodName, " method is missing!"));
55
+ }
56
+ event._aggregateId = this.id;
57
+ event._aggregateType = this._type;
58
+ event._correlationId = context_1.Context.correlationId;
59
+ event._publishedBy = context_1.Context.user ? context_1.Context.user.uid : null;
60
+ event.publishedAt = new Date();
61
+ this[methodName](event);
62
+ this._events.push(event);
63
+ };
64
+ Object.defineProperty(Aggregate.prototype, "events", {
65
+ get: function () {
66
+ return __spreadArray([], this._events, true);
67
+ },
68
+ enumerable: false,
69
+ configurable: true
70
+ });
71
+ Aggregate.prototype.clearEvents = function () {
72
+ this._events = [];
73
+ };
74
+ __decorate([
75
+ (0, core_1.autoserializeAs)(String),
76
+ __metadata("design:type", String)
77
+ ], Aggregate.prototype, "id", void 0);
78
+ __decorate([
79
+ (0, core_1.autoserializeAs)(String),
80
+ __metadata("design:type", String)
81
+ ], Aggregate.prototype, "_type", void 0);
82
+ return Aggregate;
83
+ }());
84
+ exports.Aggregate = Aggregate;
85
+ //# sourceMappingURL=aggregate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aggregate.js","sourceRoot":"","sources":["../src/aggregate.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,wCAAiG;AAEjG,qCAAoC;AAEpC;IAKI;QAJgC,OAAE,GAAW,IAAI,CAAC;QAClB,UAAK,GAAW,IAAI,CAAC;QAC7C,YAAO,GAAY,EAAE,CAAC;QAG1B,IAAI,CAAC,EAAE,GAAG,IAAA,WAAI,GAAE,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IACvC,CAAC;IAED,sBAAW,4BAAK;aAAhB;YACI,OAAO,sBAAe,IAAI,CAAC,EAAE,CAAE,CAAC;QACpC,CAAC;;;OAAA;IAED,sBAAW,2BAAI;aAAf;YACI,OAAO,IAAI,CAAC,SAAS,CAAC,IAAA,gBAAS,EAAC,IAAI,CAAC,CAAC,CAAC;QAC3C,CAAC;;;OAAA;IAES,0BAAM,GAAhB,UAAiB,KAAc,EAAE,YAAoB;QACjD,IAAI,CAAC,KAAK,EAAE;YACR,MAAM,IAAI,kBAAW,CAAC,YAAY,CAAC,CAAC;SACvC;IACL,CAAC;IAES,yBAAK,GAAf,UAAiC,KAAQ;QACrC,IAAM,UAAU,GAAG,eAAQ,KAAK,CAAC,KAAK,CAAE,CAAC;QACzC,IAAI,CAAC,CAAC,UAAU,IAAI,IAAI,CAAC,EAAE;YACvB,MAAM,IAAI,KAAK,CAAC,UAAG,IAAI,CAAC,KAAK,cAAI,UAAU,wBAAqB,CAAC,CAAC;SACrE;QAED,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,EAAE,CAAC;QAC7B,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC;QAElC,KAAK,CAAC,cAAc,GAAG,iBAAO,CAAC,aAAa,CAAC;QAC7C,KAAK,CAAC,YAAY,GAAG,iBAAO,CAAC,IAAI,CAAC,CAAC,CAAC,iBAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5D,KAAK,CAAC,WAAW,GAAG,IAAI,IAAI,EAAE,CAAC;QAE/B,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,CAAC;QAExB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,sBAAW,6BAAM;aAAjB;YACI,yBAAW,IAAI,CAAC,OAAO,QAAE;QAC7B,CAAC;;;OAAA;IAEM,+BAAW,GAAlB;QACI,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;IACtB,CAAC;IA/CwB;QAAxB,IAAA,sBAAe,EAAC,MAAM,CAAC;;yCAA0B;IACzB;QAAxB,IAAA,sBAAe,EAAC,MAAM,CAAC;;4CAA6B;IA+CzD,gBAAC;CAAA,AAjDD,IAiDC;AAjDqB,8BAAS"}
@@ -0,0 +1,31 @@
1
+ import { DocumentSnapshot } from 'firebase-admin/firestore';
2
+ import { CloudFunction, HttpsFunction, SUPPORTED_REGIONS, VALID_MEMORY_OPTIONS } from 'firebase-functions';
3
+ import { Bus } from './bus';
4
+ import { ExecutionMode } from './execution-mode-enum';
5
+ import { Type } from './interfaces';
6
+ export declare class AppFactory {
7
+ private static functionInRegion;
8
+ private static firestore;
9
+ private static auth;
10
+ private static publicPaths;
11
+ private static instanceId;
12
+ static isActive(name: string): boolean;
13
+ static initializeApp(options: AppFactory.Options): void;
14
+ static createHttpFunction(name: string, module: Type): HttpsFunction;
15
+ static createEventListener(name: string, module: Type, mode?: ExecutionMode): CloudFunction<DocumentSnapshot>;
16
+ private static registerEventPersisterHandler;
17
+ private static registerControllers;
18
+ private static registerController;
19
+ private static registerHandlers;
20
+ private static registerLogger;
21
+ static getFunctionEventHandler(bus: Bus, mode: ExecutionMode): (snapshot: DocumentSnapshot) => any;
22
+ private static get isEmulator();
23
+ }
24
+ export declare namespace AppFactory {
25
+ interface Options {
26
+ region: typeof SUPPORTED_REGIONS[number];
27
+ timeoutSeconds: number;
28
+ memory: typeof VALID_MEMORY_OPTIONS[number];
29
+ publicPaths?: string[];
30
+ }
31
+ }
@@ -0,0 +1,331 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
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
+ var __generator = (this && this.__generator) || function (thisArg, body) {
23
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
24
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
25
+ function verb(n) { return function (v) { return step([n, v]); }; }
26
+ function step(op) {
27
+ if (f) throw new TypeError("Generator is already executing.");
28
+ while (_) try {
29
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
30
+ if (y = 0, t) op = [op[0] & 2, t.value];
31
+ switch (op[0]) {
32
+ case 0: case 1: t = op; break;
33
+ case 4: _.label++; return { value: op[1], done: false };
34
+ case 5: _.label++; y = op[1]; op = [0]; continue;
35
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
36
+ default:
37
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
38
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
39
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
40
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
41
+ if (t[2]) _.ops.pop();
42
+ _.trys.pop(); continue;
43
+ }
44
+ op = body.call(thisArg, _);
45
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
46
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
47
+ }
48
+ };
49
+ Object.defineProperty(exports, "__esModule", { value: true });
50
+ exports.AppFactory = void 0;
51
+ var core_1 = require("@my-devkit/core");
52
+ var app_1 = require("firebase-admin/app");
53
+ var auth_1 = require("firebase-admin/auth");
54
+ var firestore_1 = require("firebase-admin/firestore");
55
+ var firebase_functions_1 = require("firebase-functions");
56
+ var bus_1 = require("./bus");
57
+ var constants_1 = require("./constants");
58
+ var context_1 = require("./context");
59
+ var execution_mode_enum_1 = require("./execution-mode-enum");
60
+ var firestore_client_1 = require("./firestore-client");
61
+ var reflect_1 = require("./reflect");
62
+ var server_1 = require("./server");
63
+ var AppFactory = /** @class */ (function () {
64
+ function AppFactory() {
65
+ }
66
+ AppFactory.isActive = function (name) {
67
+ var functionName = process.env.FUNCTION_NAME || process.env.K_SERVICE;
68
+ return !functionName || functionName === name;
69
+ };
70
+ AppFactory.initializeApp = function (options) {
71
+ this.instanceId = (0, core_1.guid)();
72
+ context_1.Context.init();
73
+ this.registerLogger();
74
+ this.publicPaths = options.publicPaths || [];
75
+ var app = (0, app_1.initializeApp)((0, firebase_functions_1.config)().firebase);
76
+ this.firestore = (0, firestore_1.getFirestore)(app);
77
+ this.firestore.settings({});
78
+ this.auth = (0, auth_1.getAuth)(app);
79
+ var runtimeOptions = {
80
+ timeoutSeconds: options.timeoutSeconds,
81
+ memory: options.memory
82
+ };
83
+ this.functionInRegion = (0, firebase_functions_1.region)(this.isEmulator ? 'functions' : options.region).runWith(runtimeOptions);
84
+ };
85
+ AppFactory.createHttpFunction = function (name, module) {
86
+ if (!this.isActive(name)) {
87
+ return null;
88
+ }
89
+ core_1.Logger.info("Cold Start Http function ".concat(name));
90
+ var bus = new bus_1.Bus();
91
+ var server = new server_1.Server({
92
+ bus: bus,
93
+ firebaseAuth: this.auth,
94
+ firestore: this.firestore,
95
+ publicPaths: this.publicPaths
96
+ });
97
+ this.registerControllers(server, module);
98
+ this.registerEventPersisterHandler(bus);
99
+ this.registerHandlers(bus, module);
100
+ return this.functionInRegion.https.onRequest(server.app);
101
+ };
102
+ AppFactory.createEventListener = function (name, module, mode) {
103
+ if (mode === void 0) { mode = execution_mode_enum_1.ExecutionMode.Asynchronous; }
104
+ if (!this.isActive(name)) {
105
+ return null;
106
+ }
107
+ core_1.Logger.info("Cold Start Event Listener ".concat(mode));
108
+ var bus = new bus_1.Bus();
109
+ this.registerEventPersisterHandler(bus);
110
+ this.registerHandlers(bus, module);
111
+ return this.functionInRegion
112
+ .firestore
113
+ .document('events/{eventId}')
114
+ .onCreate(this.getFunctionEventHandler(bus, execution_mode_enum_1.ExecutionMode.Asynchronous));
115
+ };
116
+ AppFactory.registerEventPersisterHandler = function (bus) {
117
+ var _this = this;
118
+ bus.onEachEvent(function (event) { return __awaiter(_this, void 0, void 0, function () {
119
+ return __generator(this, function (_a) {
120
+ context_1.Context.resolve(firestore_client_1.FirestoreClient).createDocument(event);
121
+ return [2 /*return*/];
122
+ });
123
+ }); }, execution_mode_enum_1.ExecutionMode.Synchronous);
124
+ };
125
+ AppFactory.registerControllers = function (server, module) {
126
+ var controllers = Reflect.getMetadata(constants_1.MODULE_METADATA.CONTROLLERS, module) || [];
127
+ for (var _i = 0, controllers_1 = controllers; _i < controllers_1.length; _i++) {
128
+ var controller = controllers_1[_i];
129
+ this.registerController(server, controller);
130
+ }
131
+ var imports = Reflect.getMetadata(constants_1.MODULE_METADATA.IMPORTS, module) || [];
132
+ for (var _a = 0, imports_1 = imports; _a < imports_1.length; _a++) {
133
+ var importedModule = imports_1[_a];
134
+ this.registerControllers(server, importedModule);
135
+ }
136
+ };
137
+ AppFactory.registerController = function (server, controller) {
138
+ var _this = this;
139
+ var router = new server_1.Server.Router();
140
+ var config = (0, reflect_1.reflect)(controller).getControllerConfiguration();
141
+ var _loop_1 = function (route) {
142
+ router.registerRoute(route.requestMethod, "/".concat(route.path), function (request, response) { return __awaiter(_this, void 0, void 0, function () {
143
+ var controllerInstance, args, result, _i, _a, client;
144
+ return __generator(this, function (_b) {
145
+ switch (_b.label) {
146
+ case 0:
147
+ core_1.Logger.info("".concat(route.requestMethod, "/").concat(route.path, ": executing handler method ").concat(controller.name, ".").concat(route.methodName));
148
+ controllerInstance = context_1.Context.resolve(controller);
149
+ args = route.argumentInjectors.map(function (injector) { return injector(request); });
150
+ return [4 /*yield*/, controllerInstance[route.methodName].apply(controllerInstance, args)];
151
+ case 1:
152
+ result = _b.sent();
153
+ _i = 0, _a = context_1.Context.getTransactionalClients();
154
+ _b.label = 2;
155
+ case 2:
156
+ if (!(_i < _a.length)) return [3 /*break*/, 5];
157
+ client = _a[_i];
158
+ core_1.Logger.info("Saving transactions...");
159
+ return [4 /*yield*/, client.save()];
160
+ case 3:
161
+ _b.sent();
162
+ _b.label = 4;
163
+ case 4:
164
+ _i++;
165
+ return [3 /*break*/, 2];
166
+ case 5:
167
+ context_1.Context.destroy();
168
+ response.status(server_1.Server.statusCodes.OK).send({ result: result });
169
+ return [2 /*return*/];
170
+ }
171
+ });
172
+ }); });
173
+ };
174
+ for (var _i = 0, _a = config.routes; _i < _a.length; _i++) {
175
+ var route = _a[_i];
176
+ _loop_1(route);
177
+ }
178
+ router.registerOnServer("/".concat(config.basePath), server);
179
+ };
180
+ AppFactory.registerHandlers = function (bus, module) {
181
+ var _this = this;
182
+ var handlers = Reflect.getMetadata(constants_1.MODULE_METADATA.HANDLERS, module) || [];
183
+ var _loop_2 = function (handler) {
184
+ var handlerConfiguration = (0, reflect_1.reflect)(handler).getHandlerConfiguration();
185
+ var instance = new handler();
186
+ var _loop_3 = function (commandHandler) {
187
+ core_1.Logger.debug("onCommand ".concat(commandHandler.command.constructor.name, " => ").concat(handler.name, ".").concat(commandHandler.methodName));
188
+ bus.onCommand(commandHandler.command, function (command) {
189
+ var startDate = new Date();
190
+ core_1.Logger.info("".concat(handler.name, ".").concat(commandHandler.methodName, " handle ").concat(command._type));
191
+ var result = instance[commandHandler.methodName](command);
192
+ core_1.Logger.infoWithElapesedTime("".concat(command._type, " handled by ").concat(handler.name, ".").concat(commandHandler.methodName), startDate);
193
+ return result;
194
+ });
195
+ };
196
+ for (var _b = 0, _c = Array.from(handlerConfiguration.commandHandlers.values()); _b < _c.length; _b++) {
197
+ var commandHandler = _c[_b];
198
+ _loop_3(commandHandler);
199
+ }
200
+ var _loop_4 = function (eventHandler) {
201
+ core_1.Logger.debug("onEvent ".concat(eventHandler.event.constructor.name, " => ").concat(handler.name, ".").concat(eventHandler.methodName, " (mode: ").concat(eventHandler.executionMode, ")"));
202
+ bus.onEvent(eventHandler.event, function (event) { return __awaiter(_this, void 0, void 0, function () {
203
+ var startDate;
204
+ return __generator(this, function (_a) {
205
+ switch (_a.label) {
206
+ case 0:
207
+ startDate = new Date();
208
+ core_1.Logger.info("".concat(handler.name, ".").concat(eventHandler.methodName, " handle ").concat(event._type));
209
+ return [4 /*yield*/, instance[eventHandler.methodName](event)];
210
+ case 1:
211
+ _a.sent();
212
+ core_1.Logger.infoWithElapesedTime("".concat(event._type, " handled by ").concat(handler.name, ".").concat(eventHandler.methodName), startDate);
213
+ return [2 /*return*/];
214
+ }
215
+ });
216
+ }); }, eventHandler.executionMode);
217
+ };
218
+ for (var _d = 0, _e = Array.from(handlerConfiguration.eventHandlers.values()); _d < _e.length; _d++) {
219
+ var eventHandler = _e[_d];
220
+ _loop_4(eventHandler);
221
+ }
222
+ };
223
+ for (var _i = 0, handlers_1 = handlers; _i < handlers_1.length; _i++) {
224
+ var handler = handlers_1[_i];
225
+ _loop_2(handler);
226
+ }
227
+ var imports = Reflect.getMetadata(constants_1.MODULE_METADATA.IMPORTS, module) || [];
228
+ for (var _a = 0, imports_2 = imports; _a < imports_2.length; _a++) {
229
+ var importedModule = imports_2[_a];
230
+ this.registerHandlers(bus, importedModule);
231
+ }
232
+ };
233
+ AppFactory.registerLogger = function () {
234
+ var _this = this;
235
+ if (this.isEmulator) {
236
+ core_1.Logger.registerLogger(new core_1.Logger.ConsoleImplementation());
237
+ return;
238
+ }
239
+ var completeMetaData = function (data) {
240
+ var _a, _b;
241
+ return __assign({ instanceId: _this.instanceId, correlationId: context_1.Context.correlationId, eventId: context_1.Context.eventId, userId: (_a = context_1.Context.user) === null || _a === void 0 ? void 0 : _a.uid, userEmail: (_b = context_1.Context.user) === null || _b === void 0 ? void 0 : _b.email }, data);
242
+ };
243
+ core_1.Logger.registerLogger({
244
+ debug: function (message, data) {
245
+ firebase_functions_1.logger.debug(message, completeMetaData(data));
246
+ },
247
+ info: function (message, data) {
248
+ firebase_functions_1.logger.info(message, completeMetaData(data));
249
+ },
250
+ warn: function (message, data) {
251
+ firebase_functions_1.logger.warn(message, completeMetaData(data));
252
+ },
253
+ error: function (message, data) {
254
+ firebase_functions_1.logger.error(message, completeMetaData(data));
255
+ }
256
+ });
257
+ };
258
+ AppFactory.getFunctionEventHandler = function (bus, mode) {
259
+ var _this = this;
260
+ return function (snapshot) { return __awaiter(_this, void 0, void 0, function () {
261
+ var startDate, unserializedEvent, event, error_1;
262
+ var _this = this;
263
+ return __generator(this, function (_a) {
264
+ switch (_a.label) {
265
+ case 0:
266
+ startDate = new Date();
267
+ unserializedEvent = snapshot.data();
268
+ event = (0, core_1.deserialize)(unserializedEvent);
269
+ context_1.Context.create(bus);
270
+ context_1.Context.correlationId = event._correlationId;
271
+ context_1.Context.eventId = event.id;
272
+ if (unserializedEvent['_restored'] === true) {
273
+ core_1.Logger.debug("Event ".concat(event._type, " is ignored as it is restored from backup."));
274
+ return [2 /*return*/];
275
+ }
276
+ _a.label = 1;
277
+ case 1:
278
+ _a.trys.push([1, 3, 4, 5]);
279
+ return [4 /*yield*/, (0, core_1.retry)(function () { return __awaiter(_this, void 0, void 0, function () {
280
+ var _i, _a, client;
281
+ return __generator(this, function (_b) {
282
+ switch (_b.label) {
283
+ case 0:
284
+ core_1.Logger.info("".concat('-'.repeat(5), " handling ").concat(event._type, " ").concat('-'.repeat(5)));
285
+ return [4 /*yield*/, bus.publish(event, mode)];
286
+ case 1:
287
+ _b.sent();
288
+ _i = 0, _a = context_1.Context.getTransactionalClients();
289
+ _b.label = 2;
290
+ case 2:
291
+ if (!(_i < _a.length)) return [3 /*break*/, 5];
292
+ client = _a[_i];
293
+ return [4 /*yield*/, client.save()];
294
+ case 3:
295
+ _b.sent();
296
+ _b.label = 4;
297
+ case 4:
298
+ _i++;
299
+ return [3 /*break*/, 2];
300
+ case 5:
301
+ core_1.Logger.infoWithElapesedTime("".concat('-'.repeat(5), " ").concat(event._type, " handled successfully ").concat('-'.repeat(5)), startDate);
302
+ return [2 /*return*/];
303
+ }
304
+ });
305
+ }); })];
306
+ case 2:
307
+ _a.sent();
308
+ return [3 /*break*/, 5];
309
+ case 3:
310
+ error_1 = _a.sent();
311
+ core_1.Logger.error("".concat('-'.repeat(5), " ").concat(event._type, " couldn't be handled correctly ").concat('-'.repeat(5)), { error: error_1 });
312
+ return [3 /*break*/, 5];
313
+ case 4:
314
+ context_1.Context.destroy();
315
+ return [7 /*endfinally*/];
316
+ case 5: return [2 /*return*/];
317
+ }
318
+ });
319
+ }); };
320
+ };
321
+ Object.defineProperty(AppFactory, "isEmulator", {
322
+ get: function () {
323
+ return !!process.env.FUNCTIONS_EMULATOR;
324
+ },
325
+ enumerable: false,
326
+ configurable: true
327
+ });
328
+ return AppFactory;
329
+ }());
330
+ exports.AppFactory = AppFactory;
331
+ //# sourceMappingURL=app-factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-factory.js","sourceRoot":"","sources":["../src/app-factory.ts"],"names":[],"mappings":"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"}
package/dist/bus.d.ts ADDED
@@ -0,0 +1,17 @@
1
+ import { Command, Event } from '@my-devkit/core';
2
+ import { ExecutionMode } from './execution-mode-enum';
3
+ export declare class Bus {
4
+ private commandHandlers;
5
+ private eventHandlers;
6
+ send<T, C extends Command>(command: C): Promise<T>;
7
+ publish<E extends Event>(event: E, mode?: ExecutionMode): Promise<void>;
8
+ onCommand<C extends Command, R>(commandType: new () => C, handler: Bus.Handler<C, R>): void;
9
+ onEvent<E extends Event>(eventType: new () => E, handler: Bus.Handler<E, void>, mode: ExecutionMode): void;
10
+ onEachEvent<E extends Event>(handler: Bus.Handler<E, void>, mode: ExecutionMode): void;
11
+ private getDictionaryKey;
12
+ private registerEventHandler;
13
+ private getEventHandlers;
14
+ }
15
+ export declare namespace Bus {
16
+ type Handler<T, R> = (arg: T) => Promise<R>;
17
+ }
package/dist/bus.js ADDED
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (_) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
39
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
40
+ if (ar || !(i in from)) {
41
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
42
+ ar[i] = from[i];
43
+ }
44
+ }
45
+ return to.concat(ar || Array.prototype.slice.call(from));
46
+ };
47
+ Object.defineProperty(exports, "__esModule", { value: true });
48
+ exports.Bus = void 0;
49
+ var core_1 = require("@my-devkit/core");
50
+ var execution_mode_enum_1 = require("./execution-mode-enum");
51
+ var Bus = /** @class */ (function () {
52
+ function Bus() {
53
+ this.commandHandlers = new Map();
54
+ this.eventHandlers = new Map();
55
+ }
56
+ Bus.prototype.send = function (command) {
57
+ return __awaiter(this, void 0, void 0, function () {
58
+ var validationErrors, handler;
59
+ return __generator(this, function (_a) {
60
+ core_1.Logger.info("Bus.send ".concat(command._type), { command: (0, core_1.serialize)(command) });
61
+ validationErrors = core_1.Validators.validate(command);
62
+ if (validationErrors.length > 0) {
63
+ throw new core_1.DomainError(validationErrors[0].getErrorMessage());
64
+ }
65
+ handler = this.commandHandlers.get(command._type);
66
+ if (!handler) {
67
+ throw new Error("No command handler for ".concat(command._type));
68
+ }
69
+ core_1.Logger.info("Run command handler ".concat(handler.name));
70
+ return [2 /*return*/, handler(command)];
71
+ });
72
+ });
73
+ };
74
+ Bus.prototype.publish = function (event, mode) {
75
+ if (mode === void 0) { mode = execution_mode_enum_1.ExecutionMode.Synchronous; }
76
+ return __awaiter(this, void 0, void 0, function () {
77
+ var handlers, _i, handlers_1, handler;
78
+ return __generator(this, function (_a) {
79
+ switch (_a.label) {
80
+ case 0:
81
+ core_1.Logger.info("Bus.publish ".concat(event._type, " "), { event: (0, core_1.serialize)(event) });
82
+ handlers = __spreadArray(__spreadArray([], this.getEventHandlers(event._type, mode), true), this.getEventHandlers('**', mode), true);
83
+ _i = 0, handlers_1 = handlers;
84
+ _a.label = 1;
85
+ case 1:
86
+ if (!(_i < handlers_1.length)) return [3 /*break*/, 4];
87
+ handler = handlers_1[_i];
88
+ core_1.Logger.info("Run event handler ".concat(handler.name));
89
+ return [4 /*yield*/, handler(event)];
90
+ case 2:
91
+ _a.sent();
92
+ _a.label = 3;
93
+ case 3:
94
+ _i++;
95
+ return [3 /*break*/, 1];
96
+ case 4: return [2 /*return*/];
97
+ }
98
+ });
99
+ });
100
+ };
101
+ Bus.prototype.onCommand = function (commandType, handler) {
102
+ var commandName = commandType.constructor.name;
103
+ this.commandHandlers.set(commandName, handler);
104
+ };
105
+ Bus.prototype.onEvent = function (eventType, handler, mode) {
106
+ this.registerEventHandler(eventType.constructor.name, mode, handler);
107
+ };
108
+ Bus.prototype.onEachEvent = function (handler, mode) {
109
+ this.registerEventHandler('**', mode, handler);
110
+ };
111
+ Bus.prototype.getDictionaryKey = function (eventType, mode) {
112
+ return "".concat(eventType, "_").concat(mode.toString());
113
+ };
114
+ Bus.prototype.registerEventHandler = function (type, mode, handler) {
115
+ var key = this.getDictionaryKey(type, mode);
116
+ if (!this.eventHandlers.has(key)) {
117
+ this.eventHandlers.set(key, []);
118
+ }
119
+ this.eventHandlers.get(key).push(handler);
120
+ };
121
+ Bus.prototype.getEventHandlers = function (type, mode) {
122
+ var key = this.getDictionaryKey(type, mode);
123
+ return this.eventHandlers.get(key) || [];
124
+ };
125
+ return Bus;
126
+ }());
127
+ exports.Bus = Bus;
128
+ //# sourceMappingURL=bus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bus.js","sourceRoot":"","sources":["../src/bus.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare const MODULE_METADATA: {
2
+ IMPORTS: string;
3
+ CONTROLLERS: string;
4
+ HANDLERS: string;
5
+ };
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MODULE_METADATA = void 0;
4
+ exports.MODULE_METADATA = {
5
+ IMPORTS: 'imports',
6
+ CONTROLLERS: 'controllers',
7
+ HANDLERS: 'handlers'
8
+ };
9
+ //# sourceMappingURL=constants.js.map