@y/y 14.0.0-rc.2 → 14.0.0-rc.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (166) hide show
  1. package/README.md +36 -12
  2. package/dist/src/index.d.ts +24 -1
  3. package/dist/src/index.d.ts.map +1 -1
  4. package/dist/src/structs/AbstractStruct.d.ts +14 -17
  5. package/dist/src/structs/AbstractStruct.d.ts.map +1 -1
  6. package/dist/src/structs/GC.d.ts +9 -14
  7. package/dist/src/structs/GC.d.ts.map +1 -1
  8. package/dist/src/structs/Item.d.ts +569 -31
  9. package/dist/src/structs/Item.d.ts.map +1 -1
  10. package/dist/src/structs/Skip.d.ts +9 -11
  11. package/dist/src/structs/Skip.d.ts.map +1 -1
  12. package/dist/src/utils/BlockSet.d.ts +8 -7
  13. package/dist/src/utils/BlockSet.d.ts.map +1 -1
  14. package/dist/src/utils/Doc.d.ts +4 -9
  15. package/dist/src/utils/Doc.d.ts.map +1 -1
  16. package/dist/src/utils/ID.d.ts +0 -1
  17. package/dist/src/utils/ID.d.ts.map +1 -1
  18. package/dist/src/utils/RelativePosition.d.ts +2 -5
  19. package/dist/src/utils/RelativePosition.d.ts.map +1 -1
  20. package/dist/src/utils/Renderer.d.ts +144 -0
  21. package/dist/src/utils/Renderer.d.ts.map +1 -0
  22. package/dist/src/utils/Snapshot.d.ts +7 -11
  23. package/dist/src/utils/Snapshot.d.ts.map +1 -1
  24. package/dist/src/utils/StructStore.d.ts +45 -23
  25. package/dist/src/utils/StructStore.d.ts.map +1 -1
  26. package/dist/src/utils/Transaction.d.ts +11 -21
  27. package/dist/src/utils/Transaction.d.ts.map +1 -1
  28. package/dist/src/utils/UndoManager.d.ts +13 -14
  29. package/dist/src/utils/UndoManager.d.ts.map +1 -1
  30. package/dist/src/utils/UpdateDecoder.d.ts +1 -1
  31. package/dist/src/utils/UpdateDecoder.d.ts.map +1 -1
  32. package/dist/src/utils/UpdateEncoder.d.ts +0 -1
  33. package/dist/src/utils/UpdateEncoder.d.ts.map +1 -1
  34. package/dist/src/utils/YEvent.d.ts +22 -26
  35. package/dist/src/utils/YEvent.d.ts.map +1 -1
  36. package/dist/src/utils/content-helper.d.ts +2 -0
  37. package/dist/src/utils/content-helper.d.ts.map +1 -0
  38. package/dist/src/utils/delta-helpers.d.ts +2 -3
  39. package/dist/src/utils/delta-helpers.d.ts.map +1 -1
  40. package/dist/src/utils/encoding-helpers.d.ts +6 -0
  41. package/dist/src/utils/encoding-helpers.d.ts.map +1 -0
  42. package/dist/src/utils/encoding.d.ts +16 -18
  43. package/dist/src/utils/encoding.d.ts.map +1 -1
  44. package/dist/src/utils/ids.d.ts +331 -0
  45. package/dist/src/utils/ids.d.ts.map +1 -0
  46. package/dist/src/utils/isParentOf.d.ts +1 -2
  47. package/dist/src/utils/isParentOf.d.ts.map +1 -1
  48. package/dist/src/utils/logging.d.ts +0 -1
  49. package/dist/src/utils/logging.d.ts.map +1 -1
  50. package/dist/src/utils/meta.d.ts +15 -64
  51. package/dist/src/utils/meta.d.ts.map +1 -1
  52. package/dist/src/utils/renderer-helpers.d.ts +99 -0
  53. package/dist/src/utils/renderer-helpers.d.ts.map +1 -0
  54. package/dist/src/utils/schemas.d.ts +3 -0
  55. package/dist/src/utils/schemas.d.ts.map +1 -0
  56. package/dist/src/utils/transaction-helpers.d.ts +18 -0
  57. package/dist/src/utils/transaction-helpers.d.ts.map +1 -0
  58. package/dist/src/utils/updates.d.ts +19 -25
  59. package/dist/src/utils/updates.d.ts.map +1 -1
  60. package/dist/src/ytype.d.ts +144 -41
  61. package/dist/src/ytype.d.ts.map +1 -1
  62. package/global.d.ts +53 -0
  63. package/package.json +12 -16
  64. package/src/index.js +32 -124
  65. package/src/structs/AbstractStruct.js +21 -16
  66. package/src/structs/GC.js +15 -20
  67. package/src/structs/Item.js +992 -318
  68. package/src/structs/Skip.js +16 -19
  69. package/src/utils/BlockSet.js +20 -20
  70. package/src/utils/Doc.js +18 -29
  71. package/src/utils/ID.js +0 -2
  72. package/src/utils/RelativePosition.js +15 -25
  73. package/src/utils/{AttributionManager.js → Renderer.js} +42 -197
  74. package/src/utils/Snapshot.js +15 -37
  75. package/src/utils/StructStore.js +89 -227
  76. package/src/utils/Transaction.js +89 -321
  77. package/src/utils/UndoManager.js +157 -19
  78. package/src/utils/UpdateDecoder.js +2 -3
  79. package/src/utils/UpdateEncoder.js +0 -4
  80. package/src/utils/YEvent.js +20 -26
  81. package/src/utils/content-helper.js +0 -0
  82. package/src/utils/delta-helpers.js +21 -42
  83. package/src/utils/encoding-helpers.js +110 -0
  84. package/src/utils/encoding.js +197 -122
  85. package/src/utils/ids.js +1527 -0
  86. package/src/utils/isParentOf.js +2 -4
  87. package/src/utils/logging.js +0 -4
  88. package/src/utils/meta.js +57 -46
  89. package/src/utils/renderer-helpers.js +110 -0
  90. package/src/utils/schemas.js +3 -0
  91. package/src/utils/transaction-helpers.js +413 -0
  92. package/src/utils/updates.js +24 -146
  93. package/src/ytype.js +626 -255
  94. package/tests/testHelper.js +10 -12
  95. package/dist/src/internals.d.ts +0 -36
  96. package/dist/src/internals.d.ts.map +0 -1
  97. package/dist/src/structs/ContentAny.d.ts +0 -67
  98. package/dist/src/structs/ContentAny.d.ts.map +0 -1
  99. package/dist/src/structs/ContentBinary.d.ts +0 -64
  100. package/dist/src/structs/ContentBinary.d.ts.map +0 -1
  101. package/dist/src/structs/ContentDeleted.d.ts +0 -64
  102. package/dist/src/structs/ContentDeleted.d.ts.map +0 -1
  103. package/dist/src/structs/ContentDoc.d.ts +0 -72
  104. package/dist/src/structs/ContentDoc.d.ts.map +0 -1
  105. package/dist/src/structs/ContentEmbed.d.ts +0 -67
  106. package/dist/src/structs/ContentEmbed.d.ts.map +0 -1
  107. package/dist/src/structs/ContentFormat.d.ts +0 -69
  108. package/dist/src/structs/ContentFormat.d.ts.map +0 -1
  109. package/dist/src/structs/ContentJSON.d.ts +0 -70
  110. package/dist/src/structs/ContentJSON.d.ts.map +0 -1
  111. package/dist/src/structs/ContentString.d.ts +0 -70
  112. package/dist/src/structs/ContentString.d.ts.map +0 -1
  113. package/dist/src/structs/ContentType.d.ts +0 -77
  114. package/dist/src/structs/ContentType.d.ts.map +0 -1
  115. package/dist/src/utils/AttributionManager.d.ts +0 -238
  116. package/dist/src/utils/AttributionManager.d.ts.map +0 -1
  117. package/dist/src/utils/IdMap.d.ts +0 -164
  118. package/dist/src/utils/IdMap.d.ts.map +0 -1
  119. package/dist/src/utils/IdSet.d.ts +0 -163
  120. package/dist/src/utils/IdSet.d.ts.map +0 -1
  121. package/dist/tests/IdMap.tests.d.ts +0 -9
  122. package/dist/tests/IdMap.tests.d.ts.map +0 -1
  123. package/dist/tests/IdSet.tests.d.ts +0 -9
  124. package/dist/tests/IdSet.tests.d.ts.map +0 -1
  125. package/dist/tests/attribution.tests.d.ts +0 -9
  126. package/dist/tests/attribution.tests.d.ts.map +0 -1
  127. package/dist/tests/compatibility.tests.d.ts +0 -5
  128. package/dist/tests/compatibility.tests.d.ts.map +0 -1
  129. package/dist/tests/delta.tests.d.ts +0 -7
  130. package/dist/tests/delta.tests.d.ts.map +0 -1
  131. package/dist/tests/doc.tests.d.ts +0 -13
  132. package/dist/tests/doc.tests.d.ts.map +0 -1
  133. package/dist/tests/encoding.tests.d.ts +0 -5
  134. package/dist/tests/encoding.tests.d.ts.map +0 -1
  135. package/dist/tests/index.d.ts +0 -2
  136. package/dist/tests/index.d.ts.map +0 -1
  137. package/dist/tests/relativePositions.tests.d.ts +0 -11
  138. package/dist/tests/relativePositions.tests.d.ts.map +0 -1
  139. package/dist/tests/snapshot.tests.d.ts +0 -14
  140. package/dist/tests/snapshot.tests.d.ts.map +0 -1
  141. package/dist/tests/testHelper.d.ts +0 -171
  142. package/dist/tests/testHelper.d.ts.map +0 -1
  143. package/dist/tests/undo-redo.tests.d.ts +0 -27
  144. package/dist/tests/undo-redo.tests.d.ts.map +0 -1
  145. package/dist/tests/updates.tests.d.ts +0 -26
  146. package/dist/tests/updates.tests.d.ts.map +0 -1
  147. package/dist/tests/y-array.tests.d.ts +0 -43
  148. package/dist/tests/y-array.tests.d.ts.map +0 -1
  149. package/dist/tests/y-map.tests.d.ts +0 -42
  150. package/dist/tests/y-map.tests.d.ts.map +0 -1
  151. package/dist/tests/y-text.tests.d.ts +0 -49
  152. package/dist/tests/y-text.tests.d.ts.map +0 -1
  153. package/dist/tests/y-xml.tests.d.ts +0 -14
  154. package/dist/tests/y-xml.tests.d.ts.map +0 -1
  155. package/src/internals.js +0 -35
  156. package/src/structs/ContentAny.js +0 -115
  157. package/src/structs/ContentBinary.js +0 -93
  158. package/src/structs/ContentDeleted.js +0 -101
  159. package/src/structs/ContentDoc.js +0 -141
  160. package/src/structs/ContentEmbed.js +0 -98
  161. package/src/structs/ContentFormat.js +0 -105
  162. package/src/structs/ContentJSON.js +0 -119
  163. package/src/structs/ContentString.js +0 -113
  164. package/src/structs/ContentType.js +0 -152
  165. package/src/utils/IdMap.js +0 -673
  166. package/src/utils/IdSet.js +0 -825
