diff --git a/src/core/server/config/object_to_config_adapter.test.ts b/src/core/server/config/object_to_config_adapter.test.ts new file mode 100644 index 0000000000000..75d6a40f5f630 --- /dev/null +++ b/src/core/server/config/object_to_config_adapter.test.ts @@ -0,0 +1,34 @@ +/* + * Licensed to Elasticsearch B.V. under one or more contributor + * license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright + * ownership. Elasticsearch B.V. licenses this file to you under + * the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { ObjectToConfigAdapter } from './object_to_config_adapter'; + +describe('ObjectToConfigAdapter', () => { + describe('#getFlattenedPaths()', () => { + it('considers arrays as final values', () => { + const data = { + a: 'string', + b: ['an', 'array'], + }; + const config = new ObjectToConfigAdapter(data); + + expect(config.getFlattenedPaths()).toEqual(['a', 'b']); + }); + }); +}); diff --git a/src/core/server/config/object_to_config_adapter.ts b/src/core/server/config/object_to_config_adapter.ts index b6ec772603565..d4c2f73364060 100644 --- a/src/core/server/config/object_to_config_adapter.ts +++ b/src/core/server/config/object_to_config_adapter.ts @@ -19,6 +19,7 @@ import { cloneDeep, get, has, set } from 'lodash'; +import { getFlattenedObject } from '../../utils'; import { Config, ConfigPath } from './'; /** @@ -41,24 +42,10 @@ export class ObjectToConfigAdapter implements Config { } public getFlattenedPaths() { - return [...flattenObjectKeys(this.rawConfig)]; + return Object.keys(getFlattenedObject(this.rawConfig)); } public toRaw() { return cloneDeep(this.rawConfig); } } - -function* flattenObjectKeys( - obj: { [key: string]: any }, - path: string = '' -): IterableIterator { - if (typeof obj !== 'object' || obj === null) { - yield path; - } else { - for (const [key, value] of Object.entries(obj)) { - const newPath = path !== '' ? `${path}.${key}` : key; - yield* flattenObjectKeys(value, newPath); - } - } -}