repo_description: Node.js JavaScript runtime ✨🐢🚀✨
repo_topics: javascript js linux macos mit node nodejs runtime windows
code: 'use strict';
  
  function init(list) {
    list._idleNext = list;
    list._idlePrev = list;
    return list;
  }
  
  // Show the most idle item.
  function peek(list) {
    if (list._idlePrev === list) return null;
    return list._idlePrev;
  }
  
  // Remove an item from its list.
  function remove(item) {
    if (item._idleNext) {
      item._idleNext._idlePrev = item._idlePrev;
    }
  
    if (item._idlePrev) {
      item._idlePrev._idleNext = item._idleNext;
    }
  
    item._idleNext = null;
    item._idlePrev = null;
  }
  
  // Remove an item from its list and place at the end.
  function append(list, item) {
    if (item._idleNext || item._idlePrev) {
      remove(item);
    }
  
    // Items are linked  with _idleNext -> (older) and _idlePrev -> (newer).
    // Note: This linkage (next being older) may seem counter-intuitive at first.
    item._idleNext = list._idleNext;
    item._idlePrev = list;
  
    // The list _idleNext points to tail (newest) and _idlePrev to head (oldest).
    list._idleNext._idlePrev = item;
    list._idleNext = item;
  }
  
  function isEmpty(list) {
    return list._idleNext === list;
  }
  
  module.exports = {
    init,
    peek,
    remove,
    append,
    isEmpty,
  };
  