@brass-build/client 0.1.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 (258) hide show
  1. package/AGENTS.md +255 -0
  2. package/CHANGELOG.md +15 -0
  3. package/LICENSE +21 -0
  4. package/README.md +836 -0
  5. package/dist/api-fetch.d.ts +16 -0
  6. package/dist/api-fetch.d.ts.map +1 -0
  7. package/dist/api-fetch.js +97 -0
  8. package/dist/api-fetch.js.map +1 -0
  9. package/dist/api-headers.d.ts +3 -0
  10. package/dist/api-headers.d.ts.map +1 -0
  11. package/dist/api-headers.js +25 -0
  12. package/dist/api-headers.js.map +1 -0
  13. package/dist/auth-flow.d.ts +23 -0
  14. package/dist/auth-flow.d.ts.map +1 -0
  15. package/dist/auth-flow.js +76 -0
  16. package/dist/auth-flow.js.map +1 -0
  17. package/dist/client.d.ts +106 -0
  18. package/dist/client.d.ts.map +1 -0
  19. package/dist/client.js +1278 -0
  20. package/dist/client.js.map +1 -0
  21. package/dist/doc-url-sync.d.ts +19 -0
  22. package/dist/doc-url-sync.d.ts.map +1 -0
  23. package/dist/doc-url-sync.js +181 -0
  24. package/dist/doc-url-sync.js.map +1 -0
  25. package/dist/document-branches.d.ts +32 -0
  26. package/dist/document-branches.d.ts.map +1 -0
  27. package/dist/document-branches.js +89 -0
  28. package/dist/document-branches.js.map +1 -0
  29. package/dist/document-checkpoints.d.ts +24 -0
  30. package/dist/document-checkpoints.d.ts.map +1 -0
  31. package/dist/document-checkpoints.js +115 -0
  32. package/dist/document-checkpoints.js.map +1 -0
  33. package/dist/document-commands.d.ts +93 -0
  34. package/dist/document-commands.d.ts.map +1 -0
  35. package/dist/document-commands.js +423 -0
  36. package/dist/document-commands.js.map +1 -0
  37. package/dist/document-signals.d.ts +53 -0
  38. package/dist/document-signals.d.ts.map +1 -0
  39. package/dist/document-signals.js +114 -0
  40. package/dist/document-signals.js.map +1 -0
  41. package/dist/document-streams.d.ts +22 -0
  42. package/dist/document-streams.d.ts.map +1 -0
  43. package/dist/document-streams.js +98 -0
  44. package/dist/document-streams.js.map +1 -0
  45. package/dist/document-thumbnail-capture.d.ts +27 -0
  46. package/dist/document-thumbnail-capture.d.ts.map +1 -0
  47. package/dist/document-thumbnail-capture.js +160 -0
  48. package/dist/document-thumbnail-capture.js.map +1 -0
  49. package/dist/documents-namespace.d.ts +134 -0
  50. package/dist/documents-namespace.d.ts.map +1 -0
  51. package/dist/documents-namespace.js +190 -0
  52. package/dist/documents-namespace.js.map +1 -0
  53. package/dist/documents.d.ts +146 -0
  54. package/dist/documents.d.ts.map +1 -0
  55. package/dist/documents.js +2045 -0
  56. package/dist/documents.js.map +1 -0
  57. package/dist/emitter.d.ts +15 -0
  58. package/dist/emitter.d.ts.map +1 -0
  59. package/dist/emitter.js +90 -0
  60. package/dist/emitter.js.map +1 -0
  61. package/dist/errors.d.ts +18 -0
  62. package/dist/errors.d.ts.map +1 -0
  63. package/dist/errors.js +22 -0
  64. package/dist/errors.js.map +1 -0
  65. package/dist/export-guest.d.ts +9 -0
  66. package/dist/export-guest.d.ts.map +1 -0
  67. package/dist/export-guest.js +225 -0
  68. package/dist/export-guest.js.map +1 -0
  69. package/dist/fetch-retry.d.ts +16 -0
  70. package/dist/fetch-retry.d.ts.map +1 -0
  71. package/dist/fetch-retry.js +90 -0
  72. package/dist/fetch-retry.js.map +1 -0
  73. package/dist/guest-link.d.ts +3 -0
  74. package/dist/guest-link.d.ts.map +1 -0
  75. package/dist/guest-link.js +13 -0
  76. package/dist/guest-link.js.map +1 -0
  77. package/dist/handles.d.ts +57 -0
  78. package/dist/handles.d.ts.map +1 -0
  79. package/dist/handles.js +1375 -0
  80. package/dist/handles.js.map +1 -0
  81. package/dist/hosted-runtime.d.ts +33 -0
  82. package/dist/hosted-runtime.d.ts.map +1 -0
  83. package/dist/hosted-runtime.js +99 -0
  84. package/dist/hosted-runtime.js.map +1 -0
  85. package/dist/hosted-ui.d.ts +84 -0
  86. package/dist/hosted-ui.d.ts.map +1 -0
  87. package/dist/hosted-ui.js +673 -0
  88. package/dist/hosted-ui.js.map +1 -0
  89. package/dist/importer.d.ts +22 -0
  90. package/dist/importer.d.ts.map +1 -0
  91. package/dist/importer.js +54 -0
  92. package/dist/importer.js.map +1 -0
  93. package/dist/index.d.ts +54 -0
  94. package/dist/index.d.ts.map +1 -0
  95. package/dist/index.js +132 -0
  96. package/dist/index.js.map +1 -0
  97. package/dist/init-keys.d.ts +3 -0
  98. package/dist/init-keys.d.ts.map +1 -0
  99. package/dist/init-keys.js +13 -0
  100. package/dist/init-keys.js.map +1 -0
  101. package/dist/internal.d.ts +6 -0
  102. package/dist/internal.d.ts.map +1 -0
  103. package/dist/internal.js +17 -0
  104. package/dist/internal.js.map +1 -0
  105. package/dist/jwt.d.ts +3 -0
  106. package/dist/jwt.d.ts.map +1 -0
  107. package/dist/jwt.js +22 -0
  108. package/dist/jwt.js.map +1 -0
  109. package/dist/launch-context.d.ts +4 -0
  110. package/dist/launch-context.d.ts.map +1 -0
  111. package/dist/launch-context.js +44 -0
  112. package/dist/launch-context.js.map +1 -0
  113. package/dist/login-hint.d.ts +4 -0
  114. package/dist/login-hint.d.ts.map +1 -0
  115. package/dist/login-hint.js +63 -0
  116. package/dist/login-hint.js.map +1 -0
  117. package/dist/mutate-batching.d.ts +14 -0
  118. package/dist/mutate-batching.d.ts.map +1 -0
  119. package/dist/mutate-batching.js +65 -0
  120. package/dist/mutate-batching.js.map +1 -0
  121. package/dist/open-document.d.ts +127 -0
  122. package/dist/open-document.d.ts.map +1 -0
  123. package/dist/open-document.js +2121 -0
  124. package/dist/open-document.js.map +1 -0
  125. package/dist/page-title.d.ts +3 -0
  126. package/dist/page-title.d.ts.map +1 -0
  127. package/dist/page-title.js +32 -0
  128. package/dist/page-title.js.map +1 -0
  129. package/dist/perf.d.ts +9 -0
  130. package/dist/perf.d.ts.map +1 -0
  131. package/dist/perf.js +39 -0
  132. package/dist/perf.js.map +1 -0
  133. package/dist/presence.d.ts +62 -0
  134. package/dist/presence.d.ts.map +1 -0
  135. package/dist/presence.js +331 -0
  136. package/dist/presence.js.map +1 -0
  137. package/dist/record-paging.d.ts +99 -0
  138. package/dist/record-paging.d.ts.map +1 -0
  139. package/dist/record-paging.js +220 -0
  140. package/dist/record-paging.js.map +1 -0
  141. package/dist/schema-conflict-dialog.d.ts +10 -0
  142. package/dist/schema-conflict-dialog.d.ts.map +1 -0
  143. package/dist/schema-conflict-dialog.js +164 -0
  144. package/dist/schema-conflict-dialog.js.map +1 -0
  145. package/dist/selection-persistence.d.ts +5 -0
  146. package/dist/selection-persistence.d.ts.map +1 -0
  147. package/dist/selection-persistence.js +90 -0
  148. package/dist/selection-persistence.js.map +1 -0
  149. package/dist/serializer.d.ts +3 -0
  150. package/dist/serializer.d.ts.map +1 -0
  151. package/dist/serializer.js +2 -0
  152. package/dist/serializer.js.map +1 -0
  153. package/dist/session-persistence.d.ts +4 -0
  154. package/dist/session-persistence.d.ts.map +1 -0
  155. package/dist/session-persistence.js +68 -0
  156. package/dist/session-persistence.js.map +1 -0
  157. package/dist/session-toolbar.d.ts +62 -0
  158. package/dist/session-toolbar.d.ts.map +1 -0
  159. package/dist/session-toolbar.js +1205 -0
  160. package/dist/session-toolbar.js.map +1 -0
  161. package/dist/session.d.ts +69 -0
  162. package/dist/session.d.ts.map +1 -0
  163. package/dist/session.js +926 -0
  164. package/dist/session.js.map +1 -0
  165. package/dist/tail-ops.d.ts +28 -0
  166. package/dist/tail-ops.d.ts.map +1 -0
  167. package/dist/tail-ops.js +46 -0
  168. package/dist/tail-ops.js.map +1 -0
  169. package/dist/topic-lifecycle.d.ts +41 -0
  170. package/dist/topic-lifecycle.d.ts.map +1 -0
  171. package/dist/topic-lifecycle.js +169 -0
  172. package/dist/topic-lifecycle.js.map +1 -0
  173. package/dist/types.d.ts +22 -0
  174. package/dist/types.d.ts.map +1 -0
  175. package/dist/types.js +2 -0
  176. package/dist/types.js.map +1 -0
  177. package/dist/undo.d.ts +18 -0
  178. package/dist/undo.d.ts.map +1 -0
  179. package/dist/undo.js +110 -0
  180. package/dist/undo.js.map +1 -0
  181. package/dist/version-bar.d.ts +22 -0
  182. package/dist/version-bar.d.ts.map +1 -0
  183. package/dist/version-bar.js +169 -0
  184. package/dist/version-bar.js.map +1 -0
  185. package/dist/version.d.ts +3 -0
  186. package/dist/version.d.ts.map +1 -0
  187. package/dist/version.js +8 -0
  188. package/dist/version.js.map +1 -0
  189. package/dist/vite.d.ts +15 -0
  190. package/dist/vite.d.ts.map +1 -0
  191. package/dist/vite.js +36 -0
  192. package/dist/vite.js.map +1 -0
  193. package/dist/ws-client.d.ts +53 -0
  194. package/dist/ws-client.d.ts.map +1 -0
  195. package/dist/ws-client.js +604 -0
  196. package/dist/ws-client.js.map +1 -0
  197. package/dist/ws-frame-limit.d.ts +21 -0
  198. package/dist/ws-frame-limit.d.ts.map +1 -0
  199. package/dist/ws-frame-limit.js +40 -0
  200. package/dist/ws-frame-limit.js.map +1 -0
  201. package/docs/app-manifest.md +65 -0
  202. package/docs/custom-chrome.md +147 -0
  203. package/docs/hosted-ui-advanced.md +77 -0
  204. package/docs/imported-documents.md +261 -0
  205. package/docs/presence.md +129 -0
  206. package/docs/schemas.md +135 -0
  207. package/docs/streams.md +248 -0
  208. package/package.json +60 -0
  209. package/scripts/prepare.mjs +50 -0
  210. package/src/api-fetch.ts +127 -0
  211. package/src/api-headers.ts +28 -0
  212. package/src/auth-flow.ts +125 -0
  213. package/src/client.ts +1457 -0
  214. package/src/doc-url-sync.ts +183 -0
  215. package/src/document-branches.ts +124 -0
  216. package/src/document-checkpoints.ts +135 -0
  217. package/src/document-commands.ts +651 -0
  218. package/src/document-signals.ts +234 -0
  219. package/src/document-streams.ts +132 -0
  220. package/src/document-thumbnail-capture.ts +191 -0
  221. package/src/documents-namespace.ts +516 -0
  222. package/src/documents.ts +2426 -0
  223. package/src/emitter.ts +129 -0
  224. package/src/errors.ts +45 -0
  225. package/src/export-guest.ts +282 -0
  226. package/src/fetch-retry.ts +119 -0
  227. package/src/guest-link.ts +14 -0
  228. package/src/handles.ts +1731 -0
  229. package/src/hosted-runtime.ts +109 -0
  230. package/src/hosted-ui.ts +1020 -0
  231. package/src/importer.ts +89 -0
  232. package/src/index.ts +267 -0
  233. package/src/init-keys.ts +15 -0
  234. package/src/internal.ts +23 -0
  235. package/src/jwt.ts +18 -0
  236. package/src/launch-context.ts +43 -0
  237. package/src/login-hint.ts +60 -0
  238. package/src/mutate-batching.ts +63 -0
  239. package/src/open-document.ts +2869 -0
  240. package/src/page-title.ts +33 -0
  241. package/src/perf.ts +46 -0
  242. package/src/presence.ts +471 -0
  243. package/src/record-paging.ts +270 -0
  244. package/src/schema-conflict-dialog.ts +176 -0
  245. package/src/selection-persistence.ts +98 -0
  246. package/src/serializer.ts +15 -0
  247. package/src/session-persistence.ts +69 -0
  248. package/src/session-toolbar.ts +1457 -0
  249. package/src/session.ts +1262 -0
  250. package/src/tail-ops.ts +63 -0
  251. package/src/topic-lifecycle.ts +217 -0
  252. package/src/types.ts +75 -0
  253. package/src/undo.ts +125 -0
  254. package/src/version-bar.ts +221 -0
  255. package/src/version.ts +8 -0
  256. package/src/vite.ts +49 -0
  257. package/src/ws-client.ts +678 -0
  258. package/src/ws-frame-limit.ts +52 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,EAAE;AACF,8EAA8E;AAC9E,2EAA2E;AAC3E,oEAAoE;AACpE,6EAA6E;AAC7E,0EAA0E;AAC1E,+EAA+E;AA2B/E,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AA6MzD,8EAA8E;AAC9E,4EAA4E;AAC5E,wEAAwE;AACxE,4EAA4E;AAC5E,MAAM,cAAc,GAAG;IACrB,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,SAAS;CACP,CAAC;AAEX,SAAS,OAAO,CAAC,GAAY;IAC3B,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED,sEAAsE;AACtE,0EAA0E;AAC1E,8EAA8E;AAC9E,MAAM,mBAAmB,GAAG,mCAAmC,CAAC;AAEhE,4EAA4E;AAC5E,wEAAwE;AACxE,8EAA8E;AAC9E,8EAA8E;AAC9E,wEAAwE;AACxE,wBAAwB;AACxB,MAAM,qBAAqB,GAAG,sCAAsC,CAAC;AAErE,uEAAuE;AACvE,4EAA4E;AAC5E,6EAA6E;AAC7E,4EAA4E;AAC5E,uEAAuE;AACvE,yEAAyE;AACzE,SAAS,cAAc,CAAC,GAAY;IAClC,IAAI,GAAG,YAAY,UAAU,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClF,OAAO,GAAG,CAAC;IACb,CAAC;IACD,MAAM,MAAM,GAAG,GAAG,YAAY,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/D,OAAO,IAAI,UAAU,CAAC,mBAAmB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AACzD,CAAC;AAQD,MAAM,UAAU,qBAAqB,CACnC,IAAyB;IAEzB,IAAI,QAAQ,GAAoB,IAAI,CAAC;IACrC,IAAI,YAAY,GAAkB,IAAI,CAAC;IACvC,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,sEAAsE;IACtE,kEAAkE;IAClE,wDAAwD;IACxD,IAAI,cAAc,GAAkB,IAAI,CAAC;IACzC,IAAI,eAAe,GAAkB,IAAI,CAAC;IAC1C,mEAAmE;IACnE,+CAA+C;IAC/C,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,wEAAwE;IACxE,4EAA4E;IAC5E,+DAA+D;IAC/D,IAAI,SAAS,GAAsB,IAAI,CAAC;IACxC,iEAAiE;IACjE,oDAAoD;IACpD,IAAI,YAAY,GAAoC,IAAI,CAAC;IACzD,6EAA6E;IAC7E,yEAAyE;IACzE,6BAA6B;IAC7B,IAAI,aAAa,GAAkB,IAAI,CAAC;IACxC,0EAA0E;IAC1E,qEAAqE;IACrE,MAAM,gBAAgB,GAGjB,EAAE,CAAC;IAER,MAAM,SAAS,GAAG,IAAI,GAAG,EAAsC,CAAC;IAChE,mDAAmD;IACnD,MAAM,aAAa,GAAG,IAAI,GAAG,EAAmB,CAAC;IACjD,IAAI,MAAM,GAAwB,IAAI,CAAC;IACvC,mEAAmE;IACnE,oEAAoE;IACpE,IAAI,uBAAuB,GAAwB,IAAI,CAAC;IACxD,IAAI,sBAAsB,GAA2B,IAAI,CAAC;IAC1D,4EAA4E;IAC5E,uEAAuE;IACvE,sEAAsE;IACtE,qEAAqE;IACrE,uBAAuB;IACvB,IAAI,qBAAqB,GAAkB,IAAI,CAAC;IAEhD,mEAAmE;IACnE,IAAI,QAAQ,GAAwB,IAAI,CAAC;IACzC,IAAI,SAAS,GAAwB,IAAI,CAAC;IAE1C,0EAA0E;IAC1E,4EAA4E;IAC5E,6EAA6E;IAC7E,0EAA0E;IAC1E,4EAA4E;IAC5E,4EAA4E;IAC5E,0EAA0E;IAC1E,oBAAoB;IACpB,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IAEvC,SAAS,MAAM;QACb,mEAAmE;QACnE,2DAA2D;QAC3D,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QACtD,uEAAuE;QACvE,sEAAsE;QACtE,mEAAmE;QACnE,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,EAAE,IAAI,IAAI,CAAC;QAChD,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO;YAAE,OAAO,YAAY,CAAC;QACxD,IAAI,OAAO;YAAE,OAAO,SAAS,CAAC;QAC9B,IAAI,QAAQ;YAAE,OAAO,OAAO,CAAC;QAC7B,IAAI,SAAS;YAAE,OAAO,OAAO,CAAC;QAC9B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,SAAS,UAAU,CAAC,CAAU;QAC5B,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QACvE,IAAI,CAAC,CAAC,QAAQ;YAAE,CAAC,IAAI,IAAI,CAAC;QAC1B,IAAI,CAAC,CAAC,QAAQ;YAAE,CAAC,IAAI,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;QAClE,OAAO,CAAC,CAAC;IACX,CAAC;IAED,SAAS,SAAS;QAChB,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrD,mEAAmE;QACnE,8DAA8D;QAC9D,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,cAAc,IAAI,EAAE,IAAI,eAAe,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/E,2EAA2E;QAC3E,yEAAyE;QACzE,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,IAAI,EAAE,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,OAAO,GAAG,MAAM,EAAE,IAAI,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,YAAY,IAAI,EAAE,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;IAC1F,CAAC;IAED,SAAS,IAAI;QACX,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;QACxB,IAAI,GAAG,KAAK,aAAa;YAAE,OAAO;QAClC,aAAa,GAAG,GAAG,CAAC;QACpB,0EAA0E;QAC1E,0EAA0E;QAC1E,qBAAqB;QACrB,eAAe,EAAE,CAAC;QAClB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC;gBACH,QAAQ,CAAC,OAAO,CAAC,CAAC;YACpB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,kDAAkD;gBAClD,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,GAAG,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;IACH,CAAC;IAED,SAAS,eAAe;QACtB,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAC1C,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC;QACzB,IAAI,OAAO,KAAK,OAAO,IAAI,QAAQ,EAAE,CAAC;YACpC,MAAM,GAAG,GAAG,QAA0B,CAAC;YACvC,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;YACpE,KAAK,MAAM,EAAE,OAAO,EAAE,IAAI,OAAO;gBAAE,OAAO,CAAC,GAAG,CAAC,CAAC;QAClD,CAAC;aAAM,IAAI,OAAO,KAAK,YAAY,EAAE,CAAC;YACpC,MAAM,KAAK,GAAG,IAAI,KAAK,CACrB,kEAAkE,CACnE,CAAC;YACF,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;YACpE,KAAK,MAAM,EAAE,MAAM,EAAE,IAAI,OAAO;gBAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QAClD,CAAC;aAAM,IAAI,OAAO,KAAK,OAAO,IAAI,SAAS,EAAE,CAAC;YAC5C,uEAAuE;YACvE,uEAAuE;YACvE,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;YACpE,KAAK,MAAM,EAAE,MAAM,EAAE,IAAI,OAAO;gBAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QACtD,CAAC;QACD,wEAAwE;QACxE,0EAA0E;QAC1E,uDAAuD;QACvD,yEAAyE;IAC3E,CAAC;IAED,2EAA2E;IAC3E,6EAA6E;IAC7E,qEAAqE;IACrE,mDAAmD;IACnD,SAAS,sBAAsB,CAAC,OAAe;QAC7C,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAC1C,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;QACjC,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACpE,KAAK,MAAM,EAAE,MAAM,EAAE,IAAI,OAAO;YAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IAClD,CAAC;IAED,mEAAmE;IACnE,4EAA4E;IAC5E,2DAA2D;IAC3D,SAAS,kBAAkB,CACzB,EAAU,EACV,KAAa,EACb,KAAmB,EACnB,OAAuB,EACvB,SAAwB,EACxB,IAAgC;QAEhC,OAAO,eAAe,CACpB,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,EAC9C;YACE,OAAO,EAAE,aAAa;YACtB,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAChD,MAAM,EAAE,IAAI;SACb,CACF,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,kBAAkB,CAC/B,KAAK,EACL,cAAc,CAAC,GAAG,EAClB,SAAS,EACT,MAAM,EACN,IAAI,CAAC,UAAU,EACf,KAAK,IAAI,EAAE;QACT,MAAM,MAAM,EAAE,CAAC;IACjB,CAAC,CACF,CAAC;IACF,MAAM,OAAO,GAAG,kBAAkB,CAChC,MAAM,EACN,cAAc,CAAC,IAAI,EACnB,SAAS,EACT,MAAM,EACN,IAAI,CAAC,UAAU,EACf,KAAK,IAAI,EAAE;QACT,MAAM,IAAI,EAAE,CAAC;IACf,CAAC,CACF,CAAC;IAEF,MAAM,cAAc,GAAuB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE7D,oEAAoE;IACpE,yEAAyE;IACzE,uCAAuC;IACvC,SAAS,WAAW;QAClB,MAAM,IAAI,GAAc,CAAC,GAAG,cAAc,CAAC,CAAC;QAC5C,IAAI,QAAQ,EAAE,CAAC;YACb,KAAK,MAAM,GAAG,IAAI,QAAQ,CAAC,QAAQ;gBAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,4EAA4E;IAC5E,4EAA4E;IAC5E,wEAAwE;IACxE,+DAA+D;IAC/D,SAAS,WAAW,CAClB,IAAqB,EACrB,IAAmB,EACnB,SAAiB,MAAM;QAEvB,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,EAAE,CAAC;YACX,QAAQ,GAAG,IAAI,CAAC;QAClB,CAAC;QACD,IAAI,SAAS,EAAE,CAAC;YACd,SAAS,EAAE,CAAC;YACZ,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC;QACD,wEAAwE;QACxE,uDAAuD;QACvD,IAAI,uBAAuB,EAAE,CAAC;YAC5B,uBAAuB,EAAE,CAAC;YAC1B,uBAAuB,GAAG,IAAI,CAAC;QACjC,CAAC;QACD,MAAM,QAAQ,GAAG,QAAQ,CAAC;QAC1B,QAAQ,GAAG,IAAI,CAAC;QAChB,YAAY,GAAG,IAAI,CAAC;QACpB,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAClB,qBAAqB,GAAG,IAAI,CAAC;QAC/B,CAAC;QACD,IAAI,QAAQ,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YAClC,IAAI,CAAC;gBACH,QAAQ,CAAC,KAAK,EAAE,CAAC;YACnB,CAAC;YAAC,MAAM,CAAC;gBACP,6DAA6D;YAC/D,CAAC;QACH,CAAC;QACD,IAAI,IAAI,EAAE,CAAC;YACT,mEAAmE;YACnE,oEAAoE;YACpE,wEAAwE;YACxE,oEAAoE;YACpE,8BAA8B;YAC9B,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE;gBAClC,mEAAmE;gBACnE,oEAAoE;gBACpE,uDAAuD;gBACvD,MAAM,IAAI,GAAI,KAAuC,EAAE,IAAI,CAAC;gBAC5D,IAAI,IAAI,KAAK,UAAU;oBAAE,gBAAgB,CAAC,SAAS,CAAC,CAAC;gBACrD,kEAAkE;gBAClE,kEAAkE;gBAClE,oEAAoE;gBACpE,4DAA4D;gBAC5D,iEAAiE;gBACjE,8CAA8C;gBAC9C,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI;oBAAE,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC;gBACjD,eAAe,EAAE,CAAC;gBAClB,IAAI,EAAE,CAAC;YACT,CAAC,CAAC,CAAC;YACH,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE;gBACjC,IAAI,QAAQ,KAAK,IAAI;oBAAE,OAAO;gBAC9B,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;gBACnB,IAAI,EAAE,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;oBAClC,kEAAkE;oBAClE,+CAA+C;oBAC/C,KAAK,EAAE,CAAC;oBACR,OAAO;gBACT,CAAC;gBACD,IAAI,MAAM,KAAK,OAAO,IAAI,EAAE,EAAE,CAAC;oBAC7B,4DAA4D;oBAC5D,mEAAmE;oBACnE,sEAAsE;oBACtE,qEAAqE;oBACrE,oEAAoE;oBACpE,sEAAsE;oBACtE,sEAAsE;oBACtE,qEAAqE;oBACrE,uBAAuB;oBACvB,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;oBAC/B,QAAQ,GAAG,IAAI,CAAC;oBAChB,YAAY,GAAG,IAAI,CAAC;oBACpB,KAAK,QAAQ,CACX,CAAC,kBAAkB,EAAE,EAAE,CACrB,IAAI,CAAC,gBAAgB,CACnB,EAAE,EACF;wBACE,GAAG,YAAY,EAAE;wBACjB,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC7B,kBAAkB;qBACnB,EACD,MAAM,CACP,EACH,IAAI,EACJ,MAAM,EACN,MAAM,CACP,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,cAAc,EAAE,CAAC,CAAC;oBAChC,OAAO;gBACT,CAAC;gBACD,qEAAqE;gBACrE,qEAAqE;gBACrE,uEAAuE;gBACvE,cAAc,EAAE,CAAC;YACnB,CAAC,CAAC,CAAC;YACH,qEAAqE;YACrE,oCAAoC;YACpC,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBACpB,uBAAuB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YACnD,CAAC;YACD,mEAAmE;YACnE,IAAI,IAAI,KAAK,IAAI;gBAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;;gBAClC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC;QAChC,CAAC;QACD,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACzB,eAAe,EAAE,CAAC;QAClB,IAAI,EAAE,CAAC;IACT,CAAC;IAED,0EAA0E;IAC1E,6EAA6E;IAC7E,0EAA0E;IAC1E,4EAA4E;IAC5E,6EAA6E;IAC7E,0EAA0E;IAC1E,4CAA4C;IAC5C,SAAS,SAAS,CAAC,GAAa;QAC9B,MAAM,SAAS,GAAG,qBAAqB,CAAC;QACxC,IAAI,SAAS,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QACpC,MAAM,eAAe,GAAG,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAC/C,IAAI,eAAe,KAAK,IAAI,IAAI,SAAS,KAAK,eAAe;YAAE,OAAO,IAAI,CAAC;QAC3E,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,4EAA4E;IAC5E,wEAAwE;IACxE,YAAY;IACZ,SAAS,gBAAgB,CAAC,MAAc;QACtC,IAAI,MAAM,KAAK,MAAM;YAAE,OAAO;QAC9B,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,OAAO;QACzB,IAAI,CAAC,iBAAiB,CACpB,EAAE,KAAK,EAAE,QAAQ,CAAC,EAAE,EAAE,QAAQ,EAAE,SAAS,CAAC,QAAQ,CAAC,EAAE,EACrD,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,EAAE,CAC5B,CAAC;IACJ,CAAC;IAED,0EAA0E;IAC1E,wEAAwE;IACxE,gDAAgD;IAChD,SAAS,gBAAgB;QACvB,OAAO,QAAQ,EAAE,kBAAkB,EAAE,IAAI,IAAI,CAAC;IAChD,CAAC;IAED,4EAA4E;IAC5E,yEAAyE;IACzE,iEAAiE;IACjE,qEAAqE;IACrE,sEAAsE;IACtE,wDAAwD;IACxD,SAAS,eAAe;QACtB,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YACxB,OAAO;QACT,CAAC;QACD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,YAAY,IAAI,EAAE,CAAC;QACjD,MAAM,MAAM,GAAG,gBAAgB,EAAE,CAAC;QAClC,IAAI,CAAC,YAAY,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACnE,CAAC;IAED,yEAAyE;IACzE,wEAAwE;IACxE,aAAa;IACb,KAAK,UAAU,sBAAsB,CACnC,GAAa,EACb,SAAwB;QAExB,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO;QACpB,IAAI,SAAS,KAAK,IAAI;YAAE,OAAO;QAC/B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChD,IAAI,QAAQ,KAAK,GAAG;gBAAE,OAAO,CAAC,mCAAmC;YACjE,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC1B,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC;YAC3B,eAAe,EAAE,CAAC;YAClB,IAAI,EAAE,CAAC;QACT,CAAC;QAAC,MAAM,CAAC;YACP,0CAA0C;QAC5C,CAAC;IACH,CAAC;IAED,0EAA0E;IAC1E,0EAA0E;IAC1E,kEAAkE;IAClE,KAAK,UAAU,QAAQ,CACrB,IAE4B,EAC5B,SAAwB,EACxB,SAAiB,MAAM,EACvB,kBAAiC,IAAI;IACrC,sEAAsE;IACtE,yEAAyE;IACzE,oEAAoE;IACpE,qEAAqE;IACrE,qBAAqB;IACrB,gBAAgB,GAAG,IAAI;QAEvB,MAAM,UAAU,GAAG,EAAE,cAAc,CAAC;QACpC,OAAO,GAAG,IAAI,CAAC;QACf,cAAc,GAAG,IAAI,CAAC;QACtB,eAAe,GAAG,IAAI,CAAC;QACvB,iEAAiE;QACjE,SAAS,GAAG,IAAI,CAAC;QACjB,wEAAwE;QACxE,qEAAqE;QACrE,qEAAqE;QACrE,yEAAyE;QACzE,yEAAyE;QACzE,8DAA8D;QAC9D,MAAM,gBAAgB,GAAG,QAAQ,CAAC;QAClC,MAAM,YAAY,GAAG,YAAY,CAAC;QAClC,MAAM,uBAAuB,GAAG,qBAAqB,CAAC;QACtD,QAAQ,GAAG,IAAI,CAAC;QAChB,YAAY,GAAG,IAAI,CAAC;QACpB,IAAI,EAAE,CAAC;QACP,2EAA2E;QAC3E,wEAAwE;QACxE,MAAM,kBAAkB,GAAG,CAAC,MAAc,EAAE,KAAoB,EAAQ,EAAE;YACxE,IAAI,UAAU,KAAK,cAAc;gBAAE,OAAO;YAC1C,MAAM,QAAQ,GAAG,KAAK,KAAK,IAAI,IAAI,KAAK,GAAG,CAAC,IAAI,MAAM,IAAI,KAAK,CAAC;YAChE,IAAI,QAAQ,EAAE,CAAC;gBACb,qEAAqE;gBACrE,sEAAsE;gBACtE,eAAe,GAAG,IAAI,CAAC;gBACvB,cAAc,GAAG,YAAY,CAAC;YAChC,CAAC;iBAAM,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBACvC,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC;gBAC9C,cAAc,GAAG,kBAAkB,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,GAAG,CAAC,GAAG,CAAC;YAC1E,CAAC;iBAAM,CAAC;gBACN,eAAe,GAAG,IAAI,CAAC;gBACvB,cAAc,GAAG,kBAAkB,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;YAC1E,CAAC;YACD,IAAI,EAAE,CAAC;QACT,CAAC,CAAC;QACF,IAAI,GAAmB,CAAC;QACxB,IAAI,CAAC;YACH,GAAG,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,UAAU,KAAK,cAAc,EAAE,CAAC;gBAClC,OAAO,GAAG,KAAK,CAAC;gBAChB,cAAc,GAAG,IAAI,CAAC;gBACtB,eAAe,GAAG,IAAI,CAAC;gBACvB,+DAA+D;gBAC/D,mEAAmE;gBACnE,uBAAuB;gBACvB,qBAAqB,GAAG,uBAAuB,CAAC;gBAChD,uEAAuE;gBACvE,qEAAqE;gBACrE,oEAAoE;gBACpE,uEAAuE;gBACvE,sEAAsE;gBACtE,IAAI,gBAAgB,IAAI,gBAAgB,KAAK,IAAI,EAAE,CAAC;oBAClD,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;oBAChC,iEAAiE;oBACjE,iEAAiE;oBACjE,kEAAkE;oBAClE,iEAAiE;oBACjE,WAAW,CAAC,gBAAgB,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;gBACtD,CAAC;qBAAM,CAAC;oBACN,WAAW,CAAC,gBAAgB,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;gBACzD,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,iEAAiE;gBACjE,uEAAuE;gBACvE,YAAY,CAAC,gBAAgB,CAAC,CAAC;YACjC,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,IAAI,UAAU,KAAK,cAAc,EAAE,CAAC;YAClC,uEAAuE;YACvE,uEAAuE;YACvE,YAAY,CAAC,GAAG,CAAC,CAAC;YAClB,YAAY,CAAC,gBAAgB,CAAC,CAAC;YAC/B,OAAO,GAAG,CAAC;QACb,CAAC;QACD,yEAAyE;QACzE,oEAAoE;QACpE,kEAAkE;QAClE,yEAAyE;QACzE,0EAA0E;QAC1E,qEAAqE;QACrE,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC;QACxB,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;YAC7D,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC;YAC9B,eAAe,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC;YACxC,IAAI,EAAE,CAAC;YACP,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;gBAClC,IAAI,SAAS,GAAwB,IAAI,CAAC;gBAC1C,IAAI,OAAO,GAAwB,IAAI,CAAC;gBACxC,MAAM,MAAM,GAAG,GAAS,EAAE;oBACxB,SAAS,EAAE,EAAE,CAAC;oBACd,OAAO,EAAE,EAAE,CAAC;oBACZ,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC;gBACF,SAAS,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE;oBAC7B,IAAI,UAAU,KAAK,cAAc,EAAE,CAAC;wBAClC,MAAM,EAAE,CAAC;wBACT,OAAO;oBACT,CAAC;oBACD,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;wBACd,cAAc,GAAG,CAAC,CAAC,OAAO,CAAC;wBAC3B,eAAe,GAAG,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC;wBACrC,IAAI,EAAE,CAAC;wBACP,OAAO;oBACT,CAAC;oBACD,MAAM,EAAE,CAAC;gBACX,CAAC,CAAC,CAAC;gBACH,qEAAqE;gBACrE,0CAA0C;gBAC1C,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;YACvC,CAAC,CAAC,CAAC;YACH,IAAI,UAAU,KAAK,cAAc,EAAE,CAAC;gBAClC,YAAY,CAAC,GAAG,CAAC,CAAC;gBAClB,YAAY,CAAC,gBAAgB,CAAC,CAAC;gBAC/B,OAAO,GAAG,CAAC;YACb,CAAC;QACH,CAAC;QACD,OAAO,GAAG,KAAK,CAAC;QAChB,cAAc,GAAG,IAAI,CAAC;QACtB,eAAe,GAAG,IAAI,CAAC;QACvB,qBAAqB,GAAG,eAAe,CAAC;QACxC,WAAW,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QACpC,2EAA2E;QAC3E,kDAAkD;QAClD,YAAY,CAAC,gBAAgB,CAAC,CAAC;QAC/B,KAAK,sBAAsB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAC5C,OAAO,GAAG,CAAC;IACb,CAAC;IAED,yEAAyE;IACzE,qEAAqE;IACrE,YAAY;IACZ,SAAS,YAAY,CAAC,MAAuB;QAC3C,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,IAAI,CAAC;YACH,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC;QAAC,MAAM,CAAC;YACP,YAAY;QACd,CAAC;IACH,CAAC;IAED,KAAK,UAAU,OAAO;QACpB,mEAAmE;QACnE,uEAAuE;QACvE,qEAAqE;QACrE,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;QAC3C,IAAI,UAAU,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC1C,IAAI,QAAQ;gBAAE,OAAO,QAAQ,CAAC;YAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC;YAC1C,IAAI,CAAC;gBACH,OAAO,MAAM,QAAQ,CACnB,CAAC,kBAAkB,EAAE,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,kBAAkB,EAAE,CAAC,EACrE,IAAI,EACJ,MAAM,EACN,IAAI,CACL,CAAC;YACJ,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;QACpD,oEAAoE;QACpE,yEAAyE;QACzE,uEAAuE;QACvE,uEAAuE;QACvE,MAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACtC,MAAM,GAAG,GAAG,IAAI,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC5C,IAAI,GAAG,EAAE,CAAC;YACR,IAAI,CAAC;gBACH,mEAAmE;gBACnE,oDAAoD;gBACpD,OAAO,MAAM,QAAQ,CACnB,CAAC,kBAAkB,EAAE,EAAE,CACrB,IAAI,CAAC,gBAAgB,CACnB,GAAG,CAAC,KAAK,EACT;oBACE,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACjD,kBAAkB;iBACnB,EACD,MAAM,CACP,EACH,IAAI,EACJ,SAAS,EACT,GAAG,CAAC,QAAQ,CACb,CAAC;YACJ,CAAC;YAAC,MAAM,CAAC;gBACP,+DAA+D;gBAC/D,qEAAqE;gBACrE,sEAAsE;gBACtE,+DAA+D;gBAC/D,sEAAsE;gBACtE,wCAAwC;gBACxC,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QACzC,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC;gBACH,OAAO,MAAM,QAAQ,CACnB,CAAC,kBAAkB,EAAE,EAAE,CACrB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,kBAAkB,EAAE,EAAE,MAAM,CAAC,EACpE,IAAI,CAAC,IAAI,EACT,SAAS,EACT,IAAI;gBACJ,mEAAmE;gBACnE,iEAAiE;gBACjE,SAAS;gBACT,KAAK,CACN,CAAC;YACJ,CAAC;YAAC,MAAM,CAAC;gBACP,mDAAmD;YACrD,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,SAAS,KAAK;QACZ,IAAI,YAAY;YAAE,OAAO,YAAY,CAAC;QACtC,YAAY,GAAG,OAAO,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;YACpC,YAAY,GAAG,IAAI,CAAC;YACpB,gEAAgE;YAChE,mEAAmE;YACnE,oEAAoE;YACpE,gDAAgD;YAChD,IAAI,EAAE,CAAC;QACT,CAAC,CAAC,CAAC;QACH,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,SAAS,IAAI,CACX,KAAa,EACb,OAA4B;QAE5B,OAAO,QAAQ,CACb,CAAC,kBAAkB,EAAE,EAAE,CACrB,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE;YAC3B,GAAG,YAAY,CAAC,OAAO,CAAC;YACxB,kBAAkB;SACnB,CAAC,EACJ,IAAI,EACJ,MAAM,EACN,OAAO,EAAE,MAAM,IAAI,IAAI,CACxB,CAAC;IACJ,CAAC;IAED,KAAK,UAAU,MAAM,CACnB,OAA+B;QAE/B,oEAAoE;QACpE,yEAAyE;QACzE,0EAA0E;QAC1E,sEAAsE;QACtE,wBAAwB;QACxB,wEAAwE;QACxE,yEAAyE;QACzE,+DAA+D;QAC/D,MAAM,IAAI,GAAuB,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,UAAU,EAAE,CAAC;QACvE,IAAI,OAAO,EAAE,YAAY,KAAK,SAAS;YAAE,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QAClF,IAAI,QAAQ,EAAE,EAAE;YAAE,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,EAAE,CAAC;QAE/C,oEAAoE;QACpE,qEAAqE;QACrE,yEAAyE;QACzE,uEAAuE;QACvE,mDAAmD;QACnD,IAAI,IAAI,GAAG,IAAI,CAAC;QAChB,IAAI,SAAS,GAAG,OAAO,EAAE,IAAI,IAAI,IAAI,CAAC;QACtC,IAAI,MAA4B,CAAC;QACjC,SAAS,CAAC;YACR,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAC3C,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS;gBAAE,MAAM;YACrC,IAAI,MAAM,CAAC,IAAI,KAAK,oBAAoB,EAAE,CAAC;gBACzC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBAClD,IAAI,CAAC,QAAQ;oBAAE,OAAO,IAAI,CAAC;gBAC3B,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,WAAW,EAAE,EAAE,eAAe,EAAE,QAAQ,CAAC,eAAe,EAAE,EAAE,CAAC;gBAC/E,SAAS;YACX,CAAC;YACD,oBAAoB;YACpB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,uBAAuB,CACpD,OAAO,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CACjE,CAAC;YACF,IAAI,WAAW,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC;YACtC,qEAAqE;YACrE,8BAA8B;YAC9B,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC;YACxD,SAAS,GAAG,WAAW,CAAC,IAAI,IAAI,SAAS,CAAC;QAC5C,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC3B,MAAM,WAAW,GAAG,OAAO,EAAE,eAAe;YAC1C,CAAC,CAAC,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE;YAC9C,CAAC,CAAC,SAAS,CAAC;QACd,uEAAuE;QACvE,0EAA0E;QAC1E,yEAAyE;QACzE,qCAAqC;QACrC,OAAO,QAAQ,CACb,CAAC,kBAAkB,EAAE,EAAE,CACrB,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE;YAC3B,GAAG,YAAY,CAAC,WAAW,CAAC;YAC5B,kBAAkB;SACnB,CAAC,EACJ,SAAS,CACV,CAAC;IACJ,CAAC;IAED,KAAK,UAAU,IAAI;QACjB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC3C,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACzB,MAAM,IAAI,GAAG;YACX,GAAG,YAAY,EAAE;YACjB,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1D,CAAC;QACF,OAAO,QAAQ,CACb,CAAC,kBAAkB,EAAE,EAAE,CACrB,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,GAAG,IAAI,EAAE,kBAAkB,EAAE,CAAC,EACvE,MAAM,CAAC,IAAI,EACX,MAAM,EACN,MAAM,CAAC,SAAS,IAAI,IAAI,CACzB,CAAC;IACJ,CAAC;IAED,0EAA0E;IAC1E,6EAA6E;IAC7E,0EAA0E;IAC1E,YAAY;IACZ,SAAS,YAAY,CAEnB,OAAW;QACX,MAAM,WAAW,GAAG,OAAO,CAAC,uBAAuB,CAAC;QACpD,IAAI,CAAC,WAAW;YAAE,OAAO,OAAY,CAAC;QACtC,MAAM,aAAa,GAAG,OAAO,EAAE,eAAe,CAAC;QAC/C,MAAM,aAAa,GAAoB;YACrC,GAAG,WAAW;YACd,GAAG,aAAa;SACjB,CAAC;QACF,qEAAqE;QACrE,0DAA0D;QAC1D,mDAAmD;QACnD,MAAM,UAAU,GAAG,aAAa,EAAE,IAAI;YACpC,CAAC,CAAC,EAAE,GAAG,WAAW,CAAC,IAAI,EAAE,GAAG,aAAa,CAAC,IAAI,EAAE;YAChD,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC;QACrB,IAAI,UAAU;YAAE,aAAa,CAAC,IAAI,GAAG,UAAU,CAAC;QAChD,OAAO;YACL,GAAG,OAAO;YACV,eAAe,EAAE,aAAa;SAC1B,CAAC;IACT,CAAC;IAED,SAAS,KAAK;QACZ,sEAAsE;QACtE,2BAA2B;QAC3B,cAAc,EAAE,CAAC;QACjB,OAAO,GAAG,KAAK,CAAC;QAChB,0EAA0E;QAC1E,4DAA4D;QAC5D,SAAS,GAAG,IAAI,CAAC;QACjB,2EAA2E;QAC3E,mEAAmE;QACnE,sBAAsB,CACpB,8DAA8D,CAC/D,CAAC;QACF,wEAAwE;QACxE,SAAS;QACT,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IACrC,CAAC;IAED,0EAA0E;IAC1E,4EAA4E;IAC5E,6EAA6E;IAC7E,6EAA6E;IAC7E,6EAA6E;IAC7E,SAAS,cAAc;QACrB,cAAc,EAAE,CAAC;QACjB,OAAO,GAAG,KAAK,CAAC;QAChB,SAAS,GAAG,IAAI,UAAU,CAAC,qBAAqB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACnE,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAClC,CAAC;IAED,6EAA6E;IAC7E,0EAA0E;IAC1E,4EAA4E;IAC5E,2CAA2C;IAC3C,SAAS,cAAc;QACrB,IAAI,IAAI,CAAC,UAAU,EAAE,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAAE,OAAO;QAClE,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACpC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,yEAAyE;YACzE,yEAAyE;YACzE,0EAA0E;YAC1E,0EAA0E;YAC1E,iEAAiE;YACjE,IAAI,QAAQ,IAAI,SAAS,EAAE,CAAC;gBAC1B,cAAc,EAAE,CAAC;gBACjB,OAAO,GAAG,KAAK,CAAC;gBAChB,SAAS,GAAG,IAAI,CAAC;gBACjB,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;YAClC,CAAC;YACD,OAAO;QACT,CAAC;QACD,MAAM,OAAO,GAAG,QAAQ,CAAC;QACzB,IACE,OAAO;YACP,OAAO,CAAC,EAAE,KAAK,GAAG,CAAC,KAAK;YACxB,SAAS,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,QAAQ,EACnC,CAAC;YACD,OAAO,CAAC,iCAAiC;QAC3C,CAAC;QACD,KAAK,QAAQ,CACX,CAAC,kBAAkB,EAAE,EAAE,CACrB,IAAI,CAAC,gBAAgB,CACnB,GAAG,CAAC,KAAK,EACT;YACE,GAAG,YAAY,EAAE;YACjB,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjD,kBAAkB;SACnB,EACD,MAAM,CACP,EACH,IAAI,EACJ,MAAM,EACN,GAAG,CAAC,QAAQ,CACb,CAAC,KAAK,CAAC,GAAG,EAAE;YACX,uEAAuE;YACvE,sEAAsE;YACtE,6DAA6D;QAC/D,CAAC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;IAEnC,0EAA0E;IAC1E,yEAAyE;IACzE,wEAAwE;IACxE,0EAA0E;IAC1E,wEAAwE;IACxE,yEAAyE;IACzE,qEAAqE;IACrE,SAAS,kBAAkB;QACzB,cAAc,EAAE,CAAC;QACjB,OAAO,GAAG,KAAK,CAAC;QAChB,SAAS,GAAG,IAAI,CAAC;QACjB,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAClC,CAAC;IAED,sEAAsE;IACtE,iEAAiE;IACjE,sEAAsE;IACtE,wEAAwE;IACxE,IAAI,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC7B,IAAI,QAAQ,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC;YAChD,IAAI,CAAC,QAAQ;gBAAE,KAAK,KAAK,EAAE,CAAC;;gBACvB,IAAI,EAAE,CAAC;QACd,CAAC;aAAM,CAAC;YACN,kBAAkB,EAAE,CAAC;QACvB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAoB;QAC/B,IAAI,QAAQ;YACV,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,IAAI,YAAY;YACd,OAAO,YAAY,CAAC;QACtB,CAAC;QACD,IAAI,MAAM;YACR,OAAO,MAAM,EAAE,CAAC;QAClB,CAAC;QACD,IAAI,KAAK;YACP,OAAO,MAAM,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;QACjD,CAAC;QACD,IAAI,cAAc;YAChB,OAAO,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC;QACzC,CAAC;QACD,IAAI,eAAe;YACjB,OAAO,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC;QAC1C,CAAC;QACD,IAAI,QAAQ;YACV,OAAO,WAAW,EAAE,CAAC;QACvB,CAAC;QACD,IAAI,QAAQ;YACV,OAAO,QAAQ,EAAE,QAAQ,IAAI,IAAI,CAAC;QACpC,CAAC;QACD,SAAS,CAAC,QAAQ;YAChB,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACxB,IAAI,CAAC;gBACH,QAAQ,CAAC,OAAO,CAAC,CAAC;YACpB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,GAAG,CAAC,CAAC;YACxD,CAAC;YACD,OAAO,GAAG,EAAE;gBACV,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC7B,CAAC,CAAC;QACJ,CAAC;QACD,KAAK;QACL,IAAI;QACJ,MAAM;QACN,IAAI;QACJ,KAAK;QACL,KAAK,CAAC,GAAG,CAAC,SAAS;YACjB,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;YAC9D,IAAI,OAAO;gBAAE,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC;QACnC,CAAC;QACD,SAAS,CAAC,MAAM;YACd,sEAAsE;YACtE,mEAAmE;YACnE,wDAAwD;YACxD,MAAM,GAAG,MAAM,CAAC;YAChB,sEAAsE;YACtE,OAAO;YACP,IAAI,uBAAuB;gBAAE,uBAAuB,EAAE,CAAC;YACvD,uBAAuB,GAAG,QAAQ;gBAChC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC;gBAC5B,CAAC,CAAC,IAAI,CAAC;YACT,OAAO,GAAG,EAAE;gBACV,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;oBACtB,MAAM,GAAG,IAAI,CAAC;oBACd,IAAI,uBAAuB;wBAAE,uBAAuB,EAAE,CAAC;oBACvD,uBAAuB,GAAG,IAAI,CAAC;gBACjC,CAAC;YACH,CAAC,CAAC;QACJ,CAAC;QACD,SAAS;YACP,IAAI,QAAQ,IAAI,MAAM,EAAE,KAAK,OAAO,EAAE,CAAC;gBACrC,OAAO,OAAO,CAAC,OAAO,CAAC,QAA0B,CAAC,CAAC;YACrD,CAAC;YACD,kEAAkE;YAClE,uEAAuE;YACvE,sEAAsE;YACtE,qEAAqE;YACrE,sDAAsD;YACtD,IAAI,MAAM,EAAE,KAAK,YAAY,EAAE,CAAC;gBAC9B,OAAO,OAAO,CAAC,MAAM,CACnB,IAAI,KAAK,CACP,kEAAkE,CACnE,CACF,CAAC;YACJ,CAAC;YACD,wEAAwE;YACxE,qBAAqB;YACrB,IAAI,MAAM,EAAE,KAAK,OAAO,IAAI,SAAS,EAAE,CAAC;gBACtC,OAAO,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACnC,CAAC;YACD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACrC,gBAAgB,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YAC7C,CAAC,CAAC,CAAC;QACL,CAAC;QACD,yBAAyB,CAAC,OAAO;YAC/B,sBAAsB,GAAG,OAAO,CAAC;QACnC,CAAC;QACD,IAAI,uBAAuB;YACzB,OAAO,sBAAsB,CAAC;QAChC,CAAC;QACD,gBAAgB,CAAC,KAAa;YAC5B,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;QACD,iBAAiB,CAAC,KAAa;YAC7B,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;KACF,CAAC;IAEF,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,28 @@
