applySequenceS
coolassassin opened this issue · 0 comments
coolassassin commented
import { Injectable, InjectableValue, UnknownDependencyTree } from '@injectable-ts/core'
import { InjectableDependencyTree } from '@injectable-ts/core/src/injectable'
// eslint-disable-next-line @typescript-eslint/no-explicit-any
type InjectableUnknown = Injectable<UnknownDependencyTree, unknown>
type Sequenced<As extends { [K in keyof As]: InjectableUnknown }> = Injectable<
InjectableDependencyTree<As[keyof As]>,
{ [K in keyof As]: InjectableValue<As[K]> }
>
export const applySequenceS =
<As extends Record<string, InjectableUnknown>>(as: As): Sequenced<As> =>
(context) =>
// eslint-disable-next-line no-restricted-syntax
Object.entries(as).reduce(
(acc, [key, value]) => ({
...acc,
[key]: value(context),
}),
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
{} as ReturnType<Sequenced<As>>
)