@@ -1,9 +1,7 @@
1
- import { Item } from '../internals.js' // eslint-disable-line
2
-
3
1
  /**
4
2
  * Check if `parent` is a parent of `child`.
5
3
  *
6
- * @param {import('../ytype.js').YType} parent
4
+ * @param {YType} parent
7
5
  * @param {Item|null} child
8
6
  * @return {Boolean} Whether `parent` is a parent of `child`.
9
7
  *
@@ -15,7 +13,7 @@ export const isParentOf = (parent, child) => {
15
13
  if (child.parent === parent) {
16
14
  return true
17
15
  }
18
- child = /** @type {import('../ytype.js').YType} */ (child.parent)._item
16
+ child = /** @type {YType} */ (child.parent)._item
19
17
  }
20
18
  return false
21
19
  }
@@ -1,7 +1,3 @@
1
- import {
2
- YType // eslint-disable-line
3
- } from '../internals.js'
4
-
5
1
  /**
6
2
  * Convenient helper to log type information.
7
3
  *
package/src/utils/meta.js CHANGED
@@ -2,40 +2,50 @@
2
2
  * Meta API for describing Yjs documents
3
3
  */
4
4
 
5
- import * as idmap from './IdMap.js'
6
- import * as idset from './IdSet.js'
7
- import { IdSetEncoderV2 } from './UpdateEncoder.js'
8
- import { IdSetDecoderV2 } from './UpdateDecoder.js'
9
5
  import * as decoding from 'lib0/decoding'
