import type { Applog, SearchContextWithLog } from '@wovin/core/applog' import { actualize } from '@wovin/core/applog' export interface ResultFields { nodes: T subscribe: (callback: (value: Result) => void) => () => void } export class Result implements ResultFields { nodes: T subscribe: (callback: (value: Result) => void) => () => void constructor({ nodes, subscribe }: ResultFields) { this.nodes = nodes this.subscribe = subscribe } get values() { return this.nodes.map(({ context }) => actualize(context, Object.keys(context) /* HACK: select? */)) } } export class Datum { value: T applog: Applog // subscribe: (callback: ((value: Result) => void)) => (() => void) constructor({ value, applog }: Pick, 'value' | 'applog'>) { this.value = value this.applog = applog } }