// Copyright (C) 2020 The Android Open Source Project // // Licensed 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 {createEmptyRecordConfig, RecordConfig} from '../common/state'; interface RecordConfigValidationResult { config: RecordConfig; errorMessage?: string; } export function validateRecordConfig( config: {[key: string]: string|number|boolean|string[]|null}): RecordConfigValidationResult { // Remove the keys that are not in both createEmptyRecordConfig and // config. const newConfig: RecordConfig = createEmptyRecordConfig(); const ignoredKeys: string[] = []; // TODO(bsebastien): Also check that types of properties match. Object.entries(newConfig).forEach(([key, value]) => { if (key in config && typeof value === typeof config[key]) { newConfig[key] = config[key]; } else { ignoredKeys.push(key); } }); // Check if config has additional keys that are not in // createEmptyRecordConfig(). for (const key of Object.keys(config)) { if (!(key in newConfig)) { ignoredKeys.push(key); } } if (ignoredKeys.length > 0) { // At least return an empty RecordConfig if nothing match. return { errorMessage: 'Warning: Loaded config contains incompatible keys.\n\ It may have been created with an older version of the UI.\n\ Ignored keys: ' + ignoredKeys.join(' '), config: newConfig, }; } return {config: newConfig}; }