@jdevel/tnest 0.0.3 → 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.
- package/README.md +248 -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 +28 -0
- package/dist/handlers/__tests__/typed-event-pattern.spec.js.map +1 -1
- package/dist/handlers/__tests__/typed-message-pattern.spec.js +45 -0
- 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.map +1 -1
- package/dist/handlers/typed-message-pattern.decorator.d.ts +5 -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';
|
|
@@ -91,6 +95,13 @@ import { TnestModule } from '@jdevel/tnest';
|
|
|
91
95
|
options: { host: 'localhost', port: 3001 },
|
|
92
96
|
},
|
|
93
97
|
},
|
|
98
|
+
{
|
|
99
|
+
name: 'NOTIFICATION_SERVICE',
|
|
100
|
+
options: {
|
|
101
|
+
transport: Transport.REDIS,
|
|
102
|
+
options: { host: 'localhost', port: 6379 },
|
|
103
|
+
},
|
|
104
|
+
},
|
|
94
105
|
],
|
|
95
106
|
}),
|
|
96
107
|
],
|
|
@@ -98,6 +109,107 @@ import { TnestModule } from '@jdevel/tnest';
|
|
|
98
109
|
export class AppModule {}
|
|
99
110
|
```
|
|
100
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 {
|
|
172
|
+
clients: [
|
|
173
|
+
{
|
|
174
|
+
name: 'USER_SERVICE',
|
|
175
|
+
options: {
|
|
176
|
+
transport: Transport.TCP,
|
|
177
|
+
options: { host: 'localhost', port: 3001 },
|
|
178
|
+
},
|
|
179
|
+
},
|
|
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],
|
|
205
|
+
}),
|
|
206
|
+
],
|
|
207
|
+
})
|
|
208
|
+
export class AppModule {}
|
|
209
|
+
```
|
|
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,8 +259,28 @@ 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
|
+
When using the second type parameter on handler decorators, the compiler also catches handler signature mismatches:
|
|
263
|
+
|
|
264
|
+
```ts
|
|
265
|
+
@TypedMessagePattern<UserContracts, 'user.create'>('user.create')
|
|
266
|
+
async create(payload: { wrong: number }) {
|
|
267
|
+
// ~~~~~~~~~~~~~~~~ ERROR: expects { email: string; name: string }
|
|
268
|
+
return { id: '1' };
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
@TypedMessagePattern<UserContracts, 'user.get'>('user.get')
|
|
272
|
+
async get(payload: { id: string }): Promise<{ wrong: boolean }> {
|
|
273
|
+
// ~~~~~~~~~~~~~~~~~ ERROR: must return User
|
|
274
|
+
return { wrong: true };
|
|
275
|
+
}
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
> **Note:** Omitting the second type parameter preserves the existing behavior — the decorator validates the pattern string but does not constrain the method signature.
|
|
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';
|
|
@@ -155,25 +289,56 @@ import type { UserContracts } from './contracts/user.contracts';
|
|
|
155
289
|
|
|
156
290
|
@Controller()
|
|
157
291
|
export class UserController {
|
|
158
|
-
|
|
292
|
+
// Pass the pattern as a second type parameter to enforce the method signature.
|
|
293
|
+
// The compiler will error if the payload or return type doesn't match the contract.
|
|
294
|
+
@TypedMessagePattern<UserContracts, 'user.create'>('user.create')
|
|
159
295
|
async create(payload: { email: string; name: string }) {
|
|
160
296
|
return { id: crypto.randomUUID(), ...payload };
|
|
161
297
|
}
|
|
162
298
|
|
|
163
|
-
@TypedMessagePattern<UserContracts>('user.get')
|
|
299
|
+
@TypedMessagePattern<UserContracts, 'user.get'>('user.get')
|
|
164
300
|
async get(payload: { id: string }) {
|
|
165
301
|
return { id: payload.id, email: 'user@example.com', name: 'Example' };
|
|
166
302
|
}
|
|
167
303
|
|
|
168
|
-
@TypedEventPattern<UserContracts>('user.created')
|
|
304
|
+
@TypedEventPattern<UserContracts, 'user.created'>('user.created')
|
|
169
305
|
async handleCreated(payload: { userId: string; email: string }) {
|
|
170
306
|
console.log(`User created: ${payload.userId}`);
|
|
171
307
|
}
|
|
172
308
|
}
|
|
173
309
|
```
|
|
174
310
|
|
|
311
|
+
#### Using handler type helpers
|
|
312
|
+
|
|
313
|
+
If you prefer explicit typing without decorators, use `TypedMessageHandler` and `TypedEventHandler`:
|
|
314
|
+
|
|
315
|
+
```ts
|
|
316
|
+
import type { TypedMessageHandler, TypedEventHandler } from '@jdevel/tnest';
|
|
317
|
+
import { MessagePattern, EventPattern } from '@nestjs/microservices';
|
|
318
|
+
import type { UserContracts } from './contracts/user.contracts';
|
|
319
|
+
|
|
320
|
+
@Controller()
|
|
321
|
+
export class UserController {
|
|
322
|
+
@MessagePattern('user.create')
|
|
323
|
+
create: TypedMessageHandler<UserContracts, 'user.create'> = async (payload) => {
|
|
324
|
+
// payload is typed as { email: string; name: string }
|
|
325
|
+
// return type is enforced as User | Promise<User> | Observable<User>
|
|
326
|
+
return { id: crypto.randomUUID(), ...payload };
|
|
327
|
+
};
|
|
328
|
+
|
|
329
|
+
@EventPattern('user.created')
|
|
330
|
+
handleCreated: TypedEventHandler<UserContracts, 'user.created'> = async (payload) => {
|
|
331
|
+
// payload is typed as { userId: string; email: string }
|
|
332
|
+
// return type is enforced as void | Promise<void>
|
|
333
|
+
console.log(`User created: ${payload.userId}`);
|
|
334
|
+
};
|
|
335
|
+
}
|
|
336
|
+
```
|
|
337
|
+
|
|
175
338
|
## Testing
|
|
176
339
|
|
|
340
|
+
### MockTypedClient
|
|
341
|
+
|
|
177
342
|
`MockTypedClient` records every message and returns configurable canned responses:
|
|
178
343
|
|
|
179
344
|
```ts
|
|
@@ -183,60 +348,45 @@ import type { UserContracts } from './contracts/user.contracts';
|
|
|
183
348
|
|
|
184
349
|
const mock = new MockTypedClient<UserContracts>();
|
|
185
350
|
|
|
351
|
+
// Set up canned responses
|
|
186
352
|
mock.setResponse('user.get', {
|
|
187
353
|
id: '42',
|
|
188
354
|
email: 'test@example.com',
|
|
189
355
|
name: 'Test User',
|
|
190
356
|
});
|
|
191
357
|
|
|
358
|
+
// Use the mock exactly like a real TypedClient
|
|
192
359
|
const user = await firstValueFrom(mock.send('user.get', { id: '42' }));
|
|
193
360
|
// user.id === '42'
|
|
194
361
|
|
|
362
|
+
// Assert on recorded messages
|
|
195
363
|
expect(mock.messages).toEqual([{ type: 'send', pattern: 'user.get', payload: { id: '42' } }]);
|
|
364
|
+
|
|
365
|
+
// Reset between tests
|
|
366
|
+
mock.reset();
|
|
196
367
|
```
|
|
197
368
|
|
|
369
|
+
### TestContractModule
|
|
370
|
+
|
|
198
371
|
For integration tests, `TestContractModule` swaps real clients for mocks:
|
|
199
372
|
|
|
200
373
|
```ts
|
|
201
374
|
import { Test } from '@nestjs/testing';
|
|
202
|
-
import { MockTypedClient, TestContractModule } from '@jdevel/tnest';
|
|
375
|
+
import { MockTypedClient, TestContractModule, getClientToken } from '@jdevel/tnest';
|
|
203
376
|
import type { UserContracts } from './contracts/user.contracts';
|
|
204
377
|
|
|
205
|
-
const
|
|
378
|
+
const mockUserClient = new MockTypedClient<UserContracts>();
|
|
206
379
|
|
|
207
380
|
const module = await Test.createTestingModule({
|
|
208
|
-
imports: [TestContractModule.register([{ name: 'USER_SERVICE', mock }])],
|
|
381
|
+
imports: [TestContractModule.register([{ name: 'USER_SERVICE', mock: mockUserClient }])],
|
|
209
382
|
providers: [OrderService],
|
|
210
383
|
}).compile();
|
|
211
|
-
```
|
|
212
|
-
|
|
213
|
-
## Async Module Configuration
|
|
214
384
|
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
```ts
|
|
218
|
-
import { ConfigModule, ConfigService } from '@nestjs/config';
|
|
219
|
-
import { TnestModule } from '@jdevel/tnest';
|
|
220
|
-
import { Transport } from '@nestjs/microservices';
|
|
385
|
+
const service = module.get(OrderService);
|
|
221
386
|
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
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
|
-
});
|
|
387
|
+
// The mock is also retrievable by token
|
|
388
|
+
const client = module.get(getClientToken('USER_SERVICE'));
|
|
389
|
+
// client === mockUserClient
|
|
240
390
|
```
|
|
241
391
|
|
|
242
392
|
## Runtime Validation (Optional)
|
|
@@ -253,17 +403,18 @@ import {
|
|
|
253
403
|
} from '@jdevel/tnest';
|
|
254
404
|
|
|
255
405
|
@Injectable()
|
|
256
|
-
class
|
|
406
|
+
class ZodValidator implements ContractValidator {
|
|
257
407
|
validate(payload: unknown): void {
|
|
258
408
|
// your validation logic (zod, class-validator, joi, etc.)
|
|
409
|
+
// throw an error if validation fails
|
|
259
410
|
}
|
|
260
411
|
}
|
|
261
412
|
|
|
262
413
|
// Register in module providers
|
|
263
|
-
{ provide: CONTRACT_VALIDATOR, useClass:
|
|
414
|
+
{ provide: CONTRACT_VALIDATOR, useClass: ZodValidator }
|
|
264
415
|
|
|
265
|
-
// Apply to handlers
|
|
266
|
-
@TypedMessagePattern<UserContracts>('user.create')
|
|
416
|
+
// Apply to handlers — validation runs before the handler method
|
|
417
|
+
@TypedMessagePattern<UserContracts, 'user.create'>('user.create')
|
|
267
418
|
@ValidateContract()
|
|
268
419
|
async create(payload: CreateUserDto) {
|
|
269
420
|
// payload has been validated at runtime
|
|
@@ -275,6 +426,7 @@ async create(payload: CreateUserDto) {
|
|
|
275
426
|
Provide custom payload serialization (protobuf, msgpack, etc.) by implementing `PayloadSerializer` and `PayloadDeserializer`:
|
|
276
427
|
|
|
277
428
|
```ts
|
|
429
|
+
import { Injectable } from '@nestjs/common';
|
|
278
430
|
import {
|
|
279
431
|
PAYLOAD_SERIALIZER,
|
|
280
432
|
PAYLOAD_DESERIALIZER,
|
|
@@ -284,8 +436,12 @@ import {
|
|
|
284
436
|
|
|
285
437
|
@Injectable()
|
|
286
438
|
class MsgpackSerializer implements PayloadSerializer, PayloadDeserializer {
|
|
287
|
-
serialize(payload: unknown) {
|
|
288
|
-
|
|
439
|
+
serialize(payload: unknown) {
|
|
440
|
+
return msgpack.encode(payload);
|
|
441
|
+
}
|
|
442
|
+
deserialize(data: unknown) {
|
|
443
|
+
return msgpack.decode(data as Buffer);
|
|
444
|
+
}
|
|
289
445
|
}
|
|
290
446
|
|
|
291
447
|
// Register in module providers
|
|
@@ -293,12 +449,15 @@ class MsgpackSerializer implements PayloadSerializer, PayloadDeserializer {
|
|
|
293
449
|
{ provide: PAYLOAD_DESERIALIZER, useClass: MsgpackSerializer }
|
|
294
450
|
```
|
|
295
451
|
|
|
452
|
+
A `DefaultPayloadSerializer` (pass-through) is included and used when no custom serializer is registered.
|
|
453
|
+
|
|
296
454
|
## Utility Types
|
|
297
455
|
|
|
298
456
|
Extract type information from your contract registry:
|
|
299
457
|
|
|
300
458
|
```ts
|
|
301
459
|
import type {
|
|
460
|
+
PatternOf,
|
|
302
461
|
PayloadOf,
|
|
303
462
|
ResponseOf,
|
|
304
463
|
CommandPatterns,
|
|
@@ -308,41 +467,64 @@ import type {
|
|
|
308
467
|
CommandsOf,
|
|
309
468
|
EventsOf,
|
|
310
469
|
QueriesOf,
|
|
470
|
+
ValidateRegistry,
|
|
311
471
|
} from '@jdevel/tnest';
|
|
312
472
|
|
|
313
|
-
|
|
314
|
-
type
|
|
473
|
+
// Extract parts of a single contract
|
|
474
|
+
type CreatePayload = PayloadOf<UserContracts['user.create']>; // CreateUserDto
|
|
475
|
+
type CreateResponse = ResponseOf<UserContracts['user.create']>; // User
|
|
476
|
+
type CreatePattern = PatternOf<UserContracts['user.create']>; // 'user.create'
|
|
477
|
+
|
|
478
|
+
// Pattern string unions by contract kind
|
|
315
479
|
type Cmds = CommandPatterns<UserContracts>; // 'user.create'
|
|
316
480
|
type Evts = EventPatterns<UserContracts>; // 'user.created'
|
|
317
481
|
type Qrys = QueryPatterns<UserContracts>; // 'user.get'
|
|
318
482
|
type Sendable = SendablePatterns<UserContracts>; // 'user.create' | 'user.get'
|
|
483
|
+
|
|
484
|
+
// Filter a registry to contracts of a specific kind
|
|
485
|
+
type OnlyCommands = CommandsOf<UserContracts>; // { 'user.create': Command<...> }
|
|
486
|
+
type OnlyEvents = EventsOf<UserContracts>; // { 'user.created': Event<...> }
|
|
487
|
+
type OnlyQueries = QueriesOf<UserContracts>; // { 'user.get': Query<...> }
|
|
488
|
+
|
|
489
|
+
// Validate that a registry's keys match its pattern type parameters
|
|
490
|
+
type Validated = ValidateRegistry<UserContracts>;
|
|
491
|
+
// Produces an error type if any key doesn't match its contract's pattern
|
|
319
492
|
```
|
|
320
493
|
|
|
321
494
|
## API Reference
|
|
322
495
|
|
|
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
|
-
| `
|
|
496
|
+
| Export | Kind | Description |
|
|
497
|
+
| ----------------------------------------------------- | --------- | --------------------------------------------------- |
|
|
498
|
+
| `TnestModule` | Module | Dynamic module with `forRoot` / `forRootAsync` |
|
|
499
|
+
| `TypedClient` | Class | Type-safe wrapper around `ClientProxy` |
|
|
500
|
+
| `TypedClientFactory` | Service | Creates `TypedClient` instances |
|
|
501
|
+
| `TypedMessagePattern` | Decorator | Typed `@MessagePattern` for commands/queries |
|
|
502
|
+
| `TypedEventPattern` | Decorator | Typed `@EventPattern` for events |
|
|
503
|
+
| `ValidateContract` | Decorator | Opt-in runtime payload validation |
|
|
504
|
+
| `MockTypedClient` | Class | Test double that records messages |
|
|
505
|
+
| `TestContractModule` | Module | Registers mock clients for testing |
|
|
506
|
+
| `getClientToken` | Function | Returns injection token for a named client |
|
|
507
|
+
| `defineRegistry` | Function | Builder helper for defining contract registries |
|
|
508
|
+
| `command` / `event` / `query` | Functions | Builder helpers for individual contracts |
|
|
509
|
+
| `Command` / `Event` / `Query` | Type | Contract type interfaces |
|
|
510
|
+
| `ContractRegistry` | Type | Base type for a registry of contracts |
|
|
511
|
+
| `ValidateRegistry` | Type | Validates registry keys match contract patterns |
|
|
512
|
+
| `PayloadOf` / `ResponseOf` / `PatternOf` | Type | Extract parts of a contract |
|
|
513
|
+
| `CommandsOf` / `EventsOf` / `QueriesOf` | Type | Filter registry by contract kind |
|
|
514
|
+
| `CommandPatterns` / `EventPatterns` / `QueryPatterns` | Type | Pattern string unions by kind |
|
|
515
|
+
| `SendablePatterns` | Type | Union of command + query patterns |
|
|
516
|
+
| `TypedMessageHandler` | Type | Function signature for command/query handlers |
|
|
517
|
+
| `TypedEventHandler` | Type | Function signature for event handlers |
|
|
518
|
+
| `TnestModuleOptions` | Interface | Configuration for `forRoot` |
|
|
519
|
+
| `TnestModuleAsyncOptions` | Interface | Configuration for `forRootAsync` |
|
|
520
|
+
| `TnestOptionsFactory` | Interface | Implement for `useClass`/`useExisting` async config |
|
|
521
|
+
| `TnestClientDefinition` | Interface | Client name + transport options pair |
|
|
522
|
+
| `ContractValidator` | Interface | Implement for runtime validation |
|
|
523
|
+
| `PayloadSerializer` / `PayloadDeserializer` | Interface | Implement for custom serialization |
|
|
524
|
+
| `DefaultPayloadSerializer` | Class | Pass-through serializer (default) |
|
|
525
|
+
| `CONTRACT_VALIDATOR` | Token | Injection token for validator |
|
|
526
|
+
| `PAYLOAD_SERIALIZER` / `PAYLOAD_DESERIALIZER` | Token | Injection tokens for serialization |
|
|
527
|
+
| `TNEST_OPTIONS` | Token | Injection token for module options |
|
|
346
528
|
|
|
347
529
|
## License
|
|
348
530
|
|
|
@@ -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"}
|
|
@@ -29,5 +29,33 @@ describe('TypedEventPattern', () => {
|
|
|
29
29
|
expect(metadata).toEqual(['user.created']);
|
|
30
30
|
expect(handlerType).toBe(2);
|
|
31
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
|
+
});
|
|
32
60
|
});
|
|
33
61
|
//# 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,IAAA,iDAAiB,EAAe,cAAc,CAAC;;;;iDAG/C;
|
|
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"}
|
|
@@ -45,5 +45,50 @@ describe('TypedMessagePattern', () => {
|
|
|
45
45
|
const metadata = Reflect.getMetadata(constants_1.PATTERN_METADATA, TestHandler.prototype.handle);
|
|
46
46
|
expect(metadata).toEqual(['user.get']);
|
|
47
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
|
+
});
|
|
48
93
|
});
|
|
49
94
|
//# 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,IAAA,qDAAmB,EAAe,aAAa,CAAC;;;;iDAGhD;
|
|
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,IAAA,qDAAmB,EAAe,aAAa,CAAC;;;;iDAGhD;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,aAAa,CAAC,CAAC,CAAC;QAC1C,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,QAAwB;gBAC7B,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;YAC3B,CAAC;SACF;QAHC;YADC,IAAA,qDAAmB,EAAe,UAAU,CAAC;;;;iDAG7C;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,UAAU,CAAC,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC3E,MAAM,WAAW;YAEf,MAAM,CAAC,QAA0B;gBAC/B,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;YACrB,CAAC;SACF;QAHC;YADC,IAAA,qDAAmB,EAA8B,aAAa,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,aAAa,CAAC,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yEAAyE,EAAE,GAAG,EAAE;QACjF,MAAM,WAAW;YAEf,MAAM,CAAC,QAAwB;gBAC7B,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;YAC3B,CAAC;SACF;QAHC;YADC,IAAA,qDAAmB,EAA2B,UAAU,CAAC;;;;iDAGzD;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,UAAU,CAAC,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yEAAyE,EAAE,GAAG,EAAE;QACjF,MAAM,WAAW;YAGT,AAAN,KAAK,CAAC,MAAM,CAAC,QAA0B;gBACrC,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;YACrB,CAAC;SACF;QAHO;YAFL,IAAA,qDAAmB,EAA8B,aAAa,CAAC;;;;iDAI/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,aAAa,CAAC,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -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> = 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":";;
|
|
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 {
|
|
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> = 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":";;
|
|
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"}
|
|
@@ -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.4",
|
|
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",
|