HEX
Server: nginx/1.24.0
System: Linux nowruzgan 6.8.0-57-generic #59-Ubuntu SMP PREEMPT_DYNAMIC Sat Mar 15 17:40:59 UTC 2025 x86_64
User: babak (1000)
PHP: 8.3.6
Disabled: NONE
Upload Files
File: //usr/share/opensearch-dashboards/node_modules/mapcap/index.js
const assert = require('assert')

module.exports = function mapcap (object, cap, lru = false) {
  assert.strictEqual(typeof cap, 'number', 'cap should be a number')
  assert.strictEqual(typeof lru, 'boolean', 'lru should be a boolean')

  let target = object
  if (!(object instanceof Map)) {
    object = class Sub extends object {}
    target = object.prototype
  }

  wrapSet(target, cap)
  if (lru) wrapGet(target)

  return object
}

function wrapSet (target, cap) {
  shimmer(target, 'set', original => {
    return function set (key, value) {
      const res = original.apply(this, arguments)
      if (this.size > cap) {
        this.delete(this.keys().next().value)
      }
      return res
    }
  })
}

function wrapGet (target) {
  shimmer(target, 'get', original => {
    return function get (key) {
      const value = original.apply(this, arguments)
      this.delete(key)
      this.set(key, value)
      return value
    }
  })
}

function shimmer (obj, method, replacer) {
  obj[method] = replacer(obj[method])
}