10
6
 
11
- /**
12
- * @typedef {{ inserts: import('./IdSet.js').IdSet, deletes: import('./IdSet.js').IdSet }} ContentIds
13
- */
14
-
15
- /**
16
- * @typedef {{ inserts: import('./IdMap.js').IdMap<any>, deletes: import('./IdMap.js').IdMap<any> }} ContentMap
17
- */
7
+ import {
8
+ createIdSetFromIdMap,
9
+ createDeleteSetFromStructStore,
10
+ createInsertSetFromStructStore,
11
+ diffIdMap,
12
+ mergeIdMaps,
13
+ createIdSet,
14
+ mergeIdSets,
15
+ diffIdSet,
16
+ createIdMapFromIdSet,
17
+ writeIdSet,
18
+ readIdSet,
19
+ writeIdMap,
20
+ readIdMap,
21
+ intersectMaps,
22
+ intersectSets,
23
+ filterIdMap
24
+ } from './ids.js'
25
+ import { IdSetEncoderV2 } from './UpdateEncoder.js'
26
+ import { IdSetDecoderV2 } from './UpdateDecoder.js'
18
27
 
19
28
  /**
20
- * @param {import('./IdSet.js').IdSet} inserts
21
- * @param {import('./IdSet.js').IdSet} deletes
29
+ * @param {IdSet} inserts
30
+ * @param {IdSet} deletes
31
+ * @return {ContentIds}
22
32
  */
