@decaf-ts/for-nest 0.2.14 → 0.2.16

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 (52) hide show
  1. package/README.md +1 -1
  2. package/dist/for-nest.cjs +1 -1
  3. package/dist/for-nest.cjs.map +1 -1
  4. package/dist/for-nest.js +1 -1
  5. package/dist/for-nest.js.map +1 -1
  6. package/lib/decaf-model/FromModelController.cjs +157 -0
  7. package/lib/decaf-model/FromModelController.d.ts +1 -0
  8. package/lib/decaf-model/FromModelController.js.map +1 -1
  9. package/lib/esm/decaf-model/FromModelController.d.ts +1 -0
  10. package/lib/esm/decaf-model/FromModelController.js +157 -0
  11. package/lib/esm/decaf-model/FromModelController.js.map +1 -1
  12. package/lib/esm/events-module/DecafStreamModule.d.ts +4 -0
  13. package/lib/esm/events-module/DecafStreamModule.js +40 -0
  14. package/lib/esm/events-module/DecafStreamModule.js.map +1 -0
  15. package/lib/esm/events-module/constant.d.ts +1 -0
  16. package/lib/esm/events-module/constant.js +2 -0
  17. package/lib/esm/events-module/constant.js.map +1 -0
  18. package/lib/esm/events-module/events.controller.d.ts +10 -0
  19. package/lib/esm/events-module/events.controller.js +112 -0
  20. package/lib/esm/events-module/events.controller.js.map +1 -0
  21. package/lib/esm/events-module/index.d.ts +1 -0
  22. package/lib/esm/events-module/index.js +2 -0
  23. package/lib/esm/events-module/index.js.map +1 -0
  24. package/lib/esm/events-module/utils.d.ts +1 -0
  25. package/lib/esm/events-module/utils.js +9 -0
  26. package/lib/esm/events-module/utils.js.map +1 -0
  27. package/lib/esm/index.d.ts +1 -1
  28. package/lib/esm/index.js +1 -1
  29. package/lib/esm/module.js +4 -0
  30. package/lib/esm/module.js.map +1 -1
  31. package/lib/esm/types.d.ts +17 -0
  32. package/lib/events-module/DecafStreamModule.cjs +43 -0
  33. package/lib/events-module/DecafStreamModule.d.ts +4 -0
  34. package/lib/events-module/DecafStreamModule.js.map +1 -0
  35. package/lib/events-module/constant.cjs +5 -0
  36. package/lib/events-module/constant.d.ts +1 -0
  37. package/lib/events-module/constant.js.map +1 -0
  38. package/lib/events-module/events.controller.cjs +115 -0
  39. package/lib/events-module/events.controller.d.ts +10 -0
  40. package/lib/events-module/events.controller.js.map +1 -0
  41. package/lib/events-module/index.cjs +18 -0
  42. package/lib/events-module/index.d.ts +1 -0
  43. package/lib/events-module/index.js.map +1 -0
  44. package/lib/events-module/utils.cjs +12 -0
  45. package/lib/events-module/utils.d.ts +1 -0
  46. package/lib/events-module/utils.js.map +1 -0
  47. package/lib/index.cjs +1 -1
  48. package/lib/index.d.ts +1 -1
  49. package/lib/module.cjs +4 -0
  50. package/lib/module.js.map +1 -1
  51. package/lib/types.d.ts +17 -0
  52. package/package.json +2 -1
@@ -0,0 +1,9 @@
1
+ export function normalizeEventResponse(args) {
2
+ const [modelConstr, operation, id, payload] = args;
3
+ const modelName = modelConstr?.name ?? modelConstr;
4
+ const serializedPayload = Array.isArray(payload)
5
+ ? payload.map((e) => e.serialize())
6
+ : payload?.serialize();
7
+ return [modelName, operation, id, serializedPayload];
8
+ }
9
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/events-module/utils.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,sBAAsB,CAAC,IAAW;IAChD,MAAM,CAAC,WAAW,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAEnD,MAAM,SAAS,GAAG,WAAW,EAAE,IAAI,IAAI,WAAW,CAAC;IAEnD,MAAM,iBAAiB,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAC9C,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;QACnC,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC;IAEzB,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,iBAAiB,CAAC,CAAC;AACvD,CAAC"}
@@ -37,5 +37,5 @@ export * from "./utils";
37
37
  * @constant
