@jdevel/tnest 0.0.2 → 0.0.4

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 (57) hide show
  1. package/README.md +260 -86
  2. package/dist/__tests__/constants.spec.d.ts +1 -0
  3. package/dist/__tests__/constants.spec.js +21 -0
  4. package/dist/__tests__/constants.spec.js.map +1 -0
  5. package/dist/__tests__/tnest-module.spec.d.ts +1 -0
  6. package/dist/__tests__/tnest-module.spec.js +88 -0
  7. package/dist/__tests__/tnest-module.spec.js.map +1 -0
  8. package/dist/client/__tests__/typed-client-factory.spec.d.ts +1 -0
  9. package/dist/client/__tests__/typed-client-factory.spec.js +35 -0
  10. package/dist/client/__tests__/typed-client-factory.spec.js.map +1 -0
  11. package/dist/client/__tests__/typed-client-types.spec.d.ts +1 -0
  12. package/dist/client/__tests__/typed-client-types.spec.js +18 -0
  13. package/dist/client/__tests__/typed-client-types.spec.js.map +1 -0
  14. package/dist/client/__tests__/typed-client.spec.d.ts +1 -0
  15. package/dist/client/__tests__/typed-client.spec.js +59 -0
  16. package/dist/client/__tests__/typed-client.spec.js.map +1 -0
  17. package/dist/contracts/__tests__/contract-types.spec.d.ts +1 -0
  18. package/dist/contracts/__tests__/contract-types.spec.js +91 -0
  19. package/dist/contracts/__tests__/contract-types.spec.js.map +1 -0
  20. package/dist/contracts/__tests__/define-helpers.spec.d.ts +1 -0
  21. package/dist/contracts/__tests__/define-helpers.spec.js +52 -0
  22. package/dist/contracts/__tests__/define-helpers.spec.js.map +1 -0
  23. package/dist/contracts/define-helpers.js.map +1 -1
  24. package/dist/handlers/__tests__/handler-types.spec.d.ts +1 -0
  25. package/dist/handlers/__tests__/handler-types.spec.js +17 -0
  26. package/dist/handlers/__tests__/handler-types.spec.js.map +1 -0
  27. package/dist/handlers/__tests__/typed-event-pattern.spec.d.ts +1 -0
  28. package/dist/handlers/__tests__/typed-event-pattern.spec.js +61 -0
  29. package/dist/handlers/__tests__/typed-event-pattern.spec.js.map +1 -0
  30. package/dist/handlers/__tests__/typed-message-pattern.spec.d.ts +1 -0
  31. package/dist/handlers/__tests__/typed-message-pattern.spec.js +94 -0
  32. package/dist/handlers/__tests__/typed-message-pattern.spec.js.map +1 -0
  33. package/dist/handlers/typed-event-pattern.decorator.d.ts +4 -2
  34. package/dist/handlers/typed-event-pattern.decorator.js.map +1 -1
  35. package/dist/handlers/typed-message-pattern.decorator.d.ts +5 -2
  36. package/dist/handlers/typed-message-pattern.decorator.js.map +1 -1
  37. package/dist/index.d.ts +1 -1
  38. package/dist/index.js.map +1 -1
  39. package/dist/interfaces/module-options.d.ts +1 -0
  40. package/dist/serialization/__tests__/default-serializer.spec.d.ts +1 -0
  41. package/dist/serialization/__tests__/default-serializer.spec.js +32 -0
  42. package/dist/serialization/__tests__/default-serializer.spec.js.map +1 -0
  43. package/dist/testing/__tests__/mock-typed-client.spec.d.ts +1 -0
  44. package/dist/testing/__tests__/mock-typed-client.spec.js +70 -0
  45. package/dist/testing/__tests__/mock-typed-client.spec.js.map +1 -0
  46. package/dist/testing/__tests__/test-contract-module.spec.d.ts +1 -0
  47. package/dist/testing/__tests__/test-contract-module.spec.js +30 -0
  48. package/dist/testing/__tests__/test-contract-module.spec.js.map +1 -0
  49. package/dist/testing/mock-typed-client.js.map +1 -1
  50. package/dist/tnest.module.d.ts +1 -0
  51. package/dist/tnest.module.js +21 -20
  52. package/dist/tnest.module.js.map +1 -1
  53. package/dist/validation/__tests__/validate-contract.spec.d.ts +1 -0
  54. package/dist/validation/__tests__/validate-contract.spec.js +102 -0
  55. package/dist/validation/__tests__/validate-contract.spec.js.map +1 -0
  56. package/dist/validation/validate-contract.decorator.js.map +1 -1
  57. package/package.json +30 -5
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const rxjs_1 = require("rxjs");
4
+ const microservices_1 = require("@nestjs/microservices");
5
+ const typed_client_factory_1 = require("../typed-client-factory");
6
+ const typed_client_1 = require("../typed-client");
7
+ describe('TypedClientFactory', () => {
8
+ let factory;
9
+ beforeEach(() => {
10
+ factory = new typed_client_factory_1.TypedClientFactory();
11
+ });
12
+ it('creates a TypedClient from a ClientProxy instance', () => {
13
+ const mockProxy = {
14
+ send: jest.fn().mockReturnValue((0, rxjs_1.of)(undefined)),
15
+ emit: jest.fn().mockReturnValue((0, rxjs_1.of)(undefined)),
16
+ connect: jest.fn().mockResolvedValue(undefined),
17
+ close: jest.fn(),
18
+ };
19
+ const client = factory.create(mockProxy);
20
+ expect(client).toBeInstanceOf(typed_client_1.TypedClient);
21
+ });
22
+ it('creates a TypedClient from ClientOptions using ClientProxyFactory', () => {
23
+ const mockProxy = {
24
+ send: jest.fn(),
25
+ emit: jest.fn(),
26
+ connect: jest.fn(),
27
+ close: jest.fn(),
28
+ };
29
+ jest.spyOn(microservices_1.ClientProxyFactory, 'create').mockReturnValue(mockProxy);
30
+ const client = factory.create({ transport: 0 });
31
+ expect(microservices_1.ClientProxyFactory.create).toHaveBeenCalledWith({ transport: 0 });
32
+ expect(client).toBeInstanceOf(typed_client_1.TypedClient);
33
+ });
34
+ });
35
+ //# sourceMappingURL=typed-client-factory.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typed-client-factory.spec.js","sourceRoot":"","sources":["../../../src/client/__tests__/typed-client-factory.spec.ts"],"names":[],"mappings":";;AAAA,+BAA0B;AAE1B,yDAA2D;AAC3D,kEAA6D;AAC7D,kDAA8C;AAQ9C,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,IAAI,OAA2B,CAAC;IAEhC,UAAU,CAAC,GAAG,EAAE;QACd,OAAO,GAAG,IAAI,yCAAkB,EAAE,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,SAAS,GAAG;YAChB,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,IAAA,SAAE,EAAC,SAAS,CAAC,CAAC;YAC9C,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,IAAA,SAAE,EAAC,SAAS,CAAC,CAAC;YAC9C,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;YAC/C,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE;SACS,CAAC;QAE5B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAe,SAAS,CAAC,CAAC;QAEvD,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,0BAAW,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC3E,MAAM,SAAS,GAAG;YAChB,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE;YACf,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE;YACf,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE;YAClB,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE;SACS,CAAC;QAE5B,IAAI,CAAC,KAAK,CAAC,kCAAkB,EAAE,QAAQ,CAAC,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;QAEpE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAe,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;QAG9D,MAAM,CAAC,kCAAkB,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;QACzE,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,0BAAW,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const expect_type_1 = require("expect-type");
4
+ describe('TypedClient type constraints', () => {
5
+ it('send() returns Observable of correct response type for command', () => {
6
+ (0, expect_type_1.expectTypeOf)().parameter(0).toExtend();
7
+ });
8
+ it('send() infers response type from pattern', () => {
9
+ (0, expect_type_1.expectTypeOf)().toExtend();
10
+ });
11
+ it('emit() accepts only event patterns', () => {
12
+ (0, expect_type_1.expectTypeOf)().parameter(0).toEqualTypeOf();
13
+ });
14
+ it('emit() returns Observable<undefined>', () => {
15
+ (0, expect_type_1.expectTypeOf)().toEqualTypeOf();
16
+ });
17
+ });
18
+ //# sourceMappingURL=typed-client-types.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typed-client-types.spec.js","sourceRoot":"","sources":["../../../src/client/__tests__/typed-client-types.spec.ts"],"names":[],"mappings":";;AAAA,6CAA2C;AAgB3C,QAAQ,CAAC,8BAA8B,EAAE,GAAG,EAAE;IAC5C,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACxE,IAAA,0BAAY,GAAkB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,QAAQ,EAA8B,CAAC;IACrF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAElD,IAAA,0BAAY,GAAc,CAAC,QAAQ,EAAuB,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,IAAA,0BAAY,GAAkB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,aAAa,EAAkB,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAE9C,IAAA,0BAAY,GAAc,CAAC,aAAa,EAAyB,CAAC;IACpE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const rxjs_1 = require("rxjs");
4
+ const rxjs_2 = require("rxjs");
5
+ const typed_client_1 = require("../typed-client");
6
+ function createMockClientProxy() {
7
+ return {
8
+ send: jest.fn().mockReturnValue((0, rxjs_1.of)(undefined)),
9
+ emit: jest.fn().mockReturnValue((0, rxjs_1.of)(undefined)),
10
+ connect: jest.fn().mockResolvedValue(undefined),
11
+ close: jest.fn(),
12
+ };
13
+ }
14
+ describe('TypedClient', () => {
15
+ let mockProxy;
16
+ let client;
17
+ beforeEach(() => {
18
+ mockProxy = createMockClientProxy();
19
+ client = new typed_client_1.TypedClient(mockProxy);
20
+ });
21
+ describe('send()', () => {
22
+ it('delegates to ClientProxy.send() with pattern and payload', async () => {
23
+ const payload = { name: 'Alice' };
24
+ const response = { id: '123' };
25
+ mockProxy.send.mockReturnValue((0, rxjs_1.of)(response));
26
+ const result = await (0, rxjs_2.firstValueFrom)(client.send('user.create', payload));
27
+ expect(mockProxy.send).toHaveBeenCalledWith('user.create', payload);
28
+ expect(result).toEqual(response);
29
+ });
30
+ it('works with query patterns', async () => {
31
+ const payload = { id: '123' };
32
+ const response = { name: 'Alice' };
33
+ mockProxy.send.mockReturnValue((0, rxjs_1.of)(response));
34
+ const result = await (0, rxjs_2.firstValueFrom)(client.send('user.get', payload));
35
+ expect(mockProxy.send).toHaveBeenCalledWith('user.get', payload);
36
+ expect(result).toEqual(response);
37
+ });
38
+ });
39
+ describe('emit()', () => {
40
+ it('delegates to ClientProxy.emit() with pattern and payload', async () => {
41
+ const payload = { userId: '123' };
42
+ await (0, rxjs_2.firstValueFrom)(client.emit('user.created', payload));
43
+ expect(mockProxy.emit).toHaveBeenCalledWith('user.created', payload);
44
+ });
45
+ });
46
+ describe('connect()', () => {
47
+ it('delegates to ClientProxy.connect()', async () => {
48
+ await client.connect();
49
+ expect(mockProxy.connect).toHaveBeenCalled();
50
+ });
51
+ });
52
+ describe('close()', () => {
53
+ it('delegates to ClientProxy.close()', () => {
54
+ client.close();
55
+ expect(mockProxy.close).toHaveBeenCalled();
56
+ });
57
+ });
58
+ });
59
+ //# sourceMappingURL=typed-client.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typed-client.spec.js","sourceRoot":"","sources":["../../../src/client/__tests__/typed-client.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const expect_type_1 = require("expect-type");
4
+ describe('Contract type branding', () => {
5
+ it('Command has __type "command"', () => {
6
+ (0, expect_type_1.expectTypeOf)().toHaveProperty('__type');
7
+ (0, expect_type_1.expectTypeOf)().toEqualTypeOf();
8
+ });
9
+ it('Event has __type "event"', () => {
10
+ (0, expect_type_1.expectTypeOf)().toHaveProperty('__type');
11
+ (0, expect_type_1.expectTypeOf)().toEqualTypeOf();
12
+ });
13
+ it('Query has __type "query"', () => {
14
+ (0, expect_type_1.expectTypeOf)().toHaveProperty('__type');
15
+ (0, expect_type_1.expectTypeOf)().toEqualTypeOf();
16
+ });
17
+ it('Command carries pattern, payload, and response', () => {
18
+ (0, expect_type_1.expectTypeOf)().toEqualTypeOf();
19
+ (0, expect_type_1.expectTypeOf)().toEqualTypeOf();
20
+ (0, expect_type_1.expectTypeOf)().toEqualTypeOf();
21
+ });
22
+ it('Event carries pattern and payload', () => {
23
+ (0, expect_type_1.expectTypeOf)().toEqualTypeOf();
24
+ (0, expect_type_1.expectTypeOf)().toEqualTypeOf();
25
+ });
26
+ it('Query carries pattern, payload, and response', () => {
27
+ (0, expect_type_1.expectTypeOf)().toEqualTypeOf();
28
+ (0, expect_type_1.expectTypeOf)().toEqualTypeOf();
29
+ (0, expect_type_1.expectTypeOf)().toEqualTypeOf();
30
+ });
31
+ });
32
+ describe('Utility types', () => {
33
+ it('PatternOf extracts pattern from any contract', () => {
34
+ (0, expect_type_1.expectTypeOf)().toEqualTypeOf();
35
+ (0, expect_type_1.expectTypeOf)().toEqualTypeOf();
36
+ (0, expect_type_1.expectTypeOf)().toEqualTypeOf();
37
+ });
38
+ it('PayloadOf extracts payload from any contract', () => {
39
+ (0, expect_type_1.expectTypeOf)().toEqualTypeOf();
40
+ (0, expect_type_1.expectTypeOf)().toEqualTypeOf();
41
+ (0, expect_type_1.expectTypeOf)().toEqualTypeOf();
42
+ });
43
+ it('ResponseOf extracts response from Command and Query', () => {
44
+ (0, expect_type_1.expectTypeOf)().toEqualTypeOf();
45
+ (0, expect_type_1.expectTypeOf)().toEqualTypeOf();
46
+ });
47
+ it('ResponseOf returns undefined for Event', () => {
48
+ (0, expect_type_1.expectTypeOf)().toEqualTypeOf();
49
+ });
50
+ });
51
+ describe('Registry filter types', () => {
52
+ it('CommandsOf filters to commands only', () => {
53
+ (0, expect_type_1.expectTypeOf)().toHaveProperty('user.create');
54
+ (0, expect_type_1.expectTypeOf)().toEqualTypeOf();
55
+ });
56
+ it('EventsOf filters to events only', () => {
57
+ (0, expect_type_1.expectTypeOf)().toHaveProperty('user.created');
58
+ (0, expect_type_1.expectTypeOf)().toEqualTypeOf();
59
+ });
60
+ it('QueriesOf filters to queries only', () => {
61
+ (0, expect_type_1.expectTypeOf)().toHaveProperty('user.get');
62
+ (0, expect_type_1.expectTypeOf)().toEqualTypeOf();
63
+ });
64
+ it('CommandPatterns produces correct string union', () => {
65
+ (0, expect_type_1.expectTypeOf)().toEqualTypeOf();
66
+ });
67
+ it('EventPatterns produces correct string union', () => {
68
+ (0, expect_type_1.expectTypeOf)().toEqualTypeOf();
69
+ });
70
+ it('QueryPatterns produces correct string union', () => {
71
+ (0, expect_type_1.expectTypeOf)().toEqualTypeOf();
72
+ });
73
+ it('SendablePatterns is union of command and query patterns', () => {
74
+ (0, expect_type_1.expectTypeOf)().toEqualTypeOf();
75
+ });
76
+ });
77
+ describe('ValidateRegistry', () => {
78
+ it('accepts a valid registry (patterns match keys)', () => {
79
+ (0, expect_type_1.expectTypeOf)().toEqualTypeOf();
80
+ (0, expect_type_1.expectTypeOf)().toEqualTypeOf();
81
+ (0, expect_type_1.expectTypeOf)().toEqualTypeOf();
82
+ });
83
+ });
84
+ describe('AnyContract', () => {
85
+ it('accepts Command, Event, and Query', () => {
86
+ (0, expect_type_1.expectTypeOf)().toExtend();
87
+ (0, expect_type_1.expectTypeOf)().toExtend();
88
+ (0, expect_type_1.expectTypeOf)().toExtend();
89
+ });
90
+ });
91
+ //# sourceMappingURL=contract-types.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract-types.spec.js","sourceRoot":"","sources":["../../../src/contracts/__tests__/contract-types.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const expect_type_1 = require("expect-type");
4
+ const define_helpers_1 = require("../define-helpers");
5
+ describe('command()', () => {
6
+ it('returns Command type with given payload and response', () => {
7
+ const c = (0, define_helpers_1.command)();
8
+ (0, expect_type_1.expectTypeOf)(c).toExtend();
9
+ });
10
+ it('defaults payload to void and response to void', () => {
11
+ const c = (0, define_helpers_1.command)();
12
+ (0, expect_type_1.expectTypeOf)(c).toExtend();
13
+ });
14
+ });
15
+ describe('event()', () => {
16
+ it('returns Event type with given payload', () => {
17
+ const e = (0, define_helpers_1.event)();
18
+ (0, expect_type_1.expectTypeOf)(e).toExtend();
19
+ });
20
+ it('defaults payload to void', () => {
21
+ const e = (0, define_helpers_1.event)();
22
+ (0, expect_type_1.expectTypeOf)(e).toExtend();
23
+ });
24
+ });
25
+ describe('query()', () => {
26
+ it('returns Query type with given payload and response', () => {
27
+ const q = (0, define_helpers_1.query)();
28
+ (0, expect_type_1.expectTypeOf)(q).toExtend();
29
+ });
30
+ });
31
+ describe('defineRegistry()', () => {
32
+ const _registry = (0, define_helpers_1.defineRegistry)({
33
+ 'user.create': (0, define_helpers_1.command)(),
34
+ 'user.created': (0, define_helpers_1.event)(),
35
+ 'user.get': (0, define_helpers_1.query)(),
36
+ });
37
+ it('infers pattern keys from object keys', () => {
38
+ (0, expect_type_1.expectTypeOf)().toEqualTypeOf();
39
+ (0, expect_type_1.expectTypeOf)().toEqualTypeOf();
40
+ (0, expect_type_1.expectTypeOf)().toEqualTypeOf();
41
+ });
42
+ it('preserves payload types', () => {
43
+ (0, expect_type_1.expectTypeOf)().toEqualTypeOf();
44
+ (0, expect_type_1.expectTypeOf)().toEqualTypeOf();
45
+ (0, expect_type_1.expectTypeOf)().toEqualTypeOf();
46
+ });
47
+ it('preserves response types', () => {
48
+ (0, expect_type_1.expectTypeOf)().toEqualTypeOf();
49
+ (0, expect_type_1.expectTypeOf)().toEqualTypeOf();
50
+ });
51
+ });
52
+ //# sourceMappingURL=define-helpers.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define-helpers.spec.js","sourceRoot":"","sources":["../../../src/contracts/__tests__/define-helpers.spec.ts"],"names":[],"mappings":";;AAAA,6CAA2C;AAC3C,sDAA0E;AAY1E,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,CAAC,GAAG,IAAA,wBAAO,GAAoC,CAAC;QACtD,IAAA,0BAAY,EAAC,CAAC,CAAC,CAAC,QAAQ,EAAqD,CAAC;IAChF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,CAAC,GAAG,IAAA,wBAAO,GAAE,CAAC;QACpB,IAAA,0BAAY,EAAC,CAAC,CAAC,CAAC,QAAQ,EAAyB,CAAC;IACpD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;IACvB,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,CAAC,GAAG,IAAA,sBAAK,GAAsB,CAAC;QACtC,IAAA,0BAAY,EAAC,CAAC,CAAC,CAAC,QAAQ,EAAqC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,CAAC,GAAG,IAAA,sBAAK,GAAE,CAAC;QAClB,IAAA,0BAAY,EAAC,CAAC,CAAC,CAAC,QAAQ,EAAuB,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;IACvB,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,CAAC,GAAG,IAAA,sBAAK,GAAoC,CAAC;QACpD,IAAA,0BAAY,EAAC,CAAC,CAAC,CAAC,QAAQ,EAAmD,CAAC;IAC9E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,MAAM,SAAS,GAAG,IAAA,+BAAc,EAAC;QAC/B,aAAa,EAAE,IAAA,wBAAO,GAAoC;QAC1D,cAAc,EAAE,IAAA,sBAAK,GAAsB;QAC3C,UAAU,EAAE,IAAA,sBAAK,GAAoC;KACtD,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,IAAA,0BAAY,GAAqC,CAAC,aAAa,EAAiB,CAAC;QACjF,IAAA,0BAAY,GAAmC,CAAC,aAAa,EAAkB,CAAC;QAChF,IAAA,0BAAY,GAAmC,CAAC,aAAa,EAAc,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,IAAA,0BAAY,GAAgD,CAAC,aAAa,EAAoB,CAAC;QAC/F,IAAA,0BAAY,GAAiD,CAAC,aAAa,EAEvE,CAAC;QACL,IAAA,0BAAY,GAA6C,CAAC,aAAa,EAAkB,CAAC;IAC5F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,IAAA,0BAAY,GAAiD,CAAC,aAAa,EAAkB,CAAC;QAC9F,IAAA,0BAAY,GAA8C,CAAC,aAAa,EAAoB,CAAC;IAC/F,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"define-helpers.js","sourceRoot":"","sources":["../../src/contracts/define-helpers.ts"],"names":[],"mappings":";;AAKA,0BAEC;AAED,sBAEC;AAED,sBAEC;AAUD,wCAIC;AAxBD,SAAgB,OAAO;IACrB,OAAO,SAAgB,CAAC;AAC1B,CAAC;AAED,SAAgB,KAAK;IACnB,OAAO,SAAgB,CAAC;AAC1B,CAAC;AAED,SAAgB,KAAK;IACnB,OAAO,SAAgB,CAAC;AAC1B,CAAC;AAUD,SAAgB,cAAc,CAC5B,SAAY;IAEZ,OAAO,SAAgB,CAAC;AAC1B,CAAC"}
1
+ {"version":3,"file":"define-helpers.js","sourceRoot":"","sources":["../../src/contracts/define-helpers.ts"],"names":[],"mappings":";;AAOA,0BAEC;AAED,sBAEC;AAED,sBAEC;AAYD,wCAIC;AA1BD,SAAgB,OAAO;IACrB,OAAO,SAAgB,CAAC;AAC1B,CAAC;AAED,SAAgB,KAAK;IACnB,OAAO,SAAgB,CAAC;AAC1B,CAAC;AAED,SAAgB,KAAK;IACnB,OAAO,SAAgB,CAAC;AAC1B,CAAC;AAYD,SAAgB,cAAc,CAC5B,SAAY;IAEZ,OAAO,SAAgB,CAAC;AAC1B,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const expect_type_1 = require("expect-type");
4
+ describe('TypedMessageHandler', () => {
5
+ it('accepts payload and returns response for command', () => {
6
+ (0, expect_type_1.expectTypeOf)().toEqualTypeOf();
7
+ });
8
+ it('accepts payload and returns response for query', () => {
9
+ (0, expect_type_1.expectTypeOf)().toEqualTypeOf();
10
+ });
11
+ });
12
+ describe('TypedEventHandler', () => {
13
+ it('accepts payload and returns void', () => {
14
+ (0, expect_type_1.expectTypeOf)().toEqualTypeOf();
15
+ });
16
+ });
17
+ //# sourceMappingURL=handler-types.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler-types.spec.js","sourceRoot":"","sources":["../../../src/handlers/__tests__/handler-types.spec.ts"],"names":[],"mappings":";;AAAA,6CAA2C;AAa3C,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAE1D,IAAA,0BAAY,GAAuB,CAAC,aAAa,EAAsB,CAAC;IAC1E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QAExD,IAAA,0BAAY,GAAuB,CAAC,aAAa,EAAoB,CAAC;IACxE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAE1C,IAAA,0BAAY,GAAuB,CAAC,aAAa,EAAwB,CAAC;IAC5E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ import 'reflect-metadata';
@@ -0,0 +1,61 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ require("reflect-metadata");
13
+ const constants_1 = require("@nestjs/microservices/constants");
14
+ const typed_event_pattern_decorator_1 = require("../typed-event-pattern.decorator");
15
+ describe('TypedEventPattern', () => {
16
+ it('applies @EventPattern metadata with the given pattern', () => {
17
+ class TestHandler {
18
+ handle(_payload) {
19
+ }
20
+ }
21
+ __decorate([
22
+ (0, typed_event_pattern_decorator_1.TypedEventPattern)('user.created'),
23
+ __metadata("design:type", Function),
24
+ __metadata("design:paramtypes", [Object]),
25
+ __metadata("design:returntype", void 0)
26
+ ], TestHandler.prototype, "handle", null);
27
+ const metadata = Reflect.getMetadata(constants_1.PATTERN_METADATA, TestHandler.prototype.handle);
28
+ const handlerType = Reflect.getMetadata(constants_1.PATTERN_HANDLER_METADATA, TestHandler.prototype.handle);
29
+ expect(metadata).toEqual(['user.created']);
30
+ expect(handlerType).toBe(2);
31
+ });
32
+ it('enforces method signature when pattern type parameter is provided', () => {
33
+ class TestHandler {
34
+ handle(_payload) {
35
+ }
36
+ }
37
+ __decorate([
38
+ (0, typed_event_pattern_decorator_1.TypedEventPattern)('user.created'),
39
+ __metadata("design:type", Function),
40
+ __metadata("design:paramtypes", [Object]),
41
+ __metadata("design:returntype", void 0)
42
+ ], TestHandler.prototype, "handle", null);
43
+ const metadata = Reflect.getMetadata(constants_1.PATTERN_METADATA, TestHandler.prototype.handle);
44
+ expect(metadata).toEqual(['user.created']);
45
+ });
46
+ it('enforces async method signature when pattern type parameter is provided', () => {
47
+ class TestHandler {
48
+ async handle(_payload) {
49
+ }
50
+ }
51
+ __decorate([
52
+ (0, typed_event_pattern_decorator_1.TypedEventPattern)('user.created'),
53
+ __metadata("design:type", Function),
54
+ __metadata("design:paramtypes", [Object]),
55
+ __metadata("design:returntype", Promise)
56
+ ], TestHandler.prototype, "handle", null);
57
+ const metadata = Reflect.getMetadata(constants_1.PATTERN_METADATA, TestHandler.prototype.handle);
58
+ expect(metadata).toEqual(['user.created']);
59
+ });
60
+ });
61
+ //# sourceMappingURL=typed-event-pattern.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typed-event-pattern.spec.js","sourceRoot":"","sources":["../../../src/handlers/__tests__/typed-event-pattern.spec.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,4BAA0B;AAC1B,+DAA6F;AAC7F,oFAAqE;AAQrE,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,WAAW;YAEf,MAAM,CAAC,QAA4B;YAEnC,CAAC;SACF;QAHC;YADC,IAAA,iDAAiB,EAAe,cAAc,CAAC;;;;iDAG/C;QAIH,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,4BAAgB,EAAE,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAErF,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,oCAAwB,EAAE,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAEhG,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;QAC3C,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC3E,MAAM,WAAW;YAEf,MAAM,CAAC,QAA4B;YAEnC,CAAC;SACF;QAHC;YADC,IAAA,iDAAiB,EAA+B,cAAc,CAAC;;;;iDAG/D;QAIH,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,4BAAgB,EAAE,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAErF,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yEAAyE,EAAE,GAAG,EAAE;QACjF,MAAM,WAAW;YAET,AAAN,KAAK,CAAC,MAAM,CAAC,QAA4B;YAEzC,CAAC;SACF;QAHO;YADL,IAAA,iDAAiB,EAA+B,cAAc,CAAC;;;;iDAG/D;QAIH,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,4BAAgB,EAAE,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAErF,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ import 'reflect-metadata';
@@ -0,0 +1,94 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ require("reflect-metadata");
13
+ const constants_1 = require("@nestjs/microservices/constants");
14
+ const typed_message_pattern_decorator_1 = require("../typed-message-pattern.decorator");
15
+ describe('TypedMessagePattern', () => {
16
+ it('applies @MessagePattern metadata with the given pattern', () => {
17
+ class TestHandler {
18
+ handle(_payload) {
19
+ return { id: '1' };
20
+ }
21
+ }
22
+ __decorate([
23
+ (0, typed_message_pattern_decorator_1.TypedMessagePattern)('user.create'),
24
+ __metadata("design:type", Function),
25
+ __metadata("design:paramtypes", [Object]),
26
+ __metadata("design:returntype", Object)
27
+ ], TestHandler.prototype, "handle", null);
28
+ const metadata = Reflect.getMetadata(constants_1.PATTERN_METADATA, TestHandler.prototype.handle);
29
+ const handlerType = Reflect.getMetadata(constants_1.PATTERN_HANDLER_METADATA, TestHandler.prototype.handle);
30
+ expect(metadata).toEqual(['user.create']);
31
+ expect(handlerType).toBe(1);
32
+ });
33
+ it('works with query patterns', () => {
34
+ class TestHandler {
35
+ handle(_payload) {
36
+ return { name: 'Alice' };
37
+ }
38
+ }
39
+ __decorate([
40
+ (0, typed_message_pattern_decorator_1.TypedMessagePattern)('user.get'),
41
+ __metadata("design:type", Function),
42
+ __metadata("design:paramtypes", [Object]),
43
+ __metadata("design:returntype", Object)
44
+ ], TestHandler.prototype, "handle", null);
45
+ const metadata = Reflect.getMetadata(constants_1.PATTERN_METADATA, TestHandler.prototype.handle);
46
+ expect(metadata).toEqual(['user.get']);
47
+ });
48
+ it('enforces method signature when pattern type parameter is provided', () => {
49
+ class TestHandler {
50
+ handle(_payload) {
51
+ return { id: '1' };
52
+ }
53
+ }
54
+ __decorate([
55
+ (0, typed_message_pattern_decorator_1.TypedMessagePattern)('user.create'),
56
+ __metadata("design:type", Function),
57
+ __metadata("design:paramtypes", [Object]),
58
+ __metadata("design:returntype", Object)
59
+ ], TestHandler.prototype, "handle", null);
60
+ const metadata = Reflect.getMetadata(constants_1.PATTERN_METADATA, TestHandler.prototype.handle);
61
+ expect(metadata).toEqual(['user.create']);
62
+ });
63
+ it('enforces query method signature when pattern type parameter is provided', () => {
64
+ class TestHandler {
65
+ handle(_payload) {
66
+ return { name: 'Alice' };
67
+ }
68
+ }
69
+ __decorate([
70
+ (0, typed_message_pattern_decorator_1.TypedMessagePattern)('user.get'),
71
+ __metadata("design:type", Function),
72
+ __metadata("design:paramtypes", [Object]),
73
+ __metadata("design:returntype", Object)
74
+ ], TestHandler.prototype, "handle", null);
75
+ const metadata = Reflect.getMetadata(constants_1.PATTERN_METADATA, TestHandler.prototype.handle);
76
+ expect(metadata).toEqual(['user.get']);
77
+ });
78
+ it('enforces async method signature when pattern type parameter is provided', () => {
79
+ class TestHandler {
80
+ async handle(_payload) {
81
+ return { id: '1' };
82
+ }
83
+ }
84
+ __decorate([
85
+ (0, typed_message_pattern_decorator_1.TypedMessagePattern)('user.create'),
86
+ __metadata("design:type", Function),
87
+ __metadata("design:paramtypes", [Object]),
88
+ __metadata("design:returntype", Promise)
89
+ ], TestHandler.prototype, "handle", null);
90
+ const metadata = Reflect.getMetadata(constants_1.PATTERN_METADATA, TestHandler.prototype.handle);
91
+ expect(metadata).toEqual(['user.create']);
92
+ });
93
+ });
94
+ //# sourceMappingURL=typed-message-pattern.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typed-message-pattern.spec.js","sourceRoot":"","sources":["../../../src/handlers/__tests__/typed-message-pattern.spec.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,4 @@
1
- import type { ContractRegistry, EventPatterns } from '../contracts';
2
- export declare function TypedEventPattern<TRegistry extends ContractRegistry>(pattern: EventPatterns<TRegistry>): MethodDecorator;
1
+ import type { ContractRegistry, EventPatterns, PayloadOf } from '../contracts';
2
+ type EventMethodDecorator<TRegistry extends ContractRegistry, P extends string & keyof TRegistry> = (target: object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor<(data: PayloadOf<TRegistry[P]>) => void> | TypedPropertyDescriptor<(data: PayloadOf<TRegistry[P]>) => Promise<void>>) => void;
3
+ export declare function TypedEventPattern<TRegistry extends ContractRegistry, P extends EventPatterns<TRegistry> = never>(pattern: [P] extends [never] ? EventPatterns<TRegistry> : P): [P] extends [never] ? MethodDecorator : EventMethodDecorator<TRegistry, P>;
4
+ export {};
@@ -1 +1 @@
1
- {"version":3,"file":"typed-event-pattern.decorator.js","sourceRoot":"","sources":["../../src/handlers/typed-event-pattern.decorator.ts"],"names":[],"mappings":";;AAGA,8CAIC;AAPD,yDAAqD;AAGrD,SAAgB,iBAAiB,CAE/B,OAAiC;IACjC,OAAO,IAAA,4BAAY,EAAC,OAAO,CAAC,CAAC;AAC/B,CAAC"}
1
+ {"version":3,"file":"typed-event-pattern.decorator.js","sourceRoot":"","sources":["../../src/handlers/typed-event-pattern.decorator.ts"],"names":[],"mappings":";;AAgBA,8CAQC;AAxBD,yDAAqD;AAgBrD,SAAgB,iBAAiB,CAI/B,OAA2D;IAG3D,OAAO,IAAA,4BAAY,EAAC,OAAiB,CAAQ,CAAC;AAChD,CAAC"}
@@ -1,2 +1,5 @@
1
- import type { ContractRegistry, CommandPatterns, QueryPatterns } from '../contracts';
2
- export declare function TypedMessagePattern<TRegistry extends ContractRegistry>(pattern: CommandPatterns<TRegistry> | QueryPatterns<TRegistry>): MethodDecorator;
1
+ import type { Observable } from 'rxjs';
2
+ import type { ContractRegistry, CommandPatterns, QueryPatterns, PayloadOf, ResponseOf } from '../contracts';
3
+ type MessageMethodDecorator<TRegistry extends ContractRegistry, P extends string & keyof TRegistry> = (target: object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor<(data: PayloadOf<TRegistry[P]>) => ResponseOf<TRegistry[P]>> | TypedPropertyDescriptor<(data: PayloadOf<TRegistry[P]>) => Promise<ResponseOf<TRegistry[P]>>> | TypedPropertyDescriptor<(data: PayloadOf<TRegistry[P]>) => Observable<ResponseOf<TRegistry[P]>>>) => void;
4
+ export declare function TypedMessagePattern<TRegistry extends ContractRegistry, P extends CommandPatterns<TRegistry> | QueryPatterns<TRegistry> = never>(pattern: [P] extends [never] ? CommandPatterns<TRegistry> | QueryPatterns<TRegistry> : P): [P] extends [never] ? MethodDecorator : MessageMethodDecorator<TRegistry, P>;
5
+ export {};
@@ -1 +1 @@
1
- {"version":3,"file":"typed-message-pattern.decorator.js","sourceRoot":"","sources":["../../src/handlers/typed-message-pattern.decorator.ts"],"names":[],"mappings":";;AAOA,kDAIC;AAXD,yDAAuD;AAOvD,SAAgB,mBAAmB,CAEjC,OAA8D;IAC9D,OAAO,IAAA,8BAAc,EAAC,OAAO,CAAC,CAAC;AACjC,CAAC"}
1
+ {"version":3,"file":"typed-message-pattern.decorator.js","sourceRoot":"","sources":["../../src/handlers/typed-message-pattern.decorator.ts"],"names":[],"mappings":";;AA0BA,kDAQC;AAlCD,yDAAuD;AA0BvD,SAAgB,mBAAmB,CAIjC,OAAwF;IAGxF,OAAO,IAAA,8BAAc,EAAC,OAAiB,CAAQ,CAAC;AAClD,CAAC"}
package/dist/index.d.ts CHANGED
@@ -11,7 +11,7 @@ export type { TnestClientDefinition, TnestModuleOptions, TnestOptionsFactory, Tn
11
11
  export { ValidateContract } from './validation';
12
12
  export { CONTRACT_VALIDATOR } from './validation';
13
13
  export type { ContractValidator } from './validation';
14
- export { DefaultPayloadSerializer, PAYLOAD_SERIALIZER, PAYLOAD_DESERIALIZER } from './serialization';
14
+ export { DefaultPayloadSerializer, PAYLOAD_SERIALIZER, PAYLOAD_DESERIALIZER, } from './serialization';
15
15
  export type { PayloadSerializer, PayloadDeserializer } from './serialization';
16
16
  export { MockTypedClient } from './testing';
17
17
  export { TestContractModule } from './testing';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,+CAA6C;AAApC,2GAAA,WAAW,OAAA;AAGpB,yCAA4D;AAAnD,0GAAA,aAAa,OAAA;AAAE,2GAAA,cAAc,OAAA;AAqBtC,yCAAoE;AAA3D,oGAAA,OAAO,OAAA;AAAE,kGAAA,KAAK,OAAA;AAAE,kGAAA,KAAK,OAAA;AAAE,2GAAA,cAAc,OAAA;AAG9C,mCAAuC;AAA9B,qGAAA,WAAW,OAAA;AACpB,mCAA8C;AAArC,4GAAA,kBAAkB,OAAA;AAG3B,uCAAiD;AAAxC,+GAAA,mBAAmB,OAAA;AAC5B,uCAA+C;AAAtC,6GAAA,iBAAiB,OAAA;AAY1B,2CAAgD;AAAvC,8GAAA,gBAAgB,OAAA;AACzB,2CAAkD;AAAzC,gHAAA,kBAAkB,OAAA;AAI3B,iDAAqG;AAA5F,yHAAA,wBAAwB,OAAA;AAAE,mHAAA,kBAAkB,OAAA;AAAE,qHAAA,oBAAoB,OAAA;AAI3E,qCAA4C;AAAnC,0GAAA,eAAe,OAAA;AACxB,qCAA+C;AAAtC,6GAAA,kBAAkB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,+CAA6C;AAApC,2GAAA,WAAW,OAAA;AAGpB,yCAA4D;AAAnD,0GAAA,aAAa,OAAA;AAAE,2GAAA,cAAc,OAAA;AAqBtC,yCAAoE;AAA3D,oGAAA,OAAO,OAAA;AAAE,kGAAA,KAAK,OAAA;AAAE,kGAAA,KAAK,OAAA;AAAE,2GAAA,cAAc,OAAA;AAG9C,mCAAuC;AAA9B,qGAAA,WAAW,OAAA;AACpB,mCAA8C;AAArC,4GAAA,kBAAkB,OAAA;AAG3B,uCAAiD;AAAxC,+GAAA,mBAAmB,OAAA;AAC5B,uCAA+C;AAAtC,6GAAA,iBAAiB,OAAA;AAY1B,2CAAgD;AAAvC,8GAAA,gBAAgB,OAAA;AACzB,2CAAkD;AAAzC,gHAAA,kBAAkB,OAAA;AAI3B,iDAIyB;AAHvB,yHAAA,wBAAwB,OAAA;AACxB,mHAAA,kBAAkB,OAAA;AAClB,qHAAA,oBAAoB,OAAA;AAKtB,qCAA4C;AAAnC,0GAAA,eAAe,OAAA;AACxB,qCAA+C;AAAtC,6GAAA,kBAAkB,OAAA"}
@@ -11,6 +11,7 @@ export interface TnestOptionsFactory {
11
11
  createTnestOptions(): TnestModuleOptions | Promise<TnestModuleOptions>;
12
12
  }
13
13
  export interface TnestModuleAsyncOptions extends Pick<ModuleMetadata, 'imports'> {
14
+ clientNames?: string[];
14
15
  useFactory?: (...args: any[]) => TnestModuleOptions | Promise<TnestModuleOptions>;
15
16
  useClass?: Type<TnestOptionsFactory>;
16
17
  useExisting?: Type<TnestOptionsFactory>;
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const default_serializer_1 = require("../default-serializer");
4
+ describe('DefaultPayloadSerializer', () => {
5
+ let serializer;
6
+ beforeEach(() => {
7
+ serializer = new default_serializer_1.DefaultPayloadSerializer();
8
+ });
9
+ describe('serialize()', () => {
10
+ it('passes through the payload unchanged', () => {
11
+ const payload = { name: 'Alice', age: 30 };
12
+ expect(serializer.serialize(payload)).toBe(payload);
13
+ });
14
+ it('passes through primitives', () => {
15
+ expect(serializer.serialize('hello')).toBe('hello');
16
+ expect(serializer.serialize(42)).toBe(42);
17
+ expect(serializer.serialize(null)).toBeNull();
18
+ });
19
+ });
20
+ describe('deserialize()', () => {
21
+ it('passes through the data unchanged', () => {
22
+ const data = { name: 'Alice', age: 30 };
23
+ expect(serializer.deserialize(data)).toBe(data);
24
+ });
25
+ it('passes through primitives', () => {
26
+ expect(serializer.deserialize('hello')).toBe('hello');
27
+ expect(serializer.deserialize(42)).toBe(42);
28
+ expect(serializer.deserialize(null)).toBeNull();
29
+ });
30
+ });
31
+ });
32
+ //# sourceMappingURL=default-serializer.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default-serializer.spec.js","sourceRoot":"","sources":["../../../src/serialization/__tests__/default-serializer.spec.ts"],"names":[],"mappings":";;AAAA,8DAAiE;AAEjE,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;IACxC,IAAI,UAAoC,CAAC;IAEzC,UAAU,CAAC,GAAG,EAAE;QACd,UAAU,GAAG,IAAI,6CAAwB,EAAE,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;QAC3B,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,MAAM,OAAO,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;YAC3C,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;YACnC,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACpD,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC1C,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QAChD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAC3C,MAAM,IAAI,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;YACxC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;YACnC,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACtD,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC5C,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;QAClD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};