-
Couldn't load subscription status.
- Fork 42
Add support for presence (range) transformations #32
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This change adds support for presence transformations, which are being [added to ShareDB][1]. In order to support presence updates, this change adds support for the optional `transformPresence` method, which simply reuses the existing `transformCursor` method, but also: - applies changes to the `length` of a range - keeps existing metadata - returns `null` if no range has been provided [1]: share/sharedb#322
alecgibson
pushed a commit
to share/sharedb
that referenced
this pull request
May 17, 2020
The `rich-text` type now officially supports presence transformations as of this PR: ottypes/rich-text#32 which was released in `4.1.0`. This change bumps the version of `rich-text` used in the example, and removes the monkey-patch.
alecgibson
added a commit
to reedsy/json0
that referenced
this pull request
Dec 22, 2021
This change adds support for the `transformPresence()` method that
[`sharedb` uses][1].
We add support for both `text0` and `json0`.
`text0`
-------
The `text0` implementation leans on the existing
[`transformPosition`][2], and takes its form and tests from
[`rich-text`][3].
Its shape takes the form:
```js
{
index: 3,
length: 5,
}
```
Where:
- `index` is the cursor position
- `length` is the selection length (`0` for a collapsed selection)
`json0`
-------
The `json0` implementation has limited functionality because of the
limitations of the `json0` type itself: we handle list moves `lm`, but
cannot infer any information when moving objects around the tree,
because the `oi` and `od` operations are destructive.
However, it will attempt to transform embedded subtypes that support
presence.
Its shape takes the form:
```js
{
p: ['key', 123],
v: {},
}
```
Where:
- `p` is the path to the client's position within the document
- `v` is the presence value
The presence value `v` can take any arbitrary value (in simple cases it
may even be omitted entirely).
The exception to this is when using subtypes, where `v` should take the
presence shape defined by the subtype. For example, when using `text0`:
```js
{
p: ['key'],
v: {index: 5, length: 0},
}
```
[1]: share/sharedb#322
[2]: https://github.com/ottypes/json0/blob/90a3ae26364c4fa3b19b6df34dad46707a704421/lib/text0.js#L147
[3]: ottypes/rich-text#32
alecgibson
added a commit
to reedsy/json0
that referenced
this pull request
Dec 22, 2021
This change adds support for the `transformPresence()` method that
[`sharedb` uses][1].
We add support for both `text0` and `json0`.
`text0`
-------
The `text0` implementation leans on the existing
[`transformPosition`][2], and takes its form and tests from
[`rich-text`][3].
Its shape takes the form:
```js
{
index: 3,
length: 5,
}
```
Where:
- `index` is the cursor position
- `length` is the selection length (`0` for a collapsed selection)
`json0`
-------
The `json0` implementation has limited functionality because of the
limitations of the `json0` type itself: we handle list moves `lm`, but
cannot infer any information when moving objects around the tree,
because the `oi` and `od` operations are destructive.
However, it will attempt to transform embedded subtypes that support
presence.
Its shape takes the form:
```js
{
p: ['key', 123],
v: {},
}
```
Where:
- `p` is the path to the client's position within the document
- `v` is the presence value
The presence value `v` can take any arbitrary value (in simple cases it
may even be omitted entirely).
The exception to this is when using subtypes, where `v` should take the
presence shape defined by the subtype. For example, when using `text0`:
```js
{
p: ['key'],
v: {index: 5, length: 0},
}
```
[1]: share/sharedb#322
[2]: https://github.com/ottypes/json0/blob/90a3ae26364c4fa3b19b6df34dad46707a704421/lib/text0.js#L147
[3]: ottypes/rich-text#32
alecgibson
added a commit
to reedsy/json0
that referenced
this pull request
Dec 22, 2021
This change adds support for the `transformPresence()` method that
[`sharedb` uses][1].
We add support for both `text0` and `json0`.
`text0`
-------
The `text0` implementation leans on the existing
[`transformPosition`][2], and takes its form and tests from
[`rich-text`][3].
Its shape takes the form:
```js
{
index: 3,
length: 5,
}
```
Where:
- `index` is the cursor position
- `length` is the selection length (`0` for a collapsed selection)
`json0`
-------
The `json0` implementation has limited functionality because of the
limitations of the `json0` type itself: we handle list moves `lm`, but
cannot infer any information when moving objects around the tree,
because the `oi` and `od` operations are destructive.
However, it will attempt to transform embedded subtypes that support
presence.
Its shape takes the form:
```js
{
p: ['key', 123],
v: {},
}
```
Where:
- `p` is the path to the client's position within the document
- `v` is the presence value
The presence value `v` can take any arbitrary value (in simple cases it
may even be omitted entirely).
The exception to this is when using subtypes, where `v` should take the
presence shape defined by the subtype. For example, when using `text0`:
```js
{
p: ['key'],
v: {index: 5, length: 0},
}
```
[1]: share/sharedb#322
[2]: https://github.com/ottypes/json0/blob/90a3ae26364c4fa3b19b6df34dad46707a704421/lib/text0.js#L147
[3]: ottypes/rich-text#32
This was referenced Dec 22, 2021
alecgibson
added a commit
to reedsy/json0
that referenced
this pull request
Dec 29, 2021
This change adds support for the `transformPresence()` method that
[`sharedb` uses][1].
We add support for both `text0` and `json0`.
`text0`
-------
The `text0` implementation leans on the existing
[`transformPosition`][2], and takes its form and tests from
[`rich-text`][3].
Its shape takes the form:
```js
{
index: 3,
length: 5,
}
```
Where:
- `index` is the cursor position
- `length` is the selection length (`0` for a collapsed selection)
`json0`
-------
The `json0` implementation has limited functionality because of the
limitations of the `json0` type itself: we handle list moves `lm`, but
cannot infer any information when moving objects around the tree,
because the `oi` and `od` operations are destructive.
However, it will attempt to transform embedded subtypes that support
presence.
Its shape takes the form:
```js
{
p: ['key', 123],
v: {},
}
```
Where:
- `p` is the path to the client's position within the document
- `v` is the presence value
The presence value `v` can take any arbitrary value (in simple cases it
may even be omitted entirely).
The exception to this is when using subtypes, where `v` should take the
presence shape defined by the subtype. For example, when using `text0`:
```js
{
p: ['key'],
v: {index: 5, length: 0},
}
```
[1]: share/sharedb#322
[2]: https://github.com/ottypes/json0/blob/90a3ae26364c4fa3b19b6df34dad46707a704421/lib/text0.js#L147
[3]: ottypes/rich-text#32
alecgibson
added a commit
to reedsy/json0
that referenced
this pull request
Dec 30, 2021
This change adds support for the `transformPresence()` method that
[`sharedb` uses][1].
We add support for both `text0` and `json0`.
`text0`
-------
The `text0` implementation leans on the existing
[`transformPosition`][2], and takes its form and tests from
[`rich-text`][3].
Its shape takes the form:
```js
{
index: 3,
length: 5,
}
```
Where:
- `index` is the cursor position
- `length` is the selection length (`0` for a collapsed selection)
`json0`
-------
The `json0` implementation has limited functionality because of the
limitations of the `json0` type itself: we handle list moves `lm`, but
cannot infer any information when moving objects around the tree,
because the `oi` and `od` operations are destructive.
However, it will attempt to transform embedded subtypes that support
presence.
Its shape takes the form:
```js
{
p: ['key', 123],
v: {},
}
```
Where:
- `p` is the path to the client's position within the document
- `v` is the presence value
The presence value `v` can take any arbitrary value (in simple cases it
may even be omitted entirely).
The exception to this is when using subtypes, where `v` should take the
presence shape defined by the subtype. For example, when using `text0`:
```js
{
p: ['key'],
v: {index: 5, length: 0},
}
```
[1]: share/sharedb#322
[2]: https://github.com/ottypes/json0/blob/90a3ae26364c4fa3b19b6df34dad46707a704421/lib/text0.js#L147
[3]: ottypes/rich-text#32
alecgibson
added a commit
to reedsy/json0
that referenced
this pull request
Dec 30, 2021
This change adds support for the `transformPresence()` method that
[`sharedb` uses][1].
We add support for both `text0` and `json0`.
`text0`
-------
The `text0` implementation leans on the existing
[`transformPosition`][2], and takes its form and tests from
[`rich-text`][3].
Its shape takes the form:
```js
{
index: 3,
length: 5,
}
```
Where:
- `index` is the cursor position
- `length` is the selection length (`0` for a collapsed selection)
`json0`
-------
The `json0` implementation has limited functionality because of the
limitations of the `json0` type itself: we handle list moves `lm`, but
cannot infer any information when moving objects around the tree,
because the `oi` and `od` operations are destructive.
However, it will attempt to transform embedded subtypes that support
presence.
Its shape takes the form:
```js
{
p: ['key', 123],
v: {},
}
```
Where:
- `p` is the path to the client's position within the document
- `v` is the presence value
The presence value `v` can take any arbitrary value (in simple cases it
may even be omitted entirely).
The exception to this is when using subtypes, where `v` should take the
presence shape defined by the subtype. For example, when using `text0`:
```js
{
p: ['key'],
v: {index: 5, length: 0},
}
```
[1]: share/sharedb#322
[2]: https://github.com/ottypes/json0/blob/90a3ae26364c4fa3b19b6df34dad46707a704421/lib/text0.js#L147
[3]: ottypes/rich-text#32
alecgibson
added a commit
to reedsy/json0
that referenced
this pull request
Dec 30, 2021
This change adds support for the `transformPresence()` method that
[`sharedb` uses][1].
We add support for both `text0` and `json0`.
`text0`
-------
The `text0` implementation leans on the existing
[`transformPosition`][2], and takes its form and tests from
[`rich-text`][3].
Its shape takes the form:
```js
{
index: 3,
length: 5,
}
```
Where:
- `index` is the cursor position
- `length` is the selection length (`0` for a collapsed selection)
`json0`
-------
The `json0` implementation has limited functionality because of the
limitations of the `json0` type itself: we handle list moves `lm`, but
cannot infer any information when moving objects around the tree,
because the `oi` and `od` operations are destructive.
However, it will attempt to transform embedded subtypes that support
presence.
Its shape takes the form:
```js
{
p: ['key', 123],
v: {},
}
```
Where:
- `p` is the path to the client's position within the document
- `v` is the presence value
The presence value `v` can take any arbitrary value (in simple cases it
may even be omitted entirely).
The exception to this is when using subtypes, where `v` should take the
presence shape defined by the subtype. For example, when using `text0`:
```js
{
p: ['key'],
v: {index: 5, length: 0},
}
```
[1]: share/sharedb#322
[2]: https://github.com/ottypes/json0/blob/90a3ae26364c4fa3b19b6df34dad46707a704421/lib/text0.js#L147
[3]: ottypes/rich-text#32
alecgibson
added a commit
to reedsy/json0
that referenced
this pull request
Dec 30, 2021
This change adds support for the `transformPresence()` method that
[`sharedb` uses][1].
We add support for both `text0` and `json0`.
`text0`
-------
The `text0` implementation leans on the existing
[`transformPosition`][2], and takes its form and tests from
[`rich-text`][3].
Its shape takes the form:
```js
{
index: 3,
length: 5,
}
```
Where:
- `index` is the cursor position
- `length` is the selection length (`0` for a collapsed selection)
`json0`
-------
The `json0` implementation has limited functionality because of the
limitations of the `json0` type itself: we handle list moves `lm`, but
cannot infer any information when moving objects around the tree,
because the `oi` and `od` operations are destructive.
However, it will attempt to transform embedded subtypes that support
presence.
Its shape takes the form:
```js
{
p: ['key', 123],
v: {},
}
```
Where:
- `p` is the path to the client's position within the document
- `v` is the presence value
The presence value `v` can take any arbitrary value (in simple cases it
may even be omitted entirely).
The exception to this is when using subtypes, where `v` should take the
presence shape defined by the subtype. For example, when using `text0`:
```js
{
p: ['key'],
v: {index: 5, length: 0},
}
```
[1]: share/sharedb#322
[2]: https://github.com/ottypes/json0/blob/90a3ae26364c4fa3b19b6df34dad46707a704421/lib/text0.js#L147
[3]: ottypes/rich-text#32
longlonggoo
added a commit
to longlonggoo/longlonggoo
that referenced
this pull request
Aug 13, 2025
The `rich-text` type now officially supports presence transformations as of this PR: ottypes/rich-text#32 which was released in `4.1.0`. This change bumps the version of `rich-text` used in the example, and removes the monkey-patch.
FernhillFable
added a commit
to FernhillFable/cluster
that referenced
this pull request
Aug 13, 2025
The `rich-text` type now officially supports presence transformations as of this PR: ottypes/rich-text#32 which was released in `4.1.0`. This change bumps the version of `rich-text` used in the example, and removes the monkey-patch.
adelinedaosen
added a commit
to adelinedaosen/ServiceNow
that referenced
this pull request
Sep 12, 2025
The `rich-text` type now officially supports presence transformations as of this PR: ottypes/rich-text#32 which was released in `4.1.0`. This change bumps the version of `rich-text` used in the example, and removes the monkey-patch.
patriciiaDavis
added a commit
to patriciiaDavis/XWVoipKit
that referenced
this pull request
Sep 12, 2025
The `rich-text` type now officially supports presence transformations as of this PR: ottypes/rich-text#32 which was released in `4.1.0`. This change bumps the version of `rich-text` used in the example, and removes the monkey-patch.
elizabeClark
added a commit
to elizabeClark/eggtransformer
that referenced
this pull request
Sep 19, 2025
The `rich-text` type now officially supports presence transformations as of this PR: ottypes/rich-text#32 which was released in `4.1.0`. This change bumps the version of `rich-text` used in the example, and removes the monkey-patch.
livebalupton
added a commit
to livebalupton/LEDNumbers
that referenced
this pull request
Sep 27, 2025
The `rich-text` type now officially supports presence transformations as of this PR: ottypes/rich-text#32 which was released in `4.1.0`. This change bumps the version of `rich-text` used in the example, and removes the monkey-patch.
danberkos
added a commit
to danberkos/meal
that referenced
this pull request
Oct 4, 2025
The `rich-text` type now officially supports presence transformations as of this PR: ottypes/rich-text#32 which was released in `4.1.0`. This change bumps the version of `rich-text` used in the example, and removes the monkey-patch.
codewavehunter
added a commit
to codewavehunter/sharedb
that referenced
this pull request
Oct 28, 2025
The `rich-text` type now officially supports presence transformations as of this PR: ottypes/rich-text#32 which was released in `4.1.0`. This change bumps the version of `rich-text` used in the example, and removes the monkey-patch.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This change adds support for presence transformations, which are being
added to ShareDB. In order to support presence updates, this change
adds support for the optional
transformPresencemethod, which simplyreuses the existing
transformCursormethod, but also:lengthof a rangenullif no range has been provided