<A>(value: A): Effect.Effect<TxSubscriptionRef<A>>Creates a new TxSubscriptionRef with the specified initial value.
When to use
Use to create a TxSubscriptionRef that publishes every committed update to
subscribers.
Example (Creating a transactional subscription reference)
import { Effect, TxSubscriptionRef } from "effect"
const program = Effect.gen(function*() {
const ref = yield* TxSubscriptionRef.make(42)
const value = yield* TxSubscriptionRef.get(ref)
console.log(value) // 42
})export const const make: <A>(
value: A
) => Effect.Effect<TxSubscriptionRef<A>>
Creates a new TxSubscriptionRef with the specified initial value.
When to use
Use to create a TxSubscriptionRef that publishes every committed update to
subscribers.
Example (Creating a transactional subscription reference)
import { Effect, TxSubscriptionRef } from "effect"
const program = Effect.gen(function*() {
const ref = yield* TxSubscriptionRef.make(42)
const value = yield* TxSubscriptionRef.get(ref)
console.log(value) // 42
})
make = <function (type parameter) A in <A>(value: A): Effect.Effect<TxSubscriptionRef<A>>A>(value: Avalue: function (type parameter) A in <A>(value: A): Effect.Effect<TxSubscriptionRef<A>>A): import EffectEffect.type Effect.Effect = /*unresolved*/ anyEffect<interface TxSubscriptionRef<in out A>A TxSubscriptionRef is a transactional reference that allows subscribing to all
committed changes. Subscribers receive the current value followed by every subsequent
update via a transactional dequeue.
When to use
Use to store transactional state whose committed changes must be observable by
subscribers.
Example (Subscribing to transactional changes)
import { Effect, TxQueue, TxSubscriptionRef } from "effect"
const program = Effect.gen(function*() {
const ref = yield* TxSubscriptionRef.make(0)
yield* Effect.scoped(
Effect.gen(function*() {
const sub = yield* TxSubscriptionRef.changes(ref)
const initial = yield* TxQueue.take(sub)
console.log(initial) // 0
yield* TxSubscriptionRef.set(ref, 1)
const next = yield* TxQueue.take(sub)
console.log(next) // 1
})
)
})
TxSubscriptionRef<function (type parameter) A in <A>(value: A): Effect.Effect<TxSubscriptionRef<A>>A>> =>
import EffectEffect.gen(function*() {
const const ref: TxRef.TxRef<A>const ref: {
version: number;
pending: Map<unknown, () => void>;
value: A;
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
}
ref = yield* import TxRefTxRef.make(value: Avalue)
const const pubsub: TxPubSub.TxPubSub<A>const pubsub: {
subscribersRef: TxRef.TxRef<Array<TxQueue.TxQueue<A>>>;
shutdownRef: TxRef.TxRef<boolean>;
strategy: "bounded" | "unbounded" | "dropping" | "sliding";
capacity: number;
toString: () => string;
toJSON: () => unknown;
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
}
pubsub = yield* import TxPubSubTxPubSub.unbounded<function (type parameter) A in <A>(value: A): Effect.Effect<TxSubscriptionRef<A>>A>()
const const self: anyself = var Object: ObjectConstructorProvides functionality common to all JavaScript objects.
Object.ObjectConstructor.create(o: object | null): any (+1 overload)Creates an object that has the specified prototype or that has null prototype.
create(const TxSubscriptionRefProto: Omit<
TxSubscriptionRef<any>,
typeof TypeId | "ref" | "pubsub"
>
TxSubscriptionRefProto)
const self: anyself[const TypeId: "~effect/transactions/TxSubscriptionRef"TypeId] = const TypeId: "~effect/transactions/TxSubscriptionRef"TypeId
const self: anyself.ref = const ref: TxRef.TxRef<A>const ref: {
version: number;
pending: Map<unknown, () => void>;
value: A;
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
}
ref
const self: anyself.pubsub = const pubsub: TxPubSub.TxPubSub<A>const pubsub: {
subscribersRef: TxRef.TxRef<Array<TxQueue.TxQueue<A>>>;
shutdownRef: TxRef.TxRef<boolean>;
strategy: "bounded" | "unbounded" | "dropping" | "sliding";
capacity: number;
toString: () => string;
toJSON: () => unknown;
pipe: { <A>(this: A): A; <A, B = never>(this: A, ab: (_: A) => B): B; <A, B = never, C = never>(this: A, ab: (_: A) => B, bc: (_: B) => C): C; <A, B = never, C = never, D = never>(this: A, ab: (_: A) => B, bc: (_: B) => C, cd: (_: C) => D): D; <…;
}
pubsub
return const self: anyself
}).pipe(import EffectEffect.tx)