@jdevel/tnest 0.0.3 → 0.0.5
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.
- package/README.md +253 -66
- package/dist/__tests__/tnest-module.spec.js.map +1 -1
- package/dist/client/__tests__/typed-client-factory.spec.js.map +1 -1
- package/dist/client/__tests__/typed-client-types.spec.js +2 -2
- package/dist/client/__tests__/typed-client-types.spec.js.map +1 -1
- package/dist/client/__tests__/typed-client.spec.js.map +1 -1
- package/dist/contracts/__tests__/contract-types.spec.js +3 -3
- package/dist/contracts/__tests__/contract-types.spec.js.map +1 -1
- package/dist/contracts/__tests__/define-helpers.spec.js +6 -6
- package/dist/contracts/__tests__/define-helpers.spec.js.map +1 -1
- package/dist/handlers/__tests__/typed-event-pattern.spec.js +30 -1
- package/dist/handlers/__tests__/typed-event-pattern.spec.js.map +1 -1
- package/dist/handlers/__tests__/typed-message-pattern.spec.js +48 -2
- package/dist/handlers/__tests__/typed-message-pattern.spec.js.map +1 -1
- package/dist/handlers/typed-event-pattern.decorator.d.ts +4 -2
- package/dist/handlers/typed-event-pattern.decorator.js +4 -2
- package/dist/handlers/typed-event-pattern.decorator.js.map +1 -1
- package/dist/handlers/typed-message-pattern.decorator.d.ts +5 -2
- package/dist/handlers/typed-message-pattern.decorator.js +4 -2
- package/dist/handlers/typed-message-pattern.decorator.js.map +1 -1
- package/dist/testing/__tests__/test-contract-module.spec.js.map +1 -1
- package/dist/validation/__tests__/validate-contract.spec.js +6 -6
- package/dist/validation/__tests__/validate-contract.spec.js.map +1 -1
- package/package.json +4 -2
package/README.md
CHANGED
|
@@ -63,9 +63,9 @@ export type UserContracts = typeof userContracts;
|
|
|
63
63
|
You can also define contracts with explicit interfaces if you prefer:
|
|
64
64
|
|
|
65
65
|
```ts
|
|
66
|
-
import type { Command, Event, Query } from '@jdevel/tnest';
|
|
66
|
+
import type { Command, Event, Query, ContractRegistry } from '@jdevel/tnest';
|
|
67
67
|
|
|
68
|
-
export interface UserContracts {
|
|
68
|
+
export interface UserContracts extends ContractRegistry {
|
|
69
69
|
'user.create': Command<'user.create', CreateUserDto, User>;
|
|
70
70
|
'user.created': Event<'user.created', { userId: string; email: string }>;
|
|
71
71
|
'user.get': Query<'user.get', { id: string }, User>;
|
|
@@ -74,6 +74,10 @@ export interface UserContracts {
|
|
|
74
74
|
|
|
75
75
|
### 2. Register the module
|
|
76
76
|
|
|
77
|
+
#### Static configuration with `forRoot`
|
|
78
|
+
|
|
79
|
+
Use `forRoot` when your transport configuration is known at compile time:
|
|
80
|
+
|
|
77
81
|
```ts
|
|
78
82
|
// app.module.ts
|
|
79
83
|
import { Module } from '@nestjs/common';
|
|
@@ -83,6 +87,88 @@ import { TnestModule } from '@jdevel/tnest';
|
|
|
83
87
|
@Module({
|
|
84
88
|
imports: [
|
|
85
89
|
TnestModule.forRoot({
|
|
90
|
+
clients: [
|
|
91
|
+
{
|
|
92
|
+
name: 'USER_SERVICE',
|
|
93
|
+
options: {
|
|
94
|
+
transport: Transport.TCP,
|
|
95
|
+
options: { host: 'localhost', port: 3001 },
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
name: 'NOTIFICATION_SERVICE',
|
|
100
|
+
options: {
|
|
101
|
+
transport: Transport.REDIS,
|
|
102
|
+
options: { host: 'localhost', port: 6379 },
|
|
103
|
+
},
|
|
104
|
+
},
|
|
105
|
+
],
|
|
106
|
+
}),
|
|
107
|
+
],
|
|
108
|
+
})
|
|
109
|
+
export class AppModule {}
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
#### Async configuration with `forRootAsync`
|
|
113
|
+
|
|
114
|
+
Use `forRootAsync` when transport configuration comes from `ConfigService`, environment variables, or another async source.
|
|
115
|
+
|
|
116
|
+
**With `useFactory`:**
|
|
117
|
+
|
|
118
|
+
```ts
|
|
119
|
+
import { Module } from '@nestjs/common';
|
|
120
|
+
import { ConfigModule, ConfigService } from '@nestjs/config';
|
|
121
|
+
import { Transport } from '@nestjs/microservices';
|
|
122
|
+
import { TnestModule } from '@jdevel/tnest';
|
|
123
|
+
|
|
124
|
+
@Module({
|
|
125
|
+
imports: [
|
|
126
|
+
TnestModule.forRootAsync({
|
|
127
|
+
imports: [ConfigModule],
|
|
128
|
+
// Declare client names upfront so they can be injected before the factory resolves
|
|
129
|
+
clientNames: ['USER_SERVICE', 'NOTIFICATION_SERVICE'],
|
|
130
|
+
useFactory: (config: ConfigService) => ({
|
|
131
|
+
clients: [
|
|
132
|
+
{
|
|
133
|
+
name: 'USER_SERVICE',
|
|
134
|
+
options: {
|
|
135
|
+
transport: Transport.TCP,
|
|
136
|
+
options: {
|
|
137
|
+
host: config.get('USER_SERVICE_HOST'),
|
|
138
|
+
port: config.get<number>('USER_SERVICE_PORT'),
|
|
139
|
+
},
|
|
140
|
+
},
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
name: 'NOTIFICATION_SERVICE',
|
|
144
|
+
options: {
|
|
145
|
+
transport: Transport.REDIS,
|
|
146
|
+
options: {
|
|
147
|
+
host: config.get('REDIS_HOST'),
|
|
148
|
+
port: config.get<number>('REDIS_PORT'),
|
|
149
|
+
},
|
|
150
|
+
},
|
|
151
|
+
},
|
|
152
|
+
],
|
|
153
|
+
}),
|
|
154
|
+
inject: [ConfigService],
|
|
155
|
+
}),
|
|
156
|
+
],
|
|
157
|
+
})
|
|
158
|
+
export class AppModule {}
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
**With `useClass`:**
|
|
162
|
+
|
|
163
|
+
```ts
|
|
164
|
+
import { Injectable } from '@nestjs/common';
|
|
165
|
+
import { Transport } from '@nestjs/microservices';
|
|
166
|
+
import { TnestModule, type TnestOptionsFactory, type TnestModuleOptions } from '@jdevel/tnest';
|
|
167
|
+
|
|
168
|
+
@Injectable()
|
|
169
|
+
class TnestConfigService implements TnestOptionsFactory {
|
|
170
|
+
createTnestOptions(): TnestModuleOptions {
|
|
171
|
+
return {
|
|
86
172
|
clients: [
|
|
87
173
|
{
|
|
88
174
|
name: 'USER_SERVICE',
|
|
@@ -92,12 +178,38 @@ import { TnestModule } from '@jdevel/tnest';
|
|
|
92
178
|
},
|
|
93
179
|
},
|
|
94
180
|
],
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
@Module({
|
|
186
|
+
imports: [
|
|
187
|
+
TnestModule.forRootAsync({
|
|
188
|
+
clientNames: ['USER_SERVICE'],
|
|
189
|
+
useClass: TnestConfigService,
|
|
190
|
+
}),
|
|
191
|
+
],
|
|
192
|
+
})
|
|
193
|
+
export class AppModule {}
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
**With `useExisting`:**
|
|
197
|
+
|
|
198
|
+
```ts
|
|
199
|
+
@Module({
|
|
200
|
+
imports: [
|
|
201
|
+
TnestModule.forRootAsync({
|
|
202
|
+
clientNames: ['USER_SERVICE'],
|
|
203
|
+
useExisting: TnestConfigService, // reuse an already-registered provider
|
|
204
|
+
imports: [ConfigModule],
|
|
95
205
|
}),
|
|
96
206
|
],
|
|
97
207
|
})
|
|
98
208
|
export class AppModule {}
|
|
99
209
|
```
|
|
100
210
|
|
|
211
|
+
> **Note:** The `clientNames` array tells the module which client tokens to register upfront. Each name must match a `name` in the `clients` array returned by the factory. Without `clientNames`, async clients won't be injectable by token.
|
|
212
|
+
|
|
101
213
|
### 3. Send messages (producer)
|
|
102
214
|
|
|
103
215
|
```ts
|
|
@@ -120,8 +232,10 @@ export class OrderService {
|
|
|
120
232
|
}
|
|
121
233
|
|
|
122
234
|
async createOrder(userId: string) {
|
|
235
|
+
// send() for commands and queries — type-safe pattern, payload, and response
|
|
123
236
|
const user = await firstValueFrom(this.users.send('user.get', { id: userId }));
|
|
124
237
|
|
|
238
|
+
// emit() for events — type-safe pattern and payload, no response
|
|
125
239
|
this.users.emit('user.created', {
|
|
126
240
|
userId: user.id,
|
|
127
241
|
email: user.email,
|
|
@@ -145,35 +259,89 @@ this.users.send('user.created', { userId: '1', email: 'a@b.com' });
|
|
|
145
259
|
// ~~~~~~~~~~~~~~ ERROR: 'user.created' is an event, use emit()
|
|
146
260
|
```
|
|
147
261
|
|
|
262
|
+
The typed handler decorators also catch handler signature mismatches:
|
|
263
|
+
|
|
264
|
+
```ts
|
|
265
|
+
const MessagePattern = TypedMessagePattern<UserContracts>();
|
|
266
|
+
|
|
267
|
+
@MessagePattern('user.create')
|
|
268
|
+
async create(payload: { wrong: number }) {
|
|
269
|
+
// ~~~~~~~~~~~~~~~~ ERROR: expects { email: string; name: string }
|
|
270
|
+
return { id: '1' };
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
@MessagePattern('user.get')
|
|
274
|
+
async get(payload: { id: string }): Promise<{ wrong: boolean }> {
|
|
275
|
+
// ~~~~~~~~~~~~~~~~~ ERROR: must return User
|
|
276
|
+
return { wrong: true };
|
|
277
|
+
}
|
|
278
|
+
```
|
|
279
|
+
|
|
148
280
|
### 4. Handle messages (consumer)
|
|
149
281
|
|
|
282
|
+
#### Using decorators
|
|
283
|
+
|
|
150
284
|
```ts
|
|
151
285
|
// user.controller.ts
|
|
152
286
|
import { Controller } from '@nestjs/common';
|
|
153
287
|
import { TypedMessagePattern, TypedEventPattern } from '@jdevel/tnest';
|
|
154
288
|
import type { UserContracts } from './contracts/user.contracts';
|
|
155
289
|
|
|
290
|
+
// Bind the registry type once — pattern is specified only at the call site
|
|
291
|
+
const MessagePattern = TypedMessagePattern<UserContracts>();
|
|
292
|
+
const EventPattern = TypedEventPattern<UserContracts>();
|
|
293
|
+
|
|
156
294
|
@Controller()
|
|
157
295
|
export class UserController {
|
|
158
|
-
|
|
296
|
+
// The compiler enforces that payload and return type match the contract
|
|
297
|
+
@MessagePattern('user.create')
|
|
159
298
|
async create(payload: { email: string; name: string }) {
|
|
160
299
|
return { id: crypto.randomUUID(), ...payload };
|
|
161
300
|
}
|
|
162
301
|
|
|
163
|
-
@
|
|
302
|
+
@MessagePattern('user.get')
|
|
164
303
|
async get(payload: { id: string }) {
|
|
165
304
|
return { id: payload.id, email: 'user@example.com', name: 'Example' };
|
|
166
305
|
}
|
|
167
306
|
|
|
168
|
-
@
|
|
307
|
+
@EventPattern('user.created')
|
|
169
308
|
async handleCreated(payload: { userId: string; email: string }) {
|
|
170
309
|
console.log(`User created: ${payload.userId}`);
|
|
171
310
|
}
|
|
172
311
|
}
|
|
173
312
|
```
|
|
174
313
|
|
|
314
|
+
#### Using handler type helpers
|
|
315
|
+
|
|
316
|
+
If you prefer explicit typing without decorators, use `TypedMessageHandler` and `TypedEventHandler`:
|
|
317
|
+
|
|
318
|
+
```ts
|
|
319
|
+
import type { TypedMessageHandler, TypedEventHandler } from '@jdevel/tnest';
|
|
320
|
+
import { MessagePattern, EventPattern } from '@nestjs/microservices';
|
|
321
|
+
import type { UserContracts } from './contracts/user.contracts';
|
|
322
|
+
|
|
323
|
+
@Controller()
|
|
324
|
+
export class UserController {
|
|
325
|
+
@MessagePattern('user.create')
|
|
326
|
+
create: TypedMessageHandler<UserContracts, 'user.create'> = async (payload) => {
|
|
327
|
+
// payload is typed as { email: string; name: string }
|
|
328
|
+
// return type is enforced as User | Promise<User> | Observable<User>
|
|
329
|
+
return { id: crypto.randomUUID(), ...payload };
|
|
330
|
+
};
|
|
331
|
+
|
|
332
|
+
@EventPattern('user.created')
|
|
333
|
+
handleCreated: TypedEventHandler<UserContracts, 'user.created'> = async (payload) => {
|
|
334
|
+
// payload is typed as { userId: string; email: string }
|
|
335
|
+
// return type is enforced as void | Promise<void>
|
|
336
|
+
console.log(`User created: ${payload.userId}`);
|
|
337
|
+
};
|
|
338
|
+
}
|
|
339
|
+
```
|
|
340
|
+
|
|
175
341
|
## Testing
|
|
176
342
|
|
|
343
|
+
### MockTypedClient
|
|
344
|
+
|
|
177
345
|
`MockTypedClient` records every message and returns configurable canned responses:
|
|
178
346
|
|
|
179
347
|
```ts
|
|
@@ -183,60 +351,45 @@ import type { UserContracts } from './contracts/user.contracts';
|
|
|
183
351
|
|
|
184
352
|
const mock = new MockTypedClient<UserContracts>();
|
|
185
353
|
|
|
354
|
+
// Set up canned responses
|
|
186
355
|
mock.setResponse('user.get', {
|
|
187
356
|
id: '42',
|
|
188
357
|
email: 'test@example.com',
|
|
189
358
|
name: 'Test User',
|
|
190
359
|
});
|
|
191
360
|
|
|
361
|
+
// Use the mock exactly like a real TypedClient
|
|
192
362
|
const user = await firstValueFrom(mock.send('user.get', { id: '42' }));
|
|
193
363
|
// user.id === '42'
|
|
194
364
|
|
|
365
|
+
// Assert on recorded messages
|
|
195
366
|
expect(mock.messages).toEqual([{ type: 'send', pattern: 'user.get', payload: { id: '42' } }]);
|
|
367
|
+
|
|
368
|
+
// Reset between tests
|
|
369
|
+
mock.reset();
|
|
196
370
|
```
|
|
197
371
|
|
|
372
|
+
### TestContractModule
|
|
373
|
+
|
|
198
374
|
For integration tests, `TestContractModule` swaps real clients for mocks:
|
|
199
375
|
|
|
200
376
|
```ts
|
|
201
377
|
import { Test } from '@nestjs/testing';
|
|
202
|
-
import { MockTypedClient, TestContractModule } from '@jdevel/tnest';
|
|
378
|
+
import { MockTypedClient, TestContractModule, getClientToken } from '@jdevel/tnest';
|
|
203
379
|
import type { UserContracts } from './contracts/user.contracts';
|
|
204
380
|
|
|
205
|
-
const
|
|
381
|
+
const mockUserClient = new MockTypedClient<UserContracts>();
|
|
206
382
|
|
|
207
383
|
const module = await Test.createTestingModule({
|
|
208
|
-
imports: [TestContractModule.register([{ name: 'USER_SERVICE', mock }])],
|
|
384
|
+
imports: [TestContractModule.register([{ name: 'USER_SERVICE', mock: mockUserClient }])],
|
|
209
385
|
providers: [OrderService],
|
|
210
386
|
}).compile();
|
|
211
|
-
```
|
|
212
387
|
|
|
213
|
-
|
|
388
|
+
const service = module.get(OrderService);
|
|
214
389
|
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
import { ConfigModule, ConfigService } from '@nestjs/config';
|
|
219
|
-
import { TnestModule } from '@jdevel/tnest';
|
|
220
|
-
import { Transport } from '@nestjs/microservices';
|
|
221
|
-
|
|
222
|
-
TnestModule.forRootAsync({
|
|
223
|
-
imports: [ConfigModule],
|
|
224
|
-
useFactory: (config: ConfigService) => ({
|
|
225
|
-
clients: [
|
|
226
|
-
{
|
|
227
|
-
name: 'USER_SERVICE',
|
|
228
|
-
options: {
|
|
229
|
-
transport: Transport.TCP,
|
|
230
|
-
options: {
|
|
231
|
-
host: config.get('USER_SERVICE_HOST'),
|
|
232
|
-
port: config.get('USER_SERVICE_PORT'),
|
|
233
|
-
},
|
|
234
|
-
},
|
|
235
|
-
},
|
|
236
|
-
],
|
|
237
|
-
}),
|
|
238
|
-
inject: [ConfigService],
|
|
239
|
-
});
|
|
390
|
+
// The mock is also retrievable by token
|
|
391
|
+
const client = module.get(getClientToken('USER_SERVICE'));
|
|
392
|
+
// client === mockUserClient
|
|
240
393
|
```
|
|
241
394
|
|
|
242
395
|
## Runtime Validation (Optional)
|
|
@@ -253,17 +406,20 @@ import {
|
|
|
253
406
|
} from '@jdevel/tnest';
|
|
254
407
|
|
|
255
408
|
@Injectable()
|
|
256
|
-
class
|
|
409
|
+
class ZodValidator implements ContractValidator {
|
|
257
410
|
validate(payload: unknown): void {
|
|
258
411
|
// your validation logic (zod, class-validator, joi, etc.)
|
|
412
|
+
// throw an error if validation fails
|
|
259
413
|
}
|
|
260
414
|
}
|
|
261
415
|
|
|
262
416
|
// Register in module providers
|
|
263
|
-
{ provide: CONTRACT_VALIDATOR, useClass:
|
|
417
|
+
{ provide: CONTRACT_VALIDATOR, useClass: ZodValidator }
|
|
418
|
+
|
|
419
|
+
// Apply to handlers — validation runs before the handler method
|
|
420
|
+
const MessagePattern = TypedMessagePattern<UserContracts>();
|
|
264
421
|
|
|
265
|
-
|
|
266
|
-
@TypedMessagePattern<UserContracts>('user.create')
|
|
422
|
+
@MessagePattern('user.create')
|
|
267
423
|
@ValidateContract()
|
|
268
424
|
async create(payload: CreateUserDto) {
|
|
269
425
|
// payload has been validated at runtime
|
|
@@ -275,6 +431,7 @@ async create(payload: CreateUserDto) {
|
|
|
275
431
|
Provide custom payload serialization (protobuf, msgpack, etc.) by implementing `PayloadSerializer` and `PayloadDeserializer`:
|
|
276
432
|
|
|
277
433
|
```ts
|
|
434
|
+
import { Injectable } from '@nestjs/common';
|
|
278
435
|
import {
|
|
279
436
|
PAYLOAD_SERIALIZER,
|
|
280
437
|
PAYLOAD_DESERIALIZER,
|
|
@@ -284,8 +441,12 @@ import {
|
|
|
284
441
|
|
|
285
442
|
@Injectable()
|
|
286
443
|
class MsgpackSerializer implements PayloadSerializer, PayloadDeserializer {
|
|
287
|
-
serialize(payload: unknown) {
|
|
288
|
-
|
|
444
|
+
serialize(payload: unknown) {
|
|
445
|
+
return msgpack.encode(payload);
|
|
446
|
+
}
|
|
447
|
+
deserialize(data: unknown) {
|
|
448
|
+
return msgpack.decode(data as Buffer);
|
|
449
|
+
}
|
|
289
450
|
}
|
|
290
451
|
|
|
291
452
|
// Register in module providers
|
|
@@ -293,12 +454,15 @@ class MsgpackSerializer implements PayloadSerializer, PayloadDeserializer {
|
|
|
293
454
|
{ provide: PAYLOAD_DESERIALIZER, useClass: MsgpackSerializer }
|
|
294
455
|
```
|
|
295
456
|
|
|
457
|
+
A `DefaultPayloadSerializer` (pass-through) is included and used when no custom serializer is registered.
|
|
458
|
+
|
|
296
459
|
## Utility Types
|
|
297
460
|
|
|
298
461
|
Extract type information from your contract registry:
|
|
299
462
|
|
|
300
463
|
```ts
|
|
301
464
|
import type {
|
|
465
|
+
PatternOf,
|
|
302
466
|
PayloadOf,
|
|
303
467
|
ResponseOf,
|
|
304
468
|
CommandPatterns,
|
|
@@ -308,41 +472,64 @@ import type {
|
|
|
308
472
|
CommandsOf,
|
|
309
473
|
EventsOf,
|
|
310
474
|
QueriesOf,
|
|
475
|
+
ValidateRegistry,
|
|
311
476
|
} from '@jdevel/tnest';
|
|
312
477
|
|
|
313
|
-
|
|
314
|
-
type
|
|
478
|
+
// Extract parts of a single contract
|
|
479
|
+
type CreatePayload = PayloadOf<UserContracts['user.create']>; // CreateUserDto
|
|
480
|
+
type CreateResponse = ResponseOf<UserContracts['user.create']>; // User
|
|
481
|
+
type CreatePattern = PatternOf<UserContracts['user.create']>; // 'user.create'
|
|
482
|
+
|
|
483
|
+
// Pattern string unions by contract kind
|
|
315
484
|
type Cmds = CommandPatterns<UserContracts>; // 'user.create'
|
|
316
485
|
type Evts = EventPatterns<UserContracts>; // 'user.created'
|
|
317
486
|
type Qrys = QueryPatterns<UserContracts>; // 'user.get'
|
|
318
487
|
type Sendable = SendablePatterns<UserContracts>; // 'user.create' | 'user.get'
|
|
488
|
+
|
|
489
|
+
// Filter a registry to contracts of a specific kind
|
|
490
|
+
type OnlyCommands = CommandsOf<UserContracts>; // { 'user.create': Command<...> }
|
|
491
|
+
type OnlyEvents = EventsOf<UserContracts>; // { 'user.created': Event<...> }
|
|
492
|
+
type OnlyQueries = QueriesOf<UserContracts>; // { 'user.get': Query<...> }
|
|
493
|
+
|
|
494
|
+
// Validate that a registry's keys match its pattern type parameters
|
|
495
|
+
type Validated = ValidateRegistry<UserContracts>;
|
|
496
|
+
// Produces an error type if any key doesn't match its contract's pattern
|
|
319
497
|
```
|
|
320
498
|
|
|
321
499
|
## API Reference
|
|
322
500
|
|
|
323
|
-
| Export | Kind | Description
|
|
324
|
-
| ----------------------------------------------------- | --------- |
|
|
325
|
-
| `TnestModule` | Module | Dynamic module with `forRoot` / `forRootAsync`
|
|
326
|
-
| `TypedClient` | Class | Type-safe wrapper around `ClientProxy`
|
|
327
|
-
| `TypedClientFactory` | Service | Creates `TypedClient` instances
|
|
328
|
-
| `TypedMessagePattern` | Decorator | Typed `@MessagePattern` for commands/queries
|
|
329
|
-
| `TypedEventPattern` | Decorator | Typed `@EventPattern` for events
|
|
330
|
-
| `
|
|
331
|
-
| `
|
|
332
|
-
| `
|
|
333
|
-
| `getClientToken` | Function | Returns injection token for a named client
|
|
334
|
-
| `defineRegistry` | Function | Builder helper for defining contract registries
|
|
335
|
-
| `command` / `event` / `query` | Functions | Builder helpers for individual contracts
|
|
336
|
-
| `Command` / `Event` / `Query` | Type | Contract type interfaces
|
|
337
|
-
| `ContractRegistry` | Type | Base type for a registry of contracts
|
|
338
|
-
| `
|
|
339
|
-
| `
|
|
340
|
-
| `
|
|
341
|
-
| `
|
|
342
|
-
| `
|
|
343
|
-
| `
|
|
344
|
-
| `
|
|
345
|
-
| `
|
|
501
|
+
| Export | Kind | Description |
|
|
502
|
+
| ----------------------------------------------------- | --------- | --------------------------------------------------- |
|
|
503
|
+
| `TnestModule` | Module | Dynamic module with `forRoot` / `forRootAsync` |
|
|
504
|
+
| `TypedClient` | Class | Type-safe wrapper around `ClientProxy` |
|
|
505
|
+
| `TypedClientFactory` | Service | Creates `TypedClient` instances |
|
|
506
|
+
| `TypedMessagePattern` | Decorator | Typed `@MessagePattern` for commands/queries |
|
|
507
|
+
| `TypedEventPattern` | Decorator | Typed `@EventPattern` for events |
|
|
508
|
+
| `ValidateContract` | Decorator | Opt-in runtime payload validation |
|
|
509
|
+
| `MockTypedClient` | Class | Test double that records messages |
|
|
510
|
+
| `TestContractModule` | Module | Registers mock clients for testing |
|
|
511
|
+
| `getClientToken` | Function | Returns injection token for a named client |
|
|
512
|
+
| `defineRegistry` | Function | Builder helper for defining contract registries |
|
|
513
|
+
| `command` / `event` / `query` | Functions | Builder helpers for individual contracts |
|
|
514
|
+
| `Command` / `Event` / `Query` | Type | Contract type interfaces |
|
|
515
|
+
| `ContractRegistry` | Type | Base type for a registry of contracts |
|
|
516
|
+
| `ValidateRegistry` | Type | Validates registry keys match contract patterns |
|
|
517
|
+
| `PayloadOf` / `ResponseOf` / `PatternOf` | Type | Extract parts of a contract |
|
|
518
|
+
| `CommandsOf` / `EventsOf` / `QueriesOf` | Type | Filter registry by contract kind |
|
|
519
|
+
| `CommandPatterns` / `EventPatterns` / `QueryPatterns` | Type | Pattern string unions by kind |
|
|
520
|
+
| `SendablePatterns` | Type | Union of command + query patterns |
|
|
521
|
+
| `TypedMessageHandler` | Type | Function signature for command/query handlers |
|
|
522
|
+
| `TypedEventHandler` | Type | Function signature for event handlers |
|
|
523
|
+
| `TnestModuleOptions` | Interface | Configuration for `forRoot` |
|
|
524
|
+
| `TnestModuleAsyncOptions` | Interface | Configuration for `forRootAsync` |
|
|
525
|
+
| `TnestOptionsFactory` | Interface | Implement for `useClass`/`useExisting` async config |
|
|
526
|
+
| `TnestClientDefinition` | Interface | Client name + transport options pair |
|
|
527
|
+
| `ContractValidator` | Interface | Implement for runtime validation |
|
|
528
|
+
| `PayloadSerializer` / `PayloadDeserializer` | Interface | Implement for custom serialization |
|
|
529
|
+
| `DefaultPayloadSerializer` | Class | Pass-through serializer (default) |
|
|
530
|
+
| `CONTRACT_VALIDATOR` | Token | Injection token for validator |
|
|
531
|
+
| `PAYLOAD_SERIALIZER` / `PAYLOAD_DESERIALIZER` | Token | Injection tokens for serialization |
|
|
532
|
+
| `TNEST_OPTIONS` | Token | Injection token for module options |
|
|
346
533
|
|
|
347
534
|
## License
|
|
348
535
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tnest-module.spec.js","sourceRoot":"","sources":["../../src/__tests__/tnest-module.spec.ts"],"names":[],"mappings":";;AAAA,6CAAuC;AACvC,kDAA8C;AAC9C,sCAA+C;AAC/C,4CAA6D;AAG7D,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;QACzB,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;YAC3C,MAAM,MAAM,GAAG,MAAM,cAAI,CAAC,mBAAmB,CAAC;gBAC5C,OAAO,EAAE,CAAC,0BAAW,CAAC,OAAO,EAAE,CAAC;aACjC,CAAC,CAAC,OAAO,EAAE,CAAC;YAEb,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,2BAAkB,CAAC,CAAC;YAC/C,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,2BAAkB,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE;YACtC,MAAM,OAAO,GAAuB,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;YACpD,MAAM,MAAM,GAAG,MAAM,cAAI,CAAC,mBAAmB,CAAC;gBAC5C,OAAO,EAAE,CAAC,0BAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;aACxC,CAAC,CAAC,OAAO,EAAE,CAAC;YAEb,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,
|
|
1
|
+
{"version":3,"file":"tnest-module.spec.js","sourceRoot":"","sources":["../../src/__tests__/tnest-module.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typed-client-factory.spec.js","sourceRoot":"","sources":["../../../src/client/__tests__/typed-client-factory.spec.ts"],"names":[],"mappings":";;AAAA,+BAA0B;
|
|
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"}
|
|
@@ -3,10 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
const expect_type_1 = require("expect-type");
|
|
4
4
|
describe('TypedClient type constraints', () => {
|
|
5
5
|
it('send() returns Observable of correct response type for command', () => {
|
|
6
|
-
(0, expect_type_1.expectTypeOf)().parameter(0).
|
|
6
|
+
(0, expect_type_1.expectTypeOf)().parameter(0).toExtend();
|
|
7
7
|
});
|
|
8
8
|
it('send() infers response type from pattern', () => {
|
|
9
|
-
(0, expect_type_1.expectTypeOf)().
|
|
9
|
+
(0, expect_type_1.expectTypeOf)().toExtend();
|
|
10
10
|
});
|
|
11
11
|
it('emit() accepts only event patterns', () => {
|
|
12
12
|
(0, expect_type_1.expectTypeOf)().parameter(0).toEqualTypeOf();
|
|
@@ -1 +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,
|
|
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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typed-client.spec.js","sourceRoot":"","sources":["../../../src/client/__tests__/typed-client.spec.ts"],"names":[],"mappings":";;AAAA,+BAA0B;AAC1B,+BAAsC;AAEtC,kDAA8C;AAY9C,SAAS,qBAAqB;IAC5B,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,IAAA,SAAE,EAAC,SAAS,CAAC,CAAC;QAC9C,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,IAAA,SAAE,EAAC,SAAS,CAAC,CAAC;QAC9C,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC;QAC/C,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE;KACsB,CAAC;AAC3C,CAAC;AAED,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,IAAI,SAAmC,CAAC;IACxC,IAAI,MAAiC,CAAC;IAEtC,UAAU,CAAC,GAAG,EAAE;QACd,SAAS,GAAG,qBAAqB,EAAE,CAAC;QACpC,MAAM,GAAG,IAAI,0BAAW,CAAe,SAAS,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;QACtB,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;YACxE,MAAM,OAAO,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;YAClC,MAAM,QAAQ,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;YAC/B,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,IAAA,SAAE,EAAC,QAAQ,CAAC,CAAC,CAAC;YAE7C,MAAM,MAAM,GAAG,MAAM,IAAA,qBAAc,EAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"typed-client.spec.js","sourceRoot":"","sources":["../../../src/client/__tests__/typed-client.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -83,9 +83,9 @@ describe('ValidateRegistry', () => {
|
|
|
83
83
|
});
|
|
84
84
|
describe('AnyContract', () => {
|
|
85
85
|
it('accepts Command, Event, and Query', () => {
|
|
86
|
-
(0, expect_type_1.expectTypeOf)().
|
|
87
|
-
(0, expect_type_1.expectTypeOf)().
|
|
88
|
-
(0, expect_type_1.expectTypeOf)().
|
|
86
|
+
(0, expect_type_1.expectTypeOf)().toExtend();
|
|
87
|
+
(0, expect_type_1.expectTypeOf)().toExtend();
|
|
88
|
+
(0, expect_type_1.expectTypeOf)().toExtend();
|
|
89
89
|
});
|
|
90
90
|
});
|
|
91
91
|
//# sourceMappingURL=contract-types.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract-types.spec.js","sourceRoot":"","sources":["../../../src/contracts/__tests__/contract-types.spec.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"contract-types.spec.js","sourceRoot":"","sources":["../../../src/contracts/__tests__/contract-types.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,31 +5,31 @@ const define_helpers_1 = require("../define-helpers");
|
|
|
5
5
|
describe('command()', () => {
|
|
6
6
|
it('returns Command type with given payload and response', () => {
|
|
7
7
|
const c = (0, define_helpers_1.command)();
|
|
8
|
-
(0, expect_type_1.expectTypeOf)(c).
|
|
8
|
+
(0, expect_type_1.expectTypeOf)(c).toExtend();
|
|
9
9
|
});
|
|
10
10
|
it('defaults payload to void and response to void', () => {
|
|
11
11
|
const c = (0, define_helpers_1.command)();
|
|
12
|
-
(0, expect_type_1.expectTypeOf)(c).
|
|
12
|
+
(0, expect_type_1.expectTypeOf)(c).toExtend();
|
|
13
13
|
});
|
|
14
14
|
});
|
|
15
15
|
describe('event()', () => {
|
|
16
16
|
it('returns Event type with given payload', () => {
|
|
17
17
|
const e = (0, define_helpers_1.event)();
|
|
18
|
-
(0, expect_type_1.expectTypeOf)(e).
|
|
18
|
+
(0, expect_type_1.expectTypeOf)(e).toExtend();
|
|
19
19
|
});
|
|
20
20
|
it('defaults payload to void', () => {
|
|
21
21
|
const e = (0, define_helpers_1.event)();
|
|
22
|
-
(0, expect_type_1.expectTypeOf)(e).
|
|
22
|
+
(0, expect_type_1.expectTypeOf)(e).toExtend();
|
|
23
23
|
});
|
|
24
24
|
});
|
|
25
25
|
describe('query()', () => {
|
|
26
26
|
it('returns Query type with given payload and response', () => {
|
|
27
27
|
const q = (0, define_helpers_1.query)();
|
|
28
|
-
(0, expect_type_1.expectTypeOf)(q).
|
|
28
|
+
(0, expect_type_1.expectTypeOf)(q).toExtend();
|
|
29
29
|
});
|
|
30
30
|
});
|
|
31
31
|
describe('defineRegistry()', () => {
|
|
32
|
-
const
|
|
32
|
+
const _registry = (0, define_helpers_1.defineRegistry)({
|
|
33
33
|
'user.create': (0, define_helpers_1.command)(),
|
|
34
34
|
'user.created': (0, define_helpers_1.event)(),
|
|
35
35
|
'user.get': (0, define_helpers_1.query)(),
|
|
@@ -1 +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,
|
|
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"}
|
|
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
12
12
|
require("reflect-metadata");
|
|
13
13
|
const constants_1 = require("@nestjs/microservices/constants");
|
|
14
14
|
const typed_event_pattern_decorator_1 = require("../typed-event-pattern.decorator");
|
|
15
|
+
const EventPatternDecorator = (0, typed_event_pattern_decorator_1.TypedEventPattern)();
|
|
15
16
|
describe('TypedEventPattern', () => {
|
|
16
17
|
it('applies @EventPattern metadata with the given pattern', () => {
|
|
17
18
|
class TestHandler {
|
|
@@ -19,7 +20,7 @@ describe('TypedEventPattern', () => {
|
|
|
19
20
|
}
|
|
20
21
|
}
|
|
21
22
|
__decorate([
|
|
22
|
-
(
|
|
23
|
+
EventPatternDecorator('user.created'),
|
|
23
24
|
__metadata("design:type", Function),
|
|
24
25
|
__metadata("design:paramtypes", [Object]),
|
|
25
26
|
__metadata("design:returntype", void 0)
|
|
@@ -29,5 +30,33 @@ describe('TypedEventPattern', () => {
|
|
|
29
30
|
expect(metadata).toEqual(['user.created']);
|
|
30
31
|
expect(handlerType).toBe(2);
|
|
31
32
|
});
|
|
33
|
+
it('enforces method signature', () => {
|
|
34
|
+
class TestHandler {
|
|
35
|
+
handle(_payload) {
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
__decorate([
|
|
39
|
+
EventPatternDecorator('user.created'),
|
|
40
|
+
__metadata("design:type", Function),
|
|
41
|
+
__metadata("design:paramtypes", [Object]),
|
|
42
|
+
__metadata("design:returntype", void 0)
|
|
43
|
+
], TestHandler.prototype, "handle", null);
|
|
44
|
+
const metadata = Reflect.getMetadata(constants_1.PATTERN_METADATA, TestHandler.prototype.handle);
|
|
45
|
+
expect(metadata).toEqual(['user.created']);
|
|
46
|
+
});
|
|
47
|
+
it('enforces async method signature', () => {
|
|
48
|
+
class TestHandler {
|
|
49
|
+
async handle(_payload) {
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
__decorate([
|
|
53
|
+
EventPatternDecorator('user.created'),
|
|
54
|
+
__metadata("design:type", Function),
|
|
55
|
+
__metadata("design:paramtypes", [Object]),
|
|
56
|
+
__metadata("design:returntype", Promise)
|
|
57
|
+
], TestHandler.prototype, "handle", null);
|
|
58
|
+
const metadata = Reflect.getMetadata(constants_1.PATTERN_METADATA, TestHandler.prototype.handle);
|
|
59
|
+
expect(metadata).toEqual(['user.created']);
|
|
60
|
+
});
|
|
32
61
|
});
|
|
33
62
|
//# sourceMappingURL=typed-event-pattern.spec.js.map
|
|
@@ -1 +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,
|
|
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,MAAM,qBAAqB,GAAG,IAAA,iDAAiB,GAAgB,CAAC;AAEhE,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,qBAAqB,CAAC,cAAc,CAAC;;;;iDAGrC;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,2BAA2B,EAAE,GAAG,EAAE;QACnC,MAAM,WAAW;YAEf,MAAM,CAAC,QAA4B;YAEnC,CAAC;SACF;QAHC;YADC,qBAAqB,CAAC,cAAc,CAAC;;;;iDAGrC;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,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,WAAW;YAET,AAAN,KAAK,CAAC,MAAM,CAAC,QAA4B;YAEzC,CAAC;SACF;QAHO;YADL,qBAAqB,CAAC,cAAc,CAAC;;;;iDAGrC;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"}
|
|
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
12
12
|
require("reflect-metadata");
|
|
13
13
|
const constants_1 = require("@nestjs/microservices/constants");
|
|
14
14
|
const typed_message_pattern_decorator_1 = require("../typed-message-pattern.decorator");
|
|
15
|
+
const MessagePattern = (0, typed_message_pattern_decorator_1.TypedMessagePattern)();
|
|
15
16
|
describe('TypedMessagePattern', () => {
|
|
16
17
|
it('applies @MessagePattern metadata with the given pattern', () => {
|
|
17
18
|
class TestHandler {
|
|
@@ -20,7 +21,7 @@ describe('TypedMessagePattern', () => {
|
|
|
20
21
|
}
|
|
21
22
|
}
|
|
22
23
|
__decorate([
|
|
23
|
-
(
|
|
24
|
+
MessagePattern('user.create'),
|
|
24
25
|
__metadata("design:type", Function),
|
|
25
26
|
__metadata("design:paramtypes", [Object]),
|
|
26
27
|
__metadata("design:returntype", Object)
|
|
@@ -37,7 +38,7 @@ describe('TypedMessagePattern', () => {
|
|
|
37
38
|
}
|
|
38
39
|
}
|
|
39
40
|
__decorate([
|
|
40
|
-
(
|
|
41
|
+
MessagePattern('user.get'),
|
|
41
42
|
__metadata("design:type", Function),
|
|
42
43
|
__metadata("design:paramtypes", [Object]),
|
|
43
44
|
__metadata("design:returntype", Object)
|
|
@@ -45,5 +46,50 @@ describe('TypedMessagePattern', () => {
|
|
|
45
46
|
const metadata = Reflect.getMetadata(constants_1.PATTERN_METADATA, TestHandler.prototype.handle);
|
|
46
47
|
expect(metadata).toEqual(['user.get']);
|
|
47
48
|
});
|
|
49
|
+
it('enforces method signature for command patterns', () => {
|
|
50
|
+
class TestHandler {
|
|
51
|
+
handle(_payload) {
|
|
52
|
+
return { id: '1' };
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
__decorate([
|
|
56
|
+
MessagePattern('user.create'),
|
|
57
|
+
__metadata("design:type", Function),
|
|
58
|
+
__metadata("design:paramtypes", [Object]),
|
|
59
|
+
__metadata("design:returntype", Object)
|
|
60
|
+
], TestHandler.prototype, "handle", null);
|
|
61
|
+
const metadata = Reflect.getMetadata(constants_1.PATTERN_METADATA, TestHandler.prototype.handle);
|
|
62
|
+
expect(metadata).toEqual(['user.create']);
|
|
63
|
+
});
|
|
64
|
+
it('enforces method signature for query patterns', () => {
|
|
65
|
+
class TestHandler {
|
|
66
|
+
handle(_payload) {
|
|
67
|
+
return { name: 'Alice' };
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
__decorate([
|
|
71
|
+
MessagePattern('user.get'),
|
|
72
|
+
__metadata("design:type", Function),
|
|
73
|
+
__metadata("design:paramtypes", [Object]),
|
|
74
|
+
__metadata("design:returntype", Object)
|
|
75
|
+
], TestHandler.prototype, "handle", null);
|
|
76
|
+
const metadata = Reflect.getMetadata(constants_1.PATTERN_METADATA, TestHandler.prototype.handle);
|
|
77
|
+
expect(metadata).toEqual(['user.get']);
|
|
78
|
+
});
|
|
79
|
+
it('enforces async method signature', () => {
|
|
80
|
+
class TestHandler {
|
|
81
|
+
async handle(_payload) {
|
|
82
|
+
return { id: '1' };
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
__decorate([
|
|
86
|
+
MessagePattern('user.create'),
|
|
87
|
+
__metadata("design:type", Function),
|
|
88
|
+
__metadata("design:paramtypes", [Object]),
|
|
89
|
+
__metadata("design:returntype", Promise)
|
|
90
|
+
], TestHandler.prototype, "handle", null);
|
|
91
|
+
const metadata = Reflect.getMetadata(constants_1.PATTERN_METADATA, TestHandler.prototype.handle);
|
|
92
|
+
expect(metadata).toEqual(['user.create']);
|
|
93
|
+
});
|
|
48
94
|
});
|
|
49
95
|
//# sourceMappingURL=typed-message-pattern.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typed-message-pattern.spec.js","sourceRoot":"","sources":["../../../src/handlers/__tests__/typed-message-pattern.spec.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,4BAA0B;AAC1B,+DAA6F;AAC7F,wFAAyE;AAUzE,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,WAAW;YAEf,MAAM,CAAC,QAA0B;gBAC/B,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;YACrB,CAAC;SACF;QAHC;YADC,
|
|
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
|
-
|
|
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>>(pattern: P) => EventMethodDecorator<TRegistry, P>;
|
|
4
|
+
export {};
|
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.TypedEventPattern = TypedEventPattern;
|
|
4
4
|
const microservices_1 = require("@nestjs/microservices");
|
|
5
|
-
function TypedEventPattern(
|
|
6
|
-
return (
|
|
5
|
+
function TypedEventPattern() {
|
|
6
|
+
return (pattern) => {
|
|
7
|
+
return (0, microservices_1.EventPattern)(pattern);
|
|
8
|
+
};
|
|
7
9
|
}
|
|
8
10
|
//# sourceMappingURL=typed-event-pattern.decorator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typed-event-pattern.decorator.js","sourceRoot":"","sources":["../../src/handlers/typed-event-pattern.decorator.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"typed-event-pattern.decorator.js","sourceRoot":"","sources":["../../src/handlers/typed-event-pattern.decorator.ts"],"names":[],"mappings":";;AAgBA,8CAKC;AArBD,yDAAqD;AAgBrD,SAAgB,iBAAiB;IAC/B,OAAO,CAAqC,OAAU,EAAsC,EAAE;QAE5F,OAAO,IAAA,4BAAY,EAAC,OAAiB,CAAQ,CAAC;IAChD,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1,2 +1,5 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
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>>(pattern: P) => MessageMethodDecorator<TRegistry, P>;
|
|
5
|
+
export {};
|
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.TypedMessagePattern = TypedMessagePattern;
|
|
4
4
|
const microservices_1 = require("@nestjs/microservices");
|
|
5
|
-
function TypedMessagePattern(
|
|
6
|
-
return (
|
|
5
|
+
function TypedMessagePattern() {
|
|
6
|
+
return (pattern) => {
|
|
7
|
+
return (0, microservices_1.MessagePattern)(pattern);
|
|
8
|
+
};
|
|
7
9
|
}
|
|
8
10
|
//# sourceMappingURL=typed-message-pattern.decorator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typed-message-pattern.decorator.js","sourceRoot":"","sources":["../../src/handlers/typed-message-pattern.decorator.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"typed-message-pattern.decorator.js","sourceRoot":"","sources":["../../src/handlers/typed-message-pattern.decorator.ts"],"names":[],"mappings":";;AA0BA,kDAOC;AAjCD,yDAAuD;AA0BvD,SAAgB,mBAAmB;IACjC,OAAO,CACL,OAAU,EAC4B,EAAE;QAExC,OAAO,IAAA,8BAAc,EAAC,OAAiB,CAAQ,CAAC;IAClD,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-contract-module.spec.js","sourceRoot":"","sources":["../../../src/testing/__tests__/test-contract-module.spec.ts"],"names":[],"mappings":";;AAAA,6CAAuC;AACvC,kEAA6D;AAC7D,4DAAuD;AACvD,yCAAkD;AAClD,+CAAiD;AAQjD,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,UAAU,GAAG,IAAI,mCAAe,EAAgB,CAAC;QAEvD,MAAM,MAAM,GAAG,MAAM,cAAI,CAAC,mBAAmB,CAAC;YAC5C,OAAO,EAAE;gBACP,yCAAkB,CAAC,QAAQ,CAAC;oBAC1B,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,UAAoC,EAAE;iBACrE,CAAC;aACH;SACF,CAAC,CAAC,OAAO,EAAE,CAAC;QAEb,MAAM,KAAK,GAAG,IAAA,0BAAc,EAAC,cAAc,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,
|
|
1
|
+
{"version":3,"file":"test-contract-module.spec.js","sourceRoot":"","sources":["../../../src/testing/__tests__/test-contract-module.spec.ts"],"names":[],"mappings":";;AAAA,6CAAuC;AACvC,kEAA6D;AAC7D,4DAAuD;AACvD,yCAAkD;AAClD,+CAAiD;AAQjD,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,UAAU,GAAG,IAAI,mCAAe,EAAgB,CAAC;QAEvD,MAAM,MAAM,GAAG,MAAM,cAAI,CAAC,mBAAmB,CAAC;YAC5C,OAAO,EAAE;gBACP,yCAAkB,CAAC,QAAQ,CAAC;oBAC1B,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,UAAoC,EAAE;iBACrE,CAAC;aACH;SACF,CAAC,CAAC,OAAO,EAAE,CAAC;QAEb,MAAM,KAAK,GAAG,IAAA,0BAAc,EAAC,cAAc,CAAC,CAAC;QAC7C,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAU,KAAK,CAAC,CAAC;QAC5C,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;QAC3C,MAAM,MAAM,GAAG,MAAM,cAAI,CAAC,mBAAmB,CAAC;YAC5C,OAAO,EAAE,CAAC,yCAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;SAC3C,CAAC,CAAC,OAAO,EAAE,CAAC;QAEb,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,2BAAkB,CAAC,CAAC;QAC/C,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,CAAC,2BAAkB,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -20,7 +20,7 @@ describe('ValidateContract', () => {
|
|
|
20
20
|
constructor() {
|
|
21
21
|
this.__contractValidator = validator;
|
|
22
22
|
}
|
|
23
|
-
|
|
23
|
+
handle(payload) {
|
|
24
24
|
return `processed: ${String(payload)}`;
|
|
25
25
|
}
|
|
26
26
|
}
|
|
@@ -28,7 +28,7 @@ describe('ValidateContract', () => {
|
|
|
28
28
|
(0, validate_contract_decorator_1.ValidateContract)(),
|
|
29
29
|
__metadata("design:type", Function),
|
|
30
30
|
__metadata("design:paramtypes", [Object]),
|
|
31
|
-
__metadata("design:returntype",
|
|
31
|
+
__metadata("design:returntype", String)
|
|
32
32
|
], TestHandler.prototype, "handle", null);
|
|
33
33
|
const handler = new TestHandler();
|
|
34
34
|
const result = await handler.handle('test-data');
|
|
@@ -40,7 +40,7 @@ describe('ValidateContract', () => {
|
|
|
40
40
|
constructor() {
|
|
41
41
|
this.__contractValidator = undefined;
|
|
42
42
|
}
|
|
43
|
-
|
|
43
|
+
handle(payload) {
|
|
44
44
|
return `processed: ${String(payload)}`;
|
|
45
45
|
}
|
|
46
46
|
}
|
|
@@ -48,7 +48,7 @@ describe('ValidateContract', () => {
|
|
|
48
48
|
(0, validate_contract_decorator_1.ValidateContract)(),
|
|
49
49
|
__metadata("design:type", Function),
|
|
50
50
|
__metadata("design:paramtypes", [Object]),
|
|
51
|
-
__metadata("design:returntype",
|
|
51
|
+
__metadata("design:returntype", String)
|
|
52
52
|
], TestHandler.prototype, "handle", null);
|
|
53
53
|
const handler = new TestHandler();
|
|
54
54
|
const result = await handler.handle('test-data');
|
|
@@ -62,7 +62,7 @@ describe('ValidateContract', () => {
|
|
|
62
62
|
constructor() {
|
|
63
63
|
this.__contractValidator = validator;
|
|
64
64
|
}
|
|
65
|
-
|
|
65
|
+
handle(payload) {
|
|
66
66
|
return `processed: ${String(payload)}`;
|
|
67
67
|
}
|
|
68
68
|
}
|
|
@@ -70,7 +70,7 @@ describe('ValidateContract', () => {
|
|
|
70
70
|
(0, validate_contract_decorator_1.ValidateContract)(),
|
|
71
71
|
__metadata("design:type", Function),
|
|
72
72
|
__metadata("design:paramtypes", [Object]),
|
|
73
|
-
__metadata("design:returntype",
|
|
73
|
+
__metadata("design:returntype", String)
|
|
74
74
|
], TestHandler.prototype, "handle", null);
|
|
75
75
|
const handler = new TestHandler();
|
|
76
76
|
await expect(handler.handle('bad-data')).rejects.toThrow('Validation failed');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate-contract.spec.js","sourceRoot":"","sources":["../../../src/validation/__tests__/validate-contract.spec.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,4BAA0B;AAC1B,gFAAkE;AAGlE,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,SAAS,GAAsB;YACnC,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE;SACpB,CAAC;QAEF,MAAM,WAAW;YAAjB;gBACE,wBAAmB,GAAG,SAAS,CAAC;YAMlC,CAAC;
|
|
1
|
+
{"version":3,"file":"validate-contract.spec.js","sourceRoot":"","sources":["../../../src/validation/__tests__/validate-contract.spec.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jdevel/tnest",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.5",
|
|
4
4
|
"description": "Type-safe communication between NestJS microservices via shared contracts",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -16,7 +16,8 @@
|
|
|
16
16
|
"test:cov": "./node_modules/.bin/jest --coverage",
|
|
17
17
|
"format": "./node_modules/.bin/prettier --write .",
|
|
18
18
|
"format:check": "./node_modules/.bin/prettier --check .",
|
|
19
|
-
"prepublishOnly": "npm run build"
|
|
19
|
+
"prepublishOnly": "npm run build",
|
|
20
|
+
"prepare": "./node_modules/.bin/husky"
|
|
20
21
|
},
|
|
21
22
|
"peerDependencies": {
|
|
22
23
|
"@nestjs/common": "^10.0.0 || ^11.0.0",
|
|
@@ -33,6 +34,7 @@
|
|
|
33
34
|
"eslint": "^10.1.0",
|
|
34
35
|
"eslint-config-prettier": "^10.1.8",
|
|
35
36
|
"expect-type": "^1.3.0",
|
|
37
|
+
"husky": "^9.1.7",
|
|
36
38
|
"jest": "^30.3.0",
|
|
37
39
|
"prettier": "^3.8.1",
|
|
38
40
|
"reflect-metadata": "^0.2.0",
|