All files / src/dom data.js

100% Statements 17/17
100% Branches 14/14
100% Functions 3/3
100% Lines 17/17

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56                      15x       573x 561x     573x       573x   1x 1x     572x       489x 288x     201x       36x 3x     33x   33x     33x 32x        
/**
 * --------------------------------------------------------------------------
 * Bootstrap (v5.2.3): dom/data.js
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
 * --------------------------------------------------------------------------
 */
 
/**
 * Constants
 */
 
const elementMap = new Map()
 
export default {
  set(element, key, instance) {
    if (!elementMap.has(element)) {
      elementMap.set(element, new Map())
    }
 
    const instanceMap = elementMap.get(element)
 
    // make it clear we only want one instance per element
    // can be removed later when multiple key/instances are fine to be used
    if (!instanceMap.has(key) && instanceMap.size !== 0) {
      // eslint-disable-next-line no-console
      console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`)
      return
    }
 
    instanceMap.set(key, instance)
  },
 
  get(element, key) {
    if (elementMap.has(element)) {
      return elementMap.get(element).get(key) || null
    }
 
    return null
  },
 
  remove(element, key) {
    if (!elementMap.has(element)) {
      return
    }
 
    const instanceMap = elementMap.get(element)
 
    instanceMap.delete(key)
 
    // free up element references if there are no instances left for an element
    if (instanceMap.size === 0) {
      elementMap.delete(element)
    }
  }
}