diff --git a/src/pipeline.ts b/src/pipeline.ts index 650eafe..dc0e62d 100644 --- a/src/pipeline.ts +++ b/src/pipeline.ts @@ -5,16 +5,16 @@ type PolicyTuple

= [policy: P, opts?: InferPolicyOpts /** Infer opts from the policy. */ type InferPolicyOpts

= P extends Policy ? Opts : never; -/** Helper type for proper type inference of PolicyTuples in the pipeline. */ +/** Helper type for proper type inference of PolicyTuples. */ // https://stackoverflow.com/a/75806165 // https://stackoverflow.com/a/54608401 -type PolicySpread = { +type Policies = { [K in keyof T]: PolicyTuple | Policy; }; /** Processes messages through multiple policies, bailing early on rejection. */ -async function pipeline(msg: InputMessage, policies: [...PolicySpread]): Promise { - for (const item of policies) { +async function pipeline(msg: InputMessage, policies: [...Policies]): Promise { + for (const item of policies as (Policy | PolicyTuple)[]) { const [policy, opts] = toTuple(item); const result = await policy(msg, opts); if (result.action !== 'accept') {