@jdevel/tnest 0.0.5 → 0.0.6
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 +30 -0
- package/dist/contracts/__tests__/contract-types.spec.js +11 -0
- package/dist/contracts/__tests__/contract-types.spec.js.map +1 -1
- package/dist/contracts/index.d.ts +1 -1
- package/dist/contracts/utility-types.d.ts +5 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -456,6 +456,34 @@ class MsgpackSerializer implements PayloadSerializer, PayloadDeserializer {
|
|
|
456
456
|
|
|
457
457
|
A `DefaultPayloadSerializer` (pass-through) is included and used when no custom serializer is registered.
|
|
458
458
|
|
|
459
|
+
## Wrapping Responses with HTTP Status
|
|
460
|
+
|
|
461
|
+
Use the `HttpResponse<T>` utility type to wrap command or query responses with an `HttpStatus` code from `@nestjs/common`:
|
|
462
|
+
|
|
463
|
+
```ts
|
|
464
|
+
import { defineRegistry, command, query } from '@jdevel/tnest';
|
|
465
|
+
import type { HttpResponse } from '@jdevel/tnest';
|
|
466
|
+
|
|
467
|
+
export const userContracts = defineRegistry({
|
|
468
|
+
'user.create': command<CreateUserDto, HttpResponse<User>>(),
|
|
469
|
+
'user.get': query<{ id: string }, HttpResponse<User>>(),
|
|
470
|
+
});
|
|
471
|
+
```
|
|
472
|
+
|
|
473
|
+
Handlers then return the wrapped shape:
|
|
474
|
+
|
|
475
|
+
```ts
|
|
476
|
+
import { HttpStatus } from '@nestjs/common';
|
|
477
|
+
|
|
478
|
+
@MessagePattern('user.create')
|
|
479
|
+
async create(payload: { email: string; name: string }) {
|
|
480
|
+
const user = await this.userRepo.create(payload);
|
|
481
|
+
return { status: HttpStatus.CREATED, data: user };
|
|
482
|
+
}
|
|
483
|
+
```
|
|
484
|
+
|
|
485
|
+
The response type is `{ status: HttpStatus; data: T }`.
|
|
486
|
+
|
|
459
487
|
## Utility Types
|
|
460
488
|
|
|
461
489
|
Extract type information from your contract registry:
|
|
@@ -465,6 +493,7 @@ import type {
|
|
|
465
493
|
PatternOf,
|
|
466
494
|
PayloadOf,
|
|
467
495
|
ResponseOf,
|
|
496
|
+
HttpResponse,
|
|
468
497
|
CommandPatterns,
|
|
469
498
|
EventPatterns,
|
|
470
499
|
QueryPatterns,
|
|
@@ -514,6 +543,7 @@ type Validated = ValidateRegistry<UserContracts>;
|
|
|
514
543
|
| `Command` / `Event` / `Query` | Type | Contract type interfaces |
|
|
515
544
|
| `ContractRegistry` | Type | Base type for a registry of contracts |
|
|
516
545
|
| `ValidateRegistry` | Type | Validates registry keys match contract patterns |
|
|
546
|
+
| `HttpResponse` | Type | Wraps a response with `HttpStatus` |
|
|
517
547
|
| `PayloadOf` / `ResponseOf` / `PatternOf` | Type | Extract parts of a contract |
|
|
518
548
|
| `CommandsOf` / `EventsOf` / `QueriesOf` | Type | Filter registry by contract kind |
|
|
519
549
|
| `CommandPatterns` / `EventPatterns` / `QueryPatterns` | Type | Pattern string unions by kind |
|
|
@@ -81,6 +81,17 @@ describe('ValidateRegistry', () => {
|
|
|
81
81
|
(0, expect_type_1.expectTypeOf)().toEqualTypeOf();
|
|
82
82
|
});
|
|
83
83
|
});
|
|
84
|
+
describe('HttpResponse', () => {
|
|
85
|
+
it('wraps a type with status and data fields', () => {
|
|
86
|
+
(0, expect_type_1.expectTypeOf)().toEqualTypeOf();
|
|
87
|
+
});
|
|
88
|
+
it('works as a command response type', () => {
|
|
89
|
+
(0, expect_type_1.expectTypeOf)().toEqualTypeOf();
|
|
90
|
+
});
|
|
91
|
+
it('works as a query response type', () => {
|
|
92
|
+
(0, expect_type_1.expectTypeOf)().toEqualTypeOf();
|
|
93
|
+
});
|
|
94
|
+
});
|
|
84
95
|
describe('AnyContract', () => {
|
|
85
96
|
it('accepts Command, Event, and Query', () => {
|
|
86
97
|
(0, expect_type_1.expectTypeOf)().toExtend();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract-types.spec.js","sourceRoot":"","sources":["../../../src/contracts/__tests__/contract-types.spec.ts"],"names":[],"mappings":";;AAAA,6CAA2C;
|
|
1
|
+
{"version":3,"file":"contract-types.spec.js","sourceRoot":"","sources":["../../../src/contracts/__tests__/contract-types.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,4 +3,4 @@ export type { Event } from './event';
|
|
|
3
3
|
export type { Query } from './query';
|
|
4
4
|
export type { ValidateRegistry } from './registry';
|
|
5
5
|
export { command, event, query, defineRegistry } from './define-helpers';
|
|
6
|
-
export type { AnyContract, PatternOf, PayloadOf, ResponseOf, ContractRegistry, CommandsOf, EventsOf, QueriesOf, CommandPatterns, EventPatterns, QueryPatterns, SendablePatterns, } from './utility-types';
|
|
6
|
+
export type { AnyContract, PatternOf, PayloadOf, ResponseOf, ContractRegistry, CommandsOf, EventsOf, QueriesOf, CommandPatterns, EventPatterns, QueryPatterns, SendablePatterns, HttpResponse, } from './utility-types';
|
|
@@ -1,6 +1,11 @@
|
|
|
1
|
+
import type { HttpStatus } from '@nestjs/common';
|
|
1
2
|
import type { Command } from './command';
|
|
2
3
|
import type { Event } from './event';
|
|
3
4
|
import type { Query } from './query';
|
|
5
|
+
export interface HttpResponse<T> {
|
|
6
|
+
status: HttpStatus;
|
|
7
|
+
data: T;
|
|
8
|
+
}
|
|
4
9
|
export type AnyContract = Command<string, any, any> | Event<string, any> | Query<string, any, any>;
|
|
5
10
|
export type PatternOf<C extends AnyContract> = C['pattern'];
|
|
6
11
|
export type PayloadOf<C extends AnyContract> = C['payload'];
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { TnestModule } from './tnest.module';
|
|
2
2
|
export { TNEST_OPTIONS, getClientToken } from './constants';
|
|
3
|
-
export type { Command, Event, Query, AnyContract, ContractRegistry, ValidateRegistry, PatternOf, PayloadOf, ResponseOf, CommandsOf, EventsOf, QueriesOf, CommandPatterns, EventPatterns, QueryPatterns, SendablePatterns, } from './contracts';
|
|
3
|
+
export type { Command, Event, Query, AnyContract, ContractRegistry, ValidateRegistry, PatternOf, PayloadOf, ResponseOf, CommandsOf, EventsOf, QueriesOf, CommandPatterns, EventPatterns, QueryPatterns, SendablePatterns, HttpResponse, } from './contracts';
|
|
4
4
|
export { command, event, query, defineRegistry } from './contracts';
|
|
5
5
|
export { TypedClient } from './client';
|
|
6
6
|
export { TypedClientFactory } from './client';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,+CAA6C;AAApC,2GAAA,WAAW,OAAA;AAGpB,yCAA4D;AAAnD,0GAAA,aAAa,OAAA;AAAE,2GAAA,cAAc,OAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,+CAA6C;AAApC,2GAAA,WAAW,OAAA;AAGpB,yCAA4D;AAAnD,0GAAA,aAAa,OAAA;AAAE,2GAAA,cAAc,OAAA;AAsBtC,yCAAoE;AAA3D,oGAAA,OAAO,OAAA;AAAE,kGAAA,KAAK,OAAA;AAAE,kGAAA,KAAK,OAAA;AAAE,2GAAA,cAAc,OAAA;AAG9C,mCAAuC;AAA9B,qGAAA,WAAW,OAAA;AACpB,mCAA8C;AAArC,4GAAA,kBAAkB,OAAA;AAG3B,uCAAiD;AAAxC,+GAAA,mBAAmB,OAAA;AAC5B,uCAA+C;AAAtC,6GAAA,iBAAiB,OAAA;AAY1B,2CAAgD;AAAvC,8GAAA,gBAAgB,OAAA;AACzB,2CAAkD;AAAzC,gHAAA,kBAAkB,OAAA;AAI3B,iDAIyB;AAHvB,yHAAA,wBAAwB,OAAA;AACxB,mHAAA,kBAAkB,OAAA;AAClB,qHAAA,oBAAoB,OAAA;AAKtB,qCAA4C;AAAnC,0GAAA,eAAe,OAAA;AACxB,qCAA+C;AAAtC,6GAAA,kBAAkB,OAAA"}
|