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/object-identity-map/index.js
const entries = require('object.entries')

function sortEntriesByKey ([ a ], [ b ]) {
  return a > b ? 1 : -1
}

function rebuildReducer (target, [ key, value ]) {
  target[key] = rebuildAsOrdered(value)
  return target
}

function rebuildAsOrdered (source) {
  let target

  if (Array.isArray(source)) {
    target = []
  } else if (source && typeof source === 'object') {
    target = {}
  } else {
    return source
  }

  return entries(source)
    .sort(sortEntriesByKey)
    .reduce(rebuildReducer, target)
}

function labelsToKey (labels) {
  return JSON.stringify(rebuildAsOrdered(labels))
}

class ObjectIdentityMap extends Map {
  has (labels) {
    return super.has(labelsToKey(labels))
  }

  get (labels) {
    return super.get(labelsToKey(labels))
  }

  set (labels, value) {
    return super.set(labelsToKey(labels), value)
  }

  delete (labels) {
    return super.delete(labelsToKey(labels))
  }

  ensure (labels, build) {
    const key = labelsToKey(labels)
    if (!super.has(key)) {
      super.set(key, build(labels))
    }
    return super.get(key)
  }
}

module.exports = ObjectIdentityMap