import type { Operation } from "effection"; export type OperationMetadata = { watchSafe?: boolean; operationName?: string; }; const OPERATION_METADATA = Symbol.for("@simulacrum/simulacrum/operationMetadata"); export type OperationWithMetadata> = T & { [OPERATION_METADATA]?: OperationMetadata; }; export function withOperationMetadata>( operation: T, metadata: OperationMetadata, ): T { const operationWithMetadata = operation as OperationWithMetadata; operationWithMetadata[OPERATION_METADATA] = metadata; return operationWithMetadata; } export function getOperationMetadata(operation: Operation): OperationMetadata | undefined { return (operation as OperationWithMetadata>)[OPERATION_METADATA]; }