@jdevel/tnest 0.0.1 → 0.0.2

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 (86) hide show
  1. package/README.md +357 -0
  2. package/dist/client/index.d.ts +2 -0
  3. package/dist/client/index.js +8 -0
  4. package/dist/client/index.js.map +1 -0
  5. package/dist/client/typed-client-factory.d.ts +6 -0
  6. package/dist/client/typed-client-factory.js +25 -0
  7. package/dist/client/typed-client-factory.js.map +1 -0
  8. package/dist/client/typed-client.d.ts +11 -0
  9. package/dist/client/typed-client.js +22 -0
  10. package/dist/client/typed-client.js.map +1 -0
  11. package/dist/constants.d.ts +3 -0
  12. package/dist/constants.js +10 -0
  13. package/dist/constants.js.map +1 -0
  14. package/dist/contracts/command.d.ts +6 -0
  15. package/dist/contracts/command.js +3 -0
  16. package/dist/contracts/command.js.map +1 -0
  17. package/dist/contracts/define-helpers.d.ts +12 -0
  18. package/dist/contracts/define-helpers.js +19 -0
  19. package/dist/contracts/define-helpers.js.map +1 -0
  20. package/dist/contracts/event.d.ts +5 -0
  21. package/dist/contracts/event.js +3 -0
  22. package/dist/contracts/event.js.map +1 -0
  23. package/dist/contracts/index.d.ts +6 -0
  24. package/dist/contracts/index.js +9 -0
  25. package/dist/contracts/index.js.map +1 -0
  26. package/dist/contracts/query.d.ts +6 -0
  27. package/dist/contracts/query.js +3 -0
  28. package/dist/contracts/query.js.map +1 -0
  29. package/dist/contracts/registry.d.ts +8 -0
  30. package/dist/contracts/registry.js +3 -0
  31. package/dist/contracts/registry.js.map +1 -0
  32. package/dist/contracts/utility-types.d.ts +21 -0
  33. package/dist/contracts/utility-types.js +3 -0
  34. package/dist/contracts/utility-types.js.map +1 -0
  35. package/dist/handlers/handler-types.d.ts +4 -0
  36. package/dist/handlers/handler-types.js +3 -0
  37. package/dist/handlers/handler-types.js.map +1 -0
  38. package/dist/handlers/index.d.ts +3 -0
  39. package/dist/handlers/index.js +8 -0
  40. package/dist/handlers/index.js.map +1 -0
  41. package/dist/handlers/typed-event-pattern.decorator.d.ts +2 -0
  42. package/dist/handlers/typed-event-pattern.decorator.js +8 -0
  43. package/dist/handlers/typed-event-pattern.decorator.js.map +1 -0
  44. package/dist/handlers/typed-message-pattern.decorator.d.ts +2 -0
  45. package/dist/handlers/typed-message-pattern.decorator.js +8 -0
  46. package/dist/handlers/typed-message-pattern.decorator.js.map +1 -0
  47. package/dist/index.d.ts +16 -1
  48. package/dist/index.js +29 -3
  49. package/dist/index.js.map +1 -1
  50. package/dist/interfaces/index.d.ts +1 -0
  51. package/dist/interfaces/index.js +3 -0
  52. package/dist/interfaces/index.js.map +1 -0
  53. package/dist/interfaces/module-options.d.ts +18 -0
  54. package/dist/interfaces/module-options.js +3 -0
  55. package/dist/interfaces/module-options.js.map +1 -0
  56. package/dist/serialization/default-serializer.d.ts +5 -0
  57. package/dist/serialization/default-serializer.js +23 -0
  58. package/dist/serialization/default-serializer.js.map +1 -0
  59. package/dist/serialization/index.d.ts +3 -0
  60. package/dist/serialization/index.js +9 -0
  61. package/dist/serialization/index.js.map +1 -0
  62. package/dist/serialization/serializer.interface.d.ts +8 -0
  63. package/dist/serialization/serializer.interface.js +6 -0
  64. package/dist/serialization/serializer.interface.js.map +1 -0
  65. package/dist/testing/index.d.ts +2 -0
  66. package/dist/testing/index.js +8 -0
  67. package/dist/testing/index.js.map +1 -0
  68. package/dist/testing/mock-typed-client.d.ts +20 -0
  69. package/dist/testing/mock-typed-client.js +36 -0
  70. package/dist/testing/mock-typed-client.js.map +1 -0
  71. package/dist/testing/test-contract-module.d.ts +10 -0
  72. package/dist/testing/test-contract-module.js +31 -0
  73. package/dist/testing/test-contract-module.js.map +1 -0
  74. package/dist/tnest.module.d.ts +6 -0
  75. package/dist/tnest.module.js +77 -7
  76. package/dist/tnest.module.js.map +1 -1
  77. package/dist/validation/index.d.ts +3 -0
  78. package/dist/validation/index.js +8 -0
  79. package/dist/validation/index.js.map +1 -0
  80. package/dist/validation/validate-contract.decorator.d.ts +1 -0
  81. package/dist/validation/validate-contract.decorator.js +21 -0
  82. package/dist/validation/validate-contract.decorator.js.map +1 -0
  83. package/dist/validation/validator.interface.d.ts +4 -0
  84. package/dist/validation/validator.interface.js +5 -0
  85. package/dist/validation/validator.interface.js.map +1 -0
  86. package/package.json +10 -3
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TypedEventPattern = exports.TypedMessagePattern = void 0;
4
+ var typed_message_pattern_decorator_1 = require("./typed-message-pattern.decorator");
5
+ Object.defineProperty(exports, "TypedMessagePattern", { enumerable: true, get: function () { return typed_message_pattern_decorator_1.TypedMessagePattern; } });
6
+ var typed_event_pattern_decorator_1 = require("./typed-event-pattern.decorator");
7
+ Object.defineProperty(exports, "TypedEventPattern", { enumerable: true, get: function () { return typed_event_pattern_decorator_1.TypedEventPattern; } });
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/handlers/index.ts"],"names":[],"mappings":";;;AAAA,qFAAwE;AAA/D,sIAAA,mBAAmB,OAAA;AAC5B,iFAAoE;AAA3D,kIAAA,iBAAiB,OAAA"}
@@ -0,0 +1,2 @@
1
+ import type { ContractRegistry, EventPatterns } from '../contracts';
2
+ export declare function TypedEventPattern<TRegistry extends ContractRegistry>(pattern: EventPatterns<TRegistry>): MethodDecorator;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TypedEventPattern = TypedEventPattern;
4
+ const microservices_1 = require("@nestjs/microservices");
5
+ function TypedEventPattern(pattern) {
6
+ return (0, microservices_1.EventPattern)(pattern);
7
+ }
8
+ //# sourceMappingURL=typed-event-pattern.decorator.js.map
@@ -0,0 +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"}
@@ -0,0 +1,2 @@
1
+ import type { ContractRegistry, CommandPatterns, QueryPatterns } from '../contracts';
2
+ export declare function TypedMessagePattern<TRegistry extends ContractRegistry>(pattern: CommandPatterns<TRegistry> | QueryPatterns<TRegistry>): MethodDecorator;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TypedMessagePattern = TypedMessagePattern;
4
+ const microservices_1 = require("@nestjs/microservices");
5
+ function TypedMessagePattern(pattern) {
6
+ return (0, microservices_1.MessagePattern)(pattern);
7
+ }
8
+ //# sourceMappingURL=typed-message-pattern.decorator.js.map
@@ -0,0 +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"}
package/dist/index.d.ts CHANGED
@@ -1,2 +1,17 @@
1
1
  export { TnestModule } from './tnest.module';
