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/aes-gcm.cjs CHANGED
@@ -2,17 +2,17 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var encoding = require('./encoding-1acb59c4.cjs');
6
- var decoding = require('./decoding-2b136346.cjs');
5
+ var encoding = require('./encoding-7f85922c.cjs');
6
+ var decoding = require('./decoding-50b9ce38.cjs');
7
7
  var webcrypto = require('lib0/webcrypto');
8
- var string = require('./string-b2827a90.cjs');
8
+ var string = require('./string-fddc5f8b.cjs');
9
9
  var common = require('./common.cjs');
10
- require('./math-08e068f9.cjs');
11
- require('./number-466d8922.cjs');
10
+ require('./math-96d5e8c4.cjs');
11
+ require('./number-1fb57bba.cjs');
12
12
  require('./binary-ac8e39e2.cjs');
13
13
  require('./array-78849c95.cjs');
14
14
  require('./set-5b47859e.cjs');
15
- require('./error-8582d695.cjs');
15
+ require('./error-0c1f634f.cjs');
16
16
 
17
17
  function _interopNamespace(e) {
18
18
  if (e && e.__esModule) return e;
@@ -49,7 +49,7 @@ const defaultUsages = ['encrypt', 'decrypt'];
49
49
 
50
50
  /**
51
51
  * @param {CryptoKey} key
52
- * @param {Uint8Array} data
52
+ * @param {Uint8Array<ArrayBuffer>} data
53
53
  */
54
54
  const encrypt = (key, data) => {
55
55
  const iv = webcrypto__namespace.getRandomValues(new Uint8Array(16)); // 92bit is enough. 128bit is recommended if space is not an issue.
@@ -75,7 +75,7 @@ const encrypt = (key, data) => {
75
75
  * Decrypt some data using AES-GCM method.
76
76
  *
77
77
  * @param {CryptoKey} key
78
- * @param {Uint8Array} data
78
+ * @param {Uint8Array<ArrayBuffer>} data
79
79
  * @return {PromiseLike<Uint8Array>} decrypted buffer
80
80
  */
81
81
  const decrypt = (key, data) => {
@@ -114,7 +114,7 @@ const importKeyJwk = (jwk, { usages, extractable = false } = {}) => {
114
114
  /**
115
115
  * Only suited for importing public keys.
116
116
  *
117
- * @param {Uint8Array} raw
117
+ * @param {Uint8Array<ArrayBuffer>} raw
118
118
  * @param {Object} opts
119
119
  * @param {Usages} [opts.usages]
120
120
  * @param {boolean} [opts.extractable]
@@ -123,7 +123,7 @@ const importKeyRaw = (raw, { usages = defaultUsages, extractable = false } = {})
123
123
  webcrypto__namespace.subtle.importKey('raw', raw, aesAlgDef, extractable, /** @type {Usages} */ (usages));
124
124
 
125
125
  /**
126
- * @param {Uint8Array | string} data
126
+ * @param {Uint8Array<ArrayBuffer> | string} data
127
127
  */
128
128
  /* c8 ignore next */
129
129
  const toBinary = data => typeof data === 'string' ? string.encodeUtf8(data) : data;
@@ -133,8 +133,8 @@ const toBinary = data => typeof data === 'string' ? string.encodeUtf8(data) : da
133
133
  *
134
134
  * Derive an symmetric key using the Password-Based-Key-Derivation-Function-2.
135
135
  *
136
- * @param {Uint8Array|string} secret
137
- * @param {Uint8Array|string} salt
136
+ * @param {Uint8Array<ArrayBuffer>|string} secret
137
+ * @param {Uint8Array<ArrayBuffer>|string} salt
138
138
  * @param {Object} opts
139
139
  * @param {boolean} [opts.extractable]
140
140
  * @param {Usages} [opts.usages]
@@ -1 +1 @@
1
- {"version":3,"file":"aes-gcm.cjs","sources":["../crypto/aes-gcm.js"],"sourcesContent":["/**\n * AES-GCM is a symmetric key for encryption\n */\n\nimport * as encoding from '../encoding.js'\nimport * as decoding from '../decoding.js'\nimport * as webcrypto from 'lib0/webcrypto'\nimport * as string from '../string.js'\nexport { exportKeyJwk, exportKeyRaw } from './common.js'\n\n/**\n * @typedef {Array<'encrypt'|'decrypt'>} Usages\n */\n\n/**\n * @type {Usages}\n */\nconst defaultUsages = ['encrypt', 'decrypt']\n\n/**\n * @param {CryptoKey} key\n * @param {Uint8Array} data\n */\nexport const encrypt = (key, data) => {\n const iv = webcrypto.getRandomValues(new Uint8Array(16)) // 92bit is enough. 128bit is recommended if space is not an issue.\n return webcrypto.subtle.encrypt(\n {\n name: 'AES-GCM',\n iv\n },\n key,\n data\n ).then(cipher => {\n const encryptedDataEncoder = encoding.createEncoder()\n // iv may be sent in the clear to the other peers\n encoding.writeUint8Array(encryptedDataEncoder, iv)\n encoding.writeVarUint8Array(encryptedDataEncoder, new Uint8Array(cipher))\n return encoding.toUint8Array(encryptedDataEncoder)\n })\n}\n\n/**\n * @experimental The API is not final!\n *\n * Decrypt some data using AES-GCM method.\n *\n * @param {CryptoKey} key\n * @param {Uint8Array} data\n * @return {PromiseLike<Uint8Array>} decrypted buffer\n */\nexport const decrypt = (key, data) => {\n const dataDecoder = decoding.createDecoder(data)\n const iv = decoding.readUint8Array(dataDecoder, 16)\n const cipher = decoding.readVarUint8Array(dataDecoder)\n return webcrypto.subtle.decrypt(\n {\n name: 'AES-GCM',\n iv\n },\n key,\n cipher\n ).then(data => new Uint8Array(data))\n}\n\nconst aesAlgDef = {\n name: 'AES-GCM',\n length: 256\n}\n\n/**\n * @param {any} jwk\n * @param {Object} opts\n * @param {Usages} [opts.usages]\n * @param {boolean} [opts.extractable]\n */\nexport const importKeyJwk = (jwk, { usages, extractable = false } = {}) => {\n if (usages == null) {\n /* c8 ignore next */\n usages = jwk.key_ops || defaultUsages\n }\n return webcrypto.subtle.importKey('jwk', jwk, 'AES-GCM', extractable, /** @type {Usages} */ (usages))\n}\n\n/**\n * Only suited for importing public keys.\n *\n * @param {Uint8Array} raw\n * @param {Object} opts\n * @param {Usages} [opts.usages]\n * @param {boolean} [opts.extractable]\n */\nexport const importKeyRaw = (raw, { usages = defaultUsages, extractable = false } = {}) =>\n webcrypto.subtle.importKey('raw', raw, aesAlgDef, extractable, /** @type {Usages} */ (usages))\n\n/**\n * @param {Uint8Array | string} data\n */\n/* c8 ignore next */\nconst toBinary = data => typeof data === 'string' ? string.encodeUtf8(data) : data\n\n/**\n * @experimental The API is not final!\n *\n * Derive an symmetric key using the Password-Based-Key-Derivation-Function-2.\n *\n * @param {Uint8Array|string} secret\n * @param {Uint8Array|string} salt\n * @param {Object} opts\n * @param {boolean} [opts.extractable]\n * @param {Usages} [opts.usages]\n */\nexport const deriveKey = (secret, salt, { extractable = false, usages = defaultUsages } = {}) =>\n webcrypto.subtle.importKey(\n 'raw',\n toBinary(secret),\n 'PBKDF2',\n false,\n ['deriveKey']\n ).then(keyMaterial =>\n webcrypto.subtle.deriveKey(\n {\n name: 'PBKDF2',\n salt: toBinary(salt), // NIST recommends at least 64 bits\n iterations: 600000, // OWASP recommends 600k iterations\n hash: 'SHA-256'\n },\n keyMaterial,\n aesAlgDef,\n extractable,\n usages\n )\n )\n"],"names":["webcrypto","encoding.createEncoder","encoding.writeUint8Array","encoding.writeVarUint8Array","encoding.toUint8Array","decoding.createDecoder","decoding.readUint8Array","decoding.readVarUint8Array","string.encodeUtf8"],"mappings":"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"}
1
+ {"version":3,"file":"aes-gcm.cjs","sources":["../crypto/aes-gcm.js"],"sourcesContent":["/**\n * AES-GCM is a symmetric key for encryption\n */\n\nimport * as encoding from '../encoding.js'\nimport * as decoding from '../decoding.js'\nimport * as webcrypto from 'lib0/webcrypto'\nimport * as string from '../string.js'\nexport { exportKeyJwk, exportKeyRaw } from './common.js'\n\n/**\n * @typedef {Array<'encrypt'|'decrypt'>} Usages\n */\n\n/**\n * @type {Usages}\n */\nconst defaultUsages = ['encrypt', 'decrypt']\n\n/**\n * @param {CryptoKey} key\n * @param {Uint8Array<ArrayBuffer>} data\n */\nexport const encrypt = (key, data) => {\n const iv = webcrypto.getRandomValues(new Uint8Array(16)) // 92bit is enough. 128bit is recommended if space is not an issue.\n return webcrypto.subtle.encrypt(\n {\n name: 'AES-GCM',\n iv\n },\n key,\n data\n ).then(cipher => {\n const encryptedDataEncoder = encoding.createEncoder()\n // iv may be sent in the clear to the other peers\n encoding.writeUint8Array(encryptedDataEncoder, iv)\n encoding.writeVarUint8Array(encryptedDataEncoder, new Uint8Array(cipher))\n return encoding.toUint8Array(encryptedDataEncoder)\n })\n}\n\n/**\n * @experimental The API is not final!\n *\n * Decrypt some data using AES-GCM method.\n *\n * @param {CryptoKey} key\n * @param {Uint8Array<ArrayBuffer>} data\n * @return {PromiseLike<Uint8Array>} decrypted buffer\n */\nexport const decrypt = (key, data) => {\n const dataDecoder = decoding.createDecoder(data)\n const iv = decoding.readUint8Array(dataDecoder, 16)\n const cipher = decoding.readVarUint8Array(dataDecoder)\n return webcrypto.subtle.decrypt(\n {\n name: 'AES-GCM',\n iv\n },\n key,\n cipher\n ).then(data => new Uint8Array(data))\n}\n\nconst aesAlgDef = {\n name: 'AES-GCM',\n length: 256\n}\n\n/**\n * @param {any} jwk\n * @param {Object} opts\n * @param {Usages} [opts.usages]\n * @param {boolean} [opts.extractable]\n */\nexport const importKeyJwk = (jwk, { usages, extractable = false } = {}) => {\n if (usages == null) {\n /* c8 ignore next */\n usages = jwk.key_ops || defaultUsages\n }\n return webcrypto.subtle.importKey('jwk', jwk, 'AES-GCM', extractable, /** @type {Usages} */ (usages))\n}\n\n/**\n * Only suited for importing public keys.\n *\n * @param {Uint8Array<ArrayBuffer>} raw\n * @param {Object} opts\n * @param {Usages} [opts.usages]\n * @param {boolean} [opts.extractable]\n */\nexport const importKeyRaw = (raw, { usages = defaultUsages, extractable = false } = {}) =>\n webcrypto.subtle.importKey('raw', raw, aesAlgDef, extractable, /** @type {Usages} */ (usages))\n\n/**\n * @param {Uint8Array<ArrayBuffer> | string} data\n */\n/* c8 ignore next */\nconst toBinary = data => typeof data === 'string' ? string.encodeUtf8(data) : data\n\n/**\n * @experimental The API is not final!\n *\n * Derive an symmetric key using the Password-Based-Key-Derivation-Function-2.\n *\n * @param {Uint8Array<ArrayBuffer>|string} secret\n * @param {Uint8Array<ArrayBuffer>|string} salt\n * @param {Object} opts\n * @param {boolean} [opts.extractable]\n * @param {Usages} [opts.usages]\n */\nexport const deriveKey = (secret, salt, { extractable = false, usages = defaultUsages } = {}) =>\n webcrypto.subtle.importKey(\n 'raw',\n toBinary(secret),\n 'PBKDF2',\n false,\n ['deriveKey']\n ).then(keyMaterial =>\n webcrypto.subtle.deriveKey(\n {\n name: 'PBKDF2',\n salt: toBinary(salt), // NIST recommends at least 64 bits\n iterations: 600000, // OWASP recommends 600k iterations\n hash: 'SHA-256'\n },\n keyMaterial,\n aesAlgDef,\n extractable,\n usages\n )\n )\n"],"names":["webcrypto","encoding.createEncoder","encoding.writeUint8Array","encoding.writeVarUint8Array","encoding.toUint8Array","decoding.createDecoder","decoding.readUint8Array","decoding.readVarUint8Array","string.encodeUtf8"],"mappings":"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"}
package/dist/array.cjs CHANGED
@@ -2,25 +2,68 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
+ var schema = require('./schema.cjs');
6
+ var abstractArray = require('./abstract-array.cjs');
7
+ var ops = require('./ops.cjs');
8
+ require('./object-18980796.cjs');
9
+ require('./traits.cjs');
10
+ require('./array-78849c95.cjs');
5
11
  require('./set-5b47859e.cjs');
6
- var array = require('./array-78849c95.cjs');
12
+ require('./error-0c1f634f.cjs');
13
+ require('./environment-90227ead.cjs');
14
+ require('./map-24d263c0.cjs');
15
+ require('./string-fddc5f8b.cjs');
16
+ require('./conditions-f5c0c102.cjs');
17
+ require('./storage.cjs');
18
+ require('./function-e7d18feb.cjs');
19
+ require('./abstract.cjs');
20
+ require('./math-96d5e8c4.cjs');
21
+ require('./list.cjs');
7
22
 
23
+ /**
24
+ * @template ArrayContent
25
+ * @template {boolean} [WithText=false]
26
+ * @extends AbstractDeltaArrayBuilder<'array', import('./ops.js').DeltaArrayOps<ArrayContent,WithText>>
27
+ */
28
+ class DeltaArray extends abstractArray.AbstractDeltaArrayBuilder {
29
+ /**
30
+ * @param {s.Schema<ArrayContent>} $insert
31
+ * @param {WithText} withText
32
+ */
33
+ constructor ($insert, withText) {
34
+ super('array', $insert);
35
+ this.withText = withText;
36
+ }
37
+ }
8
38
 
39
+ /**
40
+ * @template ArrayContent
41
+ * @template {boolean} [WithText=false]
42
+ * @param {s.Schema<ArrayContent>} $insert
43
+ * @param {WithText} [withText]
44
+ * @return {s.Schema<DeltaArray<ArrayContent, WithText>>}
45
+ */
46
+ const $array = ($insert, withText) => /** @type {any} */ (schema.$instanceOf(abstractArray.AbstractDeltaArrayBuilder, o => o.type === 'array' && o.ops.every(op => {
47
+ if (ops.$textOp.check(op)) return !!withText
48
+ if (ops.$insertOp.check(op)) return op.insert.every(opi => $insert.check(opi))
49
+ return true
50
+ })));
51
+ /**
52
+ * @type {s.Schema<DeltaArray<any,any>>}
53
+ */
54
+ const $arrayAny = /** @type {any} */ (schema.$instanceOf(abstractArray.AbstractDeltaArrayBuilder, o => o.type === 'array'));
9
55
 
10
- exports.appendTo = array.appendTo;
11
- exports.bubblesortItem = array.bubblesortItem;
12
- exports.copy = array.copy;
13
- exports.create = array.create;
14
- exports.equalFlat = array.equalFlat;
15
- exports.every = array.every;
16
- exports.flatten = array.flatten;
17
- exports.fold = array.fold;
18
- exports.from = array.from;
19
- exports.isArray = array.isArray;
20
- exports.last = array.last;
21
- exports.map = array.map;
22
- exports.some = array.some;
23
- exports.unfold = array.unfold;
24
- exports.unique = array.unique;
25
- exports.uniqueBy = array.uniqueBy;
56
+ /**
57
+ * @template [V=any]
58
+ * @template {boolean} [WithText=any]
59
+ * @param {s.Schema<V>} $insert
60
+ * @param {WithText} [withText]
61
+ * @return {DeltaArray<V,WithText>}
62
+ */
63
+ const array = ($insert = schema.$any, withText) => /** @type {DeltaArray<V,WithText>} */ (new DeltaArray($insert, withText ?? true));
64
+
65
+ exports.$array = $array;
66
+ exports.$arrayAny = $arrayAny;
67
+ exports.DeltaArray = DeltaArray;
68
+ exports.array = array;
26
69
  //# sourceMappingURL=array.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"array.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"array.cjs","sources":["../delta/array.js"],"sourcesContent":["import * as s from '../schema.js'\nimport { AbstractDeltaArrayBuilder } from './abstract-array.js'\nimport * as ops from './ops.js'\n\n/**\n * @template ArrayContent\n * @template {boolean} [WithText=false]\n * @extends AbstractDeltaArrayBuilder<'array', import('./ops.js').DeltaArrayOps<ArrayContent,WithText>>\n */\nexport class DeltaArray extends AbstractDeltaArrayBuilder {\n /**\n * @param {s.Schema<ArrayContent>} $insert\n * @param {WithText} withText\n */\n constructor ($insert, withText) {\n super('array', $insert)\n this.withText = withText\n }\n}\n\n/**\n * @template ArrayContent\n * @template {boolean} [WithText=false]\n * @param {s.Schema<ArrayContent>} $insert\n * @param {WithText} [withText]\n * @return {s.Schema<DeltaArray<ArrayContent, WithText>>}\n */\nexport const $array = ($insert, withText) => /** @type {any} */ (s.$instanceOf(AbstractDeltaArrayBuilder, o => o.type === 'array' && o.ops.every(op => {\n if (ops.$textOp.check(op)) return !!withText\n if (ops.$insertOp.check(op)) return op.insert.every(opi => $insert.check(opi))\n return true\n})))\n/**\n * @type {s.Schema<DeltaArray<any,any>>}\n */\nexport const $arrayAny = /** @type {any} */ (s.$instanceOf(AbstractDeltaArrayBuilder, o => o.type === 'array'))\n\n/**\n * @template [V=any]\n * @template {boolean} [WithText=any]\n * @param {s.Schema<V>} $insert\n * @param {WithText} [withText]\n * @return {DeltaArray<V,WithText>}\n */\nexport const array = ($insert = s.$any, withText) => /** @type {DeltaArray<V,WithText>} */ (new DeltaArray($insert, withText ?? true))\n"],"names":["AbstractDeltaArrayBuilder","s.$instanceOf","ops.$textOp","ops.$insertOp","s.$any"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAIA;AACA;AACA;AACA;AACA;AACO,MAAM,UAAU,SAASA,uCAAyB,CAAC;AAC1D;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE;AAClC,IAAI,KAAK,CAAC,OAAO,EAAE,OAAO,EAAC;AAC3B,IAAI,IAAI,CAAC,QAAQ,GAAG,SAAQ;AAC5B,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,MAAM,GAAG,CAAC,OAAO,EAAE,QAAQ,yBAAyBC,kBAAa,CAACD,uCAAyB,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI;AACvJ,EAAE,IAAIE,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,QAAQ;AAC9C,EAAE,IAAIC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAChF,EAAE,OAAO,IAAI;AACb,CAAC,CAAC,CAAC,EAAC;AACJ;AACA;AACA;AACY,MAAC,SAAS,uBAAuBF,kBAAa,CAACD,uCAAyB,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,EAAC;AAC/G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,KAAK,GAAG,CAAC,OAAO,GAAGI,WAAM,EAAE,QAAQ,4CAA4C,IAAI,UAAU,CAAC,OAAO,EAAE,QAAQ,IAAI,IAAI,CAAC;;;;;;;"}
@@ -0,0 +1,26 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ require('./set-5b47859e.cjs');
6
+ var array = require('./array-78849c95.cjs');
7
+
8
+
9
+
10
+ exports.appendTo = array.appendTo;
11
+ exports.bubblesortItem = array.bubblesortItem;
12
+ exports.copy = array.copy;
13
+ exports.create = array.create;
14
+ exports.equalFlat = array.equalFlat;
15
+ exports.every = array.every;
16
+ exports.flatten = array.flatten;
17
+ exports.fold = array.fold;
18
+ exports.from = array.from;
19
+ exports.isArray = array.isArray;
20
+ exports.last = array.last;
21
+ exports.map = array.map;
22
+ exports.some = array.some;
23
+ exports.unfold = array.unfold;
24
+ exports.unique = array.unique;
25
+ exports.uniqueBy = array.uniqueBy;
26
+ //# sourceMappingURL=array2.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"array2.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,398 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var observable = require('./observable.cjs');
6
+ var ops = require('./ops.cjs');
7
+ require('./abstract.cjs');
8
+ require('./array.cjs');
9
+ var node = require('./node.cjs');
10
+ require('./map.cjs');
11
+ require('./text.cjs');
12
+ require('./value.cjs');
13
+ require('./transformer.cjs');
14
+ var dom = require('./dom-2b123630.cjs');
15
+ var set = require('./set-5b47859e.cjs');
16
+ var map = require('./map-24d263c0.cjs');
17
+ var error = require('./error-0c1f634f.cjs');
18
+ var math = require('./math-96d5e8c4.cjs');
19
+ var mutex = require('./mutex-63f09c81.cjs');
20
+ var schema = require('./schema.cjs');
21
+ require('./array-78849c95.cjs');
22
+ require('./object-18980796.cjs');
23
+ require('./traits.cjs');
24
+ require('./function-e7d18feb.cjs');
25
+ require('./list.cjs');
26
+ require('./environment-90227ead.cjs');
27
+ require('./string-fddc5f8b.cjs');
28
+ require('./conditions-f5c0c102.cjs');
29
+ require('./storage.cjs');
30
+ require('./abstract-array.cjs');
31
+ require('./pair-ab022bc3.cjs');
32
+
33
+ /* global MutationObserver */
34
+
35
+ /**
36
+ * @template T
37
+ * @typedef {import('../schema.js').Schema<T>} Schema
38
+ */
39
+
40
+ /**
41
+ * @template {delta.AbstractDelta} DeltaA
42
+ * @template {delta.AbstractDelta} DeltaB
43
+ */
44
+ class Binding {
45
+ /**
46
+ * @param {RDT<DeltaA>} a
47
+ * @param {RDT<DeltaB>} b
48
+ * @param {dt.Template<any,DeltaA,DeltaB>} template
49
+ */
50
+ constructor (a, b, template) {
51
+ /**
52
+ * @type {dt.Transformer<any,DeltaA,DeltaB>}
53
+ */
54
+ this.t = template.init();
55
+ this.a = a;
56
+ this.b = b;
57
+ this._mux = mutex.createMutex();
58
+ this._achanged = this.a.on('change', d => this._mux(() => {
59
+ const tres = this.t.applyA(d);
60
+ if (tres.a) {
61
+ a.update(tres.a);
62
+ }
63
+ if (tres.b) {
64
+ b.update(tres.b);
65
+ }
66
+ }));
67
+ this._bchanged = this.b.on('change', d => this._mux(() => {
68
+ const tres = this.t.applyB(d);
69
+ if (tres.b) {
70
+ this.b.update(tres.b);
71
+ }
72
+ if (tres.a) {
73
+ a.update(tres.a);
74
+ }
75
+ }));
76
+ }
77
+
78
+ destroy = () => {
79
+ this.a.off('destroy', this.destroy);
80
+ this.b.off('destroy', this.destroy);
81
+ this.a.off('change', this._achanged);
82
+ this.b.off('change', this._bchanged);
83
+ }
84
+ }
85
+
86
+ /**
87
+ * Abstract Interface for a delta-based Replicated Data Type.
88
+ *
89
+ * @template {delta.AbstractDelta} Delta
90
+ * @typedef {ObservableV2<{ 'change': (delta: Delta) => void, 'destroy': (rdt:RDT<Delta>)=>void }> & { update: (delta: Delta) => any, destroy: () => void }} RDT
91
+ */
92
+
93
+ /**
94
+ * @template {delta.AbstractDelta} DeltaA
95
+ * @template {dt.Template<any,DeltaA,any>} Transformer
96
+ * @param {RDT<DeltaA>} a
97
+ * @param {RDT<Transformer extends dt.Template<any,DeltaA,infer DeltaB> ? DeltaB : never>} b
98
+ * @param {dt.Template<any,DeltaA,any>} template
99
+ */
100
+ const bind = (a, b, template) => new Binding(a, b, template);
101
+
102
+ /**
103
+ * @template {delta.AbstractDelta} Delta
104
+ * @implements RDT<Delta>
105
+ * @extends {ObservableV2<{ change: (delta: Delta) => void, 'destroy': (rdt:DeltaRDT<Delta>)=>void }>}
106
+ */
107
+ class DeltaRDT extends observable.ObservableV2 {
108
+ /**
109
+ * @param {Schema<Delta>} $delta
110
+ */
111
+ constructor ($delta) {
112
+ super();
113
+ this.$delta = $delta;
114
+ /**
115
+ * @type {Delta?}
116
+ */
117
+ this.state = null;
118
+ this._mux = mutex.createMutex();
119
+ }
120
+
121
+ /**
122
+ * @param {Delta} delta
123
+ */
124
+ update = delta => delta.isEmpty() || this._mux(() => {
125
+ if (this.state != null) {
126
+ this.state.apply(delta);
127
+ } else {
128
+ this.state = delta;
129
+ }
130
+ this.emit('change', [delta]);
131
+ })
132
+
133
+ destroy () {
134
+ this.emit('destroy', [this]);
135
+ super.destroy();
136
+ }
137
+ }
138
+
139
+ /**
140
+ * @template {delta.AbstractDelta} Delta
141
+ * @param {Schema<Delta>} $delta
142
+ */
143
+ const deltaRDT = $delta => new DeltaRDT($delta);
144
+
145
+ /**
146
+ * @param {Node} domNode
147
+ */
148
+ const domToDelta = domNode => {
149
+ if (dom.$element.check(domNode)) {
150
+ const d = node.node(domNode.nodeName.toLowerCase());
151
+ for (let i = 0; i < domNode.attributes.length; i++) {
152
+ const attr = /** @type {Attr} */ (domNode.attributes.item(i));
153
+ d.attributes.set(attr.nodeName, attr.value);
154
+ }
155
+ domNode.childNodes.forEach(child => {
156
+ d.children.insert(dom.$text.check(child) ? child.textContent : [domToDelta(child)]);
157
+ });
158
+ return d
159
+ }
160
+ error.unexpectedCase();
161
+ };
162
+
163
+ /**
164
+ * @param {DomDelta} d
165
+ */
166
+ const deltaToDom = d => {
167
+ if (node.$nodeAny.check(d)) {
168
+ const n = dom.element(d.name);
169
+ d.attributes.forEach(change => {
170
+ if (ops.$insertOp.check(change)) {
171
+ n.setAttribute(change.key, change.value);
172
+ }
173
+ });
174
+ d.children.forEach(child => {
175
+ if (ops.$insertOp.check(child)) {
176
+ n.append(...child.insert.map(deltaToDom));
177
+ } else if (ops.$textOp.check(child)) {
178
+ n.append(dom.text(child.insert));
179
+ }
180
+ });
181
+ return n
182
+ }
183
+ error.unexpectedCase();
184
+ };
185
+
186
+ /**
187
+ * @param {Element} el
188
+ * @param {delta.Node<string,any,any,any>} d
189
+ */
190
+ const applyDeltaToDom = (el, d) => {
191
+ d.attributes.forEach(change => {
192
+ if (ops.$deleteOp.check(change)) {
193
+ el.removeAttribute(change.key);
194
+ } else {
195
+ el.setAttribute(change.key, change.value);
196
+ }
197
+ });
198
+ let childIndex = 0;
199
+ let childOffset = 0;
200
+ d.children.forEach(change => {
201
+ let child = el.childNodes[childIndex] || null;
202
+ if (ops.$deleteOp.check(change)) {
203
+ let len = change.length;
204
+ while (len > 0) {
205
+ if (dom.$element.check(child)) {
206
+ child.remove();
207
+ len--;
208
+ } else if (dom.$text.check(child)) {
209
+ const childLen = child.length;
210
+ if (childOffset === 0 && childLen <= len) {
211
+ child.remove();
212
+ len -= childLen;
213
+ } else {
214
+ const spliceLen = math.min(len, childLen - childOffset);
215
+ child.deleteData(childOffset, spliceLen);
216
+ if (child.length <= childOffset) {
217
+ childOffset = 0;
218
+ childIndex++;
219
+ }
220
+ }
221
+ }
222
+ }
223
+ } else if (ops.$insertOp.check(change)) {
224
+ if (childOffset > 0) {
225
+ const tchild = dom.$text.cast(child);
226
+ child = tchild.splitText(childOffset);
227
+ childIndex++;
228
+ childOffset = 0;
229
+ }
230
+ el.insertBefore(dom.fragment(change.insert.map(deltaToDom)), child);
231
+ } else if (ops.$modifyOp.check(change)) {
232
+ applyDeltaToDom(dom.$element.cast(child), change.modify);
233
+ } else if (ops.$textOp.check(change)) {
234
+ el.insertBefore(dom.text(change.insert), child);
235
+ } else {
236
+ error.unexpectedCase();
237
+ }
238
+ });
239
+ };
240
+
241
+ const $domDelta = node.$node(schema.$string, schema.$record(schema.$string, schema.$string), schema.$never, { recursive: true, withText: true });
242
+
243
+ /**
244
+ * @param {Element} observedNode
245
+ * @param {MutationRecord[]} mutations
246
+ * @param {any} origin assign this origin to the generated delta
247
+ */
248
+ const _mutationsToDelta = (observedNode, mutations, origin) => {
249
+ /**
250
+ * @typedef {{ removedBefore: Map<Node?,number>, added: Set<Node>, modified: number, d: delta.Node }} ChangedNodeInfo
251
+ */
252
+ /**
253
+ * Compute all deltas without recursion.
254
+ *
255
+ * 1. mark all changed parents in parentsChanged
256
+ * 2. fill out necessary information for each changed parent ()
257
+ */
258
+ //
259
+ /**
260
+ * @type {Map<Node,ChangedNodeInfo>}
261
+ */
262
+ const changedNodes = map.create();
263
+ /**
264
+ * @param {Node} node
265
+ * @return {ChangedNodeInfo}
266
+ */
267
+ const getChangedNodeInfo = node$1 => map.setIfUndefined(changedNodes, node$1, () => ({ removedBefore: map.create(), added: set.create(), modified: 0, d: node.node(node$1.nodeName.toLowerCase()) }));
268
+ const observedNodeInfo = getChangedNodeInfo(observedNode);
269
+ mutations.forEach(mutation => {
270
+ const target = /** @type {HTMLElement} */ (mutation.target);
271
+ const parent = target.parentNode;
272
+ const attrName = /** @type {string} */ (mutation.attributeName);
273
+ const newVal = target.getAttribute(attrName);
274
+ const info = getChangedNodeInfo(target);
275
+ const d = info.d;
276
+ // go up the tree and mark that a child has been modified
277
+ for (let changedParent = parent; changedParent != null && getChangedNodeInfo(changedParent).modified++ > 1 && changedParent !== observedNode; changedParent = changedParent.parentNode) {
278
+ // nop
279
+ }
280
+ switch (mutation.type) {
281
+ case 'attributes': {
282
+ const attrs = /** @type {delta.Node<any,any,any>} */ (d).attributes;
283
+ if (newVal == null) {
284
+ attrs.delete(attrName);
285
+ } else {
286
+ attrs.set(/** @type {string} */ (attrName), newVal);
287
+ }
288
+ break
289
+ }
290
+ case 'characterData': {
291
+ error.methodUnimplemented();
292
+ break
293
+ }
294
+ case 'childList': {
295
+ const targetInfo = getChangedNodeInfo(target);
296
+ mutation.addedNodes.forEach(node => {
297
+ targetInfo.added.add(node);
298
+ });
299
+ const removed = mutation.removedNodes.length;
300
+ if (removed > 0) {
301
+ // @todo this can't work because next can be null
302
+ targetInfo.removedBefore.set(mutation.nextSibling, removed);
303
+ }
304
+ break
305
+ }
306
+ }
307
+ });
308
+ changedNodes.forEach((info, node) => {
309
+ const numOfChildChanges = info.modified + info.removedBefore.size + info.added.size;
310
+ const d = /** @type {delta.Node<any,any,any>} */ (info.d);
311
+ if (numOfChildChanges > 0) {
312
+ node.childNodes.forEach(nchild => {
313
+ if (info.removedBefore.has(nchild)) { // can happen separately
314
+ d.children.delete(/** @type {number} */ (info.removedBefore.get(nchild)));
315
+ }
316
+ if (info.added.has(nchild)) {
317
+ d.children.insert(dom.$text.check(nchild) ? nchild.textContent : [domToDelta(nchild)]);
318
+ } else if (changedNodes.has(nchild)) {
319
+ d.children.modify(getChangedNodeInfo(nchild).d);
320
+ }
321
+ });
322
+ // remove items to the end, if necessary
323
+ d.children.delete(info.removedBefore.get(null) ?? 0);
324
+ }
325
+ d.done();
326
+ });
327
+ observedNodeInfo.d.origin = origin;
328
+ return observedNodeInfo.d
329
+ };
330
+
331
+ /**
332
+ * @typedef {delta.RecursiveNode<string, { [key:string]: string }, never, true>} DomDelta
333
+ */
334
+
335
+ /**
336
+ * @template {DomDelta} [D=DomDelta]
337
+ * @implements RDT<D>
338
+ * @extends {ObservableV2<{ change: (delta: D)=>void, destroy: (rdt:DomRDT<D>)=>void }>}>}
339
+ */
340
+ class DomRDT extends observable.ObservableV2 {
341
+ /**
342
+ * @param {Element} observedNode
343
+ */
344
+ constructor (observedNode) {
345
+ super();
346
+ this.observedNode = observedNode;
347
+ this._mux = mutex.createMutex();
348
+ this.observer = new MutationObserver(this._mutationHandler);
349
+ this.observer.observe(observedNode, {
350
+ subtree: true,
351
+ childList: true,
352
+ attributes: true,
353
+ characterDataOldValue: true
354
+ });
355
+ }
356
+
357
+ /**
358
+ * @param {MutationRecord[]} mutations
359
+ */
360
+ _mutationHandler = mutations =>
361
+ mutations.length > 0 && this._mux(() => {
362
+ this.emit('change', [/** @type {D} */(_mutationsToDelta(this.observedNode, mutations, this))]);
363
+ })
364
+
365
+ /**
366
+ * @param {D} delta
367
+ */
368
+ update = delta => {
369
+ if (delta.origin !== this) {
370
+ // @todo the retrieved changes must be transformed agains the updated changes. need a proper
371
+ // transaction system
372
+ this._mutationHandler(this.observer.takeRecords());
373
+ this._mux(() => {
374
+ applyDeltaToDom(this.observedNode, delta);
375
+ const mutations = this.observer.takeRecords();
376
+ this.emit('change', [/** @type {D} */(_mutationsToDelta(this.observedNode, mutations, delta.origin))]);
377
+ });
378
+ }
379
+ }
380
+
381
+ destroy () {
382
+ this.emit('destroy', [this]);
383
+ super.destroy();
384
+ this.observer.disconnect();
385
+ }
386
+ }
387
+
388
+ /**
389
+ * @param {Element} dom
390
+ */
391
+ const domRDT = dom => new DomRDT(dom);
392
+
393
+ exports.$domDelta = $domDelta;
394
+ exports.Binding = Binding;
395
+ exports.bind = bind;
396
+ exports.deltaRDT = deltaRDT;
397
+ exports.domRDT = domRDT;
398
+ //# sourceMappingURL=binding.cjs.map