Hyperlinkv0.8.0-beta.28

Hyperlink

Hyperlink.discoverClientsfunctionsrc/Hyperlink.ts:5114
<const Tags extends DiscoverTagList>(
  tags: Tags,
  options?: DiscoverClientOptions
): Layer.Layer<ServicesOfDiscoverTags<Tags>, LookupClientError>
<const Tags extends DiscoverTagList>(...tags: Tags): Layer.Layer<
  ServicesOfDiscoverTags<Tags>,
  LookupClientError
>

discoverClient for many tags — one Lookup bootstrap, then Layer.mergeAll of each lookupClient.

Options (lookupPath, pick, …) ride the array form; rest uses Lookup defaults.

Hyperlink.discoverClients([Jobs, Emails], { lookupPath })
Hyperlink.discoverClients(Jobs, Emails)
clientsdiscoverClientLayer.mergeAlllookupClient
Source src/Hyperlink.ts:511447 lines
export function discoverClients<const Tags extends DiscoverTagList>(
  tags: Tags,
  options?: DiscoverClientOptions,
): Layer.Layer<ServicesOfDiscoverTags<Tags>, LookupClientError>;
export function discoverClients<const Tags extends DiscoverTagList>(
  ...tags: Tags
): Layer.Layer<ServicesOfDiscoverTags<Tags>, LookupClientError>;
export function discoverClients(
  first: unknown,
  second?: unknown,
  ...rest: ReadonlyArray<unknown>
): Layer.Layer<never, LookupClientError> {
  const fromArray = isDiscoverTagList(first);
  const tags: DiscoverTagList = fromArray
    ? first
    : second !== undefined
      ? ([first, second, ...rest] as unknown as DiscoverTagList)
      : ([first] as unknown as DiscoverTagList);
  const options: DiscoverClientOptions | undefined = fromArray
    ? (second as DiscoverClientOptions | undefined)
    : undefined;
  const { lookupPath, unlink, ...clientOptions } = options ?? {};
  const clients = tags.map((tag) =>
    lookupClient(tag as HyperlinkTag<any, any>, clientOptions),
  );
  return Layer.unwrap(
    Effect.promise(() => import("./Lookup")).pipe(
      Effect.map((Lookup) =>
        Layer.mergeAll(
          ...(clients as unknown as [
            Layer.Layer<never, LookupClientError, never>,
            ...Array<Layer.Layer<never, LookupClientError, never>>,
          ]),
        ).pipe(
          Layer.provide(
            lookupPath === undefined && unlink === undefined
              ? Lookup.layer
              : Lookup.layerOptions({
                  ...(lookupPath !== undefined ? { path: lookupPath } : {}),
                  ...(unlink !== undefined ? { unlink } : {}),
                }),
          ),
        ),
      ),
    ),
  ) as Layer.Layer<never, LookupClientError>;
}