| 1179 | } |
| 1180 | |
| 1181 | const mergeAllEffect = <Layers extends [Layer<never, any, any>, ...Array<Layer<never, any, any>>]>( |
| 1182 | layers: Layers, |
| 1183 | memoMap: MemoMap, |
| 1184 | scope: Scope.Scope |
| 1185 | ): Effect< |
| 1186 | Context.Context<{ [k in keyof Layers]: Success<Layers[k]> }[number]>, |
| 1187 | { [k in keyof Layers]: Error<Layers[k]> }[number], |
| 1188 | { [k in keyof Layers]: Services<Layers[k]> }[number] |
| 1189 | > => { |
| 1190 | const parentScope = Scope.forkUnsafe(scope, "parallel") |
| 1191 | return internalEffect.forEach(layers, (layer) => layer.build(memoMap, Scope.forkUnsafe(parentScope, "sequential")), { |
| 1192 | concurrency: layers.length |
| 1193 | }).pipe( |
| 1194 | internalEffect.map((context) => Context.mergeAll(...(context as any))) |
| 1195 | ) |
| 1196 | } |
| 1197 | |
| 1198 | /** |
| 1199 | * Combines all the provided layers concurrently, creating a new layer with |