38
38
  * @type {string}
39
39
  */
40
- export declare const VERSION = "0.2.13";
40
+ export declare const VERSION = "0.2.16";
41
41
  export declare const PACKAGE_NAME = "@decaf-ts/for-nest";
package/lib/esm/index.js CHANGED
@@ -38,7 +38,7 @@ export * from "./utils.js";
38
38
  * @constant
39
39
  * @type {string}
40
40
  */
41
- export const VERSION = "0.2.13";
41
+ export const VERSION = "0.2.16";
42
42
  export const PACKAGE_NAME = "@decaf-ts/for-nest";
43
43
  Metadata.registerLibrary(PACKAGE_NAME, VERSION);
44
44
  //# sourceMappingURL=index.js.map
package/lib/esm/module.js CHANGED
@@ -8,6 +8,7 @@ var DecafModule_1;
8
8
  import { Module } from "@nestjs/common";
9
9
  import { DecafCoreModule } from "./core-module.js";
10
10
  import { getModuleFor } from "./decaf-model/index.js";
11
+ import { DecafStreamModule } from "./events-module/index.js";
11
12
  /**
12
13
  * @publicApi
13
14
  */
@@ -25,6 +26,9 @@ let DecafModule = DecafModule_1 = class DecafModule {
25
26
  }));
26
27
  });
27
28
  }
29
+ if (options.observerOptions?.enableObserverEvents) {
30
+ imports.push(DecafStreamModule.forFlavours(flavours));
31
+ }
28
32
  return {
29
33
  module: DecafModule_1,
30
34
  imports: imports,
@@ -1 +1 @@
1
- {"version":3,"file":"module.js","sourceRoot":"","sources":["../../src/module.ts"],"names":[],"mappings":";;;;;;;AAAA,OAAO,EAAmC,MAAM,EAAQ,MAAM,gBAAgB,CAAC;AAE/E,OAAO,EAAE,eAAe,EAAE,yBAAsB;AAEhD,OAAO,EAAE,YAAY,EAAE,+BAA4B;AAEnD;;GAEG;AAEI,IAAM,WAAW,mBAAjB,MAAM,WAAW;IACtB,MAAM,CAAC,KAAK,CAAC,YAAY,CACvB,OAA2B;QAE3B,MAAM,EAAE,eAAe,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;QAE5D,MAAM,QAAQ,GACZ,MAAM,eAAe,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAE5D,MAAM,OAAO,GAOG,CAAC,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QAEnD,IAAI,eAAe,EAAE,CAAC;YACpB,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC3B,OAAO,CAAC,IAAI,CACV,YAAY,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE;oBACrC,YAAY;oBACZ,QAAQ;iBACT,CAAC,CACH,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO;YACL,MAAM,EAAE,aAAW;YACnB,OAAO,EAAE,OAAO;SACjB,CAAC;IACJ,CAAC;CACF,CAAA;AAnCY,WAAW;IADvB,MAAM,CAAC,EAAE,CAAC;GACE,WAAW,CAmCvB"}
1
+ {"version":3,"file":"module.js","sourceRoot":"","sources":["../../src/module.ts"],"names":[],"mappings":";;;;;;;AAAA,OAAO,EAAmC,MAAM,EAAQ,MAAM,gBAAgB,CAAC;AAE/E,OAAO,EAAE,eAAe,EAAE,yBAAsB;AAEhD,OAAO,EAAE,YAAY,EAAE,+BAA4B;AACnD,OAAO,EAAE,iBAAiB,EAAE,iCAAwB;AAEpD;;GAEG;AAEI,IAAM,WAAW,mBAAjB,MAAM,WAAW;IACtB,MAAM,CAAC,KAAK,CAAC,YAAY,CACvB,OAA2B;QAE3B,MAAM,EAAE,eAAe,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;QAE5D,MAAM,QAAQ,GACZ,MAAM,eAAe,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAE5D,MAAM,OAAO,GAOG,CAAC,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QAEnD,IAAI,eAAe,EAAE,CAAC;YACpB,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC3B,OAAO,CAAC,IAAI,CACV,YAAY,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE;oBACrC,YAAY;oBACZ,QAAQ;iBACT,CAAC,CACH,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,OAAO,CAAC,eAAe,EAAE,oBAAoB,EAAE,CAAC;YAClD,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;QACxD,CAAC;QAED,OAAO;YACL,MAAM,EAAE,aAAW;YACnB,OAAO,EAAE,OAAO;SACjB,CAAC;IACJ,CAAC;CACF,CAAA;AAvCY,WAAW;IADvB,MAAM,CAAC,EAAE,CAAC;GACE,WAAW,CAuCvB"}
@@ -6,6 +6,22 @@ import { DecafRequestContext } from "./request/index";
6
6
  export interface DecafRequestHandler<C extends DecafRequestContext = DecafRequestContext> {
7
7
  handle(context: C, req: Request, res: Response): Promise<void>;
8
8
  }
9
+ export interface ObserverEventsOptions {
10
+ /**
11
+ * Enables or disables SSE stream events globally
12
+ */
13
+ enableObserverEvents?: boolean;
14
+ /**
15
+ * List of adapter flavours that will emit stream events
16
+ * If omitted, all registered flavours may be used
17
+ */
18
+ observerFlavours?: any[];
19
+ /**
20
+ * SSE endpoint path
21
+ * @default "/events"
22
+ */
23
+ observerApiPath?: string;
24
+ }
9
25
  /**
10
26
  * @publicApi
11
27
  */
@@ -21,6 +37,7 @@ export type DecafModuleOptions<CONF = any, A extends Adapter<CONF, any, any, any
21
37
  alias?: string;
22
38
  autoControllers: boolean;
23
39
  autoServices?: boolean;
40
+ observerOptions?: ObserverEventsOptions;
24
41
  handlers?: Type<DecafRequestHandler>[];
25
42
  };
