import { ConfigSettingsArgs } from '../types'; import { ConfigNodeBase } from './ConfigNodeBase'; import { isConfigNodeArgs } from './lib'; import { ConfigNodeArgs, ConfigNodeInheritedNodesArg, ConfigNodeOptions, ConfigNodePropertyFactory, ConfigNodeValueArg, ConfigPropertyNodeFactoryArgs, } from './types'; /** * Concrete implementation of the simplest ConfigNode. Provides static asynchronous method to construct and * initialize a Node with required arguments. */ export class ConfigNode extends ConfigNodeBase { public static async create(args: ConfigNodeArgs): Promise; public static async create( initialValue?: ConfigSettingsArgs, inheritedNodes?: ConfigNodeInheritedNodesArg, options?: ConfigNodeOptions ): Promise; public static async create( argsOrInitialValue: ConfigNodeArgs | ConfigSettingsArgs, inheritedNodes?: ConfigNodeInheritedNodesArg, options?: ConfigNodeOptions ): Promise { const args: ConfigNodeArgs = (isConfigNodeArgs(argsOrInitialValue) ? argsOrInitialValue : { inheritedNodes, initialValue: argsOrInitialValue, options, }) as ConfigNodeArgs; const node = new ConfigNode(args); await node.init(); return node; } private constructor(args: ConfigPropertyNodeFactoryArgs | ConfigNodeArgs) { super(args); } protected get defaultPropertyNodeFactory(): ConfigNodePropertyFactory { return ConfigNode.create; } }