lib0 0.2.112 → 0.2.115-0

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 (331) hide show
  1. package/README.md +1 -1
  2. package/broadcastchannel.js +1 -1
  3. package/buffer.d.ts +3 -3
  4. package/buffer.d.ts.map +1 -1
  5. package/buffer.js +1 -1
  6. package/coverage/tmp/coverage-27667-1761218530660-0.json +1 -0
  7. package/coverage/tmp/{coverage-20055-1752683207886-0.json → coverage-27668-1761218485882-0.json} +1 -1
  8. package/crypto/aes-gcm.d.ts +4 -4
  9. package/crypto/aes-gcm.d.ts.map +1 -1
  10. package/crypto/aes-gcm.js +6 -6
  11. package/crypto/common.d.ts +1 -1
  12. package/crypto/common.d.ts.map +1 -1
  13. package/crypto/common.js +1 -1
  14. package/crypto/ecdsa.d.ts +2 -2
  15. package/crypto/ecdsa.d.ts.map +1 -1
  16. package/crypto/ecdsa.js +4 -4
  17. package/crypto/rsa-oaep.d.ts +2 -2
  18. package/crypto/rsa-oaep.d.ts.map +1 -1
  19. package/crypto/rsa-oaep.js +3 -3
  20. package/decoding.d.ts +27 -14
  21. package/decoding.d.ts.map +1 -1
  22. package/decoding.js +12 -8
  23. package/delta/abstract-array.d.ts +166 -0
  24. package/delta/abstract-array.d.ts.map +1 -0
  25. package/delta/abstract-array.js +421 -0
  26. package/delta/abstract.d.ts +69 -0
  27. package/delta/abstract.d.ts.map +1 -0
  28. package/delta/abstract.js +102 -0
  29. package/delta/array.d.ts +23 -0
  30. package/delta/array.d.ts.map +1 -0
  31. package/delta/array.js +45 -0
  32. package/delta/array.test.d.ts +2 -0
  33. package/delta/array.test.d.ts.map +1 -0
  34. package/delta/binding.d.ts +105 -0
  35. package/delta/binding.d.ts.map +1 -0
  36. package/delta/binding.js +369 -0
  37. package/delta/binding.test.d.ts +5 -0
  38. package/delta/binding.test.d.ts.map +1 -0
  39. package/delta/d2.d.ts +705 -0
  40. package/delta/d2.d.ts.map +1 -0
  41. package/delta/d2.js +1309 -0
  42. package/delta/d2.test.d.ts +15 -0
  43. package/delta/d2.test.d.ts.map +1 -0
  44. package/delta/index.d.ts +14 -0
  45. package/delta/index.d.ts.map +1 -0
  46. package/delta/index.js +79 -0
  47. package/delta/map.d.ts +230 -0
  48. package/delta/map.d.ts.map +1 -0
  49. package/delta/map.js +304 -0
  50. package/delta/node.d.ts +119 -0
  51. package/delta/node.d.ts.map +1 -0
  52. package/delta/node.js +183 -0
  53. package/delta/node.test.d.ts +4 -0
  54. package/delta/node.test.d.ts.map +1 -0
  55. package/delta/ops.d.ts +466 -0
  56. package/delta/ops.d.ts.map +1 -0
  57. package/delta/ops.js +544 -0
  58. package/delta/readme.md +129 -0
  59. package/delta/text.d.ts +43 -0
  60. package/delta/text.d.ts.map +1 -0
  61. package/delta/text.js +54 -0
  62. package/delta/text.test.d.ts +6 -0
  63. package/delta/text.test.d.ts.map +1 -0
  64. package/delta/transformer.d.ts +164 -0
  65. package/delta/transformer.d.ts.map +1 -0
  66. package/delta/transformer.js +888 -0
  67. package/delta/transformer.test.d.ts +13 -0
  68. package/delta/transformer.test.d.ts.map +1 -0
  69. package/delta/value.d.ts +84 -0
  70. package/delta/value.d.ts.map +1 -0
  71. package/delta/value.js +168 -0
  72. package/dist/abstract-array.cjs +433 -0
  73. package/dist/abstract-array.cjs.map +1 -0
  74. package/dist/abstract.cjs +122 -0
  75. package/dist/abstract.cjs.map +1 -0
  76. package/dist/aes-gcm.cjs +12 -12
  77. package/dist/aes-gcm.cjs.map +1 -1
  78. package/dist/array.cjs +60 -17
  79. package/dist/array.cjs.map +1 -1
  80. package/dist/array2.cjs +26 -0
  81. package/dist/array2.cjs.map +1 -0
  82. package/dist/binding.cjs +398 -0
  83. package/dist/binding.cjs.map +1 -0
  84. package/dist/{broadcastchannel-2c4b0a1c.cjs → broadcastchannel-b4eaea6e.cjs} +4 -4
  85. package/dist/broadcastchannel-b4eaea6e.cjs.map +1 -0
  86. package/dist/broadcastchannel.cjs +12 -12
  87. package/dist/{buffer-a74f7330.cjs → buffer-adc4e6ea.cjs} +7 -7
  88. package/dist/buffer-adc4e6ea.cjs.map +1 -0
  89. package/dist/buffer.cjs +11 -11
  90. package/dist/buffer.d.ts +3 -3
  91. package/dist/buffer.d.ts.map +1 -1
  92. package/dist/cache.cjs +6 -6
  93. package/dist/common.cjs +1 -1
  94. package/dist/common.cjs.map +1 -1
  95. package/dist/component.cjs +14 -9
  96. package/dist/component.cjs.map +1 -1
  97. package/dist/crypto/aes-gcm.d.ts +4 -4
  98. package/dist/crypto/aes-gcm.d.ts.map +1 -1
  99. package/dist/crypto/common.d.ts +1 -1
  100. package/dist/crypto/common.d.ts.map +1 -1
  101. package/dist/crypto/ecdsa.d.ts +2 -2
  102. package/dist/crypto/ecdsa.d.ts.map +1 -1
  103. package/dist/crypto/rsa-oaep.d.ts +2 -2
  104. package/dist/crypto/rsa-oaep.d.ts.map +1 -1
  105. package/dist/d2.cjs +1347 -0
  106. package/dist/d2.cjs.map +1 -0
  107. package/dist/{decoding-2b136346.cjs → decoding-50b9ce38.cjs} +18 -14
  108. package/dist/decoding-50b9ce38.cjs.map +1 -0
  109. package/dist/decoding.cjs +6 -6
  110. package/dist/decoding.d.ts +27 -14
  111. package/dist/decoding.d.ts.map +1 -1
  112. package/dist/delta/abstract-array.d.ts +166 -0
  113. package/dist/delta/abstract-array.d.ts.map +1 -0
  114. package/dist/delta/abstract.d.ts +69 -0
  115. package/dist/delta/abstract.d.ts.map +1 -0
  116. package/dist/delta/array.d.ts +23 -0
  117. package/dist/delta/array.d.ts.map +1 -0
  118. package/dist/delta/array.test.d.ts +2 -0
  119. package/dist/delta/array.test.d.ts.map +1 -0
  120. package/dist/delta/binding.d.ts +105 -0
  121. package/dist/delta/binding.d.ts.map +1 -0
  122. package/dist/delta/binding.test.d.ts +5 -0
  123. package/dist/delta/binding.test.d.ts.map +1 -0
  124. package/dist/delta/d2.d.ts +705 -0
  125. package/dist/delta/d2.d.ts.map +1 -0
  126. package/dist/delta/d2.test.d.ts +15 -0
  127. package/dist/delta/d2.test.d.ts.map +1 -0
  128. package/dist/delta/index.d.ts +14 -0
  129. package/dist/delta/index.d.ts.map +1 -0
  130. package/dist/delta/map.d.ts +230 -0
  131. package/dist/delta/map.d.ts.map +1 -0
  132. package/dist/delta/node.d.ts +119 -0
  133. package/dist/delta/node.d.ts.map +1 -0
  134. package/dist/delta/node.test.d.ts +4 -0
  135. package/dist/delta/node.test.d.ts.map +1 -0
  136. package/dist/delta/ops.d.ts +466 -0
  137. package/dist/delta/ops.d.ts.map +1 -0
  138. package/dist/delta/text.d.ts +43 -0
  139. package/dist/delta/text.d.ts.map +1 -0
  140. package/dist/delta/text.test.d.ts +6 -0
  141. package/dist/delta/text.test.d.ts.map +1 -0
  142. package/dist/delta/transformer.d.ts +164 -0
  143. package/dist/delta/transformer.d.ts.map +1 -0
  144. package/dist/delta/transformer.test.d.ts +13 -0
  145. package/dist/delta/transformer.test.d.ts.map +1 -0
  146. package/dist/delta/value.d.ts +84 -0
  147. package/dist/delta/value.d.ts.map +1 -0
  148. package/dist/{diff-77c4cf8e.cjs → diff-f0776c15.cjs} +2 -2
  149. package/dist/{diff-77c4cf8e.cjs.map → diff-f0776c15.cjs.map} +1 -1
  150. package/dist/diff.cjs +3 -3
  151. package/dist/{dom-16daf1a0.cjs → dom-2b123630.cjs} +31 -2
  152. package/dist/dom-2b123630.cjs.map +1 -0
  153. package/dist/dom.cjs +17 -2
  154. package/dist/dom.cjs.map +1 -1
  155. package/dist/dom.d.ts +17 -0
  156. package/dist/dom.d.ts.map +1 -1
  157. package/dist/ecdsa.cjs +4 -4
  158. package/dist/ecdsa.cjs.map +1 -1
  159. package/dist/{encoding-1acb59c4.cjs → encoding-7f85922c.cjs} +5 -5
  160. package/dist/encoding-7f85922c.cjs.map +1 -0
  161. package/dist/encoding.cjs +4 -4
  162. package/dist/encoding.d.ts +6 -6
  163. package/dist/encoding.d.ts.map +1 -1
  164. package/dist/{environment-2de08e0e.cjs → environment-90227ead.cjs} +4 -4
  165. package/dist/{environment-2de08e0e.cjs.map → environment-90227ead.cjs.map} +1 -1
  166. package/dist/environment.cjs +5 -5
  167. package/dist/{error-8582d695.cjs → error-0c1f634f.cjs} +10 -2
  168. package/dist/error-0c1f634f.cjs.map +1 -0
  169. package/dist/error.cjs +2 -1
  170. package/dist/error.cjs.map +1 -1
  171. package/dist/error.d.ts +1 -0
  172. package/dist/error.d.ts.map +1 -1
  173. package/dist/{eventloop-b299a889.cjs → eventloop-a0168106.cjs} +2 -2
  174. package/dist/{eventloop-b299a889.cjs.map → eventloop-a0168106.cjs.map} +1 -1
  175. package/dist/eventloop.cjs +3 -3
  176. package/dist/{function-09b8292c.cjs → function-e7d18feb.cjs} +2 -2
  177. package/dist/{function-09b8292c.cjs.map → function-e7d18feb.cjs.map} +1 -1
  178. package/dist/function.cjs +2 -2
  179. package/dist/index.cjs +23 -22
  180. package/dist/index.cjs.map +1 -1
  181. package/dist/index2.cjs +71 -0
  182. package/dist/index2.cjs.map +1 -0
  183. package/dist/{indexeddb-0cbb4d6f.cjs → indexeddb-46d1e737.cjs} +3 -3
  184. package/dist/{indexeddb-0cbb4d6f.cjs.map → indexeddb-46d1e737.cjs.map} +1 -1
  185. package/dist/indexeddb.cjs +5 -5
  186. package/dist/indexeddbV2.cjs +2 -1
  187. package/dist/indexeddbV2.cjs.map +1 -1
  188. package/dist/jwt.cjs +12 -12
  189. package/dist/list.cjs +39 -12
  190. package/dist/list.cjs.map +1 -1
  191. package/dist/list.d.ts +13 -3
  192. package/dist/list.d.ts.map +1 -1
  193. package/dist/logging.cjs +11 -9
  194. package/dist/logging.cjs.map +1 -1
  195. package/dist/logging.common.cjs +7 -7
  196. package/dist/logging.node.cjs +7 -7
  197. package/dist/{map-0dabcc55.cjs → map-24d263c0.cjs} +7 -1
  198. package/dist/map-24d263c0.cjs.map +1 -0
  199. package/dist/map.cjs +314 -7
  200. package/dist/map.cjs.map +1 -1
  201. package/dist/map.d.ts +1 -0
  202. package/dist/map.d.ts.map +1 -1
  203. package/dist/map2.cjs +15 -0
  204. package/dist/map2.cjs.map +1 -0
  205. package/dist/{math-08e068f9.cjs → math-96d5e8c4.cjs} +4 -2
  206. package/dist/math-96d5e8c4.cjs.map +1 -0
  207. package/dist/math.cjs +1 -1
  208. package/dist/math.d.ts.map +1 -1
  209. package/dist/metric.cjs +1 -1
  210. package/dist/node.cjs +206 -0
  211. package/dist/node.cjs.map +1 -0
  212. package/dist/{number-466d8922.cjs → number-1fb57bba.cjs} +2 -2
  213. package/dist/{number-466d8922.cjs.map → number-1fb57bba.cjs.map} +1 -1
  214. package/dist/number.cjs +2 -2
  215. package/dist/{object-491858d1.cjs → object-18980796.cjs} +12 -2
  216. package/dist/object-18980796.cjs.map +1 -0
  217. package/dist/object.cjs +3 -1
  218. package/dist/object.cjs.map +1 -1
  219. package/dist/object.d.ts +3 -0
  220. package/dist/object.d.ts.map +1 -1
  221. package/dist/observable.cjs +1 -1
  222. package/dist/ops.cjs +575 -0
  223. package/dist/ops.cjs.map +1 -0
  224. package/dist/patience.cjs +2 -2
  225. package/dist/performance.node.cjs +4 -4
  226. package/dist/pledge.cjs +2 -1
  227. package/dist/pledge.cjs.map +1 -1
  228. package/dist/{prng-24dfe0bf.cjs → prng-004c76e8.cjs} +5 -5
  229. package/dist/{prng-24dfe0bf.cjs.map → prng-004c76e8.cjs.map} +1 -1
  230. package/dist/prng.cjs +12 -12
  231. package/dist/prng.d.ts +1 -1
  232. package/dist/prng.d.ts.map +1 -1
  233. package/dist/{promise-7d13a97c.cjs → promise-cda7b9bb.cjs} +2 -2
  234. package/dist/{promise-7d13a97c.cjs.map → promise-cda7b9bb.cjs.map} +1 -1
  235. package/dist/promise.cjs +3 -3
  236. package/dist/rabin-gf2-polynomial.cjs +11 -11
  237. package/dist/rabin-uncached.cjs +11 -11
  238. package/dist/rabin.cjs +11 -11
  239. package/dist/random.cjs +1 -1
  240. package/dist/rsa-oaep.cjs +3 -3
  241. package/dist/rsa-oaep.cjs.map +1 -1
  242. package/dist/schema.cjs +572 -167
  243. package/dist/schema.cjs.map +1 -1
  244. package/dist/schema.d.ts +326 -122
  245. package/dist/schema.d.ts.map +1 -1
  246. package/dist/schema.test.d.ts +5 -0
  247. package/dist/schema.test.d.ts.map +1 -1
  248. package/dist/{sort-b8702761.cjs → sort-812cc211.cjs} +2 -2
  249. package/dist/{sort-b8702761.cjs.map → sort-812cc211.cjs.map} +1 -1
  250. package/dist/sort.cjs +2 -2
  251. package/dist/{statistics-c2316dca.cjs → statistics-65f6114b.cjs} +2 -2
  252. package/dist/{statistics-c2316dca.cjs.map → statistics-65f6114b.cjs.map} +1 -1
  253. package/dist/statistics.cjs +2 -2
  254. package/dist/{string-b2827a90.cjs → string-fddc5f8b.cjs} +3 -3
  255. package/dist/string-fddc5f8b.cjs.map +1 -0
  256. package/dist/string.cjs +1 -1
  257. package/dist/string.d.ts +3 -3
  258. package/dist/string.d.ts.map +1 -1
  259. package/dist/testing.cjs +16 -16
  260. package/dist/text.cjs +79 -0
  261. package/dist/text.cjs.map +1 -0
  262. package/dist/{time-bc2081b9.cjs → time-d8438852.cjs} +2 -2
  263. package/dist/{time-bc2081b9.cjs.map → time-d8438852.cjs.map} +1 -1
  264. package/dist/time.cjs +2 -2
  265. package/dist/traits.cjs +22 -0
  266. package/dist/traits.cjs.map +1 -1
  267. package/dist/traits.d.ts +1 -0
  268. package/dist/traits.d.ts.map +1 -1
  269. package/dist/traits.test.d.ts.map +1 -1
  270. package/dist/transformer.cjs +930 -0
  271. package/dist/transformer.cjs.map +1 -0
  272. package/dist/url.cjs +2 -1
  273. package/dist/url.cjs.map +1 -1
  274. package/dist/value.cjs +187 -0
  275. package/dist/value.cjs.map +1 -0
  276. package/dist/webcrypto.d.ts +1 -1
  277. package/dist/webcrypto.d.ts.map +1 -1
  278. package/dist/{websocket-40a601d4.cjs → websocket-b073d0fc.cjs} +3 -3
  279. package/dist/{websocket-40a601d4.cjs.map → websocket-b073d0fc.cjs.map} +1 -1
  280. package/dist/websocket.cjs +4 -4
  281. package/dom.d.ts +17 -0
  282. package/dom.d.ts.map +1 -1
  283. package/dom.js +21 -0
  284. package/encoding.d.ts +6 -6
  285. package/encoding.d.ts.map +1 -1
  286. package/encoding.js +1 -1
  287. package/error.d.ts +1 -0
  288. package/error.d.ts.map +1 -1
  289. package/error.js +6 -0
  290. package/list.d.ts +13 -3
  291. package/list.d.ts.map +1 -1
  292. package/list.js +36 -8
  293. package/map.d.ts +1 -0
  294. package/map.d.ts.map +1 -1
  295. package/map.js +6 -0
  296. package/math.d.ts.map +1 -1
  297. package/math.js +3 -1
  298. package/object.d.ts +3 -0
  299. package/object.d.ts.map +1 -1
  300. package/object.js +9 -1
  301. package/package.json +9 -3
  302. package/prng.d.ts +1 -1
  303. package/prng.d.ts.map +1 -1
  304. package/prng.js +1 -1
  305. package/schema.d.ts +326 -122
  306. package/schema.d.ts.map +1 -1
  307. package/schema.js +513 -141
  308. package/schema.test.d.ts +5 -0
  309. package/schema.test.d.ts.map +1 -1
  310. package/string.d.ts +3 -3
  311. package/string.d.ts.map +1 -1
  312. package/string.js +2 -2
  313. package/test.html +1 -0
  314. package/test.js +13 -1
  315. package/traits.d.ts +1 -0
  316. package/traits.d.ts.map +1 -1
  317. package/traits.js +21 -0
  318. package/traits.test.d.ts.map +1 -1
  319. package/webcrypto.d.ts +1 -1
  320. package/webcrypto.d.ts.map +1 -1
  321. package/coverage/tmp/coverage-20054-1752683240888-0.json +0 -1
  322. package/dist/broadcastchannel-2c4b0a1c.cjs.map +0 -1
  323. package/dist/buffer-a74f7330.cjs.map +0 -1
  324. package/dist/decoding-2b136346.cjs.map +0 -1
  325. package/dist/dom-16daf1a0.cjs.map +0 -1
  326. package/dist/encoding-1acb59c4.cjs.map +0 -1
  327. package/dist/error-8582d695.cjs.map +0 -1
  328. package/dist/map-0dabcc55.cjs.map +0 -1
  329. package/dist/math-08e068f9.cjs.map +0 -1
  330. package/dist/object-491858d1.cjs.map +0 -1
  331. package/dist/string-b2827a90.cjs.map +0 -1
