export namespace config { export class DebuggerConfig { enable: boolean; static createFrom(source: any = {}) { return new DebuggerConfig(source); } constructor(source: any = {}) { if ('string' === typeof source) source = JSON.parse(source); this.enable = source["enable"]; } } export class ServerConfig { host: string; port: number; static createFrom(source: any = {}) { return new ServerConfig(source); } constructor(source: any = {}) { if ('string' === typeof source) source = JSON.parse(source); this.host = source["host"]; this.port = source["port"]; } } export class Config { server?: ServerConfig; debug?: DebuggerConfig; static createFrom(source: any = {}) { return new Config(source); } constructor(source: any = {}) { if ('string' === typeof source) source = JSON.parse(source); this.server = this.convertValues(source["server"], ServerConfig); this.debug = this.convertValues(source["debug"], DebuggerConfig); } convertValues(a: any, classs: any, asMap: boolean = false): any { if (!a) { return a; } if (a.slice) { return (a as any[]).map(elem => this.convertValues(elem, classs)); } else if ("object" === typeof a) { if (asMap) { for (const key of Object.keys(a)) { a[key] = new classs(a[key]); } return a; } return new classs(a); } return a; } } }