1
+ /** A tail op as the server sends it. */
2
+ export type WireTailOp = {
3
+ seq: number;
4
+ op_blob_b64: string;
5
+ } | {
6
+ seq: number;
7
+ op_blob_url: string;
8
+ };
9
+ /** A tail op with its bytes in hand. */
10
+ export interface ResolvedTailOp {
11
+ seq: number;
12
+ op_blob_b64: string;
13
+ }
14
+ /**
15
+ * Fetch any tail op whose bytes live behind a signed URL, leaving inline
16
+ * ops untouched, and return the tail in its original order.
17
+ *
18
+ * Ordering matters and concurrency does not disturb it: the fetches run
19
+ * together but each result lands back at its own index, so the caller
20
+ * still applies ops in ascending seq.
21
+ *
22
+ * A failed fetch throws rather than dropping the op. Skipping one would
23
+ * leave the reader a document missing an edit it will never be sent
24
+ * again, which reads as data loss; failing the join sends it back through
25
+ * a path that can succeed.
26
+ */
27
+ export declare function resolveTailOps(tailOps: readonly WireTailOp[], fetchImpl?: typeof fetch): Promise<ResolvedTailOp[]>;
28
+ //# sourceMappingURL=tail-ops.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tail-ops.d.ts","sourceRoot":"","sources":["../src/tail-ops.ts"],"names":[],"mappings":"AAeA,wCAAwC;AACxC,MAAM,MAAM,UAAU,GAClB;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzC,wCAAwC;AACxC,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;CACrB;AAMD;;;;;;;;;;;;GAYG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,SAAS,UAAU,EAAE,EAC9B,SAAS,GAAE,OAAO,KAAa,GAC9B,OAAO,CAAC,cAAc,EAAE,CAAC,CAgB3B"}
@@ -0,0 +1,46 @@
1
+ // Tail ops arrive in one of two shapes and are used in only one.
2
+ //
3
+ // An op that fit its durable row carries its bytes inline. One that
4
+ // spilled to storage carries a short-lived signed URL instead, because a
5
+ // join response holding several megabytes of base64 is a response the
6
+ // server cannot build. Both mean the same thing to a reader: bytes to
7
+ // apply, in seq order.
8
+ //
9
+ // Resolving at the parse boundary is what keeps that difference from
10
+ // spreading. Every path that folds a tail in (a cold open, a reconnect,
11
+ // a version preview) then works on inline blobs exactly as before, and
12
+ // none of them has to be async to do it.
13
+ import { BrassError } from './errors.js';
14
+ function isUrlOp(op) {
15
+ return typeof op.op_blob_url === 'string';
16
+ }
17
+ /**
18
+ * Fetch any tail op whose bytes live behind a signed URL, leaving inline
19
+ * ops untouched, and return the tail in its original order.
20
+ *
21
+ * Ordering matters and concurrency does not disturb it: the fetches run
22
+ * together but each result lands back at its own index, so the caller
23
+ * still applies ops in ascending seq.
24
+ *
25
+ * A failed fetch throws rather than dropping the op. Skipping one would
26
+ * leave the reader a document missing an edit it will never be sent
27
+ * again, which reads as data loss; failing the join sends it back through
28
+ * a path that can succeed.
29
+ */
30
+ export async function resolveTailOps(tailOps, fetchImpl = fetch) {
31
+ if (!tailOps.some(isUrlOp)) {
32
+ return tailOps;
33
+ }
34
+ return Promise.all(tailOps.map(async (op) => {
35
+ if (!isUrlOp(op))
36
+ return op;
37
+ // The URL is pre-signed, so it carries no Brass headers: adding one
38
+ // would fall outside the signature and be refused.
39
+ const response = await fetchImpl(op.op_blob_url, { method: 'GET' });
40
+ if (!response.ok) {
41
+ throw new BrassError('Tail op fetch failed', { status: response.status });
42
+ }
43
+ return { seq: op.seq, op_blob_b64: await response.text() };
44
+ }));
45
+ }
46
+ //# sourceMappingURL=tail-ops.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tail-ops.js","sourceRoot":"","sources":["../src/tail-ops.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,EAAE;AACF,oEAAoE;AACpE,yEAAyE;AACzE,sEAAsE;AACtE,sEAAsE;AACtE,uBAAuB;AACvB,EAAE;AACF,qEAAqE;AACrE,wEAAwE;AACxE,uEAAuE;AACvE,yCAAyC;AAEzC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAazC,SAAS,OAAO,CAAC,EAAc;IAC7B,OAAO,OAAQ,EAAgC,CAAC,WAAW,KAAK,QAAQ,CAAC;AAC3E,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAA8B,EAC9B,YAA0B,KAAK;IAE/B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,OAAO,OAA2B,CAAC;IACrC,CAAC;IACD,OAAO,OAAO,CAAC,GAAG,CAChB,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;QACvB,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAAE,OAAO,EAAE,CAAC;QAC5B,oEAAoE;QACpE,mDAAmD;QACnD,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,EAAE,CAAC,WAAW,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QACpE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,UAAU,CAAC,sBAAsB,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5E,CAAC;QACD,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;IAC7D,CAAC,CAAC,CACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,41 @@
1
+ export type TopicPhase = 'idle' | 'subscribing' | 'established' | 'retrying' | 'tornDown';
2
+ export interface TopicState {
3
+ phase: TopicPhase;
4
+ retrySpent: boolean;
5
+ }
6
+ export declare const IDLE_TOPIC: TopicState;
7
+ export type TopicEvent = {
8
+ type: 'user_subscribe';
9
+ } | {
10
+ type: 'user_unsubscribe';
11
+ } | {
12
+ type: 'socket_open';
13
+ } | {
14
+ type: 'socket_closed';
15
+ } | {
16
+ type: 'subscribed_ack';
17
+ } | {
18
+ type: 'error';
19
+ reason: string;
20
+ };
21
+ export type TopicEffect = {
22
+ kind: 'send_subscribe';
23
+ } | {
24
+ kind: 'send_unsubscribe';
25
+ } | {
26
+ kind: 'flush_held';
27
+ } | {
28
+ kind: 'drop_held';
29
+ } | {
30
+ kind: 'drop_listeners';
31
+ } | {
32
+ kind: 'fire_error';
33
+ reason: string;
34
+ };
35
+ export interface StepResult {
36
+ state: TopicState;
37
+ effects: TopicEffect[];
38
+ }
39
+ export declare function holdsFrames(state: TopicState): boolean;
40
+ export declare function step(state: TopicState, event: TopicEvent): StepResult;
41
+ //# sourceMappingURL=topic-lifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"topic-lifecycle.d.ts","sourceRoot":"","sources":["../src/topic-lifecycle.ts"],"names":[],"mappings":"AAwBA,MAAM,MAAM,UAAU,GAClB,MAAM,GACN,aAAa,GACb,aAAa,GACb,UAAU,GACV,UAAU,CAAC;AAEf,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,UAAU,CAAC;IAGlB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,eAAO,MAAM,UAAU,EAAE,UAAiD,CAAC;AAE3E,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,GAC1B;IAAE,IAAI,EAAE,kBAAkB,CAAA;CAAE,GAC5B;IAAE,IAAI,EAAE,aAAa,CAAA;CAAE,GACvB;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,GACzB;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,GAC1B;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtC,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,GAC1B;IAAE,IAAI,EAAE,kBAAkB,CAAA;CAAE,GAE5B;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,GACtB;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GAGrB;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,GAC1B;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3C,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,UAAU,CAAC;IAClB,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB;AAKD,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAEtD;AAqCD,wBAAgB,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,GAAG,UAAU,CA8GrE"}
@@ -0,0 +1,169 @@
1
+ // Pure per-topic subscription lifecycle for `BrassWsClient`. The client
2
+ // owns the socket, timers, and frame queues; every decision about a
3
+ // topic's subscription (what to send, when to hold or drop queued frames,
4
+ // when to surface an error) comes from `step`'s transition table.
5
+ //
6
+ // Phases:
7
+ // - `idle`: not wanted. Errors and acks for it are ignored.
8
+ // - `subscribing`: wanted, first subscribe on this connection unacked
9
+ // (or not yet sendable). Topic-scoped frames are held until the ack.
10
+ // - `established`: acked; frames flow.
11
+ // - `retrying`: the one silent re-subscribe this connection grants is in
12
+ // flight after a mid-stream `not_subscribed` eviction. Further
13
+ // `not_subscribed` errors describe frames that predate the retry and
14
+ // are swallowed; any other reason is the retry's own rejection.
15
+ // - `tornDown`: rejected or evicted with the retry spent. Terminal until
16
+ // a fresh `user_subscribe` or the next socket transition prunes it.
17
+ // `retrySpent` survives into a same-connection re-subscribe so the
18
+ // retry stays one-per-topic-per-connection.
19
+ //
20
+ // Invariant: every transition into `tornDown` emits `send_unsubscribe`,
21
+ // so no server-side subscription row can outlive the client-side state
22
+ // (an orphan row would have its `last_seen` kept fresh by the heartbeat,
23
+ // making it immune to the server's stale reaper).
24
+ export const IDLE_TOPIC = { phase: 'idle', retrySpent: false };
25
+ // True while topic-scoped frames must be held back: sending before the
26
+ // `subscribed` ack races the server's SUB# row write and draws a spurious
27
+ // `forbidden`.
28
+ export function holdsFrames(state) {
29
+ return state.phase === 'subscribing' || state.phase === 'retrying';
30
+ }
31
+ const SEND_SUBSCRIBE = { kind: 'send_subscribe' };
32
+ const FLUSH_HELD = { kind: 'flush_held' };
33
+ const DROP_HELD = { kind: 'drop_held' };
34
+ // Rejection / spent-retry teardown. `send_unsubscribe` releases any
35
+ // server-side row a completed retry may have re-created (the invariant in
36
+ // the header); `unsubscribe` is idempotent server-side, so sending it when
37
+ // no row exists is safe.
38
+ function tearDown(state, reason) {
39
+ return {
40
+ state: { phase: 'tornDown', retrySpent: state.retrySpent },
41
+ effects: [
42
+ DROP_HELD,
43
+ { kind: 'drop_listeners' },
44
+ { kind: 'send_unsubscribe' },
45
+ { kind: 'fire_error', reason },
46
+ ],
47
+ };
48
+ }
49
+ // A (re)opened socket grants a fresh retry and a fresh subscribe.
50
+ function reopened() {
51
+ return {
52
+ state: { phase: 'subscribing', retrySpent: false },
53
+ effects: [SEND_SUBSCRIBE],
54
+ };
55
+ }
56
+ function unsubscribed() {
57
+ return {
58
+ state: IDLE_TOPIC,
59
+ effects: [DROP_HELD, { kind: 'send_unsubscribe' }],
60
+ };
61
+ }
62
+ export function step(state, event) {
63
+ switch (state.phase) {
64
+ case 'idle':
65
+ if (event.type === 'user_subscribe') {
66
+ return {
67
+ state: { phase: 'subscribing', retrySpent: false },
68
+ effects: [SEND_SUBSCRIBE],
69
+ };
70
+ }
71
+ return { state, effects: [] };
72
+ case 'subscribing':
73
+ switch (event.type) {
74
+ case 'subscribed_ack':
75
+ return {
76
+ state: { ...state, phase: 'established' },
77
+ effects: [FLUSH_HELD],
78
+ };
79
+ case 'error':
80
+ // Never established on this connection: the rejection is final.
81
+ return tearDown(state, event.reason);
82
+ case 'socket_open':
83
+ return reopened();
84
+ case 'socket_closed':
85
+ return { state, effects: [DROP_HELD] };
86
+ case 'user_unsubscribe':
87
+ return unsubscribed();
88
+ case 'user_subscribe':
89
+ return { state, effects: [] };
90
+ }
91
+ break;
92
+ case 'established':
93
+ switch (event.type) {
94
+ case 'error':
95
+ // A mid-stream `not_subscribed` is an eviction (the server
96
+ // dropped the subscription row while this client stayed alive,
97
+ // e.g. a presence reap that raced a live-but-quiet connection),
98
+ // not a rejection: recover silently with one re-subscribe per
99
+ // connection, keeping the listeners and held-frame queue. Any
100
+ // other reason is a genuine refusal (role, scope, membership)
101
+ // that a re-subscribe would just repeat.
102
+ if (event.reason === 'not_subscribed' && !state.retrySpent) {
103
+ return {
104
+ state: { phase: 'retrying', retrySpent: true },
105
+ effects: [SEND_SUBSCRIBE],
106
+ };
107
+ }
108
+ return tearDown(state, event.reason);
109
+ case 'subscribed_ack':
110
+ return { state, effects: [FLUSH_HELD] };
111
+ case 'socket_open':
112
+ return reopened();
113
+ case 'socket_closed':
114
+ return { state: { ...state, phase: 'subscribing' }, effects: [DROP_HELD] };
115
+ case 'user_unsubscribe':
116
+ return unsubscribed();
117
+ case 'user_subscribe':
118
+ return { state, effects: [] };
119
+ }
120
+ break;
121
+ case 'retrying':
122
+ switch (event.type) {
123
+ case 'error':
124
+ // An eviction draws errors for EVERY frame in flight against the
125
+ // reaped row; the trailing ones land while the retry's subscribe
126
+ // is unacked and describe frames that predate it, so the retry
127
+ // supersedes them. A non-`not_subscribed` reason in this window
128
+ // is the retry's own rejection.
129
+ if (event.reason === 'not_subscribed') {
130
+ return { state, effects: [] };
131
+ }
132
+ return tearDown(state, event.reason);
133
+ case 'subscribed_ack':
134
+ return {
135
+ state: { ...state, phase: 'established' },
136
+ effects: [FLUSH_HELD],
137
+ };
138
+ case 'socket_open':
139
+ return reopened();
140
+ case 'socket_closed':
141
+ return { state: { ...state, phase: 'subscribing' }, effects: [DROP_HELD] };
142
+ case 'user_unsubscribe':
143
+ return unsubscribed();
144
+ case 'user_subscribe':
145
+ return { state, effects: [] };
146
+ }
147
+ break;
148
+ case 'tornDown':
149
+ switch (event.type) {
150
+ case 'user_subscribe':
151
+ // Same-connection re-subscribe: a spent retry stays spent, so
152
+ // the fresh subscribe rides the retrying phase's error handling.
153
+ return {
154
+ state: {
155
+ phase: state.retrySpent ? 'retrying' : 'subscribing',
156
+ retrySpent: state.retrySpent,
157
+ },
158
+ effects: [SEND_SUBSCRIBE],
159
+ };
160
+ case 'socket_open':
161
+ case 'socket_closed':
162
+ return { state: IDLE_TOPIC, effects: [] };
163
+ default:
164
+ return { state, effects: [] };
165
+ }
166
+ }
167
+ return { state, effects: [] };
168
+ }
169
+ //# sourceMappingURL=topic-lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"topic-lifecycle.js","sourceRoot":"","sources":["../src/topic-lifecycle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ export interface BrassUser {
2
+ sub: string;
3
+ email?: string;
4
+ display_name?: string;
5
+ avatar_url?: string;
6
+ }
7
+ export interface BrassInitOptions {
8
+ authBaseUrl?: string;
9
+ apiBaseUrl?: string;
10
+ wsBaseUrl?: string;
11
+ dashboardBaseUrl?: string;
12
+ hostedUiTheme?: 'light' | 'dark' | 'auto';
13
+ openIncompatibleDocuments?: boolean;
14
+ syncDocToUrl?: boolean;
15
+ docUrlParam?: string;
16
+ branchUrlParam?: string;
17
+ syncDocToTitle?: boolean;
18
+ }
19
+ export type AuthStatus = 'unknown' | 'signed-in' | 'signed-out' | 'guest';
20
+ export type UserChangeListener = (user: BrassUser | null) => void;
21
+ export type ErrorListener = (error: Error) => void;
22
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAI/B,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,UAAU,CAAC,EAAE,MAAM,CAAC;IAOpB,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAK1B,aAAa,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;IAM1C,yBAAyB,CAAC,EAAE,OAAO,CAAC;IAOpC,YAAY,CAAC,EAAE,OAAO,CAAC;IAGvB,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,cAAc,CAAC,EAAE,MAAM,CAAC;IAOxB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAWD,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,YAAY,GAAG,OAAO,CAAC;AAE1E,MAAM,MAAM,kBAAkB,GAAG,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,KAAK,IAAI,CAAC;AAKlE,MAAM,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/dist/undo.d.ts ADDED
@@ -0,0 +1,18 @@
1
+ import { type LoroDoc } from 'loro-crdt';
2
+ export interface UndoControllerOptions {
3
+ maxUndoSteps?: number;
4
+ }
5
+ export declare class UndoController {
6
+ private readonly _mgr;
7
+ private _groupOpen;
8
+ constructor(loroDoc: LoroDoc, options?: UndoControllerOptions);
9
+ undo(): boolean;
10
+ redo(): boolean;
11
+ private outsideGroup;
12
+ canUndo(): boolean;
13
+ canRedo(): boolean;
14
+ sealStep(): void;
15
+ clear(): void;
16
+ free(): void;
17
+ }
18
+ //# sourceMappingURL=undo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"undo.d.ts","sourceRoot":"","sources":["../src/undo.ts"],"names":[],"mappings":"AAIA,OAAO,EAAe,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBtD,MAAM,WAAW,qBAAqB;IAGpC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAID,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAc;IAOnC,OAAO,CAAC,UAAU,CAAS;gBAEf,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,qBAAqB;IAgB7D,IAAI,IAAI,OAAO;IAIf,IAAI,IAAI,OAAO;IAIf,OAAO,CAAC,YAAY;IAapB,OAAO,IAAI,OAAO;IAIlB,OAAO,IAAI,OAAO;IASlB,QAAQ,IAAI,IAAI;IAWhB,KAAK,IAAI,IAAI;IAYb,IAAI,IAAI,IAAI;CAWb"}
package/dist/undo.js ADDED
@@ -0,0 +1,110 @@
1
+ // Per-Document undo/redo, backed by Loro's UndoManager: undo is
2
+ // local-peer-scoped (reverts only this peer's ops), group bracketing collapses
3
+ // same-stroke edits into one entry, and remote-import bookkeeping keeps the
4
+ // redo stack honest across other peers' edits.
5
+ import { UndoManager } from 'loro-crdt';
6
+ // Loro's time-based merge is permanently disabled. The undo boundary here is
7
+ // the checkpoint group bracket (`sealStep`), and the two are incompatible: a
8
+ // nonzero merge interval merges adjacent changes by *timestamp*, and that
9
+ // merge reaches ACROSS a `groupEnd()` / `groupStart()` seal, collapsing two
10
+ // separately-sealed steps into one. That silently violates the "every
11
+ // checkpoint is an undo boundary" contract (one Ctrl-Z reverts more than the
12
+ // last operation and the rendered state jumps past where the user expected).
13
+ // Same-stroke collapsing is still handled, by the open group not the clock:
14
+ // every commit between two seals brackets into one entry. Apps tune
15
+ // granularity via `setAutoCheckpointIntervalMs` and `createCheckpoint`.
16
+ const UNDO_MERGE_INTERVAL_MS = 0;
17
+ // Cap on retained undo steps (Loro's default is 100). 200 at typical AEC
18
+ // entity sizes is a few hundred KB, well below anything that matters.
19
+ const DEFAULT_MAX_UNDO_STEPS = 200;
20
+ // Thin wrapper around Loro's UndoManager exposing only what the Document
21
+ // needs. Owned by the Document; not part of the public SDK surface.
22
+ export class UndoController {
23
+ _mgr;
24
+ // Whether an implicit group is open. The Document keeps one open between
25
+ // checkpoints so `createCheckpoint` is THE undo boundary: every commit
26
+ // between two checkpoints collapses into one step. `sealStep` closes and
27
+ // reopens the group, the only way to force a boundary into Loro's stack
28
+ // (Loro has no "force boundary here" primitive). This is a hard boundary
29
+ // only because the merge interval is disabled (see above).
30
+ _groupOpen = false;
31
+ constructor(loroDoc, options) {
32
+ this._mgr = new UndoManager(loroDoc, {
33
+ mergeInterval: UNDO_MERGE_INTERVAL_MS,
34
+ maxUndoSteps: options?.maxUndoSteps ?? DEFAULT_MAX_UNDO_STEPS,
35
+ });
36
+ // Open the implicit group so commits before the first `createCheckpoint`
37
+ // still bracket as one undo step.
38
+ this._mgr.groupStart();
39
+ this._groupOpen = true;
40
+ }
41
+ // undo/redo run OUTSIDE the implicit group: Loro groups every commit while a
42
+ // group is open, INCLUDING the one a `redo()` / `undo()` itself produces, so
43
+ // running them inside would fold the reapplied step into the group and the
44
+ // next sealed edit would merge with it (one Ctrl-Z reverts both). Closing
45
+ // first also makes unsealed pending commits their own boundary.
46
+ undo() {
47
+ return this.outsideGroup(() => this._mgr.undo());
48
+ }
49
+ redo() {
50
+ return this.outsideGroup(() => this._mgr.redo());
51
+ }
52
+ outsideGroup(op) {
53
+ if (this._groupOpen) {
54
+ this._mgr.groupEnd();
55
+ this._groupOpen = false;
56
+ }
57
+ try {
58
+ return op();
59
+ }
60
+ finally {
61
+ this._mgr.groupStart();
62
+ this._groupOpen = true;
63
+ }
64
+ }
65
+ canUndo() {
66
+ return this._mgr.canUndo();
67
+ }
68
+ canRedo() {
69
+ return this._mgr.canRedo();
70
+ }
71
+ // Seal the current undo step: close the implicit group (commits since the
72
+ // previous seal collapse into one entry) and open a fresh one.
73
+ // `createCheckpoint` and the auto-checkpoint scheduler call this so every
74
+ // checkpoint is a Ctrl-Z boundary. Idempotent: calling twice with no
75
+ // intervening commit is safe (Loro collapses the empty group).
76
+ sealStep() {
77
+ if (this._groupOpen) {
78
+ this._mgr.groupEnd();
79
+ this._groupOpen = false;
80
+ }
81
+ this._mgr.groupStart();
82
+ this._groupOpen = true;
83
+ }
84
+ // Drop both stacks. Called by `_applySnapshot`: the prior entries reference a
85
+ // state the new snapshot superseded.
86
+ clear() {
87
+ // Close the open group first so `clear()` sees a clean state (defensive;
88
+ // Loro's `clear` drops both stacks regardless).
89
+ if (this._groupOpen) {
90
+ this._mgr.groupEnd();
91
+ this._groupOpen = false;
92
+ }
93
+ this._mgr.clear();
94
+ this._mgr.groupStart();
95
+ this._groupOpen = true;
96
+ }
97
+ free() {
98
+ if (this._groupOpen) {
99
+ try {
100
+ this._mgr.groupEnd();
101
+ }
102
+ catch {
103
+ // Best-effort; the underlying manager is about to free.
104
+ }
105
+ this._groupOpen = false;
106
+ }
107
+ this._mgr.free();
108
+ }
109
+ }
110
+ //# sourceMappingURL=undo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"undo.js","sourceRoot":"","sources":["../src/undo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ export interface VersionBarDeps {
2
+ dashboardBaseUrl: string;
3
+ theme?: 'light' | 'dark' | 'auto';
4
+ getSessionToken?: () => string | null | undefined;
5
+ checkoutVersion: (version: number) => void;
6
+ returnToHead: () => void;
7
+ fork: (fromVersion: number, name?: string) => void;
8
+ browse: () => void;
9
+ close: () => void;
10
+ }
11
+ export interface VersionBarContext {
12
+ docId: string;
13
+ branch: string | undefined;
14
+ version: number | null;
15
+ branchName?: string | undefined;
16
+ }
17
+ export interface VersionBarFrame {
18
+ update(ctx: VersionBarContext): void;
19
+ destroy(): void;
20
+ }
21
+ export declare function createVersionBarFrame(root: HTMLElement, deps: VersionBarDeps): VersionBarFrame;
22
+ //# sourceMappingURL=version-bar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version-bar.d.ts","sourceRoot":"","sources":["../src/version-bar.ts"],"names":[],"mappings":"AAyBA,MAAM,WAAW,cAAc;IAG7B,gBAAgB,EAAE,MAAM,CAAC;IAEzB,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;IAGlC,eAAe,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAElD,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,IAAI,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACnD,MAAM,EAAE,MAAM,IAAI,CAAC;IAInB,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAG3B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAGvB,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC;AAED,MAAM,WAAW,eAAe;IAI9B,MAAM,CAAC,GAAG,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACrC,OAAO,IAAI,IAAI,CAAC;CACjB;AAOD,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,cAAc,GACnB,eAAe,CAoJjB"}