26
43
  /**
@@ -0,0 +1,43 @@
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 DecafStreamModule_1;
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.DecafStreamModule = void 0;
11
+ const common_1 = require("@nestjs/common");
12
+ const events_controller_1 = require("./events.controller");
13
+ const core_1 = require("@nestjs/core");
14
+ const constant_1 = require("./constant.cjs");
15
+ const index_1 = require("./../request/index.cjs");
16
+ let DecafStreamModule = DecafStreamModule_1 = class DecafStreamModule {
17
+ static forFlavours(flavours, path = "events") {
18
+ return {
19
+ module: DecafStreamModule_1,
20
+ controllers: [events_controller_1.EventsController],
21
+ imports: [
22
+ core_1.RouterModule.register([
23
+ {
24
+ path: path.replace(/^\//, ""),
25
+ module: DecafStreamModule_1,
26
+ },
27
+ ]),
28
+ ],
29
+ providers: [
30
+ index_1.DecafRequestContext,
31
+ {
32
+ provide: constant_1.LISTENING_ADAPTERS_FLAVOURS,
33
+ useValue: flavours ?? [],
34
+ },
35
+ ],
36
+ };
37
+ }
38
+ };
39
+ exports.DecafStreamModule = DecafStreamModule;
40
+ exports.DecafStreamModule = DecafStreamModule = DecafStreamModule_1 = __decorate([
41
+ (0, common_1.Module)({})
42
+ ], DecafStreamModule);
43
+ //# sourceMappingURL=DecafStreamModule.js.map
@@ -0,0 +1,4 @@
1
+ import { DynamicModule } from "@nestjs/common";
2
+ export declare class DecafStreamModule {
3
+ static forFlavours(flavours: string[], path?: string): DynamicModule;
4
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DecafStreamModule.js","sourceRoot":"","sources":["../../src/events-module/DecafStreamModule.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAAuD;AACvD,2DAAuD;AACvD,uCAA4C;AAC5C,6CAAyD;AACzD,kDAAuD;AAGhD,IAAM,iBAAiB,yBAAvB,MAAM,iBAAiB;IAC5B,MAAM,CAAC,WAAW,CAChB,QAAkB,EAClB,OAAe,QAAQ;QAEvB,OAAO;YACL,MAAM,EAAE,mBAAiB;YACzB,WAAW,EAAE,CAAC,oCAAgB,CAAC;YAC/B,OAAO,EAAE;gBACP,mBAAY,CAAC,QAAQ,CAAC;oBACpB;wBACE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;wBAC7B,MAAM,EAAE,mBAAiB;qBAC1B;iBACF,CAAC;aACH;YACD,SAAS,EAAE;gBACT,2BAAmB;gBACnB;oBACE,OAAO,EAAE,sCAA2B;oBACpC,QAAQ,EAAE,QAAQ,IAAI,EAAE;iBACzB;aACF;SACF,CAAC;IACJ,CAAC;CACF,CAAA;AAzBY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,iBAAiB,CAyB7B"}
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LISTENING_ADAPTERS_FLAVOURS = void 0;
4
+ exports.LISTENING_ADAPTERS_FLAVOURS = Symbol("LISTENING_ADAPTERS_FLAVOURS");
5
+ //# sourceMappingURL=constant.js.map
@@ -0,0 +1 @@
1
+ export declare const LISTENING_ADAPTERS_FLAVOURS: unique symbol;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constant.js","sourceRoot":"","sources":["../../src/events-module/constant.ts"],"names":[],"mappings":";;;AAAa,QAAA,2BAA2B,GAAG,MAAM,CAC/C,6BAA6B,CAC9B,CAAC"}
@@ -0,0 +1,115 @@
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 __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var EventsController_1;
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.EventsController = void 0;
17
+ const controllers_1 = require("./../controllers.cjs");
18
+ const index_1 = require("./../request/index.cjs");
19
+ const core_1 = require("@decaf-ts/core");
20
+ const common_1 = require("@nestjs/common");
21
+ const rxjs_1 = require("rxjs");
22
+ const logging_1 = require("@decaf-ts/logging");
23
+ const constant_1 = require("./constant.cjs");
24
+ const utils_1 = require("./utils.cjs");
25
+ let EventsController = EventsController_1 = class EventsController extends controllers_1.DecafController {
26
+ constructor(clientContext, flavours) {
27
+ super(clientContext, EventsController_1.name);
28
+ this.adapters = flavours.map((flavour) => core_1.Adapter.get(flavour)); // change to Adapter.cache("")
29
+ }
30
+ listen() {
31
+ const logger = logging_1.Logging.for(EventsController_1.name);
32
+ return new rxjs_1.Observable((observer) => {
33
+ const cb = new (class {
34
+ refresh(...args) {
35
+ return Promise.resolve().then(() => {
36
+ const data = (0, utils_1.normalizeEventResponse)(args);
37
+ observer.next({ data });
38
+ });
39
+ }
40
+ })();
41
+ // if (!events || events.length === 0)
42
+ // return observer.error({
43
+ // message: `${NotFoundError.name} - No events available to listen for role: ${type}.`,
44
+ // });
45
+ try {
46
+ for (const adapter of this.adapters) {
47
+ adapter.observe(cb);
48
+ }
49
+ }
50
+ catch (e) {
51
+ observer.error(`Failed to observe event: ${e.message || e}`);
52
+ }
53
+ return () => {
54
+ try {
55
+ for (const adapter of this.adapters) {
56
+ adapter.unObserve(cb);
57
+ }
58
+ }
59
+ catch (e) {
60
+ logger.error(e);
61
+ }
62
+ };
63
+ });
64
+ }
65
+ listenForModel(model) {
66
+ const logger = logging_1.Logging.for(EventsController_1.name);
67
+ return new rxjs_1.Observable((observer) => {
68
+ const cb = new (class {
69
+ refresh(...args) {
70
+ return Promise.resolve().then(() => {
71
+ observer.next({ data: args });
72
+ });
73
+ }
74
+ })();
75
+ try {
76
+ for (const adapter of this.adapters) {
77
+ adapter.observe(cb);
78
+ }
79
+ }
80
+ catch (e) {
81
+ observer.error(`Failed to observe event: ${e.message || e}`);
82
+ }
83
+ return () => {
84
+ try {
85
+ for (const adapter of this.adapters) {
86
+ adapter.unObserve(cb);
87
+ }
88
+ }
89
+ catch (e) {
90
+ logger.error(e);
91
+ }
92
+ };
93
+ });
94
+ }
95
+ };
96
+ exports.EventsController = EventsController;
97
+ __decorate([
98
+ (0, common_1.Sse)(),
99
+ __metadata("design:type", Function),
100
+ __metadata("design:paramtypes", []),
101
+ __metadata("design:returntype", rxjs_1.Observable)
102
+ ], EventsController.prototype, "listen", null);
103
+ __decorate([
104
+ (0, common_1.Sse)("/:model"),
105
+ __param(0, (0, common_1.Query)("model")),
106
+ __metadata("design:type", Function),
107
+ __metadata("design:paramtypes", [String]),
108
+ __metadata("design:returntype", rxjs_1.Observable)
109
+ ], EventsController.prototype, "listenForModel", null);
110
+ exports.EventsController = EventsController = EventsController_1 = __decorate([
111
+ (0, common_1.Controller)(),
112
+ __param(1, (0, common_1.Inject)(constant_1.LISTENING_ADAPTERS_FLAVOURS)),
113
+ __metadata("design:paramtypes", [index_1.DecafRequestContext, Array])
114
+ ], EventsController);
115
+ //# sourceMappingURL=events.controller.js.map
@@ -0,0 +1,10 @@
1
+ import { DecafController } from "../controllers";
2
+ import { DecafRequestContext } from "../request/index";
3
+ import { Observable } from "rxjs";
4
+ import { DecafServerCtx } from "../constants";
5
+ export declare class EventsController extends DecafController<DecafServerCtx> {
6
+ private readonly adapters;
7
+ constructor(clientContext: DecafRequestContext, flavours: string[]);
8
+ listen(): Observable<MessageEvent>;
9
+ listenForModel(model: string): Observable<MessageEvent>;
10
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.controller.js","sourceRoot":"","sources":["../../src/events-module/events.controller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./DecafStreamModule.cjs"), exports);
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ export * from "./DecafStreamModule";
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/events-module/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0DAAoC"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.normalizeEventResponse = normalizeEventResponse;
4
+ function normalizeEventResponse(args) {
5
+ const [modelConstr, operation, id, payload] = args;
6
+ const modelName = modelConstr?.name ?? modelConstr;
7
+ const serializedPayload = Array.isArray(payload)
8
+ ? payload.map((e) => e.serialize())
9
+ : payload?.serialize();
10
+ return [modelName, operation, id, serializedPayload];
11
+ }
12
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ export declare function normalizeEventResponse(args: any[]): unknown[];
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/events-module/utils.ts"],"names":[],"mappings":";;AAAA,wDAUC;AAVD,SAAgB,sBAAsB,CAAC,IAAW;IAChD,MAAM,CAAC,WAAW,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAEnD,MAAM,SAAS,GAAG,WAAW,EAAE,IAAI,IAAI,WAAW,CAAC;IAEnD,MAAM,iBAAiB,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAC9C,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;QACnC,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC;IAEzB,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,iBAAiB,CAAC,CAAC;AACvD,CAAC"}
package/lib/index.cjs CHANGED
@@ -55,7 +55,7 @@ __exportStar(require("./utils.cjs"), exports);
55
55
  * @constant
56
56
  * @type {string}
57
57
  */
