interface Reference {}
export opaque type TemporaryReferenceSet = Array<Reference | symbol>;
export function createTemporaryReferenceSet(): TemporaryReferenceSet {
return [];
}
export function writeTemporaryReference(
set: TemporaryReferenceSet,
object: Reference | symbol,
): number {
const newId = set.length;
set.push(object);
return newId;
}
export function readTemporaryReference<T>(
set: TemporaryReferenceSet,
id: number,
): T {
if (id < 0 || id >= set.length) {
throw new Error(
"The RSC response contained a reference that doesn't exist in the temporary reference set. " +
'Always pass the matching set that was used to create the reply when parsing its response.',
);
}
return (set[id]: any);
}