Source: core/core.validators.js

/**
 * Validate basic structures.
 *
 * @example
 * //Returns true
 * VJS.Core.Validators.matrix4(new THREE.Matrix4());
 *
 * //Returns false
 * VJS.Core.Validators.matrix4(new THREE.Vector3());
 *
 * @module core/validators
 */

export default class Validators {
  /**
   * Validates a matrix as a THREEJS.Matrix4
   * link
   * @param {Object} objectToTest - The object to be tested.
   * @return {boolean} True if valid Matrix4, false if NOT.
   */
  static matrix4(objectToTest) {
    if (
      !(
        objectToTest !== null &&
        typeof objectToTest !== 'undefined' &&
        objectToTest.hasOwnProperty('elements') &&
        objectToTest.elements.length === 16 &&
        typeof objectToTest.identity === 'function' &&
        typeof objectToTest.copy === 'function' &&
        typeof objectToTest.determinant === 'function'
      )
    ) {
      return false;
    }

    return true;
  }

  /**
   * Validates a vector as a THREEJS.Vector3
   * @param {Object} objectToTest - The object to be tested.
   * @return {boolean} True if valid Vector3, false if NOT.
   */
  static vector3(objectToTest) {
    if (
      !(
        objectToTest !== null &&
        typeof objectToTest !== 'undefined' &&
        objectToTest.hasOwnProperty('x') &&
        objectToTest.hasOwnProperty('y') &&
        objectToTest.hasOwnProperty('z') &&
        !objectToTest.hasOwnProperty('w')
      )
    ) {
      return false;
    }

    return true;
  }

  /**
   * Validates a box.
   *
   * @example
   * // a box is defined as
   * let box = {
   *   center: THREE.Vector3,
   *   halfDimensions: THREE.Vector3
   * }
   *
   * @param {Object} objectToTest - The object to be tested.
   * @return {boolean} True if valid box, false if NOT.
   */
  static box(objectToTest) {
    if (
      !(
        objectToTest !== null &&
        typeof objectToTest !== 'undefined' &&
        objectToTest.hasOwnProperty('center') &&
        this.vector3(objectToTest.center) &&
        objectToTest.hasOwnProperty('halfDimensions') &&
        this.vector3(objectToTest.halfDimensions) &&
        objectToTest.halfDimensions.x >= 0 &&
        objectToTest.halfDimensions.y >= 0 &&
        objectToTest.halfDimensions.z >= 0
      )
    ) {
      return false;
    }

    return true;
  }

  /**
   * Validates a ray.
   *
   * @example
   * // a ray is defined as
   * let ray = {
   *   postion: THREE.Vector3,
   *   direction: THREE.Vector3
   * }
   *
   * @param {Object} objectToTest - The object to be tested.
   * @return {boolean} True if valid ray, false if NOT.
   */
  static ray(objectToTest) {
    if (
      !(
        objectToTest !== null &&
        typeof objectToTest !== 'undefined' &&
        objectToTest.hasOwnProperty('position') &&
        this.vector3(objectToTest.position) &&
        objectToTest.hasOwnProperty('direction') &&
        this.vector3(objectToTest.direction)
      )
    ) {
      return false;
    }

    return true;
  }
}