23
- export const createContentIds = (inserts = idset.createIdSet(), deletes = idset.createIdSet()) => ({ inserts, deletes })
33
+ export const createContentIds = (inserts = createIdSet(), deletes = createIdSet()) => ({ inserts, deletes })
24
34
 
25
35
  /**
26
36
  * @param {ContentMap} contentMap
27
37
  */
28
38
  export const createContentIdsFromContentMap = contentMap => createContentIds(
29
- idmap.createIdSetFromIdMap(contentMap.inserts),
30
- idmap.createIdSetFromIdMap(contentMap.deletes)
39
+ createIdSetFromIdMap(contentMap.inserts),
40
+ createIdSetFromIdMap(contentMap.deletes)
31
41
  )
32
42
 
33
43
  /**
34
44
  * @param {import('./Doc.js').Doc} ydoc
35
45
  */
36
46
  export const createContentIdsFromDoc = ydoc => createContentIds(
37
- idset.createInsertSetFromStructStore(ydoc.store, false),
38
- idset.createDeleteSetFromStructStore(ydoc.store)
47
+ createInsertSetFromStructStore(ydoc.store, false),
48
+ createDeleteSetFromStructStore(ydoc.store)
39
49
  )
40
50
 
41
51
  /**
@@ -50,47 +60,48 @@ export const createContentIdsFromDocDiff = (ydocPrev, ydocNext) =>
50
60
  * @param {ContentIds} excludeContent
51
61
  */
52
62
  export const excludeContentIds = (content, excludeContent) =>
53
- createContentIds(idset.diffIdSet(content.inserts, excludeContent.inserts), idset.diffIdSet(content.deletes, excludeContent.deletes))
63
+ createContentIds(diffIdSet(content.inserts, excludeContent.inserts), diffIdSet(content.deletes, excludeContent.deletes))
54
64
 
