HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //home/arjun/projects/buyercall/node_modules/vuelidate/src/params.js
const stack = []

// exported for tests
export let target = null
export const _setTarget = (x) => {
  target = x
}

export function pushParams() {
  if (target !== null) {
    stack.push(target)
  }
  target = {}
}

export function popParams() {
  const lastTarget = target
  const newTarget = (target = stack.pop() || null)
  if (newTarget) {
    if (!Array.isArray(newTarget.$sub)) {
      newTarget.$sub = []
    }
    newTarget.$sub.push(lastTarget)
  }
  return lastTarget
}

function addParams(params) {
  if (typeof params === 'object' && !Array.isArray(params)) {
    target = { ...target, ...params }
  } else {
    throw new Error('params must be an object')
  }
}

function withParamsDirect(params, validator) {
  return withParamsClosure((add) => {
    return function(...args) {
      add(params)
      return validator.apply(this, args)
    }
  })
}

function withParamsClosure(closure) {
  const validator = closure(addParams)
  return function(...args) {
    pushParams()
    try {
      return validator.apply(this, args)
    } finally {
      popParams()
    }
  }
}

export function withParams(paramsOrClosure, maybeValidator) {
  if (typeof paramsOrClosure === 'object' && maybeValidator !== undefined) {
    return withParamsDirect(paramsOrClosure, maybeValidator)
  }
  return withParamsClosure(paramsOrClosure)
}