Hyperlinkv0.8.0-beta.28

RunHyperlink

RunHyperlink.Serviceconstsrc/RunHyperlink.ts:928
<Self>(): <const Name extends string, I extends Schema.Top = Schema.Void, A extends Schema.Top = Schema.Void, E extends Schema.Top = Schema.Never, R = never>(name: Name, config: RunHyperlinkServiceConfig<I, A, E, R>) => Hyperlink.HyperlinkTag<Self, RunInstanceSpec<I, A, E>, RunHyperlink<PrettifyPayload<I['Type']>, Schema.Schema<out T>.Type<A>, Schema.Schema.Type<E>, never>> & { readonly run: RunHyperlinkStaticRun<I, A, E, Self>; } & { defaultSpec: { error: E; payload: I; success: A; effect: RunHyperlinkServiceEffect<I, A, E, R>; concurrency?: number; name: Name; }; configure: (patch: ConfigPatch<RunHyperlinkLayerConfig<Schema.Schema.Type<I>, Schema.Schema.Type<A>, Schema.Schema.Type<E>, R>>) => Layer.Layer<never, never, never>; wrapGate: (fn: (previous: RunHyperlinkLayerConfig<Schema.Schema.Type<I>, Schema.Schema.Type<A>, Schema.Schema.Type<E>, R>['effect']) => RunHyperlinkLayerConfig<Schema.Schema.Type<I>, Schema.Schema.Type<A>, Schema.Schema.Type<E>, R>['effect']) => Layer.Layer<never, never, never>; layer: Layer.Layer<Store.Storage | Self | Hyperlink.Local<Self>, never, R>; }

Class factory: tag + wire schemas + baked-in .layer + .configure.

constructors
export const Service = <Self>() => {
  function build<
    const Name extends string,
    I extends Schema.Top = typeof Schema.Void,
    A extends Schema.Top = typeof Schema.Void,
    E extends Schema.Top = typeof Schema.Never,
    R = never,
  >(
    name: Name,
    config: RunHyperlinkServiceConfig<I, A, E, R>,
  ) {
    const wire = resolveRunWireSchemas(config);
    const tag = runTag<Self>()(name, config);
    const error = wire.error;
    const defaultSpec = { name, ...config, ...wire, error };
    const layerConfig: RunHyperlinkLayerConfig<
      Schema.Schema.Type<I>,
      Schema.Schema.Type<A>,
      Schema.Schema.Type<E>,
      R
    > = {
      effect: config.effect,
      concurrency: config.concurrency,
      name,
    };
    return Object.assign(tag, {
      defaultSpec,
      configure: (
        patch: ConfigPatch<
          RunHyperlinkLayerConfig<
            Schema.Schema.Type<I>,
            Schema.Schema.Type<A>,
            Schema.Schema.Type<E>,
            R
          >
        >,
      ) => configureLayer(name, patch),
      wrapGate: (
        fn: (
          previous: RunHyperlinkLayerConfig<
            Schema.Schema.Type<I>,
            Schema.Schema.Type<A>,
            Schema.Schema.Type<E>,
            R
          >["effect"],
        ) => RunHyperlinkLayerConfig<
          Schema.Schema.Type<I>,
          Schema.Schema.Type<A>,
          Schema.Schema.Type<E>,
          R
        >["effect"],
      ) => configureWrapEffectField(name, fn),
      layer: layer(tag, layerConfig),
      // `tag` already carries the named static `.run` (stamped by `materializeRunTag`), so it is not
      // re-set here — `Object.assign` preserves it.
    });
  }
  return build;
};