typeMapGetSnapshot = (parent, key, snapshot) => {
  let v = parent._map.get(key) || null;

  while (v !== null && (!snapshot.sv.has(v.id.client) || v.id.clock >= (snapshot.sv.get(v.id.client) || 0))) {
    v = v.left;
  }

  return v !== null && isVisible(v, snapshot) ? v.content.getContent()[v.length - 1] : undefined;
}
@param {AbstractType<any>} parent
@param {string} key
@param {Snapshot} snapshot
@return {Object<string,any>|number|null|Array<any>|string|Uint8Array|AbstractType<any>|undefined}

@private
@function