@orpc/nest 2.0.0-beta.2 → 2.0.0-beta.20
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/{LICENCE → LICENSE} +2 -2
- package/README.md +32 -22
- package/dist/index.d.mts +16 -10
- package/dist/index.d.ts +16 -10
- package/dist/index.mjs +28 -27
- package/package.json +13 -11
package/{LICENCE → LICENSE}
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
MIT License
|
|
2
2
|
|
|
3
|
-
Copyright (c)
|
|
3
|
+
Copyright (c) 2023 oRPC
|
|
4
4
|
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
6
|
of this software and associated documentation files (the "Software"), to deal
|
|
@@ -18,4 +18,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
|
18
18
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
19
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
20
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
<h1 align="center">oRPC - Typesafe APIs Made Simple 🪄</h1>
|
|
2
2
|
|
|
3
3
|
<div align="center">
|
|
4
|
-
<a href="https://codecov.io/gh/middleapi/orpc
|
|
5
|
-
<img alt="codecov" src="https://codecov.io/gh/middleapi/orpc
|
|
4
|
+
<a href="https://codecov.io/gh/middleapi/orpc">
|
|
5
|
+
<img alt="codecov" src="https://codecov.io/gh/middleapi/orpc/branch/main/graph/badge.svg">
|
|
6
6
|
</a>
|
|
7
7
|
<a href="https://www.npmjs.com/package/@orpc/nest">
|
|
8
8
|
<img alt="weekly downloads" src="https://img.shields.io/npm/dw/%40orpc%2Fnest?logo=npm" />
|
|
9
9
|
</a>
|
|
10
|
-
<a href="https://
|
|
11
|
-
<img alt="
|
|
10
|
+
<a href="https://app.codspeed.io/middleapi/orpc?utm_source=badge">
|
|
11
|
+
<img alt="CodSpeed" src="https://img.shields.io/endpoint?url=https://codspeed.io/badge.json" />
|
|
12
|
+
</a>
|
|
13
|
+
<a href="https://github.com/middleapi/orpc/blob/main/LICENSE">
|
|
14
|
+
<img alt="MIT License" src="https://img.shields.io/github/license/middleapi/orpc?logo=open-source-initiative" />
|
|
12
15
|
</a>
|
|
13
16
|
<a href="https://discord.gg/TXEbwRBvQn">
|
|
14
17
|
<img alt="Discord" src="https://img.shields.io/discord/1308966753044398161?color=7389D8&label&logo=discord&logoColor=ffffff" />
|
|
@@ -26,10 +29,10 @@ You can read the documentation [here](https://orpc.dev).
|
|
|
26
29
|
|
|
27
30
|
**Core**
|
|
28
31
|
|
|
29
|
-
- [@orpc/contract](https://www.npmjs.com/package/@orpc/contract): Define
|
|
30
|
-
- [@orpc/server](https://www.npmjs.com/package/@orpc/server):
|
|
31
|
-
- [@orpc/client](https://www.npmjs.com/package/@orpc/client): Consume
|
|
32
|
-
- [@orpc/openapi](https://www.npmjs.com/package/@orpc/openapi):
|
|
32
|
+
- [@orpc/contract](https://www.npmjs.com/package/@orpc/contract): Define API contract as the single source of truth.
|
|
33
|
+
- [@orpc/server](https://www.npmjs.com/package/@orpc/server): Build APIs or implement contracts.
|
|
34
|
+
- [@orpc/client](https://www.npmjs.com/package/@orpc/client): Consume APIs with end-to-end type safety.
|
|
35
|
+
- [@orpc/openapi](https://www.npmjs.com/package/@orpc/openapi): Add OpenAPI compatibility to APIs.
|
|
33
36
|
|
|
34
37
|
**Schema validation**
|
|
35
38
|
|
|
@@ -39,22 +42,28 @@ You can read the documentation [here](https://orpc.dev).
|
|
|
39
42
|
|
|
40
43
|
**Built-in features**
|
|
41
44
|
|
|
42
|
-
- [@orpc/publisher](https://www.npmjs.com/package/@orpc/publisher): Pub/Sub.
|
|
43
|
-
- [@orpc/ratelimit](https://www.npmjs.com/package/@orpc/ratelimit): Rate limiting.
|
|
45
|
+
- [@orpc/publisher](https://www.npmjs.com/package/@orpc/publisher): Pub/Sub with memory, Redis, and Upstash adapters.
|
|
46
|
+
- [@orpc/ratelimit](https://www.npmjs.com/package/@orpc/ratelimit): Rate limiting with memory, Redis, and Upstash adapters.
|
|
44
47
|
- [@orpc/json-schema](https://www.npmjs.com/package/@orpc/json-schema): Smart coercion for OpenAPI requests.
|
|
45
48
|
|
|
46
49
|
**Framework & ecosystem integrations**
|
|
47
50
|
|
|
48
|
-
- [@orpc/next](https://www.npmjs.com/package/@orpc/
|
|
51
|
+
- [@orpc/next](https://www.npmjs.com/package/@orpc/next): Integrate with [Next.js Server Functions](https://nextjs.org/docs/app/getting-started/mutating-data).
|
|
52
|
+
- [@orpc/ai-sdk](https://www.npmjs.com/package/@orpc/ai-sdk): Turn contracts and procedures into [AI SDK](https://ai-sdk.dev/) tools.
|
|
49
53
|
- [@orpc/tanstack-query](https://www.npmjs.com/package/@orpc/tanstack-query): Integrate with [TanStack Query](https://tanstack.com/query/latest).
|
|
54
|
+
- [@orpc/pinia-colada](https://www.npmjs.com/package/@orpc/pinia-colada): Integrate with [Pinia Colada](https://pinia-colada.esm.dev/).
|
|
55
|
+
- [@orpc/swr](https://www.npmjs.com/package/@orpc/swr): Integrate with [SWR](https://swr.vercel.app/).
|
|
50
56
|
- [@orpc/experimental-effect](https://www.npmjs.com/package/@orpc/experimental-effect): Integrate with [Effect](https://effect.website/).
|
|
51
57
|
- [@orpc/nest](https://www.npmjs.com/package/@orpc/nest): Implement your contract with [NestJS](https://nestjs.com/).
|
|
58
|
+
- [@orpc/bun](https://www.npmjs.com/package/@orpc/bun): Adapters for [Bun's Redis](https://bun.sh/).
|
|
59
|
+
- [@orpc/cloudflare](https://www.npmjs.com/package/@orpc/cloudflare): Adapters for [Cloudflare's RateLimit and Durable Objects](https://developers.cloudflare.com/workers/).
|
|
60
|
+
- [@orpc/trpc](https://www.npmjs.com/package/@orpc/trpc): Reuse existing [tRPC](https://trpc.io/) routers within oRPC.
|
|
52
61
|
|
|
53
62
|
**Observability**
|
|
54
63
|
|
|
55
|
-
- [@orpc/opentelemetry](https://www.npmjs.com/package/@orpc/opentelemetry):
|
|
56
|
-
- [@orpc/pino](https://www.npmjs.com/package/@orpc/pino):
|
|
57
|
-
- [@orpc/evlog](https://www.npmjs.com/package/@orpc/evlog):
|
|
64
|
+
- [@orpc/opentelemetry](https://www.npmjs.com/package/@orpc/opentelemetry): Integrate with [OpenTelemetry](https://opentelemetry.io/) for distributed tracing.
|
|
65
|
+
- [@orpc/pino](https://www.npmjs.com/package/@orpc/pino): Integrate with [Pino](https://getpino.io/) for logging.
|
|
66
|
+
- [@orpc/evlog](https://www.npmjs.com/package/@orpc/evlog): Integrate with [Evlog](https://evlog.dev/) for logging.
|
|
58
67
|
|
|
59
68
|
## Sponsors
|
|
60
69
|
|
|
@@ -100,12 +109,10 @@ Like what we build over at [middleapi](https://github.com/middleapi)? You can he
|
|
|
100
109
|
<td align="center"><a href="https://github.com/valerii15298?ref=orpc" target="_blank" rel="noopener" title="Valerii Petryniak"><img src="https://avatars.githubusercontent.com/u/44531564?u=88ac74d9bacd20401518441907acad21063cd397&v=4" width="139" alt="Valerii Petryniak"/><br />Valerii Petryniak</a></td>
|
|
101
110
|
<td align="center"><a href="https://github.com/letstri?ref=orpc" target="_blank" rel="noopener" title="Valerii Strilets"><img src="https://avatars.githubusercontent.com/u/13253748?u=c7b10399ccc8f8081e24db94ec32cd9858e86ac3&v=4" width="139" alt="Valerii Strilets"/><br />Valerii Strilets</a></td>
|
|
102
111
|
<td align="center"><a href="https://github.com/K-Mistele?ref=orpc" target="_blank" rel="noopener" title="Kyle Mistele"><img src="https://avatars.githubusercontent.com/u/18430555?u=3afebeb81de666e35aaac3ed46f14159d7603ffb&v=4" width="139" alt="Kyle Mistele"/><br />Kyle Mistele</a></td>
|
|
103
|
-
<td align="center"><a href="https://github.com/andrewpeters9?ref=orpc" target="_blank" rel="noopener" title="Andrew Peters"><img src="https://avatars.githubusercontent.com/u/36251325?v=4" width="139" alt="Andrew Peters"/><br />Andrew Peters</a></td>
|
|
104
112
|
<td align="center"><a href="https://github.com/R44VC0RP?ref=orpc" target="_blank" rel="noopener" title="Ryan Vogel"><img src="https://avatars.githubusercontent.com/u/89211796?u=1857347b9787d8d8a7ea5bfc333f96be92d5a683&v=4" width="139" alt="Ryan Vogel"/><br />Ryan Vogel</a></td>
|
|
113
|
+
<td align="center"><a href="https://github.com/christ12938?ref=orpc" target="_blank" rel="noopener" title="christ12938"><img src="https://avatars.githubusercontent.com/u/25758598?v=4" width="139" alt="christ12938"/><br />christ12938</a></td>
|
|
105
114
|
</tr>
|
|
106
115
|
<tr>
|
|
107
|
-
<td align="center"><a href="https://github.com/christ12938?ref=orpc" target="_blank" rel="noopener" title="christ12938"><img src="https://avatars.githubusercontent.com/u/25758598?v=4" width="139" alt="christ12938"/><br />christ12938</a></td>
|
|
108
|
-
<td align="center"><a href="https://github.com/peter-adam-dy?ref=orpc" target="_blank" rel="noopener" title="Peter Adam"><img src="https://avatars.githubusercontent.com/u/132129459?u=4f3dbbb3b443990b56acb7d6a5d11ed2c555f6db&v=4" width="139" alt="Peter Adam"/><br />Peter Adam</a></td>
|
|
109
116
|
<td align="center"><a href="https://github.com/Ryanjso?ref=orpc" target="_blank" rel="noopener" title="Ryan Soderberg"><img src="https://avatars.githubusercontent.com/u/39172778?u=5ed913c31d57e7221b75784abcad48c7ebddde27&v=4" width="139" alt="Ryan Soderberg"/><br />Ryan Soderberg</a></td>
|
|
110
117
|
<td align="center"><a href="https://github.com/itigoore01?ref=orpc" target="_blank" rel="noopener" title="shota"><img src="https://avatars.githubusercontent.com/u/11831107?u=c976a6dc7e055eb026304c46c99100ed22b0c8e0&v=4" width="139" alt="shota"/><br />shota</a></td>
|
|
111
118
|
</tr>
|
|
@@ -116,25 +123,25 @@ Like what we build over at [middleapi](https://github.com/middleapi)? You can he
|
|
|
116
123
|
<table>
|
|
117
124
|
<tr>
|
|
118
125
|
<td align="center"><a href="https://github.com/rhinodavid?ref=orpc" target="_blank" rel="noopener" title="David Walsh"><img src="https://avatars.githubusercontent.com/u/5778036?u=b5521f07d2f88c3db2a0dae62b5f2f8357214af0&v=4" width="119" alt="David Walsh"/><br />David Walsh</a></td>
|
|
126
|
+
<td align="center"><a href="https://github.com/Nic13Gamer?ref=orpc" target="_blank" rel="noopener" title="Nicholas"><img src="https://avatars.githubusercontent.com/u/54724556?u=56a7ab430ce7a80d648ab6eba051d454a818ed0b&v=4" width="119" alt="Nicholas"/><br />Nicholas</a></td>
|
|
119
127
|
<td align="center"><a href="https://github.com/Robbe95?ref=orpc" target="_blank" rel="noopener" title="Robbe Vaes"><img src="https://avatars.githubusercontent.com/u/44748019?u=e0232402c045ad4eac7cbd217f1f47e083103b89&v=4" width="119" alt="Robbe Vaes"/><br />Robbe Vaes</a></td>
|
|
120
128
|
<td align="center"><a href="https://github.com/aidansunbury?ref=orpc" target="_blank" rel="noopener" title="Aidan Sunbury"><img src="https://avatars.githubusercontent.com/u/64103161?v=4" width="119" alt="Aidan Sunbury"/><br />Aidan Sunbury</a></td>
|
|
121
129
|
<td align="center"><a href="https://github.com/soonoo?ref=orpc" target="_blank" rel="noopener" title="soonoo"><img src="https://avatars.githubusercontent.com/u/5436405?u=5d0b4aa955c87e30e6bda7f0cccae5402da99528&v=4" width="119" alt="soonoo"/><br />soonoo</a></td>
|
|
122
130
|
<td align="center"><a href="https://github.com/kporten?ref=orpc" target="_blank" rel="noopener" title="Kevin Porten"><img src="https://avatars.githubusercontent.com/u/1839345?u=dc2263d5cfe0d927ce1a0be04a1d55dd6b55405c&v=4" width="119" alt="Kevin Porten"/><br />Kevin Porten</a></td>
|
|
123
131
|
<td align="center"><a href="https://github.com/pumpkinlink?ref=orpc" target="_blank" rel="noopener" title="Denis"><img src="https://avatars.githubusercontent.com/u/11864620?u=5f47bbe6c65d0f6f5cf011021490238e4b0593d0&v=4" width="119" alt="Denis"/><br />Denis</a></td>
|
|
124
|
-
<td align="center"><a href="https://github.com/christopher-kapic?ref=orpc" target="_blank" rel="noopener" title="Christopher Kapic"><img src="https://avatars.githubusercontent.com/u/59740769?u=e7ad4b72b5bf6c9eb1644c26dbf3332a8f987377&v=4" width="119" alt="Christopher Kapic"/><br />Christopher Kapic</a></td>
|
|
125
132
|
</tr>
|
|
126
133
|
<tr>
|
|
134
|
+
<td align="center"><a href="https://github.com/christopher-kapic?ref=orpc" target="_blank" rel="noopener" title="Christopher Kapic"><img src="https://avatars.githubusercontent.com/u/59740769?u=e7ad4b72b5bf6c9eb1644c26dbf3332a8f987377&v=4" width="119" alt="Christopher Kapic"/><br />Christopher Kapic</a></td>
|
|
127
135
|
<td align="center"><a href="https://github.com/thomasballinger?ref=orpc" target="_blank" rel="noopener" title="Tom Ballinger"><img src="https://avatars.githubusercontent.com/u/458879?u=4b045ac75d721b6ac2b42a74d7d37f61f0414031&v=4" width="119" alt="Tom Ballinger"/><br />Tom Ballinger</a></td>
|
|
128
136
|
<td align="center"><a href="https://github.com/SSam0419?ref=orpc" target="_blank" rel="noopener" title="Sam"><img src="https://avatars.githubusercontent.com/u/102863520?u=3c89611f549d5070be232eb4532f690c8f2e7a65&v=4" width="119" alt="Sam"/><br />Sam</a></td>
|
|
129
137
|
<td align="center"><a href="https://github.com/Titoine?ref=orpc" target="_blank" rel="noopener" title="Titoine"><img src="https://avatars.githubusercontent.com/u/3514286?u=1bb1e86b0c99c8a1121372e56d51a177eea12191&v=4" width="119" alt="Titoine"/><br />Titoine</a></td>
|
|
130
138
|
<td align="center"><a href="https://github.com/Mnigos?ref=orpc" target="_blank" rel="noopener" title="Igor Makowski"><img src="https://avatars.githubusercontent.com/u/56691628?u=ee8c879478f7c151b9156aef6c74243fa3e247a8&v=4" width="119" alt="Igor Makowski"/><br />Igor Makowski</a></td>
|
|
131
139
|
<td align="center"><a href="https://github.com/hanayashiki?ref=orpc" target="_blank" rel="noopener" title="hanayashiki"><img src="https://avatars.githubusercontent.com/u/26056783?u=06c3b9205a16fd41a871e82da1cc2a09306d53f5&v=4" width="119" alt="hanayashiki"/><br />hanayashiki</a></td>
|
|
132
140
|
<td align="center"><a href="https://github.com/ldub?ref=orpc" target="_blank" rel="noopener" title="Lev Dubinets"><img src="https://avatars.githubusercontent.com/u/3114081?u=f547f5d5012cab54851f1b1ad72d10e537f78fc2&v=4" width="119" alt="Lev Dubinets"/><br />Lev Dubinets</a></td>
|
|
133
|
-
<td align="center"><a href="https://github.com/mr-kelly?ref=orpc" target="_blank" rel="noopener" title="Kelly Peilin Chan"><img src="https://avatars.githubusercontent.com/u/520852?u=6b0f7105f694e7b5cacf410a3f04c7044b469dc8&v=4" width="119" alt="Kelly Peilin Chan"/><br />Kelly Peilin Chan</a></td>
|
|
134
141
|
</tr>
|
|
135
142
|
<tr>
|
|
143
|
+
<td align="center"><a href="https://github.com/mr-kelly?ref=orpc" target="_blank" rel="noopener" title="Kelly Peilin Chan"><img src="https://avatars.githubusercontent.com/u/520852?u=6b0f7105f694e7b5cacf410a3f04c7044b469dc8&v=4" width="119" alt="Kelly Peilin Chan"/><br />Kelly Peilin Chan</a></td>
|
|
136
144
|
<td align="center"><a href="https://github.com/piscis?ref=orpc" target="_blank" rel="noopener" title="Alex"><img src="https://avatars.githubusercontent.com/u/326163?u=b245f368bd940cf51d08c0b6bf55f8257f359437&v=4" width="119" alt="Alex"/><br />Alex</a></td>
|
|
137
|
-
<td align="center"><a href="https://github.com/nattstack?ref=orpc" target="_blank" rel="noopener" title="nattstack"><img src="https://avatars.githubusercontent.com/u/31426677?u=fa9dbb8b3e66eb0ea3c88db5dc07f31c8c5418fe&v=4" width="119" alt="nattstack"/><br />nattstack</a></td>
|
|
138
145
|
<td align="center"><a href="https://github.com/finom?ref=orpc" target="_blank" rel="noopener" title="Andrey Gubanov"><img src="https://avatars.githubusercontent.com/u/1082083?u=29e91400dbd4a9c217048a8f59562c4f740498e6&v=4" width="119" alt="Andrey Gubanov"/><br />Andrey Gubanov</a></td>
|
|
139
146
|
</tr>
|
|
140
147
|
</table>
|
|
@@ -151,7 +158,7 @@ Like what we build over at [middleapi](https://github.com/middleapi)? You can he
|
|
|
151
158
|
<a href="https://github.com/theoludwig?ref=orpc" target="_blank" rel="noopener" title="Théo LUDWIG"><img src="https://avatars.githubusercontent.com/u/25207499?u=a6a9653725a2f574c07893748806668e0598cdbe&v=4" width="32" height="32" alt="Théo LUDWIG" /></a>
|
|
152
159
|
<a href="https://github.com/abhay-ramesh?ref=orpc" target="_blank" rel="noopener" title="Abhay Ramesh"><img src="https://avatars.githubusercontent.com/u/66196314?u=c5c2b0327b26606c2efcfaf17046ab18c3d25c57&v=4" width="32" height="32" alt="Abhay Ramesh" /></a>
|
|
153
160
|
<a href="https://github.com/shr-ink?ref=orpc" target="_blank" rel="noopener" title="shr.ink oü"><img src="https://avatars.githubusercontent.com/u/139700438?v=4" width="32" height="32" alt="shr.ink oü" /></a>
|
|
154
|
-
<a href="https://github.com/johngerome?ref=orpc" target="_blank" rel="noopener" title="0x4e32"><img src="https://avatars.githubusercontent.com/u/2002000?u=
|
|
161
|
+
<a href="https://github.com/johngerome?ref=orpc" target="_blank" rel="noopener" title="0x4e32"><img src="https://avatars.githubusercontent.com/u/2002000?u=505e54608466ab53754f702973687b04c6424c1f&v=4" width="32" height="32" alt="0x4e32" /></a>
|
|
155
162
|
<a href="https://github.com/yzuyr?ref=orpc" target="_blank" rel="noopener" title="Ryuz"><img src="https://avatars.githubusercontent.com/u/196539378?u=d38374588d219b6748b16406982f6559411466d4&v=4" width="32" height="32" alt="Ryuz" /></a>
|
|
156
163
|
<a href="https://github.com/happyboy2022?ref=orpc" target="_blank" rel="noopener" title="happyboy"><img src="https://avatars.githubusercontent.com/u/103669586?u=65b49c4b893ed3703909fbb3a7a22313f3f9c121&v=4" width="32" height="32" alt="happyboy" /></a>
|
|
157
164
|
<a href="https://github.com/YiCChi?ref=orpc" target="_blank" rel="noopener" title="yicchi"><img src="https://avatars.githubusercontent.com/u/86967274?u=6c2756f09fe15dd94d572f560e979cd157982852&v=4" width="32" height="32" alt="yicchi" /></a>
|
|
@@ -165,7 +172,9 @@ Like what we build over at [middleapi](https://github.com/middleapi)? You can he
|
|
|
165
172
|
<a href="https://github.com/nelsonlaidev?ref=orpc" target="_blank" rel="noopener" title="Nelson Lai"><img src="https://avatars.githubusercontent.com/u/75498339?u=2fc0e0b95dd184c5ffb744df977cb15a18b60672&v=4" width="32" height="32" alt="Nelson Lai" /></a>
|
|
166
173
|
<a href="https://github.com/nguyenlc1993?ref=orpc" target="_blank" rel="noopener" title="Lê Cao Nguyên"><img src="https://avatars.githubusercontent.com/u/13871971?u=83c8b69d9e35b589c4e1f066cc113b1d9461386f&v=4" width="32" height="32" alt="Lê Cao Nguyên" /></a>
|
|
167
174
|
<a href="https://github.com/wobsoriano?ref=orpc" target="_blank" rel="noopener" title="Robert Soriano"><img src="https://avatars.githubusercontent.com/u/13049130?u=6d72104182e7c9ed25934815313fb69107332111&v=4" width="32" height="32" alt="Robert Soriano" /></a>
|
|
175
|
+
<a href="https://github.com/andrewpeters9?ref=orpc" target="_blank" rel="noopener" title="Andrew Peters"><img src="https://avatars.githubusercontent.com/u/36251325?v=4" width="32" height="32" alt="Andrew Peters" /></a>
|
|
168
176
|
<a href="https://github.com/SKostyukovich?ref=orpc" target="_blank" rel="noopener" title="SKostyukovich"><img src="https://avatars.githubusercontent.com/u/10700067?v=4" width="32" height="32" alt="SKostyukovich" /></a>
|
|
177
|
+
<a href="https://github.com/peter-adam-dy?ref=orpc" target="_blank" rel="noopener" title="Peter Adam"><img src="https://avatars.githubusercontent.com/u/132129459?u=4f3dbbb3b443990b56acb7d6a5d11ed2c555f6db&v=4" width="32" height="32" alt="Peter Adam" /></a>
|
|
169
178
|
<a href="https://github.com/FabworksHQ?ref=orpc" target="_blank" rel="noopener" title="Fabworks"><img src="https://avatars.githubusercontent.com/u/160179500?v=4" width="32" height="32" alt="Fabworks" /></a>
|
|
170
179
|
<a href="https://github.com/NovakAnton?ref=orpc" target="_blank" rel="noopener" title="Novak Antonijevic"><img src="https://avatars.githubusercontent.com/u/157126729?u=ae49fa22292d55c0434ff0ca008206155b18663b&v=4" width="32" height="32" alt="Novak Antonijevic" /></a>
|
|
171
180
|
<a href="https://github.com/laduniestu?ref=orpc" target="_blank" rel="noopener" title="Laduni Estu Syalwa"><img src="https://avatars.githubusercontent.com/u/44757637?u=a2fc1ea8f7d827a96721176f79d30592d1c48059&v=4" width="32" height="32" alt="Laduni Estu Syalwa" /></a>
|
|
@@ -173,6 +182,7 @@ Like what we build over at [middleapi](https://github.com/middleapi)? You can he
|
|
|
173
182
|
<a href="https://github.com/illarionvk?ref=orpc" target="_blank" rel="noopener" title="Illarion Koperski"><img src="https://avatars.githubusercontent.com/u/5012724?u=7cfa13652f7ac5fb3c56d880e3eb3fbe40c3ea34&v=4" width="32" height="32" alt="Illarion Koperski" /></a>
|
|
174
183
|
<a href="https://github.com/steelbrain?ref=orpc" target="_blank" rel="noopener" title="Anees Iqbal"><img src="https://avatars.githubusercontent.com/u/4278113?u=22b80b5399eed68ac76cd58b02961b0481f1db11&v=4" width="32" height="32" alt="Anees Iqbal" /></a>
|
|
175
184
|
<a href="https://github.com/Scrumplex?ref=orpc" target="_blank" rel="noopener" title="Sefa Eyeoglu"><img src="https://avatars.githubusercontent.com/u/11587657?u=ab503582165c0bbff0cca47ce31c9450bb1553c9&v=4" width="32" height="32" alt="Sefa Eyeoglu" /></a>
|
|
185
|
+
<a href="https://github.com/nattstack?ref=orpc" target="_blank" rel="noopener" title="natt"><img src="https://avatars.githubusercontent.com/u/31426677?u=fa9dbb8b3e66eb0ea3c88db5dc07f31c8c5418fe&v=4" width="32" height="32" alt="natt" /></a>
|
|
176
186
|
<a href="https://github.com/ChromeGG?ref=orpc" target="_blank" rel="noopener" title="Adam Tkaczyk"><img src="https://avatars.githubusercontent.com/u/39050595?u=a58ca6042a6950e94e6e92442db76ef584279bc0&v=4" width="32" height="32" alt="Adam Tkaczyk" /></a>
|
|
177
187
|
<a href="https://github.com/plancraft?ref=orpc" target="_blank" rel="noopener" title="plancraft"><img src="https://avatars.githubusercontent.com/u/46482287?v=4" width="32" height="32" alt="plancraft" /></a>
|
|
178
188
|
</p>
|
|
@@ -186,4 +196,4 @@ oRPC is inspired by existing solutions that prioritize type safety and developer
|
|
|
186
196
|
|
|
187
197
|
## License
|
|
188
198
|
|
|
189
|
-
Distributed under the MIT License. See [LICENSE](https://github.com/middleapi/orpc
|
|
199
|
+
Distributed under the MIT License. See [LICENSE](https://github.com/middleapi/orpc/blob/main/LICENSE) for more information.
|
package/dist/index.d.mts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { DynamicModule, NestInterceptor,
|
|
1
|
+
import { ExecutionContext, DynamicModule, NestInterceptor, CallHandler } from '@nestjs/common';
|
|
2
2
|
import { RouterContract } from '@orpc/contract';
|
|
3
3
|
import { DefaultInitialContext, ContractedRouter } from '@orpc/server';
|
|
4
|
-
import { Promisable } from '@orpc/shared';
|
|
4
|
+
import { Value, Promisable } from '@orpc/shared';
|
|
5
5
|
import { Observable } from 'rxjs';
|
|
6
6
|
import { OpenAPIHandlerCodecCoreOptions } from '@orpc/openapi/standard';
|
|
7
7
|
import { StandardHandlerOptions } from '@orpc/server/standard';
|
|
@@ -10,18 +10,24 @@ import { ToEventStreamOptions } from '@standardserver/node';
|
|
|
10
10
|
import { HttpAdapterHost } from '@nestjs/core';
|
|
11
11
|
|
|
12
12
|
declare const ORPC_MODULE_CONFIG_SYMBOL: unique symbol;
|
|
13
|
+
interface NestStandardLazyRequest extends StandardLazyRequest {
|
|
14
|
+
/**
|
|
15
|
+
* Route parameters extracted from the request path.
|
|
16
|
+
*/
|
|
17
|
+
params?: undefined | Record<string, string | string[]>;
|
|
18
|
+
}
|
|
13
19
|
type ORPCModuleConfig = OpenAPIHandlerCodecCoreOptions<DefaultInitialContext> & StandardHandlerOptions<DefaultInitialContext> & (object extends DefaultInitialContext ? {
|
|
14
|
-
context?: DefaultInitialContext
|
|
20
|
+
context?: Value<Promisable<DefaultInitialContext>, [ctx: ExecutionContext]>;
|
|
15
21
|
} : {
|
|
16
|
-
context: DefaultInitialContext
|
|
22
|
+
context: Value<Promisable<DefaultInitialContext>, [ctx: ExecutionContext]>;
|
|
17
23
|
}) & {
|
|
18
24
|
/**
|
|
19
|
-
* Customize how convert
|
|
20
|
-
* You might need define this if you not using express or fastify adapters
|
|
25
|
+
* Customize how to convert NestJS `req` and `res` to {@link NestStandardLazyRequest}.
|
|
26
|
+
* You might need to define this if you are not using express or fastify adapters.
|
|
21
27
|
*/
|
|
22
|
-
|
|
28
|
+
toNestStandardLazyRequest?: undefined | ((req: any, res: any) => NestStandardLazyRequest);
|
|
23
29
|
/**
|
|
24
|
-
* Options for how to convert the Standard Response to a Nest Response (returning value), like event
|
|
30
|
+
* Options for how to convert the Standard Response to a Nest Response (returning value), like event stream options, etc.
|
|
25
31
|
*/
|
|
26
32
|
toNestResponse?: undefined | {
|
|
27
33
|
/**
|
|
@@ -43,11 +49,11 @@ declare function Implement<T extends RouterContract>(contract: T): <U extends Pr
|
|
|
43
49
|
declare class ImplementInterceptor implements NestInterceptor {
|
|
44
50
|
private readonly config;
|
|
45
51
|
private readonly codec;
|
|
46
|
-
private readonly
|
|
52
|
+
private readonly toNestStandardLazyRequest;
|
|
47
53
|
private readonly httpAdapterHost;
|
|
48
54
|
constructor(config: ORPCModuleConfig | undefined, httpAdapterHost: HttpAdapterHost);
|
|
49
55
|
intercept(ctx: ExecutionContext, next: CallHandler<any>): Observable<any>;
|
|
50
56
|
}
|
|
51
57
|
|
|
52
58
|
export { Implement as Impl, Implement, ImplementInterceptor, ORPCModule, ORPC_MODULE_CONFIG_SYMBOL };
|
|
53
|
-
export type { ORPCModuleConfig };
|
|
59
|
+
export type { NestStandardLazyRequest, ORPCModuleConfig };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { DynamicModule, NestInterceptor,
|
|
1
|
+
import { ExecutionContext, DynamicModule, NestInterceptor, CallHandler } from '@nestjs/common';
|
|
2
2
|
import { RouterContract } from '@orpc/contract';
|
|
3
3
|
import { DefaultInitialContext, ContractedRouter } from '@orpc/server';
|
|
4
|
-
import { Promisable } from '@orpc/shared';
|
|
4
|
+
import { Value, Promisable } from '@orpc/shared';
|
|
5
5
|
import { Observable } from 'rxjs';
|
|
6
6
|
import { OpenAPIHandlerCodecCoreOptions } from '@orpc/openapi/standard';
|
|
7
7
|
import { StandardHandlerOptions } from '@orpc/server/standard';
|
|
@@ -10,18 +10,24 @@ import { ToEventStreamOptions } from '@standardserver/node';
|
|
|
10
10
|
import { HttpAdapterHost } from '@nestjs/core';
|
|
11
11
|
|
|
12
12
|
declare const ORPC_MODULE_CONFIG_SYMBOL: unique symbol;
|
|
13
|
+
interface NestStandardLazyRequest extends StandardLazyRequest {
|
|
14
|
+
/**
|
|
15
|
+
* Route parameters extracted from the request path.
|
|
16
|
+
*/
|
|
17
|
+
params?: undefined | Record<string, string | string[]>;
|
|
18
|
+
}
|
|
13
19
|
type ORPCModuleConfig = OpenAPIHandlerCodecCoreOptions<DefaultInitialContext> & StandardHandlerOptions<DefaultInitialContext> & (object extends DefaultInitialContext ? {
|
|
14
|
-
context?: DefaultInitialContext
|
|
20
|
+
context?: Value<Promisable<DefaultInitialContext>, [ctx: ExecutionContext]>;
|
|
15
21
|
} : {
|
|
16
|
-
context: DefaultInitialContext
|
|
22
|
+
context: Value<Promisable<DefaultInitialContext>, [ctx: ExecutionContext]>;
|
|
17
23
|
}) & {
|
|
18
24
|
/**
|
|
19
|
-
* Customize how convert
|
|
20
|
-
* You might need define this if you not using express or fastify adapters
|
|
25
|
+
* Customize how to convert NestJS `req` and `res` to {@link NestStandardLazyRequest}.
|
|
26
|
+
* You might need to define this if you are not using express or fastify adapters.
|
|
21
27
|
*/
|
|
22
|
-
|
|
28
|
+
toNestStandardLazyRequest?: undefined | ((req: any, res: any) => NestStandardLazyRequest);
|
|
23
29
|
/**
|
|
24
|
-
* Options for how to convert the Standard Response to a Nest Response (returning value), like event
|
|
30
|
+
* Options for how to convert the Standard Response to a Nest Response (returning value), like event stream options, etc.
|
|
25
31
|
*/
|
|
26
32
|
toNestResponse?: undefined | {
|
|
27
33
|
/**
|
|
@@ -43,11 +49,11 @@ declare function Implement<T extends RouterContract>(contract: T): <U extends Pr
|
|
|
43
49
|
declare class ImplementInterceptor implements NestInterceptor {
|
|
44
50
|
private readonly config;
|
|
45
51
|
private readonly codec;
|
|
46
|
-
private readonly
|
|
52
|
+
private readonly toNestStandardLazyRequest;
|
|
47
53
|
private readonly httpAdapterHost;
|
|
48
54
|
constructor(config: ORPCModuleConfig | undefined, httpAdapterHost: HttpAdapterHost);
|
|
49
55
|
intercept(ctx: ExecutionContext, next: CallHandler<any>): Observable<any>;
|
|
50
56
|
}
|
|
51
57
|
|
|
52
58
|
export { Implement as Impl, Implement, ImplementInterceptor, ORPCModule, ORPC_MODULE_CONFIG_SYMBOL };
|
|
53
|
-
export type { ORPCModuleConfig };
|
|
59
|
+
export type { NestStandardLazyRequest, ORPCModuleConfig };
|
package/dist/index.mjs
CHANGED
|
@@ -6,7 +6,7 @@ import { getOpenAPIMeta, DEFAULT_OPENAPI_METHOD, getDynamicPathParams } from '@o
|
|
|
6
6
|
import { OpenAPIHandlerCodecCore } from '@orpc/openapi/standard';
|
|
7
7
|
import { DEFAULT_SUCCESS_STATUS, getRouter, unlazy, Procedure } from '@orpc/server';
|
|
8
8
|
import { StandardHandler } from '@orpc/server/standard';
|
|
9
|
-
import { get, isAsyncIteratorObject, stringifyJSON } from '@orpc/shared';
|
|
9
|
+
import { mergeHttpPath, get, value, isAsyncIteratorObject, stringifyJSON } from '@orpc/shared';
|
|
10
10
|
import { flattenStandardHeader, generateContentDisposition } from '@standardserver/core';
|
|
11
11
|
import { toStandardLazyRequest, toEventStream } from '@standardserver/node';
|
|
12
12
|
import { mergeMap } from 'rxjs';
|
|
@@ -77,19 +77,19 @@ const MethodDecoratorMap = {
|
|
|
77
77
|
function Implement(contract) {
|
|
78
78
|
if (contract instanceof ProcedureContract) {
|
|
79
79
|
const meta = getOpenAPIMeta(contract);
|
|
80
|
-
|
|
81
|
-
const path = meta?.path;
|
|
82
|
-
const successStatus = meta?.successStatus ?? DEFAULT_SUCCESS_STATUS;
|
|
83
|
-
if (path === void 0) {
|
|
80
|
+
if (meta?.path === void 0) {
|
|
84
81
|
throw new TypeError(`
|
|
85
82
|
@Implement decorator requires contract to have a 'openapi.path' meta.
|
|
86
83
|
Please define one using '.meta(openapi({ path: '/example' }))'.
|
|
87
|
-
Or use "
|
|
84
|
+
Or use "populateRouterContractOpenAPIPaths" from "@orpc/openapi" utility to automatically fill in any missing paths.
|
|
88
85
|
`);
|
|
89
86
|
}
|
|
87
|
+
const method = meta.method ?? DEFAULT_OPENAPI_METHOD;
|
|
88
|
+
const path = toNestPattern(meta.prefix ? mergeHttpPath(meta.prefix, meta.path) : meta.path);
|
|
89
|
+
const successStatus = meta.successStatus ?? DEFAULT_SUCCESS_STATUS;
|
|
90
90
|
return (target, propertyKey, descriptor) => {
|
|
91
91
|
applyDecorators(
|
|
92
|
-
MethodDecoratorMap[method](
|
|
92
|
+
MethodDecoratorMap[method](path),
|
|
93
93
|
HttpCode(successStatus),
|
|
94
94
|
UseInterceptors(ImplementInterceptor)
|
|
95
95
|
)(target, propertyKey, descriptor);
|
|
@@ -119,13 +119,13 @@ function Implement(contract) {
|
|
|
119
119
|
let ImplementInterceptor = class {
|
|
120
120
|
config;
|
|
121
121
|
codec;
|
|
122
|
-
|
|
122
|
+
toNestStandardLazyRequest;
|
|
123
123
|
httpAdapterHost;
|
|
124
124
|
constructor(config, httpAdapterHost) {
|
|
125
125
|
this.config = config ?? {};
|
|
126
126
|
this.httpAdapterHost = httpAdapterHost;
|
|
127
127
|
this.codec = new OpenAPIHandlerCodecCore(this.config);
|
|
128
|
-
this.
|
|
128
|
+
this.toNestStandardLazyRequest = this.config.toNestStandardLazyRequest ?? ((req, res) => {
|
|
129
129
|
const standardRequest = toStandardLazyRequest(
|
|
130
130
|
"raw" in req ? req.raw : req,
|
|
131
131
|
"raw" in res ? res.raw : res
|
|
@@ -133,6 +133,7 @@ let ImplementInterceptor = class {
|
|
|
133
133
|
if (req.body !== void 0) {
|
|
134
134
|
standardRequest.resolveBody = () => Promise.resolve(req.body);
|
|
135
135
|
}
|
|
136
|
+
standardRequest.params = req.params;
|
|
136
137
|
return standardRequest;
|
|
137
138
|
});
|
|
138
139
|
}
|
|
@@ -147,21 +148,21 @@ let ImplementInterceptor = class {
|
|
|
147
148
|
}
|
|
148
149
|
const req = ctx.switchToHttp().getRequest();
|
|
149
150
|
const res = ctx.switchToHttp().getResponse();
|
|
150
|
-
const standardRequest = this.
|
|
151
|
+
const standardRequest = this.toNestStandardLazyRequest(req, res);
|
|
151
152
|
const handler = new StandardHandler({
|
|
152
153
|
resolveProcedure: () => Promise.resolve({
|
|
153
154
|
path: getPathMeta(procedure) ?? [],
|
|
154
155
|
procedure,
|
|
155
156
|
decodeInput: () => this.codec.decodeInput({
|
|
156
157
|
procedure,
|
|
157
|
-
params: toORPCOpenAPIParams(procedure,
|
|
158
|
+
params: toORPCOpenAPIParams(procedure, standardRequest.params)
|
|
158
159
|
}, standardRequest)
|
|
159
160
|
}),
|
|
160
161
|
encodeError: this.codec.encodeError.bind(this.codec),
|
|
161
162
|
encodeOutput: this.codec.encodeOutput.bind(this.codec)
|
|
162
163
|
}, this.config);
|
|
163
164
|
const result = await handler.handle(standardRequest, {
|
|
164
|
-
context: this.config.context ?? {}
|
|
165
|
+
context: await value(this.config.context ?? {}, ctx)
|
|
165
166
|
});
|
|
166
167
|
if (!result.matched) {
|
|
167
168
|
throw new TypeError(
|
|
@@ -171,15 +172,15 @@ let ImplementInterceptor = class {
|
|
|
171
172
|
const httpAdapter = this.httpAdapterHost.httpAdapter;
|
|
172
173
|
httpAdapter.status(res, result.response.status);
|
|
173
174
|
for (const key in result.response.headers) {
|
|
174
|
-
const
|
|
175
|
-
if (typeof
|
|
176
|
-
httpAdapter.setHeader(res, key,
|
|
175
|
+
const value2 = result.response.headers[key];
|
|
176
|
+
if (typeof value2 === "string") {
|
|
177
|
+
httpAdapter.setHeader(res, key, value2);
|
|
177
178
|
} else {
|
|
178
|
-
|
|
179
|
+
value2?.forEach((value3, index) => {
|
|
179
180
|
if (index === 0) {
|
|
180
|
-
httpAdapter.setHeader(res, key,
|
|
181
|
+
httpAdapter.setHeader(res, key, value3);
|
|
181
182
|
} else {
|
|
182
|
-
httpAdapter.appendHeader(res, key,
|
|
183
|
+
httpAdapter.appendHeader(res, key, value3);
|
|
183
184
|
}
|
|
184
185
|
});
|
|
185
186
|
}
|
|
@@ -202,7 +203,7 @@ let ImplementInterceptor = class {
|
|
|
202
203
|
type: body.type,
|
|
203
204
|
disposition: flattenStandardHeader(result.response.headers["content-disposition"]) ?? generateContentDisposition(body instanceof File ? body.name : "blob"),
|
|
204
205
|
// BunS3 can use NaN for the size
|
|
205
|
-
length: Number.
|
|
206
|
+
length: Number.isFinite(body.size) ? body.size : void 0
|
|
206
207
|
});
|
|
207
208
|
}
|
|
208
209
|
if (body instanceof FormData) {
|
|
@@ -233,24 +234,24 @@ ImplementInterceptor = __decorateClass([
|
|
|
233
234
|
__decorateParam(0, Optional()),
|
|
234
235
|
__decorateParam(1, Inject(HttpAdapterHost))
|
|
235
236
|
], ImplementInterceptor);
|
|
236
|
-
function flattenParamValue(
|
|
237
|
-
return Array.isArray(
|
|
237
|
+
function flattenParamValue(value2) {
|
|
238
|
+
return Array.isArray(value2) ? value2.join("/") : value2;
|
|
238
239
|
}
|
|
239
240
|
function toORPCOpenAPIParams(contract, params) {
|
|
240
|
-
const
|
|
241
|
-
if (!params ||
|
|
241
|
+
const meta = getOpenAPIMeta(contract);
|
|
242
|
+
if (!params || meta?.path === void 0) {
|
|
242
243
|
return void 0;
|
|
243
244
|
}
|
|
244
|
-
const dynamicParams = getDynamicPathParams(path);
|
|
245
|
+
const dynamicParams = getDynamicPathParams(meta.prefix ? mergeHttpPath(meta.prefix, meta.path) : meta.path);
|
|
245
246
|
if (!dynamicParams) {
|
|
246
247
|
return void 0;
|
|
247
248
|
}
|
|
248
249
|
return dynamicParams.reduce((acc, config) => {
|
|
249
|
-
const
|
|
250
|
-
if (
|
|
250
|
+
const value2 = config.allowsSlash ? flattenParamValue(params?.["*"] ?? params?.path) : flattenParamValue(params?.[config.parameterName]);
|
|
251
|
+
if (value2 === void 0) {
|
|
251
252
|
return acc;
|
|
252
253
|
}
|
|
253
|
-
acc[config.parameterName] =
|
|
254
|
+
acc[config.parameterName] = value2;
|
|
254
255
|
return acc;
|
|
255
256
|
}, {});
|
|
256
257
|
}
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@orpc/nest",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "2.0.0-beta.
|
|
4
|
+
"version": "2.0.0-beta.20",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://orpc.dev",
|
|
7
7
|
"repository": {
|
|
8
8
|
"type": "git",
|
|
9
|
-
"url": "git+https://github.com/middleapi/orpc
|
|
9
|
+
"url": "git+https://github.com/middleapi/orpc.git",
|
|
10
10
|
"directory": "packages/nest"
|
|
11
11
|
},
|
|
12
12
|
"sideEffects": false,
|
|
@@ -37,23 +37,25 @@
|
|
|
37
37
|
}
|
|
38
38
|
},
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@
|
|
41
|
-
"@
|
|
42
|
-
"@orpc/
|
|
43
|
-
"@orpc/
|
|
44
|
-
"@orpc/
|
|
45
|
-
"@
|
|
46
|
-
"@
|
|
40
|
+
"@standardserver/core": "^0.5.0",
|
|
41
|
+
"@standardserver/node": "^0.5.0",
|
|
42
|
+
"@orpc/client": "2.0.0-beta.20",
|
|
43
|
+
"@orpc/contract": "2.0.0-beta.20",
|
|
44
|
+
"@orpc/openapi": "2.0.0-beta.20",
|
|
45
|
+
"@orpc/server": "2.0.0-beta.20",
|
|
46
|
+
"@orpc/shared": "2.0.0-beta.20"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
49
|
"@fastify/cookie": "^11.0.2",
|
|
50
50
|
"@nestjs/common": "^11.1.27",
|
|
51
51
|
"@nestjs/core": "^11.1.27",
|
|
52
|
+
"@nestjs/platform-express": "^11.1.27",
|
|
52
53
|
"@nestjs/platform-fastify": "^11.1.27",
|
|
54
|
+
"@nestjs/testing": "^11.1.27",
|
|
55
|
+
"@types/express": "^5.0.6",
|
|
53
56
|
"express": "^5.2.1",
|
|
54
57
|
"fastify": "^5.8.5",
|
|
55
|
-
"rxjs": "^7.8.2"
|
|
56
|
-
"supertest": "^7.2.2"
|
|
58
|
+
"rxjs": "^7.8.2"
|
|
57
59
|
},
|
|
58
60
|
"scripts": {
|
|
59
61
|
"build": "unbuild",
|