@effect-app/infra 2.87.1 → 2.88.0

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.
Files changed (40) hide show
  1. package/CHANGELOG.md +19 -1
  2. package/dist/api/routing/middleware/RouterMiddleware.d.ts +4 -22
  3. package/dist/api/routing/middleware/RouterMiddleware.d.ts.map +1 -1
  4. package/dist/api/routing/middleware/RouterMiddleware.js +1 -1
  5. package/dist/api/routing/middleware/RpcMiddleware.d.ts +13 -13
  6. package/dist/api/routing/middleware/RpcMiddleware.d.ts.map +1 -1
  7. package/dist/api/routing/middleware/RpcMiddleware.js +1 -1
  8. package/dist/api/routing/middleware/dynamic-middleware.d.ts +1 -9
  9. package/dist/api/routing/middleware/dynamic-middleware.d.ts.map +1 -1
  10. package/dist/api/routing/middleware/generic-middleware.d.ts +8 -8
  11. package/dist/api/routing/middleware/generic-middleware.d.ts.map +1 -1
  12. package/dist/api/routing/middleware/generic-middleware.js +23 -7
  13. package/dist/api/routing/middleware/middleware-api.d.ts +59 -30
  14. package/dist/api/routing/middleware/middleware-api.d.ts.map +1 -1
  15. package/dist/api/routing/middleware/middleware-api.js +44 -35
  16. package/dist/api/routing/middleware/middleware.d.ts +7 -7
  17. package/dist/api/routing/middleware/middleware.d.ts.map +1 -1
  18. package/dist/api/routing/middleware/middleware.js +5 -5
  19. package/dist/api/routing.d.ts +28 -22
  20. package/dist/api/routing.d.ts.map +1 -1
  21. package/dist/api/routing.js +1 -1
  22. package/package.json +2 -2
  23. package/src/api/routing/middleware/RouterMiddleware.ts +8 -86
  24. package/src/api/routing/middleware/RpcMiddleware.ts +13 -12
  25. package/src/api/routing/middleware/dynamic-middleware.ts +0 -47
  26. package/src/api/routing/middleware/generic-middleware.ts +45 -14
  27. package/src/api/routing/middleware/middleware-api.ts +147 -101
  28. package/src/api/routing/middleware/middleware.ts +5 -5
  29. package/src/api/routing.ts +50 -35
  30. package/test/contextProvider.test.ts +27 -24
  31. package/test/controller.test.ts +45 -23
  32. package/test/dist/contextProvider.test.d.ts.map +1 -1
  33. package/test/dist/controller.test.d.ts.map +1 -1
  34. package/test/dist/fixtures.d.ts +38 -44
  35. package/test/dist/fixtures.d.ts.map +1 -1
  36. package/test/dist/fixtures.js +21 -9
  37. package/test/dist/requires.test.d.ts.map +1 -1
  38. package/test/fixtures.ts +22 -13
  39. package/test/layerUtils.test.ts +4 -2
  40. package/test/requires.test.ts +119 -97
