/**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;