58
- exports.VERSION = "0.2.13";
58
+ exports.VERSION = "0.2.16";
59
59
  exports.PACKAGE_NAME = "@decaf-ts/for-nest";
60
60
  decoration_1.Metadata.registerLibrary(exports.PACKAGE_NAME, exports.VERSION);
61
61
  //# sourceMappingURL=index.js.map
package/lib/index.d.ts CHANGED
@@ -37,5 +37,5 @@ export * from "./utils";
37
37
  * @constant
38
38
  * @type {string}
39
39
  */
40
- export declare const VERSION = "0.2.13";
40
+ export declare const VERSION = "0.2.16";
41
41
  export declare const PACKAGE_NAME = "@decaf-ts/for-nest";
package/lib/module.cjs CHANGED
@@ -11,6 +11,7 @@ exports.DecafModule = void 0;
11
11
  const common_1 = require("@nestjs/common");
12
12
  const core_module_1 = require("./core-module.cjs");
13
13
  const index_1 = require("./decaf-model/index.cjs");
14
+ const events_module_1 = require("./events-module/index.cjs");
14
15
  /**
15
16
  * @publicApi
16
17
  */
@@ -28,6 +29,9 @@ let DecafModule = DecafModule_1 = class DecafModule {
28
29
  }));
29
30
  });
