private validateJson()

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('.'));
    }
  }