Imported as a linear vendor commit so forge rebases do not replay the upstream root tree. git-subtree-dir: third_party/pi git-subtree-split: d981de1229ef899957bbe968bc8dcda02a21f477
21 lines
733 B
TypeScript
21 lines
733 B
TypeScript
import type { Op } from "../delta/index.ts";
|
|
import type { Context } from "../types.ts";
|
|
|
|
export interface ReplicatedStateInternals {
|
|
readonly sequence: number;
|
|
readonly value: unknown;
|
|
publish(context: Context): void;
|
|
subscribe(listener: (ops: readonly Op[], sequence: number, context: Context) => void): () => void;
|
|
}
|
|
|
|
const sources = new WeakMap<object, ReplicatedStateInternals>();
|
|
|
|
export function registerReplicatedStateInternals(value: object, internals: ReplicatedStateInternals): void {
|
|
sources.set(value, internals);
|
|
}
|
|
|
|
export function getReplicatedStateInternals(value: unknown): ReplicatedStateInternals | undefined {
|
|
if (typeof value !== "object" || value === null) return undefined;
|
|
return sources.get(value);
|
|
}
|