2
- export { TnestService } from './tnest.service';
2
+ export { TNEST_OPTIONS, getClientToken } from './constants';
3
+ export type { Command, Event, Query, AnyContract, ContractRegistry, ValidateRegistry, PatternOf, PayloadOf, ResponseOf, CommandsOf, EventsOf, QueriesOf, CommandPatterns, EventPatterns, QueryPatterns, SendablePatterns, } from './contracts';
4
+ export { command, event, query, defineRegistry } from './contracts';
5
+ export { TypedClient } from './client';
6
+ export { TypedClientFactory } from './client';
7
+ export { TypedMessagePattern } from './handlers';
8
+ export { TypedEventPattern } from './handlers';
9
+ export type { TypedMessageHandler, TypedEventHandler } from './handlers';
10
+ export type { TnestClientDefinition, TnestModuleOptions, TnestOptionsFactory, TnestModuleAsyncOptions, } from './interfaces';
11
+ export { ValidateContract } from './validation';
12
+ export { CONTRACT_VALIDATOR } from './validation';
13
+ export type { ContractValidator } from './validation';
14
+ export { DefaultPayloadSerializer, PAYLOAD_SERIALIZER, PAYLOAD_DESERIALIZER } from './serialization';
15
+ export type { PayloadSerializer, PayloadDeserializer } from './serialization';
16
+ export { MockTypedClient } from './testing';
17
+ export { TestContractModule } from './testing';
package/dist/index.js CHANGED
@@ -1,8 +1,34 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TnestService = exports.TnestModule = void 0;
3
+ exports.TestContractModule = exports.MockTypedClient = exports.PAYLOAD_DESERIALIZER = exports.PAYLOAD_SERIALIZER = exports.DefaultPayloadSerializer = exports.CONTRACT_VALIDATOR = exports.ValidateContract = exports.TypedEventPattern = exports.TypedMessagePattern = exports.TypedClientFactory = exports.TypedClient = exports.defineRegistry = exports.query = exports.event = exports.command = exports.getClientToken = exports.TNEST_OPTIONS = exports.TnestModule = void 0;
4
4
  var tnest_module_1 = require("./tnest.module");
