From 9e5bf0fd6fdbf83fb927ca1f8822b46be7aa5fbb Mon Sep 17 00:00:00 2001 From: Rudolf Meijering Date: Wed, 17 Jul 2019 15:08:41 +0100 Subject: [PATCH] Ensure that all option paramaters are picked and renamed --- .../saved_objects/saved_objects_client.ts | 35 +++++++++++++------ 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/src/core/public/saved_objects/saved_objects_client.ts b/src/core/public/saved_objects/saved_objects_client.ts index 8d034ee69290917..c62dca341ada1c8 100644 --- a/src/core/public/saved_objects/saved_objects_client.ts +++ b/src/core/public/saved_objects/saved_objects_client.ts @@ -46,6 +46,8 @@ export { SavedObjectsMigrationVersion, } from '../../server/types'; +type PromiseType> = T extends Promise ? U : never; + interface RequestParams { method: 'POST' | 'GET' | 'PUT' | 'DELETE'; path: string; @@ -250,7 +252,10 @@ export class SavedObjectsClient { }); return request.then(resp => { resp.saved_objects = resp.saved_objects.map(d => this.createSavedObject(d)); - return renameKeys({ saved_objects: 'savedObjects' }, resp) as SavedObjectsBatchResponse; + return pickAndRenameKeys>>( + { saved_objects: 'savedObjects' }, + resp + ) as SavedObjectsBatchResponse; }); }; @@ -287,15 +292,19 @@ export class SavedObjectsClient { options: SavedObjectsFindOptions = {} ): Promise> => { const path = this.getPath(['_find']); - const query = renameKeys( + const query = pickAndRenameKeys( { - type: 'type', - search: 'search', - searchFields: 'search_fields', - page: 'page', - perPage: 'per_page', + defaultSearchOperator: 'defaultSearchOperator', fields: 'fields', hasReference: 'has_reference', + namespace: 'namespace', + page: 'page', + perPage: 'per_page', + search: 'search', + searchFields: 'search_fields', + sortField: 'sortField', + sortOrder: 'sortOrder', + type: 'type', }, options ); @@ -307,7 +316,7 @@ export class SavedObjectsClient { }); return request.then(resp => { resp.saved_objects = resp.saved_objects.map(d => this.createSavedObject(d)); - return renameKeys( + return pickAndRenameKeys>>( { saved_objects: 'savedObjects', total: 'total', @@ -363,7 +372,10 @@ export class SavedObjectsClient { }); return request.then(resp => { resp.saved_objects = resp.saved_objects.map(d => this.createSavedObject(d)); - return renameKeys({ saved_objects: 'savedObjects' }, resp) as SavedObjectsBatchResponse; + return pickAndRenameKeys>>( + { saved_objects: 'savedObjects' }, + resp + ) as SavedObjectsBatchResponse; }); }; @@ -433,7 +445,10 @@ export class SavedObjectsClient { * @param keysMap - a map of the form `{oldKey: newKey}` * @param obj - the object whose own properties will be renamed */ -const renameKeys = (keysMap: Record, obj: Record) => +const pickAndRenameKeys = >( + keysMap: Record, + obj: Record +) => Object.keys(obj).reduce((acc, key) => { return typeof keysMap[key] === 'undefined' ? acc