blob: e4cc3bb03b807193dcafeed4c5019e05c77cc9d6 [file] [log] [blame]
import { Params, ParamSet } from '../json';
/**
* Add some params to a ParamSet.
*
* @param paramset - Key-value pairs where keys are strings and values are arrays of strings.
* @param params - Key-value pairs where both keys and values are strings.
* @param ignored - List of keys to ignore.
*/
export function add(paramset: ParamSet, params: Params, ignored: string[] = []): void {
Object.keys(params).forEach((key) => {
if (ignored.includes(key)) {
return;
}
const value = params[key];
const values = paramset[key] || [];
if (!values.includes(value)) {
values.push(value);
paramset[key] = values;
}
});
}
/**
* Determines if the params given match the ParamSet.
*
* @param paramset - Key-value pairs where keys are strings and values are arrays of strings
* or regexes (see skbug.com/9587).
* @param params - Key-value pairs where both keys and values are strings.
*
* @return True if every key in ParamSet is present in 'params' and
* the value seen in params is in the ParamSet values or it matches one of
* the regexes.
*/
export function match(paramset: ParamSet, params: Params): boolean {
const keys = Object.keys(paramset);
for (let i = 0; i < keys.length; i++) {
const key = keys[i];
if (paramset[key]!.includes(params[key])) {
continue;
}
const values = paramset[key] || [];
let valMatched = false;
for (let j = 0; j < values.length; j++) {
const re = new RegExp(`^${values[j]}$`);
if (re.test(params[key])) {
valMatched = true;
break;
}
}
if (!valMatched) {
return false;
}
}
return true;
}