5
5
  Object.defineProperty(exports, "TnestModule", { enumerable: true, get: function () { return tnest_module_1.TnestModule; } });
6
- var tnest_service_1 = require("./tnest.service");
7
- Object.defineProperty(exports, "TnestService", { enumerable: true, get: function () { return tnest_service_1.TnestService; } });
6
+ var constants_1 = require("./constants");
7
+ Object.defineProperty(exports, "TNEST_OPTIONS", { enumerable: true, get: function () { return constants_1.TNEST_OPTIONS; } });
8
+ Object.defineProperty(exports, "getClientToken", { enumerable: true, get: function () { return constants_1.getClientToken; } });
9
+ var contracts_1 = require("./contracts");
10
+ Object.defineProperty(exports, "command", { enumerable: true, get: function () { return contracts_1.command; } });
11
+ Object.defineProperty(exports, "event", { enumerable: true, get: function () { return contracts_1.event; } });
12
+ Object.defineProperty(exports, "query", { enumerable: true, get: function () { return contracts_1.query; } });
13
+ Object.defineProperty(exports, "defineRegistry", { enumerable: true, get: function () { return contracts_1.defineRegistry; } });
14
+ var client_1 = require("./client");
15
+ Object.defineProperty(exports, "TypedClient", { enumerable: true, get: function () { return client_1.TypedClient; } });
16
+ var client_2 = require("./client");
17
+ Object.defineProperty(exports, "TypedClientFactory", { enumerable: true, get: function () { return client_2.TypedClientFactory; } });
18
+ var handlers_1 = require("./handlers");
19
+ Object.defineProperty(exports, "TypedMessagePattern", { enumerable: true, get: function () { return handlers_1.TypedMessagePattern; } });
20
+ var handlers_2 = require("./handlers");
21
+ Object.defineProperty(exports, "TypedEventPattern", { enumerable: true, get: function () { return handlers_2.TypedEventPattern; } });
22
+ var validation_1 = require("./validation");
23
+ Object.defineProperty(exports, "ValidateContract", { enumerable: true, get: function () { return validation_1.ValidateContract; } });
24
+ var validation_2 = require("./validation");
25
+ Object.defineProperty(exports, "CONTRACT_VALIDATOR", { enumerable: true, get: function () { return validation_2.CONTRACT_VALIDATOR; } });
26
+ var serialization_1 = require("./serialization");
27
+ Object.defineProperty(exports, "DefaultPayloadSerializer", { enumerable: true, get: function () { return serialization_1.DefaultPayloadSerializer; } });
28
+ Object.defineProperty(exports, "PAYLOAD_SERIALIZER", { enumerable: true, get: function () { return serialization_1.PAYLOAD_SERIALIZER; } });
29
+ Object.defineProperty(exports, "PAYLOAD_DESERIALIZER", { enumerable: true, get: function () { return serialization_1.PAYLOAD_DESERIALIZER; } });
30
+ var testing_1 = require("./testing");
31
+ Object.defineProperty(exports, "MockTypedClient", { enumerable: true, get: function () { return testing_1.MockTypedClient; } });
32
+ var testing_2 = require("./testing");
33
+ Object.defineProperty(exports, "TestContractModule", { enumerable: true, get: function () { return testing_2.TestContractModule; } });
8
34
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,+CAA6C;AAApC,2GAAA,WAAW,OAAA;AACpB,iDAA+C;AAAtC,6GAAA,YAAY,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,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"}
@@ -0,0 +1 @@
1
+ export type { TnestClientDefinition, TnestModuleOptions, TnestOptionsFactory, TnestModuleAsyncOptions, } from './module-options';
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/interfaces/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,18 @@
1
+ import type { ModuleMetadata, Type } from '@nestjs/common';
2
+ import type { ClientOptions } from '@nestjs/microservices';
3
+ export interface TnestClientDefinition {
4
+ name: string;
5
+ options: ClientOptions;
6
+ }
7
+ export interface TnestModuleOptions {
8
+ clients?: TnestClientDefinition[];
9
+ }
10
+ export interface TnestOptionsFactory {
11
+ createTnestOptions(): TnestModuleOptions | Promise<TnestModuleOptions>;
12
+ }
13
+ export interface TnestModuleAsyncOptions extends Pick<ModuleMetadata, 'imports'> {
14
+ useFactory?: (...args: any[]) => TnestModuleOptions | Promise<TnestModuleOptions>;
15
+ useClass?: Type<TnestOptionsFactory>;
16
+ useExisting?: Type<TnestOptionsFactory>;
17
+ inject?: any[];
18
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=module-options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-options.js","sourceRoot":"","sources":["../../src/interfaces/module-options.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ import type { PayloadSerializer, PayloadDeserializer } from './serializer.interface';
2
+ export declare class DefaultPayloadSerializer implements PayloadSerializer, PayloadDeserializer {
3
+ serialize(payload: unknown): unknown;
4
+ deserialize(data: unknown): unknown;
5
+ }
@@ -0,0 +1,23 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.DefaultPayloadSerializer = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ let DefaultPayloadSerializer = class DefaultPayloadSerializer {
12
+ serialize(payload) {
13
+ return payload;
14
+ }
15
+ deserialize(data) {
16
+ return data;
17
+ }
18
+ };
19
+ exports.DefaultPayloadSerializer = DefaultPayloadSerializer;
20
+ exports.DefaultPayloadSerializer = DefaultPayloadSerializer = __decorate([
21
+ (0, common_1.Injectable)()
22
+ ], DefaultPayloadSerializer);
23
+ //# sourceMappingURL=default-serializer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default-serializer.js","sourceRoot":"","sources":["../../src/serialization/default-serializer.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA4C;AAIrC,IAAM,wBAAwB,GAA9B,MAAM,wBAAwB;IACnC,SAAS,CAAC,OAAgB;QACxB,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,WAAW,CAAC,IAAa;QACvB,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAA;AARY,4DAAwB;mCAAxB,wBAAwB;IADpC,IAAA,mBAAU,GAAE;GACA,wBAAwB,CAQpC"}
@@ -0,0 +1,3 @@
1
+ export { DefaultPayloadSerializer } from './default-serializer';
2
+ export { PAYLOAD_SERIALIZER, PAYLOAD_DESERIALIZER } from './serializer.interface';
3
+ export type { PayloadSerializer, PayloadDeserializer } from './serializer.interface';
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PAYLOAD_DESERIALIZER = exports.PAYLOAD_SERIALIZER = exports.DefaultPayloadSerializer = void 0;
4
+ var default_serializer_1 = require("./default-serializer");
5
+ Object.defineProperty(exports, "DefaultPayloadSerializer", { enumerable: true, get: function () { return default_serializer_1.DefaultPayloadSerializer; } });
6
+ var serializer_interface_1 = require("./serializer.interface");
7
+ Object.defineProperty(exports, "PAYLOAD_SERIALIZER", { enumerable: true, get: function () { return serializer_interface_1.PAYLOAD_SERIALIZER; } });
8
+ Object.defineProperty(exports, "PAYLOAD_DESERIALIZER", { enumerable: true, get: function () { return serializer_interface_1.PAYLOAD_DESERIALIZER; } });
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/serialization/index.ts"],"names":[],"mappings":";;;AAAA,2DAAgE;AAAvD,8HAAA,wBAAwB,OAAA;AACjC,+DAAkF;AAAzE,0HAAA,kBAAkB,OAAA;AAAE,4HAAA,oBAAoB,OAAA"}
@@ -0,0 +1,8 @@
1
+ export interface PayloadSerializer {
2
+ serialize(payload: unknown): unknown;
3
+ }
4
+ export interface PayloadDeserializer {
5
+ deserialize(data: unknown): unknown;
6
+ }
7
+ export declare const PAYLOAD_SERIALIZER: unique symbol;
8
+ export declare const PAYLOAD_DESERIALIZER: unique symbol;
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PAYLOAD_DESERIALIZER = exports.PAYLOAD_SERIALIZER = void 0;
4
+ exports.PAYLOAD_SERIALIZER = Symbol('PAYLOAD_SERIALIZER');
5
+ exports.PAYLOAD_DESERIALIZER = Symbol('PAYLOAD_DESERIALIZER');
6
+ //# sourceMappingURL=serializer.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serializer.interface.js","sourceRoot":"","sources":["../../src/serialization/serializer.interface.ts"],"names":[],"mappings":";;;AAQa,QAAA,kBAAkB,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC;AAClD,QAAA,oBAAoB,GAAG,MAAM,CAAC,sBAAsB,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { MockTypedClient } from './mock-typed-client';
2
+ export { TestContractModule } from './test-contract-module';
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TestContractModule = exports.MockTypedClient = void 0;
4
+ var mock_typed_client_1 = require("./mock-typed-client");
5
+ Object.defineProperty(exports, "MockTypedClient", { enumerable: true, get: function () { return mock_typed_client_1.MockTypedClient; } });
6
+ var test_contract_module_1 = require("./test-contract-module");
7
+ Object.defineProperty(exports, "TestContractModule", { enumerable: true, get: function () { return test_contract_module_1.TestContractModule; } });
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/testing/index.ts"],"names":[],"mappings":";;;AAAA,yDAAsD;AAA7C,oHAAA,eAAe,OAAA;AACxB,+DAA4D;AAAnD,0HAAA,kBAAkB,OAAA"}
@@ -0,0 +1,20 @@
1
+ import { type Observable } from 'rxjs';
2
+ import type { ContractRegistry, EventPatterns, PayloadOf, ResponseOf, SendablePatterns } from '../contracts';
3
+ import type { TypedClient } from '../client';
4
+ interface RecordedMessage {
5
+ type: 'send' | 'emit';
6
+ pattern: string;
7
+ payload: unknown;
8
+ }
9
+ export declare class MockTypedClient<TRegistry extends ContractRegistry> implements Pick<TypedClient<TRegistry>, 'send' | 'emit' | 'connect' | 'close'> {
10
+ private readonly _messages;
11
+ private readonly _responses;
12
+ get messages(): readonly RecordedMessage[];
13
+ setResponse<P extends SendablePatterns<TRegistry>>(pattern: P, response: ResponseOf<TRegistry[P]>): void;
14
+ send<P extends SendablePatterns<TRegistry>>(pattern: P, payload: PayloadOf<TRegistry[P]>): Observable<ResponseOf<TRegistry[P]>>;
15
+ emit<P extends EventPatterns<TRegistry>>(pattern: P, payload: PayloadOf<TRegistry[P]>): Observable<undefined>;
16
+ connect(): Promise<void>;
17
+ close(): void;
18
+ reset(): void;
19
+ }
20
+ export {};
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MockTypedClient = void 0;
4
+ const rxjs_1 = require("rxjs");
5
+ class MockTypedClient {
6
+ constructor() {
7
+ this._messages = [];
8
+ this._responses = new Map();
9
+ }
10
+ get messages() {
11
+ return this._messages;
12
+ }
13
+ setResponse(pattern, response) {
14
+ this._responses.set(pattern, response);
15
+ }
16
+ send(pattern, payload) {
17
+ this._messages.push({ type: 'send', pattern, payload });
18
+ const response = this._responses.get(pattern);
19
+ return (0, rxjs_1.of)(response);
20
+ }
21
+ emit(pattern, payload) {
22
+ this._messages.push({ type: 'emit', pattern, payload });
23
+ return (0, rxjs_1.of)(undefined);
24
+ }
25
+ connect() {
26
+ return Promise.resolve();
27
+ }
28
+ close() {
29
+ }
30
+ reset() {
31
+ this._messages.length = 0;
32
+ this._responses.clear();
33
+ }
34
+ }
35
+ exports.MockTypedClient = MockTypedClient;
36
+ //# sourceMappingURL=mock-typed-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mock-typed-client.js","sourceRoot":"","sources":["../../src/testing/mock-typed-client.ts"],"names":[],"mappings":";;;AAAA,+BAA2C;AAgB3C,MAAa,eAAe;IAA5B;QAGmB,cAAS,GAAsB,EAAE,CAAC;QAClC,eAAU,GAAG,IAAI,GAAG,EAAmB,CAAC;IA0C3D,CAAC;IAxCC,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,WAAW,CACT,OAAU,EACV,QAAkC;QAElC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,CACF,OAAU,EACV,OAAgC;QAEhC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAA6B,CAAC;QAC1E,OAAO,IAAA,SAAE,EAAC,QAAQ,CAAC,CAAC;IACtB,CAAC;IAED,IAAI,CACF,OAAU,EACV,OAAgC;QAEhC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QACxD,OAAO,IAAA,SAAE,EAAC,SAAS,CAAC,CAAC;IACvB,CAAC;IAED,OAAO;QACL,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED,KAAK;IAEL,CAAC;IAED,KAAK;QACH,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;QAC1B,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;CACF;AA9CD,0CA8CC"}
@@ -0,0 +1,10 @@
1
+ import { type DynamicModule } from '@nestjs/common';
2
+ import type { MockTypedClient } from './mock-typed-client';
3
+ interface TestClientDefinition {
4
+ name: string;
5
+ mock: MockTypedClient<never>;
6
+ }
7
+ export declare class TestContractModule {
8
+ static register(clients: TestClientDefinition[]): DynamicModule;
9
+ }
10
+ export {};
@@ -0,0 +1,31 @@
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 TestContractModule_1;
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.TestContractModule = void 0;
11
+ const common_1 = require("@nestjs/common");
12
+ const client_1 = require("../client");
13
+ const constants_1 = require("../constants");
14
+ let TestContractModule = TestContractModule_1 = class TestContractModule {
15
+ static register(clients) {
16
+ const clientProviders = clients.map((def) => ({
17
+ provide: (0, constants_1.getClientToken)(def.name),
18
+ useValue: def.mock,
19
+ }));
20
+ return {
21
+ module: TestContractModule_1,
22
+ providers: [client_1.TypedClientFactory, ...clientProviders],
23
+ exports: [client_1.TypedClientFactory, ...clientProviders.map((p) => p.provide)],
24
+ };
25
+ }
26
+ };
27
+ exports.TestContractModule = TestContractModule;
28
+ exports.TestContractModule = TestContractModule = TestContractModule_1 = __decorate([
29
+ (0, common_1.Module)({})
30
+ ], TestContractModule);
31
+ //# sourceMappingURL=test-contract-module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-contract-module.js","sourceRoot":"","sources":["../../src/testing/test-contract-module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAA4D;AAC5D,sCAA+C;AAC/C,4CAA8C;AASvC,IAAM,kBAAkB,0BAAxB,MAAM,kBAAkB;IAC7B,MAAM,CAAC,QAAQ,CAAC,OAA+B;QAC7C,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC5C,OAAO,EAAE,IAAA,0BAAc,EAAC,GAAG,CAAC,IAAI,CAAC;YACjC,QAAQ,EAAE,GAAG,CAAC,IAAI;SACnB,CAAC,CAAC,CAAC;QAEJ,OAAO;YACL,MAAM,EAAE,oBAAkB;YAC1B,SAAS,EAAE,CAAC,2BAAkB,EAAE,GAAG,eAAe,CAAC;YACnD,OAAO,EAAE,CAAC,2BAAkB,EAAE,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;SACxE,CAAC;IACJ,CAAC;CACF,CAAA;AAbY,gDAAkB;6BAAlB,kBAAkB;IAD9B,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,kBAAkB,CAa9B"}
@@ -1,2 +1,8 @@
1
+ import { type DynamicModule } from '@nestjs/common';
2
+ import type { TnestModuleOptions, TnestModuleAsyncOptions } from './interfaces';
1
3
  export declare class TnestModule {
4
+ static forRoot(options?: TnestModuleOptions): DynamicModule;
5
+ static forRootAsync(options: TnestModuleAsyncOptions): DynamicModule;
6
+ private static createClientProviders;
7
+ private static createAsyncProviders;
2
8
  }
@@ -5,17 +5,87 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
5
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
6
  return c > 3 && r && Object.defineProperty(target, key, r), r;
7
7
  };
