HEX
Server: Apache/2.4.41 (Ubuntu)
System: Linux ip-172-31-42-149 5.15.0-1084-aws #91~20.04.1-Ubuntu SMP Fri May 2 07:00:04 UTC 2025 aarch64
User: ubuntu (1000)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/vhost/disk-apps/alq-webapp-boleteria/node_modules/hoopy/index.js
'use strict'

class Hoopy extends Array {
  constructor (size) {
    let index, isIndexOverflowed

    if (! isPositiveInteger(size)) {
      throw new TypeError('Argument `size` must be a positive integer.')
    }

    super(size)

    this.grow = by => {
      if (! isPositiveInteger(by)) {
        throw new TypeError('Argument `by` must be a positive integer.')
      }

      let i
      const newSize = size + by

      for (i = size; i < newSize; ++i) {
        this[i] = undefined
      }

      if (isIndexOverflowed) {
        for (i = 0; i <= index; ++i) {
          let j = size + i
          if (j >= newSize) {
            j %= newSize
          }
          this[j] = this[i]
          this[i] = undefined
        }
      }

      size = newSize
    }

    return new Proxy(this, {
      get (target, key) {
        if (isInteger(key)) {
          return target[getIndex(key, size)]
        }

        return target[key]
      },

      set (target, key, value) {
        if (isInteger(key)) {
          index = getIndex(key, size)
          target[index] = value

          if (Math.abs(key) >= size) {
            isIndexOverflowed = true
          } else {
            isIndexOverflowed = false
          }
        } else {
          target[key] = value
        }
        return true
      }
    })
  }
}

function isPositiveInteger (thing) {
  return isInteger(thing) && thing > 0
}

function isInteger (thing) {
  try {
    return +thing % 1 === 0
  } catch (error) {
    // Coercing symbols to numbers throws an error
  }

  return false
}

function getIndex (key, size) {
  if (key === 0) {
    return 0
  }

  if (key < 0) {
    return (size - Math.abs(key)) % size
  }

  return key % size
}

function nop () {
  throw new Error('Not implemented')
}

Hoopy.prototype.push = nop
Hoopy.prototype.pop = nop
Hoopy.prototype.shift = nop
Hoopy.prototype.unshift = nop

module.exports = Hoopy