package/delta/ops.js ADDED
@@ -0,0 +1,544 @@
1
+ import * as d from './abstract.js'
2
+ import * as object from '../object.js'
3
+ import * as traits from '../traits.js'
4
+ import * as fun from '../function.js'
5
+ import * as s from '../schema.js'
6
+ import * as list from '../list.js'
7
+
8
+ /**
9
+ * @template {any} Content
10
+ * @typedef {TextOp|InsertOp<Content>|RetainOp|DeleteOp|(Content extends d.AbstractDelta ? ModifyOp<Extract<Content,d.AbstractDelta>> : never)} AbstractDeltaArrayOps
11
+ */
12
+
13
+ /**
14
+ * @template Content
15
+ * @template {boolean} [WithText=false]
16
+ * @typedef {InsertOp<Content>|RetainOp|DeleteOp|(Content extends d.AbstractDelta ? ModifyOp<Extract<Content,d.AbstractDelta>> : never)|(WithText extends true ? TextOp : never)} DeltaArrayOps
17
+ */
18
+
19
+ /**
20
+ * @template Embeds
21
+ * @typedef {TextOp|InsertOp<Embeds>|RetainOp|DeleteOp|(Embeds extends d.AbstractDelta ? ModifyOp<Extract<Embeds,d.AbstractDelta>> : never)} DeltaTextOps
22
+ */
23
+
24
+ /**
25
+ * @template {any} Content
26
+ * @typedef {AbstractDeltaArrayOps<Content>} NodeChildrenOps
27
+ */
28
+
29
+ /**
30
+ * @typedef {s.Unwrap<$anyOp>} DeltaOps
31
+ */
32
+
33
+ /**
34
+ * @typedef {MapInsertOp<any>|MapDeleteOp<any>|MapModifyOp<any>} DeltaMapOps
35
+ */
36
+
37
+ /**
38
+ * @typedef {MapInsertOp<any,''>|MapDeleteOp<any,''>|MapModifyOp<any,''>} DeltaValueOps
39
+ */
40
+
41
+ /**
42
+ * @typedef {{ [key: string]: any }} FormattingAttributes
43
+ */
44
+
45
+ /**
46
+ * @typedef {{ insert: string|object, attributes?: { [key: string]: any }, attribution?: d.Attribution } | { delete: number } | { retain: number, attributes?: { [key:string]: any }, attribution?: d.Attribution } | { modify: object }} DeltaJsonOp
47
+ */
48
+
49
+ /**
50
+ * @template {{[key:string]: any} | null} Attrs
51
+ * @param {Attrs} attrs
52
+ * @return {Attrs}
53
+ */
54
+ const _cloneAttrs = attrs => attrs == null ? attrs : { ...attrs }
55
+ /**
56
+ * @template {any} MaybeDelta
57
+ * @param {MaybeDelta} maybeDelta
58
+ * @return {MaybeDelta}
59
+ */
60
+ const _cloneMaybeDelta = maybeDelta => d.$delta.check(maybeDelta) ? maybeDelta.clone() : maybeDelta
61
+
62
+ export class TextOp extends list.ListNode {
63
+ /**
64
+ * @param {string} insert
65
+ * @param {FormattingAttributes|null} attributes
66
+ * @param {d.Attribution|null} attribution
67
+ */
68
+ constructor (insert, attributes, attribution) {
69
+ super()
70
+ this.insert = insert
71
+ this.attributes = attributes
72
+ this.attribution = attribution
73
+ }
74
+
75
+ /**
76
+ * @return {'insert'}
77
+ */
78
+ get type () {
79
+ return 'insert'
80
+ }
81
+
82
+ get length () {
83
+ return this.insert.length
84
+ }
85
+
86
+ /**
87
+ * Remove a part of the operation (similar to Array.splice)
88
+ *
89
+ * @param {number} offset
90
+ * @param {number} len
91
+ */
92
+ _splice (offset, len) {
93
+ this.insert = this.insert.slice(0, offset) + this.insert.slice(offset + len)
94
+ }
95
+
96
+ /**
97
+ * @return {DeltaJsonOp}
98
+ */
99
+ toJSON () {
100
+ return object.assign({ insert: this.insert }, this.attributes ? { attributes: this.attributes } : ({}), this.attribution ? { attribution: this.attribution } : ({}))
101
+ }
102
+
103
+ /**
104
+ * @param {TextOp} other
105
+ */
106
+ [traits.EqualityTraitSymbol] (other) {
107
+ return fun.equalityDeep(this.insert, other.insert) && fun.equalityDeep(this.attributes, other.attributes) && fun.equalityDeep(this.attribution, other.attribution)
108
+ }
109
+
110
+ /**
111
+ * @return {TextOp}
112
+ */
113
+ clone () {
114
+ return new TextOp(this.insert, _cloneAttrs(this.attributes), _cloneAttrs(this.attribution))
115
+ }
116
+ }
117
+
118
+ /**
119
+ * @template {any} ArrayContent
120
+ */
121
+ export class InsertOp extends list.ListNode {
122
+ /**
123
+ * @param {Array<ArrayContent>} insert
124
+ * @param {FormattingAttributes|null} attributes
125
+ * @param {d.Attribution|null} attribution
126
+ */
127
+ constructor (insert, attributes, attribution) {
128
+ super()
129
+ this.insert = insert
130
+ this.attributes = attributes
131
+ this.attribution = attribution
132
+ }
133
+
134
+ /**
135
+ * @return {'insert'}
136
+ */
137
+ get type () {
138
+ return 'insert'
139
+ }
140
+
141
+ get length () {
142
+ return this.insert.length
143
+ }
144
+
145
+ /**
146
+ * Remove a part of the operation (similar to Array.splice)
147
+ *
148
+ * @param {number} offset
149
+ * @param {number} len
150
+ */
151
+ _splice (offset, len) {
152
+ this.insert.splice(offset, len)
153
+ }
154
+
155
+ /**
156
+ * @return {DeltaJsonOp}
157
+ */
158
+ toJSON () {
159
+ return object.assign({ insert: this.insert.map(ins => d.$delta.check(ins) ? ins.toJSON() : ins) }, this.attributes ? { attributes: this.attributes } : ({}), this.attribution ? { attribution: this.attribution } : ({}))
160
+ }
161
+
162
+ /**
163
+ * @param {InsertOp<ArrayContent>} other
164
+ */
165
+ [traits.EqualityTraitSymbol] (other) {
166
+ return fun.equalityDeep(this.insert, other.insert) && fun.equalityDeep(this.attributes, other.attributes) && fun.equalityDeep(this.attribution, other.attribution)
167
+ }
168
+
169
+ /**
170
+ * @return {InsertOp<ArrayContent>}
171
+ */
172
+ clone () {
173
+ return new InsertOp(this.insert.slice(), _cloneAttrs(this.attributes), _cloneAttrs(this.attribution))
174
+ }
175
+ }
176
+
177
+ export class DeleteOp extends list.ListNode {
178
+ /**
179
+ * @param {number} len
180
+ */
181
+ constructor (len) {
182
+ super()
183
+ this.delete = len
184
+ }
185
+
186
+ /**
187
+ * @return {'delete'}
188
+ */
189
+ get type () {
190
+ return 'delete'
191
+ }
192
+
193
+ get length () {
194
+ return 0
195
+ }
196
+
197
+ /**
198
+ * Remove a part of the operation (similar to Array.splice)
199
+ *
200
+ * @param {number} offset
201
+ * @param {number} len
202
+ */
203
+ _splice (offset, len) {
204
+ this.delete -= len
205
+ }
206
+
207
+ /**
208
+ * @return {DeltaJsonOp}
209
+ */
210
+ toJSON () {
211
+ return { delete: this.delete }
212
+ }
213
+
214
+ /**
215
+ * @param {DeleteOp} other
216
+ */
217
+ [traits.EqualityTraitSymbol] (other) {
218
+ return this.delete === other.delete
219
+ }
220
+
221
+ clone () {
222
+ return new DeleteOp(this.delete)
223
+ }
224
+ }
225
+
226
+ export class RetainOp extends list.ListNode {
227
+ /**
228
+ * @param {number} retain
229
+ * @param {FormattingAttributes|null} attributes
230
+ * @param {d.Attribution|null} attribution
231
+ */
232
+ constructor (retain, attributes, attribution) {
233
+ super()
234
+ this.retain = retain
235
+ this.attributes = attributes
236
+ this.attribution = attribution
237
+ }
238
+
239
+ /**
240
+ * @return {'retain'}
241
+ */
242
+ get type () {
243
+ return 'retain'
244
+ }
245
+
246
+ get length () {
247
+ return this.retain
248
+ }
249
+
250
+ /**
251
+ * Remove a part of the operation (similar to Array.splice)
252
+ *
253
+ * @param {number} _offset
254
+ * @param {number} len
255
+ */
256
+ _splice (_offset, len) {
257
+ this.retain -= len
258
+ }
259
+
260
+ /**
261
+ * @return {DeltaJsonOp}
262
+ */
263
+ toJSON () {
264
+ return object.assign({ retain: this.retain }, this.attributes ? { attributes: this.attributes } : {}, this.attribution ? { attribution: this.attribution } : {})
265
+ }
266
+
267
+ /**
268
+ * @param {RetainOp} other
269
+ */
270
+ [traits.EqualityTraitSymbol] (other) {
271
+ return this.retain === other.retain && fun.equalityDeep(this.attributes, other.attributes) && fun.equalityDeep(this.attribution, other.attribution)
272
+ }
273
+
274
+ clone () {
275
+ return new RetainOp(this.retain, _cloneAttrs(this.attributes), _cloneAttrs(this.attribution))
276
+ }
277
+ }
278
+
279
+ /**
280
+ * Delta that can be applied on a YType Embed
281
+ *
282
+ * @template {{ toJSON(): any } & traits.EqualityTrait & { clone: any }} DTypes
283
+ */
284
+ export class ModifyOp extends list.ListNode {
285
+ /**
286
+ * @param {DTypes} delta
287
+ * @param {FormattingAttributes|null} attributes
288
+ * @param {d.Attribution|null} attribution
289
+ */
290
+ constructor (delta, attributes, attribution) {
291
+ super()
292
+ this.modify = delta
293
+ this.attributes = attributes
294
+ this.attribution = attribution
295
+ }
296
+
297
+ /**
298
+ * @return {'modify'}
299
+ */
300
+ get type () {
301
+ return 'modify'
302
+ }
303
+
304
+ get length () {
305
+ return 1
306
+ }
307
+
308
+ /**
309
+ * Remove a part of the operation (similar to Array.splice)
310
+ *
311
+ * @param {number} _offset
312
+ * @param {number} len
313
+ */
314
+ _splice (_offset, len) {
315
+ }
316
+
317
+ /**
318
+ * @return {DeltaJsonOp}
319
+ */
320
+ toJSON () {
321
+ return object.assign({ modify: this.modify.toJSON() }, this.attributes ? { attributes: this.attributes } : {}, this.attribution ? { attribution: this.attribution } : {})
322
+ }
323
+
324
+ /**
325
+ * @param {ModifyOp<any>} other
326
+ */
327
+ [traits.EqualityTraitSymbol] (other) {
328
+ return this.modify[traits.EqualityTraitSymbol](other.modify) && fun.equalityDeep(this.attributes, other.attributes) && fun.equalityDeep(this.attribution, other.attribution)
329
+ }
330
+
331
+ /**
332
+ * @return {ModifyOp<DTypes>}
333
+ */
334
+ clone () {
335
+ return new ModifyOp(this.modify.clone(), _cloneAttrs(this.attributes), _cloneAttrs(this.attribution))
336
+ }
337
+ }
338
+
339
+ /**
340
+ * @template V
341
+ * @template [K=string]
342
+ */
343
+ export class MapInsertOp {
344
+ /**
345
+ * @param {K} key
346
+ * @param {V} value
347
+ * @param {V|undefined} prevValue
348
+ * @param {s.TypeOf<d.$attribution>?} attribution
349
+ */
350
+ constructor (key, value, prevValue, attribution) {
351
+ /**
352
+ * @type {K}
353
+ */
354
+ this.key = key
355
+ /**
356
+ * @type {V}
357
+ */
358
+ this.value = value
359
+ /**
360
+ * @type {V|undefined}
361
+ */
362
+ this.prevValue = prevValue
363
+ this.attribution = attribution
364
+ }
365
+
366
+ /**
367
+ * @return {'insert'}
368
+ */
369
+ get type () { return 'insert' }
370
+
371
+ toJSON () {
372
+ return {
373
+ type: this.type,
374
+ value: d.$delta.check(this.value) ? this.value.toJSON() : this.value,
375
+ attribution: this.attribution
376
+ }
377
+ }
378
+
379
+ /**
380
+ * @param {MapInsertOp<V>} other
381
+ */
382
+ [traits.EqualityTraitSymbol] (other) {
383
+ return this.key === other.key && fun.equalityDeep(this.value, other.value) && fun.equalityDeep(this.attribution, other.attribution)
384
+ }
385
+
386
+ /**
387
+ * @return {MapInsertOp<V,K>}
388
+ */
389
+ clone () {
390
+ return new MapInsertOp(this.key, _cloneMaybeDelta(this.value), _cloneMaybeDelta(this.prevValue), _cloneAttrs(this.attribution))
391
+ }
392
+ }
393
+
394
+ /**
395
+ * @template V
396
+ * @template [K=string]
397
+ */
398
+ export class MapDeleteOp {
399
+ /**
400
+ * @param {K} key
401
+ * @param {V|undefined} prevValue
402
+ * @param {s.TypeOf<d.$attribution>?} attribution
403
+ */
404
+ constructor (key, prevValue, attribution) {
405
+ /**
406
+ * @type {K}
407
+ */
408
+ this.key = key
409
+ /**
410
+ * @type {V|undefined}
411
+ */
412
+ this.prevValue = prevValue
413
+ this.attribution = attribution
414
+ }
415
+
416
+ get value () { return undefined }
417
+
418
+ /**
419
+ * @type {'delete'}
420
+ */
421
+ get type () { return 'delete' }
422
+
423
+ toJSON () {
424
+ return {
425
+ type: this.type,
426
+ attribution: this.attribution
427
+ }
428
+ }
429
+
430
+ /**
431
+ * @param {MapDeleteOp<V>} other
432
+ */
433
+ [traits.EqualityTraitSymbol] (other) {
434
+ return this.key === other.key && fun.equalityDeep(this.attribution, other.attribution)
435
+ }
436
+
437
+ clone () {
438
+ return new MapDeleteOp(this.key, _cloneMaybeDelta(this.prevValue), _cloneAttrs(this.attribution))
439
+ }
440
+ }
441
+
442
+ /**
443
+ * @template {d.AbstractDelta} Modifiers
444
+ * @template [K=string]
445
+ */
446
+ export class MapModifyOp {
447
+ /**
448
+ * @param {K} key
449
+ * @param {Modifiers} delta
450
+ */
451
+ constructor (key, delta) {
452
+ /**
453
+ * @type {K}
454
+ */
455
+ this.key = key
456
+ /**
457
+ * @type {Modifiers}
458
+ */
459
+ this.value = delta
460
+ }
461
+
462
+ /**
463
+ * @type {'modify'}
464
+ */
465
+ get type () { return 'modify' }
466
+
467
+ toJSON () {
468
+ return {
469
+ type: this.type,
470
+ value: this.value.toJSON()
471
+ }
472
+ }
473
+
474
+ /**
475
+ * @param {MapModifyOp<Modifiers>} other
476
+ */
477
+ [traits.EqualityTraitSymbol] (other) {
478
+ return this.key === other.key && this.value[traits.EqualityTraitSymbol](other.value)
479
+ }
480
+
481
+ /**
482
+ * @return {MapModifyOp<Modifiers,K>}
483
+ */
484
+ clone () {
485
+ return new MapModifyOp(this.key, this.value.clone())
486
+ }
487
+ }
488
+
489
+ export const $deltaMapChangeJson = s.$union(
490
+ s.$object({ type: s.$literal('insert'), value: s.$any, attribution: d.$attribution.nullable.optional }),
491
+ s.$object({ type: s.$literal('modify'), value: s.$any }),
492
+ s.$object({ type: s.$literal('delete'), attribution: d.$attribution.nullable.optional })
493
+ )
494
+
495
+ /**
496
+ * @type {s.Schema<MapDeleteOp<any> | DeleteOp>}
497
+ */
498
+ export const $deleteOp = s.$custom(o => o != null && (o.constructor === DeleteOp || o.constructor === MapDeleteOp))
499
+
500
+ /**
501
+ * @type {s.Schema<MapInsertOp<any> | InsertOp<any>>}
502
+ */
503
+ export const $insertOp = s.$custom(o => o != null && (o.constructor === MapInsertOp || o.constructor === InsertOp))
504
+
505
+ /**
506
+ * @template Content
507
+ * @param {s.Schema<Content>} $content
508
+ * @return {s.Schema<MapInsertOp<Content> | InsertOp<Content>>}
509
+ */
510
+ export const $insertOpWith = $content => s.$custom(o =>
511
+ o != null && (
512
+ (o.constructor === MapInsertOp && $content.check(/** @type {MapInsertOp<Content>} */ (o).value)) ||
513
+ (o.constructor === InsertOp && /** @type {InsertOp<Content>} */ (o).insert.every(ins => $content.check(ins)))
514
+ )
515
+ )
516
+
517
+ /**
518
+ * @type {s.Schema<TextOp>}
519
+ */
520
+ export const $textOp = s.$constructedBy(TextOp)
521
+
522
+ /**
523
+ * @type {s.Schema<RetainOp>}
524
+ */
525
+ export const $retainOp = s.$constructedBy(RetainOp)
526
+
527
+ /**
528
+ * @type {s.Schema<MapModifyOp<any> | ModifyOp<any>>}
529
+ */
530
+ export const $modifyOp = s.$custom(o => o != null && (o.constructor === MapModifyOp || o.constructor === ModifyOp))
531
+
532
+ /**
533
+ * @template {d.AbstractDelta} Modify
534
+ * @param {s.Schema<Modify>} $content
535
+ * @return {s.Schema<MapModifyOp<Modify> | ModifyOp<Modify>>}
536
+ */
537
+ export const $modifyOpWith = $content => s.$custom(o =>
538
+ o != null && (
539
+ (o.constructor === MapModifyOp && $content.check(/** @type {MapModifyOp<Modify>} */ (o).value)) ||
540
+ (o.constructor === ModifyOp && $content.check(/** @type {ModifyOp<Modify>} */ (o).modify))
541
+ )
542
+ )
543
+
544
+ export const $anyOp = s.$union($insertOp, $deleteOp, $textOp, $modifyOp)
@@ -0,0 +1,129 @@
1
+ # Deltas
2
+
3
+ - Enable you to efficiently represent changes on all kinds of data structures.
4
+ - Support schemas
5
+ - Support OT-style conflict resolution `delta2.apply(delta1.rebase(delta2, true)) === delta1.apply(delta2.rebase(delta1, false))`
6
+ - nice typings
7
+
8
+ ## Delta for Map-like structures
9
+
10
+ ```javascript
11
+ // define schema
12
+ const $d = delta.$delta(s.$any, { attr1: s.$string, attr2: s.$number })
13
+ const d = delta.create($d)
14
+
15
+
16
+ // create an update
17
+ const update = delta.create().set('attr1', 'val1').set('attr2', 42)
18
+ d.apply(update)
19
+
20
+ // In case of an invalid update
21
+ const update2 = delta.create().set('attr1', 42)
22
+ // it is possible to check an update beforehand
23
+ $d.check(update2) // => false
24
+ // and you also get type errors
25
+ d.apply(update2) // type error: expected 'attr1' to be of type string
26
+ ```
27
+
28
+ ## Delta for Text-like structures
29
+
30
+ Text-like deltas work similarly to [Quill Deltas]{https://quilljs.com/docs/delta}
31
+
32
+ ```javascript
33
+ // define schema
34
+ const $d = delta.$delta(s.$any, null, s.$string)
35
+ const d = delta.create($d).insert('hello world')
36
+
37
+ // create an update
38
+ const update = delta.create().retain(11).insert('!')
39
+ d.apply(update)
40
+
41
+ // In case of an invalid update
42
+ const update2 = delta.create().insert([{ some: 'object' }])
43
+ // it is possible to check an update beforehando
44
+ $d.check(update2) // => false
45
+ // and you also get type errors
46
+ d.apply(update2) // type error: unexpected attribute 'attr1'
47
+ ```
48
+
49
+ ## Delta for Array-like structures
50
+
51
+ ```javascript
52
+ // define schema
53
+ const $d = delta.$delta(s.$any, null, s.$array(s.object({ some: s.$string }, s.$string)))
54
+ const d = delta.create($d).insert(['hello world'])
55
+
56
+ // create an update
57
+ const update = delta.create().retain(1).insert({ some: 'object' })
58
+ d.apply(update)
59
+
60
+ // In case of an invalid update
61
+ const update2 = delta.create().insert([{ unknown: 'prop' }])
62
+ // it is possible to check an update beforehando
63
+ $d.check(update2) // => false
64
+ // and you also get type errors
65
+ d.apply(update2) // type error: { unknown: 'prop' } is not assignable to { some: string }
66
+ ```
67
+
68
+ ## Delta for Node-like structures (similar to XML,Trees with named nodes)
69
+
70
+ ```javascript
71
+ // define schema for a 'p'|'h1' node that may contain text or other instances of itself
72
+ const $d = delta.$delta(s.$literal('div', 'p', 'h1'), { style: s.$string }, s.$string, true))
73
+ const d = delta.create('div', $d)
74
+
75
+ // create an update - insert paragraph into the <div>
76
+ const update = delta.create().insert([delta.create('p', { style: 'bold: true' }, 'hello world')])
77
+ d.apply(update)
78
+
79
+ // modify the paragraph by deleting the text 'world' and appending '!'
80
+ d.apply(delta.create().modify(
81
+ delta.create().retain(6).delete(5).insert('!')
82
+ ))
83
+ ```
84
+
85
+ # Transformers
86
+
87
+ We often have two different data structures that we want to sync. There might be
88
+ slight differences between those data structures. I.e. we might have a Yjs data
89
+ structure containing the following content:
90
+
91
+ ```javascript
92
+ /**
93
+ * {
94
+ * headline: {{ headline }},
95
+ * content: {{ content }}
96
+ * }
97
+ */
98
+ const $data = s.$delta(null, { headline: s.$string, content: s.$string })
99
+ ```
100
+
101
+ A typical scenario is that we want to sync that to the dom and back. "two-way bindings"
102
+ - When the Yjs struucture updates, we want to sync the changes to the dom.
103
+ - When the dom is updated (because the dom is a `contenteditable` editor), we
104
+ want to sync back the changes to the yjs structure.
105
+
106
+ Now, the dom might look like this:
107
+
108
+ ```javascript
109
+ /**
110
+ * <div>
111
+ * <h1 style='some custom style'>{{headline}}</h1>
112
+ * <span>dturianed</span>
113
+ * <p>{{content}}</p>
114
+ * </div>
115
+ */
116
+ ```
117
+
118
+ We can achieve automattic back-and-forth transformations with delta
119
+ transformers:
120
+
121
+ ```javascript
122
+ const Λdata = Λ.transform($data, $d =>
123
+ Λ.delta('div', {}, [
124
+ Λ.delta('h1', { style: 'bold:true' }, [Λ.query('headline')($d)], []),
125
+ Λ.delta('p', null, [Λ.query('content')($d)])
126
+ ])
127
+ )
128
+ ```
129
+
@@ -0,0 +1,43 @@
1
+ /**
2
+ * @template Embeds
3
+ * @typedef {import('./abstract-array.js').AbstractDeltaArray<'text',import('./ops.js').DeltaTextOps<Embeds>>} DeltaText
4
+ */
5
+ /**
6
+ * @template {any} Embeds
7
+ * @extends {AbstractDeltaArrayBuilder<'text',import('./ops.js').DeltaTextOps<Embeds>>}
8
+ */
9
+ export class DeltaTextBuilder<Embeds extends unknown> extends AbstractDeltaArrayBuilder<"text", import("./ops.js").DeltaTextOps<Embeds>> {
10
+ /**
11
+ * @param {s.Schema<Embeds>} $embeds
12
+ */
13
+ constructor($embeds: s.Schema<Embeds>);
14
+ }
15
+ /**
16
+ * @overload
17
+ * @return {DeltaTextBuilder<never>}
18
+ */
19
+ export function text(): DeltaTextBuilder<never>;
20
+ /**
21
+ * @overload
22
+ * @param {string} [content]
23
+ * @return {DeltaTextBuilder<never>}
24
+ */
25
+ export function text(content?: string | undefined): DeltaTextBuilder<never>;
26
+ /**
27
+ * @template Embeds
28
+ * @overload
29
+ * @param {s.Schema<Embeds>} [$embeds]
30
+ * @return {DeltaTextBuilder<Embeds>}
31
+ */
32
+ export function text<Embeds>($embeds?: s.Schema<Embeds> | undefined): DeltaTextBuilder<Embeds>;
33
+ export function $text<Vals extends {
34
+ [key: string]: any;
35
+ }>($embeds: s.Schema<Vals>): s.Schema<DeltaText<Vals>>;
36
+ /**
37
+ * @return {s.Schema<DeltaText<any>>}
38
+ */
39
+ export const $textAny: s.Schema<DeltaText<any>>;
40
+ export type DeltaText<Embeds_1> = import("./abstract-array.js").AbstractDeltaArray<"text", import("./ops.js").DeltaTextOps<Embeds_1>>;
41
+ import { AbstractDeltaArrayBuilder } from './abstract-array.js';
42
+ import * as s from '../schema.js';
43
+ //# sourceMappingURL=text.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["text.js"],"names":[],"mappings":"AAGA;;;GAGG;AAEH;;;GAGG;AACH,8BAHmB,MAAM;IAIvB;;OAEG;IACH,qBAFW,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAI1B;CACF;;;;;AAGE,wBACS,gBAAgB,CAAC,KAAK,CAAC,CAClC;;;;;;AAEE,oDAES,gBAAgB,CAAC,KAAK,CAAC,CAClC;;;;;;;AAGE,qBADU,MAAM,2CAGP,gBAAgB,CAAC,MAAM,CAAC,CACnC;AAaM,sBAJ8B,IAAI,SAA5B;IAAG,CAAC,GAAG,EAAC,MAAM,GAAG,GAAG,CAAA;CAAG,WACzB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GACb,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAEsG;AAE3I;;GAEG;AACH,uBAAmC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAsC;kCAhDpF,OAAO,qBAAqB,EAAE,kBAAkB,CAAC,MAAM,EAAC,OAAO,UAAU,EAAE,YAAY,CAAC,QAAM,CAAC,CAAC;0CAJnE,qBAAqB;mBAD5C,cAAc"}