Constructs a CText.
The children (registered Collab properties), keyed by name.
This map should only be read, not mutated. It is exposed to subclasses as a convenience for methods that loop over all children.
Internal (this/parent) use only.
This Collab's name, which distinguishes it among its siblings in the tree of Collabs.
Internal (this/parent) use only.
This Collab's parent in the tree of Collabs.
The ambient [[IRuntime]].
Use this to access utilities like [[IRuntime.replicaID]].
The length of the text string.
The abstract total order underlying this text CRDT.
Access this to construct separate LocalList views on top of the same total order.
Returns an iterator for characters (values) in the text string, in order.
Internal (parent) use only.
By default, this method returns true if canGC
returns true
on every child. Override to change this behavior.
See [[Collab.canGC]].
Returns a string consisting of the single character
(UTF-16 codepoint) at index
.
Deletes every character in the text string.
Delete count
characters starting at index
, i.e., characters
[index, index + count - 1)
.
All later characters shift to the left,
decreasing their indices by count
.
The number of characters to delete.
Defaults to 1 (delete the character at index
only).
Emits an event, which triggers all the registered event handlers.
See [[CollabEventsRecord]] for advice on what events to emit.
This is a wrapper around [[EventEmitter.emit]] that forces events to extend [[CollabEvent]] and also emits an "Any" event.
Set to true to skip emitting an "Any" event.
Returns an iterator of [index, value, position] tuples for every character (value) in the text string, in order.
Internal (parent) use only.
By default, this methods calls finalize
on every child.
Override to change this behavior,
e.g., to add your own finalization steps
(but consider calling super.finalize()
).
Returns the value at position, or undefined if it is not currently present (hasPosition returns false).
The position currently at index.
Returns whether position is currently present in the list, i.e., its value is present.
Returns the current index of position.
If position is not currently present in the list (hasPosition returns false), then the result depends on searchDir:
Inserts values as a substring at the given index.
All values currently at or after index
shift
to the right, increasing their indices by values.length
.
The insertion index in the range
[0, this.length]
. If this.length
, the values
are appended to the end of the list.
The characters to insert. They are inserted as individual UTF-16 codepoints.
Internal (parent) use only.
Called by this Collab's parent to load saved state. See [[Collab.load]].
A CObject subclass may override this method to load additional state from [[Collab.save]] or to perform extra setup - e.g., refreshing functional views that were not automatically updated by children's load events. It is recommended to do so as follows:
load(savedStateTree: SavedStateTree | null, meta: SavedStateMeta) {
super.load(savedStateTree, meta);
// Process your extra saved state from savedStateTree.self.
const savedState = savedStateTree === null? null: savedStateTree.self!;
...
// Perform extra setup as needed.
...
}
Registers an event handler that is triggered when the event happens.
Name of the event to listen on.
Callback that handles the event.
If true, the event handler is triggered at most once (the next time the event happens), then unsubscribed.
An "off" function that removes the event handler when called.
Registers an event handler that is triggered when the event happens.
An "off" function that removes the event handler when called.
Returns an iterator for present positions, in list order.
Inserts values as a substring at the end of the text.
Equivalent to this.insert(this.length, values)
.
The characters to push. They are inserted as individual UTF-16 codepoints.
Registers a [[Collab]] property of this CObject with the given name, making it one of our children.
Typically, you will call this method during the constructor in the style:
this.foo = this.registerCollab("foo", (init) => new FooClass(init, constructor args...));
where readonly foo: FooClass;
is a Collab property. See
Data Modeling
for examples.
Registrations must be identical across all replicas.
See also: CRuntime.registerCollab.
A name for this property, unique among
this class's registerCollab
calls.
We recommend using the same name as the property,
but you can also use short strings to reduce
network usage ("", "0", "1", ...).
A callback that uses the given [[InitToken]] to construct the registered [[Collab]].
The registered Collab.
Internal (parent) use only.
Returns saved state describing the current state of this CObject. See [[Collab.save]].
A CObject subclass may override this method to save additional state. It is recommended to do so as follows:
save() {
const ans = super.save();
// Put your extra saved state in ans.self, which is otherwise unused.
ans.self = <subclass's saved state>;
return ans;
}
Broadcasts a message to other replicas of this Collab. The message will be delivered to all replicas' receive, including locally.
For convenience, the message may be expressed as a stack of
(Uint8Array | string)
,
instead of just a single Uint8Array. This is
useful for parents sending messages on behalf of their children;
see the implementation of [[CObject]] for an example.
The message to send, in the form of a stack of Uint8Arrays. Note that this method may mutate it in-place.
Returns a section of this text string, with behavior like String.slice.
Deletes and inserts values like Array.splice.
If deleteCount
is provided, this method first deletes
deleteCount
values starting at start
.
Next, this method inserts values
as a substring at start
.
All values currently at or after start + deleteCount
shift to accommodate the change in length.
The characters to insert. They are inserted as individual UTF-16 codepoints.
The deleted substring.
Returns the text string as an ordinary string.
Inserts values as a substring at the beginning of the text.
Equivalent to this.insert(0, values)
.
The characters to unshift. They are inserted as individual UTF-16 codepoints.
Returns an iterator for characters (values) in the text string, in order.
See also: toString, which returns the entire text as a string.
Generated using TypeDoc
A collaborative text string, with the usual behavior for collaborative text editing.
CText is functionally equivalent to a CValueList
<string>
where each value is a single character (UTF-16 codepoint), but with an API more like string.It is not safe to modify a CText while iterating over it. The iterator will attempt to throw an exception if it detects such modification, but this is not guaranteed.
See also:
<string>
: for a string that can be set and get atomically instead of edited like text.