The value type, which is a Collab.
The type of arguments to add.
Constructs a CSet with the given valueConstructor
.
Callback used to construct a value Collab with the given [[InitToken]] and arguments to add. See collections of Collabs for example usage.
A serializer for AddArgs
as an array.
Defaults to [[DefaultSerializer]].
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]].
Adds a value to the set using args.
The args are broadcast to all replicas in serialized form.
Every replica then passes them to valueConstructor
to construct the actual
value of type C, a new Collab that is collaborative as usual.
The added value.
Deletes the given value, making it no longer present in this set.
value
is deleted permanently and
can no longer be used; future and concurrent operations on that value
are ignored. Local operations will succeed but will not affect
remote replicas. The value can perform cleanup in its
[[Collab.finalize]] method.
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.
Internal (parent) use only.
Called by this Collab's parent when it has been deleted from a collection on the local replica and can no longer be used (e.g., due to CSet.delete on this or an ancestor). A Collab implementation can implement this method to clean up external resources, e.g., associated DOM elements.
finalize
has no relation to the JavaScript garbage collector or
canGC.
By default, this method does nothing.
Inverse of idOf.
Specifically, given a [[CollabID]] returned by idOf on some replica of
this CSet, returns this replica's copy of the original
descendant
.
If the original descendant
has been deleted from this
set, this method will usually return undefined
. The exception
is if descendant
was just deleted from this set.
In that case, this method will
still return the original descendant
until the end of
the deleting update.
Thus event handlers within the same transaction can still
get the deleted value.
A CollabID from idOf.
Internal (parent) use only.
If provided, treat id.collabIDPath
as if
it starts at startIndex instead of 0.
Returns the AddArgs
used to add value
.
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.
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.
Generated using TypeDoc
A collaborative set with mutable values of type C.
Values are internally mutable. Specifically, each value is its own [[Collab]], and operations on that Collab are collaborative as usual.
Unlike a normal
Set<C>
, you do not add values directly. Instead, you use the pattern described in collections of Collabs: one user calls add withAddArgs
; each replica passes thoseAddArgs
to itsvalueConstructor
; andvalueConstructor
returns the local copy of the new value Collab.When a value is deleted with delete, it is deleted permanently and can no longer be used; future and concurrent operations on that value are ignored.
You can also treat a
CSet<C>
as a "factory" for Collabs of type C: add is like "new"/"malloc" and delete is like "free", but replicated across all devices.See also: CValueSet.