@@ -170,10 +170,16 @@ export type TypesBase = {
170170export 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
261267const Proto : Omit < ExecutionPlan < any > , "steps" > = {
@@ -295,7 +301,7 @@ const makeProto = <Provides, In, PlanE, PlanR>(
295301export 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