in authui-container/common/validator.ts [400:438]
private validateJson(obj: any, pathSoFar: string[] = []) {
if (isNonEmptyArray(obj)) {
const key = pathSoFar.pop() || '';
pathSoFar.push(`${key}[]`);
obj.forEach((item: any) => {
this.validateJson(item, pathSoFar);
});
pathSoFar.pop();
if (key) {
pathSoFar.push(key);
}
} else if (isNonNullObject(obj) && !isEmptyObject(obj)) {
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
pathSoFar.push(key);
this.validateJson(obj[key], pathSoFar);
pathSoFar.pop();
}
}
} else if (isEmptyObject(obj)) {
const validator = this.getValidator(pathSoFar);
if (!validator) {
throw new Error(`Invalid key or type "${pathSoFar.join('.')}"`);
}
} else if (isArray(obj) && obj.length === 0) {
const key = pathSoFar.pop() || '';
pathSoFar.push(`${key}[]`);
const validator = this.getValidator(pathSoFar);
if (!validator) {
throw new Error(`Invalid key or type "${pathSoFar.join('.')}"`);
}
} else {
const validator = this.getValidator(pathSoFar);
if (!validator) {
throw new Error(`Invalid key or type "${pathSoFar.join('.')}"`);
}
validator(obj, pathSoFar.join('.'));
}
}