EdgeAIG's picture
download
raw
4.84 kB
/**
* The `ClusterSchema` module collects the annotations that add cluster behavior
* to RPC protocols and entity definitions. These annotations describe how
* requests are persisted, handled in transactions, interrupted, traced, and
* routed to shard groups without changing the request or response schema.
*
* @since 4.0.0
*/
import * as Context from "../../Context.ts"
import { constFalse, constTrue, identity } from "../../Function.ts"
import type * as Rpc from "../rpc/Rpc.ts"
import type { EntityId } from "./EntityId.ts"
import type { Request } from "./Envelope.ts"
/**
* Annotation that marks whether a cluster request should be persisted in mailbox
* storage.
*
* **Details**
*
* The default value is `false`.
*
* @category annotations
* @since 4.0.0
*/
export const Persisted = Context.Reference<boolean>("effect/cluster/ClusterSchema/Persisted", {
defaultValue: constFalse
})
/**
* Annotation that marks whether request handling should be wrapped in the
* configured message storage transaction.
*
* **When to use**
*
* Use when you need server-side request handling or storage work wrapped in the
* storage transaction.
*
* **Details**
*
* The default value is `false`. When `true`, entity handling wraps server
* writes with the configured storage transaction.
*
* **Gotchas**
*
* This annotation has transactional behavior only when the configured
* `MessageStorage` implements it.
*
* @category annotations
* @since 4.0.0
*/
export const WithTransaction = Context.Reference<boolean>(
"effect/cluster/ClusterSchema/WithTransaction",
{ defaultValue: constFalse }
)
/**
* Annotation that controls whether a cluster request is treated as
* uninterruptible.
*
* **Details**
*
* Use `true` for both client and server handling, `"client"` for client-side
* handling only, `"server"` for server-side handling only, or `false` to allow
* interruption.
*
* @category annotations
* @since 4.0.0
*/
export const Uninterruptible = Context.Reference<boolean | "client" | "server">(
"effect/cluster/ClusterSchema/Uninterruptible",
{ defaultValue: constFalse }
)
/**
* Returns whether the `Uninterruptible` annotation applies to server-side
* request handling for the provided context.
*
* **Details**
*
* Returns `true` only when `Uninterruptible` is `true` or `"server"`.
*
* @see {@link Uninterruptible} for the annotation values interpreted by this helper
* @see {@link isUninterruptibleForClient} for the client-side counterpart
*
* @category annotations
* @since 4.0.0
*/
export const isUninterruptibleForServer = (context: Context.Context<never>): boolean => {
const value = Context.get(context, Uninterruptible)
return value === true || value === "server"
}
/**
* Returns whether the `Uninterruptible` annotation applies to client-side
* request handling for the provided context.
*
* **When to use**
*
* Use when you need client-side cluster request handling to decide whether to
* ignore an interrupt.
*
* **Details**
*
* Returns `true` when `Uninterruptible` is `true` or `"client"`, and `false`
* for `"server"` or the default `false`.
*
* @see {@link Uninterruptible} for the annotation values interpreted by this helper
* @see {@link isUninterruptibleForServer} for the server-side counterpart
*
* @category annotations
* @since 4.0.0
*/
export const isUninterruptibleForClient = (context: Context.Context<never>): boolean => {
const value = Context.get(context, Uninterruptible)
return value === true || value === "client"
}
/**
* Annotation that selects the shard group for an entity id.
*
* **Details**
*
* By default, every entity id is assigned to the `"default"` shard group.
*
* @category annotations
* @since 4.0.0
*/
export const ShardGroup = Context.Reference<(entityId: EntityId) => string>(
"effect/cluster/ClusterSchema/ShardGroup",
{ defaultValue: () => (_) => "default" }
)
/**
* Annotation that controls whether client-side cluster request tracing is
* enabled.
*
* **Details**
*
* The default value is `true`.
*
* @category annotations
* @since 4.0.0
*/
export const ClientTracingEnabled = Context.Reference<boolean>("effect/cluster/ClusterSchema/ClientTracingEnabled", {
defaultValue: constTrue
})
/**
* Context reference for deriving request annotations from a cluster request.
*
* **When to use**
*
* Use to customize server-side request annotations based on the decoded
* request value.
*
* **Gotchas**
*
* This only applies to requests handled by the entity, not to the generated
* client.
*
* @category annotations
* @since 4.0.0
*/
export const Dynamic = Context.Reference<
(annotations: Context.Context<never>, request: Request<Rpc.AnyWithProps>) => Context.Context<never>
>(
"effect/cluster/ClusterSchema/Dynamic",
{ defaultValue: () => identity }
)

Xet Storage Details

Size:
4.84 kB
·
Xet hash:
3382a4333d19fa0ce2247b42165cb306660f2be0078311edfd42f0bcb1bd9fbe

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