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/dist/d2.cjs ADDED
@@ -0,0 +1,1347 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var list = require('./list.cjs');
6
+ var map$1 = require('./map-24d263c0.cjs');
7
+ var object = require('./object-18980796.cjs');
8
+ var traits = require('./traits.cjs');
9
+ var array$1 = require('./array-78849c95.cjs');
10
+ var _function = require('./function-e7d18feb.cjs');
11
+ var schema = require('./schema.cjs');
12
+ var error = require('./error-0c1f634f.cjs');
13
+ var math = require('./math-96d5e8c4.cjs');
14
+ require('./set-5b47859e.cjs');
15
+ require('./environment-90227ead.cjs');
16
+ require('./string-fddc5f8b.cjs');
17
+ require('./conditions-f5c0c102.cjs');
18
+ require('./storage.cjs');
19
+
20
+ /**
21
+ * @beta this API is about to change
22
+ */
23
+
24
+ /**
25
+ * @typedef {{
26
+ * insert?: string[]
27
+ * insertAt?: number
28
+ * delete?: string[]
29
+ * deleteAt?: number
30
+ * format?: Record<string,string[]>
31
+ * formatAt?: number
32
+ * }} Attribution
33
+ */
34
+
35
+ /**
36
+ * @type {s.Schema<Attribution>}
37
+ */
38
+ const $attribution = schema.$object({
39
+ insert: schema.$array(schema.$string).optional,
40
+ insertAt: schema.$number.optional,
41
+ delete: schema.$array(schema.$string).optional,
42
+ deleteAt: schema.$number.optional,
43
+ format: schema.$record(schema.$string, schema.$array(schema.$string)).optional,
44
+ formatAt: schema.$number.optional
45
+ });
46
+
47
+ /**
48
+ * @typedef {s.Unwrap<$anyOp>} DeltaOps
49
+ */
50
+
51
+ /**
52
+ * @typedef {{ [key: string]: any }} FormattingAttributes
53
+ */
54
+
55
+ /**
56
+ * @typedef {{
57
+ * name?: string
58
+ * attrs?: { [Key in string|number|symbol]: DeltaAttrOpJSON },
59
+ * children?: Array<DeltaListOpJSON>
60
+ * }} DeltaJSON
61
+ */
62
+
63
+ /**
64
+ * @typedef {{ insert: string|Array<any>, format?: { [key: string]: any }, attribution?: Attribution } | { delete: number } | { retain: number, format?: { [key:string]: any }, attribution?: Attribution } | { modify: object }} DeltaListOpJSON
65
+ */
66
+
67
+ /**
68
+ * @typedef {{ type: 'insert', value: any, prevValue?: any, attribution?: Attribution } | { type: 'delete', prevValue?: any, attribution?: Attribution } | { type: 'modify', modify: DeltaJSON }} DeltaAttrOpJSON
69
+ */
70
+
71
+ /**
72
+ * @type {s.Schema<DeltaAttrOpJSON>}
73
+ */
74
+ const $deltaMapChangeJson = schema.$union(
75
+ schema.$object({ type: schema.$literal('insert'), value: schema.$any, prevValue: schema.$any.optional, attribution: $attribution.optional }),
76
+ schema.$object({ type: schema.$literal('modify'), modify: schema.$any }),
77
+ schema.$object({ type: schema.$literal('delete'), prevValue: schema.$any.optional, attribution: $attribution.optional })
78
+ );
79
+
80
+ /**
81
+ * @template {{[key:string]: any} | null} Attrs
82
+ * @param {Attrs} attrs
83
+ * @return {Attrs}
84
+ */
85
+ const _cloneAttrs = attrs => attrs == null ? attrs : { ...attrs };
86
+ /**
87
+ * @template {any} MaybeDelta
88
+ * @param {MaybeDelta} maybeDelta
89
+ * @return {MaybeDelta}
90
+ */
91
+ const _cloneMaybeDelta = maybeDelta => $deltaAny.check(maybeDelta) ? maybeDelta.clone() : maybeDelta;
92
+
93
+ class TextOp extends list.ListNode {
94
+ /**
95
+ * @param {string} insert
96
+ * @param {FormattingAttributes|null} format
97
+ * @param {Attribution?} attribution
98
+ */
99
+ constructor (insert, format, attribution) {
100
+ super();
101
+ this.insert = insert;
102
+ this.format = format;
103
+ this.attribution = attribution;
104
+ }
105
+
106
+ /**
107
+ * @return {'insert'}
108
+ */
109
+ get type () {
110
+ return 'insert'
111
+ }
112
+
113
+ get length () {
114
+ return this.insert.length
115
+ }
116
+
117
+ /**
118
+ * Remove a part of the operation (similar to Array.splice)
119
+ *
120
+ * @param {number} offset
121
+ * @param {number} len
122
+ */
123
+ _splice (offset, len) {
124
+ this.insert = this.insert.slice(0, offset) + this.insert.slice(offset + len);
125
+ }
126
+
127
+ /**
128
+ * @return {DeltaListOpJSON}
129
+ */
130
+ toJSON () {
131
+ const { insert, format, attribution } = this;
132
+ return object.assign({ insert }, format != null ? { format } : ({}), attribution != null ? { attribution } : ({}))
133
+ }
134
+
135
+ /**
136
+ * @param {TextOp} other
137
+ */
138
+ [traits.EqualityTraitSymbol] (other) {
139
+ return _function.equalityDeep(this.insert, other.insert) && _function.equalityDeep(this.format, other.format) && _function.equalityDeep(this.attribution, other.attribution)
140
+ }
141
+
142
+ /**
143
+ * @return {TextOp}
144
+ */
145
+ clone () {
146
+ return new TextOp(this.insert, _cloneAttrs(this.format), _cloneAttrs(this.attribution))
147
+ }
148
+ }
149
+
150
+ /**
151
+ * @template ArrayContent
152
+ */
153
+ class InsertOp extends list.ListNode {
154
+ /**
155
+ * @param {Array<ArrayContent>} insert
156
+ * @param {FormattingAttributes|null} format
157
+ * @param {Attribution?} attribution
158
+ */
159
+ constructor (insert, format, attribution) {
160
+ super();
161
+ this.insert = insert;
162
+ this.format = format;
163
+ this.attribution = attribution;
164
+ }
165
+
166
+ /**
167
+ * @return {'insert'}
168
+ */
169
+ get type () {
170
+ return 'insert'
171
+ }
172
+
173
+ get length () {
174
+ return this.insert.length
175
+ }
176
+
177
+ /**
178
+ * Remove a part of the operation (similar to Array.splice)
179
+ *
180
+ * @param {number} offset
181
+ * @param {number} len
182
+ */
183
+ _splice (offset, len) {
184
+ this.insert.splice(offset, len);
185
+ }
186
+
187
+ /**
188
+ * @return {DeltaListOpJSON}
189
+ */
190
+ toJSON () {
191
+ const { insert, format, attribution } = this;
192
+ return object.assign({ insert: insert.map(ins => $deltaAny.check(ins) ? ins.toJSON() : ins) }, format ? { format } : ({}), attribution != null ? { attribution } : ({}))
193
+ }
194
+
195
+ /**
196
+ * @param {InsertOp<ArrayContent>} other
197
+ */
198
+ [traits.EqualityTraitSymbol] (other) {
199
+ return _function.equalityDeep(this.insert, other.insert) && _function.equalityDeep(this.format, other.format) && _function.equalityDeep(this.attribution, other.attribution)
200
+ }
201
+
202
+ /**
203
+ * @return {InsertOp<ArrayContent>}
204
+ */
205
+ clone () {
206
+ return new InsertOp(this.insert.slice(), _cloneAttrs(this.format), _cloneAttrs(this.attribution))
207
+ }
208
+ }
209
+
210
+ class DeleteOp extends list.ListNode {
211
+ /**
212
+ * @param {number} len
213
+ */
214
+ constructor (len) {
215
+ super();
216
+ this.delete = len;
217
+ }
218
+
219
+ /**
220
+ * @return {'delete'}
221
+ */
222
+ get type () {
223
+ return 'delete'
224
+ }
225
+
226
+ get length () {
227
+ return 0
228
+ }
229
+
230
+ /**
231
+ * Remove a part of the operation (similar to Array.splice)
232
+ *
233
+ * @param {number} _offset
234
+ * @param {number} len
235
+ */
236
+ _splice (_offset, len) {
237
+ this.delete -= len;
238
+ }
239
+
240
+ /**
241
+ * @return {DeltaListOpJSON}
242
+ */
243
+ toJSON () {
244
+ return { delete: this.delete }
245
+ }
246
+
247
+ /**
248
+ * @param {DeleteOp} other
249
+ */
250
+ [traits.EqualityTraitSymbol] (other) {
251
+ return this.delete === other.delete
252
+ }
253
+
254
+ clone () {
255
+ return new DeleteOp(this.delete)
256
+ }
257
+ }
258
+
259
+ class RetainOp extends list.ListNode {
260
+ /**
261
+ * @param {number} retain
262
+ * @param {FormattingAttributes|null} format
263
+ * @param {Attribution?} attribution
264
+ */
265
+ constructor (retain, format, attribution) {
266
+ super();
267
+ this.retain = retain;
268
+ this.format = format;
269
+ this.attribution = attribution;
270
+ }
271
+
272
+ /**
273
+ * @return {'retain'}
274
+ */
275
+ get type () {
276
+ return 'retain'
277
+ }
278
+
279
+ get length () {
280
+ return this.retain
281
+ }
282
+
283
+ /**
284
+ * Remove a part of the operation (similar to Array.splice)
285
+ *
286
+ * @param {number} _offset
287
+ * @param {number} len
288
+ */
289
+ _splice (_offset, len) {
290
+ this.retain -= len;
291
+ }
292
+
293
+ /**
294
+ * @return {DeltaListOpJSON}
295
+ */
296
+ toJSON () {
297
+ const { retain, format, attribution } = this;
298
+ return object.assign({ retain }, format ? { format } : {}, attribution != null ? { attribution } : {})
299
+ }
300
+
301
+ /**
302
+ * @param {RetainOp} other
303
+ */
304
+ [traits.EqualityTraitSymbol] (other) {
305
+ return this.retain === other.retain && _function.equalityDeep(this.format, other.format) && _function.equalityDeep(this.attribution, other.attribution)
306
+ }
307
+
308
+ clone () {
309
+ return new RetainOp(this.retain, _cloneAttrs(this.format), _cloneAttrs(this.attribution))
310
+ }
311
+ }
312
+
313
+ /**
314
+ * Delta that can be applied on a YType Embed
315
+ *
316
+ * @template {Delta<any,any,any,any,any>} DTypes
317
+ */
318
+ class ModifyOp extends list.ListNode {
319
+ /**
320
+ * @param {DTypes} delta
321
+ * @param {FormattingAttributes|null} format
322
+ * @param {Attribution?} attribution
323
+ */
324
+ constructor (delta, format, attribution) {
325
+ super();
326
+ this.modify = delta;
327
+ this.format = format;
328
+ this.attribution = attribution;
329
+ }
330
+
331
+ /**
332
+ * @return {'modify'}
333
+ */
334
+ get type () {
335
+ return 'modify'
336
+ }
337
+
338
+ get length () {
339
+ return 1
340
+ }
341
+
342
+ /**
343
+ * Remove a part of the operation (similar to Array.splice)
344
+ *
345
+ * @param {number} _offset
346
+ * @param {number} _len
347
+ */
348
+ _splice (_offset, _len) {
349
+ }
350
+
351
+ /**
352
+ * @return {DeltaListOpJSON}
353
+ */
354
+ toJSON () {
355
+ const { modify, attribution, format } = this;
356
+ return object.assign({ modify: modify.toJSON() }, format ? { format } : {}, attribution != null ? { attribution } : {})
357
+ }
358
+
359
+ /**
360
+ * @param {ModifyOp<any>} other
361
+ */
362
+ [traits.EqualityTraitSymbol] (other) {
363
+ return this.modify[traits.EqualityTraitSymbol](other.modify) && _function.equalityDeep(this.format, other.format) && _function.equalityDeep(this.attribution, other.attribution)
364
+ }
365
+
366
+ /**
367
+ * @return {ModifyOp<DTypes>}
368
+ */
369
+ clone () {
370
+ return new ModifyOp(this.modify.clone(), _cloneAttrs(this.format), _cloneAttrs(this.attribution))
371
+ }
372
+ }
373
+
374
+ /**
375
+ * @template V
376
+ * @template [K=string]
377
+ */
378
+ class MapInsertOp {
379
+ /**
380
+ * @param {K} key
381
+ * @param {V} value
382
+ * @param {V|undefined} prevValue
383
+ * @param {Attribution?} attribution
384
+ */
385
+ constructor (key, value, prevValue, attribution) {
386
+ /**
387
+ * @type {K}
388
+ */
389
+ this.key = key;
390
+ /**
391
+ * @type {V}
392
+ */
393
+ this.value = value;
394
+ /**
395
+ * @type {V|undefined}
396
+ */
397
+ this.prevValue = prevValue;
398
+ this.attribution = attribution;
399
+ }
400
+
401
+ /**
402
+ * @return {'insert'}
403
+ */
404
+ get type () { return 'insert' }
405
+
406
+ toJSON () {
407
+ const v = this.value;
408
+ const prevValue = this.prevValue;
409
+ const attribution = this.attribution;
410
+ return object.assign({
411
+ type: this.type,
412
+ value: $deltaAny.check(v) ? v.toJSON() : v
413
+ }, attribution != null ? { attribution } : {}, prevValue !== undefined ? { prevValue } : {})
414
+ }
415
+
416
+ /**
417
+ * @param {MapInsertOp<V>} other
418
+ */
419
+ [traits.EqualityTraitSymbol] (other) {
420
+ return this.key === other.key && _function.equalityDeep(this.value, other.value) && _function.equalityDeep(this.attribution, other.attribution)
421
+ }
422
+
423
+ /**
424
+ * @return {MapInsertOp<V,K>}
425
+ */
426
+ clone () {
427
+ return new MapInsertOp(this.key, _cloneMaybeDelta(this.value), _cloneMaybeDelta(this.prevValue), _cloneAttrs(this.attribution))
428
+ }
429
+ }
430
+
431
+ /**
432
+ * @template V
433
+ * @template [K=string]
434
+ */
435
+ class MapDeleteOp {
436
+ /**
437
+ * @param {K} key
438
+ * @param {V|undefined} prevValue
439
+ * @param {Attribution?} attribution
440
+ */
441
+ constructor (key, prevValue, attribution) {
442
+ /**
443
+ * @type {K}
444
+ */
445
+ this.key = key;
446
+ /**
447
+ * @type {V|undefined}
448
+ */
449
+ this.prevValue = prevValue;
450
+ this.attribution = attribution;
451
+ }
452
+
453
+ get value () { return undefined }
454
+
455
+ /**
456
+ * @type {'delete'}
457
+ */
458
+ get type () { return 'delete' }
459
+
460
+ /**
461
+ * @return {DeltaAttrOpJSON}
462
+ */
463
+ toJSON () {
464
+ const {
465
+ type, attribution, prevValue
466
+ } = this;
467
+ return object.assign({ type }, attribution != null ? { attribution } : {}, prevValue !== undefined ? { prevValue } : {})
468
+ }
469
+
470
+ /**
471
+ * @param {MapDeleteOp<V>} other
472
+ */
473
+ [traits.EqualityTraitSymbol] (other) {
474
+ return this.key === other.key && _function.equalityDeep(this.attribution, other.attribution)
475
+ }
476
+
477
+ clone () {
478
+ return new MapDeleteOp(this.key, _cloneMaybeDelta(this.prevValue), _cloneAttrs(this.attribution))
479
+ }
480
+ }
481
+
482
+ /**
483
+ * @template {Delta} Modifier
484
+ * @template [K=string]
485
+ */
486
+ class MapModifyOp {
487
+ /**
488
+ * @param {K} key
489
+ * @param {Modifier} delta
490
+ */
491
+ constructor (key, delta) {
492
+ /**
493
+ * @type {K}
494
+ */
495
+ this.key = key;
496
+ /**
497
+ * @type {Modifier}
498
+ */
499
+ this.value = delta;
500
+ }
501
+
502
+ /**
503
+ * @type {'modify'}
504
+ */
505
+ get type () { return 'modify' }
506
+
507
+ /**
508
+ * @return {DeltaAttrOpJSON}
509
+ */
510
+ toJSON () {
511
+ return {
512
+ type: this.type,
513
+ modify: this.value.toJSON()
514
+ }
515
+ }
516
+
517
+ /**
518
+ * @param {MapModifyOp<Modifier>} other
519
+ */
520
+ [traits.EqualityTraitSymbol] (other) {
521
+ return this.key === other.key && this.value[traits.EqualityTraitSymbol](other.value)
522
+ }
523
+
524
+ /**
525
+ * @return {MapModifyOp<Modifier,K>}
526
+ */
527
+ clone () {
528
+ return new MapModifyOp(this.key, this.value.clone())
529
+ }
530
+ }
531
+
532
+ /**
533
+ * @type {s.Schema<MapDeleteOp<any> | DeleteOp>}
534
+ */
535
+ const $deleteOp = schema.$custom(o => o != null && (o.constructor === DeleteOp || o.constructor === MapDeleteOp));
536
+
537
+ /**
538
+ * @type {s.Schema<MapInsertOp<any> | InsertOp<any>>}
539
+ */
540
+ const $insertOp = schema.$custom(o => o != null && (o.constructor === MapInsertOp || o.constructor === InsertOp));
541
+
542
+ /**
543
+ * @template Content
544
+ * @param {s.Schema<Content>} $content
545
+ * @return {s.Schema<MapInsertOp<Content> | InsertOp<Content>>}
546
+ */
547
+ const $insertOpWith = $content => schema.$custom(o =>
548
+ o != null && (
549
+ (o.constructor === MapInsertOp && $content.check(/** @type {MapInsertOp<Content>} */ (o).value)) ||
550
+ (o.constructor === InsertOp && /** @type {InsertOp<Content>} */ (o).insert.every(ins => $content.check(ins)))
551
+ )
552
+ );
553
+
554
+ /**
555
+ * @type {s.Schema<TextOp>}
556
+ */
557
+ const $textOp = schema.$constructedBy(TextOp);
558
+
559
+ /**
560
+ * @type {s.Schema<RetainOp>}
561
+ */
562
+ const $retainOp = schema.$constructedBy(RetainOp);
563
+
564
+ /**
565
+ * @type {s.Schema<MapModifyOp<any> | ModifyOp<any>>}
566
+ */
567
+ const $modifyOp = schema.$custom(o => o != null && (o.constructor === MapModifyOp || o.constructor === ModifyOp));
568
+
569
+ /**
570
+ * @template {Delta} Modify
571
+ * @param {s.Schema<Modify>} $content
572
+ * @return {s.Schema<MapModifyOp<Modify> | ModifyOp<Modify>>}
573
+ */
574
+ const $modifyOpWith = $content => schema.$custom(o =>
575
+ o != null && (
576
+ (o.constructor === MapModifyOp && $content.check(/** @type {MapModifyOp<Modify>} */ (o).value)) ||
577
+ (o.constructor === ModifyOp && $content.check(/** @type {ModifyOp<Modify>} */ (o).modify))
578
+ )
579
+ );
580
+
581
+ const $anyOp = schema.$union($insertOp, $deleteOp, $textOp, $modifyOp);
582
+
583
+ /**
584
+ * @template {Array<any>|string} C1
585
+ * @template {Array<any>|string} C2
586
+ * @typedef {Extract<C1 | C2, Array<any>> extends never
587
+ * ? never
588
+ * : (Array<(Extract<C1 | C2,Array<any>> extends Array<infer AC1> ? (unknown extends AC1 ? never : AC1) : never)>)} MergeListArrays
589
+ */
590
+
591
+ /**
592
+ * @template {{[Key in string|number|symbol]: any}} Attrs
593
+ * @template {string|number|symbol} Key
594
+ * @template {any} Val
595
+ * @typedef {{ [K in (Key | keyof Attrs)]: (unknown extends Attrs[K] ? never : Attrs[K]) | (Key extends K ? Val : never) }} AddToAttrs
596
+ */
597
+
598
+ /**
599
+ * @template {{[Key in string|number|symbol]: any}} Attrs
600
+ * @template {{[Key in string|number|symbol]: any}} NewAttrs
601
+ * @typedef {{ [K in (keyof NewAttrs | keyof Attrs)]: (unknown extends Attrs[K] ? never : Attrs[K]) | (unknown extends NewAttrs[K] ? never : NewAttrs[K]) }} MergeAttrs
602
+ */
603
+
604
+ /**
605
+ * @template X
606
+ * @typedef {0 extends (1 & X) ? null : X} _AnyToNull
607
+ */
608
+
609
+ /**
610
+ * @template {s.Schema<Delta<any,any,any,any,any>>|null} Schema
611
+ * @typedef {_AnyToNull<Schema> extends null ? Delta<any,{[key:string|number|symbol]:any},any,string> : (Schema extends s.Schema<infer D> ? D : never)} AllowedDeltaFromSchema
612
+ */
613
+
614
+ /**
615
+ * @template {string} [NodeName=any]
616
+ * @template {{[key:string|number|symbol]:any}} [out Attrs={}]
617
+ * @template {any} [out Children=never]
618
+ * @template {string|never} [out Text=never]
619
+ * @template {s.Schema<Delta<any,any,any,any,any>>|null} [Schema=any]
620
+ */
621
+ class Delta {
622
+ /**
623
+ * @param {NodeName} [name]
624
+ * @param {Schema} [$schema]
625
+ */
626
+ constructor (name, $schema) {
627
+ this.name = name || null;
628
+ this.$schema = $schema || null;
629
+ /**
630
+ * @type {Map<keyof Attrs, { [K in keyof Attrs]: MapInsertOp<Attrs[K],K>|MapDeleteOp<Attrs[K],K>|(Delta extends Attrs[K] ? MapModifyOp<Extract<Attrs[K],Delta>,K> : never) }[keyof Attrs]>}
631
+ */
632
+ this.attrs = map$1.create();
633
+ /**
634
+ * @type {list.List<
635
+ * RetainOp
636
+ * | DeleteOp
637
+ * | (Text extends never ? never : TextOp)
638
+ * | (Children extends never ? never : InsertOp<Children>)
639
+ * | (Delta extends Children ? ModifyOp<Extract<Children,Delta>> : never)
640
+ * >}
641
+ */
642
+ this.children = /** @type {any} */ (list.create());
643
+ /**
644
+ * @type {FormattingAttributes?}
645
+ */
646
+ this.usedAttributes = null;
647
+ /**
648
+ * @type {Attribution?}
649
+ */
650
+ this.usedAttribution = null;
651
+ /**
652
+ * @type {any}
653
+ */
654
+ this.origin = null;
655
+ }
656
+
657
+ isEmpty () {
658
+ return this.attrs.size === 0 && list.isEmpty(this.children)
659
+ }
660
+
661
+ /**
662
+ * @return {DeltaJSON}
663
+ */
664
+ toJSON () {
665
+ /**
666
+ * @type {any}
667
+ */
668
+ const attrs = {};
669
+ /**
670
+ * @type {any}
671
+ */
672
+ const children = [];
673
+ this.attrs.forEach(attr => {
674
+ attrs[attr.key] = attr.toJSON();
675
+ });
676
+ this.children.forEach(val => {
677
+ children.push(val.toJSON());
678
+ });
679
+ return object.assign(
680
+ (this.name != null ? { name: this.name } : {}),
681
+ (object.isEmpty(attrs) ? {} : { attrs }),
682
+ (children.length > 0 ? { children } : {})
683
+ )
684
+ }
685
+
686
+ /**
687
+ * @param {Delta<any,any,any,any,any>} other
688
+ * @return {boolean}
689
+ */
690
+ equals (other) {
691
+ return this[traits.EqualityTraitSymbol](other)
692
+ }
693
+
694
+ /**
695
+ * @return {this}
696
+ */
697
+ clone () {
698
+ /**
699
+ * @type {Delta<any,{[k:string|number|symbol]:any},any,any>}
700
+ */
701
+ const d = new Delta(/** @type {any} */ (this.name), this.$schema);
702
+ d.origin = this.origin;
703
+ this.attrs.forEach(op => {
704
+ d.attrs.set(op.key, /** @type {any} */ (op));
705
+ });
706
+ this.children.forEach(op => {
707
+ list.pushEnd(d.children, op.clone());
708
+ });
709
+ return /** @type {any} */ (d)
710
+ }
711
+
712
+ /**
713
+ * @param {any} other
714
+ * @return {boolean}
715
+ */
716
+ [traits.EqualityTraitSymbol] (other) {
717
+ return this.name === other.name && _function.equalityDeep(this.attrs, other.attrs) && _function.equalityDeep(this.children, other.children)
718
+ }
719
+
720
+ /**
721
+ * @param {Attribution?} attribution
722
+ */
723
+ useAttribution (attribution) {
724
+ this.usedAttribution = attribution;
725
+ return this
726
+ }
727
+
728
+ /**
729
+ * @param {FormattingAttributes?} attributes
730
+ * @return {this}
731
+ */
732
+ useAttributes (attributes) {
733
+ this.usedAttributes = attributes;
734
+ return this
735
+ }
736
+
737
+ /**
738
+ * @param {string} name
739
+ * @param {any} value
740
+ */
741
+ updateUsedAttributes (name, value) {
742
+ if (value == null) {
743
+ this.usedAttributes = object.assign({}, this.usedAttributes);
744
+ delete this.usedAttributes?.[name];
745
+ if (object.isEmpty(this.usedAttributes)) {
746
+ this.usedAttributes = null;
747
+ }
748
+ } else if (!_function.equalityDeep(this.usedAttributes?.[name], value)) {
749
+ this.usedAttributes = object.assign({}, this.usedAttributes);
750
+ this.usedAttributes[name] = value;
751
+ }
752
+ return this
753
+ }
754
+
755
+ /**
756
+ * @template {keyof Attribution} NAME
757
+ * @param {NAME} name
758
+ * @param {Attribution[NAME]?} value
759
+ */
760
+ updateUsedAttribution (name, value) {
761
+ if (value == null) {
762
+ this.usedAttribution = object.assign({}, this.usedAttribution);
763
+ delete this.usedAttribution?.[name];
764
+ if (object.isEmpty(this.usedAttribution)) {
765
+ this.usedAttribution = null;
766
+ }
767
+ } else if (!_function.equalityDeep(this.usedAttribution?.[name], value)) {
768
+ this.usedAttribution = object.assign({}, this.usedAttribution);
769
+ this.usedAttribution[name] = value;
770
+ }
771
+ return this
772
+ }
773
+
774
+ /**
775
+ * @template {AllowedDeltaFromSchema<Schema> extends Delta<any,any,infer Children,infer Text,infer Schema> ? ((Children extends never ? never : Array<Children>) | Text) : never} NewContent
776
+ * @param {NewContent} insert
777
+ * @param {FormattingAttributes?} [formatting]
778
+ * @param {Attribution?} [attribution]
779
+ * @return {Delta<
780
+ * NodeName,
781
+ * Attrs,
782
+ * Exclude<NewContent,string>[number]|Children,
783
+ * (Extract<NewContent,string>|Text) extends string ? string : never,
784
+ * Schema
785
+ * >}
786
+ */
787
+ insert (insert, formatting = null, attribution = null) {
788
+ const mergedAttributes = mergeAttrs(this.usedAttributes, formatting);
789
+ const mergedAttribution = mergeAttrs(this.usedAttribution, attribution);
790
+ /**
791
+ * @param {TextOp | InsertOp<any>} lastOp
792
+ */
793
+ const checkMergedEquals = lastOp => (mergedAttributes === lastOp.format || _function.equalityDeep(mergedAttributes, lastOp.format)) && (mergedAttribution === lastOp.attribution || _function.equalityDeep(mergedAttribution, lastOp.attribution));
794
+ const end = this.children.end;
795
+ if (schema.$string.check(insert)) {
796
+ if ($textOp.check(end) && checkMergedEquals(end)) {
797
+ end.insert += insert;
798
+ } else if (insert.length > 0) {
799
+ list.pushEnd(this.children, new TextOp(insert, object.isEmpty(mergedAttributes) ? null : mergedAttributes, object.isEmpty(mergedAttribution) ? null : mergedAttribution));
800
+ }
801
+ } else if (array$1.isArray(insert)) {
802
+ if ($insertOp.check(end) && checkMergedEquals(end)) {
803
+ end.insert.push(...insert);
804
+ } else if (insert.length > 0) {
805
+ list.pushEnd(this.children, new InsertOp(insert, object.isEmpty(mergedAttributes) ? null : mergedAttributes, object.isEmpty(mergedAttribution) ? null : mergedAttribution));
806
+ }
807
+ }
808
+ return /** @type {any} */ (this)
809
+ }
810
+
811
+ /**
812
+ * @template {AllowedDeltaFromSchema<Schema> extends Delta<any,any,infer Children,any,any> ? Extract<Children,Delta<any,any,any,any,any>> : never} NewContent
813
+ * @param {NewContent} modify
814
+ * @param {FormattingAttributes?} formatting
815
+ * @param {Attribution?} attribution
816
+ * @return {Delta<
817
+ * NodeName,
818
+ * Attrs,
819
+ * Exclude<NewContent,string>[number]|Children,
820
+ * (Extract<NewContent,string>|Text) extends string ? string : never,
821
+ * Schema
822
+ * >}
823
+ */
824
+ modify (modify, formatting = null, attribution = null) {
825
+ const mergedAttributes = mergeAttrs(this.usedAttributes, formatting);
826
+ const mergedAttribution = mergeAttrs(this.usedAttribution, attribution);
827
+ list.pushEnd(this.children, new ModifyOp(modify, object.isEmpty(mergedAttributes) ? null : mergedAttributes, object.isEmpty(mergedAttribution) ? null : mergedAttribution));
828
+ return /** @type {any} */ (this)
829
+ }
830
+
831
+ /**
832
+ * @param {number} len
833
+ * @param {FormattingAttributes?} [format]
834
+ * @param {Attribution?} [attribution]
835
+ */
836
+ retain (len, format = null, attribution = null) {
837
+ const mergedFormats = mergeAttrs(this.usedAttributes, format);
838
+ const mergedAttribution = mergeAttrs(this.usedAttribution, attribution);
839
+ const lastOp = /** @type {RetainOp|InsertOp<any>} */ (this.children.end);
840
+ if (lastOp instanceof RetainOp && _function.equalityDeep(mergedFormats, lastOp.format) && _function.equalityDeep(mergedAttribution, lastOp.attribution)) {
841
+ lastOp.retain += len;
842
+ } else if (len > 0) {
843
+ list.pushEnd(this.children, new RetainOp(len, mergedFormats, mergedAttribution));
844
+ }
845
+ return this
846
+ }
847
+
848
+ /**
849
+ * @param {number} len
850
+ * @return {this}
851
+ */
852
+ delete (len) {
853
+ const lastOp = /** @type {DeleteOp|InsertOp<any>} */ (this.children.end);
854
+ if (lastOp instanceof DeleteOp) {
855
+ lastOp.delete += len;
856
+ } else if (len > 0) {
857
+ list.pushEnd(this.children, new DeleteOp(len));
858
+ }
859
+ return this
860
+ }
861
+
862
+ /**
863
+ * @template {AllowedDeltaFromSchema<Schema> extends Delta<any,infer Attrs,any,any,any> ? (keyof Attrs) : never} Key
864
+ * @template {AllowedDeltaFromSchema<Schema> extends Delta<any,infer Attrs,any,any,any> ? (Attrs[Key]) : never} Val
865
+ * @param {Key} key
866
+ * @param {Val} val
867
+ * @param {Attribution?} attribution
868
+ * @param {Val|undefined} [prevValue]
869
+ * @return {Delta<
870
+ * NodeName,
871
+ * { [K in keyof AddToAttrs<Attrs,Key,Val>]: AddToAttrs<Attrs,Key,Val>[K] },
872
+ * Children,
873
+ * Text,
874
+ * Schema
875
+ * >}
876
+ */
877
+ set (key, val, attribution = null, prevValue) {
878
+ this.attrs.set(key, /** @type {any} */ (new MapInsertOp(key, val, prevValue, mergeAttrs(this.usedAttribution, attribution))));
879
+ return /** @type {any} */ (this)
880
+ }
881
+
882
+ /**
883
+ * @template {AllowedDeltaFromSchema<Schema> extends Delta<any,infer Attrs,any,any,any> ? Attrs : never} NewAttrs
884
+ * @param {NewAttrs} attrs
885
+ * @param {Attribution?} attribution
886
+ * @return {Delta<
887
+ * NodeName,
888
+ * { [K in keyof MergeAttrs<Attrs,NewAttrs>]: MergeAttrs<Attrs,NewAttrs>[K] },
889
+ * Children,
890
+ * Text,
891
+ * Schema
892
+ * >}
893
+ */
894
+ setMany (attrs, attribution = null) {
895
+ for (const k in attrs) {
896
+ this.set(/** @type {any} */ (k), attrs[k], attribution);
897
+ }
898
+ return /** @type {any} */ (this)
899
+ }
900
+
901
+ /**
902
+ * @template {AllowedDeltaFromSchema<Schema> extends Delta<any,infer As,any,any,any> ? keyof As : never} Key
903
+ * @param {Key} key
904
+ * @param {Attribution?} attribution
905
+ * @param {any} [prevValue]
906
+ * @return {Delta<
907
+ * NodeName,
908
+ * { [K in keyof AddToAttrs<Attrs,Key,never>]: AddToAttrs<Attrs,Key,never>[K] },
909
+ * Children,
910
+ * Text,
911
+ * Schema
912
+ * >}
913
+ */
914
+ unset (key, attribution = null, prevValue) {
915
+ this.attrs.set(key, /** @type {any} */ (new MapDeleteOp(key, prevValue, mergeAttrs(this.usedAttribution, attribution))));
916
+ return this
917
+ }
918
+
919
+ /**
920
+ * @template {AllowedDeltaFromSchema<Schema> extends Delta<any,infer As,any,any,any> ? { [K in keyof As]: Extract<As[K],Delta<any,any,any,any,any>> extends never ? never : K }[keyof As] : never} Key
921
+ * @template {AllowedDeltaFromSchema<Schema> extends Delta<any,infer As,any,any,any> ? Extract<As[Key],Delta<any,any,any,any,any>> : never} D
922
+ * @param {Key} key
923
+ * @param {D} modify
924
+ * @return {Delta<
925
+ * NodeName,
926
+ * { [K in keyof AddToAttrs<Attrs,Key,D>]: AddToAttrs<Attrs,Key,D>[K] },
927
+ * Children,
928
+ * Text,
929
+ * Schema
930
+ * >}
931
+ */
932
+ update (key, modify) {
933
+ this.attrs.set(key, /** @type {any} */ (new MapModifyOp(key, modify)));
934
+ return /** @type {any} */ (this)
935
+ }
936
+
937
+ /**
938
+ * @param {Delta<NodeName,Partial<Attrs>,Children,Text,any>} other
939
+ * @return {this}
940
+ */
941
+ apply (other) {
942
+ this.$schema?.expect(other)
943
+ // apply attrs
944
+ ;/** @type {Delta<NodeName,Attrs,Children,Text,any>} */ (/** @type {any} */ (other)).attrs.forEach(op => {
945
+ const c = this.attrs.get(op.key);
946
+ if ($modifyOp.check(op)) {
947
+ if ($deltaAny.check(c?.value)) {
948
+ /** @type {Delta} */ (c.value).apply(op.value);
949
+ } else {
950
+ // then this is a simple modify
951
+ this.attrs.set(op.key, /** @type {any} */ (op));
952
+ }
953
+ } else {
954
+ /** @type {MapInsertOp<any>} */ (op).prevValue = c?.value;
955
+ this.attrs.set(op.key, /** @type {any} */ (op));
956
+ }
957
+ });
958
+ // apply children
959
+ let opsI = this.children.start;
960
+ let offset = 0;
961
+ other.children.forEach(op => {
962
+ if ($textOp.check(op) || $insertOp.check(op)) {
963
+ if (offset === 0) {
964
+ list.insertBetween(this.children, opsI == null ? this.children.end : opsI.prev, opsI, op.clone());
965
+ } else {
966
+ if (opsI == null) error.unexpectedCase();
967
+ const cpy = opsI.clone();
968
+ cpy._splice(0, offset);
969
+ opsI._splice(offset, opsI.length - offset);
970
+ list.insertBetween(this.children, opsI, opsI.next || null, cpy);
971
+ list.insertBetween(this.children, opsI, cpy || null, op);
972
+ offset = 0;
973
+ }
974
+ } else if ($retainOp.check(op)) {
975
+ let skipLen = op.length;
976
+ while (opsI != null && opsI.length - offset <= skipLen) {
977
+ skipLen -= opsI.length - offset;
978
+ opsI = opsI?.next || null;
979
+ offset = 0;
980
+ }
981
+ if (opsI != null) {
982
+ offset += skipLen;
983
+ } else {
984
+ list.pushEnd(this.children, new RetainOp(skipLen, op.format, op.attribution));
985
+ }
986
+ } else if ($deleteOp.check(op)) {
987
+ let remainingLen = op.delete;
988
+ while (remainingLen > 0) {
989
+ if (opsI == null) {
990
+ list.pushEnd(this.children, new DeleteOp(remainingLen));
991
+ break
992
+ } else if (opsI instanceof DeleteOp) {
993
+ const delLen = opsI.length - offset;
994
+ // the same content can't be deleted twice, remove duplicated deletes
995
+ if (delLen >= remainingLen) {
996
+ offset = 0;
997
+ opsI = opsI.next;
998
+ } else {
999
+ offset += remainingLen;
1000
+ }
1001
+ remainingLen -= delLen;
1002
+ } else { // insert / embed / retain / modify ⇒ replace
1003
+ // case1: delete o fully
1004
+ // case2: delete some part of beginning
1005
+ // case3: delete some part of end
1006
+ // case4: delete some part of center
1007
+ const delLen = math.min(opsI.length - offset, remainingLen);
1008
+ if (opsI.length === delLen) {
1009
+ // case 1
1010
+ offset = 0;
1011
+ list.remove(this.children, opsI);
1012
+ } else if (offset === 0) {
1013
+ // case 2
1014
+ offset = 0;
1015
+ opsI._splice(0, delLen);
1016
+ } else if (offset + delLen === opsI.length) {
1017
+ // case 3
1018
+ opsI._splice(offset, delLen);
1019
+ offset = 0;
1020
+ opsI = opsI.next;
1021
+ } else {
1022
+ // case 4
1023
+ opsI._splice(offset, delLen);
1024
+ }
1025
+ remainingLen -= delLen;
1026
+ }
1027
+ }
1028
+ } else if ($modifyOp.check(op)) {
1029
+ if (opsI == null) {
1030
+ list.pushEnd(this.children, op.clone());
1031
+ return
1032
+ }
1033
+ if ($modifyOp.check(opsI)) {
1034
+ opsI.modify.apply(op.modify);
1035
+ } else if ($textOp.check(opsI) || $insertOp.check(opsI)) {
1036
+ const d = opsI.insert[offset];
1037
+ if (!$deltaAny.check(d)) {
1038
+ // probably incompatible delta. can only modify deltas
1039
+ error.unexpectedCase();
1040
+ }
1041
+ d.apply(op.modify);
1042
+ } else if ($retainOp.check(opsI)) {
1043
+ if (offset > 0) {
1044
+ const cpy = opsI.clone();
1045
+ cpy._splice(offset, opsI.length - offset); // skipped len
1046
+ opsI._splice(0, offset); // new remainder
1047
+ list.insertBetween(this.children, opsI.prev, opsI, cpy); // insert skipped len
1048
+ offset = 0;
1049
+ }
1050
+ // not deleting opsI, because current idea is that modify should not
1051
+ // advance content
1052
+ list.insertBetween(this.children, opsI.prev, opsI, op.clone()); // insert skipped len
1053
+ if (opsI.length === 1) {
1054
+ list.remove(this.children, opsI);
1055
+ } else {
1056
+ opsI._splice(0, 1);
1057
+ }
1058
+ } else if ($deleteOp.check(opsI)) ; else {
1059
+ error.unexpectedCase();
1060
+ }
1061
+ } else {
1062
+ error.unexpectedCase();
1063
+ }
1064
+ });
1065
+ return this
1066
+ }
1067
+
1068
+ /**
1069
+ * @param {Delta<any,any,any,any,any>} other
1070
+ * @param {boolean} priority
1071
+ */
1072
+ rebase (other, priority) {
1073
+ // @todo rebase children
1074
+ /**
1075
+ * Rebase attributes
1076
+ *
1077
+ * - insert vs delete ⇒ insert takes precedence
1078
+ * - insert vs modify ⇒ insert takes precedence
1079
+ * - insert vs insert ⇒ priority decides
1080
+ * - delete vs modify ⇒ delete takes precedence
1081
+ * - delete vs delete ⇒ current delete op is removed because item has already been deleted
1082
+ * - modify vs modify ⇒ rebase using priority
1083
+ */
1084
+ this.attrs.forEach(op => {
1085
+ if ($insertOp.check(op)) {
1086
+ if ($insertOp.check(other.attrs.get(op.key)) && !priority) {
1087
+ this.attrs.delete(op.key);
1088
+ }
1089
+ } else if ($deleteOp.check(op)) {
1090
+ const otherOp = other.attrs.get(op.key);
1091
+ if ($insertOp.check(otherOp)) {
1092
+ this.attrs.delete(otherOp.key);
1093
+ }
1094
+ } else if ($modifyOp.check(op)) {
1095
+ const otherOp = other.attrs.get(op.key);
1096
+ if (otherOp == null) ; else if ($modifyOp.check(otherOp)) {
1097
+ op.value.rebase(otherOp.value, priority);
1098
+ } else {
1099
+ this.attrs.delete(otherOp.key);
1100
+ }
1101
+ }
1102
+ });
1103
+ return this
1104
+ }
1105
+
1106
+ done () {
1107
+ const cs = this.children;
1108
+ for (let end = cs.end; end !== null && $retainOp.check(end) && end.format == null; end = cs.end) {
1109
+ list.popEnd(cs);
1110
+ }
1111
+ return this
1112
+ }
1113
+ }
1114
+
1115
+ /**
1116
+ * @template {string} NodeName
1117
+ * @template {{ [key: string|number|symbol]: any }} [Attrs={}]
1118
+ * @template {any} [Children=never]
1119
+ * @template {string|never} [Text=never]
1120
+ * @typedef {Delta<NodeName,Attrs,Children|RecursiveDelta<NodeName,Attrs,Children>,Text>} RecursiveDelta
1121
+ */
1122
+
1123
+ /**
1124
+ * @template {string} [NodeName=any]
1125
+ * @template {{ [key: string|number|symbol]: any }} [Attrs={}]
1126
+ * @template {any} [Children=never]
1127
+ * @template {boolean} [HasText=false]
1128
+ * @template {boolean} [Recursive=false]
1129
+ * @param {object} opts
1130
+ * @param {s.Schema<NodeName>?} [opts.name]
1131
+ * @param {s.Schema<Attrs>?} [opts.attrs]
1132
+ * @param {s.Schema<Children>?} [opts.children]
1133
+ * @param {HasText} [opts.hasText]
1134
+ * @param {Recursive} [opts.recursive]
1135
+ * @return {s.Schema<Delta<
1136
+ * NodeName,
1137
+ * Attrs,
1138
+ * Children|(Recursive extends true ? RecursiveDelta<NodeName,Attrs,Children,HasText extends true ? string : never> : never),
1139
+ * HasText extends true ? string : never
1140
+ * >>}
1141
+ */
1142
+ const $delta = ({ name, attrs, children, hasText, recursive }) => {
1143
+ name = name == null ? schema.$any : name;
1144
+ /**
1145
+ * @type {s.Schema<Array<any>>}
1146
+ */
1147
+ let $arrContent = children == null ? schema.$never : schema.$array(children);
1148
+ const $attrsPartial = attrs == null ? schema.$object({}) : (schema.$$object.check(attrs) ? attrs.partial : attrs);
1149
+ const $d = schema.$instanceOf(Delta, /** @param {Delta<any,any,any,any,any>} d */ d => {
1150
+ if (
1151
+ !name.check(d.name) ||
1152
+ Array.from(d.attrs.entries()).some(
1153
+ ([k, op]) => $insertOp.check(op) && !$attrsPartial.check({ [k]: op.value })
1154
+ )
1155
+ ) return false
1156
+ for (const op of d.children) {
1157
+ if ((!hasText && $textOp.check(op)) || ($insertOp.check(op) && !$arrContent.check(op.insert))) {
1158
+ return false
1159
+ }
1160
+ }
1161
+ return true
1162
+ });
1163
+ if (recursive) {
1164
+ $arrContent = children == null ? schema.$array($d) : schema.$array(children, $d);
1165
+ }
1166
+ return /** @type {any} */ ($d)
1167
+ };
1168
+
1169
+ const $deltaAny = schema.$instanceOf(Delta);
1170
+
1171
+ /**
1172
+ * Helper function to merge attribution and attributes. The latter input "wins".
1173
+ *
1174
+ * @template {{ [key: string]: any }} T
1175
+ * @param {T | null} a
1176
+ * @param {T | null} b
1177
+ */
1178
+ const mergeAttrs = (a, b) => object.isEmpty(a) ? b : (object.isEmpty(b) ? a : object.assign({}, a, b));
1179
+
1180
+ /**
1181
+ * @template {Delta?} D
1182
+ * @param {D} a
1183
+ * @param {D} b
1184
+ * @return {D}
1185
+ */
1186
+ const mergeDeltas = (a, b) => {
1187
+ if (a != null && b != null) {
1188
+ const c = /** @type {Exclude<D,null>} */ (a.clone());
1189
+ c.apply(b);
1190
+ return c
1191
+ }
1192
+ return a == null ? b : (a || null)
1193
+ };
1194
+
1195
+ /**
1196
+ * @overload
1197
+ * @return {Delta<any,{},never,never,null>}
1198
+ */
1199
+ /**
1200
+ * @template {string} NodeName
1201
+ * @overload
1202
+ * @param {NodeName} nodeName
1203
+ * @return {Delta<NodeName,{},never,never,null>}
1204
+ */
1205
+ /**
1206
+ * @template {string} NodeName
1207
+ * @template {s.Schema<Delta<any,any,any,any,any>>} Schema
1208
+ * @overload
1209
+ * @param {NodeName} nodeName
1210
+ * @param {Schema} schema
1211
+ * @return {Schema extends s.Schema<Delta<infer N,infer Attrs,infer Children,infer Text,any>> ? Delta<NodeName,Attrs,Children,Text,Schema> : never}
1212
+ */
1213
+ /**
1214
+ * @template {s.Schema<Delta<any,any,any,any,any>>} Schema
1215
+ * @overload
1216
+ * @param {Schema} schema
1217
+ * @return {Schema extends s.Schema<Delta<infer N,infer Attrs,infer Children,infer Text,any>> ? Delta<N,Attrs,Children,Text,Schema> : never}
1218
+ */
1219
+ /**
1220
+ * @template {string|null} NodeName
1221
+ * @template {{[k:string|number|symbol]:any}|null} Attrs
1222
+ * @template {Array<Array<any>|string>} Children
1223
+ * @overload
1224
+ * @param {NodeName} nodeName
1225
+ * @param {Attrs} attrs
1226
+ * @param {...Children} children
1227
+ * @return {Delta<
1228
+ * NodeName extends null ? any : NodeName,
1229
+ * Attrs extends null ? {} : Attrs,
1230
+ * Extract<Children[number],Array<any>> extends Array<infer Ac> ? (unknown extends Ac ? never : Ac) : never,
1231
+ * Extract<Children[number],string>,
1232
+ * null
1233
+ * >}
1234
+ */
1235
+ /**
1236
+ * @param {string|s.Schema<Delta<any,any,any,any,any>>} [nodeNameOrSchema]
1237
+ * @param {{[K:string|number|symbol]:any}|s.Schema<Delta<any,any,any,any,any>>} [attrsOrSchema]
1238
+ * @param {Array<Array<any>|string>} children
1239
+ * @return {Delta<any,any,any,any,any>}
1240
+ */
1241
+ const create = (nodeNameOrSchema, attrsOrSchema, ...children) => {
1242
+ const nodeName = /** @type {any} */ (schema.$string.check(nodeNameOrSchema) ? nodeNameOrSchema : null);
1243
+ const schema$1 = /** @type {any} */ (schema.$$schema.check(nodeNameOrSchema) ? nodeNameOrSchema : (schema.$$schema.check(attrsOrSchema) ? attrsOrSchema : null));
1244
+ const d = /** @type {Delta<any,any,any,string,null>} */ (new Delta(nodeName, schema$1));
1245
+ if (schema.$objectAny.check(attrsOrSchema)) {
1246
+ d.setMany(attrsOrSchema);
1247
+ }
1248
+ if (schema.$arrayAny.check(children)) {
1249
+ children.forEach(v => {
1250
+ d.insert(v);
1251
+ });
1252
+ }
1253
+ return d
1254
+ };
1255
+
1256
+ // DELTA TEXT
1257
+
1258
+ /**
1259
+ * @template [Embeds=never]
1260
+ * @typedef {Delta<any,{},Embeds,string>} TextDelta
1261
+ */
1262
+
1263
+ /**
1264
+ * @template {Array<s.Schema<any>>} [$Embeds=any]
1265
+ * @param {$Embeds} $embeds
1266
+ * @return {s.Schema<TextDelta<_AnyToNull<$Embeds> extends null ? never : ($Embeds extends Array<s.Schema<infer $C>> ? $C : never)>>}
1267
+ */
1268
+ const $text = (...$embeds) => /** @type {any} */ ($delta({ children: schema.$union(...$embeds), hasText: true }));
1269
+ const $textOnly = $text();
1270
+
1271
+ /**
1272
+ * @template {s.Schema<Delta<any,{},any,any,null>>} [Schema=s.Schema<Delta<any,{},never,string,null>>]
1273
+ * @param {Schema} [$schema]
1274
+ * @return {Schema extends s.Schema<Delta<infer N,infer Attrs,infer Children,infer Text,any>> ? Delta<N,Attrs,Children,Text,Schema> : never}
1275
+ */
1276
+ const text = $schema => /** @type {any} */ (create($schema || $textOnly));
1277
+
1278
+ /**
1279
+ * @template {any} Children
1280
+ * @typedef {Delta<any,{},Children,never>} ArrayDelta
1281
+ */
1282
+
1283
+ /**
1284
+ * @template {s.Schema<any>} $Children
1285
+ * @param {$Children} [$children]
1286
+ * @return {s.Schema<ArrayDelta<$Children>>}
1287
+ */
1288
+ const $array = $children => $delta({ children: $children });
1289
+
1290
+ /**
1291
+ * @template {s.Schema<ArrayDelta<any>>} [$Schema=never]
1292
+ * @param {$Schema} $schema
1293
+ * @return {$Schema extends never ? ArrayDelta<never> : Delta<any,{},never,never,$Schema>}
1294
+ */
1295
+ const array = $schema => /** @type {any} */ ($schema ? create($schema) : create());
1296
+
1297
+ /**
1298
+ * @template {{ [K: string|number|symbol]: any }} Attrs
1299
+ * @typedef {Delta<any,Attrs,never,never>} MapDelta
1300
+ */
1301
+
1302
+ /**
1303
+ * @template {{ [K: string|number|symbol]: any }} $Attrs
1304
+ * @param {s.Schema<$Attrs>} $attrs
1305
+ * @return {s.Schema<MapDelta<$Attrs>>}
1306
+ */
1307
+ const $map = $attrs => /** @type {any} */ ($delta({ attrs: $attrs }));
1308
+
1309
+ /**
1310
+ * @template {s.Schema<MapDelta<any>>|undefined} [$Schema=undefined]
1311
+ * @param {$Schema} [$schema]
1312
+ * @return {$Schema extends s.Schema<MapDelta<infer Attrs>> ? Delta<any,Attrs,never,never,$Schema> : MapDelta<{}>}
1313
+ */
1314
+ const map = $schema => /** @type {any} */ (create(/** @type {any} */ ($schema)));
1315
+
1316
+ exports.$anyOp = $anyOp;
1317
+ exports.$array = $array;
1318
+ exports.$attribution = $attribution;
1319
+ exports.$deleteOp = $deleteOp;
1320
+ exports.$delta = $delta;
1321
+ exports.$deltaAny = $deltaAny;
1322
+ exports.$deltaMapChangeJson = $deltaMapChangeJson;
1323
+ exports.$insertOp = $insertOp;
1324
+ exports.$insertOpWith = $insertOpWith;
1325
+ exports.$map = $map;
1326
+ exports.$modifyOp = $modifyOp;
1327
+ exports.$modifyOpWith = $modifyOpWith;
1328
+ exports.$retainOp = $retainOp;
1329
+ exports.$text = $text;
1330
+ exports.$textOnly = $textOnly;
1331
+ exports.$textOp = $textOp;
1332
+ exports.DeleteOp = DeleteOp;
1333
+ exports.Delta = Delta;
1334
+ exports.InsertOp = InsertOp;
1335
+ exports.MapDeleteOp = MapDeleteOp;
1336
+ exports.MapInsertOp = MapInsertOp;
1337
+ exports.MapModifyOp = MapModifyOp;
1338
+ exports.ModifyOp = ModifyOp;
1339
+ exports.RetainOp = RetainOp;
1340
+ exports.TextOp = TextOp;
1341
+ exports.array = array;
1342
+ exports.create = create;
1343
+ exports.map = map;
1344
+ exports.mergeAttrs = mergeAttrs;
1345
+ exports.mergeDeltas = mergeDeltas;
1346
+ exports.text = text;
1347
+ //# sourceMappingURL=d2.cjs.map