EdgeAIG's picture
download
raw
3.74 kB
/**
* Keeps resources available across cluster entity restarts.
*
* `EntityResource` is useful for long-lived resources tied to an entity
* address, such as external processes, network clients, Kubernetes Pods, or
* other handles that should survive routine shard movement. This module
* includes the resource wrapper, a close scope that survives normal entity
* restarts, a generic resource constructor, and a Kubernetes Pod resource
* helper built on `K8sHttpClient`.
*
* @since 4.0.0
*/
import type * as v1 from "kubernetes-types/core/v1.d.ts";
import * as Context from "../../Context.ts";
import * as Duration from "../../Duration.ts";
import * as Effect from "../../Effect.ts";
import * as Scope from "../../Scope.ts";
import * as Entity from "./Entity.ts";
import * as K8sHttpClient from "./K8sHttpClient.ts";
import type { Sharding } from "./Sharding.ts";
/**
* Type identifier used to brand `EntityResource` values.
*
* @category type IDs
* @since 4.0.0
*/
export declare const TypeId: TypeId;
/**
* Literal type of the `EntityResource` type identifier.
*
* @category type IDs
* @since 4.0.0
*/
export type TypeId = "~effect/cluster/EntityResource";
/**
* A resource acquired inside a cluster entity and kept alive across restarts.
*
* **Details**
*
* `get` acquires or reuses the resource in the caller's scope, while `close`
* invalidates it so its close scope can be released.
*
* @category models
* @since 4.0.0
*/
export interface EntityResource<out A, out E = never> {
readonly [TypeId]: TypeId;
readonly get: Effect.Effect<A, E, Scope.Scope>;
readonly close: Effect.Effect<void>;
}
declare const CloseScope_base: Context.ServiceClass<CloseScope, "effect/cluster/EntityResource/CloseScope", Scope.Scope>;
/**
* Context service for a Scope that is only closed when the resource is explicitly closed.
*
* **When to use**
*
* Use when a cluster entity resource needs a scope that survives restarts and
* closes only through the resource lifecycle.
*
* **Gotchas**
*
* It is not closed during restarts, due to shard movement or node shutdowns.
*
* @category resource management
* @since 4.0.0
*/
export declare class CloseScope extends CloseScope_base {
}
/**
* Creates an `EntityResource` that can be acquired inside a cluster entity.
*
* **When to use**
*
* Use when a cluster entity should lazily share an acquired resource across
* messages and release it only on idle timeout or explicit close.
*
* **Details**
*
* The resource will only be fully released when the idle time to live is
* reached, or when the `close` effect is called.
*
* **Gotchas**
*
* By default, the `idleTimeToLive` is infinite, meaning the resource will only
* be released when `close` is called.
*
* @category constructors
* @since 4.0.0
*/
export declare const make: <A, E, R>(options: {
readonly acquire: Effect.Effect<A, E, R>;
readonly idleTimeToLive?: Duration.Input | undefined;
readonly acquireEagerly?: boolean | undefined;
}) => Effect.Effect<EntityResource<A, E>, E, Scope.Scope | Exclude<R, CloseScope> | Sharding | Entity.CurrentAddress>;
/**
* Creates an `EntityResource` backed by a Kubernetes Pod.
*
* **Details**
*
* The pod is created and waited on through `K8sHttpClient`, and is kept alive
* until the resource is closed or its idle time to live expires.
*
* @category Kubernetes
* @since 4.0.0
*/
export declare const makeK8sPod: (spec: v1.Pod, options?: {
readonly idleTimeToLive?: Duration.Input | undefined;
} | undefined) => Effect.Effect<EntityResource<K8sHttpClient.PodStatus>, never, Scope.Scope | Sharding | Entity.CurrentAddress | K8sHttpClient.K8sHttpClient>;
export {};
//# sourceMappingURL=EntityResource.d.ts.map

Xet Storage Details

Size:
3.74 kB
·
Xet hash:
8bf7727172b37c064da029384e5ac998aa14c91b88e7210b0d540026ab9635d2

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.