stringify_params.ts (1512B)
1 import { TestParams } from '../../framework/fixture.js'; 2 import { assert } from '../../util/util.js'; 3 import { JSONWithUndefined, badParamValueChars, paramKeyIsPublic } from '../params_utils.js'; 4 5 import { stringifyParamValue, stringifyParamValueUniquely } from './json_param_value.js'; 6 import { kParamKVSeparator, kParamSeparator, kWildcard } from './separators.js'; 7 8 export function stringifyPublicParams(p: TestParams, addWildcard = false): string { 9 const parts = Object.keys(p) 10 .filter(k => paramKeyIsPublic(k)) 11 .map(k => stringifySingleParam(k, p[k])); 12 13 if (addWildcard) parts.push(kWildcard); 14 15 return parts.join(kParamSeparator); 16 } 17 18 /** 19 * An _approximately_ unique string representing a CaseParams value. 20 */ 21 export function stringifyPublicParamsUniquely(p: TestParams): string { 22 const keys = Object.keys(p).sort(); 23 return keys 24 .filter(k => paramKeyIsPublic(k)) 25 .map(k => stringifySingleParamUniquely(k, p[k])) 26 .join(kParamSeparator); 27 } 28 29 export function stringifySingleParam(k: string, v: JSONWithUndefined) { 30 return `${k}${kParamKVSeparator}${stringifySingleParamValue(v)}`; 31 } 32 33 function stringifySingleParamUniquely(k: string, v: JSONWithUndefined) { 34 return `${k}${kParamKVSeparator}${stringifyParamValueUniquely(v)}`; 35 } 36 37 function stringifySingleParamValue(v: JSONWithUndefined): string { 38 const s = stringifyParamValue(v); 39 assert( 40 !badParamValueChars.test(s), 41 `JSON.stringified param value must not match ${badParamValueChars} - was ${s}` 42 ); 43 return s; 44 }