Hyperlinkv0.8.0-beta.28

Hyperlink

Hyperlink.WithRequirementtypesrc/Hyperlink.ts:1214
WithRequirement<T, Req>

Add Req to the requirement channel of every Effect method in an impl shape — the inverse of ProvidedContext, and a parameterized cousin of Store.AddStorageReq. Use it to annotate a pre-provide impl (each worker method still carrying its requirement Req) so every method's destructured params still get their contextual types from the spec, before provideContext strips Req back off to yield the ImplOf shape. A method (...a) => Effect<S, E, R>(...a) => Effect<S, E, R | Req>; a bare Effect<S, E, R>Effect<S, E, R | Req>; a Subscribable / Stream member passes through untouched; a nested group recurses.

Source src/Hyperlink.ts:121413 lines
export type WithRequirement<T, Req> = T extends Subscribable<infer A>
  ? Subscribable<A>
  : T extends Stream.Stream<infer A, infer E, infer R>
    ? Stream.Stream<A, E, R>
    : T extends (...args: infer Args) => Effect.Effect<infer S, infer E, infer R>
      ? (...args: Args) => Effect.Effect<S, E, R | Req>
      : T extends Effect.Effect<infer S, infer E, infer R>
        ? Effect.Effect<S, E, R | Req>
        : T extends (...args: ReadonlyArray<never>) => unknown
          ? T
          : T extends object
            ? { readonly [K in keyof T]: WithRequirement<T[K], Req> }
            : T;
Referenced by 2 symbols