@orpc/evlog 2.0.0-beta.4 → 2.0.0-beta.40
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 +97 -94
- package/dist/adapters/node.d.mts +7 -1
- package/dist/adapters/node.d.ts +7 -1
- package/dist/index.d.mts +30 -4
- package/dist/index.d.ts +30 -4
- package/dist/index.mjs +35 -18
- package/package.json +16 -8
package/README.md
CHANGED
|
@@ -7,6 +7,9 @@
|
|
|
7
7
|
<a href="https://www.npmjs.com/package/@orpc/evlog">
|
|
8
8
|
<img alt="weekly downloads" src="https://img.shields.io/npm/dw/%40orpc%2Fevlog?logo=npm" />
|
|
9
9
|
</a>
|
|
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>
|
|
10
13
|
<a href="https://github.com/middleapi/orpc/blob/main/LICENSE">
|
|
11
14
|
<img alt="MIT License" src="https://img.shields.io/github/license/middleapi/orpc?logo=open-source-initiative" />
|
|
12
15
|
</a>
|
|
@@ -26,61 +29,93 @@ You can read the documentation [here](https://orpc.dev).
|
|
|
26
29
|
|
|
27
30
|
**Core**
|
|
28
31
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
32
|
+
| Package | Purpose | Docs |
|
|
33
|
+
| -------------------------------------------------------------- | -------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
34
|
+
| [@orpc/contract](https://www.npmjs.com/package/@orpc/contract) | Define API contract as the single source of truth. | [Procedure Contract](https://orpc.dev/docs/contract/procedure), [Contract Router](https://orpc.dev/docs/contract/router), [Implementation](https://orpc.dev/docs/contract/implementation), [Generate from OpenAPI](https://orpc.dev/docs/contract/generate-from-openapi) |
|
|
35
|
+
| [@orpc/server](https://www.npmjs.com/package/@orpc/server) | Build APIs or implement contracts. | [Procedure](https://orpc.dev/docs/procedure), [Router](https://orpc.dev/docs/router), [Middleware](https://orpc.dev/docs/middleware), [Context](https://orpc.dev/docs/context), [RPC Handler](https://orpc.dev/docs/rpc/handler) |
|
|
36
|
+
| [@orpc/client](https://www.npmjs.com/package/@orpc/client) | Consume APIs with end-to-end type safety. | [Client-Side Clients](https://orpc.dev/docs/client/client-side), [Server-Side Clients](https://orpc.dev/docs/client/server-side), [RPC Link](https://orpc.dev/docs/rpc/link), [Error Handling](https://orpc.dev/docs/client/error-handling) |
|
|
37
|
+
| [@orpc/openapi](https://www.npmjs.com/package/@orpc/openapi) | Add OpenAPI compatibility to APIs. | [OpenAPI Handler](https://orpc.dev/docs/openapi/handler), [OpenAPI Link](https://orpc.dev/docs/openapi/link), [Specification](https://orpc.dev/docs/openapi/specification), [Scalar](https://orpc.dev/docs/openapi/scalar) |
|
|
33
38
|
|
|
34
39
|
**Schema validation**
|
|
35
40
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
41
|
+
| Package | Purpose | Docs |
|
|
42
|
+
| ------------------------------------------------------------ | ---------------------------------------------------------- | ----------------------------------------------------- |
|
|
43
|
+
| [@orpc/zod](https://www.npmjs.com/package/@orpc/zod) | JSON Schema converter for [Zod](https://zod.dev/). | [Zod](https://orpc.dev/docs/integrations/zod) |
|
|
44
|
+
| [@orpc/valibot](https://www.npmjs.com/package/@orpc/valibot) | JSON Schema converter for [Valibot](https://valibot.dev/). | [Valibot](https://orpc.dev/docs/integrations/valibot) |
|
|
45
|
+
| [@orpc/arktype](https://www.npmjs.com/package/@orpc/arktype) | JSON Schema converter for [ArkType](https://arktype.io/). | [ArkType](https://orpc.dev/docs/integrations/arktype) |
|
|
39
46
|
|
|
40
47
|
**Built-in features**
|
|
41
48
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
49
|
+
| Package | Purpose | Docs |
|
|
50
|
+
| -------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- |
|
|
51
|
+
| [@orpc/publisher](https://www.npmjs.com/package/@orpc/publisher) | Pub/Sub with memory, Redis, and Upstash adapters. | [Publisher](https://orpc.dev/docs/helpers/publisher) |
|
|
52
|
+
| [@orpc/ratelimit](https://www.npmjs.com/package/@orpc/ratelimit) | Rate limiting with memory, Redis, and Upstash adapters. | [Rate Limit](https://orpc.dev/docs/helpers/ratelimit) |
|
|
53
|
+
| [@orpc/experimental-lock](https://www.npmjs.com/package/@orpc/experimental-lock) | Locking with memory, Redis, and Upstash adapters. | [Lock](https://orpc.dev/docs/helpers/lock) |
|
|
54
|
+
| [@orpc/hibernation](https://www.npmjs.com/package/@orpc/hibernation) | Leverage Hibernation APIs like [Cloudflare's Hibernation WebSocket](https://developers.cloudflare.com/durable-objects/best-practices/websockets/#durable-objects-hibernation-websocket-api). | [Hibernation](https://orpc.dev/docs/integrations/hibernation) |
|
|
55
|
+
| [@orpc/json-schema](https://www.npmjs.com/package/@orpc/json-schema) | Smart coercion for OpenAPI requests. | [Smart Coercion](https://orpc.dev/docs/plugins/smart-coercion) |
|
|
45
56
|
|
|
46
57
|
**Framework & ecosystem integrations**
|
|
47
58
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
59
|
+
| Package | Purpose | Docs |
|
|
60
|
+
| ------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
61
|
+
| [@orpc/next](https://www.npmjs.com/package/@orpc/next) | Integrate with [Next.js Server Functions](https://nextjs.org/docs/app/getting-started/mutating-data). | [Next.js](https://orpc.dev/docs/integrations/next) |
|
|
62
|
+
| [@orpc/ai-sdk](https://www.npmjs.com/package/@orpc/ai-sdk) | Turn contracts and procedures into [AI SDK](https://ai-sdk.dev/) tools. | [AI SDK](https://orpc.dev/docs/integrations/ai-sdk) |
|
|
63
|
+
| [@orpc/tanstack-query](https://www.npmjs.com/package/@orpc/tanstack-query) | Integrate with [TanStack Query](https://tanstack.com/query/latest). | [TanStack Query](https://orpc.dev/docs/integrations/tanstack-query) |
|
|
64
|
+
| [@orpc/pinia-colada](https://www.npmjs.com/package/@orpc/pinia-colada) | Integrate with [Pinia Colada](https://pinia-colada.esm.dev/). | [Pinia Colada](https://orpc.dev/docs/integrations/pinia-colada) |
|
|
65
|
+
| [@orpc/swr](https://www.npmjs.com/package/@orpc/swr) | Integrate with [SWR](https://swr.vercel.app/). | [SWR](https://orpc.dev/docs/integrations/swr) |
|
|
66
|
+
| [@orpc/experimental-msw](https://www.npmjs.com/package/@orpc/experimental-msw) | Mock procedures with [Mock Service Worker](https://mswjs.io/). | [MSW](https://orpc.dev/docs/integrations/msw) |
|
|
67
|
+
| [@orpc/experimental-effect](https://www.npmjs.com/package/@orpc/experimental-effect) | Integrate with [Effect](https://effect.website/). | [Effect](https://orpc.dev/docs/integrations/effect) |
|
|
68
|
+
| [@orpc/nest](https://www.npmjs.com/package/@orpc/nest) | Implement your contract with [NestJS](https://nestjs.com/). | [NestJS](https://orpc.dev/docs/integrations/nest) |
|
|
69
|
+
| [@orpc/node](https://www.npmjs.com/package/@orpc/node) | [Node.js](https://nodejs.org/) plugins for static file serving and large uploads. | [Static File](https://orpc.dev/docs/plugins/static-file), [Tmp File Upload](https://orpc.dev/docs/plugins/tmp-file-upload), [Batch Response Compression](https://orpc.dev/docs/plugins/batch-response-compression) |
|
|
70
|
+
| [@orpc/bun](https://www.npmjs.com/package/@orpc/bun) | Adapters for [Bun's Redis](https://bun.sh/). | [Publisher](https://orpc.dev/docs/helpers/publisher), [Rate Limit](https://orpc.dev/docs/helpers/ratelimit), [Lock](https://orpc.dev/docs/helpers/lock) |
|
|
71
|
+
| [@orpc/cloudflare](https://www.npmjs.com/package/@orpc/cloudflare) | Adapters for [Cloudflare Workers](https://developers.cloudflare.com/workers/). | [Publisher](https://orpc.dev/docs/helpers/publisher), [Rate Limit](https://orpc.dev/docs/helpers/ratelimit), [Lock](https://orpc.dev/docs/helpers/lock), [Traces](https://orpc.dev/docs/integrations/cloudflare-traces) |
|
|
72
|
+
| [@orpc/trpc](https://www.npmjs.com/package/@orpc/trpc) | Reuse existing [tRPC](https://trpc.io/) routers within oRPC. | [tRPC](https://orpc.dev/docs/integrations/trpc) |
|
|
52
73
|
|
|
53
74
|
**Observability**
|
|
54
75
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
76
|
+
| Package | Purpose | Docs |
|
|
77
|
+
| ------------------------------------------------------------------------ | ---------------------------------------------------------------------------------- | ----------------------------------------------------------------- |
|
|
78
|
+
| [@orpc/opentelemetry](https://www.npmjs.com/package/@orpc/opentelemetry) | Integrate with [OpenTelemetry](https://opentelemetry.io/) for distributed tracing. | [OpenTelemetry](https://orpc.dev/docs/integrations/opentelemetry) |
|
|
79
|
+
| [@orpc/pino](https://www.npmjs.com/package/@orpc/pino) | Integrate with [Pino](https://getpino.io/) for logging. | [Pino](https://orpc.dev/docs/integrations/pino) |
|
|
80
|
+
| [@orpc/evlog](https://www.npmjs.com/package/@orpc/evlog) | Integrate with [Evlog](https://evlog.dev/) for logging. | [Evlog](https://orpc.dev/docs/integrations/evlog) |
|
|
58
81
|
|
|
59
82
|
## Sponsors
|
|
60
83
|
|
|
61
|
-
Like what we build over at [middleapi](https://github.com/middleapi)? You can help keep it going
|
|
84
|
+
Like what we build over at [middleapi](https://github.com/middleapi)? You can help keep it going through [GitHub Sponsors](https://github.com/sponsors/dinwwwh) or [Open Collective](https://opencollective.com/middleapi). Every bit helps! 🚀
|
|
85
|
+
|
|
86
|
+
<table>
|
|
87
|
+
<tr>
|
|
88
|
+
<td width="2000"><a href="https://screenshotone.com/?ref=middleapi&utm_source=middleapi&utm_medium=sponsor" target="_blank" rel="noopener" title="The screenshot API for developers"><img src="https://avatars.githubusercontent.com/u/97035603?v=4" width="64" align="left" hspace="12" alt="ScreenshotOne.com"/><b>ScreenshotOne.com</b></a><br /><sub>The screenshot API for developers</sub></td>
|
|
89
|
+
</tr>
|
|
90
|
+
<tr>
|
|
91
|
+
<td width="2000"><a href="https://yuzu.health/careers?ref=middleapi&utm_source=middleapi&utm_medium=sponsor" target="_blank" rel="noopener sponsored" title="We're hiring NYC based engineers"><img src="https://avatars.githubusercontent.com/u/102488956?v=4" width="64" align="left" hspace="12" alt="Yuzu"/><b>Yuzu</b></a><br /><sub>We're hiring NYC based engineers</sub></td>
|
|
92
|
+
</tr>
|
|
93
|
+
<tr>
|
|
94
|
+
<td width="2000"><a href="https://misskey.io/?ref=middleapi&utm_source=middleapi&utm_medium=sponsor" target="_blank" rel="noopener sponsored" title="Decentralized microblogging SNS born on Earth"><img src="https://github.com/MisskeyIO.png" width="64" align="left" hspace="12" alt="MisskeyHQ"/><b>MisskeyHQ</b></a><br /><sub>Decentralized microblogging SNS born on Earth</sub></td>
|
|
95
|
+
</tr>
|
|
96
|
+
</table>
|
|
62
97
|
|
|
63
|
-
###
|
|
98
|
+
### Special Sponsors
|
|
64
99
|
|
|
65
100
|
<table>
|
|
66
101
|
<tr>
|
|
67
|
-
<td align="center"><a href="
|
|
102
|
+
<td align="center"><a href="http://twitter.com/rauchg?ref=middleapi&utm_source=middleapi&utm_medium=sponsor" target="_blank" rel="noopener sponsored" title="Guillermo Rauch"><img src="https://avatars.githubusercontent.com/u/13041?u=1ee8d111657cdd02ff6d253df00978d17ee6d722&v=4" width="279" alt="Guillermo Rauch"/><br />Guillermo Rauch</a></td>
|
|
68
103
|
</tr>
|
|
69
104
|
</table>
|
|
70
105
|
|
|
71
|
-
###
|
|
106
|
+
### Premium Sponsors
|
|
72
107
|
|
|
73
108
|
<table>
|
|
74
109
|
<tr>
|
|
75
|
-
<td align="center"><a href="https://
|
|
110
|
+
<td align="center"><a href="https://github.com/nexa-ca?ref=middleapi&utm_source=middleapi&utm_medium=sponsor" target="_blank" rel="noopener sponsored" title="Nexa"><img src="https://avatars.githubusercontent.com/u/199146462?v=4" width="209" alt="Nexa"/><br />Nexa</a></td>
|
|
76
111
|
</tr>
|
|
77
112
|
</table>
|
|
78
113
|
|
|
79
|
-
###
|
|
114
|
+
### Organization Sponsors
|
|
80
115
|
|
|
81
116
|
<table>
|
|
82
117
|
<tr>
|
|
83
|
-
<td align="center"><a href="https://
|
|
118
|
+
<td align="center"><a href="https://lnmarkets.com/?ref=middleapi&utm_source=middleapi&utm_medium=sponsor" target="_blank" rel="noopener sponsored" title="LN Markets"><img src="https://avatars.githubusercontent.com/u/70597625?v=4" width="167" alt="LN Markets"/><br />LN Markets</a></td>
|
|
84
119
|
</tr>
|
|
85
120
|
</table>
|
|
86
121
|
|
|
@@ -88,26 +123,28 @@ Like what we build over at [middleapi](https://github.com/middleapi)? You can he
|
|
|
88
123
|
|
|
89
124
|
<table>
|
|
90
125
|
<tr>
|
|
91
|
-
<td align="center"><a href="https://github.com/hrmcdonald?ref=
|
|
92
|
-
<td align="center"><a href="https://
|
|
93
|
-
<td align="center"><a href="https://github.com/
|
|
94
|
-
<td align="center"><a href="https://
|
|
95
|
-
<td align="center"><a href="https://github.com/
|
|
96
|
-
<td align="center"><a href="https://github.com/
|
|
126
|
+
<td align="center"><a href="https://github.com/hrmcdonald?ref=middleapi&utm_source=middleapi&utm_medium=sponsor" target="_blank" rel="noopener sponsored" title="Reece McDonald"><img src="https://avatars.githubusercontent.com/u/39349270?v=4" width="139" alt="Reece McDonald"/><br />Reece McDonald</a></td>
|
|
127
|
+
<td align="center"><a href="https://soymilk.party/?ref=middleapi&utm_source=middleapi&utm_medium=sponsor" target="_blank" rel="noopener sponsored" title="あわわわとーにゅ"><img src="https://avatars.githubusercontent.com/u/17376330?u=de3353804be889f009f7e0a1582daf04d0ab292d&v=4" width="139" alt="あわわわとーにゅ"/><br />あわわわとーにゅ</a></td>
|
|
128
|
+
<td align="center"><a href="https://github.com/nicognaW?ref=middleapi&utm_source=middleapi&utm_medium=sponsor" target="_blank" rel="noopener sponsored" title="nk"><img src="https://avatars.githubusercontent.com/u/66731869?u=4699bda3a9092d3ec34fbd959450767bcc8b8b6d&v=4" width="139" alt="nk"/><br />nk</a></td>
|
|
129
|
+
<td align="center"><a href="https://supastarter.dev/?ref=middleapi&utm_source=middleapi&utm_medium=sponsor" target="_blank" rel="noopener sponsored" title="supastarter"><img src="https://avatars.githubusercontent.com/u/110960143?v=4" width="139" alt="supastarter"/><br />supastarter</a></td>
|
|
130
|
+
<td align="center"><a href="https://github.com/divmgl?ref=middleapi&utm_source=middleapi&utm_medium=sponsor" target="_blank" rel="noopener sponsored" title="Dexter Miguel"><img src="https://avatars.githubusercontent.com/u/5452298?u=645993204be8696c085ecf0d228c3062efe2ed65&v=4" width="139" alt="Dexter Miguel"/><br />Dexter Miguel</a></td>
|
|
131
|
+
<td align="center"><a href="https://github.com/herrfugbaum?ref=middleapi&utm_source=middleapi&utm_medium=sponsor" target="_blank" rel="noopener sponsored" title="herrfugbaum"><img src="https://avatars.githubusercontent.com/u/12859776?u=644dc1666d0220bc0468eb0de3c56b919f635b16&v=4" width="139" alt="herrfugbaum"/><br />herrfugbaum</a></td>
|
|
97
132
|
</tr>
|
|
98
133
|
<tr>
|
|
99
|
-
<td align="center"><a href="https://
|
|
100
|
-
<td align="center"><a href="https://
|
|
101
|
-
<td align="center"><a href="https://github.
|
|
102
|
-
<td align="center"><a href="https://
|
|
103
|
-
<td align="center"><a href="https://
|
|
104
|
-
<td align="center"><a href="https://github.com/
|
|
134
|
+
<td align="center"><a href="https://laststance.io/?ref=middleapi&utm_source=middleapi&utm_medium=sponsor" target="_blank" rel="noopener sponsored" title="Ryota Murakami"><img src="https://avatars.githubusercontent.com/u/5501268?u=599389e03340734325726ca3f8f423c021d47d7f&v=4" width="139" alt="Ryota Murakami"/><br />Ryota Murakami</a></td>
|
|
135
|
+
<td align="center"><a href="https://cra.mr/?ref=middleapi&utm_source=middleapi&utm_medium=sponsor" target="_blank" rel="noopener sponsored" title="David Cramer"><img src="https://avatars.githubusercontent.com/u/23610?v=4" width="139" alt="David Cramer"/><br />David Cramer</a></td>
|
|
136
|
+
<td align="center"><a href="https://valerii15298.github.io/?ref=middleapi&utm_source=middleapi&utm_medium=sponsor" target="_blank" rel="noopener sponsored" 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>
|
|
137
|
+
<td align="center"><a href="https://letstri.dev/?ref=middleapi&utm_source=middleapi&utm_medium=sponsor" target="_blank" rel="noopener sponsored" 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>
|
|
138
|
+
<td align="center"><a href="https://blacklight.sh/?ref=middleapi&utm_source=middleapi&utm_medium=sponsor" target="_blank" rel="noopener sponsored" 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>
|
|
139
|
+
<td align="center"><a href="https://github.com/christ12938?ref=middleapi&utm_source=middleapi&utm_medium=sponsor" target="_blank" rel="noopener sponsored" title="christ12938"><img src="https://avatars.githubusercontent.com/u/25758598?v=4" width="139" alt="christ12938"/><br />christ12938</a></td>
|
|
105
140
|
</tr>
|
|
106
141
|
<tr>
|
|
107
|
-
<td align="center"><a href="https://github.com/
|
|
108
|
-
<td align="center"><a href="https://github.com/
|
|
109
|
-
<td align="center"><a href="https://github.com/
|
|
110
|
-
<td align="center"><a href="https://github.com/
|
|
142
|
+
<td align="center"><a href="https://github.com/Ryanjso?ref=middleapi&utm_source=middleapi&utm_medium=sponsor" target="_blank" rel="noopener sponsored" 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>
|
|
143
|
+
<td align="center"><a href="https://github.com/itigoore01?ref=middleapi&utm_source=middleapi&utm_medium=sponsor" target="_blank" rel="noopener sponsored" title="shota"><img src="https://avatars.githubusercontent.com/u/11831107?u=c976a6dc7e055eb026304c46c99100ed22b0c8e0&v=4" width="139" alt="shota"/><br />shota</a></td>
|
|
144
|
+
<td align="center"><a href="https://github.com/ellis-driscoll?ref=middleapi&utm_source=middleapi&utm_medium=sponsor" target="_blank" rel="noopener sponsored" title="Ellis Driscoll"><img src="https://avatars.githubusercontent.com/u/70685966?u=c5f95bc33b5991d9744abe00052542e4a2ed3cb9&v=4" width="139" alt="Ellis Driscoll"/><br />Ellis Driscoll</a></td>
|
|
145
|
+
<td align="center"><a href="https://github.com/hoangbn?ref=middleapi&utm_source=middleapi&utm_medium=sponsor" target="_blank" rel="noopener sponsored" title="Hoang Nguyen"><img src="https://avatars.githubusercontent.com/u/38968280?u=c90084c6de65c56facabab7ba13a72a49ddbc3e4&v=4" width="139" alt="Hoang Nguyen"/><br />Hoang Nguyen</a></td>
|
|
146
|
+
<td align="center"><a href="https://opencollective.com/guest-ac41de3b?ref=middleapi&utm_source=middleapi&utm_medium=sponsor" target="_blank" rel="noopener sponsored" title="Orestis Ioannou"><img src="https://images.opencollective.com/guest-ac41de3b/avatar/460.png" width="139" alt="Orestis Ioannou"/><br />Orestis Ioannou</a></td>
|
|
147
|
+
<td align="center"><a href="https://automatio.ai/?ref=middleapi&utm_source=middleapi&utm_medium=sponsor" target="_blank" rel="noopener sponsored" title="Stefan Smiljkovic"><img src="https://avatars.githubusercontent.com/u/1984909?u=b7bf5bc40ed49df3c22f69d2da7b8d78709c49ed&v=4" width="139" alt="Stefan Smiljkovic"/><br />Stefan Smiljkovic</a></td>
|
|
111
148
|
</tr>
|
|
112
149
|
</table>
|
|
113
150
|
|
|
@@ -115,67 +152,33 @@ Like what we build over at [middleapi](https://github.com/middleapi)? You can he
|
|
|
115
152
|
|
|
116
153
|
<table>
|
|
117
154
|
<tr>
|
|
118
|
-
<td align="center"><a href="https://github.com/rhinodavid?ref=
|
|
119
|
-
<td align="center"><a href="https://github.com/
|
|
120
|
-
<td align="center"><a href="https://
|
|
121
|
-
<td align="center"><a href="https://github.com/
|
|
122
|
-
<td align="center"><a href="https://github.com/
|
|
123
|
-
<td align="center"><a href="https://
|
|
124
|
-
<td align="center"><a href="https://github.com/
|
|
155
|
+
<td align="center"><a href="https://github.com/rhinodavid?ref=middleapi&utm_source=middleapi&utm_medium=sponsor" target="_blank" rel="noopener sponsored" 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>
|
|
156
|
+
<td align="center"><a href="https://github.com/IPv4Addr?ref=middleapi&utm_source=middleapi&utm_medium=sponsor" target="_blank" rel="noopener sponsored" title="IPv4Addr"><img src="https://avatars.githubusercontent.com/u/100147665?u=59996b72f69bb53063cb7e9ff8b8f898616cd94d&v=4" width="119" alt="IPv4Addr"/><br />IPv4Addr</a></td>
|
|
157
|
+
<td align="center"><a href="https://robbevaes.be/?ref=middleapi&utm_source=middleapi&utm_medium=sponsor" target="_blank" rel="noopener sponsored" 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>
|
|
158
|
+
<td align="center"><a href="https://github.com/aidansunbury?ref=middleapi&utm_source=middleapi&utm_medium=sponsor" target="_blank" rel="noopener sponsored" title="Aidan Sunbury"><img src="https://avatars.githubusercontent.com/u/64103161?v=4" width="119" alt="Aidan Sunbury"/><br />Aidan Sunbury</a></td>
|
|
159
|
+
<td align="center"><a href="https://github.com/soonoo?ref=middleapi&utm_source=middleapi&utm_medium=sponsor" target="_blank" rel="noopener sponsored" title="soonoo"><img src="https://avatars.githubusercontent.com/u/5436405?u=5d0b4aa955c87e30e6bda7f0cccae5402da99528&v=4" width="119" alt="soonoo"/><br />soonoo</a></td>
|
|
160
|
+
<td align="center"><a href="https://kevinporten.dev/?ref=middleapi&utm_source=middleapi&utm_medium=sponsor" target="_blank" rel="noopener sponsored" 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>
|
|
161
|
+
<td align="center"><a href="https://github.com/pumpkinlink?ref=middleapi&utm_source=middleapi&utm_medium=sponsor" target="_blank" rel="noopener sponsored" title="Denis"><img src="https://avatars.githubusercontent.com/u/11864620?u=5f47bbe6c65d0f6f5cf011021490238e4b0593d0&v=4" width="119" alt="Denis"/><br />Denis</a></td>
|
|
125
162
|
</tr>
|
|
126
163
|
<tr>
|
|
127
|
-
<td align="center"><a href="https://github.com/
|
|
128
|
-
<td align="center"><a href="
|
|
129
|
-
<td align="center"><a href="https://
|
|
130
|
-
<td align="center"><a href="https://github.com/
|
|
131
|
-
<td align="center"><a href="https://
|
|
132
|
-
<td align="center"><a href="https://
|
|
133
|
-
<td align="center"><a href="https://
|
|
164
|
+
<td align="center"><a href="https://github.com/christopher-kapic?ref=middleapi&utm_source=middleapi&utm_medium=sponsor" target="_blank" rel="noopener sponsored" 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>
|
|
165
|
+
<td align="center"><a href="http://ballingt.com/?ref=middleapi&utm_source=middleapi&utm_medium=sponsor" target="_blank" rel="noopener sponsored" 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>
|
|
166
|
+
<td align="center"><a href="https://lee-sam.com/?ref=middleapi&utm_source=middleapi&utm_medium=sponsor" target="_blank" rel="noopener sponsored" title="Sam"><img src="https://avatars.githubusercontent.com/u/102863520?u=3c89611f549d5070be232eb4532f690c8f2e7a65&v=4" width="119" alt="Sam"/><br />Sam</a></td>
|
|
167
|
+
<td align="center"><a href="https://github.com/Titoine?ref=middleapi&utm_source=middleapi&utm_medium=sponsor" target="_blank" rel="noopener sponsored" title="Titoine"><img src="https://avatars.githubusercontent.com/u/3514286?u=1bb1e86b0c99c8a1121372e56d51a177eea12191&v=4" width="119" alt="Titoine"/><br />Titoine</a></td>
|
|
168
|
+
<td align="center"><a href="https://rigtch.fm/?ref=middleapi&utm_source=middleapi&utm_medium=sponsor" target="_blank" rel="noopener sponsored" 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>
|
|
169
|
+
<td align="center"><a href="https://blog.cwang.io/?ref=middleapi&utm_source=middleapi&utm_medium=sponsor" target="_blank" rel="noopener sponsored" title="hanayashiki"><img src="https://avatars.githubusercontent.com/u/26056783?u=06c3b9205a16fd41a871e82da1cc2a09306d53f5&v=4" width="119" alt="hanayashiki"/><br />hanayashiki</a></td>
|
|
170
|
+
<td align="center"><a href="https://dubinets.io/?ref=middleapi&utm_source=middleapi&utm_medium=sponsor" target="_blank" rel="noopener sponsored" 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>
|
|
134
171
|
</tr>
|
|
135
172
|
<tr>
|
|
136
|
-
<td align="center"><a href="https://
|
|
137
|
-
<td align="center"><a href="https://
|
|
138
|
-
<td align="center"><a href="https://
|
|
173
|
+
<td align="center"><a href="https://kellychan.im/?ref=middleapi&utm_source=middleapi&utm_medium=sponsor" target="_blank" rel="noopener sponsored" 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>
|
|
174
|
+
<td align="center"><a href="https://guyariely.com/?ref=middleapi&utm_source=middleapi&utm_medium=sponsor" target="_blank" rel="noopener sponsored" title="Guy Ariely"><img src="https://avatars.githubusercontent.com/u/42813496?u=edb6b7f563bf28e160a290832e7da57c0506f8ca&v=4" width="119" alt="Guy Ariely"/><br />Guy Ariely</a></td>
|
|
175
|
+
<td align="center"><a href="https://paulsenon.com/?ref=middleapi&utm_source=middleapi&utm_medium=sponsor" target="_blank" rel="noopener sponsored" title="PaulSenon"><img src="https://avatars.githubusercontent.com/u/19531087?u=6385741eb91d200b8c513ec6045482e301767ca6&v=4" width="119" alt="PaulSenon"/><br />PaulSenon</a></td>
|
|
176
|
+
<td align="center"><a href="https://piscis.dev/?ref=middleapi&utm_source=middleapi&utm_medium=sponsor" target="_blank" rel="noopener sponsored" title="Alex"><img src="https://avatars.githubusercontent.com/u/326163?u=b245f368bd940cf51d08c0b6bf55f8257f359437&v=4" width="119" alt="Alex"/><br />Alex</a></td>
|
|
177
|
+
<td align="center"><a href="https://opensource.gubanov.eu/?ref=middleapi&utm_source=middleapi&utm_medium=sponsor" target="_blank" rel="noopener sponsored" title="Andrey Gubanov"><img src="https://avatars.githubusercontent.com/u/1082083?u=c5f2daf7ebece498e85c83367bb37b4e10e2649d&v=4" width="119" alt="Andrey Gubanov"/><br />Andrey Gubanov</a></td>
|
|
139
178
|
</tr>
|
|
140
179
|
</table>
|
|
141
180
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
<p>
|
|
145
|
-
<a href="https://github.com/MrMaxie?ref=orpc" target="_blank" rel="noopener" title="Maxie"><img src="https://avatars.githubusercontent.com/u/3857836?u=5e6b57973d4385d655663ffdd836e487856f2984&v=4" width="32" height="32" alt="Maxie" /></a>
|
|
146
|
-
<a href="https://github.com/Stijn-Timmer?ref=orpc" target="_blank" rel="noopener" title="Stijn Timmer"><img src="https://avatars.githubusercontent.com/u/100147665?u=106b2c18e9c98a61861b4ee7fc100f5b9906a6c9&v=4" width="32" height="32" alt="Stijn Timmer" /></a>
|
|
147
|
-
<a href="https://github.com/u1-liquid?ref=orpc" target="_blank" rel="noopener" title="あわわわとーにゅ"><img src="https://avatars.githubusercontent.com/u/17376330?u=de3353804be889f009f7e0a1582daf04d0ab292d&v=4" width="32" height="32" alt="あわわわとーにゅ" /></a>
|
|
148
|
-
<a href="https://github.com/zuplo?ref=orpc" target="_blank" rel="noopener" title="Zuplo"><img src="https://avatars.githubusercontent.com/u/85497839?v=4" width="32" height="32" alt="Zuplo" /></a>
|
|
149
|
-
<a href="https://github.com/motopods?ref=orpc" target="_blank" rel="noopener" title="motopods"><img src="https://avatars.githubusercontent.com/u/58200641?v=4" width="32" height="32" alt="motopods" /></a>
|
|
150
|
-
<a href="https://github.com/franciscohermida?ref=orpc" target="_blank" rel="noopener" title="Francisco Hermida"><img src="https://avatars.githubusercontent.com/u/483242?u=bbcbc80eb9d8781ff401f7dafc3b59cd7bea0561&v=4" width="32" height="32" alt="Francisco Hermida" /></a>
|
|
151
|
-
<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
|
-
<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
|
-
<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=505e54608466ab53754f702973687b04c6424c1f&v=4" width="32" height="32" alt="0x4e32" /></a>
|
|
155
|
-
<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
|
-
<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
|
-
<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>
|
|
158
|
-
<a href="https://github.com/cloudycotton?ref=orpc" target="_blank" rel="noopener" title="Saksham"><img src="https://avatars.githubusercontent.com/u/168998965?u=9b9634a5aed66a51c1b880663272725b00b92b14&v=4" width="32" height="32" alt="Saksham" /></a>
|
|
159
|
-
<a href="https://github.com/hrynevychroman?ref=orpc" target="_blank" rel="noopener" title="Roman Hrynevych"><img src="https://avatars.githubusercontent.com/u/82209198?u=1a1d111ab3d589855b9cc8a7fefb1b5c6a4fbbaf&v=4" width="32" height="32" alt="Roman Hrynevych" /></a>
|
|
160
|
-
<a href="https://github.com/rokitgg?ref=orpc" target="_blank" rel="noopener" title="rokitg"><img src="https://avatars.githubusercontent.com/u/125133357?u=06c74aefaa2236b06a2e5fba5a5c612339f45912&v=4" width="32" height="32" alt="rokitg" /></a>
|
|
161
|
-
<a href="https://github.com/omarkhatibgg?ref=orpc" target="_blank" rel="noopener" title="Omar Khatib"><img src="https://avatars.githubusercontent.com/u/9054278?u=afbba7331b85c51b8eee4130f5fd31b1017dc919&v=4" width="32" height="32" alt="Omar Khatib" /></a>
|
|
162
|
-
<a href="https://github.com/YuSabo90002?ref=orpc" target="_blank" rel="noopener" title="Yu-Sabo"><img src="https://avatars.githubusercontent.com/u/13120582?v=4" width="32" height="32" alt="Yu-Sabo" /></a>
|
|
163
|
-
<a href="https://github.com/bapspatil?ref=orpc" target="_blank" rel="noopener" title="Bapusaheb Patil"><img src="https://avatars.githubusercontent.com/u/16699418?u=6d9d8e0a64a6f91ca1c4d559c72d931172bdcbbd&v=4" width="32" height="32" alt="Bapusaheb Patil" /></a>
|
|
164
|
-
<a href="https://github.com/ripgrim?ref=orpc" target="_blank" rel="noopener" title="grim"><img src="https://avatars.githubusercontent.com/u/75869731?u=b17c42ec2309552fdb822a86b25a2f99146a4d72&v=4" width="32" height="32" alt="grim" /></a>
|
|
165
|
-
<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
|
-
<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
|
-
<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>
|
|
168
|
-
<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>
|
|
169
|
-
<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
|
-
<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
|
-
<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>
|
|
172
|
-
<a href="https://github.com/yukimotochern?ref=orpc" target="_blank" rel="noopener" title="Chen, Zhi-Yuan"><img src="https://avatars.githubusercontent.com/u/20896173?u=945c33fc21725e4d566a0d02afc54b136ca1d67a&v=4" width="32" height="32" alt="Chen, Zhi-Yuan" /></a>
|
|
173
|
-
<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
|
-
<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
|
-
<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>
|
|
176
|
-
<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
|
-
<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
|
-
</p>
|
|
181
|
+
With thanks to [36 past sponsors](https://htmlpreview.github.io/?https://github.com/middleapi/static/blob/main/sponsors.svg) who helped get oRPC here.
|
|
179
182
|
|
|
180
183
|
## References
|
|
181
184
|
|
package/dist/adapters/node.d.mts
CHANGED
|
@@ -1,7 +1,13 @@
|
|
|
1
|
-
import { StandardRequest } from '@
|
|
1
|
+
import { StandardRequest } from '@standard-server/core';
|
|
2
2
|
import { RequestLogger } from 'evlog';
|
|
3
3
|
import { FrameworkIntegrationSpec } from 'evlog/toolkit';
|
|
4
4
|
|
|
5
|
+
/**
|
|
6
|
+
* Creates an AsyncLocalStorage-backed logger store. Pass `storage` to
|
|
7
|
+
* `EvlogHandlerPlugin` and call `useLogger` inside procedures to access the request logger.
|
|
8
|
+
*
|
|
9
|
+
* @see {@link https://orpc.dev/docs/integrations/evlog#using-the-logger-in-your-code | Evlog Integration - Using the Logger in Your Code}
|
|
10
|
+
*/
|
|
5
11
|
declare function createLoggerStorage(): {
|
|
6
12
|
storage: FrameworkIntegrationSpec<{
|
|
7
13
|
request: StandardRequest;
|
package/dist/adapters/node.d.ts
CHANGED
|
@@ -1,7 +1,13 @@
|
|
|
1
|
-
import { StandardRequest } from '@
|
|
1
|
+
import { StandardRequest } from '@standard-server/core';
|
|
2
2
|
import { RequestLogger } from 'evlog';
|
|
3
3
|
import { FrameworkIntegrationSpec } from 'evlog/toolkit';
|
|
4
4
|
|
|
5
|
+
/**
|
|
6
|
+
* Creates an AsyncLocalStorage-backed logger store. Pass `storage` to
|
|
7
|
+
* `EvlogHandlerPlugin` and call `useLogger` inside procedures to access the request logger.
|
|
8
|
+
*
|
|
9
|
+
* @see {@link https://orpc.dev/docs/integrations/evlog#using-the-logger-in-your-code | Evlog Integration - Using the Logger in Your Code}
|
|
10
|
+
*/
|
|
5
11
|
declare function createLoggerStorage(): {
|
|
6
12
|
storage: FrameworkIntegrationSpec<{
|
|
7
13
|
request: StandardRequest;
|
package/dist/index.d.mts
CHANGED
|
@@ -1,13 +1,23 @@
|
|
|
1
|
-
import { RequestLogger } from 'evlog';
|
|
1
|
+
import { RequestLogger, LogLevel } from 'evlog';
|
|
2
2
|
import { Context } from '@orpc/server';
|
|
3
3
|
import { StandardHandlerPlugin, StandardHandlerOptions } from '@orpc/server/standard';
|
|
4
|
-
import { StandardRequest } from '@
|
|
4
|
+
import { StandardRequest } from '@standard-server/core';
|
|
5
5
|
import { BaseEvlogOptions, FrameworkIntegrationSpec } from 'evlog/toolkit';
|
|
6
6
|
|
|
7
7
|
declare const LOGGER_CONTEXT_SYMBOL: unique symbol;
|
|
8
|
+
/**
|
|
9
|
+
* Context shape that carries the Evlog request logger injected by `EvlogHandlerPlugin`.
|
|
10
|
+
*
|
|
11
|
+
* @see {@link https://orpc.dev/docs/integrations/evlog#without-asynclocalstorage | Evlog Integration - Without AsyncLocalStorage}
|
|
12
|
+
*/
|
|
8
13
|
interface LoggerContext {
|
|
9
14
|
[LOGGER_CONTEXT_SYMBOL]?: undefined | RequestLogger;
|
|
10
15
|
}
|
|
16
|
+
/**
|
|
17
|
+
* Retrieves the Evlog request logger from the oRPC context, if available.
|
|
18
|
+
*
|
|
19
|
+
* @see {@link https://orpc.dev/docs/integrations/evlog#without-asynclocalstorage | Evlog Integration - Without AsyncLocalStorage}
|
|
20
|
+
*/
|
|
11
21
|
declare function getLogger(context: LoggerContext): RequestLogger | undefined;
|
|
12
22
|
|
|
13
23
|
interface EvlogHandlerPluginOptions<_T extends Context> extends BaseEvlogOptions {
|
|
@@ -23,20 +33,36 @@ interface EvlogHandlerPluginOptions<_T extends Context> extends BaseEvlogOptions
|
|
|
23
33
|
* @default false
|
|
24
34
|
*/
|
|
25
35
|
logAbort?: boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Customizes the log level for errors thrown from procedures;
|
|
38
|
+
* internal handler failures are always logged at error level.
|
|
39
|
+
* Receives the level applied by default; return it to keep the default behavior:
|
|
40
|
+
* 'info' for abort errors, 'warn' for ORPCError except INTERNAL_SERVER_ERROR, 'error' otherwise.
|
|
41
|
+
*
|
|
42
|
+
* @default (error, level) => level
|
|
43
|
+
*/
|
|
44
|
+
procedureErrorLevel?: (error: unknown, level: LogLevel) => LogLevel;
|
|
26
45
|
}
|
|
46
|
+
/**
|
|
47
|
+
* Instruments an oRPC handler with Evlog structured logging, request tracking,
|
|
48
|
+
* and error monitoring.
|
|
49
|
+
*
|
|
50
|
+
* @see {@link https://orpc.dev/docs/integrations/evlog | Evlog Integration}
|
|
51
|
+
*/
|
|
27
52
|
declare class EvlogHandlerPlugin<T extends Context> implements StandardHandlerPlugin<T> {
|
|
28
53
|
name: string;
|
|
29
54
|
/**
|
|
30
|
-
* - Logging interceptors should run after
|
|
55
|
+
* - Logging interceptors should run after tracing interceptors
|
|
31
56
|
* so they execute within the active request span.
|
|
32
57
|
* - Logging interceptors should run after batch interceptors
|
|
33
58
|
* so they log each individual request instead of the batch request.
|
|
34
59
|
*/
|
|
35
60
|
before: string[];
|
|
36
61
|
private readonly logAbort;
|
|
62
|
+
private readonly procedureErrorLevel;
|
|
37
63
|
private readonly integration;
|
|
38
64
|
private readonly evlogOptions;
|
|
39
|
-
constructor({ storage, logAbort, ...evlogOptions }?: EvlogHandlerPluginOptions<T>);
|
|
65
|
+
constructor({ storage, logAbort, procedureErrorLevel, ...evlogOptions }?: EvlogHandlerPluginOptions<T>);
|
|
40
66
|
init(options: StandardHandlerOptions<T>): StandardHandlerOptions<T>;
|
|
41
67
|
}
|
|
42
68
|
|
package/dist/index.d.ts
CHANGED
|
@@ -1,13 +1,23 @@
|
|
|
1
|
-
import { RequestLogger } from 'evlog';
|
|
1
|
+
import { RequestLogger, LogLevel } from 'evlog';
|
|
2
2
|
import { Context } from '@orpc/server';
|
|
3
3
|
import { StandardHandlerPlugin, StandardHandlerOptions } from '@orpc/server/standard';
|
|
4
|
-
import { StandardRequest } from '@
|
|
4
|
+
import { StandardRequest } from '@standard-server/core';
|
|
5
5
|
import { BaseEvlogOptions, FrameworkIntegrationSpec } from 'evlog/toolkit';
|
|
6
6
|
|
|
7
7
|
declare const LOGGER_CONTEXT_SYMBOL: unique symbol;
|
|
8
|
+
/**
|
|
9
|
+
* Context shape that carries the Evlog request logger injected by `EvlogHandlerPlugin`.
|
|
10
|
+
*
|
|
11
|
+
* @see {@link https://orpc.dev/docs/integrations/evlog#without-asynclocalstorage | Evlog Integration - Without AsyncLocalStorage}
|
|
12
|
+
*/
|
|
8
13
|
interface LoggerContext {
|
|
9
14
|
[LOGGER_CONTEXT_SYMBOL]?: undefined | RequestLogger;
|
|
10
15
|
}
|
|
16
|
+
/**
|
|
17
|
+
* Retrieves the Evlog request logger from the oRPC context, if available.
|
|
18
|
+
*
|
|
19
|
+
* @see {@link https://orpc.dev/docs/integrations/evlog#without-asynclocalstorage | Evlog Integration - Without AsyncLocalStorage}
|
|
20
|
+
*/
|
|
11
21
|
declare function getLogger(context: LoggerContext): RequestLogger | undefined;
|
|
12
22
|
|
|
13
23
|
interface EvlogHandlerPluginOptions<_T extends Context> extends BaseEvlogOptions {
|
|
@@ -23,20 +33,36 @@ interface EvlogHandlerPluginOptions<_T extends Context> extends BaseEvlogOptions
|
|
|
23
33
|
* @default false
|
|
24
34
|
*/
|
|
25
35
|
logAbort?: boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Customizes the log level for errors thrown from procedures;
|
|
38
|
+
* internal handler failures are always logged at error level.
|
|
39
|
+
* Receives the level applied by default; return it to keep the default behavior:
|
|
40
|
+
* 'info' for abort errors, 'warn' for ORPCError except INTERNAL_SERVER_ERROR, 'error' otherwise.
|
|
41
|
+
*
|
|
42
|
+
* @default (error, level) => level
|
|
43
|
+
*/
|
|
44
|
+
procedureErrorLevel?: (error: unknown, level: LogLevel) => LogLevel;
|
|
26
45
|
}
|
|
46
|
+
/**
|
|
47
|
+
* Instruments an oRPC handler with Evlog structured logging, request tracking,
|
|
48
|
+
* and error monitoring.
|
|
49
|
+
*
|
|
50
|
+
* @see {@link https://orpc.dev/docs/integrations/evlog | Evlog Integration}
|
|
51
|
+
*/
|
|
27
52
|
declare class EvlogHandlerPlugin<T extends Context> implements StandardHandlerPlugin<T> {
|
|
28
53
|
name: string;
|
|
29
54
|
/**
|
|
30
|
-
* - Logging interceptors should run after
|
|
55
|
+
* - Logging interceptors should run after tracing interceptors
|
|
31
56
|
* so they execute within the active request span.
|
|
32
57
|
* - Logging interceptors should run after batch interceptors
|
|
33
58
|
* so they log each individual request instead of the batch request.
|
|
34
59
|
*/
|
|
35
60
|
before: string[];
|
|
36
61
|
private readonly logAbort;
|
|
62
|
+
private readonly procedureErrorLevel;
|
|
37
63
|
private readonly integration;
|
|
38
64
|
private readonly evlogOptions;
|
|
39
|
-
constructor({ storage, logAbort, ...evlogOptions }?: EvlogHandlerPluginOptions<T>);
|
|
65
|
+
constructor({ storage, logAbort, procedureErrorLevel, ...evlogOptions }?: EvlogHandlerPluginOptions<T>);
|
|
40
66
|
init(options: StandardHandlerOptions<T>): StandardHandlerOptions<T>;
|
|
41
67
|
}
|
|
42
68
|
|
package/dist/index.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { wrapAsyncIteratorPreservingEventMeta, ORPCError } from '@orpc/client';
|
|
2
2
|
import { ORPC_NAME, toArray, isAsyncIteratorObject, override, sleep, wrapReadableStream, isAbortError } from '@orpc/shared';
|
|
3
|
-
import { parseStandardUrl, flattenStandardHeader } from '@
|
|
3
|
+
import { parseStandardUrl, flattenStandardHeader, ErrorEvent } from '@standard-server/core';
|
|
4
4
|
import { defineFrameworkIntegration } from 'evlog/toolkit';
|
|
5
5
|
|
|
6
6
|
const LOGGER_CONTEXT_SYMBOL = Symbol.for("ORPC_EVLOG_LOGGER_CONTEXT");
|
|
@@ -11,18 +11,20 @@ function getLogger(context) {
|
|
|
11
11
|
class EvlogHandlerPlugin {
|
|
12
12
|
name = "~evlog";
|
|
13
13
|
/**
|
|
14
|
-
* - Logging interceptors should run after
|
|
14
|
+
* - Logging interceptors should run after tracing interceptors
|
|
15
15
|
* so they execute within the active request span.
|
|
16
16
|
* - Logging interceptors should run after batch interceptors
|
|
17
17
|
* so they log each individual request instead of the batch request.
|
|
18
18
|
*/
|
|
19
|
-
before = ["~
|
|
19
|
+
before = ["~tracing", "~batch", "~hibernation"];
|
|
20
20
|
logAbort;
|
|
21
|
+
procedureErrorLevel;
|
|
21
22
|
integration;
|
|
22
23
|
evlogOptions;
|
|
23
|
-
constructor({ storage, logAbort, ...evlogOptions } = {}) {
|
|
24
|
+
constructor({ storage, logAbort, procedureErrorLevel, ...evlogOptions } = {}) {
|
|
24
25
|
this.evlogOptions = evlogOptions;
|
|
25
26
|
this.logAbort = logAbort ?? false;
|
|
27
|
+
this.procedureErrorLevel = procedureErrorLevel ?? ((_, level) => level);
|
|
26
28
|
this.integration = defineFrameworkIntegration({
|
|
27
29
|
name: ORPC_NAME,
|
|
28
30
|
storage,
|
|
@@ -60,13 +62,15 @@ class EvlogHandlerPlugin {
|
|
|
60
62
|
response: {
|
|
61
63
|
...result.response,
|
|
62
64
|
/**
|
|
63
|
-
* @
|
|
64
|
-
* Remember use `override` for
|
|
65
|
+
* @remarks
|
|
66
|
+
* **Warning**: Remember use `override` for AsyncIteratorObject to remain other special properties
|
|
65
67
|
*/
|
|
66
|
-
body: override(result.response.body,
|
|
68
|
+
body: override(result.response.body, wrapAsyncIteratorPreservingEventMeta(result.response.body, {
|
|
67
69
|
runWith,
|
|
68
70
|
onError: (error) => {
|
|
69
|
-
|
|
71
|
+
if (!(error instanceof ErrorEvent)) {
|
|
72
|
+
logger.error(toErrorOrString(error));
|
|
73
|
+
}
|
|
70
74
|
},
|
|
71
75
|
onFinish: async () => {
|
|
72
76
|
await sleep(0);
|
|
@@ -82,8 +86,8 @@ class EvlogHandlerPlugin {
|
|
|
82
86
|
response: {
|
|
83
87
|
...result.response,
|
|
84
88
|
/**
|
|
85
|
-
* @
|
|
86
|
-
* Remember use `override` for
|
|
89
|
+
* @remarks
|
|
90
|
+
* **Warning**: Remember use `override` for ReadableStream to remain other special properties
|
|
87
91
|
*/
|
|
88
92
|
body: override(result.response.body, wrapReadableStream(result.response.body, {
|
|
89
93
|
runWith,
|
|
@@ -135,7 +139,7 @@ class EvlogHandlerPlugin {
|
|
|
135
139
|
try {
|
|
136
140
|
return await next();
|
|
137
141
|
} catch (error) {
|
|
138
|
-
|
|
142
|
+
logProcedureError(logger, error, this.procedureErrorLevel);
|
|
139
143
|
throw error;
|
|
140
144
|
}
|
|
141
145
|
};
|
|
@@ -143,16 +147,16 @@ class EvlogHandlerPlugin {
|
|
|
143
147
|
const logger = getLogger(context);
|
|
144
148
|
const output = await next();
|
|
145
149
|
if (isAsyncIteratorObject(output)) {
|
|
146
|
-
return override(output,
|
|
150
|
+
return override(output, wrapAsyncIteratorPreservingEventMeta(output, {
|
|
147
151
|
onError: (error) => {
|
|
148
|
-
|
|
152
|
+
logProcedureError(logger, error, this.procedureErrorLevel);
|
|
149
153
|
}
|
|
150
154
|
}));
|
|
151
155
|
}
|
|
152
156
|
if (output instanceof ReadableStream) {
|
|
153
157
|
return override(output, wrapReadableStream(output, {
|
|
154
158
|
onError: (error) => {
|
|
155
|
-
|
|
159
|
+
logProcedureError(logger, error, this.procedureErrorLevel);
|
|
156
160
|
}
|
|
157
161
|
}));
|
|
158
162
|
}
|
|
@@ -181,11 +185,24 @@ function toErrorOrString(error) {
|
|
|
181
185
|
}
|
|
182
186
|
return String(error);
|
|
183
187
|
}
|
|
184
|
-
function
|
|
185
|
-
logger
|
|
188
|
+
function logProcedureError(logger, error, procedureErrorLevel) {
|
|
189
|
+
if (!logger) {
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
logger.error(toErrorOrString(error));
|
|
193
|
+
const level = procedureErrorLevel(error, defaultProcedureErrorLevel(error));
|
|
194
|
+
if (level !== "error") {
|
|
195
|
+
logger.setLevel(level);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
function defaultProcedureErrorLevel(error) {
|
|
186
199
|
if (isAbortError(error)) {
|
|
187
|
-
|
|
200
|
+
return "info";
|
|
201
|
+
}
|
|
202
|
+
if (error instanceof ORPCError && error.code !== "INTERNAL_SERVER_ERROR") {
|
|
203
|
+
return "warn";
|
|
188
204
|
}
|
|
205
|
+
return "error";
|
|
189
206
|
}
|
|
190
207
|
|
|
191
208
|
export { EvlogHandlerPlugin, LOGGER_CONTEXT_SYMBOL, getLogger };
|
package/package.json
CHANGED
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@orpc/evlog",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "2.0.0-beta.
|
|
4
|
+
"version": "2.0.0-beta.40",
|
|
5
|
+
"description": "Evlog integration for oRPC: wide-event logging for typesafe APIs",
|
|
5
6
|
"license": "MIT",
|
|
7
|
+
"funding": [
|
|
8
|
+
"https://github.com/sponsors/dinwwwh",
|
|
9
|
+
"https://opencollective.com/middleapi"
|
|
10
|
+
],
|
|
6
11
|
"homepage": "https://orpc.dev",
|
|
7
12
|
"repository": {
|
|
8
13
|
"type": "git",
|
|
@@ -11,7 +16,11 @@
|
|
|
11
16
|
},
|
|
12
17
|
"keywords": [
|
|
13
18
|
"orpc",
|
|
14
|
-
"evlog"
|
|
19
|
+
"evlog",
|
|
20
|
+
"logging",
|
|
21
|
+
"wide-events",
|
|
22
|
+
"observability",
|
|
23
|
+
"typescript"
|
|
15
24
|
],
|
|
16
25
|
"sideEffects": false,
|
|
17
26
|
"exports": {
|
|
@@ -34,16 +43,15 @@
|
|
|
34
43
|
"evlog": ">=2.18.1"
|
|
35
44
|
},
|
|
36
45
|
"dependencies": {
|
|
37
|
-
"@
|
|
38
|
-
"@orpc/
|
|
39
|
-
"@orpc/shared": "2.0.0-beta.
|
|
40
|
-
"@
|
|
46
|
+
"@orpc/client": "2.0.0-beta.40",
|
|
47
|
+
"@orpc/server": "2.0.0-beta.40",
|
|
48
|
+
"@orpc/shared": "2.0.0-beta.40",
|
|
49
|
+
"@standard-server/core": "~0.9.2"
|
|
41
50
|
},
|
|
42
51
|
"devDependencies": {
|
|
43
|
-
"evlog": "^2.
|
|
52
|
+
"evlog": "^2.26.0"
|
|
44
53
|
},
|
|
45
54
|
"scripts": {
|
|
46
|
-
"build": "unbuild",
|
|
47
55
|
"type:check": "tsc -b"
|
|
48
56
|
}
|
|
49
57
|
}
|