export interface FactoryNode { readonly kind: string; } export interface FactoryNodeClass { new (factory: Factory>, ...args: any[]): N; } export interface Factory> { create(kind: string): N; setNodeClass(kind: string, nodeClass: C): void; getNodeClass(kind: string): C; deleteNodeClass(kind: string): void; nodeIsKind(node: N, kind: string): boolean; getKinds(): string[]; } export declare abstract class AbstractFactory> implements Factory { static defaultNodes: {}; defaultKind: string; protected nodeMap: Map; protected node: { [kind: string]: (...args: any[]) => N; }; constructor(nodes?: { [kind: string]: C; }); create(kind: string, ...args: any[]): N; setNodeClass(kind: string, nodeClass: C): void; getNodeClass(kind: string): C; deleteNodeClass(kind: string): void; nodeIsKind(node: N, kind: string): boolean; getKinds(): string[]; }