in labextension/src/components/ParameterEditor.tsx [194:227]
private computeNewJSON(updateMetadata: boolean): void {
let valid = true;
const seen: Set<string> = new Set<string>();
const result: ParameterKV[] = [];
const nameErrors: ParameterEntryErrors = {};
const valueErrors: ParameterEntryErrors = {};
this.state.parameters.forEach((element, idx) => {
if (element.name.length === 0) {
valid = false;
nameErrors[idx] = 'Name must be specified';
} else {
if (element.name in seen) {
valid = false;
nameErrors[idx] = 'Duplicate parameter';
} else {
let val = element.value;
// this mostly exists to let folks pass numbers as numbers, but in theory they can pass any JSON through.
try {
val = JSON.parse(val);
} catch (SyntaxError) {} // eslint-disable-line no-empty
result.push({ name: element.name, value: val });
seen.add(element.name);
}
}
});
this.parametersObject = valid ? result : null;
this.nameErrors = nameErrors;
this.valueErrors = valueErrors;
this.onChange(this);
if (updateMetadata) {
this.setSavedParameters();
}
}