effect-app 3.0.2 → 3.0.3
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/CHANGELOG.md +6 -0
- package/dist/Context.d.ts +23 -3
- package/dist/Context.d.ts.map +1 -1
- package/dist/Context.js +5 -1
- package/dist/NonEmptySet.d.ts +1 -1
- package/dist/client/apiClientFactory.d.ts +2 -18
- package/dist/client/apiClientFactory.d.ts.map +1 -1
- package/dist/client/makeClient.d.ts +58 -0
- package/dist/client/makeClient.d.ts.map +1 -0
- package/dist/client/makeClient.js +36 -0
- package/dist/client.d.ts +1 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +2 -2
- package/dist/{rpc/middleware-native.d.ts → middleware.d.ts} +5 -4
- package/dist/middleware.d.ts.map +1 -0
- package/dist/middleware.js +17 -0
- package/dist/rpc/{middleware-api.d.ts → MiddlewareMaker.d.ts} +62 -40
- package/dist/rpc/MiddlewareMaker.d.ts.map +1 -0
- package/dist/rpc/MiddlewareMaker.js +99 -0
- package/dist/rpc/RpcContextMap.d.ts +73 -0
- package/dist/rpc/RpcContextMap.d.ts.map +1 -0
- package/dist/rpc/RpcContextMap.js +33 -0
- package/dist/rpc/RpcMiddleware.d.ts +29 -36
- package/dist/rpc/RpcMiddleware.d.ts.map +1 -1
- package/dist/rpc/RpcMiddleware.js +2 -2
- package/dist/rpc.d.ts +2 -4
- package/dist/rpc.d.ts.map +1 -1
- package/dist/rpc.js +3 -5
- package/dist/utils.d.ts +0 -1
- package/dist/utils.d.ts.map +1 -1
- package/package.json +22 -24
- package/src/Context.ts +55 -0
- package/src/client/makeClient.ts +150 -0
- package/src/client.ts +1 -1
- package/src/{rpc/middleware-native.ts → middleware.ts} +4 -4
- package/src/rpc/{middleware-api.ts → MiddlewareMaker.ts} +146 -117
- package/src/rpc/README.md +41 -0
- package/src/rpc/RpcContextMap.ts +163 -0
- package/src/rpc/RpcMiddleware.ts +82 -42
- package/src/rpc.ts +2 -4
- package/src/utils.ts +0 -2
- package/test/rpc.test.ts +1 -1
- package/dist/client/req.d.ts +0 -120
- package/dist/client/req.d.ts.map +0 -1
- package/dist/client/req.js +0 -56
- package/dist/rpc/RpcMiddlewareX.d.ts +0 -24
- package/dist/rpc/RpcMiddlewareX.d.ts.map +0 -1
- package/dist/rpc/RpcMiddlewareX.js +0 -16
- package/dist/rpc/generic-middleware.d.ts +0 -51
- package/dist/rpc/generic-middleware.d.ts.map +0 -1
- package/dist/rpc/generic-middleware.js +0 -24
- package/dist/rpc/middleware-api.d.ts.map +0 -1
- package/dist/rpc/middleware-api.js +0 -88
- package/dist/rpc/middleware-native.d.ts.map +0 -1
- package/dist/rpc/middleware-native.js +0 -17
- package/src/client/req.ts +0 -288
- package/src/rpc/RpcMiddlewareX.ts +0 -65
- package/src/rpc/generic-middleware.ts +0 -128
- package/wallaby.cjs +0 -1
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
-
import { type RpcMiddleware } from "@effect/rpc"
|
|
3
|
-
import { Context, Effect, type Layer, type NonEmptyReadonlyArray, type S } from "effect-app"
|
|
4
|
-
import { type GetContextConfig, type RPCContextMap } from "effect-app/client"
|
|
5
|
-
import { type Tag } from "effect/Context"
|
|
6
|
-
import { type Simplify } from "effect/Types"
|
|
7
|
-
import { PreludeLogger } from "../logger.js"
|
|
8
|
-
import { type MakeTags, type MiddlewareMakerId } from "./middleware-api.js"
|
|
9
|
-
import { type RpcMiddlewareWrap, type TagClassAny } from "./RpcMiddleware.js"
|
|
10
|
-
|
|
11
|
-
// Effect rpc middleware does not support changing payload or headers, but we do..
|
|
12
|
-
|
|
13
|
-
export interface MiddlewareMaker<
|
|
14
|
-
RequestContextMap extends Record<string, RPCContextMap.Any>,
|
|
15
|
-
MiddlewareProviders extends ReadonlyArray<MiddlewareMaker.Any>
|
|
16
|
-
> extends
|
|
17
|
-
RpcMiddleware.TagClass<
|
|
18
|
-
MiddlewareMakerId,
|
|
19
|
-
"MiddlewareMaker",
|
|
20
|
-
Simplify<
|
|
21
|
-
& { readonly wrap: true }
|
|
22
|
-
& (Exclude<
|
|
23
|
-
MiddlewareMaker.ManyRequired<MiddlewareProviders>,
|
|
24
|
-
MiddlewareMaker.ManyProvided<MiddlewareProviders>
|
|
25
|
-
> extends never ? {} : {
|
|
26
|
-
readonly requires: MakeTags<
|
|
27
|
-
Exclude<
|
|
28
|
-
MiddlewareMaker.ManyRequired<MiddlewareProviders>,
|
|
29
|
-
MiddlewareMaker.ManyProvided<MiddlewareProviders>
|
|
30
|
-
>
|
|
31
|
-
>
|
|
32
|
-
})
|
|
33
|
-
& (MiddlewareMaker.ManyErrors<MiddlewareProviders> extends never ? {}
|
|
34
|
-
: {
|
|
35
|
-
readonly failure: S.Schema<MiddlewareMaker.ManyErrors<MiddlewareProviders>>
|
|
36
|
-
})
|
|
37
|
-
& (MiddlewareMaker.ManyProvided<MiddlewareProviders> extends never ? {}
|
|
38
|
-
: { readonly provides: MakeTags<MiddlewareMaker.ManyProvided<MiddlewareProviders>> })
|
|
39
|
-
>
|
|
40
|
-
>
|
|
41
|
-
{
|
|
42
|
-
readonly layer: Layer.Layer<MiddlewareMakerId, never, Tag.Identifier<MiddlewareProviders[number]>>
|
|
43
|
-
readonly requestContext: RequestContextTag<RequestContextMap>
|
|
44
|
-
readonly requestContextMap: RequestContextMap
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
export interface RequestContextTag<RequestContextMap extends Record<string, RPCContextMap.Any>>
|
|
48
|
-
extends Context.Tag<"RequestContextConfig", GetContextConfig<RequestContextMap>>
|
|
49
|
-
{}
|
|
50
|
-
|
|
51
|
-
export namespace MiddlewareMaker {
|
|
52
|
-
export type Any = TagClassAny
|
|
53
|
-
|
|
54
|
-
export type ApplyServices<A extends TagClassAny, R> = Exclude<R, Provided<A>> | Required<A>
|
|
55
|
-
|
|
56
|
-
export type ApplyManyServices<A extends NonEmptyReadonlyArray<TagClassAny>, R> =
|
|
57
|
-
| Exclude<R, { [K in keyof A]: Provided<A[K]> }[number]>
|
|
58
|
-
| { [K in keyof A]: Required<A[K]> }[number]
|
|
59
|
-
|
|
60
|
-
export type ManyProvided<A extends ReadonlyArray<TagClassAny>> = A extends NonEmptyReadonlyArray<TagClassAny>
|
|
61
|
-
? { [K in keyof A]: Provided<A[K]> }[number]
|
|
62
|
-
: Provided<A[number]>
|
|
63
|
-
export type ManyRequired<A extends ReadonlyArray<TagClassAny>> = A extends NonEmptyReadonlyArray<TagClassAny>
|
|
64
|
-
? { [K in keyof A]: Required<A[K]> }[number]
|
|
65
|
-
: Required<A[number]>
|
|
66
|
-
export type ManyErrors<A extends ReadonlyArray<TagClassAny>> = A extends NonEmptyReadonlyArray<TagClassAny>
|
|
67
|
-
? { [K in keyof A]: Errors<A[K]> }[number]
|
|
68
|
-
: Errors<A[number]>
|
|
69
|
-
|
|
70
|
-
export type Provided<T> = T extends TagClassAny ? T extends { provides: infer _P } ? _P
|
|
71
|
-
: never
|
|
72
|
-
: never
|
|
73
|
-
|
|
74
|
-
export type Errors<T> = T extends TagClassAny ? T extends { failure: S.Schema.Any } ? S.Schema.Type<T["failure"]>
|
|
75
|
-
: never
|
|
76
|
-
: never
|
|
77
|
-
|
|
78
|
-
export type Required<T> = T extends TagClassAny ? T extends { requires: infer _R } ? _R
|
|
79
|
-
: never
|
|
80
|
-
: never
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
export const middlewareMaker = <
|
|
84
|
-
MiddlewareProviders extends ReadonlyArray<MiddlewareMaker.Any>
|
|
85
|
-
>(middlewares: MiddlewareProviders): Effect.Effect<
|
|
86
|
-
RpcMiddlewareWrap<
|
|
87
|
-
MiddlewareMaker.ManyProvided<MiddlewareProviders>,
|
|
88
|
-
MiddlewareMaker.ManyErrors<MiddlewareProviders>,
|
|
89
|
-
Exclude<
|
|
90
|
-
MiddlewareMaker.ManyRequired<MiddlewareProviders>,
|
|
91
|
-
MiddlewareMaker.ManyProvided<MiddlewareProviders>
|
|
92
|
-
> extends never ? never
|
|
93
|
-
: Exclude<MiddlewareMaker.ManyRequired<MiddlewareProviders>, MiddlewareMaker.ManyProvided<MiddlewareProviders>>
|
|
94
|
-
>
|
|
95
|
-
> => {
|
|
96
|
-
// we want to run them in reverse order because latter middlewares will provide context to former ones
|
|
97
|
-
middlewares = middlewares.toReversed() as any
|
|
98
|
-
|
|
99
|
-
return Effect.gen(function*() {
|
|
100
|
-
const context = yield* Effect.context()
|
|
101
|
-
|
|
102
|
-
// returns a Effect/RpcMiddlewareWrap with Scope in requirements
|
|
103
|
-
return (
|
|
104
|
-
_options: Parameters<
|
|
105
|
-
RpcMiddleware.RpcMiddlewareWrap<
|
|
106
|
-
MiddlewareMaker.ManyProvided<MiddlewareProviders>,
|
|
107
|
-
never
|
|
108
|
-
>
|
|
109
|
-
>[0]
|
|
110
|
-
) => {
|
|
111
|
-
const { next, ...options } = _options
|
|
112
|
-
// we start with the actual handler
|
|
113
|
-
let handler = next
|
|
114
|
-
|
|
115
|
-
// inspired from Effect/RpcMiddleware
|
|
116
|
-
for (const tag of middlewares) {
|
|
117
|
-
// use the tag to get the middleware from context
|
|
118
|
-
const middleware = Context.unsafeGet(context, tag)
|
|
119
|
-
|
|
120
|
-
// wrap the current handler, allowing the middleware to run before and after it
|
|
121
|
-
handler = PreludeLogger.logDebug("Applying middleware wrap " + tag.key).pipe(
|
|
122
|
-
Effect.zipRight(middleware(handler, options))
|
|
123
|
-
) as any
|
|
124
|
-
}
|
|
125
|
-
return handler
|
|
126
|
-
}
|
|
127
|
-
}) as any
|
|
128
|
-
}
|
package/wallaby.cjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
module.exports = require("../../wallaby.base.cjs")
|