| import type * as Cause from "../../Cause.ts"; | |
| import * as Context from "../../Context.ts"; | |
| import * as Data from "../../Data.ts"; | |
| import type * as Duration from "../../Duration.ts"; | |
| import * as Effect from "../../Effect.ts"; | |
| import * as Equal from "../../Equal.ts"; | |
| import * as Exit from "../../Exit.ts"; | |
| import type * as Latch from "../../Latch.ts"; | |
| import * as Layer from "../../Layer.ts"; | |
| import * as Option from "../../Option.ts"; | |
| import * as Queue from "../../Queue.ts"; | |
| import type * as Schedule from "../../Schedule.ts"; | |
| import { Scope } from "../../Scope.ts"; | |
| import * as Stream from "../../Stream.ts"; | |
| import * as Rpc from "../rpc/Rpc.ts"; | |
| import * as RpcClient from "../rpc/RpcClient.ts"; | |
| import * as RpcGroup from "../rpc/RpcGroup.ts"; | |
| import type { AlreadyProcessingMessage, MailboxFull, PersistenceError } from "./ClusterError.ts"; | |
| import { EntityAddress } from "./EntityAddress.ts"; | |
| import type { EntityId } from "./EntityId.ts"; | |
| import { EntityType } from "./EntityType.ts"; | |
| import * as Envelope from "./Envelope.ts"; | |
| import type * as Reply from "./Reply.ts"; | |
| import { RunnerAddress } from "./RunnerAddress.ts"; | |
| import * as ShardId from "./ShardId.ts"; | |
| import type { Sharding } from "./Sharding.ts"; | |
| import { ShardingConfig } from "./ShardingConfig.ts"; | |
| declare const TypeId = "~effect/cluster/Entity"; | |
| /** | |
| * Represents a cluster entity type and the RPC protocol it can handle. | |
| * | |
| * **Details** | |
| * | |
| * An entity defines how ids map to shard groups, exposes a sharded client, and | |
| * can be registered as a layer using RPC handlers or a mailbox queue. | |
| * | |
| * @category models | |
| * @since 4.0.0 | |
| */ | |
| export interface Entity<in out Type extends string, in out Rpcs extends Rpc.Any> extends Equal.Equal { | |
| readonly [TypeId]: typeof TypeId; | |
| /** | |
| * The name of the entity type. | |
| */ | |
| readonly type: EntityType; | |
| /** | |
| * A RpcGroup definition for messages which represents the messaging protocol | |
| * that the entity is capable of processing. | |
| */ | |
| readonly protocol: RpcGroup.RpcGroup<Rpcs>; | |
| /** | |
| * Get the shard group for the given EntityId. | |
| */ | |
| getShardGroup(entityId: EntityId): string; | |
| /** | |
| * Get the ShardId for the given EntityId. | |
| */ | |
| getShardId(entityId: EntityId): Effect.Effect<ShardId.ShardId, never, Sharding>; | |
| /** | |
| * Annotate the entity with a value. | |
| */ | |
| annotate<I, S>(key: Context.Key<I, S>, value: S): Entity<Type, Rpcs>; | |
| /** | |
| * Annotate the Rpc's above this point with a value. | |
| */ | |
| annotateRpcs<I, S>(key: Context.Key<I, S>, value: S): Entity<Type, Rpcs>; | |
| /** | |
| * Annotate the entity with the given annotations. | |
| */ | |
| annotateMerge<S>(annotation: Context.Context<S>): Entity<Type, Rpcs>; | |
| /** | |
| * Annotate the Rpc's above this point with a context object. | |
| */ | |
| annotateRpcsMerge<S>(context: Context.Context<S>): Entity<Type, Rpcs>; | |
| /** | |
| * Create a client for this entity. | |
| */ | |
| readonly client: Effect.Effect<(entityId: string) => RpcClient.RpcClient.From<Rpcs, MailboxFull | AlreadyProcessingMessage | PersistenceError>, never, Sharding>; | |
| /** | |
| * Create a Layer from an Entity. | |
| * | |
| * **Details** | |
| * | |
| * It will register the entity with the Sharding service. | |
| */ | |
| toLayer<Handlers extends HandlersFrom<Rpcs>, RX = never>(build: Handlers | Effect.Effect<Handlers, never, RX>, options?: { | |
| readonly maxIdleTime?: Duration.Input | undefined; | |
| readonly concurrency?: number | "unbounded" | undefined; | |
| readonly mailboxCapacity?: number | "unbounded" | undefined; | |
| readonly disableFatalDefects?: boolean | undefined; | |
| readonly defectRetryPolicy?: Schedule.Schedule<any, unknown> | undefined; | |
| readonly spanAttributes?: Record<string, string> | undefined; | |
| }): Layer.Layer<never, never, Exclude<RX, Scope | CurrentAddress | CurrentRunnerAddress> | RpcGroup.HandlersServices<Rpcs, Handlers> | Rpc.ServicesClient<Rpcs> | Rpc.ServicesServer<Rpcs> | Rpc.Middleware<Rpcs> | Sharding>; | |
| of<Handlers extends HandlersFrom<Rpcs>>(handlers: Handlers): Handlers; | |
| /** | |
| * Create a Layer from an Entity. | |
| * | |
| * **Details** | |
| * | |
| * It will register the entity with the Sharding service. | |
| */ | |
| toLayerQueue<R, RX = never>(build: ((queue: Queue.Dequeue<Envelope.Request<Rpcs>>, replier: Replier<Rpcs>) => Effect.Effect<never, never, R>) | Effect.Effect<(queue: Queue.Dequeue<Envelope.Request<Rpcs>>, replier: Replier<Rpcs>) => Effect.Effect<never, never, R>, never, RX>, options?: { | |
| readonly maxIdleTime?: Duration.Input | undefined; | |
| readonly mailboxCapacity?: number | "unbounded" | undefined; | |
| readonly disableFatalDefects?: boolean | undefined; | |
| readonly defectRetryPolicy?: Schedule.Schedule<any, unknown> | undefined; | |
| readonly spanAttributes?: Record<string, string> | undefined; | |
| }): Layer.Layer<never, never, Exclude<RX, Scope | CurrentAddress | CurrentRunnerAddress> | R | Rpc.ServicesClient<Rpcs> | Rpc.ServicesServer<Rpcs> | Rpc.Middleware<Rpcs> | Sharding>; | |
| } | |
| /** | |
| * Type alias for any cluster `Entity`, regardless of entity type or RPC | |
| * protocol. | |
| * | |
| * @category models | |
| * @since 4.0.0 | |
| */ | |
| export type Any = Entity<string, Rpc.Any>; | |
| /** | |
| * Maps each RPC in an entity protocol to the handler function expected by | |
| * `Entity.toLayer`. | |
| * | |
| * **Details** | |
| * | |
| * Each handler receives the entity request envelope for that RPC and returns the | |
| * RPC result or a supported RPC wrapper. | |
| * | |
| * @category models | |
| * @since 4.0.0 | |
| */ | |
| export type HandlersFrom<Rpc extends Rpc.Any> = { | |
| readonly [Current in Rpc as Current["_tag"]]: (envelope: Request<Current>) => Rpc.WrapperOr<Rpc.ResultFrom<Current, any>>; | |
| }; | |
| /** | |
| * Returns `true` when the supplied value is a cluster `Entity`. | |
| * | |
| * **Details** | |
| * | |
| * The check is based on the internal entity type identifier. | |
| * | |
| * @category refinements | |
| * @since 4.0.0 | |
| */ | |
| export declare const isEntity: (u: unknown) => u is Any; | |
| /** | |
| * Creates a new `Entity` of the specified `type` which will accept messages | |
| * that adhere to the provided `RpcGroup`. | |
| * | |
| * @category constructors | |
| * @since 4.0.0 | |
| */ | |
| export declare const fromRpcGroup: <const Type extends string, Rpcs extends Rpc.Any>( | |
| /** | |
| * The entity type name. | |
| */ | |
| type: Type, | |
| /** | |
| * The schema definition for messages that the entity is capable of | |
| * processing. | |
| */ | |
| protocol: RpcGroup.RpcGroup<Rpcs>) => Entity<Type, Rpcs>; | |
| /** | |
| * Creates a new `Entity` of the specified `type` which will accept messages | |
| * that adhere to the provided schemas. | |
| * | |
| * **When to use** | |
| * | |
| * Use to define a cluster entity from individual `Rpc` definitions, giving the | |
| * cluster runtime a typed protocol for handlers and per-entity clients. | |
| * | |
| * **Details** | |
| * | |
| * The `type` argument is stored as the entity `EntityType`, and the RPC array | |
| * is grouped into the entity's `protocol`. | |
| * | |
| * **Gotchas** | |
| * | |
| * RPC tags should be unique within the array. If multiple definitions use the | |
| * same tag, the resulting protocol keeps the later definition for that tag. | |
| * | |
| * @see {@link fromRpcGroup} for creating an entity from an existing `RpcGroup` | |
| * | |
| * @category constructors | |
| * @since 4.0.0 | |
| */ | |
| export declare const make: <const Type extends string, Rpcs extends ReadonlyArray<Rpc.Any>>( | |
| /** | |
| * The entity type name. | |
| */ | |
| type: Type, | |
| /** | |
| * The schema definition for messages that the entity is capable of | |
| * processing. | |
| */ | |
| protocol: Rpcs) => Entity<Type, Rpcs[number]>; | |
| declare const CurrentAddress_base: Context.ServiceClass<CurrentAddress, "effect/cluster/Entity/EntityAddress", EntityAddress>; | |
| /** | |
| * Service tag for the entity address currently being processed. | |
| * | |
| * **When to use** | |
| * | |
| * Use to read the current entity identity and shard address from entity | |
| * handlers and keep-alive logic. | |
| * | |
| * @category context | |
| * @since 4.0.0 | |
| */ | |
| export declare class CurrentAddress extends CurrentAddress_base { | |
| } | |
| declare const CurrentRunnerAddress_base: Context.ServiceClass<CurrentRunnerAddress, "effect/cluster/Entity/RunnerAddress", RunnerAddress>; | |
| /** | |
| * Service tag for the runner address currently registering entity handlers. | |
| * | |
| * **When to use** | |
| * | |
| * Use to read the runner address associated with the current entity handler | |
| * registration. | |
| * | |
| * @category context | |
| * @since 4.0.0 | |
| */ | |
| export declare class CurrentRunnerAddress extends CurrentRunnerAddress_base { | |
| } | |
| /** | |
| * Reply API passed to queue-based entity handlers. | |
| * | |
| * **When to use** | |
| * | |
| * Use when you use it to complete an entity request by succeeding, failing, failing with a | |
| * cause, or supplying an explicit `Exit`. | |
| * | |
| * @category Replier | |
| * @since 4.0.0 | |
| */ | |
| export interface Replier<Rpcs extends Rpc.Any> { | |
| readonly succeed: <R extends Rpcs>(request: Envelope.Request<R>, value: Replier.Success<R>) => Effect.Effect<void>; | |
| readonly fail: <R extends Rpcs>(request: Envelope.Request<R>, error: Rpc.Error<R>) => Effect.Effect<void>; | |
| readonly failCause: <R extends Rpcs>(request: Envelope.Request<R>, cause: Cause.Cause<Rpc.Error<R>>) => Effect.Effect<void>; | |
| readonly complete: <R extends Rpcs>(request: Envelope.Request<R>, exit: Exit.Exit<Replier.Success<R>, Rpc.Error<R>>) => Effect.Effect<void>; | |
| } | |
| /** | |
| * Helper types used by the `Replier` API. | |
| * | |
| * @since 4.0.0 | |
| */ | |
| export declare namespace Replier { | |
| /** | |
| * Success value accepted by a `Replier` for a single RPC. | |
| * | |
| * **Details** | |
| * | |
| * For streaming RPCs this may be either a stream of success chunks or a dequeue | |
| * of success chunks. For non-streaming RPCs it is the RPC success value. | |
| * | |
| * @category Replier | |
| * @since 4.0.0 | |
| */ | |
| type Success<R extends Rpc.Any> = Rpc.Success<R> extends Stream.Stream<infer _A, infer _E, infer _R> ? Stream.Stream<_A, _E | Rpc.Error<R>, _R> | Queue.Dequeue<_A, _E | Rpc.Error<R> | Cause.Done> : Rpc.Success<R>; | |
| } | |
| /** | |
| * Represents an entity request envelope delivered to entity handlers. | |
| * | |
| * **Details** | |
| * | |
| * It includes the underlying request envelope plus the last stream reply chunk | |
| * that was sent, allowing handlers to resume chunk sequencing after a restart. | |
| * | |
| * @category request | |
| * @since 4.0.0 | |
| */ | |
| export declare class Request<Rpc extends Rpc.Any> extends Data.Class<Envelope.Request<Rpc> & { | |
| readonly lastSentChunk: Option.Option<Reply.Chunk<Rpc>>; | |
| }> { | |
| /** | |
| * Most recent success chunk value sent by the entity, when one exists. | |
| * | |
| * @since 4.0.0 | |
| */ | |
| get lastSentChunkValue(): Option.Option<Rpc.SuccessChunk<Rpc>>; | |
| /** | |
| * Sequence number to use for the entity's next outgoing success chunk. | |
| * | |
| * @since 4.0.0 | |
| */ | |
| get nextSequence(): number; | |
| } | |
| /** | |
| * Builds an in-memory test client for an entity layer. | |
| * | |
| * **Details** | |
| * | |
| * The returned function creates a no-serialization RPC client for each entity ID, | |
| * using a test sharding service instead of the cluster transport. | |
| * | |
| * @category testing | |
| * @since 4.0.0 | |
| */ | |
| export declare const makeTestClient: <Type extends string, Rpcs extends Rpc.Any, LA, LE, LR>(entity: Entity<Type, Rpcs>, layer: Layer.Layer<LA, LE, LR>) => Effect.Effect<(entityId: string) => Effect.Effect<RpcClient.RpcClient<Rpcs>>, LE, Scope | ShardingConfig | Exclude<LR, Sharding> | Rpc.MiddlewareClient<Rpcs>>; | |
| /** | |
| * Enables or disables keep-alive for the current entity. | |
| * | |
| * **Details** | |
| * | |
| * When enabled it sends the internal keep-alive RPC for the current address; when | |
| * disabled it releases the keep-alive latch if one is present. | |
| * | |
| * @category Keep alive | |
| * @since 4.0.0 | |
| */ | |
| export declare const keepAlive: (enabled: boolean) => Effect.Effect<void, never, Sharding | CurrentAddress>; | |
| /** | |
| * RPC used internally to keep an entity active while a resource is held. | |
| * | |
| * **Details** | |
| * | |
| * The RPC is marked as persisted and uninterruptible so the keep-alive signal | |
| * survives normal entity restarts. | |
| * | |
| * @category Keep alive | |
| * @since 4.0.0 | |
| */ | |
| export declare const KeepAliveRpc: Rpc.Rpc<"Cluster/Entity/keepAlive", import("../../Schema.ts").Void, import("../../Schema.ts").Void, import("../../Schema.ts").Never, never, never>; | |
| declare const KeepAliveLatch_base: Context.ServiceClass<KeepAliveLatch, "effect/cluster/Entity/KeepAliveLatch", Latch.Latch>; | |
| /** | |
| * Service tag for the latch that coordinates entity keep-alive state. | |
| * | |
| * **Details** | |
| * | |
| * `keepAlive` closes the latch when keep-alive is active and opens it again when | |
| * the resource no longer needs to keep the entity alive. | |
| * | |
| * @category Keep alive | |
| * @since 4.0.0 | |
| */ | |
| export declare class KeepAliveLatch extends KeepAliveLatch_base { | |
| } | |
| export {}; | |
| //# sourceMappingURL=Entity.d.ts.map |
Xet Storage Details
- Size:
- 12.6 kB
- Xet hash:
- 3c0c63895a1d092ac187fe20f2148d512f6146e84667d5c03a4040d0a81194d1
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.