55
65
  /**
56
66
  * @param {ContentMap} content
57
67
  * @param {ContentIds | ContentMap} excludeContent
58
68
  */
59
69
  export const excludeContentMap = (content, excludeContent) => createContentMap(
60
- idmap.diffIdMap(content.inserts, excludeContent.inserts),
61
- idmap.diffIdMap(content.deletes, excludeContent.deletes)
70
+ diffIdMap(content.inserts, excludeContent.inserts),
71
+ diffIdMap(content.deletes, excludeContent.deletes)
62
72
  )
63
73
 
64
74
  /**
65
75
  * @param {Array<ContentMap>} contents
66
76
  */
67
77
  export const mergeContentMaps = contents => createContentMap(
68
- idmap.mergeIdMaps(contents.map(c => c.inserts)),
69
- idmap.mergeIdMaps(contents.map(c => c.deletes))
78
+ mergeIdMaps(contents.map(c => c.inserts)),
79
+ mergeIdMaps(contents.map(c => c.deletes))
70
80
  )
71
81
 
72
82
  /**
73
83
  * @param {Array<ContentIds>} contents
74
84
  */
75
85
  export const mergeContentIds = contents => createContentIds(
76
- idset.mergeIdSets(contents.map(c => c.inserts)),
77
- idset.mergeIdSets(contents.map(c => c.deletes))
86
+ mergeIdSets(contents.map(c => c.inserts)),
87
+ mergeIdSets(contents.map(c => c.deletes))
78
88
  )
79
89
 
80
90
  /**
81
- * @param {import('./IdMap.js').IdMap<any>} inserts
82
- * @param {import('./IdMap.js').IdMap<any>} deletes
91
+ * @param {IdMap<any>} inserts
92
+ * @param {IdMap<any>} deletes
93
+ * @return {ContentMap}
83
94
  */
84
95
  export const createContentMap = (inserts, deletes) => ({ inserts, deletes })
85
96
 
86
97
  /**
87
98
  * @param {ContentIds} contentIds
88
- * @param {Array<idmap.ContentAttribute<any>>} insertAttrs
89
- * @param {Array<idmap.ContentAttribute<any>>} [deleteAttrs]
99
+ * @param {Array<ContentAttribute<any>>} insertAttrs
100
+ * @param {Array<ContentAttribute<any>>} [deleteAttrs]
90
101
  */
91
102
  export const createContentMapFromContentIds = (contentIds, insertAttrs, deleteAttrs = insertAttrs) => createContentMap(
92
- idmap.createIdMapFromIdSet(contentIds.inserts, insertAttrs),
93
- idmap.createIdMapFromIdSet(contentIds.deletes, deleteAttrs)
103
+ createIdMapFromIdSet(contentIds.inserts, insertAttrs),
104
+ createIdMapFromIdSet(contentIds.deletes, deleteAttrs)
94
105
  )
95
106
 
96
107
  /**
@@ -98,8 +109,8 @@ export const createContentMapFromContentIds = (contentIds, insertAttrs, deleteAt
98
109
  * @param {ContentIds} contentIds
99
110
  */
100
111
  export const writeContentIds = (encoder, contentIds) => {
101
- idset.writeIdSet(encoder, contentIds.inserts)
102
- idset.writeIdSet(encoder, contentIds.deletes)
112
+ writeIdSet(encoder, contentIds.inserts)
113
+ writeIdSet(encoder, contentIds.deletes)
103
114
  }
104
115
 
105
116
  /**
@@ -118,8 +129,8 @@ export const encodeContentIds = contentIds => {
118
129
  * @return {ContentIds}
119
130
  */
120
131
  export const readContentIds = decoder => createContentIds(
121
- idset.readIdSet(decoder),
122
- idset.readIdSet(decoder)
132
+ readIdSet(decoder),
133
+ readIdSet(decoder)
123
134
  )
124
135
 
