HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux ip-10-0-8-47 6.8.0-1021-aws #23~22.04.1-Ubuntu SMP Tue Dec 10 16:31:58 UTC 2024 aarch64
User: ubuntu (1000)
PHP: 8.1.2-1ubuntu2.22
Disabled: NONE
Upload Files
File: /var/www/api.javaapp.co.uk_old/node_modules/node-input-validator/lib/index.js
const messages = require('./messages/index');
const rules = require('./rules/index');
const Validator = require('./validator');
const objUtil = require('./util/obj');
const empty = require('./util/empty');

/**
* set default language
* @param {*} lang
*/
function setLang(lang) {
  messages.defaultLang = lang;
}

function extend(name, callback, isImplicit = false) {
  rules[name] = callback;
  if (isImplicit) Validator.addImplicitRule(name);
}

/**
* extend/update validation rule default messages
* @param {Object} newMessages
* @param {string} lang
*/
function extendMessages(newMessages, lang = 'en') {
  if (typeof messages[lang] === 'undefined') {
    messages[lang] = {};
  }
  messages[lang] = Object.assign(messages[lang], newMessages);
}

/**
 * add/update your own custom validation messages
 * @param {*} customMessages
 * @param {*} lang
 */
function addCustomMessages(customMessages, lang = 'en') {
  if (typeof messages[lang] === 'undefined') {
    messages[lang] = {};
  }
  messages[lang].$custom = Object.assign(messages[lang].$custom || {}, customMessages);
}

function niceNames(attributes, lang = 'en') {
  messages[lang].$niceNames = Object.assign(messages[lang].$niceNames || {}, attributes);
}

/* istanbul ignore next */
function koa() {
  return async (ctx, next) => {
    // @ts-ignore
    ctx.validationErrors = function validationErrors(errors) {
      return {
        body: {
          message: 'The given data is invalid.',
          errors,
        },
      };
    };

    ctx.validate = async function validate(rulesArray, inputs, useMessages) {
      const v = new Validator(
        inputs || { ...this.request.body, ...this.request.files },
        rulesArray || {},
        useMessages || {},
      );

      if (await v.fails()) {
        this.throw(422, this.validationErrors(v.errors));
      }

      return v;
    };

    ctx.validator = (inputs, rulesArray, useMessages) => new Validator(
      inputs || { ...this.request.body, ...this.request.files },
      rulesArray || {},
      useMessages || {},
    );

    try {
      await next();
    } catch (err) {
      if (err.status && err.status === 422) {
        ctx.type = 'json';
        ctx.status = 422;
        ctx.body = err.body;
        return;
      }
      throw err;
    }
  };
}

/**
 * enable/disable multiple errors output
 * @param {boolean} sure
 */
function bailable(sure) {
  Validator.bailable(sure);
}

function assert(validationRules) {
  Object.keys(validationRules).forEach((key) => {
    const rawRules = validationRules[key];
    let arrayRules = [];
    if (Array.isArray(rawRules)) {
      arrayRules = rawRules;
    } else {
      rawRules.split('|').forEach((raw) => {
        const [ruleName] = raw.split(':');
        arrayRules.push(ruleName);
      });
    }
    arrayRules.forEach((rule) => {
      if (typeof rules[rule] !== 'function') {
        throw new Error(`Rule ${rule} used for attribute ${key} is invalid.`);
      }
    });
  });

  return validationRules;
}

module.exports = {
  Validator,
  setLang,
  extend,
  extendMessages,
  addCustomMessages,
  niceNames,
  koa,
  bailable,
  assert,
  setStrNotationRepetition: objUtil.setStrNotationRepetition,
  empty,
};