import { Opaque, Dict, Set } from '@glimmer/util'; import { Reference, PathReference } from '@glimmer/reference'; export interface NotifiableReference extends Reference { // notify(); } export interface ChainableReference extends Reference { // chain(child: Reference): Destroyable; } export interface PathReferenceFactory { new (object: any, property: string): PathReference; } export interface RootReferenceFactory { new (object: T): RootReference; } export interface RootReference extends PathReference { update(value: T); referenceFromParts(parts: string[]): PathReference; chainFor(prop: string): PathReference; } import { InnerReferenceFactory } from './references/descriptors'; export interface MetaOptions { RootReferenceFactory?: RootReferenceFactory; DefaultPathReferenceFactory?: InnerReferenceFactory; } export interface Meta { root(): RootReference; referencesFor(property: string): Set>; referenceTypeFor(property: string): InnerReferenceFactory; getReferenceTypes(): Dict>; addReference(property: string, reference: PathReference); removeReference(property: string, reference: PathReference); getSlots(): Dict; } export interface MetaLookup { for(obj: any): Meta; }