125
136
  /**
@@ -134,8 +145,8 @@ export const decodeContentIds = buf => readContentIds(new IdSetDecoderV2(decodin
134
145
  * @param {ContentMap} contentMap
135
146
  */
136
147
  export const writeContentMap = (encoder, contentMap) => {
137
- idmap.writeIdMap(encoder, contentMap.inserts)
138
- idmap.writeIdMap(encoder, contentMap.deletes)
148
+ writeIdMap(encoder, contentMap.inserts)
149
+ writeIdMap(encoder, contentMap.deletes)
139
150
  }
140
151
 
141
152
  /**
@@ -145,8 +156,8 @@ export const writeContentMap = (encoder, contentMap) => {
145
156
  * @return {ContentMap} contentMap
146
157
  */
147
158
  export const readContentMap = (decoder) => createContentMap(
148
- idmap.readIdMap(decoder),
149
- idmap.readIdMap(decoder)
159
+ readIdMap(decoder),
160
+ readIdMap(decoder)
150
161
  )
151
162
 
152
163
  /**
@@ -163,8 +174,8 @@ export const encodeContentMap = contentMap => {
163
174
  * @param {ContentMap|ContentIds} mapB
164
175
  */
165
176
  export const intersectContentMap = (mapA, mapB) => createContentMap(
166
- idmap.intersectMaps(mapA.inserts, mapB.inserts),
167
- idmap.intersectMaps(mapA.deletes, mapB.deletes)
177
+ intersectMaps(mapA.inserts, mapB.inserts),
178
+ intersectMaps(mapA.deletes, mapB.deletes)
168
179
  )
169
180
 
170
181
  /**
@@ -172,8 +183,8 @@ export const intersectContentMap = (mapA, mapB) => createContentMap(
172
183
  * @param {ContentIds|ContentMap} setB
173
184
  */
174
185
  export const intersectContentIds = (setA, setB) => createContentIds(
175
- idset.intersectSets(setA.inserts, setB.inserts),
176
- idset.intersectSets(setA.deletes, setB.deletes)
186
+ intersectSets(setA.inserts, setB.inserts),
187
+ intersectSets(setA.deletes, setB.deletes)
177
188
  )
178
189
 
179
190
  /**
@@ -184,7 +195,7 @@ export const decodeContentMap = buf => readContentMap(new IdSetDecoderV2(decodin
184
195
  /**
185
196
  * @todo filter by array of content instead
186
197
  * @param {ContentMap} contentMap
187
- * @param {(c:Array<idmap.ContentAttribute<any>>)=>boolean} insertPredicate
188
- * @param {(c:Array<idmap.ContentAttribute<any>>)=>boolean} deletePredicate
198
+ * @param {(c:Array<ContentAttribute<any>>)=>boolean} insertPredicate
199
+ * @param {(c:Array<ContentAttribute<any>>)=>boolean} deletePredicate
189
200
  */
