import { type RequestContextInput } from '@modern-js/runtime-extensions/request-context'; import * as Effect from 'effect/Effect'; import { HttpClient } from 'effect/http'; import { HttpApi, HttpApiClient, HttpApiEndpoint, HttpApiGroup, HttpApiSchema } from 'effect/http-api'; import * as Layer from 'effect/Layer'; import { Rpc, RpcClient, RpcClientError, RpcGroup, RpcSchema, RpcSerialization } from 'effect/rpc'; import { type EffectCrossProjectClientOptions } from './cross-project.js'; export * as Effect from 'effect/Effect'; export * as HttpClientError from 'effect/http/HttpClientError'; export * as Layer from 'effect/Layer'; export * as Schema from 'effect/Schema'; export type { EffectCrossProjectClientOptions } from './cross-project.js'; export { HttpApi, HttpApiClient, HttpApiEndpoint, HttpApiGroup, HttpApiSchema, Rpc, RpcClient, RpcGroup, RpcSchema, RpcSerialization, }; export type EffectHttpApiClientOptions = { crossProject?: EffectCrossProjectClientOptions; baseUrl?: URL | string; /** Headers for every request. A header the request already sets wins; undefined values are skipped. */ headers?: Readonly>; /** * Locale, trace and operation context for every request. An * `operationContext` is sent as `x-operation-id` plus the * `x-modernjs-bff-operation-context` detail the Effect BFF server reads. */ requestContext?: RequestContextInput; transformClient?: (client: HttpClient.HttpClient) => HttpClient.HttpClient; transformResponse?: ((effect: Effect.Effect) => Effect.Effect) | undefined; }; type Nullish = null | undefined; type NonNullish = Exclude; type PreserveNullish = Extract extends never ? Next : Next | Extract; type EffectViewObjectSelection = NonNullish extends Record ? EffectViewSelection> : never; type EffectViewSelectionValue = NonNullish extends readonly (infer Item)[] ? true | EffectViewObjectSelection : NonNullish extends Record ? true | EffectViewSelection> : true; type EffectMaskedValue = Selection extends true ? T : NonNullish extends readonly (infer Item)[] ? PreserveNullish>> : NonNullish extends Record ? PreserveNullish, Selection>> : T; export type EffectViewSelection = { [K in keyof T]?: EffectViewSelectionValue; }; export type EffectViewData = Selection extends true ? T : Selection extends Record ? { [K in keyof Selection & keyof T]: EffectMaskedValue; } : T; export type EffectRpcSerialization = 'json' | 'ndjson' | 'jsonRpc' | 'ndJsonRpc'; declare const EffectRpcClientError_base: new = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & { readonly _tag: "EffectRpcClientError"; } & Readonly; export declare class EffectRpcClientError extends EffectRpcClientError_base<{ readonly cause: unknown; }> { } type EffectRpcMiddlewareLayerOption = [ Rpc.MiddlewareClient ] extends [never] ? { middlewareLayer?: Layer.Layer, never, never>; } : { middlewareLayer: Layer.Layer, unknown, never>; }; export type EffectRpcClientOptions = EffectRpcMiddlewareLayerOption & { url: string; flatten?: Flatten; serialization?: EffectRpcSerialization; }; export type EffectRpcClientHandle = (Flatten extends true ? RpcClient.RpcClient.Flat : RpcClient.RpcClient) & { dispose: () => Promise; }; export declare function view(): >(selection: Selection) => Selection; export declare function mask>(value: T, selection: Selection): EffectViewData; export declare function runEffectView>(request: PromiseLike, selection: Selection): Promise>; export declare function makeEffectHttpApiClient(api: HttpApi.HttpApi, options?: EffectHttpApiClientOptions): Effect.Effect, never, HttpApiGroup.MiddlewareClient>; export declare function makeEffectRpcClient(group: RpcGroup.RpcGroup, options: EffectRpcClientOptions): Effect.Effect, EffectRpcClientError, never>; export declare const runEffectRequest: (effect: Effect.Effect, options?: Effect.RunOptions | undefined) => Promise;