import {BlackboardRef} from './BlackboardRef'; export interface Blackboard { create(ref: BlackboardRef, value: T): void; is(ref: BlackboardRef, value: T): boolean; get(ref: BlackboardRef): T; tryGet(ref: BlackboardRef): [true, T]|[false, undefined]; put(ref: BlackboardRef, value: T): void; delete(ref: BlackboardRef): boolean; deleteAll(refs: BlackboardRef[]): BlackboardRef[]; } function isFunction(maybeFunction: any): maybeFunction is Function { return maybeFunction !== null && maybeFunction !== undefined && typeof maybeFunction === 'function'; } export const BLACKBOARD_METHODS = Object.freeze(['create', 'get', 'tryGet', 'put', 'delete', 'deleteAll', 'is']); export function isBlackboard(maybeBlackboard: any): maybeBlackboard is Blackboard { return (maybeBlackboard !== null && maybeBlackboard !== undefined) && !BLACKBOARD_METHODS.some((m) => !isFunction(maybeBlackboard[m])); }