UNPKG

1.2 kBPlain TextView Raw
1import { IDepTreeNode, getAtom, getObservers, hasObservers } from "../internal"
2
3export interface IDependencyTree {
4 name: string
5 dependencies?: IDependencyTree[]
6}
7
8export interface IObserverTree {
9 name: string
10 observers?: IObserverTree[]
11}
12
13export function getDependencyTree(thing: any, property?: string): IDependencyTree {
14 return nodeToDependencyTree(getAtom(thing, property))
15}
16
17function nodeToDependencyTree(node: IDepTreeNode): IDependencyTree {
18 const result: IDependencyTree = {
19 name: node.name_
20 }
21 if (node.observing_ && node.observing_.length > 0)
22 result.dependencies = unique(node.observing_).map(nodeToDependencyTree)
23 return result
24}
25
26export function getObserverTree(thing: any, property?: string): IObserverTree {
27 return nodeToObserverTree(getAtom(thing, property))
28}
29
30function nodeToObserverTree(node: IDepTreeNode): IObserverTree {
31 const result: IObserverTree = {
32 name: node.name_
33 }
34 if (hasObservers(node as any))
35 result.observers = Array.from(<any>getObservers(node as any)).map(<any>nodeToObserverTree)
36 return result
37}
38
39function unique<T>(list: T[]): T[] {
40 return Array.from(new Set(list))
41}