Skip to content

Commit d615e6e

Browse files
authored
adjust ExecutionPlan provides & requirements types (#4937)
1 parent 71174d0 commit d615e6e

File tree

2 files changed

+36
-25
lines changed

2 files changed

+36
-25
lines changed

.changeset/gold-worlds-throw.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"effect": patch
3+
---
4+
5+
adjust ExecutionPlan `provides` & `requirements` types

packages/effect/src/ExecutionPlan.ts

Lines changed: 31 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -170,10 +170,16 @@ export type TypesBase = {
170170
export const make = <const Steps extends NonEmptyReadonlyArray<make.Step>>(
171171
...steps: Steps & { [K in keyof Steps]: make.Step }
172172
): ExecutionPlan<{
173-
provides: make.StepProvides<Steps[number]>
173+
provides: make.StepProvides<Steps>
174174
input: make.StepInput<Steps>
175-
error: make.StepError<Steps[number]>
176-
requirements: make.StepRequirements<Steps[number]>
175+
error:
176+
| (Steps[number]["provide"] extends Context.Context<infer _P> | Layer.Layer<infer _P, infer E, infer _R> ? E
177+
: never)
178+
| (Steps[number]["while"] extends (input: infer _I) => Effect.Effect<infer _A, infer _E, infer _R> ? _E : never)
179+
requirements:
180+
| (Steps[number]["provide"] extends Layer.Layer<infer _A, infer _E, infer R> ? R : never)
181+
| (Steps[number]["while"] extends (input: infer _I) => Effect.Effect<infer _A, infer _E, infer R> ? R : never)
182+
| (Steps[number]["schedule"] extends Schedule.Schedule<infer _O, infer _I, infer R> ? R : never)
177183
}> =>
178184
makeProto(steps.map((options, i) => {
179185
if (options.attempts && options.attempts < 1) {
@@ -210,11 +216,28 @@ export declare namespace make {
210216
}
211217

212218
/**
213-
* @since 3.16.0
219+
* @since 3.16.1
214220
* @experimental
215221
*/
216-
export type StepProvides<S extends Step> = S["provide"] extends
217-
Context.Context<infer P> | Layer.Layer<infer P, infer _E, infer _R> ? P : never
222+
export type StepProvides<Steps extends ReadonlyArray<any>, Out = unknown> = Steps extends
223+
readonly [infer Step, ...infer Rest] ? StepProvides<
224+
Rest,
225+
& Out
226+
& (
227+
(Step extends { readonly provide: Context.Context<infer P> | Layer.Layer<infer P, infer _E, infer _R> } ? P
228+
: unknown)
229+
)
230+
> :
231+
Out
232+
233+
/**
234+
* @since 3.16.1
235+
* @experimental
236+
*/
237+
export type PlanProvides<Plans extends ReadonlyArray<any>, Out = unknown> = Plans extends
238+
readonly [infer Plan, ...infer Rest] ?
239+
PlanProvides<Rest, Out & (Plan extends ExecutionPlan<infer T> ? T["provides"] : unknown)> :
240+
Out
218241

219242
/**
220243
* @since 3.16.0
@@ -237,25 +260,8 @@ export declare namespace make {
237260
*/
238261
export type PlanInput<Plans extends ReadonlyArray<any>, Out = unknown> = Plans extends
239262
readonly [infer Plan, ...infer Rest] ?
240-
PlanInput<Rest, Out & (Plan extends ExecutionPlan<infer T> ? T["input"] : never)> :
263+
PlanInput<Rest, Out & (Plan extends ExecutionPlan<infer T> ? T["input"] : unknown)> :
241264
Out
242-
243-
/**
244-
* @since 3.16.0
245-
* @experimental
246-
*/
247-
export type StepError<S extends Step> =
248-
| (S["provide"] extends Context.Context<infer _P> | Layer.Layer<infer _P, infer E, infer _R> ? E : never)
249-
| (S["while"] extends (input: infer _I) => Effect.Effect<infer _A, infer _E, infer _R> ? _E : never)
250-
251-
/**
252-
* @since 3.16.0
253-
* @experimental
254-
*/
255-
export type StepRequirements<S extends Step> =
256-
| (S["provide"] extends Layer.Layer<infer _A, infer _E, infer R> ? R : never)
257-
| (S["while"] extends (input: infer _I) => Effect.Effect<infer _A, infer _E, infer R> ? R : never)
258-
| (S["schedule"] extends Schedule.Schedule<infer _O, infer _I, infer R> ? R : never)
259265
}
260266

261267
const Proto: Omit<ExecutionPlan<any>, "steps"> = {
@@ -295,7 +301,7 @@ const makeProto = <Provides, In, PlanE, PlanR>(
295301
export const merge = <const Plans extends NonEmptyReadonlyArray<ExecutionPlan<any>>>(
296302
...plans: Plans
297303
): ExecutionPlan<{
298-
provides: Plans[number] extends ExecutionPlan<infer T> ? T["provides"] : never
304+
provides: make.PlanProvides<Plans>
299305
input: make.PlanInput<Plans>
300306
error: Plans[number] extends ExecutionPlan<infer T> ? T["error"] : never
301307
requirements: Plans[number] extends ExecutionPlan<infer T> ? T["requirements"] : never

0 commit comments

Comments
 (0)