30
31
  }
32
+ if (options.observerOptions?.enableObserverEvents) {
33
+ imports.push(events_module_1.DecafStreamModule.forFlavours(flavours));
34
+ }
31
35
  return {
32
36
  module: DecafModule_1,
33
37
  imports: imports,
package/lib/module.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"module.js","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAA+E;AAE/E,mDAAgD;AAEhD,mDAAmD;AAEnD;;GAEG;AAEI,IAAM,WAAW,mBAAjB,MAAM,WAAW;IACtB,MAAM,CAAC,KAAK,CAAC,YAAY,CACvB,OAA2B;QAE3B,MAAM,EAAE,eAAe,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;QAE5D,MAAM,QAAQ,GACZ,MAAM,6BAAe,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAE5D,MAAM,OAAO,GAOG,CAAC,6BAAe,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QAEnD,IAAI,eAAe,EAAE,CAAC;YACpB,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC3B,OAAO,CAAC,IAAI,CACV,IAAA,oBAAY,EAAC,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE;oBACrC,YAAY;oBACZ,QAAQ;iBACT,CAAC,CACH,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO;YACL,MAAM,EAAE,aAAW;YACnB,OAAO,EAAE,OAAO;SACjB,CAAC;IACJ,CAAC;CACF,CAAA;AAnCY,kCAAW;sBAAX,WAAW;IADvB,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,WAAW,CAmCvB"}
1
+ {"version":3,"file":"module.js","sourceRoot":"","sources":["../src/module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAA+E;AAE/E,mDAAgD;AAEhD,mDAAmD;AACnD,6DAAoD;AAEpD;;GAEG;AAEI,IAAM,WAAW,mBAAjB,MAAM,WAAW;IACtB,MAAM,CAAC,KAAK,CAAC,YAAY,CACvB,OAA2B;QAE3B,MAAM,EAAE,eAAe,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;QAE5D,MAAM,QAAQ,GACZ,MAAM,6BAAe,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAE5D,MAAM,OAAO,GAOG,CAAC,6BAAe,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;QAEnD,IAAI,eAAe,EAAE,CAAC;YACpB,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC3B,OAAO,CAAC,IAAI,CACV,IAAA,oBAAY,EAAC,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE;oBACrC,YAAY;oBACZ,QAAQ;iBACT,CAAC,CACH,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,OAAO,CAAC,eAAe,EAAE,oBAAoB,EAAE,CAAC;YAClD,OAAO,CAAC,IAAI,CAAC,iCAAiB,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;QACxD,CAAC;QAED,OAAO;YACL,MAAM,EAAE,aAAW;YACnB,OAAO,EAAE,OAAO;SACjB,CAAC;IACJ,CAAC;CACF,CAAA;AAvCY,kCAAW;sBAAX,WAAW;IADvB,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,WAAW,CAuCvB"}
package/lib/types.d.ts CHANGED
@@ -6,6 +6,22 @@ import { DecafRequestContext } from "./request/index";
6
6
  export interface DecafRequestHandler<C extends DecafRequestContext = DecafRequestContext> {
7
7
  handle(context: C, req: Request, res: Response): Promise<void>;
8
8
  }
9
+ export interface ObserverEventsOptions {
10
+ /**
11
+ * Enables or disables SSE stream events globally
12
+ */
13
+ enableObserverEvents?: boolean;
14
+ /**
15
+ * List of adapter flavours that will emit stream events
16
+ * If omitted, all registered flavours may be used
17
+ */
18
+ observerFlavours?: any[];
19
+ /**
20
+ * SSE endpoint path
21
+ * @default "/events"
22
+ */
23
+ observerApiPath?: string;
24
+ }
9
25
  /**
10
26
  * @publicApi
11
27
  */
@@ -21,6 +37,7 @@ export type DecafModuleOptions<CONF = any, A extends Adapter<CONF, any, any, any
21
37
  alias?: string;
22
38
  autoControllers: boolean;
23
39
  autoServices?: boolean;
40
+ observerOptions?: ObserverEventsOptions;
24
41
  handlers?: Type<DecafRequestHandler>[];
25
42
  };
26
43
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@decaf-ts/for-nest",
3
- "version": "0.2.14",
3
+ "version": "0.2.16",
4
4
  "description": "NestJS decaf integration",
5
5
  "type": "module",
6
6
  "exports": {
@@ -99,6 +99,7 @@
99
99
  "@nestjs/testing": "^11.0.1",
100
100
  "@types/lodash": "^4.17.20",
101
101
  "commander": "^13.1.0",
102
+ "eventsource": "^4.1.0",
102
103
  "supertest": "^7.1.4"
103
104
  },
104
105
  "dependencies": {