Hyperlinkv0.8.0-beta.28

Hyperlink

Hyperlink.effectFnfunctionsrc/Hyperlink.ts:1406
<Client = Derive>(): <P extends Schema.Top>(
  payload: NarrowedPayload<P, Client>
) => Method<
  P,
  typeof Schema.Void,
  typeof Schema.Never,
  false,
  MethodAnnotations,
  Client
>
<const C extends EffectFnWireConfig>(config: C): Method<
  C["payload"] extends Schema.Struct.Fields
    ? C["payload"]
    : C["payload"] extends Schema.Top
    ? C["payload"]
    : never,
  C["success"] extends Schema.Top ? C["success"] : typeof Schema.Void,
  C["error"] extends Schema.Top ? C["error"] : typeof Schema.Never
>
<P extends Schema.Top>(payload: RequiredPayloadSchema<P>): Method<
  P,
  typeof Schema.Void,
  typeof Schema.Never
>
<P extends Schema.Top, Su extends Schema.Top>(
  payload: RequiredPayloadSchema<P>,
  success: Su
): Method<P, Su, Schema.Never>
<P extends Schema.Top, Su extends Schema.Top, E extends Schema.Top>(
  payload: RequiredPayloadSchema<P>,
  success: Su,
  error: E
): Method<P, Su, E>
<const F extends Schema.Struct.Fields>(
  payload: RequiredPayloadFields<F>
): Method<F, typeof Schema.Void, typeof Schema.Never>
<const F extends Schema.Struct.Fields, Su extends Schema.Top>(
  payload: RequiredPayloadFields<F>,
  success: Su
): Method<F, Su, Schema.Never>
<
  const F extends Schema.Struct.Fields,
  Su extends Schema.Top,
  E extends Schema.Top
>(
  payload: RequiredPayloadFields<F>,
  success: Su,
  error: E
): Method<F, Su, E>

Two-stage effectFn — override the client-facing type with a Client that must narrow the schema-derived shape: effectFn<Client>()(payload). Reshape freely (e.g. add overloads), but a Client that would accept payloads the wire rejects fails to compile (payload resolves to never). For an override that can't be a narrowing (a generic library), use unsafeEffectFn.

Source src/Hyperlink.ts:140667 lines
export function effectFn<Client = Derive>(): <P extends Schema.Top>(
  payload: NarrowedPayload<P, Client>,
) => Method<P, typeof Schema.Void, typeof Schema.Never, false, MethodAnnotations, Client>;
export function effectFn<const C extends EffectFnWireConfig>(
  config: C,
): Method<
  C["payload"] extends Schema.Struct.Fields
    ? C["payload"]
    : C["payload"] extends Schema.Top
      ? C["payload"]
      : never,
  C["success"] extends Schema.Top ? C["success"] : typeof Schema.Void,
  C["error"] extends Schema.Top ? C["error"] : typeof Schema.Never
>;
export function effectFn<P extends Schema.Top>(
  payload: RequiredPayloadSchema<P>,
): Method<P, typeof Schema.Void, typeof Schema.Never>;
export function effectFn<P extends Schema.Top, Su extends Schema.Top>(
  payload: RequiredPayloadSchema<P>,
  success: Su,
): Method<P, Su, Schema.Never>;
export function effectFn<P extends Schema.Top, Su extends Schema.Top, E extends Schema.Top>(
  payload: RequiredPayloadSchema<P>,
  success: Su,
  error: E,
): Method<P, Su, E>;
export function effectFn<const F extends Schema.Struct.Fields>(
  payload: RequiredPayloadFields<F>,
): Method<F, typeof Schema.Void, typeof Schema.Never>;
export function effectFn<const F extends Schema.Struct.Fields, Su extends Schema.Top>(
  payload: RequiredPayloadFields<F>,
  success: Su,
): Method<F, Su, Schema.Never>;
export function effectFn<
  const F extends Schema.Struct.Fields,
  Su extends Schema.Top,
  E extends Schema.Top,
>(
  payload: RequiredPayloadFields<F>,
  success: Su,
  error: E,
): Method<F, Su, E>;
export function effectFn(
  payloadOrConfig?: EffectFnPayload | EffectFnWireConfig,
  success?: Schema.Top,
  error?: Schema.Top,
): AnyMethod | (<P extends Schema.Top>(payload: RequiredPayloadSchema<P>) => AnyMethod) {
  // two-stage form `effectFn<Client>()(payload)` — 0 args on the first call; the client override is
  // type-only (phantom), so the returned builder is identical to the single-stage void/never path.
  if (payloadOrConfig === undefined) {
    return <P extends Schema.Top>(payload: RequiredPayloadSchema<P>): AnyMethod =>
      makeMethod("mutate", assertEffectFnPayload(payload), Schema.Void, Schema.Never, false, {});
  }
  let payload: EffectFnPayload;
  let successSchema: Schema.Top = Schema.Void;
  let errorSchema: Schema.Top = Schema.Never;
  if (isEffectFnWireConfig(payloadOrConfig)) {
    payload = assertEffectFnPayload(payloadOrConfig.payload);
    successSchema = payloadOrConfig.success ?? Schema.Void;
    errorSchema = payloadOrConfig.error ?? Schema.Never;
  } else {
    payload = assertEffectFnPayload(payloadOrConfig);
    successSchema = success ?? Schema.Void;
    errorSchema = error ?? Schema.Never;
  }
  return makeMethod("mutate", payload, successSchema, errorSchema, false, {});
}
Referenced by 6 symbols