@effect-app/infra 4.0.0-beta.8 → 4.0.0-beta.81
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 +527 -0
- package/dist/CUPS.d.ts +3 -3
- package/dist/CUPS.d.ts.map +1 -1
- package/dist/CUPS.js +3 -3
- package/dist/Emailer/Sendgrid.js +1 -1
- package/dist/Emailer/service.d.ts +3 -3
- package/dist/Emailer/service.d.ts.map +1 -1
- package/dist/Emailer/service.js +3 -3
- package/dist/MainFiberSet.d.ts +2 -2
- package/dist/MainFiberSet.d.ts.map +1 -1
- package/dist/MainFiberSet.js +3 -3
- package/dist/Model/Repository/internal/internal.d.ts +3 -3
- package/dist/Model/Repository/internal/internal.d.ts.map +1 -1
- package/dist/Model/Repository/internal/internal.js +11 -7
- package/dist/Model/Repository/makeRepo.d.ts +2 -2
- package/dist/Model/Repository/makeRepo.d.ts.map +1 -1
- package/dist/Model/Repository/makeRepo.js +1 -1
- package/dist/Model/Repository/validation.d.ts +5 -4
- package/dist/Model/Repository/validation.d.ts.map +1 -1
- package/dist/Model/query/dsl.d.ts +9 -9
- package/dist/Operations.d.ts +2 -2
- package/dist/Operations.d.ts.map +1 -1
- package/dist/Operations.js +3 -3
- package/dist/OperationsRepo.d.ts +2 -2
- package/dist/OperationsRepo.d.ts.map +1 -1
- package/dist/OperationsRepo.js +3 -3
- package/dist/QueueMaker/SQLQueue.d.ts +3 -5
- package/dist/QueueMaker/SQLQueue.d.ts.map +1 -1
- package/dist/QueueMaker/SQLQueue.js +9 -7
- package/dist/QueueMaker/errors.d.ts +1 -1
- package/dist/QueueMaker/errors.d.ts.map +1 -1
- package/dist/QueueMaker/memQueue.d.ts.map +1 -1
- package/dist/QueueMaker/memQueue.js +10 -9
- package/dist/QueueMaker/sbqueue.d.ts.map +1 -1
- package/dist/QueueMaker/sbqueue.js +11 -9
- package/dist/RequestContext.d.ts +19 -14
- package/dist/RequestContext.d.ts.map +1 -1
- package/dist/RequestContext.js +5 -5
- package/dist/RequestFiberSet.d.ts +2 -2
- package/dist/RequestFiberSet.d.ts.map +1 -1
- package/dist/RequestFiberSet.js +5 -5
- package/dist/Store/ContextMapContainer.d.ts +14 -3
- package/dist/Store/ContextMapContainer.d.ts.map +1 -1
- package/dist/Store/ContextMapContainer.js +64 -3
- package/dist/Store/Cosmos.js +1 -1
- package/dist/Store/Disk.d.ts.map +1 -1
- package/dist/Store/Disk.js +3 -4
- package/dist/Store/Memory.d.ts +2 -2
- package/dist/Store/Memory.d.ts.map +1 -1
- package/dist/Store/Memory.js +4 -4
- package/dist/Store/service.d.ts +6 -3
- package/dist/Store/service.d.ts.map +1 -1
- package/dist/Store/service.js +14 -6
- package/dist/adapters/SQL/Model.d.ts +2 -5
- package/dist/adapters/SQL/Model.d.ts.map +1 -1
- package/dist/adapters/SQL/Model.js +21 -13
- package/dist/adapters/ServiceBus.d.ts +6 -6
- package/dist/adapters/ServiceBus.d.ts.map +1 -1
- package/dist/adapters/ServiceBus.js +9 -9
- package/dist/adapters/cosmos-client.d.ts +2 -2
- package/dist/adapters/cosmos-client.d.ts.map +1 -1
- package/dist/adapters/cosmos-client.js +3 -3
- package/dist/adapters/logger.d.ts.map +1 -1
- package/dist/adapters/memQueue.d.ts +2 -2
- package/dist/adapters/memQueue.d.ts.map +1 -1
- package/dist/adapters/memQueue.js +3 -3
- package/dist/adapters/mongo-client.d.ts +2 -2
- package/dist/adapters/mongo-client.d.ts.map +1 -1
- package/dist/adapters/mongo-client.js +3 -3
- package/dist/adapters/redis-client.d.ts +3 -3
- package/dist/adapters/redis-client.d.ts.map +1 -1
- package/dist/adapters/redis-client.js +3 -3
- package/dist/api/ContextProvider.d.ts +6 -6
- package/dist/api/ContextProvider.d.ts.map +1 -1
- package/dist/api/ContextProvider.js +6 -6
- package/dist/api/internal/RequestContextMiddleware.d.ts +1 -1
- package/dist/api/internal/auth.d.ts +1 -1
- package/dist/api/internal/events.d.ts +2 -2
- package/dist/api/internal/events.d.ts.map +1 -1
- package/dist/api/internal/events.js +7 -5
- package/dist/api/layerUtils.d.ts +5 -5
- package/dist/api/layerUtils.d.ts.map +1 -1
- package/dist/api/layerUtils.js +5 -5
- package/dist/api/routing/middleware/RouterMiddleware.d.ts +3 -3
- package/dist/api/routing/middleware/RouterMiddleware.d.ts.map +1 -1
- package/dist/api/routing/schema/jwt.d.ts +1 -1
- package/dist/api/routing/schema/jwt.d.ts.map +1 -1
- package/dist/api/routing/schema/jwt.js +1 -1
- package/dist/api/routing.d.ts +1 -5
- package/dist/api/routing.d.ts.map +1 -1
- package/dist/api/routing.js +3 -2
- package/dist/api/setupRequest.js +4 -4
- package/dist/errorReporter.d.ts +1 -1
- package/dist/errorReporter.d.ts.map +1 -1
- package/dist/errorReporter.js +1 -1
- package/dist/fileUtil.js +1 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/rateLimit.js +1 -1
- package/examples/query.ts +29 -25
- package/package.json +16 -16
- package/src/CUPS.ts +2 -2
- package/src/Emailer/Sendgrid.ts +1 -1
- package/src/Emailer/service.ts +2 -2
- package/src/MainFiberSet.ts +2 -2
- package/src/Model/Repository/internal/internal.ts +11 -8
- package/src/Model/Repository/makeRepo.ts +2 -2
- package/src/Operations.ts +2 -2
- package/src/OperationsRepo.ts +2 -2
- package/src/QueueMaker/SQLQueue.ts +10 -10
- package/src/QueueMaker/memQueue.ts +41 -42
- package/src/QueueMaker/sbqueue.ts +65 -62
- package/src/RequestContext.ts +4 -4
- package/src/RequestFiberSet.ts +4 -4
- package/src/Store/ContextMapContainer.ts +98 -2
- package/src/Store/Cosmos.ts +10 -10
- package/src/Store/Disk.ts +2 -3
- package/src/Store/Memory.ts +4 -6
- package/src/Store/service.ts +14 -5
- package/src/adapters/SQL/Model.ts +76 -71
- package/src/adapters/ServiceBus.ts +8 -8
- package/src/adapters/cosmos-client.ts +2 -2
- package/src/adapters/memQueue.ts +2 -2
- package/src/adapters/mongo-client.ts +2 -2
- package/src/adapters/redis-client.ts +2 -2
- package/src/api/ContextProvider.ts +11 -11
- package/src/api/internal/events.ts +7 -6
- package/src/api/layerUtils.ts +8 -8
- package/src/api/routing/middleware/RouterMiddleware.ts +4 -4
- package/src/api/routing/schema/jwt.ts +2 -3
- package/src/api/routing.ts +7 -6
- package/src/api/setupRequest.ts +3 -3
- package/src/errorReporter.ts +1 -1
- package/src/fileUtil.ts +1 -1
- package/src/rateLimit.ts +2 -2
- package/test/contextProvider.test.ts +5 -5
- package/test/controller.test.ts +12 -9
- package/test/dist/contextProvider.test.d.ts.map +1 -1
- package/test/dist/controller.test.d.ts.map +1 -1
- package/test/dist/fixtures.d.ts +18 -8
- package/test/dist/fixtures.d.ts.map +1 -1
- package/test/dist/fixtures.js +11 -9
- package/test/dist/query.test.d.ts.map +1 -1
- package/test/dist/rawQuery.test.d.ts.map +1 -1
- package/test/dist/requires.test.d.ts.map +1 -1
- package/test/dist/rpc-multi-middleware.test.d.ts.map +1 -1
- package/test/fixtures.ts +10 -8
- package/test/query.test.ts +160 -14
- package/test/rawQuery.test.ts +19 -17
- package/test/requires.test.ts +6 -5
- package/test/rpc-multi-middleware.test.ts +73 -4
- package/test/validateSample.test.ts +1 -1
- package/tsconfig.json +0 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
-
import { Effect, Layer, type NonEmptyReadonlyArray, pipe, type Scope
|
|
2
|
+
import { Context, Effect, Layer, type NonEmptyReadonlyArray, pipe, type Scope } from "effect-app"
|
|
3
3
|
|
|
4
4
|
import { type HttpRouter } from "effect-app/http"
|
|
5
5
|
import { type EffectGenUtils } from "effect-app/utils/gen"
|
|
@@ -23,7 +23,7 @@ type TDepsArr<TDeps extends ReadonlyArray<any>> = {
|
|
|
23
23
|
// E = never => the context provided cannot trigger errors
|
|
24
24
|
// TODO: remove HttpLayerRouter.Provided - it's not even relevant outside of Http context, while ContextProviders are for anywhere. Only support Scope.Scope?
|
|
25
25
|
// _R extends HttpLayerRouter.Provided => the context provided can only have what HttpLayerRouter.Provided provides as requirements
|
|
26
|
-
ContextTagWithDefault.Base<Effect.Effect<
|
|
26
|
+
ContextTagWithDefault.Base<Effect.Effect<Context.Context<infer _1>, never, infer _R>> // & { _tag: infer _2 }>
|
|
27
27
|
? [_R] extends [HttpRouter.Provided] ? TDeps[K]
|
|
28
28
|
: `HttpLayerRouter.Provided is the only requirement ${TDeps[K]["Service"][
|
|
29
29
|
"_tag"
|
|
@@ -58,9 +58,9 @@ export const mergeContextProviders = <
|
|
|
58
58
|
Effect.Effect<
|
|
59
59
|
// we need to merge all contexts into one
|
|
60
60
|
// v4: Service.Shape extracts the service value type (v3's Tag.Identifier)
|
|
61
|
-
|
|
61
|
+
Context.Context<GetContext<EffectGenUtils.Success<Context.Service.Shape<TDeps[number]>>>>,
|
|
62
62
|
never,
|
|
63
|
-
EffectGenUtils.
|
|
63
|
+
EffectGenUtils.Context<Context.Service.Shape<TDeps[number]>>
|
|
64
64
|
>,
|
|
65
65
|
LayerUtils.GetLayersError<{ [K in keyof TDeps]: TDeps[K]["Default"] }>,
|
|
66
66
|
LayerUtils.GetLayersSuccess<{ [K in keyof TDeps]: TDeps[K]["Default"] }>
|
|
@@ -78,14 +78,14 @@ export const mergeContextProviders = <
|
|
|
78
78
|
handle: handle[Symbol.toStringTag] === "GeneratorFunction" ? Effect.fnUntraced(handle)() : handle
|
|
79
79
|
}
|
|
80
80
|
))
|
|
81
|
-
// services are effects which return some
|
|
81
|
+
// services are effects which return some Context.Context<...>
|
|
82
82
|
const context = yield* mergeContexts(services as any)
|
|
83
83
|
return context
|
|
84
84
|
})
|
|
85
85
|
}) as any
|
|
86
86
|
})
|
|
87
87
|
|
|
88
|
-
// Effect Rpc Middleware: for single tag providing, we could use Provides, for providing
|
|
88
|
+
// Effect Rpc Middleware: for single tag providing, we could use Provides, for providing Context or Layer (bad boy) we could use Wrap..
|
|
89
89
|
export const ContextProvider = <
|
|
90
90
|
ContextProviderA,
|
|
91
91
|
MakeContextProviderE,
|
|
@@ -107,7 +107,7 @@ export const ContextProvider = <
|
|
|
107
107
|
dependencies?: Dependencies
|
|
108
108
|
}
|
|
109
109
|
) => {
|
|
110
|
-
const ctx =
|
|
110
|
+
const ctx = Context.Service<
|
|
111
111
|
ContextProviderId,
|
|
112
112
|
Effect.Effect<ContextProviderA, never, ContextProviderR>
|
|
113
113
|
>(
|
|
@@ -146,17 +146,17 @@ export const MergedContextProvider = <
|
|
|
146
146
|
Effect.Effect<
|
|
147
147
|
// we need to merge all contexts into one
|
|
148
148
|
// v4: Service.Shape extracts the service value type (v3's Tag.Identifier)
|
|
149
|
-
|
|
149
|
+
Context.Context<GetContext<EffectGenUtils.Success<Context.Service.Shape<TDeps[number]>>>>,
|
|
150
150
|
never,
|
|
151
|
-
EffectGenUtils.
|
|
151
|
+
EffectGenUtils.Context<Context.Service.Shape<TDeps[number]>>
|
|
152
152
|
>,
|
|
153
153
|
LayerUtils.GetLayersError<{ [K in keyof TDeps]: TDeps[K]["Default"] }>,
|
|
154
154
|
// v4: Identifier here is correct — it's the nominal service identity for layer provide/exclude
|
|
155
155
|
| Exclude<
|
|
156
|
-
|
|
156
|
+
Context.Service.Identifier<TDeps[number]>,
|
|
157
157
|
LayerUtils.GetLayersSuccess<{ [K in keyof TDeps]: TDeps[K]["Default"] }>
|
|
158
158
|
>
|
|
159
159
|
| LayerUtils.GetLayersContext<{ [K in keyof TDeps]: TDeps[K]["Default"] }>
|
|
160
160
|
>
|
|
161
161
|
|
|
162
|
-
export const EmptyContextProvider = ContextProvider({ effect: Effect.succeed(Effect.succeed(
|
|
162
|
+
export const EmptyContextProvider = ContextProvider({ effect: Effect.succeed(Effect.succeed(Context.empty())) })
|
|
@@ -9,14 +9,14 @@ const keepAlive = Stream.fromEffectSchedule(Effect.succeed(":keep-alive"), Sched
|
|
|
9
9
|
|
|
10
10
|
let connId = BigInt(0)
|
|
11
11
|
|
|
12
|
-
export const makeSSE = <A extends { id: any }, SI,
|
|
13
|
-
schema: S.Codec<A, SI,
|
|
12
|
+
export const makeSSE = <A extends { id: any }, SI, SRD, SRE>(
|
|
13
|
+
schema: S.Codec<A, SI, SRD, SRE>
|
|
14
14
|
) =>
|
|
15
15
|
<E, R>(events: Stream.Stream<{ evt: A; namespace: string }, E, R>) =>
|
|
16
16
|
Effect
|
|
17
17
|
.gen(function*() {
|
|
18
18
|
const id = connId++
|
|
19
|
-
const ctx = yield* Effect.
|
|
19
|
+
const ctx = yield* Effect.context<R | SRD | SRE>()
|
|
20
20
|
const res = HttpServerResponse.stream(
|
|
21
21
|
// workaround for different scoped behaviour for streams in Bun
|
|
22
22
|
// https://discord.com/channels/795981131316985866/1098177242598756412/1389646879675125861
|
|
@@ -28,19 +28,20 @@ export const makeSSE = <A extends { id: any }, SI, SR>(
|
|
|
28
28
|
|
|
29
29
|
const enc = new TextEncoder()
|
|
30
30
|
|
|
31
|
-
const encode = S.encodeEffect(schema)
|
|
31
|
+
const encode = S.encodeEffect(S.fromJsonString(S.toCodecJson(schema)))
|
|
32
32
|
|
|
33
33
|
const eventStream = Stream.mapEffect(
|
|
34
34
|
events,
|
|
35
35
|
(_) =>
|
|
36
36
|
encode(_.evt)
|
|
37
|
-
.pipe(Effect.map((
|
|
37
|
+
.pipe(Effect.map((data) => `id: ${_.evt.id}\ndata: ${data}`))
|
|
38
38
|
)
|
|
39
39
|
|
|
40
40
|
const stream = pipe(
|
|
41
41
|
setRetry,
|
|
42
42
|
Stream.merge(keepAlive),
|
|
43
|
-
|
|
43
|
+
// Keep this unary so pipe receives a function, not a Stream value.
|
|
44
|
+
(self) => Stream.merge(self, eventStream, { haltStrategy: "either" }),
|
|
44
45
|
Stream.tapCause((cause) => Effect.logError("SSE error", cause)),
|
|
45
46
|
Stream.map((_) => enc.encode(_ + "\n\n"))
|
|
46
47
|
)
|
package/src/api/layerUtils.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
-
import { Effect, type Layer, type NonEmptyReadonlyArray, Option
|
|
2
|
+
import { Context, Effect, type Layer, type NonEmptyReadonlyArray, Option } from "effect-app"
|
|
3
3
|
import { InfraLogger } from "../logger.js"
|
|
4
4
|
|
|
5
5
|
// TODO: These LayerUtils are flaky, like in dependencies as a readonly array, it breaks when there are two entries
|
|
@@ -27,7 +27,7 @@ export namespace LayerUtils {
|
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
export type ContextTagWithDefault<Id, A, LayerE, LayerR> =
|
|
30
|
-
&
|
|
30
|
+
& Context.Service<Id, A>
|
|
31
31
|
& {
|
|
32
32
|
Default: Layer.Layer<Id, LayerE, LayerR>
|
|
33
33
|
}
|
|
@@ -36,29 +36,29 @@ export namespace ContextTagWithDefault {
|
|
|
36
36
|
export type Base<A> = ContextTagWithDefault<any, A, any, any>
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
export type GetContext<T> = T extends
|
|
39
|
+
export type GetContext<T> = T extends Context.Context<infer Y> ? Y : never
|
|
40
40
|
|
|
41
41
|
export const mergeContexts = Effect.fnUntraced(
|
|
42
42
|
function*<
|
|
43
43
|
T extends readonly {
|
|
44
44
|
maker: any
|
|
45
|
-
handle: Effect.Effect<
|
|
45
|
+
handle: Effect.Effect<Context.Context<any> | Option.Option<Context.Context<any>>>
|
|
46
46
|
}[]
|
|
47
47
|
>(
|
|
48
48
|
makers: T
|
|
49
49
|
) {
|
|
50
|
-
let context =
|
|
50
|
+
let context = Context.empty()
|
|
51
51
|
for (const mw of makers) {
|
|
52
52
|
const ctx = yield* mw.handle.pipe(Effect.provide(context))
|
|
53
|
-
const moreContext =
|
|
53
|
+
const moreContext = Context.isContext(ctx) ? Option.some(ctx) : ctx
|
|
54
54
|
yield* InfraLogger.logDebug(
|
|
55
55
|
"Built dynamic context for middleware" + (mw.maker.key ?? mw.maker),
|
|
56
56
|
Option.map(moreContext, (c) => (c as any).toJSON().services)
|
|
57
57
|
)
|
|
58
58
|
if (moreContext.value) {
|
|
59
|
-
context =
|
|
59
|
+
context = Context.merge(context, moreContext.value)
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
|
-
return context as
|
|
62
|
+
return context as Context.Context<Effect.Success<T[number]["handle"]>>
|
|
63
63
|
}
|
|
64
64
|
)
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
|
2
2
|
/* eslint-disable @typescript-eslint/no-unsafe-return */
|
|
3
3
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
4
|
-
import { type
|
|
4
|
+
import { type Context, type Layer } from "effect-app"
|
|
5
5
|
import { type GetContextConfig, type RpcContextMap } from "effect-app/rpc/RpcContextMap"
|
|
6
6
|
import { type RpcMiddlewareV4 } from "effect-app/rpc/RpcMiddleware"
|
|
7
7
|
// module:
|
|
8
8
|
//
|
|
9
9
|
|
|
10
|
-
// v4: middleware tags are
|
|
10
|
+
// v4: middleware tags are Context.Service (not Effect) — they carry the RpcMiddlewareV4 as their service Shape
|
|
11
11
|
export type RouterMiddleware<
|
|
12
12
|
Self,
|
|
13
13
|
RequestContextMap extends Record<string, RpcContextMap.Any>, // what services will the middlware provide dynamically to the next, or raise errors.
|
|
@@ -18,9 +18,9 @@ export type RouterMiddleware<
|
|
|
18
18
|
_ContextProviderR, // what the context provider requires
|
|
19
19
|
RequestContextId
|
|
20
20
|
> =
|
|
21
|
-
&
|
|
21
|
+
& Context.Service<Self, RpcMiddlewareV4<ContextProviderA, ContextProviderE, never>>
|
|
22
22
|
& {
|
|
23
23
|
readonly Default: Layer.Layer<Self, MakeMiddlewareE, MakeMiddlewareR>
|
|
24
|
-
readonly requestContext:
|
|
24
|
+
readonly requestContext: Context.Service<RequestContextId, GetContextConfig<RequestContextMap>>
|
|
25
25
|
readonly requestContextMap: RequestContextMap
|
|
26
26
|
}
|
|
@@ -15,8 +15,7 @@ export const parseJwt = <Sch extends S.Top>(
|
|
|
15
15
|
(s, _options) =>
|
|
16
16
|
Effect.try({
|
|
17
17
|
try: () => jwtDecode(s, options),
|
|
18
|
-
catch: (e: any) =>
|
|
19
|
-
new S.SchemaIssue.InvalidValue(Option.some(s), { message: e?.message })
|
|
18
|
+
catch: (e: any) => new S.SchemaIssue.InvalidValue(Option.some(s), { message: e?.message })
|
|
20
19
|
})
|
|
21
20
|
)
|
|
22
|
-
.pipe(S.decodeTo(schema) as any)
|
|
21
|
+
.pipe(S.decodeTo(schema) as any)
|
package/src/api/routing.ts
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
/* eslint-disable @typescript-eslint/no-empty-object-type */
|
|
4
4
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
5
5
|
import { Config, Effect, Layer, type NonEmptyReadonlyArray, Predicate, S, type Scope } from "effect-app"
|
|
6
|
+
import { getMeta } from "effect-app/client"
|
|
6
7
|
import { type HttpHeaders } from "effect-app/http"
|
|
7
8
|
import { type GetEffectContext, type GetEffectError, type RpcContextMap } from "effect-app/rpc/RpcContextMap"
|
|
8
9
|
import { type TypeTestId } from "effect-app/TypeTest"
|
|
@@ -182,10 +183,9 @@ export const makeRouter = <
|
|
|
182
183
|
* if `check` is provided, the router will only be created if the effect succeeds with true
|
|
183
184
|
*/
|
|
184
185
|
function matchFor<
|
|
185
|
-
const ModuleName extends string,
|
|
186
186
|
const Resource extends Record<string, any>
|
|
187
187
|
>(
|
|
188
|
-
rsc: Resource
|
|
188
|
+
rsc: Resource,
|
|
189
189
|
options?: { check?: Effect.Effect<boolean> }
|
|
190
190
|
) {
|
|
191
191
|
type HandlerWithInputGen<
|
|
@@ -194,7 +194,8 @@ export const makeRouter = <
|
|
|
194
194
|
> = (
|
|
195
195
|
req: S.Schema.Type<Action>
|
|
196
196
|
) => Generator<
|
|
197
|
-
Yieldable<
|
|
197
|
+
Yieldable<
|
|
198
|
+
any,
|
|
198
199
|
any,
|
|
199
200
|
S.Schema.Type<GetFailure<Action>> | S.SchemaError,
|
|
200
201
|
// the actual implementation of the handler may just require the dynamic context provided by the middleware
|
|
@@ -243,7 +244,7 @@ export const makeRouter = <
|
|
|
243
244
|
|
|
244
245
|
type AnyHandlers<Action extends AnyRequestModule> = HandlersRaw<Action> | HandlersDecoded<Action>
|
|
245
246
|
|
|
246
|
-
const
|
|
247
|
+
const meta = getMeta(rsc)
|
|
247
248
|
|
|
248
249
|
type RequestModules = FilterRequestModules<Resource>
|
|
249
250
|
const requestModules = typedKeysOf(rsc).reduce((acc, cur) => {
|
|
@@ -319,7 +320,7 @@ export const makeRouter = <
|
|
|
319
320
|
? Impl[K]["raw"] extends (...args: any[]) => Effect.Effect<any, any, infer R> ? R
|
|
320
321
|
: Impl[K]["raw"] extends Effect.Effect<any, any, infer R> ? R
|
|
321
322
|
: Impl[K]["raw"] extends (...args: any[]) => Generator<
|
|
322
|
-
Yieldable<any,any, any, infer R>,
|
|
323
|
+
Yieldable<any, any, any, infer R>,
|
|
323
324
|
any,
|
|
324
325
|
any
|
|
325
326
|
> ? R
|
|
@@ -327,7 +328,7 @@ export const makeRouter = <
|
|
|
327
328
|
: Impl[K] extends (...args: any[]) => Effect.Effect<any, any, infer R> ? R
|
|
328
329
|
: Impl[K] extends Effect.Effect<any, any, infer R> ? R
|
|
329
330
|
: Impl[K] extends (...args: any[]) => Generator<
|
|
330
|
-
Yieldable<any,any, any, infer R>,
|
|
331
|
+
Yieldable<any, any, any, infer R>,
|
|
331
332
|
any,
|
|
332
333
|
any
|
|
333
334
|
> ? R
|
package/src/api/setupRequest.ts
CHANGED
|
@@ -48,7 +48,7 @@ export const setupRequestContextFromCurrent =
|
|
|
48
48
|
self
|
|
49
49
|
.pipe(
|
|
50
50
|
withRequestSpan(name, options),
|
|
51
|
-
Effect.provide(ContextMapContainer.layer)
|
|
51
|
+
Effect.provide(ContextMapContainer.layer, { local: true })
|
|
52
52
|
)
|
|
53
53
|
|
|
54
54
|
// TODO: consider integrating Effect.withParentSpan
|
|
@@ -61,7 +61,7 @@ export function setupRequestContext<R, E, A>(self: Effect.Effect<A, E, R>, reque
|
|
|
61
61
|
return self
|
|
62
62
|
.pipe(
|
|
63
63
|
withRequestSpan(requestContext.name),
|
|
64
|
-
Effect.provide(layer)
|
|
64
|
+
Effect.provide(layer, { local: true })
|
|
65
65
|
)
|
|
66
66
|
}
|
|
67
67
|
|
|
@@ -79,6 +79,6 @@ export function setupRequestContextWithCustomSpan<R, E, A>(
|
|
|
79
79
|
return self
|
|
80
80
|
.pipe(
|
|
81
81
|
withRequestSpan(name, options),
|
|
82
|
-
Effect.provide(layer)
|
|
82
|
+
Effect.provide(layer, { local: true })
|
|
83
83
|
)
|
|
84
84
|
}
|
package/src/errorReporter.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as Sentry from "@sentry/node"
|
|
2
|
-
import { Cause, Effect, LogLevel } from "effect-app"
|
|
2
|
+
import { Cause, Effect, type LogLevel } from "effect-app"
|
|
3
3
|
import { dropUndefined, LogLevelToSentry } from "effect-app/utils"
|
|
4
4
|
import { getRC } from "./api/setupRequest.js"
|
|
5
5
|
import { CauseException, tryToJson, tryToReport } from "./errors.js"
|
package/src/fileUtil.ts
CHANGED
|
@@ -119,7 +119,7 @@ export function withFileLock<A, E, R>(
|
|
|
119
119
|
// ensure lock is released
|
|
120
120
|
yield* Effect.addFinalizer(() =>
|
|
121
121
|
Effect
|
|
122
|
-
|
|
122
|
+
// we have to make sure we use a thunk, or the library will cause problems because effect passes abortsignal as first argument
|
|
123
123
|
.tryPromise(() => release())
|
|
124
124
|
.pipe(Effect.orDie)
|
|
125
125
|
)
|
package/src/rateLimit.ts
CHANGED
|
@@ -56,7 +56,7 @@ export function batchPar<R, E, A, R2, E2, A2, T>(
|
|
|
56
56
|
(_, i) =>
|
|
57
57
|
Effect
|
|
58
58
|
.forEach(_, (_, j) => forEachItem(_, j, i), { concurrency: "inherit" })
|
|
59
|
-
.pipe(Effect.flatMap((_) => forEachBatch(_
|
|
59
|
+
.pipe(Effect.flatMap((_) => forEachBatch(_, i))),
|
|
60
60
|
{ concurrency: "inherit" }
|
|
61
61
|
)
|
|
62
62
|
}
|
|
@@ -72,7 +72,7 @@ export function batch<R, E, A, R2, E2, A2, T>(
|
|
|
72
72
|
(_, i) =>
|
|
73
73
|
Effect
|
|
74
74
|
.forEach(_, (_, j) => forEachItem(_, j, i), { concurrency: "inherit" })
|
|
75
|
-
.pipe(Effect.flatMap((_) => forEachBatch(_
|
|
75
|
+
.pipe(Effect.flatMap((_) => forEachBatch(_, i)))
|
|
76
76
|
)
|
|
77
77
|
}
|
|
78
78
|
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
2
|
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
|
3
3
|
import { expectTypeOf, it } from "@effect/vitest"
|
|
4
|
-
import { Effect, Layer, Scope,
|
|
4
|
+
import { Effect, Layer, Scope, Context } from "effect-app"
|
|
5
5
|
import { ContextProvider, mergeContextProviders, MergedContextProvider } from "../src/api/ContextProvider.js"
|
|
6
6
|
import { CustomError1, Some, SomeElse, SomeService } from "./fixtures.js"
|
|
7
7
|
|
|
8
8
|
// @effect-diagnostics-next-line missingEffectServiceDependency:off
|
|
9
|
-
class MyContextProvider extends
|
|
9
|
+
class MyContextProvider extends Context.Service<MyContextProvider>()(
|
|
10
10
|
"MyContextProvider",
|
|
11
11
|
{
|
|
12
12
|
make: Effect.gen(function*() {
|
|
@@ -28,7 +28,7 @@ class MyContextProvider extends ServiceMap.Service<MyContextProvider>()(
|
|
|
28
28
|
static readonly Default = Layer.effect(this, this.make)
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
-
class MyContextProvider2 extends
|
|
31
|
+
class MyContextProvider2 extends Context.Service<MyContextProvider2>()(
|
|
32
32
|
"MyContextProvider2",
|
|
33
33
|
{
|
|
34
34
|
make: Effect.gen(function*() {
|
|
@@ -45,7 +45,7 @@ class MyContextProvider2 extends ServiceMap.Service<MyContextProvider2>()(
|
|
|
45
45
|
static readonly Default = Layer.effect(this, this.make)
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
-
class MyContextProvider2Gen extends
|
|
48
|
+
class MyContextProvider2Gen extends Context.Service<MyContextProvider2Gen>()(
|
|
49
49
|
"MyContextProvider2Gen",
|
|
50
50
|
{
|
|
51
51
|
make: Effect.gen(function*() {
|
|
@@ -63,7 +63,7 @@ class MyContextProvider2Gen extends ServiceMap.Service<MyContextProvider2Gen>()(
|
|
|
63
63
|
}
|
|
64
64
|
|
|
65
65
|
// @effect-diagnostics-next-line missingEffectServiceDependency:off
|
|
66
|
-
class MyContextProviderGen extends
|
|
66
|
+
class MyContextProviderGen extends Context.Service<MyContextProviderGen>()(
|
|
67
67
|
"MyContextProviderGen",
|
|
68
68
|
{
|
|
69
69
|
make: Effect.gen(function*() {
|
package/test/controller.test.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
|
3
3
|
import { type MakeContext, type MakeErrors, makeRouter } from "@effect-app/infra/api/routing"
|
|
4
4
|
import { expect, expectTypeOf, it } from "@effect/vitest"
|
|
5
|
-
import { Effect, Layer, S, Scope
|
|
5
|
+
import { Context, Effect, Layer, S, Scope } from "effect-app"
|
|
6
6
|
import { InvalidStateError, makeRpcClient, UnauthorizedError } from "effect-app/client"
|
|
7
7
|
import { DefaultGenericMiddlewares } from "effect-app/middleware"
|
|
8
8
|
import * as RpcX from "effect-app/rpc"
|
|
@@ -99,7 +99,7 @@ class MyContextProvider2
|
|
|
99
99
|
|
|
100
100
|
//
|
|
101
101
|
|
|
102
|
-
class Str extends
|
|
102
|
+
class Str extends Context.Service<Str, "str">()("str") {}
|
|
103
103
|
|
|
104
104
|
export class BogusMiddleware extends RpcX.RpcMiddleware.Tag<BogusMiddleware>()("BogusMiddleware") {
|
|
105
105
|
static Default = Layer.make(this, {
|
|
@@ -202,10 +202,13 @@ export const middleware3 = MiddlewareMaker
|
|
|
202
202
|
.middleware(Test)
|
|
203
203
|
.middleware(BogusMiddleware)
|
|
204
204
|
|
|
205
|
-
export const {
|
|
205
|
+
export const { TaggedRequestFor } = makeRpcClient(RequestContextMap)
|
|
206
|
+
const Req = TaggedRequestFor("Something")
|
|
206
207
|
|
|
207
208
|
export class Eff extends Req<Eff>()("Eff", {}, { success: S.Void }) {}
|
|
208
|
-
export class Gen extends Req<Gen>()("Gen", {}
|
|
209
|
+
export class Gen extends Req<Gen>()("Gen", {}) {}
|
|
210
|
+
|
|
211
|
+
expectTypeOf(Eff.error).toEqualTypeOf<typeof Gen.error>()
|
|
209
212
|
|
|
210
213
|
export class DoSomething extends Req<DoSomething>()("DoSomething", {
|
|
211
214
|
id: S.String
|
|
@@ -231,14 +234,14 @@ export class GetSomething extends Req<GetSomething>()("GetSomething", {
|
|
|
231
234
|
|
|
232
235
|
export class GetSomething2 extends Req<GetSomething2>()("GetSomething2", {
|
|
233
236
|
id: S.String
|
|
234
|
-
}, { success: S.
|
|
237
|
+
}, { success: S.FiniteFromString }) {}
|
|
235
238
|
|
|
236
|
-
const Something = { Eff, Gen, DoSomething, GetSomething, GetSomething2
|
|
239
|
+
const Something = { Eff, Gen, DoSomething, GetSomething, GetSomething2 }
|
|
237
240
|
|
|
238
241
|
// const client = ApiClientFactory.makeFor(Layer.empty)(Something)
|
|
239
242
|
// client.pipe(Effect.map(c => c.DoSomething.name))
|
|
240
243
|
|
|
241
|
-
export class SomethingService extends
|
|
244
|
+
export class SomethingService extends Context.Service<SomethingService>()(
|
|
242
245
|
"SomethingService",
|
|
243
246
|
{
|
|
244
247
|
make: Effect.gen(function*() {
|
|
@@ -258,7 +261,7 @@ declare const a: {
|
|
|
258
261
|
(opt: { b: 3 }): void
|
|
259
262
|
}
|
|
260
263
|
|
|
261
|
-
export class SomethingRepo extends
|
|
264
|
+
export class SomethingRepo extends Context.Service<SomethingRepo>()(
|
|
262
265
|
"SomethingRepo",
|
|
263
266
|
{
|
|
264
267
|
make: Effect.gen(function*() {
|
|
@@ -271,7 +274,7 @@ export class SomethingRepo extends ServiceMap.Service<SomethingRepo>()(
|
|
|
271
274
|
static Default = Layer.effect(this, this.make).pipe(Layer.provide(SomethingService.Default))
|
|
272
275
|
}
|
|
273
276
|
|
|
274
|
-
export class SomethingService2 extends
|
|
277
|
+
export class SomethingService2 extends Context.Service<SomethingService2>()(
|
|
275
278
|
"SomethingService2",
|
|
276
279
|
{
|
|
277
280
|
make: Effect.gen(function*() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contextProvider.test.d.ts","sourceRoot":"","sources":["../contextProvider.test.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"contextProvider.test.d.ts","sourceRoot":"","sources":["../contextProvider.test.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAE1D,OAAO,EAAE,YAAY,EAAE,IAAI,EAAY,WAAW,EAAE,MAAM,eAAe,CAAA;AAkFzE,eAAO,MAAM,mBAAmB;;CAkB9B,CAAA;AACF,eAAO,MAAM,sBAAsB;;CAkBjC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"controller.test.d.ts","sourceRoot":"","sources":["../controller.test.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAc,MAAM,+BAA+B,CAAA;AAE7F,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"controller.test.d.ts","sourceRoot":"","sources":["../controller.test.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAc,MAAM,+BAA+B,CAAA;AAE7F,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAC7D,OAAO,EAAoC,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAEvF,OAAO,KAAK,IAAI,MAAM,gBAAgB,CAAA;AAGtC,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAG3D,OAAO,EAAE,cAAc,EAAsB,YAAY,EAAqB,YAAY,EAAoB,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,IAAI,EAAY,MAAM,eAAe,CAAA;;cAuE/G,QAAQ;;AADzE,cAAM,kBACJ,SAAQ,uBAA0F;IAElG,MAAM,CAAC,OAAO,uDAUZ;CACH;;AAID,cAAM,GAAI,SAAQ,QAAoC;CAAG;;;;;AAEzD,qBAAa,eAAgB,SAAQ,oBAA4D;IAC/F,MAAM,CAAC,OAAO,2CAUZ;CACH;AAkFD,eAAO,MAAM,WAAW;;;;;;;;;;YAKM,CAAA;AAE9B,eAAO,MAAQ,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAqC,CAAA;;;;;;;;;;;;;;;;;;;AAGpE,qBAAa,GAAI,SAAQ,QAA0C;CAAG;;;;;;;;;;;;;;;AACtE,qBAAa,GAAI,SAAQ,QAAqB;CAAG;;;;;;;;;;;;;;;;;;;;;AAIjD,qBAAa,WAAY,SAAQ,gBAEV;CAAG;;;;;;;;;;;;;;;;;;;;;AAgB1B,qBAAa,YAAa,SAAQ,iBAET;CAAG;;;;;;;;;;;;;;;;;;;;;AAE5B,qBAAa,aAAc,SAAQ,kBAEA;CAAG;;;;;;;;AAOtC,qBAAa,gBAAiB,SAAQ,qBASrC;IACC,MAAM,CAAC,OAAO,8CAAgC;CAC/C;;;;;;;;AASD,qBAAa,aAAc,SAAQ,kBASlC;IACC,MAAM,CAAC,OAAO,2CAA8E;CAC7F;;;;;;;;AAED,qBAAa,iBAAkB,SAAQ,sBAOtC;IACC,MAAM,CAAC,OAAO,+CAAgC;CAC/C;AAED,eAAO,MAAQ,MAAM;SApLd,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoLe,QAAQ;;0FAE9B,CAAA;AAED,eAAO,MAAM,EAAE;;;;;aAxLR,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0LP,CAAA"}
|
package/test/dist/fixtures.d.ts
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
import { Effect, Layer, S
|
|
1
|
+
import { Context, Effect, Layer, S } from "effect-app";
|
|
2
2
|
import { NotLoggedInError, UnauthorizedError } from "effect-app/client";
|
|
3
3
|
import { RpcContextMap, RpcX } from "effect-app/rpc";
|
|
4
4
|
declare const UserProfile_base: S.EnhancedClass<UserProfile, S.Struct<{
|
|
5
5
|
id: S.String;
|
|
6
6
|
roles: S.$Array<S.String> & {
|
|
7
|
-
withDefault: S.withConstructorDefault<S.$Array<S.String
|
|
7
|
+
withDefault: S.withConstructorDefault<S.$Array<S.String>>;
|
|
8
|
+
withDecodingDefaultType: S.withDecodingDefaultType<S.$Array<S.String>>;
|
|
8
9
|
};
|
|
9
|
-
}>, {}> &
|
|
10
|
+
}>, {}> & Context.Opaque<UserProfile, UserProfile>;
|
|
10
11
|
export declare class UserProfile extends UserProfile_base {
|
|
11
12
|
}
|
|
12
|
-
declare const Some_base:
|
|
13
|
+
declare const Some_base: Context.OpaqueClass<Some, "Some", {
|
|
13
14
|
a: number;
|
|
14
15
|
}> & {
|
|
15
16
|
readonly make: Effect.Effect<{
|
|
@@ -18,7 +19,7 @@ declare const Some_base: ServiceMap.OpaqueClass<Some, "Some", {
|
|
|
18
19
|
};
|
|
19
20
|
export declare class Some extends Some_base {
|
|
20
21
|
}
|
|
21
|
-
declare const SomeElse_base:
|
|
22
|
+
declare const SomeElse_base: Context.OpaqueClass<SomeElse, "SomeElse", {
|
|
22
23
|
b: number;
|
|
23
24
|
}> & {
|
|
24
25
|
readonly make: Effect.Effect<{
|
|
@@ -27,7 +28,7 @@ declare const SomeElse_base: ServiceMap.OpaqueClass<SomeElse, "SomeElse", {
|
|
|
27
28
|
};
|
|
28
29
|
export declare class SomeElse extends SomeElse_base {
|
|
29
30
|
}
|
|
30
|
-
declare const SomeService_base:
|
|
31
|
+
declare const SomeService_base: Context.OpaqueClass<SomeService, "SomeService", {
|
|
31
32
|
a: number;
|
|
32
33
|
}> & {
|
|
33
34
|
readonly make: Effect.Effect<{
|
|
@@ -101,10 +102,19 @@ declare const Test_base: RpcX.RpcMiddleware.TagClass<Test, "Test", {
|
|
|
101
102
|
export declare class Test extends Test_base {
|
|
102
103
|
}
|
|
103
104
|
export declare const TestLive: Layer.Layer<Test, never, never>;
|
|
104
|
-
declare const
|
|
105
|
+
declare const Counter_base: Context.OpaqueClass<Counter, "Counter", {
|
|
106
|
+
a: number;
|
|
107
|
+
}> & {
|
|
108
|
+
readonly make: Effect.Effect<{
|
|
109
|
+
a: number;
|
|
110
|
+
}, never, never>;
|
|
111
|
+
};
|
|
112
|
+
export declare class Counter extends Counter_base {
|
|
113
|
+
}
|
|
114
|
+
declare const CustomError1_base: import("effect/Schema").Class<CustomError1, S.TaggedStruct<"CustomError1", {}>, import("effect/Cause").YieldableError>;
|
|
105
115
|
export declare class CustomError1 extends CustomError1_base {
|
|
106
116
|
}
|
|
107
|
-
declare const CustomError2_base:
|
|
117
|
+
declare const CustomError2_base: import("effect/Schema").Class<CustomError2, S.TaggedStruct<"CustomError2", {}>, import("effect/Cause").YieldableError>;
|
|
108
118
|
export declare class CustomError2 extends CustomError2_base {
|
|
109
119
|
}
|
|
110
120
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../fixtures.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAS,
|
|
1
|
+
{"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../fixtures.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAS,MAAM,YAAY,CAAA;AAC7D,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACvE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;;;;;;;;AAGpD,qBAAa,WAAY,SAAQ,gBAKhC;CACA;;;;;;;;AAED,qBAAa,IAAK,SAAQ,SAAkE;CAAG;;;;;;;;AAC/F,qBAAa,QAAS,SAAQ,aAA0E;CAAG;;;;;;;;AAE3G,qBAAa,WAAY,SAAQ,gBAAuE;IACtG,MAAM,CAAC,QAAQ,CAAC,OAAO,yCAA0B;CAClD;;cAGsF,IAAI;;AAA3F,qBAAa,cAAe,SAAQ,mBAA8E;CACjH;AAED,eAAO,MAAM,kBAAkB,2CAM9B,CAAA;;cAGgE,QAAQ;;AADzE,qBAAa,kBACX,SAAQ,uBAA0F;CAClG;AAEF,eAAO,MAAM,sBAAsB,+CAUlC,CAAA;;;;;;;;;;;;;;;;;;;;;;;;AAED,qBAAa,iBAAkB,SAAQ,sBAIrC;CAAG;;;;cAEkF,QAAQ;;AAA/F,qBAAa,cAAe,SAAQ,mBAElC;CAAG;AAEL,eAAO,MAAM,kBAAkB,2CAyB9B,CAAA;;;;;;;;AAED,qBAAa,YAAa,SAAQ,iBAKhC;CAAG;AAEL,eAAO,MAAM,gBAAgB,+CAuB5B,CAAA;;;;;;;AAED,qBAAa,IAAK,SAAQ,SAExB;CAAG;AAEL,eAAO,MAAM,QAAQ,iCAOpB,CAAA;;;;;;;;AAED,qBAAa,OAAQ,SAAQ,YAAwE;CAAG;;AAExG,qBAAa,YAAa,SAAQ,iBAAoD;CAAG;;AACzF,qBAAa,YAAa,SAAQ,iBAAoD;CAAG"}
|
package/test/dist/fixtures.js
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import { Effect, Layer, S, Scope
|
|
1
|
+
import { Context, Effect, Layer, S, Scope } from "effect-app";
|
|
2
2
|
import { NotLoggedInError, UnauthorizedError } from "effect-app/client";
|
|
3
3
|
import { RpcContextMap, RpcX } from "effect-app/rpc";
|
|
4
|
-
import {
|
|
5
|
-
export class UserProfile extends
|
|
4
|
+
import { TaggedErrorClass } from "effect-app/Schema";
|
|
5
|
+
export class UserProfile extends Context.assignTag("UserProfile")(S.Class("UserProfile")({
|
|
6
6
|
id: S.String,
|
|
7
7
|
roles: S.Array(S.String)
|
|
8
8
|
})) {
|
|
9
9
|
}
|
|
10
|
-
export class Some extends
|
|
10
|
+
export class Some extends Context.Opaque()("Some", { make: Effect.succeed({ a: 1 }) }) {
|
|
11
11
|
}
|
|
12
|
-
export class SomeElse extends
|
|
12
|
+
export class SomeElse extends Context.Opaque()("SomeElse", { make: Effect.succeed({ b: 2 }) }) {
|
|
13
13
|
}
|
|
14
14
|
const MakeSomeService = Effect.succeed({ a: 1 });
|
|
15
|
-
export class SomeService extends
|
|
15
|
+
export class SomeService extends Context.Opaque()("SomeService", { make: MakeSomeService }) {
|
|
16
16
|
static Default = this.toLayer(this.make);
|
|
17
17
|
}
|
|
18
18
|
// functionally equivalent to the one above
|
|
@@ -90,8 +90,10 @@ export const TestLive = Layer.effect(Test, Effect.gen(function* () {
|
|
|
90
90
|
return yield* effect;
|
|
91
91
|
});
|
|
92
92
|
}));
|
|
93
|
-
export class
|
|
93
|
+
export class Counter extends Context.Opaque()("Counter", { make: Effect.succeed({ a: 0 }) }) {
|
|
94
94
|
}
|
|
95
|
-
export class
|
|
95
|
+
export class CustomError1 extends TaggedErrorClass()("CustomError1", {}) {
|
|
96
96
|
}
|
|
97
|
-
|
|
97
|
+
export class CustomError2 extends TaggedErrorClass()("CustomError2", {}) {
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9maXh0dXJlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUM3RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUN2RSxPQUFPLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQ3BELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFBO0FBRXBELE1BQU0sT0FBTyxXQUFZLFNBQVEsT0FBTyxDQUFDLFNBQVMsQ0FBMkIsYUFBYSxDQUFDLENBQ3pGLENBQUMsQ0FBQyxLQUFLLENBQWMsYUFBYSxDQUFDLENBQUM7SUFDbEMsRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNO0lBQ1osS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztDQUN6QixDQUFDLENBQ0g7Q0FDQTtBQUVELE1BQU0sT0FBTyxJQUFLLFNBQVEsT0FBTyxDQUFDLE1BQU0sRUFBUSxDQUFDLE1BQU0sRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUFHO0FBQy9GLE1BQU0sT0FBTyxRQUFTLFNBQVEsT0FBTyxDQUFDLE1BQU0sRUFBWSxDQUFDLFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUFHO0FBQzNHLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQTtB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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.test.d.ts","sourceRoot":"","sources":["../query.test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"query.test.d.ts","sourceRoot":"","sources":["../query.test.ts"],"names":[],"mappings":"AAIA,OAAO,EAA8C,CAAC,EAAU,MAAM,YAAY,CAAA;;;;;;;;;;;;;;;;;AAalF,qBAAa,SAAU,SAAQ,cAM7B;CAAG;AACL,MAAM,CAAC,OAAO,WAAW,SAAS,CAAC;IAEjC,UAAiB,OAAQ,SAAQ,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,SAAS,CAAC;KAAG;CACtE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rawQuery.test.d.ts","sourceRoot":"","sources":["../rawQuery.test.ts"],"names":[],"mappings":"AACA,OAAO,EAAsC,cAAc,
|
|
1
|
+
{"version":3,"file":"rawQuery.test.d.ts","sourceRoot":"","sources":["../rawQuery.test.ts"],"names":[],"mappings":"AACA,OAAO,EAAsC,cAAc,EAA4C,MAAM,YAAY,CAAA;AAQzH,eAAO,MAAM,EAAE,6CAWb,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requires.test.d.ts","sourceRoot":"","sources":["../requires.test.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"requires.test.d.ts","sourceRoot":"","sources":["../requires.test.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,KAAK,EAAU,CAAC,EAAE,MAAM,YAAY,CAAA;AAC9D,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAEvE,OAAO,KAAK,IAAI,MAAM,gBAAgB,CAAA;AAKtC,OAAO,EAAE,cAAc,EAAyC,YAAY,EAAoB,IAAI,EAAE,kBAAkB,EAA0B,cAAc,EAAmC,IAAI,EAAY,MAAM,eAAe,CAAA;;cAGnK,IAAI;;AADzE,qBAAa,sBACX,SAAQ,2BAA8F;IAEtG,MAAM,CAAC,OAAO,oDASZ;CACH;AAqBD,eAAO,MAAM,eAAe;;;;;;;;;;SAMK,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpc-multi-middleware.test.d.ts","sourceRoot":"","sources":["../rpc-multi-middleware.test.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmB,KAAK,
|
|
1
|
+
{"version":3,"file":"rpc-multi-middleware.test.d.ts","sourceRoot":"","sources":["../rpc-multi-middleware.test.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmB,KAAK,EAAe,MAAM,QAAQ,CAAA;AAC5D,OAAO,EAAW,CAAC,EAAE,MAAM,YAAY,CAAA;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAGpD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAGhD,OAAO,EAAE,GAAG,EAAE,SAAS,EAAkD,MAAM,qBAAqB,CAAA;AAGpG,OAAO,EAAE,cAAc,EAAyC,YAAY,EAA0B,kBAAkB,EAA0B,cAAc,EAAmC,IAAI,EAAY,WAAW,EAAE,MAAM,eAAe,CAAA;AAErP,QAAA,MAAM,UAAU;;;;;;;;;;oCAGmB,CAAA;AAGnC,qBAAa,oBAAqB,SAAQ,UAAU;CAAG;;;;;;;;;;;;AAEvD,cAAM,UAAW,SAAQ,eAKkB;CACzC;AAsCF,eAAO,MAAM,OAAO,iEAMhB,CAAA;AAgBJ,eAAO,MAAM,YAAY,2HAItB,CAAA;AAEH,eAAO,MAAM,YAAY,yIAgB2B,CAAA"}
|