@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 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
- @TypedMessagePattern<UserContracts>('user.create')
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 mock = new MockTypedClient<UserContracts>();
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
- Use `forRootAsync` when transport config comes from `ConfigService` or another async source:
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
- 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
- });
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 MyValidator implements ContractValidator {
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: MyValidator }
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) { return msgpack.encode(payload); }
288
- deserialize(data: unknown) { return msgpack.decode(data as Buffer); }
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
- type Payload = PayloadOf<UserContracts['user.create']>; // CreateUserDto
314
- type Response = ResponseOf<UserContracts['user.create']>; // User
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
- | `MockTypedClient` | Class | Test double that records messages |
331
- | `TestContractModule` | Module | Registers mock clients for testing |
332
- | `ValidateContract` | Decorator | Opt-in runtime payload validation |
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
- | `PayloadOf` / `ResponseOf` / `PatternOf` | Type | Extract parts of a contract |
339
- | `CommandsOf` / `EventsOf` / `QueriesOf` | Type | Filter registry by contract kind |
340
- | `CommandPatterns` / `EventPatterns` / `QueryPatterns` | Type | Pattern string unions by kind |
341
- | `SendablePatterns` | Type | Union of command + query patterns |
342
- | `ContractValidator` | Interface | Implement for runtime validation |
343
- | `PayloadSerializer` / `PayloadDeserializer` | Interface | Implement for custom serialization |
344
- | `CONTRACT_VALIDATOR` | Token | Injection token for validator |
345
- | `PAYLOAD_SERIALIZER` / `PAYLOAD_DESERIALIZER` | Token | Injection tokens for serialization |
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,CAAC,yBAAa,CAAC,CAAC;YAC3C,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;YACrE,MAAM,MAAM,GAAG,MAAM,cAAI,CAAC,mBAAmB,CAAC;gBAC5C,OAAO,EAAE;oBACP,0BAAW,CAAC,OAAO,CAAC;wBAClB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;qBAC/D,CAAC;iBACH;aACF,CAAC,CAAC,OAAO,EAAE,CAAC;YAEb,MAAM,KAAK,GAAG,IAAA,0BAAc,EAAC,cAAc,CAAC,CAAC;YAC7C,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACjC,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;YAC3C,MAAM,MAAM,GAAG,MAAM,cAAI,CAAC,mBAAmB,CAAC;gBAC5C,OAAO,EAAE;oBACP,0BAAW,CAAC,YAAY,CAAC;wBACvB,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;qBACpC,CAAC;iBACH;aACF,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,qCAAqC,EAAE,KAAK,IAAI,EAAE;YACnD,MAAM,OAAO,GAAuB,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;YACpD,MAAM,MAAM,GAAG,MAAM,cAAI,CAAC,mBAAmB,CAAC;gBAC5C,OAAO,EAAE;oBACP,0BAAW,CAAC,YAAY,CAAC;wBACvB,UAAU,EAAE,GAAG,EAAE,CAAC,OAAO;qBAC1B,CAAC;iBACH;aACF,CAAC,CAAC,OAAO,EAAE,CAAC;YAEb,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,yBAAa,CAAC,CAAC;YAC3C,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;YAC3E,MAAM,MAAM,GAAG,MAAM,cAAI,CAAC,mBAAmB,CAAC;gBAC5C,OAAO,EAAE;oBACP,0BAAW,CAAC,YAAY,CAAC;wBACvB,WAAW,EAAE,CAAC,cAAc,CAAC;wBAC7B,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;4BACjB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;yBAC/D,CAAC;qBACH,CAAC;iBACH;aACF,CAAC,CAAC,OAAO,EAAE,CAAC;YAEb,MAAM,KAAK,GAAG,IAAA,0BAAc,EAAC,cAAc,CAAC,CAAC;YAC7C,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACjC,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;QAC/B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;YACvE,MAAM,MAAM,CACV,cAAI,CAAC,mBAAmB,CAAC;gBACvB,OAAO,EAAE;oBACP,0BAAW,CAAC,YAAY,CAAC;wBACvB,WAAW,EAAE,CAAC,iBAAiB,CAAC;wBAChC,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;qBACpC,CAAC;iBACH;aACF,CAAC,CAAC,OAAO,EAAE,CACb,CAAC,OAAO,CAAC,OAAO,CAAC,oEAAoE,CAAC,CAAC;QAC1F,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
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,CAAqB,yBAAa,CAAC,CAAC;YAC/D,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;YACrE,MAAM,MAAM,GAAG,MAAM,cAAI,CAAC,mBAAmB,CAAC;gBAC5C,OAAO,EAAE;oBACP,0BAAW,CAAC,OAAO,CAAC;wBAClB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;qBAC/D,CAAC;iBACH;aACF,CAAC,CAAC,OAAO,EAAE,CAAC;YAEb,MAAM,KAAK,GAAG,IAAA,0BAAc,EAAC,cAAc,CAAC,CAAC;YAC7C,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAU,KAAK,CAAC,CAAC;YAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;YAC3C,MAAM,MAAM,GAAG,MAAM,cAAI,CAAC,mBAAmB,CAAC;gBAC5C,OAAO,EAAE;oBACP,0BAAW,CAAC,YAAY,CAAC;wBACvB,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;qBACpC,CAAC;iBACH;aACF,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,qCAAqC,EAAE,KAAK,IAAI,EAAE;YACnD,MAAM,OAAO,GAAuB,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;YACpD,MAAM,MAAM,GAAG,MAAM,cAAI,CAAC,mBAAmB,CAAC;gBAC5C,OAAO,EAAE;oBACP,0BAAW,CAAC,YAAY,CAAC;wBACvB,UAAU,EAAE,GAAG,EAAE,CAAC,OAAO;qBAC1B,CAAC;iBACH;aACF,CAAC,CAAC,OAAO,EAAE,CAAC;YAEb,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAqB,yBAAa,CAAC,CAAC;YAC/D,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;YAC3E,MAAM,MAAM,GAAG,MAAM,cAAI,CAAC,mBAAmB,CAAC;gBAC5C,OAAO,EAAE;oBACP,0BAAW,CAAC,YAAY,CAAC;wBACvB,WAAW,EAAE,CAAC,cAAc,CAAC;wBAC7B,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;4BACjB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;yBAC/D,CAAC;qBACH,CAAC;iBACH;aACF,CAAC,CAAC,OAAO,EAAE,CAAC;YAEb,MAAM,KAAK,GAAG,IAAA,0BAAc,EAAC,cAAc,CAAC,CAAC;YAC7C,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAU,KAAK,CAAC,CAAC;YAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;QAC/B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;YACvE,MAAM,MAAM,CACV,cAAI,CAAC,mBAAmB,CAAC;gBACvB,OAAO,EAAE;oBACP,0BAAW,CAAC,YAAY,CAAC;wBACvB,WAAW,EAAE,CAAC,iBAAiB,CAAC;wBAChC,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;qBACpC,CAAC;iBACH;aACF,CAAC,CAAC,OAAO,EAAE,CACb,CAAC,OAAO,CAAC,OAAO,CAAC,oEAAoE,CAAC,CAAC;QAC1F,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -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;AAC1B,yDAAwE;AACxE,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;QAE9D,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"}
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).toMatchTypeOf();
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)().toMatchTypeOf();
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,aAAa,EAA8B,CAAC;IAC1F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAElD,IAAA,0BAAY,GAAc,CAAC,aAAa,EAAuB,CAAC;IAClE,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
+ {"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":"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"}
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;YAGzE,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;YACpE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;YACzC,MAAM,OAAO,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;YAC9B,MAAM,QAAQ,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;YACnC,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,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;YAGtE,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACjE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;QACtB,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;YACxE,MAAM,OAAO,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;YAElC,MAAM,IAAA,qBAAc,EAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC;YAG3D,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;QACvE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;QACzB,EAAE,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;YAClD,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;YAEvB,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAC/C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;QACvB,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;YAC1C,MAAM,CAAC,KAAK,EAAE,CAAC;YAEf,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAC7C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -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)().toMatchTypeOf();
87
- (0, expect_type_1.expectTypeOf)().toMatchTypeOf();
88
- (0, expect_type_1.expectTypeOf)().toMatchTypeOf();
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).toMatchTypeOf();
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).toMatchTypeOf();
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).toMatchTypeOf();
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).toMatchTypeOf();
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).toMatchTypeOf();
28
+ (0, expect_type_1.expectTypeOf)(q).toExtend();
29
29
  });
