splice(start, deleteCount, items) {
    /** @type {number} */
    const count = deleteCount || 0

    this.setCursor(Math.trunc(start))
    const removed = this.right.splice(
      this.right.length - count,
      Number.POSITIVE_INFINITY
    )
    if (items) chunkedPush(this.left, items)
    return removed.reverse()
  }
Mimics the behavior of Array.prototype.splice() except for the change of
interface necessary to avoid segfaults when patching in very large arrays.

This operation moves cursor is moved to `start` and results in the cursor
placed after any inserted items.

@param {number} start
  Start;
  zero-based index at which to start changing the array;
  negative numbers count backwards from the end of the array and values
  that are out-of bounds are clamped to the appropriate end of the array.
@param {number | null | undefined} [deleteCount=0]
  Delete count (default: `0`);
  maximum number of elements to delete, starting from start.
@param {Array<T> | null | undefined} [items=[]]
  Items to include in place of the deleted items (default: `[]`).
@return {Array<T>}
  Any removed items.