@@ -3,37 +3,22 @@ import { Context, Effect, Layer, type NonEmptyArray, type NonEmptyReadonlyArray
3
3
  import { type RPCContextMap } from "effect-app/client"
4
4
  import { type LayerUtils } from "../../layerUtils.js"
5
5
  import { type GenericMiddlewareMaker, genericMiddlewareMaker } from "./generic-middleware.js"
6
- import { makeRpcEffect, type MiddlewareMakerId, type RPCHandlerFactory } from "./RouterMiddleware.js"
6
+ import { makeRpcEffect, type RPCHandlerFactory } from "./RouterMiddleware.js"
7
7
  import { type AnyDynamic, type RpcDynamic, type TagClassAny } from "./RpcMiddleware.js"
8
8
 
9
- // TODO: don't expect service when it's wrap/never
10
- // perhaps RequestContextMap should be an object, instead of an interface, so that we don't need to provide anything here
11
- export const contextMap =
12
- <RequestContextMap extends Record<string, RPCContextMap.Any>>() =>
13
- <K extends keyof RequestContextMap>(a: K, service: RequestContextMap[K]["service"]) => ({
14
- key: a,
15
- settings: { service } as any as RequestContextMap[typeof a]
16
- })
17
-
18
- export interface MiddlewareM<
19
- RequestContext extends Record<string, RPCContextMap.Any>,
20
- Provided extends keyof RequestContext,
21
- Middlewares extends ReadonlyArray<GenericMiddlewareMaker>,
22
- DynamicMiddlewareProviders,
23
- // out MiddlewareR = never
24
- MiddlewareR = never
25
- > {
26
- middleware<MW extends NonEmptyArray<GenericMiddlewareMaker>>(
27
- ...mw: MW
28
- ): DynamicMiddlewareMakerrsss<
29
- RequestContext,
30
- Provided,
31
- [...Middlewares, ...MW],
32
- DynamicMiddlewareProviders,
33
- GenericMiddlewareMaker.ApplyManyServices<MW, MiddlewareR>
34
- >
35
- }
9
+ // adapter used when setting the dynamic prop on a middleware implementation
10
+ export const contextMap = <
11
+ RequestContextMap extends Record<string, RPCContextMap.Any>,
12
+ Key extends (keyof RequestContextMap) & string
13
+ >(rcm: RequestContextMap, key: Key): RpcDynamic<Key, RequestContextMap[Key]> => ({
14
+ key,
15
+ settings: { service: rcm[key]!["service"] } as RequestContextMap[Key]
16
+ })
36
17
 
18
+ // the following implements sort of builder pattern
19
+ // we support both sideways and upwards elimination of dependencies
20
+
21
+ // it's for dynamic middlewares
37
22
  type GetDependsOnKeys<MW extends GenericMiddlewareMaker> = MW extends { dependsOn: NonEmptyReadonlyArray<TagClassAny> }
38
23
  ? {
39
24
  [K in keyof MW["dependsOn"]]: MW["dependsOn"][K] extends AnyDynamic ? MW["dependsOn"][K]["dynamic"]["key"]
@@ -41,112 +26,171 @@ type GetDependsOnKeys<MW extends GenericMiddlewareMaker> = MW extends { dependsO
41
26
  }[keyof MW["dependsOn"]]
42
27
  : never
43
28
 
44
- export interface MiddlewareDynamic<
45
- RequestContext extends Record<string, RPCContextMap.Any>,
46
- Provided extends keyof RequestContext,
29
+ type FilterInDynamicMiddlewares<
30
+ MWs extends ReadonlyArray<GenericMiddlewareMaker>,
31
+ RequestContextMap extends Record<string, RPCContextMap.Any>
32
+ > = {
33
+ [K in keyof MWs]: MWs[K] extends { dynamic: RpcDynamic<any, RequestContextMap[keyof RequestContextMap]> } ? MWs[K]
34
+ : never
35
+ }
36
+
37
+ type RecursiveHandleMWsSideways<
38
+ MWs,
39
+ R extends {
40
+ rcm: Record<string, RPCContextMap.Any>
41
+ provided: keyof R["rcm"] // that's fine
42
+ middlewares: ReadonlyArray<GenericMiddlewareMaker>
43
+ dmp: any
44
+ middlewareR: any
45
+ }
46
+ > = MWs extends [
47
+ infer F extends GenericMiddlewareMaker,
48
+ ...infer Rest extends ReadonlyArray<GenericMiddlewareMaker>
49
+ ] ? RecursiveHandleMWsSideways<Rest, {
50
+ rcm: R["rcm"]
51
+ // when one dynamic middleware depends on another, subtract the key to enforce the dependency to be provided after
52
+ // (if already provided, it would have to be re-provided anyway, so better to provide it after)
53
+ provided: Exclude<
54
+ R["provided"] | FilterInDynamicMiddlewares<[F], R["rcm"]>[number]["dynamic"]["key"],
55
+ // F is fine here because only dynamic middlewares will have 'dependsOn' prop
56
+ GetDependsOnKeys<F>
57
+ >
58
+ middlewares: [...R["middlewares"], F]
59
+ dmp: [FilterInDynamicMiddlewares<[F], R["rcm"]>[number]] extends [never] ? R["dmp"]
60
+ :
61
+ & R["dmp"]
62
+ & {
63
+ [U in FilterInDynamicMiddlewares<[F], R["rcm"]>[number] as U["dynamic"]["key"]]: U
64
+ }
65
+ middlewareR: GenericMiddlewareMaker.ApplyManyServices<[F], R["middlewareR"]>
66
+ }>
67
+ : R
68
+
69
+ export interface BuildingMiddleware<
70
+ RequestContextMap extends Record<string, RPCContextMap.Any>,
71
+ Provided extends keyof RequestContextMap,
47
72
  Middlewares extends ReadonlyArray<GenericMiddlewareMaker>,
48
73
  DynamicMiddlewareProviders,
49
- out MiddlewareR
74
+ out MiddlewareR extends { _tag: string } = never
50
75
  > {
51
- middleware<MW extends NonEmptyArray<GenericMiddlewareMaker>>(
52
- ...mw: MW
53
- ): MW extends NonEmptyArray<{ dynamic: RpcDynamic<any, RequestContext[keyof RequestContext]> }>
54
- ? DynamicMiddlewareMakerrsss<
55
- RequestContext,
56
- // when one dynamic middleware depends on another, substract the key, to enforce the dependency to be provided after.
57
- Exclude<
58
- Provided | MW[number]["dynamic"]["key"],
59
- { [K in keyof MW]: GetDependsOnKeys<MW[K]> }[number]
60
- >,
61
- [...Middlewares, ...MW],
62
- & DynamicMiddlewareProviders
63
- & {
64
- [U in MW[number] as U["dynamic"]["key"]]: U
65
- },
66
- GenericMiddlewareMaker.ApplyManyServices<MW, MiddlewareR>
67
- >
68
- : DynamicMiddlewareMakerrsss<
69
- RequestContext,
70
- Provided,
71
- [...Middlewares, ...MW],
72
- DynamicMiddlewareProviders,
73
- GenericMiddlewareMaker.ApplyManyServices<MW, MiddlewareR>
76
+ middleware<MWs extends NonEmptyArray<GenericMiddlewareMaker>>(
77
+ ...mw: MWs
78
+ ): RecursiveHandleMWsSideways<MWs, {
79
+ rcm: RequestContextMap
80
+ provided: Provided
81
+ middlewares: Middlewares
82
+ dmp: DynamicMiddlewareProviders
83
+ middlewareR: MiddlewareR
84
+ }> extends infer Res extends {
85
+ rcm: RequestContextMap
86
+ provided: keyof RequestContextMap
87
+ middlewares: ReadonlyArray<GenericMiddlewareMaker>
88
+ dmp: any
89
+ middlewareR: any
90
+ } ? MiddlewaresBuilder<
91
+ Res["rcm"],
92
+ Res["provided"],
93
+ Res["middlewares"],
94
+ Res["dmp"],
95
+ Res["middlewareR"]
74
96
  >
97
+ : never
98
+
99
+ // helps debugging what are the missing requirements (type only)
100
+ missing: {
101
+ missingDynamicMiddlewares: Exclude<keyof RequestContextMap, Provided>
102
+ missingContext: MiddlewareR
103
+ }
75
104
  }
76
105
 
77
- type DynamicMiddlewareMakerrsss<
78
- RequestContext extends Record<string, RPCContextMap.Any>,
79
- Provided extends keyof RequestContext = never,
106
+ export type MiddlewaresBuilder<
107
+ RequestContextMap extends Record<string, RPCContextMap.Any>,
108
+ Provided extends keyof RequestContextMap = never,
80
109
  Middlewares extends ReadonlyArray<GenericMiddlewareMaker> = [],
81
110
  DynamicMiddlewareProviders = unknown,
82
- MiddlewareR = never
83
- > = keyof Omit<RequestContext, Provided> extends never ? [MiddlewareR] extends [never] ?
84
- & ReturnType<
111
+ MiddlewareR extends { _tag: string } = never
112
+ > =
113
+ // keyof Omit<RequestContextMap, Provided> extends never is true when all the dynamic middlewares are provided
114
+ // MiddlewareR is never when all the required services from generic & dynamic middlewares are provided
115
+ keyof Omit<RequestContextMap, Provided> extends never ? [MiddlewareR] extends [never] ? ReturnType<
85
116
  typeof makeMiddlewareBasic<
86
- RequestContext,
117
+ RequestContextMap,
87
118
  Middlewares
88
119
  >
89
120
  >
90
- & MiddlewareM<
91
- RequestContext,
92
- Provided,
93
- Middlewares,
94
- DynamicMiddlewareProviders,
95
- MiddlewareR
96
- >
97
- : MiddlewareM<
98
- RequestContext,
99
- Provided,
100
- Middlewares,
101
- DynamicMiddlewareProviders,
102
- MiddlewareR
103
- >
104
- : MiddlewareDynamic<
105
- RequestContext,
106
- Provided,
107
- Middlewares,
108
- DynamicMiddlewareProviders,
109
- MiddlewareR
110
- >
121
+ : BuildingMiddleware<
122
+ RequestContextMap,
123
+ Provided,
124
+ Middlewares,
125
+ DynamicMiddlewareProviders,
126
+ MiddlewareR
127
+ >
128
+ : BuildingMiddleware<
129
+ RequestContextMap,
130
+ Provided,
131
+ Middlewares,
132
+ DynamicMiddlewareProviders,
133
+ MiddlewareR
134
+ >
111
135
 
112
136
  export const makeMiddleware: <
113
137
  RequestContextMap extends Record<string, RPCContextMap.Any>
114
- >() => DynamicMiddlewareMakerrsss<RequestContextMap> = () => {
138
+ >(rcm: RequestContextMap) => MiddlewaresBuilder<RequestContextMap> = (rcm) => {
115
139
  let allMiddleware: GenericMiddlewareMaker[] = []
116
140
  const it = {
117
141
  middleware: (...middlewares: any[]) => {
118
142
  for (const mw of middlewares) {
143
+ // recall that we run middlewares in reverse order
119
144
  allMiddleware = [mw, ...allMiddleware]
120
145
  }
121
- // TODO: support dynamic and generic intertwined. treat them as one
122
- return Object.assign(makeMiddlewareBasic<any, any>(...allMiddleware), it)
146
+ return allMiddleware.filter((m) => !!m.dynamic).length !== Object.keys(rcm).length
147
+ // for sure, until all the dynamic middlewares are provided it's non sensical to call makeMiddlewareBasic
148
+ ? it
149
+ // actually, we don't know yet if MiddlewareR is never, but we can't easily check it at runtime
150
+ : Object.assign(makeMiddlewareBasic<any, any>(rcm, ...allMiddleware), it)
123
151
  }
124
152
  }
125
153
  return it as any
126
154
  }
127
155
 
128
- export const makeMiddlewareBasic =
156
+ //
157
+ export const MiddlewareMakerTag = "MiddlewareMaker" as const
158
+
159
+ export interface MiddlewareMaker<E> {
160
+ readonly effect: E
161
+ readonly _tag: typeof MiddlewareMakerTag
162
+ }
163
+
164
+ export type MiddlewareMakerId = Pick<MiddlewareMaker<any>, "_tag">
165
+
166
+ export const buildMiddlewareMaker = <E>(eff: E) =>
167
+ ({
168
+ _tag: MiddlewareMakerTag,
169
+ effect: eff
170
+ }) satisfies MiddlewareMaker<E>
171
+
172
+ const makeMiddlewareBasic =
129
173
  // by setting RequestContextMap beforehand, execute contextual typing does not fuck up itself to anys
130
174
  <
131
175
  RequestContextMap extends Record<string, RPCContextMap.Any>,
132
- // RequestContextProviders extends RequestContextMapProvider<RequestContextMap>, // how to resolve the dynamic middleware
133
176
  GenericMiddlewareProviders extends ReadonlyArray<GenericMiddlewareMaker>
134
177
  >(
178
+ _rcm: RequestContextMap,
135
179
  ...make: GenericMiddlewareProviders
136
180
  ) => {
137
181
  const MiddlewareMaker = Context.GenericTag<
138
182
  MiddlewareMakerId,
139
- {
140
- effect: RPCHandlerFactory<
183
+ MiddlewareMaker<
184
+ RPCHandlerFactory<
141
185
  RequestContextMap,
142
186
  GenericMiddlewareMaker.Provided<GenericMiddlewareProviders[number]>
143
187
  >
144
- _tag: "MiddlewareMaker"
145
- }
188
+ >
146
189
  >(
147
- "MiddlewareMaker"
190
+ MiddlewareMakerTag
148
191
  )
149
192
 
193
+ // reverse middlewares and wrap one after the other
150
194
  const middlewares = genericMiddlewareMaker(...make)
151
195
 
152
196
  const l = Layer.scoped(
@@ -154,16 +198,16 @@ export const makeMiddlewareBasic =
154
198
  middlewares
155
199
  .effect
156
200
  .pipe(
157
- Effect.map((generic) => ({
158
- _tag: "MiddlewareMaker" as const,
159
- effect: makeRpcEffect<
201
+ Effect.map((generic) => (buildMiddlewareMaker(
202
+ makeRpcEffect<
160
203
  RequestContextMap,
161
204
  GenericMiddlewareMaker.Provided<GenericMiddlewareProviders[number]>
162
205
  >()(
163
- (schema, next, moduleName) => {
206
+ (schema, handler, moduleName) => {
164
207
  return (payload, headers) =>
165
208
  Effect
166
209
  .gen(function*() {
210
+ // will be propagated to all the wrapped middlewares
167
211
  const basic = {
168
212
  config: schema.config ?? {},
169
213
  payload,
@@ -177,12 +221,12 @@ export const makeMiddlewareBasic =
177
221
  }
178
222
  return yield* generic({
179
223
  ...basic,
180
- next: next(payload, headers) as any
224
+ next: handler(payload, headers) as any
181
225
  })
182
- }) as any // why?
226
+ }) as any // why? because: Type 'SuccessValue' is not assignable to type 'Success<Req>' :P
183
227
  }
184
228
  )
185
- }))
229
+ )))
186
230
  )
187
231
  )
188
232
 
@@ -191,9 +235,11 @@ export const makeMiddlewareBasic =
191
235
  Layer.provide(middlewares.dependencies as any)
192
236
  ) as Layer.Layer<
193
237
  MiddlewareMakerId,
194
- LayerUtils.GetLayersError<typeof middlewares.dependencies>, // what could go wrong when building the dynamic middleware provider
238
+ // what could go wrong when building the dynamic middleware provider
239
+ LayerUtils.GetLayersError<typeof middlewares.dependencies>,
195
240
  LayerUtils.GetLayersContext<typeof middlewares.dependencies>
196
241
  >
197
242
 
243
+ // add to the tag a default implementation
198
244
  return Object.assign(MiddlewareMaker, { Default: middlewareLayer })
199
245
  }
@@ -23,8 +23,8 @@ export class RequestCacheMiddleware extends Tag<RequestCacheMiddleware>()("Reque
23
23
  }) {
24
24
  }