30
30
  });
31
31
  describe('defineRegistry()', () => {
32
- const registry = (0, define_helpers_1.defineRegistry)({
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,aAAa,EAAqD,CAAC;IACrF,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,aAAa,EAA+B,CAAC;IAC/D,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,aAAa,EAAqC,CAAC;IACrE,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,aAAa,EAAuB,CAAC;IACvD,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,aAAa,EAAmD,CAAC;IACnF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,MAAM,QAAQ,GAAG,IAAA,+BAAc,EAAC;QAC9B,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,GAAoC,CAAC,aAAa,EAAiB,CAAC;QAChF,IAAA,0BAAY,GAAkC,CAAC,aAAa,EAAkB,CAAC;QAC/E,IAAA,0BAAY,GAAkC,CAAC,aAAa,EAAc,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,IAAA,0BAAY,GAA+C,CAAC,aAAa,EAAoB,CAAC;QAC9F,IAAA,0BAAY,GAAgD,CAAC,aAAa,EAEtE,CAAC;QACL,IAAA,0BAAY,GAA4C,CAAC,aAAa,EAAkB,CAAC;IAC3F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,IAAA,0BAAY,GAAgD,CAAC,aAAa,EAAkB,CAAC;QAC7F,IAAA,0BAAY,GAA6C,CAAC,aAAa,EAAoB,CAAC;IAC9F,CAAC,CAAC,CAAC;AACL,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;QAGH,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,4BAAgB,EAAE,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACrF,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;AACL,CAAC,CAAC,CAAC"}
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;QAGH,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,4BAAgB,EAAE,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACrF,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;QAGH,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;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"typed-message-pattern.spec.js","sourceRoot":"","sources":["../../../src/handlers/__tests__/typed-message-pattern.spec.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,4 @@
1
- import type { ContractRegistry, EventPatterns } from '../contracts';
2
- export declare function TypedEventPattern<TRegistry extends ContractRegistry>(pattern: EventPatterns<TRegistry>): MethodDecorator;
1
+ import type { ContractRegistry, EventPatterns, PayloadOf } from '../contracts';
2
+ type EventMethodDecorator<TRegistry extends ContractRegistry, P extends string & keyof TRegistry> = (target: object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor<(data: PayloadOf<TRegistry[P]>) => void> | TypedPropertyDescriptor<(data: PayloadOf<TRegistry[P]>) => Promise<void>>) => void;
3
+ export declare function TypedEventPattern<TRegistry extends ContractRegistry, P extends EventPatterns<TRegistry> = never>(pattern: [P] extends [never] ? EventPatterns<TRegistry> : P): [P] extends [never] ? MethodDecorator : EventMethodDecorator<TRegistry, P>;
4
+ export {};
@@ -1 +1 @@
1
- {"version":3,"file":"typed-event-pattern.decorator.js","sourceRoot":"","sources":["../../src/handlers/typed-event-pattern.decorator.ts"],"names":[],"mappings":";;AAGA,8CAIC;AAPD,yDAAqD;AAGrD,SAAgB,iBAAiB,CAC/B,OAAiC;IAEjC,OAAO,IAAA,4BAAY,EAAC,OAAO,CAAC,CAAC;AAC/B,CAAC"}
1
+ {"version":3,"file":"typed-event-pattern.decorator.js","sourceRoot":"","sources":["../../src/handlers/typed-event-pattern.decorator.ts"],"names":[],"mappings":";;AAgBA,8CAQC;AAxBD,yDAAqD;AAgBrD,SAAgB,iBAAiB,CAI/B,OAA2D;IAG3D,OAAO,IAAA,4BAAY,EAAC,OAAiB,CAAQ,CAAC;AAChD,CAAC"}
@@ -1,2 +1,5 @@
1
- import type { ContractRegistry, CommandPatterns, QueryPatterns } from '../contracts';
2
- export declare function TypedMessagePattern<TRegistry extends ContractRegistry>(pattern: CommandPatterns<TRegistry> | QueryPatterns<TRegistry>): MethodDecorator;
1
+ import type { Observable } from 'rxjs';
2
+ import type { ContractRegistry, CommandPatterns, QueryPatterns, PayloadOf, ResponseOf } from '../contracts';
3
+ type MessageMethodDecorator<TRegistry extends ContractRegistry, P extends string & keyof TRegistry> = (target: object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor<(data: PayloadOf<TRegistry[P]>) => ResponseOf<TRegistry[P]>> | TypedPropertyDescriptor<(data: PayloadOf<TRegistry[P]>) => Promise<ResponseOf<TRegistry[P]>>> | TypedPropertyDescriptor<(data: PayloadOf<TRegistry[P]>) => Observable<ResponseOf<TRegistry[P]>>>) => void;
4
+ export declare function TypedMessagePattern<TRegistry extends ContractRegistry, P extends CommandPatterns<TRegistry> | QueryPatterns<TRegistry> = never>(pattern: [P] extends [never] ? CommandPatterns<TRegistry> | QueryPatterns<TRegistry> : P): [P] extends [never] ? MethodDecorator : MessageMethodDecorator<TRegistry, P>;
5
+ export {};
@@ -1 +1 @@
1
- {"version":3,"file":"typed-message-pattern.decorator.js","sourceRoot":"","sources":["../../src/handlers/typed-message-pattern.decorator.ts"],"names":[],"mappings":";;AAGA,kDAIC;AAPD,yDAAuD;AAGvD,SAAgB,mBAAmB,CACjC,OAA8D;IAE9D,OAAO,IAAA,8BAAc,EAAC,OAAO,CAAC,CAAC;AACjC,CAAC"}
1
+ {"version":3,"file":"typed-message-pattern.decorator.js","sourceRoot":"","sources":["../../src/handlers/typed-message-pattern.decorator.ts"],"names":[],"mappings":";;AA0BA,kDAQC;AAlCD,yDAAuD;AA0BvD,SAAgB,mBAAmB,CAIjC,OAAwF;IAGxF,OAAO,IAAA,8BAAc,EAAC,OAAiB,CAAQ,CAAC;AAClD,CAAC"}
@@ -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,CAAC,KAAK,CAAC,CAAC;QACnC,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"}
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
- async handle(payload) {
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", Promise)
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
- async handle(payload) {
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", Promise)
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
- async handle(payload) {
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", Promise)
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":"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"}
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",
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",