@xwiki/cristal-electron-renderer 1.2.0 → 1.4.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 (269) hide show
  1. package/package.json +19 -19
  2. package/dist/AttachmentPreview-DNQ6Ebkw.css +0 -1
  3. package/dist/AttachmentPreview-Ecn8Pmvf.js +0 -2
  4. package/dist/AttachmentPreview-Ecn8Pmvf.js.map +0 -1
  5. package/dist/AuthServiceBanner-7KaHK0Au.js +0 -2
  6. package/dist/AuthServiceBanner-7KaHK0Au.js.map +0 -1
  7. package/dist/AuthServiceBanner-BArubXdu.css +0 -1
  8. package/dist/DeletePage-DA6E5XYv.js +0 -2
  9. package/dist/DeletePage-DA6E5XYv.js.map +0 -1
  10. package/dist/GitHubLoginMenu-Crh899SM.js +0 -2
  11. package/dist/GitHubLoginMenu-Crh899SM.js.map +0 -1
  12. package/dist/LoggedInMenu-kH3kWMGK.js +0 -2
  13. package/dist/LoggedInMenu-kH3kWMGK.js.map +0 -1
  14. package/dist/LoginMenu-D_c21AxX.js +0 -2
  15. package/dist/LoginMenu-D_c21AxX.js.map +0 -1
  16. package/dist/MovePage-BHS998Jm.css +0 -1
  17. package/dist/MovePage-Du2Z2i7H.js +0 -2
  18. package/dist/MovePage-Du2Z2i7H.js.map +0 -1
  19. package/dist/NextcloudLoginMenu-BTVdL-FM.js +0 -2
  20. package/dist/NextcloudLoginMenu-BTVdL-FM.js.map +0 -1
  21. package/dist/NextcloudLoginMenu-DGCgMCya.css +0 -1
  22. package/dist/RenamePage-CQF0H3Kh.js +0 -2
  23. package/dist/RenamePage-CQF0H3Kh.js.map +0 -1
  24. package/dist/SettingsConfigurations-B9GWI5mw.css +0 -1
  25. package/dist/SettingsConfigurations-Cy7Cfmm4.js +0 -2
  26. package/dist/SettingsConfigurations-Cy7Cfmm4.js.map +0 -1
  27. package/dist/c-config-menu-BGV5XXU8.css +0 -1
  28. package/dist/c-config-menu-C99poXWy.js +0 -2
  29. package/dist/c-config-menu-C99poXWy.js.map +0 -1
  30. package/dist/c-edit-blocknote-ByH5aYGe.js +0 -257
  31. package/dist/c-edit-blocknote-ByH5aYGe.js.map +0 -1
  32. package/dist/c-edit-blocknote-gIdUYHeV.css +0 -1
  33. package/dist/chunk.24ZZSBUF-BmQPh48m.js +0 -89
  34. package/dist/chunk.24ZZSBUF-BmQPh48m.js.map +0 -1
  35. package/dist/chunk.36O46B5H-Cv2poSyf.js +0 -64
  36. package/dist/chunk.36O46B5H-Cv2poSyf.js.map +0 -1
  37. package/dist/chunk.3LWOA5DF-D8Va5Pmw.js +0 -77
  38. package/dist/chunk.3LWOA5DF-D8Va5Pmw.js.map +0 -1
  39. package/dist/chunk.3RPBFEDE-DI7eSlIl.js +0 -2
  40. package/dist/chunk.3RPBFEDE-DI7eSlIl.js.map +0 -1
  41. package/dist/chunk.4TUIT776-BvlNwMXD.js +0 -18
  42. package/dist/chunk.4TUIT776-BvlNwMXD.js.map +0 -1
  43. package/dist/chunk.6CTB5ZDJ-9Su7bEUQ.js +0 -2
  44. package/dist/chunk.6CTB5ZDJ-9Su7bEUQ.js.map +0 -1
  45. package/dist/chunk.7E4JTYWU-Ci99jpyG.js +0 -75
  46. package/dist/chunk.7E4JTYWU-Ci99jpyG.js.map +0 -1
  47. package/dist/chunk.AJ3ENQ5C-zot94vv9.js +0 -2
  48. package/dist/chunk.AJ3ENQ5C-zot94vv9.js.map +0 -1
  49. package/dist/chunk.B4BZKR24-B0iVuGLD.js +0 -2
  50. package/dist/chunk.B4BZKR24-B0iVuGLD.js.map +0 -1
  51. package/dist/chunk.D5YQDJ7X-_UyNui_V.js +0 -2
  52. package/dist/chunk.D5YQDJ7X-_UyNui_V.js.map +0 -1
  53. package/dist/chunk.DFHYNK3F-bS0lNIuO.js +0 -86
  54. package/dist/chunk.DFHYNK3F-bS0lNIuO.js.map +0 -1
  55. package/dist/chunk.GMYPQTFK-BT1AAYXJ.js +0 -2
  56. package/dist/chunk.GMYPQTFK-BT1AAYXJ.js.map +0 -1
  57. package/dist/chunk.J5ZM7LIC-n6gjp3-L.js +0 -244
  58. package/dist/chunk.J5ZM7LIC-n6gjp3-L.js.map +0 -1
  59. package/dist/chunk.JCXLDPQF-BOaK9AtU.js +0 -622
  60. package/dist/chunk.JCXLDPQF-BOaK9AtU.js.map +0 -1
  61. package/dist/chunk.JHOXTQXA-CWkZ1weQ.js +0 -24
  62. package/dist/chunk.JHOXTQXA-CWkZ1weQ.js.map +0 -1
  63. package/dist/chunk.JQBT7BOV-BKSO0Hfn.js +0 -3378
  64. package/dist/chunk.JQBT7BOV-BKSO0Hfn.js.map +0 -1
  65. package/dist/chunk.JXOKFADN-DpK3Q_uU.js +0 -785
  66. package/dist/chunk.JXOKFADN-DpK3Q_uU.js.map +0 -1
  67. package/dist/chunk.KPLQLAWP-DUYDfZ7-.js +0 -163
  68. package/dist/chunk.KPLQLAWP-DUYDfZ7-.js.map +0 -1
  69. package/dist/chunk.LD4M4QGE-cX1_6HT7.js +0 -2
  70. package/dist/chunk.LD4M4QGE-cX1_6HT7.js.map +0 -1
  71. package/dist/chunk.NYIIDP5N-AHr3eTN0.js +0 -2
  72. package/dist/chunk.NYIIDP5N-AHr3eTN0.js.map +0 -1
  73. package/dist/chunk.R45OWEVP-WMyXo-Fn.js +0 -181
  74. package/dist/chunk.R45OWEVP-WMyXo-Fn.js.map +0 -1
  75. package/dist/chunk.RWUUFNUL-BJhNq5wM.js +0 -2
  76. package/dist/chunk.RWUUFNUL-BJhNq5wM.js.map +0 -1
  77. package/dist/chunk.RY756JLP-BUknFjxa.js +0 -22
  78. package/dist/chunk.RY756JLP-BUknFjxa.js.map +0 -1
  79. package/dist/chunk.SI4ACBFK-BB831ml8.js +0 -58
  80. package/dist/chunk.SI4ACBFK-BB831ml8.js.map +0 -1
  81. package/dist/chunk.TRHSUYII-DFnBKJNh.js +0 -140
  82. package/dist/chunk.TRHSUYII-DFnBKJNh.js.map +0 -1
  83. package/dist/chunk.XA43ZQPC-maNlqVLX.js +0 -395
  84. package/dist/chunk.XA43ZQPC-maNlqVLX.js.map +0 -1
  85. package/dist/chunk.XSFJLY2D-ldEKWtxN.js +0 -178
  86. package/dist/chunk.XSFJLY2D-ldEKWtxN.js.map +0 -1
  87. package/dist/chunk.YHLNUJ7P-BGNuPG1R.js +0 -109
  88. package/dist/chunk.YHLNUJ7P-BGNuPG1R.js.map +0 -1
  89. package/dist/chunk.ZGGPD2XJ-DD1S3h7C.js +0 -2
  90. package/dist/chunk.ZGGPD2XJ-DD1S3h7C.js.map +0 -1
  91. package/dist/chunk.ZH2AND3P-CzagA8cz.js +0 -288
  92. package/dist/chunk.ZH2AND3P-CzagA8cz.js.map +0 -1
  93. package/dist/class-map-DmaCJs8c.js +0 -2
  94. package/dist/class-map-DmaCJs8c.js.map +0 -1
  95. package/dist/filesystem-internal-link-serializer-BmtbMUwV.js +0 -2
  96. package/dist/filesystem-internal-link-serializer-BmtbMUwV.js.map +0 -1
  97. package/dist/floating-ui.dom-1S43Ew4Q.js +0 -2
  98. package/dist/floating-ui.dom-1S43Ew4Q.js.map +0 -1
  99. package/dist/github-CRi3Ye_z.js +0 -3
  100. package/dist/github-CRi3Ye_z.js.map +0 -1
  101. package/dist/github-internal-link-serializer-ChUBU16v.js +0 -2
  102. package/dist/github-internal-link-serializer-ChUBU16v.js.map +0 -1
  103. package/dist/hocuspocus-provider.esm-DpwNtHpL.js +0 -2
  104. package/dist/hocuspocus-provider.esm-DpwNtHpL.js.map +0 -1
  105. package/dist/if-defined-O-hFrvt0.js +0 -2
  106. package/dist/if-defined-O-hFrvt0.js.map +0 -1
  107. package/dist/index-B1WxkRNy.js +0 -254
  108. package/dist/index-B1WxkRNy.js.map +0 -1
  109. package/dist/index-BgL5UHSB.css +0 -1
  110. package/dist/index-DWPjg9z3.js +0 -2
  111. package/dist/index-DWPjg9z3.js.map +0 -1
  112. package/dist/index-qhuTooVL.js +0 -3
  113. package/dist/index-qhuTooVL.js.map +0 -1
  114. package/dist/index.html +0 -13
  115. package/dist/live-z5w0O4st.js +0 -2
  116. package/dist/live-z5w0O4st.js.map +0 -1
  117. package/dist/module-RjUF93sV.js +0 -717
  118. package/dist/module-RjUF93sV.js.map +0 -1
  119. package/dist/native-48B9X9Wg.js +0 -2
  120. package/dist/native-48B9X9Wg.js.map +0 -1
  121. package/dist/nextcloud-B3M7otLC.js +0 -31
  122. package/dist/nextcloud-B3M7otLC.js.map +0 -1
  123. package/dist/nextcloud-internal-link-serializer-6Syv5TEU.js +0 -7
  124. package/dist/nextcloud-internal-link-serializer-6Syv5TEU.js.map +0 -1
  125. package/dist/offline-3x82kJQp.js +0 -4
  126. package/dist/offline-3x82kJQp.js.map +0 -1
  127. package/dist/query-x48B6FB_.js +0 -2
  128. package/dist/query-x48B6FB_.js.map +0 -1
  129. package/dist/shoelace-ZF5apisL.js +0 -3
  130. package/dist/shoelace-ZF5apisL.js.map +0 -1
  131. package/dist/static-Dm20cmTz.js +0 -3
  132. package/dist/static-Dm20cmTz.js.map +0 -1
  133. package/dist/staticBuild-BOgweg16.js +0 -2
  134. package/dist/staticBuild-BOgweg16.js.map +0 -1
  135. package/dist/translations-D5nOIu3x.js +0 -2
  136. package/dist/translations-D5nOIu3x.js.map +0 -1
  137. package/dist/translations-Ds9OkLNv.js +0 -2
  138. package/dist/translations-Ds9OkLNv.js.map +0 -1
  139. package/dist/vuetify-BxGNBe1U.js +0 -19
  140. package/dist/vuetify-BxGNBe1U.js.map +0 -1
  141. package/dist/vuetify-DJa-zcj7.css +0 -1
  142. package/dist/worker-BgcG6AhJ.js +0 -202
  143. package/dist/worker-BgcG6AhJ.js.map +0 -1
  144. package/dist/x-alert-BeYgGEHw.js +0 -2
  145. package/dist/x-alert-BeYgGEHw.js.map +0 -1
  146. package/dist/x-alert-BhErtBtU.css +0 -1
  147. package/dist/x-alert-DfYpLdml.css +0 -1
  148. package/dist/x-alert-Dy2REhpp.js +0 -2
  149. package/dist/x-alert-Dy2REhpp.js.map +0 -1
  150. package/dist/x-avatar-2efH4gNX.css +0 -1
  151. package/dist/x-avatar-C4CTlSRd.js +0 -2
  152. package/dist/x-avatar-C4CTlSRd.js.map +0 -1
  153. package/dist/x-avatar-DzYlPdwz.js +0 -2
  154. package/dist/x-avatar-DzYlPdwz.js.map +0 -1
  155. package/dist/x-breadcrumb-3U5TzpgN.js +0 -2
  156. package/dist/x-breadcrumb-3U5TzpgN.js.map +0 -1
  157. package/dist/x-breadcrumb-BMSNlvvi.css +0 -1
  158. package/dist/x-breadcrumb-BYgHeSE3.js +0 -2
  159. package/dist/x-breadcrumb-BYgHeSE3.js.map +0 -1
  160. package/dist/x-btn-9AKb7ryY.js +0 -2
  161. package/dist/x-btn-9AKb7ryY.js.map +0 -1
  162. package/dist/x-btn-CWfGjEgy.js +0 -2
  163. package/dist/x-btn-CWfGjEgy.js.map +0 -1
  164. package/dist/x-btn-DPGq6Sd-.css +0 -1
  165. package/dist/x-btn.vue_vue_type_script_setup_true_lang-D3pg_1oq.js +0 -2
  166. package/dist/x-btn.vue_vue_type_script_setup_true_lang-D3pg_1oq.js.map +0 -1
  167. package/dist/x-card-BiFAsKLZ.js +0 -2
  168. package/dist/x-card-BiFAsKLZ.js.map +0 -1
  169. package/dist/x-card-blonMcP4.js +0 -2
  170. package/dist/x-card-blonMcP4.js.map +0 -1
  171. package/dist/x-checkbox-BoqoQxdA.css +0 -1
  172. package/dist/x-checkbox-CfFCxOCr.js +0 -2
  173. package/dist/x-checkbox-CfFCxOCr.js.map +0 -1
  174. package/dist/x-checkbox-VDSX4CX7.js +0 -2
  175. package/dist/x-checkbox-VDSX4CX7.js.map +0 -1
  176. package/dist/x-col-DsUQg5Gm.js +0 -2
  177. package/dist/x-col-DsUQg5Gm.js.map +0 -1
  178. package/dist/x-container-B1osS5wH.js +0 -2
  179. package/dist/x-container-B1osS5wH.js.map +0 -1
  180. package/dist/x-dialog-Bk9LE0HR.css +0 -1
  181. package/dist/x-dialog-Cwb1fieH.js +0 -2
  182. package/dist/x-dialog-Cwb1fieH.js.map +0 -1
  183. package/dist/x-dialog-VzzVz38L.css +0 -1
  184. package/dist/x-dialog-eOwazoAI.js +0 -2
  185. package/dist/x-dialog-eOwazoAI.js.map +0 -1
  186. package/dist/x-divider-Bf6b5P6D.js +0 -2
  187. package/dist/x-divider-Bf6b5P6D.js.map +0 -1
  188. package/dist/x-divider-D36BIsQM.js +0 -2
  189. package/dist/x-divider-D36BIsQM.js.map +0 -1
  190. package/dist/x-dropdown-CxWpPIwn.css +0 -1
  191. package/dist/x-dropdown-DfwjES9w.js +0 -2
  192. package/dist/x-dropdown-DfwjES9w.js.map +0 -1
  193. package/dist/x-dropdown-GNs7ILlc.css +0 -1
  194. package/dist/x-dropdown-ds5_iBZ4.js +0 -2
  195. package/dist/x-dropdown-ds5_iBZ4.js.map +0 -1
  196. package/dist/x-file-input-B9mfyR4z.js +0 -2
  197. package/dist/x-file-input-B9mfyR4z.js.map +0 -1
  198. package/dist/x-file-input-BSstA5LD.css +0 -1
  199. package/dist/x-file-input-DftepgSQ.js +0 -2
  200. package/dist/x-file-input-DftepgSQ.js.map +0 -1
  201. package/dist/x-form-C5eClK9q.js +0 -2
  202. package/dist/x-form-C5eClK9q.js.map +0 -1
  203. package/dist/x-form-CK24VrXN.css +0 -1
  204. package/dist/x-form-DGUS5Veh.css +0 -1
  205. package/dist/x-form-etxLXE0R.js +0 -2
  206. package/dist/x-form-etxLXE0R.js.map +0 -1
  207. package/dist/x-img-CNPL9bZj.js +0 -2
  208. package/dist/x-img-CNPL9bZj.js.map +0 -1
  209. package/dist/x-img-DYWmHySi.js +0 -2
  210. package/dist/x-img-DYWmHySi.js.map +0 -1
  211. package/dist/x-load-BlPeW_ej.css +0 -1
  212. package/dist/x-load-CM4p-BU2.css +0 -1
  213. package/dist/x-load-CatWwBSt.js +0 -2
  214. package/dist/x-load-CatWwBSt.js.map +0 -1
  215. package/dist/x-load-pklPPw3d.js +0 -2
  216. package/dist/x-load-pklPPw3d.js.map +0 -1
  217. package/dist/x-menu-BmuGyRjl.css +0 -1
  218. package/dist/x-menu-C0JNNHR2.js +0 -2
  219. package/dist/x-menu-C0JNNHR2.js.map +0 -1
  220. package/dist/x-menu-CKBWYMym.js +0 -2
  221. package/dist/x-menu-CKBWYMym.js.map +0 -1
  222. package/dist/x-menu-item-9k48D3Mw.js +0 -2
  223. package/dist/x-menu-item-9k48D3Mw.js.map +0 -1
  224. package/dist/x-menu-item-fSf-cD7q.js +0 -2
  225. package/dist/x-menu-item-fSf-cD7q.js.map +0 -1
  226. package/dist/x-menu-label-BDlCFsFH.js +0 -2
  227. package/dist/x-menu-label-BDlCFsFH.js.map +0 -1
  228. package/dist/x-menu-label-C8o6TwqC.js +0 -2
  229. package/dist/x-menu-label-C8o6TwqC.js.map +0 -1
  230. package/dist/x-menu-label-DhRAj-fk.css +0 -1
  231. package/dist/x-row-DsUQg5Gm.js +0 -2
  232. package/dist/x-row-DsUQg5Gm.js.map +0 -1
  233. package/dist/x-search-C6XAaOXg.js +0 -2
  234. package/dist/x-search-C6XAaOXg.js.map +0 -1
  235. package/dist/x-search-CmWnWxsP.js +0 -2
  236. package/dist/x-search-CmWnWxsP.js.map +0 -1
  237. package/dist/x-select-C8GSGs-Z.js +0 -2
  238. package/dist/x-select-C8GSGs-Z.js.map +0 -1
  239. package/dist/x-select-Da6f14h4.js +0 -2
  240. package/dist/x-select-Da6f14h4.js.map +0 -1
  241. package/dist/x-tab-BDpZS53n.js +0 -2
  242. package/dist/x-tab-BDpZS53n.js.map +0 -1
  243. package/dist/x-tab-DV937RB-.js +0 -2
  244. package/dist/x-tab-DV937RB-.js.map +0 -1
  245. package/dist/x-tab-group-C3YcH4jU.js +0 -2
  246. package/dist/x-tab-group-C3YcH4jU.js.map +0 -1
  247. package/dist/x-tab-group-CT7pAQGH.js +0 -2
  248. package/dist/x-tab-group-CT7pAQGH.js.map +0 -1
  249. package/dist/x-tab-panel--wEPqeL9.js +0 -2
  250. package/dist/x-tab-panel--wEPqeL9.js.map +0 -1
  251. package/dist/x-tab-panel-BV2Axw5I.js +0 -2
  252. package/dist/x-tab-panel-BV2Axw5I.js.map +0 -1
  253. package/dist/x-text-field-B0juKwq0.js +0 -2
  254. package/dist/x-text-field-B0juKwq0.js.map +0 -1
  255. package/dist/x-text-field-CNuOWA3c.js +0 -2
  256. package/dist/x-text-field-CNuOWA3c.js.map +0 -1
  257. package/dist/x-tree-Aj-ivC70.js +0 -2
  258. package/dist/x-tree-Aj-ivC70.js.map +0 -1
  259. package/dist/x-tree-CUnE9yj-.js +0 -2
  260. package/dist/x-tree-CUnE9yj-.js.map +0 -1
  261. package/dist/x-tree-D0WG-8EM.css +0 -1
  262. package/dist/x-tree-OLo4IKf9.css +0 -1
  263. package/dist/xwiki-BeDAdEBl.js +0 -4
  264. package/dist/xwiki-BeDAdEBl.js.map +0 -1
  265. package/dist/xwiki-internal-link-serializer-Cd8xorru-_7nXuj98.js +0 -2
  266. package/dist/xwiki-internal-link-serializer-Cd8xorru-_7nXuj98.js.map +0 -1
  267. package/dist/xwiki-logo-color-DZ9bdNW4.svg +0 -18
  268. package/dist/yjs-VtUl3AlT.js +0 -6
  269. package/dist/yjs-VtUl3AlT.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"hocuspocus-provider.esm-DpwNtHpL.js","sources":["../../../node_modules/.pnpm/@hocuspocus+common@2.15.3/node_modules/@hocuspocus/common/dist/hocuspocus-common.esm.js","../../../node_modules/.pnpm/@lifeomic+attempt@3.1.0/node_modules/@lifeomic/attempt/dist/es6/src/index.js","../../../node_modules/.pnpm/@hocuspocus+provider@2.15.3_y-protocols@1.0.7_yjs@13.6.30__yjs@13.6.30/node_modules/@hocuspocus/provider/dist/hocuspocus-provider.esm.js"],"sourcesContent":["/**\n * Common Math expressions.\n *\n * @module math\n */\n\nconst floor = Math.floor;\n\n/**\n * @function\n * @param {number} a\n * @param {number} b\n * @return {number} The smaller element of a and b\n */\nconst min = (a, b) => a < b ? a : b;\n\n/**\n * @function\n * @param {number} a\n * @param {number} b\n * @return {number} The bigger element of a and b\n */\nconst max = (a, b) => a > b ? a : b;\n\n/* eslint-env browser */\nconst BIT8 = 128;\nconst BITS7 = 127;\n\n/**\n * Utility helpers for working with numbers.\n *\n * @module number\n */\n\nconst MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER;\n\n/**\n * @param {string} str\n * @return {Uint8Array}\n */\nconst _encodeUtf8Polyfill = str => {\n const encodedString = unescape(encodeURIComponent(str));\n const len = encodedString.length;\n const buf = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n buf[i] = /** @type {number} */ (encodedString.codePointAt(i));\n }\n return buf\n};\n\n/* c8 ignore next */\nconst utf8TextEncoder = /** @type {TextEncoder} */ (typeof TextEncoder !== 'undefined' ? new TextEncoder() : null);\n\n/**\n * @param {string} str\n * @return {Uint8Array}\n */\nconst _encodeUtf8Native = str => utf8TextEncoder.encode(str);\n\n/**\n * @param {string} str\n * @return {Uint8Array}\n */\n/* c8 ignore next */\nconst encodeUtf8 = utf8TextEncoder ? _encodeUtf8Native : _encodeUtf8Polyfill;\n\n/* c8 ignore next */\nlet utf8TextDecoder = typeof TextDecoder === 'undefined' ? null : new TextDecoder('utf-8', { fatal: true, ignoreBOM: true });\n\n/* c8 ignore start */\nif (utf8TextDecoder && utf8TextDecoder.decode(new Uint8Array()).length === 1) {\n // Safari doesn't handle BOM correctly.\n // This fixes a bug in Safari 13.0.5 where it produces a BOM the first time it is called.\n // utf8TextDecoder.decode(new Uint8Array()).length === 1 on the first call and\n // utf8TextDecoder.decode(new Uint8Array()).length === 1 on the second call\n // Another issue is that from then on no BOM chars are recognized anymore\n /* c8 ignore next */\n utf8TextDecoder = null;\n}\n\n/**\n * Efficient schema-less binary encoding with support for variable length encoding.\n *\n * Use [lib0/encoding] with [lib0/decoding]. Every encoding function has a corresponding decoding function.\n *\n * Encodes numbers in little-endian order (least to most significant byte order)\n * and is compatible with Golang's binary encoding (https://golang.org/pkg/encoding/binary/)\n * which is also used in Protocol Buffers.\n *\n * ```js\n * // encoding step\n * const encoder = encoding.createEncoder()\n * encoding.writeVarUint(encoder, 256)\n * encoding.writeVarString(encoder, 'Hello world!')\n * const buf = encoding.toUint8Array(encoder)\n * ```\n *\n * ```js\n * // decoding step\n * const decoder = decoding.createDecoder(buf)\n * decoding.readVarUint(decoder) // => 256\n * decoding.readVarString(decoder) // => 'Hello world!'\n * decoding.hasContent(decoder) // => false - all data is read\n * ```\n *\n * @module encoding\n */\n\n/**\n * Write one byte to the encoder.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The byte that is to be encoded.\n */\nconst write = (encoder, num) => {\n const bufferLen = encoder.cbuf.length;\n if (encoder.cpos === bufferLen) {\n encoder.bufs.push(encoder.cbuf);\n encoder.cbuf = new Uint8Array(bufferLen * 2);\n encoder.cpos = 0;\n }\n encoder.cbuf[encoder.cpos++] = num;\n};\n\n/**\n * Write a variable length unsigned integer. Max encodable integer is 2^53.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nconst writeVarUint = (encoder, num) => {\n while (num > BITS7) {\n write(encoder, BIT8 | (BITS7 & num));\n num = floor(num / 128); // shift >>> 7\n }\n write(encoder, BITS7 & num);\n};\n\n/**\n * A cache to store strings temporarily\n */\nconst _strBuffer = new Uint8Array(30000);\nconst _maxStrBSize = _strBuffer.length / 3;\n\n/**\n * Write a variable length string.\n *\n * @function\n * @param {Encoder} encoder\n * @param {String} str The string that is to be encoded.\n */\nconst _writeVarStringNative = (encoder, str) => {\n if (str.length < _maxStrBSize) {\n // We can encode the string into the existing buffer\n /* c8 ignore next */\n const written = utf8TextEncoder.encodeInto(str, _strBuffer).written || 0;\n writeVarUint(encoder, written);\n for (let i = 0; i < written; i++) {\n write(encoder, _strBuffer[i]);\n }\n } else {\n writeVarUint8Array(encoder, encodeUtf8(str));\n }\n};\n\n/**\n * Write a variable length string.\n *\n * @function\n * @param {Encoder} encoder\n * @param {String} str The string that is to be encoded.\n */\nconst _writeVarStringPolyfill = (encoder, str) => {\n const encodedString = unescape(encodeURIComponent(str));\n const len = encodedString.length;\n writeVarUint(encoder, len);\n for (let i = 0; i < len; i++) {\n write(encoder, /** @type {number} */ (encodedString.codePointAt(i)));\n }\n};\n\n/**\n * Write a variable length string.\n *\n * @function\n * @param {Encoder} encoder\n * @param {String} str The string that is to be encoded.\n */\n/* c8 ignore next */\nconst writeVarString = (utf8TextEncoder && /** @type {any} */ (utf8TextEncoder).encodeInto) ? _writeVarStringNative : _writeVarStringPolyfill;\n\n/**\n * Append fixed-length Uint8Array to the encoder.\n *\n * @function\n * @param {Encoder} encoder\n * @param {Uint8Array} uint8Array\n */\nconst writeUint8Array = (encoder, uint8Array) => {\n const bufferLen = encoder.cbuf.length;\n const cpos = encoder.cpos;\n const leftCopyLen = min(bufferLen - cpos, uint8Array.length);\n const rightCopyLen = uint8Array.length - leftCopyLen;\n encoder.cbuf.set(uint8Array.subarray(0, leftCopyLen), cpos);\n encoder.cpos += leftCopyLen;\n if (rightCopyLen > 0) {\n // Still something to write, write right half..\n // Append new buffer\n encoder.bufs.push(encoder.cbuf);\n // must have at least size of remaining buffer\n encoder.cbuf = new Uint8Array(max(bufferLen * 2, rightCopyLen));\n // copy array\n encoder.cbuf.set(uint8Array.subarray(leftCopyLen));\n encoder.cpos = rightCopyLen;\n }\n};\n\n/**\n * Append an Uint8Array to Encoder.\n *\n * @function\n * @param {Encoder} encoder\n * @param {Uint8Array} uint8Array\n */\nconst writeVarUint8Array = (encoder, uint8Array) => {\n writeVarUint(encoder, uint8Array.byteLength);\n writeUint8Array(encoder, uint8Array);\n};\n\n/**\n * Error helpers.\n *\n * @module error\n */\n\n/**\n * @param {string} s\n * @return {Error}\n */\n/* c8 ignore next */\nconst create = s => new Error(s);\n\n/**\n * Efficient schema-less binary decoding with support for variable length encoding.\n *\n * Use [lib0/decoding] with [lib0/encoding]. Every encoding function has a corresponding decoding function.\n *\n * Encodes numbers in little-endian order (least to most significant byte order)\n * and is compatible with Golang's binary encoding (https://golang.org/pkg/encoding/binary/)\n * which is also used in Protocol Buffers.\n *\n * ```js\n * // encoding step\n * const encoder = encoding.createEncoder()\n * encoding.writeVarUint(encoder, 256)\n * encoding.writeVarString(encoder, 'Hello world!')\n * const buf = encoding.toUint8Array(encoder)\n * ```\n *\n * ```js\n * // decoding step\n * const decoder = decoding.createDecoder(buf)\n * decoding.readVarUint(decoder) // => 256\n * decoding.readVarString(decoder) // => 'Hello world!'\n * decoding.hasContent(decoder) // => false - all data is read\n * ```\n *\n * @module decoding\n */\n\nconst errorUnexpectedEndOfArray = create('Unexpected end of array');\nconst errorIntegerOutOfRange = create('Integer out of Range');\n\n/**\n * Create an Uint8Array view of the next `len` bytes and advance the position by `len`.\n *\n * Important: The Uint8Array still points to the underlying ArrayBuffer. Make sure to discard the result as soon as possible to prevent any memory leaks.\n * Use `buffer.copyUint8Array` to copy the result into a new Uint8Array.\n *\n * @function\n * @param {Decoder} decoder The decoder instance\n * @param {number} len The length of bytes to read\n * @return {Uint8Array}\n */\nconst readUint8Array = (decoder, len) => {\n const view = new Uint8Array(decoder.arr.buffer, decoder.pos + decoder.arr.byteOffset, len);\n decoder.pos += len;\n return view\n};\n\n/**\n * Read variable length Uint8Array.\n *\n * Important: The Uint8Array still points to the underlying ArrayBuffer. Make sure to discard the result as soon as possible to prevent any memory leaks.\n * Use `buffer.copyUint8Array` to copy the result into a new Uint8Array.\n *\n * @function\n * @param {Decoder} decoder\n * @return {Uint8Array}\n */\nconst readVarUint8Array = decoder => readUint8Array(decoder, readVarUint(decoder));\n\n/**\n * Read one byte as unsigned integer.\n * @function\n * @param {Decoder} decoder The decoder instance\n * @return {number} Unsigned 8-bit integer\n */\nconst readUint8 = decoder => decoder.arr[decoder.pos++];\n\n/**\n * Read unsigned integer (32bit) with variable length.\n * 1/8th of the storage is used as encoding overhead.\n * * numbers < 2^7 is stored in one bytlength\n * * numbers < 2^14 is stored in two bylength\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.length\n */\nconst readVarUint = decoder => {\n let num = 0;\n let mult = 1;\n const len = decoder.arr.length;\n while (decoder.pos < len) {\n const r = decoder.arr[decoder.pos++];\n // num = num | ((r & binary.BITS7) << len)\n num = num + (r & BITS7) * mult; // shift $r << (7*#iterations) and add it to num\n mult *= 128; // next iteration, shift 7 \"more\" to the left\n if (r < BIT8) {\n return num\n }\n /* c8 ignore start */\n if (num > MAX_SAFE_INTEGER) {\n throw errorIntegerOutOfRange\n }\n /* c8 ignore stop */\n }\n throw errorUnexpectedEndOfArray\n};\n\n/**\n * We don't test this function anymore as we use native decoding/encoding by default now.\n * Better not modify this anymore..\n *\n * Transforming utf8 to a string is pretty expensive. The code performs 10x better\n * when String.fromCodePoint is fed with all characters as arguments.\n * But most environments have a maximum number of arguments per functions.\n * For effiency reasons we apply a maximum of 10000 characters at once.\n *\n * @function\n * @param {Decoder} decoder\n * @return {String} The read String.\n */\n/* c8 ignore start */\nconst _readVarStringPolyfill = decoder => {\n let remainingLen = readVarUint(decoder);\n if (remainingLen === 0) {\n return ''\n } else {\n let encodedString = String.fromCodePoint(readUint8(decoder)); // remember to decrease remainingLen\n if (--remainingLen < 100) { // do not create a Uint8Array for small strings\n while (remainingLen--) {\n encodedString += String.fromCodePoint(readUint8(decoder));\n }\n } else {\n while (remainingLen > 0) {\n const nextLen = remainingLen < 10000 ? remainingLen : 10000;\n // this is dangerous, we create a fresh array view from the existing buffer\n const bytes = decoder.arr.subarray(decoder.pos, decoder.pos + nextLen);\n decoder.pos += nextLen;\n // Starting with ES5.1 we can supply a generic array-like object as arguments\n encodedString += String.fromCodePoint.apply(null, /** @type {any} */ (bytes));\n remainingLen -= nextLen;\n }\n }\n return decodeURIComponent(escape(encodedString))\n }\n};\n/* c8 ignore stop */\n\n/**\n * @function\n * @param {Decoder} decoder\n * @return {String} The read String\n */\nconst _readVarStringNative = decoder =>\n /** @type any */ (utf8TextDecoder).decode(readVarUint8Array(decoder));\n\n/**\n * Read string of variable length\n * * varUint is used to store the length of the string\n *\n * @function\n * @param {Decoder} decoder\n * @return {String} The read String\n *\n */\n/* c8 ignore next */\nconst readVarString = utf8TextDecoder ? _readVarStringNative : _readVarStringPolyfill;\n\nvar AuthMessageType;\n(function (AuthMessageType) {\n AuthMessageType[AuthMessageType[\"Token\"] = 0] = \"Token\";\n AuthMessageType[AuthMessageType[\"PermissionDenied\"] = 1] = \"PermissionDenied\";\n AuthMessageType[AuthMessageType[\"Authenticated\"] = 2] = \"Authenticated\";\n})(AuthMessageType || (AuthMessageType = {}));\nconst writeAuthentication = (encoder, auth) => {\n writeVarUint(encoder, AuthMessageType.Token);\n writeVarString(encoder, auth);\n};\nconst writePermissionDenied = (encoder, reason) => {\n writeVarUint(encoder, AuthMessageType.PermissionDenied);\n writeVarString(encoder, reason);\n};\nconst writeAuthenticated = (encoder, scope) => {\n writeVarUint(encoder, AuthMessageType.Authenticated);\n writeVarString(encoder, scope);\n};\nconst readAuthMessage = (decoder, permissionDeniedHandler, authenticatedHandler) => {\n switch (readVarUint(decoder)) {\n case AuthMessageType.PermissionDenied: {\n permissionDeniedHandler(readVarString(decoder));\n break;\n }\n case AuthMessageType.Authenticated: {\n authenticatedHandler(readVarString(decoder));\n break;\n }\n }\n};\n\n/**\n * The server is terminating the connection because a data frame was received\n * that is too large.\n * See: https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent/code\n */\nconst MessageTooBig = {\n code: 1009,\n reason: 'Message Too Big',\n};\n/**\n * The server successfully processed the request, asks that the requester reset\n * its document view, and is not returning any content.\n */\nconst ResetConnection = {\n code: 4205,\n reason: 'Reset Connection',\n};\n/**\n * Similar to Forbidden, but specifically for use when authentication is required and has\n * failed or has not yet been provided.\n */\nconst Unauthorized = {\n code: 4401,\n reason: 'Unauthorized',\n};\n/**\n * The request contained valid data and was understood by the server, but the server\n * is refusing action.\n */\nconst Forbidden = {\n code: 4403,\n reason: 'Forbidden',\n};\n/**\n * The server timed out waiting for the request.\n */\nconst ConnectionTimeout = {\n code: 4408,\n reason: 'Connection Timeout',\n};\n\nconst awarenessStatesToArray = (states) => {\n return Array.from(states.entries()).map(([key, value]) => {\n return {\n clientId: key,\n ...value,\n };\n });\n};\n\n/**\n * State of the WebSocket connection.\n * https://developer.mozilla.org/de/docs/Web/API/WebSocket/readyState\n */\nvar WsReadyStates;\n(function (WsReadyStates) {\n WsReadyStates[WsReadyStates[\"Connecting\"] = 0] = \"Connecting\";\n WsReadyStates[WsReadyStates[\"Open\"] = 1] = \"Open\";\n WsReadyStates[WsReadyStates[\"Closing\"] = 2] = \"Closing\";\n WsReadyStates[WsReadyStates[\"Closed\"] = 3] = \"Closed\";\n})(WsReadyStates || (WsReadyStates = {}));\n\nexport { ConnectionTimeout, Forbidden, MessageTooBig, ResetConnection, Unauthorized, WsReadyStates, awarenessStatesToArray, readAuthMessage, writeAuthenticated, writeAuthentication, writePermissionDenied };\n//# sourceMappingURL=hocuspocus-common.esm.js.map\n","function applyDefaults(options) {\n if (!options) {\n options = {};\n }\n return {\n delay: (options.delay === undefined) ? 200 : options.delay,\n initialDelay: (options.initialDelay === undefined) ? 0 : options.initialDelay,\n minDelay: (options.minDelay === undefined) ? 0 : options.minDelay,\n maxDelay: (options.maxDelay === undefined) ? 0 : options.maxDelay,\n factor: (options.factor === undefined) ? 0 : options.factor,\n maxAttempts: (options.maxAttempts === undefined) ? 3 : options.maxAttempts,\n timeout: (options.timeout === undefined) ? 0 : options.timeout,\n jitter: (options.jitter === true),\n initialJitter: (options.initialJitter === true),\n handleError: (options.handleError === undefined) ? null : options.handleError,\n handleTimeout: (options.handleTimeout === undefined) ? null : options.handleTimeout,\n beforeAttempt: (options.beforeAttempt === undefined) ? null : options.beforeAttempt,\n calculateDelay: (options.calculateDelay === undefined) ? null : options.calculateDelay\n };\n}\nexport async function sleep(delay) {\n return new Promise((resolve) => setTimeout(resolve, delay));\n}\nexport function defaultCalculateDelay(context, options) {\n let delay = options.delay;\n if (delay === 0) {\n // no delay between attempts\n return 0;\n }\n if (options.factor) {\n delay *= Math.pow(options.factor, context.attemptNum - 1);\n if (options.maxDelay !== 0) {\n delay = Math.min(delay, options.maxDelay);\n }\n }\n if (options.jitter) {\n // Jitter will result in a random value between `minDelay` and\n // calculated delay for a given attempt.\n // See https://www.awsarchitectureblog.com/2015/03/backoff.html\n // We're using the \"full jitter\" strategy.\n const min = Math.ceil(options.minDelay);\n const max = Math.floor(delay);\n delay = Math.floor(Math.random() * (max - min + 1)) + min;\n }\n return Math.round(delay);\n}\nexport async function retry(attemptFunc, attemptOptions) {\n const options = applyDefaults(attemptOptions);\n for (const prop of [\n 'delay',\n 'initialDelay',\n 'minDelay',\n 'maxDelay',\n 'maxAttempts',\n 'timeout'\n ]) {\n const value = options[prop];\n if (!Number.isInteger(value) || (value < 0)) {\n throw new Error(`Value for ${prop} must be an integer greater than or equal to 0`);\n }\n }\n if ((options.factor.constructor !== Number) || (options.factor < 0)) {\n throw new Error(`Value for factor must be a number greater than or equal to 0`);\n }\n if (options.delay < options.minDelay) {\n throw new Error(`delay cannot be less than minDelay (delay: ${options.delay}, minDelay: ${options.minDelay}`);\n }\n const context = {\n attemptNum: 0,\n attemptsRemaining: options.maxAttempts ? options.maxAttempts : -1,\n aborted: false,\n abort() {\n context.aborted = true;\n }\n };\n const calculateDelay = options.calculateDelay || defaultCalculateDelay;\n async function makeAttempt() {\n if (options.beforeAttempt) {\n options.beforeAttempt(context, options);\n }\n if (context.aborted) {\n const err = new Error(`Attempt aborted`);\n err.code = 'ATTEMPT_ABORTED';\n throw err;\n }\n const onError = async (err) => {\n if (options.handleError) {\n await options.handleError(err, context, options);\n }\n if (context.aborted || (context.attemptsRemaining === 0)) {\n throw err;\n }\n // We are about to try again so increment attempt number\n context.attemptNum++;\n const delay = calculateDelay(context, options);\n if (delay) {\n await sleep(delay);\n }\n return makeAttempt();\n };\n if (context.attemptsRemaining > 0) {\n context.attemptsRemaining--;\n }\n if (options.timeout) {\n return new Promise((resolve, reject) => {\n const timer = setTimeout(() => {\n if (options.handleTimeout) {\n // If calling handleTimeout throws an error that is not wrapped in a promise\n // we want to catch the error and reject.\n try {\n resolve(options.handleTimeout(context, options));\n }\n catch (e) {\n reject(e);\n }\n }\n else {\n const err = new Error(`Retry timeout (attemptNum: ${context.attemptNum}, timeout: ${options.timeout})`);\n err.code = 'ATTEMPT_TIMEOUT';\n reject(err);\n }\n }, options.timeout);\n attemptFunc(context, options).then((result) => {\n clearTimeout(timer);\n resolve(result);\n }).catch((err) => {\n clearTimeout(timer);\n // Calling resolve with a Promise that rejects here will result\n // in an unhandled rejection. Calling `reject` with errors\n // does not result in an unhandled rejection\n onError(err).then(resolve).catch(reject);\n });\n });\n }\n else {\n // No timeout provided so wait indefinitely for the returned promise\n // to be resolved.\n return attemptFunc(context, options).catch(onError);\n }\n }\n const initialDelay = options.calculateDelay\n ? options.calculateDelay(context, options)\n : options.initialDelay;\n if (initialDelay) {\n await sleep(initialDelay);\n }\n if (context.attemptNum < 1 && options.initialJitter) {\n const delay = calculateDelay(context, options);\n if (delay) {\n await sleep(delay);\n }\n }\n return makeAttempt();\n}\n","import { WsReadyStates, Unauthorized, Forbidden, MessageTooBig, readAuthMessage, writeAuthentication, awarenessStatesToArray } from '@hocuspocus/common';\nimport * as Y from 'yjs';\nimport { retry } from '@lifeomic/attempt';\n\n/**\n * Utility module to work with key-value stores.\n *\n * @module map\n */\n\n/**\n * Creates a new Map instance.\n *\n * @function\n * @return {Map<any, any>}\n *\n * @function\n */\nconst create$2 = () => new Map();\n\n/**\n * Get map property. Create T if property is undefined and set T on map.\n *\n * ```js\n * const listeners = map.setIfUndefined(events, 'eventName', set.create)\n * listeners.add(listener)\n * ```\n *\n * @function\n * @template V,K\n * @template {Map<K,V>} MAP\n * @param {MAP} map\n * @param {K} key\n * @param {function():V} createT\n * @return {V}\n */\nconst setIfUndefined = (map, key, createT) => {\n let set = map.get(key);\n if (set === undefined) {\n map.set(key, set = createT());\n }\n return set\n};\n\n/**\n * Utility module to work with sets.\n *\n * @module set\n */\n\nconst create$1 = () => new Set();\n\n/**\n * Utility module to work with Arrays.\n *\n * @module array\n */\n\n/**\n * Transforms something array-like to an actual Array.\n *\n * @function\n * @template T\n * @param {ArrayLike<T>|Iterable<T>} arraylike\n * @return {T}\n */\nconst from = Array.from;\n\n/**\n * Utility module to work with strings.\n *\n * @module string\n */\n\nconst fromCharCode = String.fromCharCode;\n\n/**\n * @param {string} s\n * @return {string}\n */\nconst toLowerCase = s => s.toLowerCase();\n\nconst trimLeftRegex = /^\\s*/g;\n\n/**\n * @param {string} s\n * @return {string}\n */\nconst trimLeft = s => s.replace(trimLeftRegex, '');\n\nconst fromCamelCaseRegex = /([A-Z])/g;\n\n/**\n * @param {string} s\n * @param {string} separator\n * @return {string}\n */\nconst fromCamelCase = (s, separator) => trimLeft(s.replace(fromCamelCaseRegex, match => `${separator}${toLowerCase(match)}`));\n\n/**\n * @param {string} str\n * @return {Uint8Array}\n */\nconst _encodeUtf8Polyfill = str => {\n const encodedString = unescape(encodeURIComponent(str));\n const len = encodedString.length;\n const buf = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n buf[i] = /** @type {number} */ (encodedString.codePointAt(i));\n }\n return buf\n};\n\n/* c8 ignore next */\nconst utf8TextEncoder = /** @type {TextEncoder} */ (typeof TextEncoder !== 'undefined' ? new TextEncoder() : null);\n\n/**\n * @param {string} str\n * @return {Uint8Array}\n */\nconst _encodeUtf8Native = str => utf8TextEncoder.encode(str);\n\n/**\n * @param {string} str\n * @return {Uint8Array}\n */\n/* c8 ignore next */\nconst encodeUtf8 = utf8TextEncoder ? _encodeUtf8Native : _encodeUtf8Polyfill;\n\n/* c8 ignore next */\nlet utf8TextDecoder = typeof TextDecoder === 'undefined' ? null : new TextDecoder('utf-8', { fatal: true, ignoreBOM: true });\n\n/* c8 ignore start */\nif (utf8TextDecoder && utf8TextDecoder.decode(new Uint8Array()).length === 1) {\n // Safari doesn't handle BOM correctly.\n // This fixes a bug in Safari 13.0.5 where it produces a BOM the first time it is called.\n // utf8TextDecoder.decode(new Uint8Array()).length === 1 on the first call and\n // utf8TextDecoder.decode(new Uint8Array()).length === 1 on the second call\n // Another issue is that from then on no BOM chars are recognized anymore\n /* c8 ignore next */\n utf8TextDecoder = null;\n}\n\n/**\n * Often used conditions.\n *\n * @module conditions\n */\n\n/**\n * @template T\n * @param {T|null|undefined} v\n * @return {T|null}\n */\n/* c8 ignore next */\nconst undefinedToNull = v => v === undefined ? null : v;\n\n/* eslint-env browser */\n\n/**\n * Isomorphic variable storage.\n *\n * Uses LocalStorage in the browser and falls back to in-memory storage.\n *\n * @module storage\n */\n\n/* c8 ignore start */\nclass VarStoragePolyfill {\n constructor () {\n this.map = new Map();\n }\n\n /**\n * @param {string} key\n * @param {any} newValue\n */\n setItem (key, newValue) {\n this.map.set(key, newValue);\n }\n\n /**\n * @param {string} key\n */\n getItem (key) {\n return this.map.get(key)\n }\n}\n/* c8 ignore stop */\n\n/**\n * @type {any}\n */\nlet _localStorage = new VarStoragePolyfill();\nlet usePolyfill = true;\n\n/* c8 ignore start */\ntry {\n // if the same-origin rule is violated, accessing localStorage might thrown an error\n if (typeof localStorage !== 'undefined' && localStorage) {\n _localStorage = localStorage;\n usePolyfill = false;\n }\n} catch (e) { }\n/* c8 ignore stop */\n\n/**\n * This is basically localStorage in browser, or a polyfill in nodejs\n */\n/* c8 ignore next */\nconst varStorage = _localStorage;\n\n/**\n * A polyfill for `addEventListener('storage', event => {..})` that does nothing if the polyfill is being used.\n *\n * @param {function({ key: string, newValue: string, oldValue: string }): void} eventHandler\n * @function\n */\n/* c8 ignore next */\nconst onChange = eventHandler => usePolyfill || addEventListener('storage', /** @type {any} */ (eventHandler));\n\n/**\n * A polyfill for `removeEventListener('storage', event => {..})` that does nothing if the polyfill is being used.\n *\n * @param {function({ key: string, newValue: string, oldValue: string }): void} eventHandler\n * @function\n */\n/* c8 ignore next */\nconst offChange = eventHandler => usePolyfill || removeEventListener('storage', /** @type {any} */ (eventHandler));\n\n/**\n * Utility functions for working with EcmaScript objects.\n *\n * @module object\n */\n\n/**\n * @param {Object<string,any>} obj\n */\nconst keys = Object.keys;\n\n/**\n * @todo implement mapToArray & map\n *\n * @template R\n * @param {Object<string,any>} obj\n * @param {function(any,string):R} f\n * @return {Array<R>}\n */\nconst map = (obj, f) => {\n const results = [];\n for (const key in obj) {\n results.push(f(obj[key], key));\n }\n return results\n};\n\n/**\n * @param {Object<string,any>} obj\n * @return {number}\n */\nconst length$1 = obj => keys(obj).length;\n\n/**\n * Calls `Object.prototype.hasOwnProperty`.\n *\n * @param {any} obj\n * @param {string|symbol} key\n * @return {boolean}\n */\nconst hasProperty = (obj, key) => Object.prototype.hasOwnProperty.call(obj, key);\n\n/**\n * Common functions and function call helpers.\n *\n * @module function\n */\n\n/**\n * @template T\n *\n * @param {T} a\n * @param {T} b\n * @return {boolean}\n */\nconst equalityStrict = (a, b) => a === b;\n\n/* c8 ignore start */\n\n/**\n * @param {any} a\n * @param {any} b\n * @return {boolean}\n */\nconst equalityDeep = (a, b) => {\n if (a == null || b == null) {\n return equalityStrict(a, b)\n }\n if (a.constructor !== b.constructor) {\n return false\n }\n if (a === b) {\n return true\n }\n switch (a.constructor) {\n case ArrayBuffer:\n a = new Uint8Array(a);\n b = new Uint8Array(b);\n // eslint-disable-next-line no-fallthrough\n case Uint8Array: {\n if (a.byteLength !== b.byteLength) {\n return false\n }\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false\n }\n }\n break\n }\n case Set: {\n if (a.size !== b.size) {\n return false\n }\n for (const value of a) {\n if (!b.has(value)) {\n return false\n }\n }\n break\n }\n case Map: {\n if (a.size !== b.size) {\n return false\n }\n for (const key of a.keys()) {\n if (!b.has(key) || !equalityDeep(a.get(key), b.get(key))) {\n return false\n }\n }\n break\n }\n case Object:\n if (length$1(a) !== length$1(b)) {\n return false\n }\n for (const key in a) {\n if (!hasProperty(a, key) || !equalityDeep(a[key], b[key])) {\n return false\n }\n }\n break\n case Array:\n if (a.length !== b.length) {\n return false\n }\n for (let i = 0; i < a.length; i++) {\n if (!equalityDeep(a[i], b[i])) {\n return false\n }\n }\n break\n default:\n return false\n }\n return true\n};\n\n/**\n * @template V\n * @template {V} OPTS\n *\n * @param {V} value\n * @param {Array<OPTS>} options\n */\n// @ts-ignore\nconst isOneOf = (value, options) => options.includes(value);\n\n/**\n * Isomorphic module to work access the environment (query params, env variables).\n *\n * @module map\n */\n\n/* c8 ignore next 2 */\n// @ts-ignore\nconst isNode = typeof process !== 'undefined' && process.release && /node|io\\.js/.test(process.release.name) && Object.prototype.toString.call(typeof process !== 'undefined' ? process : 0) === '[object process]';\n\n/* c8 ignore next */\nconst isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && !isNode;\n/* c8 ignore next 3 */\ntypeof navigator !== 'undefined'\n ? /Mac/.test(navigator.platform)\n : false;\n\n/**\n * @type {Map<string,string>}\n */\nlet params;\n\n/* c8 ignore start */\nconst computeParams = () => {\n if (params === undefined) {\n if (isNode) {\n params = create$2();\n const pargs = process.argv;\n let currParamName = null;\n for (let i = 0; i < pargs.length; i++) {\n const parg = pargs[i];\n if (parg[0] === '-') {\n if (currParamName !== null) {\n params.set(currParamName, '');\n }\n currParamName = parg;\n } else {\n if (currParamName !== null) {\n params.set(currParamName, parg);\n currParamName = null;\n }\n }\n }\n if (currParamName !== null) {\n params.set(currParamName, '');\n }\n // in ReactNative for example this would not be true (unless connected to the Remote Debugger)\n } else if (typeof location === 'object') {\n params = create$2(); // eslint-disable-next-line no-undef\n (location.search || '?').slice(1).split('&').forEach((kv) => {\n if (kv.length !== 0) {\n const [key, value] = kv.split('=');\n params.set(`--${fromCamelCase(key, '-')}`, value);\n params.set(`-${fromCamelCase(key, '-')}`, value);\n }\n });\n } else {\n params = create$2();\n }\n }\n return params\n};\n/* c8 ignore stop */\n\n/**\n * @param {string} name\n * @return {boolean}\n */\n/* c8 ignore next */\nconst hasParam = (name) => computeParams().has(name);\n\n/**\n * @param {string} name\n * @return {string|null}\n */\n/* c8 ignore next 4 */\nconst getVariable = (name) =>\n isNode\n ? undefinedToNull(process.env[name.toUpperCase()])\n : undefinedToNull(varStorage.getItem(name));\n\n/**\n * @param {string} name\n * @return {boolean}\n */\n/* c8 ignore next 2 */\nconst hasConf = (name) =>\n hasParam('--' + name) || getVariable(name) !== null;\n\n/* c8 ignore next */\nhasConf('production');\n\n/* c8 ignore next 2 */\nconst forceColor = isNode &&\n isOneOf(process.env.FORCE_COLOR, ['true', '1', '2']);\n\n/* c8 ignore start */\n!hasParam('no-colors') &&\n (!isNode || process.stdout.isTTY || forceColor) && (\n !isNode || hasParam('color') || forceColor ||\n getVariable('COLORTERM') !== null ||\n (getVariable('TERM') || '').includes('color')\n);\n/* c8 ignore stop */\n\n/**\n * Common Math expressions.\n *\n * @module math\n */\n\nconst floor = Math.floor;\n\n/**\n * @function\n * @param {number} a\n * @param {number} b\n * @return {number} The smaller element of a and b\n */\nconst min = (a, b) => a < b ? a : b;\n\n/**\n * @function\n * @param {number} a\n * @param {number} b\n * @return {number} The bigger element of a and b\n */\nconst max = (a, b) => a > b ? a : b;\n\n/* eslint-env browser */\nconst BIT7 = 64;\nconst BIT8 = 128;\nconst BITS6 = 63;\nconst BITS7 = 127;\n\n/**\n * Utility helpers for working with numbers.\n *\n * @module number\n */\n\nconst MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER;\n\n/**\n * Efficient schema-less binary encoding with support for variable length encoding.\n *\n * Use [lib0/encoding] with [lib0/decoding]. Every encoding function has a corresponding decoding function.\n *\n * Encodes numbers in little-endian order (least to most significant byte order)\n * and is compatible with Golang's binary encoding (https://golang.org/pkg/encoding/binary/)\n * which is also used in Protocol Buffers.\n *\n * ```js\n * // encoding step\n * const encoder = encoding.createEncoder()\n * encoding.writeVarUint(encoder, 256)\n * encoding.writeVarString(encoder, 'Hello world!')\n * const buf = encoding.toUint8Array(encoder)\n * ```\n *\n * ```js\n * // decoding step\n * const decoder = decoding.createDecoder(buf)\n * decoding.readVarUint(decoder) // => 256\n * decoding.readVarString(decoder) // => 'Hello world!'\n * decoding.hasContent(decoder) // => false - all data is read\n * ```\n *\n * @module encoding\n */\n\n/**\n * A BinaryEncoder handles the encoding to an Uint8Array.\n */\nclass Encoder {\n constructor () {\n this.cpos = 0;\n this.cbuf = new Uint8Array(100);\n /**\n * @type {Array<Uint8Array>}\n */\n this.bufs = [];\n }\n}\n\n/**\n * @function\n * @return {Encoder}\n */\nconst createEncoder = () => new Encoder();\n\n/**\n * The current length of the encoded data.\n *\n * @function\n * @param {Encoder} encoder\n * @return {number}\n */\nconst length = encoder => {\n let len = encoder.cpos;\n for (let i = 0; i < encoder.bufs.length; i++) {\n len += encoder.bufs[i].length;\n }\n return len\n};\n\n/**\n * Transform to Uint8Array.\n *\n * @function\n * @param {Encoder} encoder\n * @return {Uint8Array} The created ArrayBuffer.\n */\nconst toUint8Array = encoder => {\n const uint8arr = new Uint8Array(length(encoder));\n let curPos = 0;\n for (let i = 0; i < encoder.bufs.length; i++) {\n const d = encoder.bufs[i];\n uint8arr.set(d, curPos);\n curPos += d.length;\n }\n uint8arr.set(new Uint8Array(encoder.cbuf.buffer, 0, encoder.cpos), curPos);\n return uint8arr\n};\n\n/**\n * Write one byte to the encoder.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The byte that is to be encoded.\n */\nconst write = (encoder, num) => {\n const bufferLen = encoder.cbuf.length;\n if (encoder.cpos === bufferLen) {\n encoder.bufs.push(encoder.cbuf);\n encoder.cbuf = new Uint8Array(bufferLen * 2);\n encoder.cpos = 0;\n }\n encoder.cbuf[encoder.cpos++] = num;\n};\n\n/**\n * Write a variable length unsigned integer. Max encodable integer is 2^53.\n *\n * @function\n * @param {Encoder} encoder\n * @param {number} num The number that is to be encoded.\n */\nconst writeVarUint = (encoder, num) => {\n while (num > BITS7) {\n write(encoder, BIT8 | (BITS7 & num));\n num = floor(num / 128); // shift >>> 7\n }\n write(encoder, BITS7 & num);\n};\n\n/**\n * A cache to store strings temporarily\n */\nconst _strBuffer = new Uint8Array(30000);\nconst _maxStrBSize = _strBuffer.length / 3;\n\n/**\n * Write a variable length string.\n *\n * @function\n * @param {Encoder} encoder\n * @param {String} str The string that is to be encoded.\n */\nconst _writeVarStringNative = (encoder, str) => {\n if (str.length < _maxStrBSize) {\n // We can encode the string into the existing buffer\n /* c8 ignore next */\n const written = utf8TextEncoder.encodeInto(str, _strBuffer).written || 0;\n writeVarUint(encoder, written);\n for (let i = 0; i < written; i++) {\n write(encoder, _strBuffer[i]);\n }\n } else {\n writeVarUint8Array(encoder, encodeUtf8(str));\n }\n};\n\n/**\n * Write a variable length string.\n *\n * @function\n * @param {Encoder} encoder\n * @param {String} str The string that is to be encoded.\n */\nconst _writeVarStringPolyfill = (encoder, str) => {\n const encodedString = unescape(encodeURIComponent(str));\n const len = encodedString.length;\n writeVarUint(encoder, len);\n for (let i = 0; i < len; i++) {\n write(encoder, /** @type {number} */ (encodedString.codePointAt(i)));\n }\n};\n\n/**\n * Write a variable length string.\n *\n * @function\n * @param {Encoder} encoder\n * @param {String} str The string that is to be encoded.\n */\n/* c8 ignore next */\nconst writeVarString = (utf8TextEncoder && /** @type {any} */ (utf8TextEncoder).encodeInto) ? _writeVarStringNative : _writeVarStringPolyfill;\n\n/**\n * Append fixed-length Uint8Array to the encoder.\n *\n * @function\n * @param {Encoder} encoder\n * @param {Uint8Array} uint8Array\n */\nconst writeUint8Array = (encoder, uint8Array) => {\n const bufferLen = encoder.cbuf.length;\n const cpos = encoder.cpos;\n const leftCopyLen = min(bufferLen - cpos, uint8Array.length);\n const rightCopyLen = uint8Array.length - leftCopyLen;\n encoder.cbuf.set(uint8Array.subarray(0, leftCopyLen), cpos);\n encoder.cpos += leftCopyLen;\n if (rightCopyLen > 0) {\n // Still something to write, write right half..\n // Append new buffer\n encoder.bufs.push(encoder.cbuf);\n // must have at least size of remaining buffer\n encoder.cbuf = new Uint8Array(max(bufferLen * 2, rightCopyLen));\n // copy array\n encoder.cbuf.set(uint8Array.subarray(leftCopyLen));\n encoder.cpos = rightCopyLen;\n }\n};\n\n/**\n * Append an Uint8Array to Encoder.\n *\n * @function\n * @param {Encoder} encoder\n * @param {Uint8Array} uint8Array\n */\nconst writeVarUint8Array = (encoder, uint8Array) => {\n writeVarUint(encoder, uint8Array.byteLength);\n writeUint8Array(encoder, uint8Array);\n};\n\n/**\n * Error helpers.\n *\n * @module error\n */\n\n/**\n * @param {string} s\n * @return {Error}\n */\n/* c8 ignore next */\nconst create = s => new Error(s);\n\n/**\n * Efficient schema-less binary decoding with support for variable length encoding.\n *\n * Use [lib0/decoding] with [lib0/encoding]. Every encoding function has a corresponding decoding function.\n *\n * Encodes numbers in little-endian order (least to most significant byte order)\n * and is compatible with Golang's binary encoding (https://golang.org/pkg/encoding/binary/)\n * which is also used in Protocol Buffers.\n *\n * ```js\n * // encoding step\n * const encoder = encoding.createEncoder()\n * encoding.writeVarUint(encoder, 256)\n * encoding.writeVarString(encoder, 'Hello world!')\n * const buf = encoding.toUint8Array(encoder)\n * ```\n *\n * ```js\n * // decoding step\n * const decoder = decoding.createDecoder(buf)\n * decoding.readVarUint(decoder) // => 256\n * decoding.readVarString(decoder) // => 'Hello world!'\n * decoding.hasContent(decoder) // => false - all data is read\n * ```\n *\n * @module decoding\n */\n\nconst errorUnexpectedEndOfArray = create('Unexpected end of array');\nconst errorIntegerOutOfRange = create('Integer out of Range');\n\n/**\n * A Decoder handles the decoding of an Uint8Array.\n */\nclass Decoder {\n /**\n * @param {Uint8Array} uint8Array Binary data to decode\n */\n constructor (uint8Array) {\n /**\n * Decoding target.\n *\n * @type {Uint8Array}\n */\n this.arr = uint8Array;\n /**\n * Current decoding position.\n *\n * @type {number}\n */\n this.pos = 0;\n }\n}\n\n/**\n * @function\n * @param {Uint8Array} uint8Array\n * @return {Decoder}\n */\nconst createDecoder = uint8Array => new Decoder(uint8Array);\n\n/**\n * Create an Uint8Array view of the next `len` bytes and advance the position by `len`.\n *\n * Important: The Uint8Array still points to the underlying ArrayBuffer. Make sure to discard the result as soon as possible to prevent any memory leaks.\n * Use `buffer.copyUint8Array` to copy the result into a new Uint8Array.\n *\n * @function\n * @param {Decoder} decoder The decoder instance\n * @param {number} len The length of bytes to read\n * @return {Uint8Array}\n */\nconst readUint8Array = (decoder, len) => {\n const view = new Uint8Array(decoder.arr.buffer, decoder.pos + decoder.arr.byteOffset, len);\n decoder.pos += len;\n return view\n};\n\n/**\n * Read variable length Uint8Array.\n *\n * Important: The Uint8Array still points to the underlying ArrayBuffer. Make sure to discard the result as soon as possible to prevent any memory leaks.\n * Use `buffer.copyUint8Array` to copy the result into a new Uint8Array.\n *\n * @function\n * @param {Decoder} decoder\n * @return {Uint8Array}\n */\nconst readVarUint8Array = decoder => readUint8Array(decoder, readVarUint(decoder));\n\n/**\n * Read one byte as unsigned integer.\n * @function\n * @param {Decoder} decoder The decoder instance\n * @return {number} Unsigned 8-bit integer\n */\nconst readUint8 = decoder => decoder.arr[decoder.pos++];\n\n/**\n * Read unsigned integer (32bit) with variable length.\n * 1/8th of the storage is used as encoding overhead.\n * * numbers < 2^7 is stored in one bytlength\n * * numbers < 2^14 is stored in two bylength\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.length\n */\nconst readVarUint = decoder => {\n let num = 0;\n let mult = 1;\n const len = decoder.arr.length;\n while (decoder.pos < len) {\n const r = decoder.arr[decoder.pos++];\n // num = num | ((r & binary.BITS7) << len)\n num = num + (r & BITS7) * mult; // shift $r << (7*#iterations) and add it to num\n mult *= 128; // next iteration, shift 7 \"more\" to the left\n if (r < BIT8) {\n return num\n }\n /* c8 ignore start */\n if (num > MAX_SAFE_INTEGER) {\n throw errorIntegerOutOfRange\n }\n /* c8 ignore stop */\n }\n throw errorUnexpectedEndOfArray\n};\n\n/**\n * Read signed integer (32bit) with variable length.\n * 1/8th of the storage is used as encoding overhead.\n * * numbers < 2^7 is stored in one bytlength\n * * numbers < 2^14 is stored in two bylength\n * @todo This should probably create the inverse ~num if number is negative - but this would be a breaking change.\n *\n * @function\n * @param {Decoder} decoder\n * @return {number} An unsigned integer.length\n */\nconst readVarInt = decoder => {\n let r = decoder.arr[decoder.pos++];\n let num = r & BITS6;\n let mult = 64;\n const sign = (r & BIT7) > 0 ? -1 : 1;\n if ((r & BIT8) === 0) {\n // don't continue reading\n return sign * num\n }\n const len = decoder.arr.length;\n while (decoder.pos < len) {\n r = decoder.arr[decoder.pos++];\n // num = num | ((r & binary.BITS7) << len)\n num = num + (r & BITS7) * mult;\n mult *= 128;\n if (r < BIT8) {\n return sign * num\n }\n /* c8 ignore start */\n if (num > MAX_SAFE_INTEGER) {\n throw errorIntegerOutOfRange\n }\n /* c8 ignore stop */\n }\n throw errorUnexpectedEndOfArray\n};\n\n/**\n * We don't test this function anymore as we use native decoding/encoding by default now.\n * Better not modify this anymore..\n *\n * Transforming utf8 to a string is pretty expensive. The code performs 10x better\n * when String.fromCodePoint is fed with all characters as arguments.\n * But most environments have a maximum number of arguments per functions.\n * For effiency reasons we apply a maximum of 10000 characters at once.\n *\n * @function\n * @param {Decoder} decoder\n * @return {String} The read String.\n */\n/* c8 ignore start */\nconst _readVarStringPolyfill = decoder => {\n let remainingLen = readVarUint(decoder);\n if (remainingLen === 0) {\n return ''\n } else {\n let encodedString = String.fromCodePoint(readUint8(decoder)); // remember to decrease remainingLen\n if (--remainingLen < 100) { // do not create a Uint8Array for small strings\n while (remainingLen--) {\n encodedString += String.fromCodePoint(readUint8(decoder));\n }\n } else {\n while (remainingLen > 0) {\n const nextLen = remainingLen < 10000 ? remainingLen : 10000;\n // this is dangerous, we create a fresh array view from the existing buffer\n const bytes = decoder.arr.subarray(decoder.pos, decoder.pos + nextLen);\n decoder.pos += nextLen;\n // Starting with ES5.1 we can supply a generic array-like object as arguments\n encodedString += String.fromCodePoint.apply(null, /** @type {any} */ (bytes));\n remainingLen -= nextLen;\n }\n }\n return decodeURIComponent(escape(encodedString))\n }\n};\n/* c8 ignore stop */\n\n/**\n * @function\n * @param {Decoder} decoder\n * @return {String} The read String\n */\nconst _readVarStringNative = decoder =>\n /** @type any */ (utf8TextDecoder).decode(readVarUint8Array(decoder));\n\n/**\n * Read string of variable length\n * * varUint is used to store the length of the string\n *\n * @function\n * @param {Decoder} decoder\n * @return {String} The read String\n *\n */\n/* c8 ignore next */\nconst readVarString = utf8TextDecoder ? _readVarStringNative : _readVarStringPolyfill;\n\n/**\n * Look ahead and read varString without incrementing position\n *\n * @function\n * @param {Decoder} decoder\n * @return {string}\n */\nconst peekVarString = decoder => {\n const pos = decoder.pos;\n const s = readVarString(decoder);\n decoder.pos = pos;\n return s\n};\n\n/**\n * Utility functions to work with buffers (Uint8Array).\n *\n * @module buffer\n */\n\n/**\n * @param {number} len\n */\nconst createUint8ArrayFromLen = len => new Uint8Array(len);\n\n/**\n * Create Uint8Array with initial content from buffer\n *\n * @param {ArrayBuffer} buffer\n * @param {number} byteOffset\n * @param {number} length\n */\nconst createUint8ArrayViewFromArrayBuffer = (buffer, byteOffset, length) => new Uint8Array(buffer, byteOffset, length);\n\n/**\n * Create Uint8Array with initial content from buffer\n *\n * @param {ArrayBuffer} buffer\n */\nconst createUint8ArrayFromArrayBuffer = buffer => new Uint8Array(buffer);\n\n/* c8 ignore start */\n/**\n * @param {Uint8Array} bytes\n * @return {string}\n */\nconst toBase64Browser = bytes => {\n let s = '';\n for (let i = 0; i < bytes.byteLength; i++) {\n s += fromCharCode(bytes[i]);\n }\n // eslint-disable-next-line no-undef\n return btoa(s)\n};\n/* c8 ignore stop */\n\n/**\n * @param {Uint8Array} bytes\n * @return {string}\n */\nconst toBase64Node = bytes => Buffer.from(bytes.buffer, bytes.byteOffset, bytes.byteLength).toString('base64');\n\n/* c8 ignore start */\n/**\n * @param {string} s\n * @return {Uint8Array}\n */\nconst fromBase64Browser = s => {\n // eslint-disable-next-line no-undef\n const a = atob(s);\n const bytes = createUint8ArrayFromLen(a.length);\n for (let i = 0; i < a.length; i++) {\n bytes[i] = a.charCodeAt(i);\n }\n return bytes\n};\n/* c8 ignore stop */\n\n/**\n * @param {string} s\n */\nconst fromBase64Node = s => {\n const buf = Buffer.from(s, 'base64');\n return createUint8ArrayViewFromArrayBuffer(buf.buffer, buf.byteOffset, buf.byteLength)\n};\n\n/* c8 ignore next */\nconst toBase64 = isBrowser ? toBase64Browser : toBase64Node;\n\n/* c8 ignore next */\nconst fromBase64 = isBrowser ? fromBase64Browser : fromBase64Node;\n\n/* eslint-env browser */\n\n/**\n * @typedef {Object} Channel\n * @property {Set<function(any, any):any>} Channel.subs\n * @property {any} Channel.bc\n */\n\n/**\n * @type {Map<string, Channel>}\n */\nconst channels = new Map();\n\n/* c8 ignore start */\nclass LocalStoragePolyfill {\n /**\n * @param {string} room\n */\n constructor (room) {\n this.room = room;\n /**\n * @type {null|function({data:ArrayBuffer}):void}\n */\n this.onmessage = null;\n /**\n * @param {any} e\n */\n this._onChange = e => e.key === room && this.onmessage !== null && this.onmessage({ data: fromBase64(e.newValue || '') });\n onChange(this._onChange);\n }\n\n /**\n * @param {ArrayBuffer} buf\n */\n postMessage (buf) {\n varStorage.setItem(this.room, toBase64(createUint8ArrayFromArrayBuffer(buf)));\n }\n\n close () {\n offChange(this._onChange);\n }\n}\n/* c8 ignore stop */\n\n// Use BroadcastChannel or Polyfill\n/* c8 ignore next */\nconst BC = typeof BroadcastChannel === 'undefined' ? LocalStoragePolyfill : BroadcastChannel;\n\n/**\n * @param {string} room\n * @return {Channel}\n */\nconst getChannel = room =>\n setIfUndefined(channels, room, () => {\n const subs = create$1();\n const bc = new BC(room);\n /**\n * @param {{data:ArrayBuffer}} e\n */\n /* c8 ignore next */\n bc.onmessage = e => subs.forEach(sub => sub(e.data, 'broadcastchannel'));\n return {\n bc, subs\n }\n });\n\n/**\n * Subscribe to global `publish` events.\n *\n * @function\n * @param {string} room\n * @param {function(any, any):any} f\n */\nconst subscribe = (room, f) => {\n getChannel(room).subs.add(f);\n return f\n};\n\n/**\n * Unsubscribe from `publish` global events.\n *\n * @function\n * @param {string} room\n * @param {function(any, any):any} f\n */\nconst unsubscribe = (room, f) => {\n const channel = getChannel(room);\n const unsubscribed = channel.subs.delete(f);\n if (unsubscribed && channel.subs.size === 0) {\n channel.bc.close();\n channels.delete(room);\n }\n return unsubscribed\n};\n\n/**\n * Publish data to all subscribers (including subscribers on this tab)\n *\n * @function\n * @param {string} room\n * @param {any} data\n * @param {any} [origin]\n */\nconst publish = (room, data, origin = null) => {\n const c = getChannel(room);\n c.bc.postMessage(data);\n c.subs.forEach(sub => sub(data, origin));\n};\n\n/**\n * Mutual exclude for JavaScript.\n *\n * @module mutex\n */\n\n/**\n * @callback mutex\n * @param {function():void} cb Only executed when this mutex is not in the current stack\n * @param {function():void} [elseCb] Executed when this mutex is in the current stack\n */\n\n/**\n * Creates a mutual exclude function with the following property:\n *\n * ```js\n * const mutex = createMutex()\n * mutex(() => {\n * // This function is immediately executed\n * mutex(() => {\n * // This function is not executed, as the mutex is already active.\n * })\n * })\n * ```\n *\n * @return {mutex} A mutual exclude function\n * @public\n */\nconst createMutex = () => {\n let token = true;\n return (f, g) => {\n if (token) {\n token = false;\n try {\n f();\n } finally {\n token = true;\n }\n } else if (g !== undefined) {\n g();\n }\n }\n};\n\n/**\n * Utility module to work with time.\n *\n * @module time\n */\n\n/**\n * Return current unix time.\n *\n * @return {number}\n */\nconst getUnixTime = Date.now;\n\n/**\n * Observable class prototype.\n *\n * @module observable\n */\n\n/* c8 ignore start */\n/**\n * Handles named events.\n *\n * @deprecated\n * @template N\n */\nclass Observable {\n constructor () {\n /**\n * Some desc.\n * @type {Map<N, any>}\n */\n this._observers = create$2();\n }\n\n /**\n * @param {N} name\n * @param {function} f\n */\n on (name, f) {\n setIfUndefined(this._observers, name, create$1).add(f);\n }\n\n /**\n * @param {N} name\n * @param {function} f\n */\n once (name, f) {\n /**\n * @param {...any} args\n */\n const _f = (...args) => {\n this.off(name, _f);\n f(...args);\n };\n this.on(name, _f);\n }\n\n /**\n * @param {N} name\n * @param {function} f\n */\n off (name, f) {\n const observers = this._observers.get(name);\n if (observers !== undefined) {\n observers.delete(f);\n if (observers.size === 0) {\n this._observers.delete(name);\n }\n }\n }\n\n /**\n * Emit a named event. All registered event listeners that listen to the\n * specified name will receive the event.\n *\n * @todo This should catch exceptions\n *\n * @param {N} name The event name.\n * @param {Array<any>} args The arguments that are applied to the event listener.\n */\n emit (name, args) {\n // copy all listeners to an array first to make sure that no event is emitted to listeners that are subscribed while the event handler is called.\n return from((this._observers.get(name) || create$2()).values()).forEach(f => f(...args))\n }\n\n destroy () {\n this._observers = create$2();\n }\n}\n/* c8 ignore end */\n\n/**\n * @module awareness-protocol\n */\n\nconst outdatedTimeout = 30000;\n\n/**\n * @typedef {Object} MetaClientState\n * @property {number} MetaClientState.clock\n * @property {number} MetaClientState.lastUpdated unix timestamp\n */\n\n/**\n * The Awareness class implements a simple shared state protocol that can be used for non-persistent data like awareness information\n * (cursor, username, status, ..). Each client can update its own local state and listen to state changes of\n * remote clients. Every client may set a state of a remote peer to `null` to mark the client as offline.\n *\n * Each client is identified by a unique client id (something we borrow from `doc.clientID`). A client can override\n * its own state by propagating a message with an increasing timestamp (`clock`). If such a message is received, it is\n * applied if the known state of that client is older than the new state (`clock < newClock`). If a client thinks that\n * a remote client is offline, it may propagate a message with\n * `{ clock: currentClientClock, state: null, client: remoteClient }`. If such a\n * message is received, and the known clock of that client equals the received clock, it will override the state with `null`.\n *\n * Before a client disconnects, it should propagate a `null` state with an updated clock.\n *\n * Awareness states must be updated every 30 seconds. Otherwise the Awareness instance will delete the client state.\n *\n * @extends {Observable<string>}\n */\nclass Awareness extends Observable {\n /**\n * @param {Y.Doc} doc\n */\n constructor (doc) {\n super();\n this.doc = doc;\n /**\n * @type {number}\n */\n this.clientID = doc.clientID;\n /**\n * Maps from client id to client state\n * @type {Map<number, Object<string, any>>}\n */\n this.states = new Map();\n /**\n * @type {Map<number, MetaClientState>}\n */\n this.meta = new Map();\n this._checkInterval = /** @type {any} */ (setInterval(() => {\n const now = getUnixTime();\n if (this.getLocalState() !== null && (outdatedTimeout / 2 <= now - /** @type {{lastUpdated:number}} */ (this.meta.get(this.clientID)).lastUpdated)) {\n // renew local clock\n this.setLocalState(this.getLocalState());\n }\n /**\n * @type {Array<number>}\n */\n const remove = [];\n this.meta.forEach((meta, clientid) => {\n if (clientid !== this.clientID && outdatedTimeout <= now - meta.lastUpdated && this.states.has(clientid)) {\n remove.push(clientid);\n }\n });\n if (remove.length > 0) {\n removeAwarenessStates(this, remove, 'timeout');\n }\n }, floor(outdatedTimeout / 10)));\n doc.on('destroy', () => {\n this.destroy();\n });\n this.setLocalState({});\n }\n\n destroy () {\n this.emit('destroy', [this]);\n this.setLocalState(null);\n super.destroy();\n clearInterval(this._checkInterval);\n }\n\n /**\n * @return {Object<string,any>|null}\n */\n getLocalState () {\n return this.states.get(this.clientID) || null\n }\n\n /**\n * @param {Object<string,any>|null} state\n */\n setLocalState (state) {\n const clientID = this.clientID;\n const currLocalMeta = this.meta.get(clientID);\n const clock = currLocalMeta === undefined ? 0 : currLocalMeta.clock + 1;\n const prevState = this.states.get(clientID);\n if (state === null) {\n this.states.delete(clientID);\n } else {\n this.states.set(clientID, state);\n }\n this.meta.set(clientID, {\n clock,\n lastUpdated: getUnixTime()\n });\n const added = [];\n const updated = [];\n const filteredUpdated = [];\n const removed = [];\n if (state === null) {\n removed.push(clientID);\n } else if (prevState == null) {\n if (state != null) {\n added.push(clientID);\n }\n } else {\n updated.push(clientID);\n if (!equalityDeep(prevState, state)) {\n filteredUpdated.push(clientID);\n }\n }\n if (added.length > 0 || filteredUpdated.length > 0 || removed.length > 0) {\n this.emit('change', [{ added, updated: filteredUpdated, removed }, 'local']);\n }\n this.emit('update', [{ added, updated, removed }, 'local']);\n }\n\n /**\n * @param {string} field\n * @param {any} value\n */\n setLocalStateField (field, value) {\n const state = this.getLocalState();\n if (state !== null) {\n this.setLocalState({\n ...state,\n [field]: value\n });\n }\n }\n\n /**\n * @return {Map<number,Object<string,any>>}\n */\n getStates () {\n return this.states\n }\n}\n\n/**\n * Mark (remote) clients as inactive and remove them from the list of active peers.\n * This change will be propagated to remote clients.\n *\n * @param {Awareness} awareness\n * @param {Array<number>} clients\n * @param {any} origin\n */\nconst removeAwarenessStates = (awareness, clients, origin) => {\n const removed = [];\n for (let i = 0; i < clients.length; i++) {\n const clientID = clients[i];\n if (awareness.states.has(clientID)) {\n awareness.states.delete(clientID);\n if (clientID === awareness.clientID) {\n const curMeta = /** @type {MetaClientState} */ (awareness.meta.get(clientID));\n awareness.meta.set(clientID, {\n clock: curMeta.clock + 1,\n lastUpdated: getUnixTime()\n });\n }\n removed.push(clientID);\n }\n }\n if (removed.length > 0) {\n awareness.emit('change', [{ added: [], updated: [], removed }, origin]);\n awareness.emit('update', [{ added: [], updated: [], removed }, origin]);\n }\n};\n\n/**\n * @param {Awareness} awareness\n * @param {Array<number>} clients\n * @return {Uint8Array}\n */\nconst encodeAwarenessUpdate = (awareness, clients, states = awareness.states) => {\n const len = clients.length;\n const encoder = createEncoder();\n writeVarUint(encoder, len);\n for (let i = 0; i < len; i++) {\n const clientID = clients[i];\n const state = states.get(clientID) || null;\n const clock = /** @type {MetaClientState} */ (awareness.meta.get(clientID)).clock;\n writeVarUint(encoder, clientID);\n writeVarUint(encoder, clock);\n writeVarString(encoder, JSON.stringify(state));\n }\n return toUint8Array(encoder)\n};\n\n/**\n * @param {Awareness} awareness\n * @param {Uint8Array} update\n * @param {any} origin This will be added to the emitted change event\n */\nconst applyAwarenessUpdate = (awareness, update, origin) => {\n const decoder = createDecoder(update);\n const timestamp = getUnixTime();\n const added = [];\n const updated = [];\n const filteredUpdated = [];\n const removed = [];\n const len = readVarUint(decoder);\n for (let i = 0; i < len; i++) {\n const clientID = readVarUint(decoder);\n let clock = readVarUint(decoder);\n const state = JSON.parse(readVarString(decoder));\n const clientMeta = awareness.meta.get(clientID);\n const prevState = awareness.states.get(clientID);\n const currClock = clientMeta === undefined ? 0 : clientMeta.clock;\n if (currClock < clock || (currClock === clock && state === null && awareness.states.has(clientID))) {\n if (state === null) {\n // never let a remote client remove this local state\n if (clientID === awareness.clientID && awareness.getLocalState() != null) {\n // remote client removed the local state. Do not remote state. Broadcast a message indicating\n // that this client still exists by increasing the clock\n clock++;\n } else {\n awareness.states.delete(clientID);\n }\n } else {\n awareness.states.set(clientID, state);\n }\n awareness.meta.set(clientID, {\n clock,\n lastUpdated: timestamp\n });\n if (clientMeta === undefined && state !== null) {\n added.push(clientID);\n } else if (clientMeta !== undefined && state === null) {\n removed.push(clientID);\n } else if (state !== null) {\n if (!equalityDeep(state, prevState)) {\n filteredUpdated.push(clientID);\n }\n updated.push(clientID);\n }\n }\n }\n if (added.length > 0 || filteredUpdated.length > 0 || removed.length > 0) {\n awareness.emit('change', [{\n added, updated: filteredUpdated, removed\n }, origin]);\n }\n if (added.length > 0 || updated.length > 0 || removed.length > 0) {\n awareness.emit('update', [{\n added, updated, removed\n }, origin]);\n }\n};\n\nclass EventEmitter {\n constructor() {\n this.callbacks = {};\n }\n on(event, fn) {\n if (!this.callbacks[event]) {\n this.callbacks[event] = [];\n }\n this.callbacks[event].push(fn);\n return this;\n }\n emit(event, ...args) {\n const callbacks = this.callbacks[event];\n if (callbacks) {\n callbacks.forEach(callback => callback.apply(this, args));\n }\n return this;\n }\n off(event, fn) {\n const callbacks = this.callbacks[event];\n if (callbacks) {\n if (fn) {\n this.callbacks[event] = callbacks.filter(callback => callback !== fn);\n }\n else {\n delete this.callbacks[event];\n }\n }\n return this;\n }\n removeAllListeners() {\n this.callbacks = {};\n }\n}\n\n/**\n * Utility module to work with urls.\n *\n * @module url\n */\n\n/**\n * @param {Object<string,string>} params\n * @return {string}\n */\nconst encodeQueryParams = params =>\n map(params, (val, key) => `${encodeURIComponent(key)}=${encodeURIComponent(val)}`).join('&');\n\nvar MessageType;\n(function (MessageType) {\n MessageType[MessageType[\"Sync\"] = 0] = \"Sync\";\n MessageType[MessageType[\"Awareness\"] = 1] = \"Awareness\";\n MessageType[MessageType[\"Auth\"] = 2] = \"Auth\";\n MessageType[MessageType[\"QueryAwareness\"] = 3] = \"QueryAwareness\";\n MessageType[MessageType[\"Stateless\"] = 5] = \"Stateless\";\n MessageType[MessageType[\"CLOSE\"] = 7] = \"CLOSE\";\n MessageType[MessageType[\"SyncStatus\"] = 8] = \"SyncStatus\";\n})(MessageType || (MessageType = {}));\nvar WebSocketStatus;\n(function (WebSocketStatus) {\n WebSocketStatus[\"Connecting\"] = \"connecting\";\n WebSocketStatus[\"Connected\"] = \"connected\";\n WebSocketStatus[\"Disconnected\"] = \"disconnected\";\n})(WebSocketStatus || (WebSocketStatus = {}));\n\nclass IncomingMessage {\n constructor(data) {\n this.data = data;\n this.encoder = createEncoder();\n this.decoder = createDecoder(new Uint8Array(this.data));\n }\n peekVarString() {\n return peekVarString(this.decoder);\n }\n readVarUint() {\n return readVarUint(this.decoder);\n }\n readVarString() {\n return readVarString(this.decoder);\n }\n readVarUint8Array() {\n return readVarUint8Array(this.decoder);\n }\n writeVarUint(type) {\n return writeVarUint(this.encoder, type);\n }\n writeVarString(string) {\n return writeVarString(this.encoder, string);\n }\n writeVarUint8Array(data) {\n return writeVarUint8Array(this.encoder, data);\n }\n length() {\n return length(this.encoder);\n }\n}\n\nclass HocuspocusProviderWebsocket extends EventEmitter {\n constructor(configuration) {\n super();\n this.messageQueue = [];\n this.configuration = {\n url: '',\n // @ts-ignore\n document: undefined,\n WebSocketPolyfill: undefined,\n parameters: {},\n connect: true,\n broadcast: true,\n forceSyncInterval: false,\n // TODO: this should depend on awareness.outdatedTime\n messageReconnectTimeout: 30000,\n // 1 second\n delay: 1000,\n // instant\n initialDelay: 0,\n // double the delay each time\n factor: 2,\n // unlimited retries\n maxAttempts: 0,\n // wait at least 1 second\n minDelay: 1000,\n // at least every 30 seconds\n maxDelay: 30000,\n // randomize\n jitter: true,\n // retry forever\n timeout: 0,\n onOpen: () => null,\n onConnect: () => null,\n onMessage: () => null,\n onOutgoingMessage: () => null,\n onStatus: () => null,\n onDisconnect: () => null,\n onClose: () => null,\n onDestroy: () => null,\n onAwarenessUpdate: () => null,\n onAwarenessChange: () => null,\n quiet: false,\n providerMap: new Map(),\n };\n this.webSocket = null;\n this.webSocketHandlers = {};\n this.shouldConnect = true;\n this.status = WebSocketStatus.Disconnected;\n this.lastMessageReceived = 0;\n this.identifier = 0;\n this.intervals = {\n forceSync: null,\n connectionChecker: null,\n };\n this.connectionAttempt = null;\n this.receivedOnOpenPayload = undefined;\n this.receivedOnStatusPayload = undefined;\n this.closeTries = 0;\n this.setConfiguration(configuration);\n this.configuration.WebSocketPolyfill = configuration.WebSocketPolyfill\n ? configuration.WebSocketPolyfill\n : WebSocket;\n this.on('open', this.configuration.onOpen);\n this.on('open', this.onOpen.bind(this));\n this.on('connect', this.configuration.onConnect);\n this.on('message', this.configuration.onMessage);\n this.on('outgoingMessage', this.configuration.onOutgoingMessage);\n this.on('status', this.configuration.onStatus);\n this.on('status', this.onStatus.bind(this));\n this.on('disconnect', this.configuration.onDisconnect);\n this.on('close', this.configuration.onClose);\n this.on('destroy', this.configuration.onDestroy);\n this.on('awarenessUpdate', this.configuration.onAwarenessUpdate);\n this.on('awarenessChange', this.configuration.onAwarenessChange);\n this.on('close', this.onClose.bind(this));\n this.on('message', this.onMessage.bind(this));\n this.intervals.connectionChecker = setInterval(this.checkConnection.bind(this), this.configuration.messageReconnectTimeout / 10);\n if (typeof configuration.connect !== 'undefined') {\n this.shouldConnect = configuration.connect;\n }\n if (!this.shouldConnect) {\n return;\n }\n this.connect();\n }\n async onOpen(event) {\n this.receivedOnOpenPayload = event;\n }\n async onStatus(data) {\n this.receivedOnStatusPayload = data;\n }\n attach(provider) {\n let connectPromise;\n this.configuration.providerMap.set(provider.configuration.name, provider);\n if (this.status === WebSocketStatus.Disconnected && this.shouldConnect) {\n connectPromise = this.connect();\n }\n if (this.receivedOnOpenPayload) {\n provider.onOpen(this.receivedOnOpenPayload);\n }\n if (this.receivedOnStatusPayload) {\n provider.onStatus(this.receivedOnStatusPayload);\n }\n return connectPromise;\n }\n detach(provider) {\n this.configuration.providerMap.delete(provider.configuration.name);\n }\n setConfiguration(configuration = {}) {\n this.configuration = { ...this.configuration, ...configuration };\n }\n async connect() {\n if (this.status === WebSocketStatus.Connected) {\n return;\n }\n // Always cancel any previously initiated connection retryer instances\n if (this.cancelWebsocketRetry) {\n this.cancelWebsocketRetry();\n this.cancelWebsocketRetry = undefined;\n }\n this.receivedOnOpenPayload = undefined;\n this.receivedOnStatusPayload = undefined;\n this.shouldConnect = true;\n const abortableRetry = () => {\n let cancelAttempt = false;\n const retryPromise = retry(this.createWebSocketConnection.bind(this), {\n delay: this.configuration.delay,\n initialDelay: this.configuration.initialDelay,\n factor: this.configuration.factor,\n maxAttempts: this.configuration.maxAttempts,\n minDelay: this.configuration.minDelay,\n maxDelay: this.configuration.maxDelay,\n jitter: this.configuration.jitter,\n timeout: this.configuration.timeout,\n beforeAttempt: context => {\n if (!this.shouldConnect || cancelAttempt) {\n context.abort();\n }\n },\n }).catch((error) => {\n // If we aborted the connection attempt then don’t throw an error\n // ref: https://github.com/lifeomic/attempt/blob/master/src/index.ts#L136\n if (error && error.code !== 'ATTEMPT_ABORTED') {\n throw error;\n }\n });\n return {\n retryPromise,\n cancelFunc: () => {\n cancelAttempt = true;\n },\n };\n };\n const { retryPromise, cancelFunc } = abortableRetry();\n this.cancelWebsocketRetry = cancelFunc;\n return retryPromise;\n }\n attachWebSocketListeners(ws, reject) {\n const { identifier } = ws;\n const onMessageHandler = (payload) => this.emit('message', payload);\n const onCloseHandler = (payload) => this.emit('close', { event: payload });\n const onOpenHandler = (payload) => this.emit('open', payload);\n const onErrorHandler = (err) => {\n reject(err);\n };\n this.webSocketHandlers[identifier] = {\n message: onMessageHandler,\n close: onCloseHandler,\n open: onOpenHandler,\n error: onErrorHandler,\n };\n const handlers = this.webSocketHandlers[ws.identifier];\n Object.keys(handlers).forEach(name => {\n ws.addEventListener(name, handlers[name]);\n });\n }\n cleanupWebSocket() {\n if (!this.webSocket) {\n return;\n }\n const { identifier } = this.webSocket;\n const handlers = this.webSocketHandlers[identifier];\n Object.keys(handlers).forEach(name => {\n var _a;\n (_a = this.webSocket) === null || _a === void 0 ? void 0 : _a.removeEventListener(name, handlers[name]);\n delete this.webSocketHandlers[identifier];\n });\n this.webSocket.close();\n this.webSocket = null;\n }\n createWebSocketConnection() {\n return new Promise((resolve, reject) => {\n if (this.webSocket) {\n this.messageQueue = [];\n this.cleanupWebSocket();\n }\n this.lastMessageReceived = 0;\n this.identifier += 1;\n // Init the WebSocket connection\n const ws = new this.configuration.WebSocketPolyfill(this.url);\n ws.binaryType = 'arraybuffer';\n ws.identifier = this.identifier;\n this.attachWebSocketListeners(ws, reject);\n this.webSocket = ws;\n // Reset the status\n this.status = WebSocketStatus.Connecting;\n this.emit('status', { status: WebSocketStatus.Connecting });\n // Store resolve/reject for later use\n this.connectionAttempt = {\n resolve,\n reject,\n };\n });\n }\n onMessage(event) {\n var _a;\n this.resolveConnectionAttempt();\n this.lastMessageReceived = getUnixTime();\n const message = new IncomingMessage(event.data);\n const documentName = message.peekVarString();\n (_a = this.configuration.providerMap.get(documentName)) === null || _a === void 0 ? void 0 : _a.onMessage(event);\n }\n resolveConnectionAttempt() {\n if (this.connectionAttempt) {\n this.connectionAttempt.resolve();\n this.connectionAttempt = null;\n this.status = WebSocketStatus.Connected;\n this.emit('status', { status: WebSocketStatus.Connected });\n this.emit('connect');\n this.messageQueue.forEach(message => this.send(message));\n this.messageQueue = [];\n }\n }\n stopConnectionAttempt() {\n this.connectionAttempt = null;\n }\n rejectConnectionAttempt() {\n var _a;\n (_a = this.connectionAttempt) === null || _a === void 0 ? void 0 : _a.reject();\n this.connectionAttempt = null;\n }\n checkConnection() {\n var _a;\n // Don’t check the connection when it’s not even established\n if (this.status !== WebSocketStatus.Connected) {\n return;\n }\n // Don’t close the connection while waiting for the first message\n if (!this.lastMessageReceived) {\n return;\n }\n // Don’t close the connection when a message was received recently\n if (this.configuration.messageReconnectTimeout\n >= getUnixTime() - this.lastMessageReceived) {\n return;\n }\n // No message received in a long time, not even your own\n // Awareness updates, which are updated every 15 seconds\n // if awareness is enabled.\n this.closeTries += 1;\n // https://bugs.webkit.org/show_bug.cgi?id=247943\n if (this.closeTries > 2) {\n this.onClose({\n event: {\n code: 4408,\n reason: 'forced',\n },\n });\n this.closeTries = 0;\n }\n else {\n (_a = this.webSocket) === null || _a === void 0 ? void 0 : _a.close();\n this.messageQueue = [];\n }\n }\n // Ensure that the URL always ends with /\n get serverUrl() {\n while (this.configuration.url[this.configuration.url.length - 1] === '/') {\n return this.configuration.url.slice(0, this.configuration.url.length - 1);\n }\n return this.configuration.url;\n }\n get url() {\n const encodedParams = encodeQueryParams(this.configuration.parameters);\n return `${this.serverUrl}${encodedParams.length === 0 ? '' : `?${encodedParams}`}`;\n }\n disconnect() {\n this.shouldConnect = false;\n if (this.webSocket === null) {\n return;\n }\n try {\n this.webSocket.close();\n this.messageQueue = [];\n }\n catch {\n //\n }\n }\n send(message) {\n var _a;\n if (((_a = this.webSocket) === null || _a === void 0 ? void 0 : _a.readyState) === WsReadyStates.Open) {\n this.webSocket.send(message);\n }\n else {\n this.messageQueue.push(message);\n }\n }\n onClose({ event }) {\n this.closeTries = 0;\n this.cleanupWebSocket();\n if (this.status === WebSocketStatus.Connected) {\n this.status = WebSocketStatus.Disconnected;\n this.emit('status', { status: WebSocketStatus.Disconnected });\n this.emit('disconnect', { event });\n }\n if (event.code === Unauthorized.code) {\n if (event.reason === Unauthorized.reason) {\n console.warn('[HocuspocusProvider] An authentication token is required, but you didn’t send one. Try adding a `token` to your HocuspocusProvider configuration. Won’t try again.');\n }\n else {\n console.warn(`[HocuspocusProvider] Connection closed with status Unauthorized: ${event.reason}`);\n }\n this.shouldConnect = false;\n }\n if (event.code === Forbidden.code) {\n if (!this.configuration.quiet) {\n console.warn('[HocuspocusProvider] The provided authentication token isn’t allowed to connect to this server. Will try again.');\n return; // TODO REMOVE ME\n }\n }\n if (event.code === MessageTooBig.code) {\n console.warn(`[HocuspocusProvider] Connection closed with status MessageTooBig: ${event.reason}`);\n this.shouldConnect = false;\n }\n if (this.connectionAttempt) {\n // That connection attempt failed.\n this.rejectConnectionAttempt();\n }\n else if (this.shouldConnect) {\n // The connection was closed by the server. Let’s just try again.\n this.connect();\n }\n // If we’ll reconnect, we’re done for now.\n if (this.shouldConnect) {\n return;\n }\n // The status is set correctly already.\n if (this.status === WebSocketStatus.Disconnected) {\n return;\n }\n // Let’s update the connection status.\n this.status = WebSocketStatus.Disconnected;\n this.emit('status', { status: WebSocketStatus.Disconnected });\n this.emit('disconnect', { event });\n }\n destroy() {\n this.emit('destroy');\n if (this.intervals.forceSync) {\n clearInterval(this.intervals.forceSync);\n }\n clearInterval(this.intervals.connectionChecker);\n // If there is still a connection attempt outstanding then we should stop\n // it before calling disconnect, otherwise it will be rejected in the onClose\n // handler and trigger a retry\n this.stopConnectionAttempt();\n this.disconnect();\n this.removeAllListeners();\n this.cleanupWebSocket();\n }\n}\n\n/**\n * @module sync-protocol\n */\n\n/**\n * @typedef {Map<number, number>} StateMap\n */\n\n/**\n * Core Yjs defines two message types:\n * • YjsSyncStep1: Includes the State Set of the sending client. When received, the client should reply with YjsSyncStep2.\n * • YjsSyncStep2: Includes all missing structs and the complete delete set. When received, the client is assured that it\n * received all information from the remote client.\n *\n * In a peer-to-peer network, you may want to introduce a SyncDone message type. Both parties should initiate the connection\n * with SyncStep1. When a client received SyncStep2, it should reply with SyncDone. When the local client received both\n * SyncStep2 and SyncDone, it is assured that it is synced to the remote client.\n *\n * In a client-server model, you want to handle this differently: The client should initiate the connection with SyncStep1.\n * When the server receives SyncStep1, it should reply with SyncStep2 immediately followed by SyncStep1. The client replies\n * with SyncStep2 when it receives SyncStep1. Optionally the server may send a SyncDone after it received SyncStep2, so the\n * client knows that the sync is finished. There are two reasons for this more elaborated sync model: 1. This protocol can\n * easily be implemented on top of http and websockets. 2. The server should only reply to requests, and not initiate them.\n * Therefore it is necessary that the client initiates the sync.\n *\n * Construction of a message:\n * [messageType : varUint, message definition..]\n *\n * Note: A message does not include information about the room name. This must to be handled by the upper layer protocol!\n *\n * stringify[messageType] stringifies a message definition (messageType is already read from the bufffer)\n */\n\nconst messageYjsSyncStep1 = 0;\nconst messageYjsSyncStep2 = 1;\nconst messageYjsUpdate = 2;\n\n/**\n * Create a sync step 1 message based on the state of the current shared document.\n *\n * @param {encoding.Encoder} encoder\n * @param {Y.Doc} doc\n */\nconst writeSyncStep1 = (encoder, doc) => {\n writeVarUint(encoder, messageYjsSyncStep1);\n const sv = Y.encodeStateVector(doc);\n writeVarUint8Array(encoder, sv);\n};\n\n/**\n * @param {encoding.Encoder} encoder\n * @param {Y.Doc} doc\n * @param {Uint8Array} [encodedStateVector]\n */\nconst writeSyncStep2 = (encoder, doc, encodedStateVector) => {\n writeVarUint(encoder, messageYjsSyncStep2);\n writeVarUint8Array(encoder, Y.encodeStateAsUpdate(doc, encodedStateVector));\n};\n\n/**\n * Read SyncStep1 message and reply with SyncStep2.\n *\n * @param {decoding.Decoder} decoder The reply to the received message\n * @param {encoding.Encoder} encoder The received message\n * @param {Y.Doc} doc\n */\nconst readSyncStep1 = (decoder, encoder, doc) =>\n writeSyncStep2(encoder, doc, readVarUint8Array(decoder));\n\n/**\n * Read and apply Structs and then DeleteStore to a y instance.\n *\n * @param {decoding.Decoder} decoder\n * @param {Y.Doc} doc\n * @param {any} transactionOrigin\n */\nconst readSyncStep2 = (decoder, doc, transactionOrigin) => {\n try {\n Y.applyUpdate(doc, readVarUint8Array(decoder), transactionOrigin);\n } catch (error) {\n // This catches errors that are thrown by event handlers\n console.error('Caught error while handling a Yjs update', error);\n }\n};\n\n/**\n * @param {encoding.Encoder} encoder\n * @param {Uint8Array} update\n */\nconst writeUpdate = (encoder, update) => {\n writeVarUint(encoder, messageYjsUpdate);\n writeVarUint8Array(encoder, update);\n};\n\n/**\n * Read and apply Structs and then DeleteStore to a y instance.\n *\n * @param {decoding.Decoder} decoder\n * @param {Y.Doc} doc\n * @param {any} transactionOrigin\n */\nconst readUpdate = readSyncStep2;\n\n/**\n * @param {decoding.Decoder} decoder A message received from another client\n * @param {encoding.Encoder} encoder The reply message. Does not need to be sent if empty.\n * @param {Y.Doc} doc\n * @param {any} transactionOrigin\n */\nconst readSyncMessage = (decoder, encoder, doc, transactionOrigin) => {\n const messageType = readVarUint(decoder);\n switch (messageType) {\n case messageYjsSyncStep1:\n readSyncStep1(decoder, encoder, doc);\n break\n case messageYjsSyncStep2:\n readSyncStep2(decoder, doc, transactionOrigin);\n break\n case messageYjsUpdate:\n readUpdate(decoder, doc, transactionOrigin);\n break\n default:\n throw new Error('Unknown message type')\n }\n return messageType\n};\n\nclass OutgoingMessage {\n constructor() {\n this.encoder = createEncoder();\n }\n get(args) {\n return args.encoder;\n }\n toUint8Array() {\n return toUint8Array(this.encoder);\n }\n}\n\nclass MessageReceiver {\n constructor(message) {\n this.broadcasted = false;\n this.message = message;\n }\n setBroadcasted(value) {\n this.broadcasted = value;\n return this;\n }\n apply(provider, emitSynced) {\n const { message } = this;\n const type = message.readVarUint();\n const emptyMessageLength = message.length();\n switch (type) {\n case MessageType.Sync:\n this.applySyncMessage(provider, emitSynced);\n break;\n case MessageType.Awareness:\n this.applyAwarenessMessage(provider);\n break;\n case MessageType.Auth:\n this.applyAuthMessage(provider);\n break;\n case MessageType.QueryAwareness:\n this.applyQueryAwarenessMessage(provider);\n break;\n case MessageType.Stateless:\n provider.receiveStateless(readVarString(message.decoder));\n break;\n case MessageType.SyncStatus:\n this.applySyncStatusMessage(provider, readVarInt(message.decoder) === 1);\n break;\n default:\n throw new Error(`Can’t apply message of unknown type: ${type}`);\n }\n // Reply\n if (message.length() > emptyMessageLength + 1) { // length of documentName (considered in emptyMessageLength plus length of yjs sync type, set in applySyncMessage)\n if (this.broadcasted) {\n // TODO: Some weird TypeScript error\n // @ts-ignore\n provider.broadcast(OutgoingMessage, { encoder: message.encoder });\n }\n else {\n // TODO: Some weird TypeScript error\n // @ts-ignore\n provider.send(OutgoingMessage, { encoder: message.encoder });\n }\n }\n }\n applySyncMessage(provider, emitSynced) {\n const { message } = this;\n message.writeVarUint(MessageType.Sync);\n // Apply update\n const syncMessageType = readSyncMessage(message.decoder, message.encoder, provider.document, provider);\n // Synced once we receive Step2\n if (emitSynced && syncMessageType === messageYjsSyncStep2) {\n provider.synced = true;\n }\n }\n applySyncStatusMessage(provider, applied) {\n if (applied) {\n provider.decrementUnsyncedChanges();\n }\n }\n applyAwarenessMessage(provider) {\n if (!provider.awareness)\n return;\n const { message } = this;\n applyAwarenessUpdate(provider.awareness, message.readVarUint8Array(), provider);\n }\n applyAuthMessage(provider) {\n const { message } = this;\n readAuthMessage(message.decoder, provider.permissionDeniedHandler.bind(provider), provider.authenticatedHandler.bind(provider));\n }\n applyQueryAwarenessMessage(provider) {\n if (!provider.awareness)\n return;\n const { message } = this;\n message.writeVarUint(MessageType.Awareness);\n message.writeVarUint8Array(encodeAwarenessUpdate(provider.awareness, Array.from(provider.awareness.getStates().keys())));\n }\n}\n\nclass MessageSender {\n constructor(Message, args = {}) {\n this.message = new Message();\n this.encoder = this.message.get(args);\n }\n create() {\n return toUint8Array(this.encoder);\n }\n send(webSocket) {\n webSocket === null || webSocket === void 0 ? void 0 : webSocket.send(this.create());\n }\n broadcast(channel) {\n publish(channel, this.create());\n }\n}\n\nclass AuthenticationMessage extends OutgoingMessage {\n constructor() {\n super(...arguments);\n this.type = MessageType.Auth;\n this.description = 'Authentication';\n }\n get(args) {\n if (typeof args.token === 'undefined') {\n throw new Error('The authentication message requires `token` as an argument.');\n }\n writeVarString(this.encoder, args.documentName);\n writeVarUint(this.encoder, this.type);\n writeAuthentication(this.encoder, args.token);\n return this.encoder;\n }\n}\n\nclass AwarenessMessage extends OutgoingMessage {\n constructor() {\n super(...arguments);\n this.type = MessageType.Awareness;\n this.description = 'Awareness states update';\n }\n get(args) {\n if (typeof args.awareness === 'undefined') {\n throw new Error('The awareness message requires awareness as an argument');\n }\n if (typeof args.clients === 'undefined') {\n throw new Error('The awareness message requires clients as an argument');\n }\n writeVarString(this.encoder, args.documentName);\n writeVarUint(this.encoder, this.type);\n let awarenessUpdate;\n if (args.states === undefined) {\n awarenessUpdate = encodeAwarenessUpdate(args.awareness, args.clients);\n }\n else {\n awarenessUpdate = encodeAwarenessUpdate(args.awareness, args.clients, args.states);\n }\n writeVarUint8Array(this.encoder, awarenessUpdate);\n return this.encoder;\n }\n}\n\nclass CloseMessage extends OutgoingMessage {\n constructor() {\n super(...arguments);\n this.type = MessageType.CLOSE;\n this.description = 'Ask the server to close the connection';\n }\n get(args) {\n writeVarString(this.encoder, args.documentName);\n writeVarUint(this.encoder, this.type);\n return this.encoder;\n }\n}\n\nclass QueryAwarenessMessage extends OutgoingMessage {\n constructor() {\n super(...arguments);\n this.type = MessageType.QueryAwareness;\n this.description = 'Queries awareness states';\n }\n get(args) {\n writeVarString(this.encoder, args.documentName);\n writeVarUint(this.encoder, this.type);\n return this.encoder;\n }\n}\n\nclass StatelessMessage extends OutgoingMessage {\n constructor() {\n super(...arguments);\n this.type = MessageType.Stateless;\n this.description = 'A stateless message';\n }\n get(args) {\n var _a;\n writeVarString(this.encoder, args.documentName);\n writeVarUint(this.encoder, this.type);\n writeVarString(this.encoder, (_a = args.payload) !== null && _a !== void 0 ? _a : '');\n return this.encoder;\n }\n}\n\nclass SyncStepOneMessage extends OutgoingMessage {\n constructor() {\n super(...arguments);\n this.type = MessageType.Sync;\n this.description = 'First sync step';\n }\n get(args) {\n if (typeof args.document === 'undefined') {\n throw new Error('The sync step one message requires document as an argument');\n }\n writeVarString(this.encoder, args.documentName);\n writeVarUint(this.encoder, this.type);\n writeSyncStep1(this.encoder, args.document);\n return this.encoder;\n }\n}\n\nclass SyncStepTwoMessage extends OutgoingMessage {\n constructor() {\n super(...arguments);\n this.type = MessageType.Sync;\n this.description = 'Second sync step';\n }\n get(args) {\n if (typeof args.document === 'undefined') {\n throw new Error('The sync step two message requires document as an argument');\n }\n writeVarString(this.encoder, args.documentName);\n writeVarUint(this.encoder, this.type);\n writeSyncStep2(this.encoder, args.document);\n return this.encoder;\n }\n}\n\nclass UpdateMessage extends OutgoingMessage {\n constructor() {\n super(...arguments);\n this.type = MessageType.Sync;\n this.description = 'A document update';\n }\n get(args) {\n writeVarString(this.encoder, args.documentName);\n writeVarUint(this.encoder, this.type);\n writeUpdate(this.encoder, args.update);\n return this.encoder;\n }\n}\n\nclass AwarenessError extends Error {\n constructor() {\n super(...arguments);\n this.code = 1001;\n }\n}\nclass HocuspocusProvider extends EventEmitter {\n constructor(configuration) {\n var _a, _b, _c;\n super();\n this.configuration = {\n name: '',\n // @ts-ignore\n document: undefined,\n // @ts-ignore\n awareness: undefined,\n token: null,\n parameters: {},\n broadcast: true,\n forceSyncInterval: false,\n onAuthenticated: () => null,\n onAuthenticationFailed: () => null,\n onOpen: () => null,\n onConnect: () => null,\n onMessage: () => null,\n onOutgoingMessage: () => null,\n onStatus: () => null,\n onSynced: () => null,\n onDisconnect: () => null,\n onClose: () => null,\n onDestroy: () => null,\n onAwarenessUpdate: () => null,\n onAwarenessChange: () => null,\n onStateless: () => null,\n quiet: false,\n connect: true,\n preserveConnection: true,\n };\n this.subscribedToBroadcastChannel = false;\n this.isSynced = false;\n this.unsyncedChanges = 0;\n this.status = WebSocketStatus.Disconnected;\n this.isAuthenticated = false;\n this.authorizedScope = undefined;\n this.mux = createMutex();\n this.intervals = {\n forceSync: null,\n };\n this.isConnected = true;\n this.boundDocumentUpdateHandler = this.documentUpdateHandler.bind(this);\n this.boundAwarenessUpdateHandler = this.awarenessUpdateHandler.bind(this);\n this.boundBroadcastChannelSubscriber = this.broadcastChannelSubscriber.bind(this);\n this.boundPageHide = this.pageHide.bind(this);\n this.boundOnOpen = this.onOpen.bind(this);\n this.boundOnClose = this.onClose.bind(this);\n this.boundOnStatus = this.onStatus.bind(this);\n this.forwardConnect = (e) => this.emit('connect', e);\n this.forwardOpen = (e) => this.emit('open', e);\n this.forwardClose = (e) => this.emit('close', e);\n this.forwardDisconnect = (e) => this.emit('disconnect', e);\n this.forwardDestroy = (e) => this.emit('destroy', e);\n this.setConfiguration(configuration);\n this.configuration.document = configuration.document ? configuration.document : new Y.Doc();\n this.configuration.awareness = configuration.awareness !== undefined ? configuration.awareness : new Awareness(this.document);\n this.on('open', this.configuration.onOpen);\n this.on('message', this.configuration.onMessage);\n this.on('outgoingMessage', this.configuration.onOutgoingMessage);\n this.on('synced', this.configuration.onSynced);\n this.on('destroy', this.configuration.onDestroy);\n this.on('awarenessUpdate', this.configuration.onAwarenessUpdate);\n this.on('awarenessChange', this.configuration.onAwarenessChange);\n this.on('stateless', this.configuration.onStateless);\n this.on('authenticated', this.configuration.onAuthenticated);\n this.on('authenticationFailed', this.configuration.onAuthenticationFailed);\n this.configuration.websocketProvider.on('connect', this.configuration.onConnect);\n this.configuration.websocketProvider.on('connect', this.forwardConnect);\n this.configuration.websocketProvider.on('open', this.boundOnOpen);\n this.configuration.websocketProvider.on('open', this.forwardOpen);\n this.configuration.websocketProvider.on('close', this.boundOnClose);\n this.configuration.websocketProvider.on('close', this.configuration.onClose);\n this.configuration.websocketProvider.on('close', this.forwardClose);\n this.configuration.websocketProvider.on('status', this.boundOnStatus);\n this.configuration.websocketProvider.on('disconnect', this.configuration.onDisconnect);\n this.configuration.websocketProvider.on('disconnect', this.forwardDisconnect);\n this.configuration.websocketProvider.on('destroy', this.configuration.onDestroy);\n this.configuration.websocketProvider.on('destroy', this.forwardDestroy);\n (_a = this.awareness) === null || _a === void 0 ? void 0 : _a.on('update', () => {\n this.emit('awarenessUpdate', { states: awarenessStatesToArray(this.awareness.getStates()) });\n });\n (_b = this.awareness) === null || _b === void 0 ? void 0 : _b.on('change', () => {\n this.emit('awarenessChange', { states: awarenessStatesToArray(this.awareness.getStates()) });\n });\n this.document.on('update', this.boundDocumentUpdateHandler);\n (_c = this.awareness) === null || _c === void 0 ? void 0 : _c.on('update', this.boundAwarenessUpdateHandler);\n this.registerEventListeners();\n if (this.configuration.forceSyncInterval\n && typeof this.configuration.forceSyncInterval === 'number') {\n this.intervals.forceSync = setInterval(this.forceSync.bind(this), this.configuration.forceSyncInterval);\n }\n this.configuration.websocketProvider.attach(this);\n }\n onStatus({ status }) {\n this.status = status;\n this.configuration.onStatus({ status });\n this.emit('status', { status });\n }\n setConfiguration(configuration = {}) {\n if (!configuration.websocketProvider && configuration.url) {\n const websocketProviderConfig = configuration;\n this.configuration.websocketProvider = new HocuspocusProviderWebsocket({\n url: websocketProviderConfig.url,\n connect: websocketProviderConfig.connect,\n parameters: websocketProviderConfig.parameters,\n });\n }\n this.configuration = { ...this.configuration, ...configuration };\n }\n get document() {\n return this.configuration.document;\n }\n get awareness() {\n return this.configuration.awareness;\n }\n get hasUnsyncedChanges() {\n return this.unsyncedChanges > 0;\n }\n resetUnsyncedChanges() {\n this.unsyncedChanges = 1;\n this.emit('unsyncedChanges', this.unsyncedChanges);\n }\n incrementUnsyncedChanges() {\n this.unsyncedChanges += 1;\n this.emit('unsyncedChanges', this.unsyncedChanges);\n }\n decrementUnsyncedChanges() {\n this.unsyncedChanges -= 1;\n if (this.unsyncedChanges === 0) {\n this.synced = true;\n }\n this.emit('unsyncedChanges', this.unsyncedChanges);\n }\n forceSync() {\n this.resetUnsyncedChanges();\n this.send(SyncStepOneMessage, { document: this.document, documentName: this.configuration.name });\n }\n pageHide() {\n if (this.awareness) {\n removeAwarenessStates(this.awareness, [this.document.clientID], 'page hide');\n }\n }\n registerEventListeners() {\n if (typeof window === 'undefined' || !('addEventListener' in window)) {\n return;\n }\n window.addEventListener('pagehide', this.boundPageHide);\n }\n sendStateless(payload) {\n this.send(StatelessMessage, { documentName: this.configuration.name, payload });\n }\n documentUpdateHandler(update, origin) {\n if (origin === this) {\n return;\n }\n this.incrementUnsyncedChanges();\n this.send(UpdateMessage, { update, documentName: this.configuration.name }, true);\n }\n awarenessUpdateHandler({ added, updated, removed }, origin) {\n const changedClients = added.concat(updated).concat(removed);\n this.send(AwarenessMessage, {\n awareness: this.awareness,\n clients: changedClients,\n documentName: this.configuration.name,\n }, true);\n }\n /**\n * Indicates whether a first handshake with the server has been established\n *\n * Note: this does not mean all updates from the client have been persisted to the backend. For this,\n * use `hasUnsyncedChanges`.\n */\n get synced() {\n return this.isSynced;\n }\n set synced(state) {\n if (this.isSynced === state) {\n return;\n }\n this.isSynced = state;\n this.emit('synced', { state });\n this.emit('sync', { state });\n }\n receiveStateless(payload) {\n this.emit('stateless', { payload });\n }\n get isAuthenticationRequired() {\n return !!this.configuration.token && !this.isAuthenticated;\n }\n // not needed, but provides backward compatibility with e.g. lexical/yjs\n async connect() {\n if (this.configuration.broadcast) {\n this.subscribeToBroadcastChannel();\n }\n this.configuration.websocketProvider.shouldConnect = true;\n return this.configuration.websocketProvider.attach(this);\n }\n disconnect() {\n this.disconnectBroadcastChannel();\n this.configuration.websocketProvider.detach(this);\n this.isConnected = false;\n if (!this.configuration.preserveConnection) {\n this.configuration.websocketProvider.disconnect();\n }\n }\n async onOpen(event) {\n this.isAuthenticated = false;\n this.isConnected = true;\n this.emit('open', { event });\n let token;\n try {\n token = await this.getToken();\n }\n catch (error) {\n this.permissionDeniedHandler(`Failed to get token: ${error}`);\n return;\n }\n if (this.isAuthenticationRequired) {\n this.send(AuthenticationMessage, {\n token,\n documentName: this.configuration.name,\n });\n }\n this.startSync();\n }\n async getToken() {\n if (typeof this.configuration.token === 'function') {\n const token = await this.configuration.token();\n return token;\n }\n return this.configuration.token;\n }\n startSync() {\n this.resetUnsyncedChanges();\n this.send(SyncStepOneMessage, { document: this.document, documentName: this.configuration.name });\n if (this.awareness && this.awareness.getLocalState() !== null) {\n this.send(AwarenessMessage, {\n awareness: this.awareness,\n clients: [this.document.clientID],\n documentName: this.configuration.name,\n });\n }\n }\n send(message, args, broadcast = false) {\n if (!this.isConnected) {\n return;\n }\n if (broadcast) {\n this.mux(() => { this.broadcast(message, args); });\n }\n const messageSender = new MessageSender(message, args);\n this.emit('outgoingMessage', { message: messageSender.message });\n messageSender.send(this.configuration.websocketProvider);\n }\n onMessage(event) {\n const message = new IncomingMessage(event.data);\n const documentName = message.readVarString();\n message.writeVarString(documentName);\n this.emit('message', { event, message: new IncomingMessage(event.data) });\n new MessageReceiver(message).apply(this, true);\n }\n onClose(event) {\n this.isAuthenticated = false;\n this.synced = false;\n // update awareness (all users except local left)\n if (this.awareness) {\n removeAwarenessStates(this.awareness, Array.from(this.awareness.getStates().keys()).filter(client => client !== this.document.clientID), this);\n }\n }\n destroy() {\n this.emit('destroy');\n if (this.intervals.forceSync) {\n clearInterval(this.intervals.forceSync);\n }\n if (this.awareness) {\n removeAwarenessStates(this.awareness, [this.document.clientID], 'provider destroy');\n this.awareness.off('update', this.boundAwarenessUpdateHandler);\n this.awareness.destroy();\n }\n this.document.off('update', this.boundDocumentUpdateHandler);\n this.removeAllListeners();\n this.configuration.websocketProvider.off('connect', this.configuration.onConnect);\n this.configuration.websocketProvider.off('connect', this.forwardConnect);\n this.configuration.websocketProvider.off('open', this.boundOnOpen);\n this.configuration.websocketProvider.off('open', this.forwardOpen);\n this.configuration.websocketProvider.off('close', this.boundOnClose);\n this.configuration.websocketProvider.off('close', this.configuration.onClose);\n this.configuration.websocketProvider.off('close', this.forwardClose);\n this.configuration.websocketProvider.off('status', this.boundOnStatus);\n this.configuration.websocketProvider.off('disconnect', this.configuration.onDisconnect);\n this.configuration.websocketProvider.off('disconnect', this.forwardDisconnect);\n this.configuration.websocketProvider.off('destroy', this.configuration.onDestroy);\n this.configuration.websocketProvider.off('destroy', this.forwardDestroy);\n this.send(CloseMessage, { documentName: this.configuration.name });\n this.disconnect();\n if (typeof window === 'undefined' || !('removeEventListener' in window)) {\n return;\n }\n window.removeEventListener('pagehide', this.boundPageHide);\n }\n permissionDeniedHandler(reason) {\n this.emit('authenticationFailed', { reason });\n this.isAuthenticated = false;\n this.disconnect();\n this.status = WebSocketStatus.Disconnected;\n }\n authenticatedHandler(scope) {\n this.isAuthenticated = true;\n this.authorizedScope = scope;\n this.emit('authenticated');\n }\n get broadcastChannel() {\n return `${this.configuration.name}`;\n }\n broadcastChannelSubscriber(data) {\n this.mux(() => {\n const message = new IncomingMessage(data);\n const documentName = message.readVarString();\n message.writeVarString(documentName);\n new MessageReceiver(message)\n .setBroadcasted(true)\n .apply(this, false);\n });\n }\n subscribeToBroadcastChannel() {\n if (!this.subscribedToBroadcastChannel) {\n subscribe(this.broadcastChannel, this.boundBroadcastChannelSubscriber);\n this.subscribedToBroadcastChannel = true;\n }\n this.mux(() => {\n this.broadcast(SyncStepOneMessage, { document: this.document, documentName: this.configuration.name });\n this.broadcast(SyncStepTwoMessage, { document: this.document, documentName: this.configuration.name });\n this.broadcast(QueryAwarenessMessage, { document: this.document, documentName: this.configuration.name });\n if (this.awareness) {\n this.broadcast(AwarenessMessage, {\n awareness: this.awareness,\n clients: [this.document.clientID],\n document: this.document,\n documentName: this.configuration.name,\n });\n }\n });\n }\n disconnectBroadcastChannel() {\n // broadcast message with local awareness state set to null (indicating disconnect)\n if (this.awareness) {\n this.send(AwarenessMessage, {\n awareness: this.awareness,\n clients: [this.document.clientID],\n states: new Map(),\n documentName: this.configuration.name,\n }, true);\n }\n if (this.subscribedToBroadcastChannel) {\n unsubscribe(this.broadcastChannel, this.boundBroadcastChannelSubscriber);\n this.subscribedToBroadcastChannel = false;\n }\n }\n broadcast(Message, args) {\n if (!this.configuration.broadcast) {\n return;\n }\n if (!this.subscribedToBroadcastChannel) {\n return;\n }\n new MessageSender(Message, args).broadcast(this.broadcastChannel);\n }\n setAwarenessField(key, value) {\n if (!this.awareness) {\n throw new AwarenessError(`Cannot set awareness field \"${key}\" to ${JSON.stringify(value)}. You have disabled Awareness for this provider by explicitly passing awareness: null in the provider configuration.`);\n }\n this.awareness.setLocalStateField(key, value);\n }\n}\n\n/* eslint-env browser */\nconst getRandomValues = crypto.getRandomValues.bind(crypto);\n\n/**\n * Isomorphic module for true random numbers / buffers / uuids.\n *\n * Attention: falls back to Math.random if the browser does not support crypto.\n *\n * @module random\n */\n\nconst uint32 = () => getRandomValues(new Uint32Array(1))[0];\n\n// @ts-ignore\nconst uuidv4Template = [1e7] + -1e3 + -4e3 + -8e3 + -1e11;\n\n/**\n * @return {string}\n */\nconst uuidv4 = () => uuidv4Template.replace(/[018]/g, /** @param {number} c */ c =>\n (c ^ uint32() & 15 >> c / 4).toString(16)\n);\n\nclass TiptapCollabProviderWebsocket extends HocuspocusProviderWebsocket {\n constructor(configuration) {\n var _a;\n let url = (_a = configuration.baseUrl) !== null && _a !== void 0 ? _a : `wss://${configuration.appId}.collab.tiptap.cloud`;\n if (configuration.shardKey) {\n url += url.includes('?') ? '&' : '?';\n url += `shard=${configuration.shardKey}`;\n }\n super({ ...configuration, url });\n }\n}\n\nconst defaultDeleteCommentOptions = {\n deleteContent: false,\n deleteThread: false,\n};\nconst defaultGetThreadsOptions = {\n types: ['unarchived'],\n};\nconst defaultDeleteThreadOptions = {\n deleteComments: false,\n force: false,\n};\nclass TiptapCollabProvider extends HocuspocusProvider {\n constructor(configuration) {\n if (!configuration.websocketProvider) {\n configuration.websocketProvider = new TiptapCollabProviderWebsocket({ appId: configuration.appId, baseUrl: configuration.baseUrl });\n }\n if (!configuration.token) {\n configuration.token = 'notoken'; // need to send a token anyway (which will be ignored)\n }\n super(configuration);\n this.tiptapCollabConfigurationPrefix = '__tiptapcollab__';\n if (configuration.user) {\n this.userData = new Y.PermanentUserData(this.document, this.document.getMap('__tiptapcollab__users'));\n this.userData.setUserMapping(this.document, this.document.clientID, configuration.user);\n }\n }\n /**\n * note: this will only work if your server loaded @hocuspocus-pro/extension-history, or if you are on a Tiptap business plan.\n */\n createVersion(name) {\n return this.sendStateless(JSON.stringify({ action: 'version.create', name }));\n }\n /**\n * note: this will only work if your server loaded @hocuspocus-pro/extension-history, or if you are on a Tiptap business plan.\n */\n revertToVersion(targetVersion) {\n return this.sendStateless(JSON.stringify({ action: 'document.revert', version: targetVersion }));\n }\n /**\n * note: this will only work if your server loaded @hocuspocus-pro/extension-history, or if you are on a Tiptap business plan.\n *\n * The server will reply with a stateless message (THistoryVersionPreviewEvent)\n */\n previewVersion(targetVersion) {\n return this.sendStateless(JSON.stringify({ action: 'version.preview', version: targetVersion }));\n }\n /**\n * note: this will only work if your server loaded @hocuspocus-pro/extension-history, or if you are on a Tiptap business plan.\n */\n getVersions() {\n return this.configuration.document.getArray(`${this.tiptapCollabConfigurationPrefix}versions`).toArray();\n }\n watchVersions(callback) {\n return this.configuration.document.getArray('__tiptapcollab__versions').observe(callback);\n }\n unwatchVersions(callback) {\n return this.configuration.document.getArray('__tiptapcollab__versions').unobserve(callback);\n }\n isAutoVersioning() {\n return !!this.configuration.document.getMap(`${this.tiptapCollabConfigurationPrefix}config`).get('autoVersioning');\n }\n enableAutoVersioning() {\n return this.configuration.document.getMap(`${this.tiptapCollabConfigurationPrefix}config`).set('autoVersioning', 1);\n }\n disableAutoVersioning() {\n return this.configuration.document.getMap(`${this.tiptapCollabConfigurationPrefix}config`).set('autoVersioning', 0);\n }\n /**\n * Returns all users in the document as Y.Map objects\n * @returns An array of Y.Map objects\n */\n getYThreads() {\n return this.configuration.document.getArray(`${this.tiptapCollabConfigurationPrefix}threads`);\n }\n /**\n * Finds all threads in the document and returns them as JSON objects\n * @options Options to control the output of the threads (e.g. include deleted threads)\n * @returns An array of threads as JSON objects\n */\n getThreads(options) {\n const { types } = { ...defaultGetThreadsOptions, ...options };\n const threads = this.getYThreads().toJSON();\n if ((types === null || types === void 0 ? void 0 : types.includes('archived')) && (types === null || types === void 0 ? void 0 : types.includes('unarchived'))) {\n return threads;\n }\n return threads.filter(currentThead => {\n if ((types === null || types === void 0 ? void 0 : types.includes('archived')) && currentThead.deletedAt) {\n return true;\n }\n if ((types === null || types === void 0 ? void 0 : types.includes('unarchived')) && !currentThead.deletedAt) {\n return true;\n }\n return false;\n });\n }\n /**\n * Find the index of a thread by its id\n * @param id The thread id\n * @returns The index of the thread or null if not found\n */\n getThreadIndex(id) {\n let index = null;\n let i = 0;\n // eslint-disable-next-line no-restricted-syntax\n for (const thread of this.getThreads({ types: ['archived', 'unarchived'] })) {\n if (thread.id === id) {\n index = i;\n break;\n }\n i += 1;\n }\n return index;\n }\n /**\n * Gets a single thread by its id\n * @param id The thread id\n * @returns The thread as a JSON object or null if not found\n */\n getThread(id) {\n const index = this.getThreadIndex(id);\n if (index === null) {\n return null;\n }\n return this.getYThreads().get(index).toJSON();\n }\n /**\n * Gets a single thread by its id as a Y.Map object\n * @param id The thread id\n * @returns The thread as a Y.Map object or null if not found\n */\n getYThread(id) {\n const index = this.getThreadIndex(id);\n if (index === null) {\n return null;\n }\n return this.getYThreads().get(index);\n }\n /**\n * Create a new thread\n * @param data The thread data\n * @returns The created thread\n */\n createThread(data) {\n let createdThread = {};\n this.document.transact(() => {\n const thread = new Y.Map();\n thread.set('id', uuidv4());\n thread.set('createdAt', (new Date()).toISOString());\n thread.set('comments', new Y.Array());\n thread.set('deletedComments', new Y.Array());\n thread.set('deletedAt', null);\n this.getYThreads().push([thread]);\n createdThread = this.updateThread(String(thread.get('id')), data);\n });\n return createdThread;\n }\n /**\n * Update a specific thread\n * @param id The thread id\n * @param data New data for the thread\n * @returns The updated thread or null if the thread is not found\n */\n updateThread(id, data) {\n let updatedThread = {};\n this.document.transact(() => {\n const thread = this.getYThread(id);\n if (thread === null) {\n return null;\n }\n thread.set('updatedAt', (new Date()).toISOString());\n if (data.data) {\n thread.set('data', data.data);\n }\n if (data.resolvedAt || data.resolvedAt === null) {\n thread.set('resolvedAt', data.resolvedAt);\n }\n updatedThread = thread.toJSON();\n });\n return updatedThread;\n }\n /**\n * Handle the deletion of a thread. By default, the thread and it's comments are not deleted, but marked as deleted\n * via the `deletedAt` property. Forceful deletion can be enabled by setting the `force` option to `true`.\n *\n * If you only want to delete the comments of a thread, you can set the `deleteComments` option to `true`.\n * @param id The thread id\n * @param options A set of options that control how the thread is deleted\n * @returns The deleted thread or null if the thread is not found\n */\n deleteThread(id, options) {\n const { deleteComments, force } = { ...defaultDeleteThreadOptions, ...options };\n const index = this.getThreadIndex(id);\n if (index === null) {\n return null;\n }\n if (force) {\n this.getYThreads().delete(index, 1);\n return;\n }\n const thread = this.getYThreads().get(index);\n thread.set('deletedAt', (new Date()).toISOString());\n if (deleteComments) {\n thread.set('comments', new Y.Array());\n thread.set('deletedComments', new Y.Array());\n }\n return thread.toJSON();\n }\n /**\n * Tries to restore a deleted thread\n * @param id The thread id\n * @returns The restored thread or null if the thread is not found\n */\n restoreThread(id) {\n const index = this.getThreadIndex(id);\n if (index === null) {\n return null;\n }\n const thread = this.getYThreads().get(index);\n thread.set('deletedAt', null);\n return thread.toJSON();\n }\n /**\n * Returns comments from a thread, either deleted or not\n * @param threadId The thread id\n * @param includeDeleted If you want to include deleted comments, defaults to `false`\n * @returns The comments or null if the thread is not found\n */\n getThreadComments(threadId, includeDeleted) {\n var _a, _b, _c;\n const index = this.getThreadIndex(threadId);\n if (index === null) {\n return null;\n }\n const comments = !includeDeleted ? (_a = this.getThread(threadId)) === null || _a === void 0 ? void 0 : _a.comments : [...(((_b = this.getThread(threadId)) === null || _b === void 0 ? void 0 : _b.comments) || []), ...(((_c = this.getThread(threadId)) === null || _c === void 0 ? void 0 : _c.deletedComments) || [])].sort((a, b) => {\n return a.createdAt.localeCompare(b.createdAt);\n });\n return comments !== null && comments !== void 0 ? comments : [];\n }\n /**\n * Get a single comment from a specific thread\n * @param threadId The thread id\n * @param commentId The comment id\n * @param includeDeleted If you want to include deleted comments in the search\n * @returns The comment or null if not found\n */\n getThreadComment(threadId, commentId, includeDeleted) {\n var _a;\n const index = this.getThreadIndex(threadId);\n if (index === null) {\n return null;\n }\n const comments = this.getThreadComments(threadId, includeDeleted);\n return (_a = comments === null || comments === void 0 ? void 0 : comments.find(comment => comment.id === commentId)) !== null && _a !== void 0 ? _a : null;\n }\n /**\n * Adds a comment to a thread\n * @param threadId The thread id\n * @param data The comment data\n * @returns The updated thread or null if the thread is not found\n * @example addComment('123', { content: 'Hello world', data: { author: 'Maria Doe' } })\n */\n addComment(threadId, data) {\n let updatedThread = {};\n this.document.transact(() => {\n const thread = this.getYThread(threadId);\n if (thread === null)\n return null;\n const commentMap = new Y.Map();\n commentMap.set('id', uuidv4());\n commentMap.set('createdAt', (new Date()).toISOString());\n thread.get('comments').push([commentMap]);\n this.updateComment(threadId, String(commentMap.get('id')), data);\n updatedThread = thread.toJSON();\n });\n return updatedThread;\n }\n /**\n * Update a comment in a thread\n * @param threadId The thread id\n * @param commentId The comment id\n * @param data The new comment data\n * @returns The updated thread or null if the thread or comment is not found\n * @example updateComment('123', { content: 'The new content', data: { attachments: ['file1.jpg'] }})\n */\n updateComment(threadId, commentId, data) {\n let updatedThread = {};\n this.document.transact(() => {\n const thread = this.getYThread(threadId);\n if (thread === null)\n return null;\n let comment = null;\n // eslint-disable-next-line no-restricted-syntax\n for (const c of thread.get('comments')) {\n if (c.get('id') === commentId) {\n comment = c;\n break;\n }\n }\n if (comment === null)\n return null;\n comment.set('updatedAt', (new Date()).toISOString());\n if (data.data) {\n comment.set('data', data.data);\n }\n if (data.content) {\n comment.set('content', data.content);\n }\n updatedThread = thread.toJSON();\n });\n return updatedThread;\n }\n /**\n * Deletes a comment from a thread\n * @param threadId The thread id\n * @param commentId The comment id\n * @param options A set of options that control how the comment is deleted\n * @returns The updated thread or null if the thread or comment is not found\n */\n deleteComment(threadId, commentId, options) {\n const { deleteContent, deleteThread } = { ...defaultDeleteCommentOptions, ...options };\n const thread = this.getYThread(threadId);\n if (thread === null)\n return null;\n let commentIndex = 0;\n // eslint-disable-next-line no-restricted-syntax\n for (const c of thread.get('comments')) {\n if (c.get('id') === commentId) {\n break;\n }\n commentIndex += 1;\n }\n // if the first comment of a thread is deleted we also\n // delete the thread itself as the source comment is gone\n if (commentIndex === 0 && (deleteThread || this.configuration.deleteThreadOnFirstCommentDelete)) {\n this.deleteThread(threadId);\n return;\n }\n const comment = thread.get('comments').get(commentIndex);\n const newComment = new Y.Map();\n newComment.set('id', comment.get('id'));\n newComment.set('createdAt', comment.get('createdAt'));\n newComment.set('updatedAt', (new Date()).toISOString());\n newComment.set('deletedAt', (new Date()).toISOString());\n newComment.set('data', comment.get('data'));\n newComment.set('content', deleteContent ? null : comment.get('content'));\n if (!thread.get('deletedComments')) {\n thread.set('deletedComments', new Y.Array());\n }\n thread.get('deletedComments').push([newComment]);\n thread.get('comments').delete(commentIndex);\n return thread.toJSON();\n }\n /**\n * Start watching threads for changes\n * @param callback The callback function to be called when a thread changes\n */\n watchThreads(callback) {\n this.getYThreads().observeDeep(callback);\n }\n /**\n * Stop watching threads for changes\n * @param callback The callback function to be removed\n */\n unwatchThreads(callback) {\n this.getYThreads().unobserveDeep(callback);\n }\n}\n\nexport { AwarenessError, HocuspocusProvider, HocuspocusProviderWebsocket, MessageType, TiptapCollabProvider, TiptapCollabProviderWebsocket, WebSocketStatus };\n//# sourceMappingURL=hocuspocus-provider.esm.js.map\n"],"names":["floor","min","a","b","max","BIT8","BITS7","MAX_SAFE_INTEGER","_encodeUtf8Polyfill","str","encodedString","len","buf","utf8TextEncoder","_encodeUtf8Native","encodeUtf8","utf8TextDecoder","write","encoder","num","bufferLen","writeVarUint","_strBuffer","_maxStrBSize","_writeVarStringNative","written","i","writeVarUint8Array","_writeVarStringPolyfill","writeVarString","writeUint8Array","uint8Array","cpos","leftCopyLen","rightCopyLen","create","s","errorUnexpectedEndOfArray","errorIntegerOutOfRange","readUint8Array","decoder","view","readVarUint8Array","readVarUint","readUint8","mult","r","_readVarStringPolyfill","remainingLen","nextLen","bytes","_readVarStringNative","readVarString","AuthMessageType","writeAuthentication","auth","readAuthMessage","permissionDeniedHandler","authenticatedHandler","MessageTooBig","Unauthorized","Forbidden","awarenessStatesToArray","states","key","value","WsReadyStates","applyDefaults","options","sleep","delay","resolve","defaultCalculateDelay","context","retry","attemptFunc","attemptOptions","prop","calculateDelay","makeAttempt","err","onError","reject","timer","e","result","initialDelay","create$2","setIfUndefined","map","createT","set","create$1","from","fromCharCode","toLowerCase","trimLeftRegex","trimLeft","fromCamelCaseRegex","fromCamelCase","separator","match","undefinedToNull","v","VarStoragePolyfill","newValue","_localStorage","usePolyfill","varStorage","onChange","eventHandler","offChange","keys","obj","f","results","length$1","hasProperty","equalityStrict","equalityDeep","isOneOf","isNode","isBrowser","params","computeParams","pargs","currParamName","parg","kv","hasParam","name","getVariable","define_process_env_default","hasConf","forceColor","BIT7","BITS6","Encoder","createEncoder","length","toUint8Array","uint8arr","curPos","d","Decoder","createDecoder","readVarInt","sign","peekVarString","pos","createUint8ArrayFromLen","createUint8ArrayViewFromArrayBuffer","buffer","byteOffset","createUint8ArrayFromArrayBuffer","toBase64Browser","toBase64Node","fromBase64Browser","fromBase64Node","toBase64","fromBase64","channels","LocalStoragePolyfill","room","BC","getChannel","subs","bc","sub","subscribe","unsubscribe","channel","unsubscribed","publish","data","origin","c","createMutex","token","g","getUnixTime","Observable","_f","args","observers","outdatedTimeout","Awareness","doc","now","remove","meta","clientid","removeAwarenessStates","state","clientID","currLocalMeta","clock","prevState","added","updated","filteredUpdated","removed","field","awareness","clients","curMeta","encodeAwarenessUpdate","applyAwarenessUpdate","update","timestamp","clientMeta","currClock","EventEmitter","event","fn","callbacks","callback","encodeQueryParams","val","MessageType","WebSocketStatus","IncomingMessage","type","string","HocuspocusProviderWebsocket","configuration","provider","connectPromise","abortableRetry","cancelAttempt","error","retryPromise","cancelFunc","ws","identifier","onMessageHandler","payload","onCloseHandler","onOpenHandler","onErrorHandler","handlers","_a","documentName","message","encodedParams","messageYjsSyncStep1","messageYjsSyncStep2","messageYjsUpdate","writeSyncStep1","sv","Y.encodeStateVector","writeSyncStep2","encodedStateVector","Y.encodeStateAsUpdate","readSyncStep1","readSyncStep2","transactionOrigin","Y.applyUpdate","writeUpdate","readUpdate","readSyncMessage","messageType","OutgoingMessage","MessageReceiver","emitSynced","emptyMessageLength","syncMessageType","applied","MessageSender","Message","webSocket","AuthenticationMessage","AwarenessMessage","awarenessUpdate","CloseMessage","QueryAwarenessMessage","StatelessMessage","SyncStepOneMessage","SyncStepTwoMessage","UpdateMessage","AwarenessError","HocuspocusProvider","_b","_c","Y.Doc","status","websocketProviderConfig","changedClients","broadcast","messageSender","client","reason","scope"],"mappings":"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","x_google_ignoreList":[0,1,2]}
@@ -1,2 +0,0 @@
1
- import{A as r}from"./chunk.4TUIT776-BvlNwMXD.js";const m=o=>o??r;export{m as o};
2
- //# sourceMappingURL=if-defined-O-hFrvt0.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"if-defined-O-hFrvt0.js","sources":["../../../node_modules/.pnpm/lit-html@3.3.2/node_modules/lit-html/directives/if-defined.js"],"sourcesContent":["import{nothing as t}from\"../lit-html.js\";\n/**\n * @license\n * Copyright 2018 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const o=o=>o??t;export{o as ifDefined};\n//# sourceMappingURL=if-defined.js.map\n"],"names":["o","t"],"mappings":"iDAKQ,MAACA,EAAE,GAAG,GAAGC","x_google_ignoreList":[0]}