HEX
Server: LiteSpeed
System: Linux houston.panomity.com 6.8.0-100-generic #100-Ubuntu SMP PREEMPT_DYNAMIC Tue Jan 13 16:40:06 UTC 2026 x86_64
User: nudepix (1011)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: //opt/coauthor/node_modules/rope-sequence/README.md
# rope-sequence

This module implements a single data type, `RopeSequence`, which is a
persistent sequence type implemented as a loosely-balanced
[rope](https://www.cs.rit.edu/usr/local/pub/jeh/courses/QUARTERS/FP/Labs/CedarRope/rope-paper.pdf).
It supports appending, prepending, and slicing without doing a full
copy. Random access is somewhat more expensive than in an array
(logarithmic, with some overhead), but should still be relatively
fast.

Licensed under the MIT license.

## class `RopeSequence<T>`

`static `**`from`**`(?union<[T], RopeSequence<T>>) → RopeSequence<T>`

Create a rope representing the given array, or return the rope itself
if a rope was given.

`static `**`empty`**`: RopeSequence<T>`

The empty rope.

**`length`**`: number`

The length of the rope.

**`append`**`(union<[T], RopeSequence<T>>) → RopeSequence<T>`

Append an array or other rope to this one, returning a new rope.

**`prepend`**`(union<[T], RopeSequence<T>>) → RopeSequence<T>`

Prepend an array or other rope to this one, returning a new rope.

**`slice`**`(from: ?number = 0, to: ?number = this.length) → RopeSequence<T>`

Create a rope repesenting a sub-sequence of this rope.

**`get`**`(index: number) → T`

Retrieve the element at the given position from this rope.

**`forEach`**`(f: fn(element: T, index: number) → ?bool, from: ?number, to: ?number)`

Call the given function for each element between the given indices.
This tends to be more efficient than looping over the indices and
calling `get`, because it doesn't have to descend the tree for every
element.

`to` may be less then `from`, in which case the iteration will happen
in reverse (starting at index `from - 1`, down to index `to`.

The iteration function may return `false` to abort iteration early.

**`map`**`(f: fn(element: T, index: number) → U, from: ?number, to: ?number) → [U]`

Map the given functions over the elements of the rope, producing a
flat array.

**`flatten`**`() → [T]`

Return the content of this rope as an array.