25
25
 
26
- export class ConfigureInterruptibility
27
- extends Tag<ConfigureInterruptibility>()("ConfigureInterruptibility", { wrap: true })({
26
+ export class ConfigureInterruptibilityMiddleware
27
+ extends Tag<ConfigureInterruptibilityMiddleware>()("ConfigureInterruptibilityMiddleware", { wrap: true })({
28
28
  effect: Effect.succeed(({ next }) =>
29
29
  next.pipe(
30
30
  // TODO: make this depend on query/command, and consider if middleware also should be affected. right now it's not.
@@ -35,7 +35,7 @@ export class ConfigureInterruptibility
35
35
  {
36
36
  }
37
37
 
38
- export class MiddlewareLogger extends Tag<MiddlewareLogger>()("MiddlewareLogger", { wrap: true })({
38
+ export class LoggerMiddleware extends Tag<LoggerMiddleware>()("LoggerMiddleware", { wrap: true })({
39
39
  effect: Effect.gen(function*() {
40
40
  const devMode = yield* DevMode
41
41
  return ({ headers, next, payload, rpc }) =>
@@ -98,6 +98,6 @@ export class MiddlewareLogger extends Tag<MiddlewareLogger>()("MiddlewareLogger"
98
98
 
99
99
  export const DefaultGenericMiddlewares = [
100
100
  RequestCacheMiddleware,
101
- ConfigureInterruptibility,
102
- MiddlewareLogger
101
+ ConfigureInterruptibilityMiddleware,
102
+ LoggerMiddleware
103
103
  ] as const
@@ -8,6 +8,7 @@ import { type Array, Effect, Layer, type NonEmptyReadonlyArray, Predicate, S, Sc
8
8
  import type { GetEffectContext, GetEffectError, RPCContextMap } from "effect-app/client/req"
9
9
  import { type HttpHeaders, HttpRouter } from "effect-app/http"
10
10
  import { typedKeysOf, typedValuesOf } from "effect-app/utils"
11
+ import { type Service } from "effect/Effect"
11
12
  import type { Contravariant } from "effect/Types"
12
13
  import { type YieldWrap } from "effect/Utils"
13
14
  import { type LayerUtils } from "./layerUtils.js"
@@ -493,10 +494,16 @@ export const makeRouter = <
493
494
  // Multiple times duplicated the "good" overload, so that errors will only mention the last overload when failing
494
495
  <
495
496
  const Make extends {
496
- dependencies: Array<Layer.Layer.Any>
497
+ dependencies?: Array<Layer.Layer.Any>
497
498
  effect: (match: typeof router3) => Generator<
498
499
  YieldWrap<
499
- Effect<any, any, Make["strict"] extends false ? any : LayerUtils.GetLayersSuccess<Make["dependencies"]>>
500
+ Effect<
501
+ any,
502
+ any,
503
+ Make["strict"] extends false ? any
504
+ : Make extends { dependencies: Array<Layer.Layer.Any> } ? MakeDepsOut<Make>
505
+ : any
506
+ >
500
507
  >,
501
508
  { [K in keyof FilterRequestModules<Resource>]: AnyHandler<Resource[K]> },
502
509
  any
@@ -514,13 +521,13 @@ export const makeRouter = <
514
521
  routes: Layer.Layer<
515
522
  RouterShape<Resource>,
516
523
  | MakeErrors<Make>
517
- | LayerUtils.GetLayersError<Make["dependencies"]>
524
+ | Service.MakeDepsE<Make>
518
525
  | Layer.Error<typeof middleware.Default>,
519
- | LayerUtils.GetLayersContext<Make["dependencies"]>
526
+ | Service.MakeDepsIn<Make>
520
527
  | Layer.Context<typeof middleware.Default>
521
528
  | Exclude<
522
529
  MakeContext<Make>,
523
- LayerUtils.GetLayersSuccess<Make["dependencies"]>
530
+ MakeDepsOut<Make>
524
531
  >
525
532
  >
526
533
 
@@ -529,11 +536,13 @@ export const makeRouter = <
529
536
  }
530
537
  <
531
538
  const Make extends {
532
- dependencies: Array<Layer.Layer.Any>
539
+ dependencies?: Array<Layer.Layer.Any>
533
540
  effect: Effect<
534
541
  { [K in keyof FilterRequestModules<Resource>]: AnyHandler<Resource[K]> },
535
542
  any,
536
- Make["strict"] extends false ? any : LayerUtils.GetLayersSuccess<Make["dependencies"]>
543
+ Make["strict"] extends false ? any
544
+ : Make extends { dependencies: Array<Layer.Layer.Any> } ? MakeDepsOut<Make>
545
+ : any
537
546
  >
538
547
  strict?: boolean
539
548
  /** @deprecated */
@@ -547,13 +556,13 @@ export const makeRouter = <
547
556
  routes: Layer.Layer<
548
557
  RouterShape<Resource>,
549
558
  | MakeErrors<Make>
550
- | LayerUtils.GetLayersError<Make["dependencies"]>
559
+ | Service.MakeDepsE<Make>
551
560
  | Layer.Error<typeof middleware.Default>,
552
- | LayerUtils.GetLayersContext<Make["dependencies"]>
561
+ | Service.MakeDepsIn<Make>
553
562
  | Layer.Context<typeof middleware.Default>
554
563
  | Exclude<
555
564
  MakeContext<Make>,
556
- LayerUtils.GetLayersSuccess<Make["dependencies"]>
565
+ MakeDepsOut<Make>
557
566
  >
558
567
  >
559
568
 
@@ -562,11 +571,11 @@ export const makeRouter = <
562
571
  }
563
572
  <
564
573
  const Make extends {
565
- dependencies: Array<Layer.Layer.Any>
574
+ dependencies?: Array<Layer.Layer.Any>
566
575
  effect: Effect<
567
576
  { [K in keyof FilterRequestModules<Resource>]: AnyHandler<Resource[K]> },
568
577
  any,
569
- Make["strict"] extends false ? any : LayerUtils.GetLayersSuccess<Make["dependencies"]>
578
+ Make["strict"] extends false ? any : MakeDepsOut<Make>
570
579
  >
571
580
  strict?: boolean
572
581
  /** @deprecated */
@@ -580,13 +589,13 @@ export const makeRouter = <
580
589
  routes: Layer.Layer<
581
590
  RouterShape<Resource>,
582
591
  | MakeErrors<Make>
583
- | LayerUtils.GetLayersError<Make["dependencies"]>
592
+ | Service.MakeDepsE<Make>
584
593
  | Layer.Error<typeof middleware.Default>,
585
- | LayerUtils.GetLayersContext<Make["dependencies"]>
594
+ | Service.MakeDepsIn<Make>
586
595
  | Layer.Context<typeof middleware.Default>
587
596
  | Exclude<
588
597
  MakeContext<Make>,
589
- LayerUtils.GetLayersSuccess<Make["dependencies"]>
598
+ MakeDepsOut<Make>
590
599
  >
591
600
  >
592
601
 
@@ -595,11 +604,11 @@ export const makeRouter = <
595
604
  }
596
605
  <
597
606
  const Make extends {
598
- dependencies: Array<Layer.Layer.Any>
607
+ dependencies?: Array<Layer.Layer.Any>
599
608
  effect: Effect<
600
609
  { [K in keyof FilterRequestModules<Resource>]: AnyHandler<Resource[K]> },
601
610
  any,
602
- Make["strict"] extends false ? any : LayerUtils.GetLayersSuccess<Make["dependencies"]>
611
+ Make["strict"] extends false ? any : MakeDepsOut<Make>
603
612
  >
604
613
  strict?: boolean
605
614
  /** @deprecated */
@@ -613,13 +622,13 @@ export const makeRouter = <
613
622
  routes: Layer.Layer<
614
623
  RouterShape<Resource>,
615
624
  | MakeErrors<Make>
616
- | LayerUtils.GetLayersError<Make["dependencies"]>
625
+ | Service.MakeDepsE<Make>
617
626
  | Layer.Error<typeof middleware.Default>,
618
- | LayerUtils.GetLayersContext<Make["dependencies"]>
627
+ | Service.MakeDepsIn<Make>
619
628
  | Layer.Context<typeof middleware.Default>
620
629
  | Exclude<
621
630
  MakeContext<Make>,
622
- LayerUtils.GetLayersSuccess<Make["dependencies"]>
631
+ MakeDepsOut<Make>
623
632
  >
624
633
  >
625
634
 
@@ -628,11 +637,11 @@ export const makeRouter = <
628
637
  }
629
638
  <
630
639
  const Make extends {
631
- dependencies: Array<Layer.Layer.Any>
640
+ dependencies?: Array<Layer.Layer.Any>
632
641
  effect: Effect<
633
642
  { [K in keyof FilterRequestModules<Resource>]: AnyHandler<Resource[K]> },
634
643
  any,
635
- LayerUtils.GetLayersSuccess<Make["dependencies"]>
644
+ MakeDepsOut<Make>
636
645
  >
637
646
  strict?: boolean
638
647
  /** @deprecated */
@@ -646,13 +655,13 @@ export const makeRouter = <
646
655
  routes: Layer.Layer<
647
656
  RouterShape<Resource>,
648
657
  | MakeErrors<Make>
649
- | LayerUtils.GetLayersError<Make["dependencies"]>
658
+ | Service.MakeDepsE<Make>
650
659
  | Layer.Error<typeof middleware.Default>,
651
- | LayerUtils.GetLayersContext<Make["dependencies"]>
660
+ | Service.MakeDepsIn<Make>
652
661
  | Layer.Context<typeof middleware.Default>
653
662
  | Exclude<
654
663
  MakeContext<Make>,
655
- LayerUtils.GetLayersSuccess<Make["dependencies"]>
664
+ MakeDepsOut<Make>
656
665
  >
657
666
  >
658
667
 
@@ -661,11 +670,11 @@ export const makeRouter = <
661
670
  }
662
671
  <
663
672
  const Make extends {
664
- dependencies: Array<Layer.Layer.Any>
673
+ dependencies?: Array<Layer.Layer.Any>
665
674
  effect: Effect<
666
675
  { [K in keyof FilterRequestModules<Resource>]: AnyHandler<Resource[K]> },
667
676
  any,
668
- LayerUtils.GetLayersSuccess<Make["dependencies"]>
677
+ MakeDepsOut<Make>
669
678
  >
670
679
  strict?: boolean
671
680
  }
@@ -677,13 +686,13 @@ export const makeRouter = <
677
686
  routes: Layer.Layer<
678
687
  RouterShape<Resource>,
679
688
  | MakeErrors<Make>
680
- | LayerUtils.GetLayersError<Make["dependencies"]>
689
+ | Service.MakeDepsE<Make>
681
690
  | Layer.Error<typeof middleware.Default>,
682
- | LayerUtils.GetLayersContext<Make["dependencies"]>
691
+ | Service.MakeDepsIn<Make>
683
692
  | Layer.Context<typeof middleware.Default>
684
693
  | Exclude<
685
694
  MakeContext<Make>,
686
- LayerUtils.GetLayersSuccess<Make["dependencies"]>
695
+ MakeDepsOut<Make>
687
696
  >
688
697
  >
689
698
 
@@ -692,10 +701,16 @@ export const makeRouter = <
692
701
  }
693
702
  <
694
703
  const Make extends {
695
- dependencies: Array<Layer.Layer.Any>
704
+ dependencies?: Array<Layer.Layer.Any>
696
705
  effect: (match: typeof router3) => Generator<
697
706
  YieldWrap<
698
- Effect<any, any, Make["strict"] extends false ? any : LayerUtils.GetLayersSuccess<Make["dependencies"]>>
707
+ Effect<
708
+ any,
709
+ any,
710
+ Make["strict"] extends false ? any
711
+ : Make extends { dependencies: Array<Layer.Layer.Any> } ? MakeDepsOut<Make>
712
+ : any
713
+ >
699
714
  >,
700
715
  { [K in keyof FilterRequestModules<Resource>]: AnyHandler<Resource[K]> },
701
716
  any
@@ -711,13 +726,13 @@ export const makeRouter = <
711
726
  routes: Layer.Layer<
712
727
  RouterShape<Resource>,
713
728
  | MakeErrors<Make>
714
- | LayerUtils.GetLayersError<Make["dependencies"]>
729
+ | Service.MakeDepsE<Make>
715
730
  | Layer.Error<typeof middleware.Default>,
716
- | LayerUtils.GetLayersContext<Make["dependencies"]>
731
+ | Service.MakeDepsIn<Make>
717
732
  | Layer.Context<typeof middleware.Default>
718
733
  | Exclude<
719
734
  MakeContext<Make>,
720
- LayerUtils.GetLayersSuccess<Make["dependencies"]>
735
+ MakeDepsOut<Make>
721
736
  >
722
737
  >
723
738