190
- export const filterContentMap = (contentMap, insertPredicate, deletePredicate) => createContentMap(idmap.filterIdMap(contentMap.inserts, insertPredicate), idmap.filterIdMap(contentMap.deletes, deletePredicate))
201
+ export const filterContentMap = (contentMap, insertPredicate, deletePredicate) => createContentMap(filterIdMap(contentMap.inserts, insertPredicate), filterIdMap(contentMap.deletes, deletePredicate))
@@ -0,0 +1,110 @@
1
+ import * as s from 'lib0/schema'
2
+ import * as error from 'lib0/error'
3
+ import { ObservableV2 } from 'lib0/observable'
4
+
5
+ export const attributionJsonSchema = s.$object({
6
+ insert: s.$array(s.$string).optional,
7
+ insertAt: s.$number.optional,
8
+ delete: s.$array(s.$string).optional,
9
+ deleteAt: s.$number.optional,
10
+ format: s.$record(s.$string, s.$array(s.$string)).optional,
11
+ formatAt: s.$number.optional
12
+ })
13
+
14
+ /**
15
+ * @todo rename this to `insertBy`, `insertAt`, ..
16
+ *
17
+ * @typedef {s.Unwrap<typeof attributionJsonSchema>} Attribution
18
+ */
19
+
20
+ /**
21
+ * @template T
22
+ */
23
+ export class AttributedContent {
24
+ /**
25
+ * @param {AbstractContent} content
26
+ * @param {number} clock
27
+ * @param {boolean} deleted
28
+ * @param {Array<ContentAttribute<T>> | null} attrs
29
+ * @param {0|1|2} renderBehavior
30
+ */
31
+ constructor (content, clock, deleted, attrs, renderBehavior) {
32
+ this.content = content
33
+ this.clock = clock
34
+ this.deleted = deleted
35
+ this.attrs = attrs
36
+ this.render = renderBehavior === 0 ? false : (renderBehavior === 1 ? (!deleted || attrs != null) : true)
37
+ }
38
+ }
39
+
40
+ /**
41
+ * Abstract base class for renderers. A renderer renders Content (with Attributions) to a delta.
42
+ *
43
+ * Should fire an event when the attributions changed _after_ the original change happens. This
44
+ * Event will be used to update the attribution on the current content.
45
+ *
46
+ * @extends {ObservableV2<{change:(idset:IdSet,origin:any,local:boolean)=>void}>}
47
+ */
48
+ export class AbstractRenderer extends ObservableV2 {
49
+ /**
50
+ * @param {Array<AttributedContent<any>>} _contents - where to write the result
51
+ * @param {number} _client
52
+ * @param {number} _clock
53
+ * @param {boolean} _deleted
54
+ * @param {AbstractContent} _content
55
+ * @param {0|1|2} _shouldRender - 0: if undeleted or attributed, render as a retain operation. 1: render only if undeleted or attributed. 2: render as insert operation (if unattributed and deleted, render as delete).
56
+ */
57
+ readContent (_contents, _client, _clock, _deleted, _content, _shouldRender) {
58
+ error.methodUnimplemented()
59
+ }
60
+
61
+ /**
62
+ * Calculate the length of the attributed content. This is used by iterators that walk through the
63
+ * content.
64
+ *
65
+ * If the content is not countable, it should return 0.
66
+ *
67
+ * @param {Item} _item
68
+ * @return {number}
69
+ */
70
+ contentLength (_item) {
71
+ error.methodUnimplemented()
72
+ }
73
+ }
74
+
75
+ export const $renderer = AbstractRenderer.prototype.$type = s.$type('y:r', AbstractRenderer)
76
+
77
+ /**
78
+ * The default renderer. Renders content as-is, without looking up any attributions.
79
+ *
80
+ * @implements AbstractRenderer
81
+ *
82
+ * @extends {ObservableV2<{change:(idset:IdSet,origin:any,local:boolean)=>void}>}
83
+ */
84
+ export class BaseRenderer extends ObservableV2 {
85
+ get $type () { return $renderer }
86
+
87
+ /**
88
+ * @param {Array<AttributedContent<any>>} contents - where to write the result
89
+ * @param {number} _client
90
+ * @param {number} clock
91
+ * @param {boolean} deleted
92
+ * @param {AbstractContent} content
93
+ * @param {0|1|2} shouldRender - whether this should render or just result in a `retain` operation
94
+ */
95
+ readContent (contents, _client, clock, deleted, content, shouldRender) {
96
+ if (!deleted || shouldRender) {
97
+ contents.push(new AttributedContent(content, clock, deleted, null, shouldRender))
98
+ }
99
+ }
100
+
101
+ /**
102
+ * @param {Item} item
103
+ * @return {number}
104
+ */
105
+ contentLength (item) {
106
+ return (item.deleted || !item.content.isCountable()) ? 0 : item.length
107
+ }
108
+ }
109
+
110
+ export const baseRenderer = new BaseRenderer()
@@ -0,0 +1,3 @@
1
+ import * as s from 'lib0/schema'
2
+
3
+ export const $ydoc = /** @type {s.Schema<Doc>} */ (s.$type('y:doc', null))