8
+ var TnestModule_1;
8
9
  Object.defineProperty(exports, "__esModule", { value: true });
9
10
  exports.TnestModule = void 0;
10
11
  const common_1 = require("@nestjs/common");
11
- const tnest_service_1 = require("./tnest.service");
12
- let TnestModule = class TnestModule {
12
+ const microservices_1 = require("@nestjs/microservices");
13
+ const client_1 = require("./client");
14
+ const constants_1 = require("./constants");
15
+ let TnestModule = TnestModule_1 = class TnestModule {
16
+ static forRoot(options = {}) {
17
+ const clientProviders = TnestModule_1.createClientProviders(options);
18
+ return {
19
+ module: TnestModule_1,
20
+ global: true,
21
+ providers: [
22
+ { provide: constants_1.TNEST_OPTIONS, useValue: options },
23
+ client_1.TypedClientFactory,
24
+ ...clientProviders,
25
+ ],
26
+ exports: [
27
+ client_1.TypedClientFactory,
28
+ ...clientProviders.map((p) => p.provide),
29
+ ],
30
+ };
31
+ }
32
+ static forRootAsync(options) {
33
+ const asyncProviders = TnestModule_1.createAsyncProviders(options);
34
+ const clientProviders = [
35
+ {
36
+ provide: 'TNEST_CLIENT_PROVIDERS',
37
+ useFactory: (tnestOptions) => {
38
+ return TnestModule_1.createClientProviders(tnestOptions);
39
+ },
40
+ inject: [constants_1.TNEST_OPTIONS],
41
+ },
42
+ ];
43
+ return {
44
+ module: TnestModule_1,
45
+ global: true,
46
+ imports: options.imports ?? [],
47
+ providers: [
48
+ ...asyncProviders,
49
+ client_1.TypedClientFactory,
50
+ ...clientProviders,
51
+ ],
52
+ exports: [client_1.TypedClientFactory, constants_1.TNEST_OPTIONS],
53
+ };
54
+ }
55
+ static createClientProviders(options) {
56
+ if (!options.clients?.length)
57
+ return [];
58
+ return options.clients.map((clientDef) => ({
59
+ provide: (0, constants_1.getClientToken)(clientDef.name),
60
+ useFactory: () => microservices_1.ClientProxyFactory.create(clientDef.options),
61
+ }));
62
+ }
63
+ static createAsyncProviders(options) {
64
+ if (options.useFactory) {
65
+ return [
66
+ {
67
+ provide: constants_1.TNEST_OPTIONS,
68
+ useFactory: options.useFactory,
69
+ inject: options.inject ?? [],
70
+ },
71
+ ];
72
+ }
73
+ const useClass = (options.useClass ?? options.useExisting);
74
+ const providers = [
75
+ {
76
+ provide: constants_1.TNEST_OPTIONS,
77
+ useFactory: async (factory) => factory.createTnestOptions(),
78
+ inject: [useClass],
79
+ },
80
+ ];
81
+ if (options.useClass) {
82
+ providers.push({ provide: useClass, useClass });
83
+ }
84
+ return providers;
85
+ }
13
86
  };
14
87
  exports.TnestModule = TnestModule;
15
- exports.TnestModule = TnestModule = __decorate([
16
- (0, common_1.Module)({
17
- providers: [tnest_service_1.TnestService],
18
- exports: [tnest_service_1.TnestService],
19
- })
88
+ exports.TnestModule = TnestModule = TnestModule_1 = __decorate([
89
+ (0, common_1.Module)({})
20
90
  ], TnestModule);
21
91
  //# sourceMappingURL=tnest.module.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tnest.module.js","sourceRoot":"","sources":["../src/tnest.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,mDAA+C;AAMxC,IAAM,WAAW,GAAjB,MAAM,WAAW;CAAG,CAAA;AAAd,kCAAW;sBAAX,WAAW;IAJvB,IAAA,eAAM,EAAC;QACN,SAAS,EAAE,CAAC,4BAAY,CAAC;QACzB,OAAO,EAAE,CAAC,4BAAY,CAAC;KACxB,CAAC;GACW,WAAW,CAAG"}
1
+ {"version":3,"file":"tnest.module.js","sourceRoot":"","sources":["../src/tnest.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAA2E;AAC3E,yDAA2D;AAC3D,qCAA8C;AAC9C,2CAA4D;AAQrD,IAAM,WAAW,mBAAjB,MAAM,WAAW;IACtB,MAAM,CAAC,OAAO,CAAC,UAA8B,EAAE;QAC7C,MAAM,eAAe,GAAG,aAAW,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAEnE,OAAO;YACL,MAAM,EAAE,aAAW;YACnB,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE;gBACT,EAAE,OAAO,EAAE,yBAAa,EAAE,QAAQ,EAAE,OAAO,EAAE;gBAC7C,2BAAkB;gBAClB,GAAG,eAAe;aACnB;YACD,OAAO,EAAE;gBACP,2BAAkB;gBAClB,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAE,CAAS,CAAC,OAAO,CAAC;aAClD;SACF,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,OAAgC;QAClD,MAAM,cAAc,GAAG,aAAW,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAEjE,MAAM,eAAe,GAAe;YAClC;gBACE,OAAO,EAAE,wBAAwB;gBACjC,UAAU,EAAE,CAAC,YAAgC,EAAE,EAAE;oBAC/C,OAAO,aAAW,CAAC,qBAAqB,CAAC,YAAY,CAAC,CAAC;gBACzD,CAAC;gBACD,MAAM,EAAE,CAAC,yBAAa,CAAC;aACxB;SACF,CAAC;QAEF,OAAO;YACL,MAAM,EAAE,aAAW;YACnB,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE;YAC9B,SAAS,EAAE;gBACT,GAAG,cAAc;gBACjB,2BAAkB;gBAClB,GAAG,eAAe;aACnB;YACD,OAAO,EAAE,CAAC,2BAAkB,EAAE,yBAAa,CAAC;SAC7C,CAAC;IACJ,CAAC;IAEO,MAAM,CAAC,qBAAqB,CAAC,OAA2B;QAC9D,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM;YAAE,OAAO,EAAE,CAAC;QAExC,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YACzC,OAAO,EAAE,IAAA,0BAAc,EAAC,SAAS,CAAC,IAAI,CAAC;YACvC,UAAU,EAAE,GAAG,EAAE,CAAC,kCAAkB,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC;SAC/D,CAAC,CAAC,CAAC;IACN,CAAC;IAEO,MAAM,CAAC,oBAAoB,CAAC,OAAgC;QAClE,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACvB,OAAO;gBACL;oBACE,OAAO,EAAE,yBAAa;oBACtB,UAAU,EAAE,OAAO,CAAC,UAAU;oBAC9B,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE;iBAC7B;aACF,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,WAAW,CAAE,CAAC;QAE5D,MAAM,SAAS,GAAe;YAC5B;gBACE,OAAO,EAAE,yBAAa;gBACtB,UAAU,EAAE,KAAK,EAAE,OAA4B,EAAE,EAAE,CAAC,OAAO,CAAC,kBAAkB,EAAE;gBAChF,MAAM,EAAE,CAAC,QAAQ,CAAC;aACnB;SACF,CAAC;QAEF,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrB,SAAS,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;QAClD,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;CACF,CAAA;AAjFY,kCAAW;sBAAX,WAAW;IADvB,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,WAAW,CAiFvB"}
@@ -0,0 +1,3 @@
1
+ export { ValidateContract } from './validate-contract.decorator';
2
+ export { CONTRACT_VALIDATOR } from './validator.interface';
3
+ export type { ContractValidator } from './validator.interface';
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CONTRACT_VALIDATOR = exports.ValidateContract = void 0;
4
+ var validate_contract_decorator_1 = require("./validate-contract.decorator");
5
+ Object.defineProperty(exports, "ValidateContract", { enumerable: true, get: function () { return validate_contract_decorator_1.ValidateContract; } });
6
+ var validator_interface_1 = require("./validator.interface");
7
+ Object.defineProperty(exports, "CONTRACT_VALIDATOR", { enumerable: true, get: function () { return validator_interface_1.CONTRACT_VALIDATOR; } });
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/validation/index.ts"],"names":[],"mappings":";;;AAAA,6EAAiE;AAAxD,+HAAA,gBAAgB,OAAA;AACzB,6DAA2D;AAAlD,yHAAA,kBAAkB,OAAA"}
@@ -0,0 +1 @@
1
+ export declare function ValidateContract(): MethodDecorator;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ValidateContract = ValidateContract;
4
+ const common_1 = require("@nestjs/common");
5
+ const validator_interface_1 = require("./validator.interface");
6
+ function ValidateContract() {
7
+ const injectValidator = (0, common_1.Inject)(validator_interface_1.CONTRACT_VALIDATOR);
8
+ return (target, propertyKey, descriptor) => {
9
+ injectValidator(target, '__contractValidator');
10
+ const originalMethod = descriptor.value;
11
+ descriptor.value = async function (payload, ...args) {
12
+ const validator = this.__contractValidator;
13
+ if (validator) {
14
+ await validator.validate(payload);
15
+ }
16
+ return originalMethod.call(this, payload, ...args);
17
+ };
18
+ return descriptor;
19
+ };
20
+ }
21
+ //# sourceMappingURL=validate-contract.decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-contract.decorator.js","sourceRoot":"","sources":["../../src/validation/validate-contract.decorator.ts"],"names":[],"mappings":";;AAGA,4CAsBC;AAzBD,2CAAwC;AACxC,+DAAmF;AAEnF,SAAgB,gBAAgB;IAC9B,MAAM,eAAe,GAAG,IAAA,eAAM,EAAC,wCAAkB,CAAC,CAAC;IAEnD,OAAO,CACL,MAAc,EACd,WAA4B,EAC5B,UAAwC,EACxC,EAAE;QACF,eAAe,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;QAE/C,MAAM,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC;QAExC,UAAU,CAAC,KAAK,GAAG,KAAK,WAAsB,OAAgB,EAAE,GAAG,IAAe;YAChF,MAAM,SAAS,GAAkC,IAAI,CAAC,mBAAmB,CAAC;YAC1E,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACpC,CAAC;YACD,OAAO,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;QACrD,CAAC,CAAC;QAEF,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ export interface ContractValidator {
2
+ validate(payload: unknown): void | Promise<void>;
3
+ }
4
+ export declare const CONTRACT_VALIDATOR: unique symbol;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CONTRACT_VALIDATOR = void 0;
4
+ exports.CONTRACT_VALIDATOR = Symbol('CONTRACT_VALIDATOR');
5
+ //# sourceMappingURL=validator.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator.interface.js","sourceRoot":"","sources":["../../src/validation/validator.interface.ts"],"names":[],"mappings":";;;AAIa,QAAA,kBAAkB,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jdevel/tnest",
3
- "version": "0.0.1",
3
+ "version": "0.0.2",
4
4
  "description": "A NestJS library",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -8,19 +8,26 @@
8
8
  "dist"
9
9
  ],
10
10
  "scripts": {
11
- "build": "tsc",
11
+ "build": "./node_modules/.bin/tsc",
12
+ "lint": "eslint src/",
13
+ "lint:fix": "eslint src/ --fix",
12
14
  "prepublishOnly": "npm run build"
13
15
  },
14
16
  "peerDependencies": {
15
17
  "@nestjs/common": "^10.0.0 || ^11.0.0",
18
+ "@nestjs/microservices": "^10.0.0 || ^11.0.0",
16
19
  "reflect-metadata": "^0.1.13 || ^0.2.0",
17
20
  "rxjs": "^7.0.0"
18
21
  },
19
22
  "devDependencies": {
23
+ "@eslint/js": "^10.0.1",
20
24
  "@nestjs/common": "^11.0.0",
25
+ "@nestjs/microservices": "^11.1.17",
26
+ "eslint": "^10.1.0",
21
27
  "reflect-metadata": "^0.2.0",
22
28
  "rxjs": "^7.8.1",
23
- "typescript": "^5.7.0"
29
+ "typescript": "^5.7.0",
30
+ "typescript-eslint": "^8.57.2"
24
31
  },
25
32
  "license": "MIT"
26
33
  }