Utils/Validator.js

/**Copyright (c) 2009-2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved.**/
"use strict";const moment=require("moment"),Utils=require("./Utils"),Ajv2019=require("ajv/dist/2019"),ajvErrors=require("ajv-errors");
/** 
 * Class containing different validators.
 * @memberof mdxWebApiCore.Utils
 * */
class Validator{
/**
     * Used to check if input is a finite number.
     * @public
     * @static
     * @param {string} input
     * @returns {boolean} Returns a boolean signifying whether the input was a finite number
     * @example
     * const mdx = require("@nvidia-mdx/web-api-core");
     * // returns true
     * let result = mdx.Utils.Validator.isStringAFiniteNumber("12.5");
     */
static isStringAFiniteNumber(e){return!(!isFinite(e)||"string"!=typeof e||""===(e=e.trim()))}
/**
     * Used to check if input is a finite integer.
     * @public
     * @static
     * @param {string} input
     * @returns {boolean} Returns a boolean signifying whether the input was a finite integer
     * @example
     * const mdx = require("@nvidia-mdx/web-api-core");
     * // returns false
     * let result = mdx.Utils.Validator.isStringAFiniteInteger("12.5");
     */static isStringAFiniteInteger(e){return!(!this.isStringAFiniteNumber(e)||Number(e)%1!=0)}
/**
     * Checks if input date string is in ISO 8601 format.
     * @public
     * @static
     * @param {string} timestamp
     * @returns {boolean} Returns a boolean signifying whether the input was a valid timestamp
     * @example
     * const mdx = require("@nvidia-mdx/web-api-core");
     * let result = mdx.Utils.Validator.isValidTimestamp("2023-01-12T11:20:10.000Z");
     */static isValidISOTimestamp(e){return moment(e,"YYYY-MM-DDTHH:mm:ss.SSSZ",!0).isValid()}
/**
     * Checks if input time range is valid.
     * @public
     * @static
     * @param {string} fromTimestamp
     * @param {string} toTimestamp
     * @returns {boolean} Returns a boolean signifying whether the input time range was valid
     * @example
     * const mdx = require("@nvidia-mdx/web-api-core");
     * let result = mdx.Utils.Validator.isValidTimeRange("2023-01-12T11:20:10.000Z","2023-01-12T14:20:10.000Z");
     */static isValidTimeRange(e,r){return this.isValidISOTimestamp(e)?this.isValidISOTimestamp(r)?Utils.tsCompare(e,"<",r)?{valid:!0,reason:null}:{valid:!1,reason:"fromTimestamp is not lesser than toTimestamp."}:{valid:!1,reason:"Invalid toTimestamp."}:{valid:!1,reason:"Invalid fromTimestamp."}}
/**
     * Checks if a json input follows a schema.
     * @public
     * @static
     * @param {Object} jsonInput
     * @param {Object} schema
     * @param {boolean} [coerceTypes=true]
     * @returns {{valid:boolean,reason:?string}} Returns the validity of the json input.
     * @example
     * const mdx = require("@nvidia-mdx/web-api-core");
     * let result = mdx.Utils.Validator.validateJsonSchema(jsonInput,schema);
     */static validateJsonSchema(e,r,i=!0){let t={allErrors:!0,useDefaults:!0};i&&(t.coerceTypes="array");const s=new Ajv2019(t);ajvErrors(s);const a=s.compile(r),n=a(e);if(n)return{valid:n,reason:null};{let e=new Array;for(let r of a.errors)r.schemaPath.includes("oneOf")&&"oneOf"!==r.keyword||e.push(r);let r="";for(let i=0;i<e.length;i++){let t=e[i];0!=i&&(r+=" "),r+=`Error ${i+1}: ${t.message}`}return r=r.replace(/"/g,"'"),{valid:n,reason:`Invalid input. ${r}`}}}}module.exports=Validator;