@brass-build/client 0.4.0 → 0.5.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 (327) hide show
  1. package/AGENTS.md +142 -41
  2. package/CHANGELOG.md +93 -4
  3. package/README.md +666 -179
  4. package/dist/acting-organization.d.ts.map +1 -1
  5. package/dist/acting-organization.js +6 -11
  6. package/dist/acting-organization.js.map +1 -1
  7. package/dist/api-fetch.d.ts +8 -0
  8. package/dist/api-fetch.d.ts.map +1 -1
  9. package/dist/api-fetch.js +35 -8
  10. package/dist/api-fetch.js.map +1 -1
  11. package/dist/batched-get.d.ts +11 -0
  12. package/dist/batched-get.d.ts.map +1 -0
  13. package/dist/batched-get.js +92 -0
  14. package/dist/batched-get.js.map +1 -0
  15. package/dist/call-service.d.ts +4 -0
  16. package/dist/call-service.d.ts.map +1 -1
  17. package/dist/call-service.js +66 -3
  18. package/dist/call-service.js.map +1 -1
  19. package/dist/client.d.ts +51 -2
  20. package/dist/client.d.ts.map +1 -1
  21. package/dist/client.js +982 -124
  22. package/dist/client.js.map +1 -1
  23. package/dist/document-checkpoints.d.ts +25 -2
  24. package/dist/document-checkpoints.d.ts.map +1 -1
  25. package/dist/document-checkpoints.js +258 -61
  26. package/dist/document-checkpoints.js.map +1 -1
  27. package/dist/document-commands.d.ts.map +1 -1
  28. package/dist/document-commands.js +5 -3
  29. package/dist/document-commands.js.map +1 -1
  30. package/dist/document-contents.d.ts +10 -0
  31. package/dist/document-contents.d.ts.map +1 -1
  32. package/dist/document-contents.js +23 -1
  33. package/dist/document-contents.js.map +1 -1
  34. package/dist/document-set-subscription.d.ts +56 -0
  35. package/dist/document-set-subscription.d.ts.map +1 -0
  36. package/dist/document-set-subscription.js +240 -0
  37. package/dist/document-set-subscription.js.map +1 -0
  38. package/dist/document-signals.d.ts +6 -0
  39. package/dist/document-signals.d.ts.map +1 -1
  40. package/dist/document-signals.js +31 -1
  41. package/dist/document-signals.js.map +1 -1
  42. package/dist/document-streams.d.ts +36 -2
  43. package/dist/document-streams.d.ts.map +1 -1
  44. package/dist/document-streams.js +69 -18
  45. package/dist/document-streams.js.map +1 -1
  46. package/dist/document-thumbnail-capture.d.ts +12 -2
  47. package/dist/document-thumbnail-capture.d.ts.map +1 -1
  48. package/dist/document-thumbnail-capture.js +103 -27
  49. package/dist/document-thumbnail-capture.js.map +1 -1
  50. package/dist/documents-namespace.d.ts +92 -10
  51. package/dist/documents-namespace.d.ts.map +1 -1
  52. package/dist/documents-namespace.js +285 -39
  53. package/dist/documents-namespace.js.map +1 -1
  54. package/dist/documents.d.ts +173 -8
  55. package/dist/documents.d.ts.map +1 -1
  56. package/dist/documents.js +1778 -310
  57. package/dist/documents.js.map +1 -1
  58. package/dist/errors.d.ts +3 -3
  59. package/dist/errors.d.ts.map +1 -1
  60. package/dist/errors.js.map +1 -1
  61. package/dist/fetch-retry.d.ts +1 -0
  62. package/dist/fetch-retry.d.ts.map +1 -1
  63. package/dist/fetch-retry.js +2 -0
  64. package/dist/fetch-retry.js.map +1 -1
  65. package/dist/file-choice.d.ts +2 -0
  66. package/dist/file-choice.d.ts.map +1 -0
  67. package/dist/file-choice.js +27 -0
  68. package/dist/file-choice.js.map +1 -0
  69. package/dist/guest-link.d.ts +18 -1
  70. package/dist/guest-link.d.ts.map +1 -1
  71. package/dist/guest-link.js +329 -1
  72. package/dist/guest-link.js.map +1 -1
  73. package/dist/handle-types.d.ts +67 -5
  74. package/dist/handle-types.d.ts.map +1 -1
  75. package/dist/handles.d.ts +15 -19
  76. package/dist/handles.d.ts.map +1 -1
  77. package/dist/handles.js +231 -76
  78. package/dist/handles.js.map +1 -1
  79. package/dist/hosted-ui.d.ts +61 -0
  80. package/dist/hosted-ui.d.ts.map +1 -1
  81. package/dist/hosted-ui.js +94 -42
  82. package/dist/hosted-ui.js.map +1 -1
  83. package/dist/import-contract.d.ts +74 -0
  84. package/dist/import-contract.d.ts.map +1 -0
  85. package/dist/import-contract.js +163 -0
  86. package/dist/import-contract.js.map +1 -0
  87. package/dist/import-guest.d.ts +9 -0
  88. package/dist/import-guest.d.ts.map +1 -0
  89. package/dist/import-guest.js +155 -0
  90. package/dist/import-guest.js.map +1 -0
  91. package/dist/import-report.d.ts +17 -0
  92. package/dist/import-report.d.ts.map +1 -0
  93. package/dist/import-report.js +7 -0
  94. package/dist/import-report.js.map +1 -0
  95. package/dist/importer-wait.d.ts +2 -0
  96. package/dist/importer-wait.d.ts.map +1 -0
  97. package/dist/importer-wait.js +5 -0
  98. package/dist/importer-wait.js.map +1 -0
  99. package/dist/importer.d.ts +18 -4
  100. package/dist/importer.d.ts.map +1 -1
  101. package/dist/importer.js +322 -105
  102. package/dist/importer.js.map +1 -1
  103. package/dist/in-development.d.ts +2 -0
  104. package/dist/in-development.d.ts.map +1 -0
  105. package/dist/in-development.js +10 -0
  106. package/dist/in-development.js.map +1 -0
  107. package/dist/index.d.ts +16 -8
  108. package/dist/index.d.ts.map +1 -1
  109. package/dist/index.js +24 -8
  110. package/dist/index.js.map +1 -1
  111. package/dist/init-keys.d.ts +1 -1
  112. package/dist/init-keys.d.ts.map +1 -1
  113. package/dist/init-keys.js +6 -1
  114. package/dist/init-keys.js.map +1 -1
  115. package/dist/input-documents.d.ts +67 -0
  116. package/dist/input-documents.d.ts.map +1 -0
  117. package/dist/input-documents.js +693 -0
  118. package/dist/input-documents.js.map +1 -0
  119. package/dist/inputs-status.d.ts +80 -0
  120. package/dist/inputs-status.d.ts.map +1 -0
  121. package/dist/inputs-status.js +460 -0
  122. package/dist/inputs-status.js.map +1 -0
  123. package/dist/inputs.d.ts +2 -0
  124. package/dist/inputs.d.ts.map +1 -0
  125. package/dist/inputs.js +793 -0
  126. package/dist/inputs.js.map +1 -0
  127. package/dist/internal.d.ts +6 -1
  128. package/dist/internal.d.ts.map +1 -1
  129. package/dist/internal.js +4 -1
  130. package/dist/internal.js.map +1 -1
  131. package/dist/join-content.d.ts +33 -0
  132. package/dist/join-content.d.ts.map +1 -0
  133. package/dist/join-content.js +114 -0
  134. package/dist/join-content.js.map +1 -0
  135. package/dist/join-stamp.d.ts +3 -0
  136. package/dist/join-stamp.d.ts.map +1 -0
  137. package/dist/join-stamp.js +12 -0
  138. package/dist/join-stamp.js.map +1 -0
  139. package/dist/manifest-drift.d.ts +9 -0
  140. package/dist/manifest-drift.d.ts.map +1 -0
  141. package/dist/manifest-drift.js +46 -0
  142. package/dist/manifest-drift.js.map +1 -0
  143. package/dist/open-document.d.ts +109 -2
  144. package/dist/open-document.d.ts.map +1 -1
  145. package/dist/open-document.js +1822 -811
  146. package/dist/open-document.js.map +1 -1
  147. package/dist/page-restore.d.ts +12 -0
  148. package/dist/page-restore.d.ts.map +1 -0
  149. package/dist/page-restore.js +23 -0
  150. package/dist/page-restore.js.map +1 -0
  151. package/dist/placement.d.ts +13 -0
  152. package/dist/placement.d.ts.map +1 -0
  153. package/dist/placement.js +34 -0
  154. package/dist/placement.js.map +1 -0
  155. package/dist/presence.d.ts +1 -0
  156. package/dist/presence.d.ts.map +1 -1
  157. package/dist/presence.js +16 -4
  158. package/dist/presence.js.map +1 -1
  159. package/dist/read-only-document.d.ts +87 -0
  160. package/dist/read-only-document.d.ts.map +1 -0
  161. package/dist/read-only-document.js +4 -0
  162. package/dist/read-only-document.js.map +1 -0
  163. package/dist/record-paging.d.ts +63 -6
  164. package/dist/record-paging.d.ts.map +1 -1
  165. package/dist/record-paging.js +122 -29
  166. package/dist/record-paging.js.map +1 -1
  167. package/dist/references.d.ts +40 -0
  168. package/dist/references.d.ts.map +1 -0
  169. package/dist/references.js +135 -0
  170. package/dist/references.js.map +1 -0
  171. package/dist/request-lane.d.ts +5 -0
  172. package/dist/request-lane.d.ts.map +1 -0
  173. package/dist/request-lane.js +48 -0
  174. package/dist/request-lane.js.map +1 -0
  175. package/dist/sealed-arrow.d.ts +170 -0
  176. package/dist/sealed-arrow.d.ts.map +1 -0
  177. package/dist/sealed-arrow.js +769 -0
  178. package/dist/sealed-arrow.js.map +1 -0
  179. package/dist/sealed-cache.d.ts +21 -0
  180. package/dist/sealed-cache.d.ts.map +1 -0
  181. package/dist/sealed-cache.js +247 -0
  182. package/dist/sealed-cache.js.map +1 -0
  183. package/dist/sealed-encode.d.ts +87 -0
  184. package/dist/sealed-encode.d.ts.map +1 -0
  185. package/dist/sealed-encode.js +876 -0
  186. package/dist/sealed-encode.js.map +1 -0
  187. package/dist/sealed-handles.d.ts +45 -0
  188. package/dist/sealed-handles.d.ts.map +1 -0
  189. package/dist/sealed-handles.js +408 -0
  190. package/dist/sealed-handles.js.map +1 -0
  191. package/dist/sealed-store.d.ts +242 -0
  192. package/dist/sealed-store.d.ts.map +1 -0
  193. package/dist/sealed-store.js +1155 -0
  194. package/dist/sealed-store.js.map +1 -0
  195. package/dist/serializer.d.ts +6 -15
  196. package/dist/serializer.d.ts.map +1 -1
  197. package/dist/session-toolbar.d.ts +20 -5
  198. package/dist/session-toolbar.d.ts.map +1 -1
  199. package/dist/session-toolbar.js +419 -67
  200. package/dist/session-toolbar.js.map +1 -1
  201. package/dist/session.d.ts +38 -1
  202. package/dist/session.d.ts.map +1 -1
  203. package/dist/session.js +562 -79
  204. package/dist/session.js.map +1 -1
  205. package/dist/sha256.d.ts +3 -0
  206. package/dist/sha256.d.ts.map +1 -0
  207. package/dist/sha256.js +74 -0
  208. package/dist/sha256.js.map +1 -0
  209. package/dist/stable-handles.d.ts +19 -0
  210. package/dist/stable-handles.d.ts.map +1 -0
  211. package/dist/stable-handles.js +193 -0
  212. package/dist/stable-handles.js.map +1 -0
  213. package/dist/staged-seal.d.ts +2 -0
  214. package/dist/staged-seal.d.ts.map +1 -0
  215. package/dist/staged-seal.js +76 -0
  216. package/dist/staged-seal.js.map +1 -0
  217. package/dist/subscriber-delivery.d.ts +8 -0
  218. package/dist/subscriber-delivery.d.ts.map +1 -0
  219. package/dist/subscriber-delivery.js +31 -0
  220. package/dist/subscriber-delivery.js.map +1 -0
  221. package/dist/tail-op-import.d.ts +10 -0
  222. package/dist/tail-op-import.d.ts.map +1 -0
  223. package/dist/tail-op-import.js +33 -0
  224. package/dist/tail-op-import.js.map +1 -0
  225. package/dist/topic-lifecycle.d.ts +6 -0
  226. package/dist/topic-lifecycle.d.ts.map +1 -1
  227. package/dist/topic-lifecycle.js +32 -2
  228. package/dist/topic-lifecycle.js.map +1 -1
  229. package/dist/trial-replace-dialog.d.ts +10 -0
  230. package/dist/trial-replace-dialog.d.ts.map +1 -0
  231. package/dist/trial-replace-dialog.js +153 -0
  232. package/dist/trial-replace-dialog.js.map +1 -0
  233. package/dist/types.d.ts +8 -1
  234. package/dist/types.d.ts.map +1 -1
  235. package/dist/undo.d.ts +60 -5
  236. package/dist/undo.d.ts.map +1 -1
  237. package/dist/undo.js +344 -75
  238. package/dist/undo.js.map +1 -1
  239. package/dist/version-bar.d.ts +1 -0
  240. package/dist/version-bar.d.ts.map +1 -1
  241. package/dist/version-bar.js +2 -1
  242. package/dist/version-bar.js.map +1 -1
  243. package/dist/version.d.ts +2 -2
  244. package/dist/version.js +1 -1
  245. package/dist/ws-client.d.ts +21 -0
  246. package/dist/ws-client.d.ts.map +1 -1
  247. package/dist/ws-client.js +192 -8
  248. package/dist/ws-client.js.map +1 -1
  249. package/dist/ws-frame-limit.d.ts +1 -0
  250. package/dist/ws-frame-limit.d.ts.map +1 -1
  251. package/dist/ws-frame-limit.js.map +1 -1
  252. package/docs/app-manifest.md +121 -17
  253. package/docs/custom-chrome.md +24 -16
  254. package/docs/hosted-ui-advanced.md +38 -6
  255. package/docs/imported-documents.md +104 -51
  256. package/docs/presence.md +16 -4
  257. package/docs/schemas.md +8 -5
  258. package/docs/services.md +6 -6
  259. package/docs/streams.md +139 -150
  260. package/docs/text-fields.md +26 -19
  261. package/package.json +5 -2
  262. package/src/acting-organization.ts +6 -12
  263. package/src/api-fetch.ts +53 -3
  264. package/src/auth-flow.ts +1 -1
  265. package/src/batched-get.ts +117 -0
  266. package/src/call-service.ts +78 -3
  267. package/src/client.ts +1092 -121
  268. package/src/document-checkpoints.ts +307 -65
  269. package/src/document-commands.ts +5 -5
  270. package/src/document-contents.ts +27 -1
  271. package/src/document-set-subscription.ts +274 -0
  272. package/src/document-signals.ts +47 -5
  273. package/src/document-streams.ts +85 -16
  274. package/src/document-thumbnail-capture.ts +118 -32
  275. package/src/documents-namespace.ts +539 -84
  276. package/src/documents.ts +2017 -348
  277. package/src/errors.ts +17 -6
  278. package/src/fetch-retry.ts +5 -0
  279. package/src/file-choice.ts +26 -0
  280. package/src/guest-link.ts +362 -1
  281. package/src/handle-types.ts +73 -47
  282. package/src/handles.ts +253 -83
  283. package/src/hosted-ui.ts +211 -50
  284. package/src/import-contract.ts +227 -0
  285. package/src/import-guest.ts +193 -0
  286. package/src/import-report.ts +24 -0
  287. package/src/importer-wait.ts +4 -0
  288. package/src/importer.ts +386 -131
  289. package/src/in-development.ts +10 -0
  290. package/src/index.ts +76 -16
  291. package/src/init-keys.ts +6 -1
  292. package/src/input-documents.ts +819 -0
  293. package/src/inputs-status.ts +598 -0
  294. package/src/inputs.ts +1090 -0
  295. package/src/internal.ts +7 -0
  296. package/src/join-content.ts +135 -0
  297. package/src/join-stamp.ts +12 -0
  298. package/src/manifest-drift.ts +54 -0
  299. package/src/open-document.ts +2346 -930
  300. package/src/page-restore.ts +38 -0
  301. package/src/placement.ts +54 -0
  302. package/src/presence.ts +21 -5
  303. package/src/read-only-document.ts +133 -0
  304. package/src/record-paging.ts +147 -25
  305. package/src/references.ts +207 -0
  306. package/src/request-lane.ts +59 -0
  307. package/src/sealed-arrow.ts +843 -0
  308. package/src/sealed-cache.ts +267 -0
  309. package/src/sealed-encode.ts +1015 -0
  310. package/src/sealed-handles.ts +486 -0
  311. package/src/sealed-store.ts +1330 -0
  312. package/src/serializer.ts +8 -20
  313. package/src/session-toolbar.ts +463 -72
  314. package/src/session.ts +740 -99
  315. package/src/sha256.ts +65 -0
  316. package/src/stable-handles.ts +235 -0
  317. package/src/staged-seal.ts +90 -0
  318. package/src/subscriber-delivery.ts +37 -0
  319. package/src/tail-op-import.ts +30 -0
  320. package/src/topic-lifecycle.ts +38 -2
  321. package/src/trial-replace-dialog.ts +163 -0
  322. package/src/types.ts +6 -6
  323. package/src/undo.ts +386 -73
  324. package/src/version-bar.ts +5 -1
  325. package/src/version.ts +1 -1
  326. package/src/ws-client.ts +208 -16
  327. package/src/ws-frame-limit.ts +1 -0
@@ -0,0 +1,56 @@
1
+ import type { DocumentListing, ListDocumentsQuery } from './documents-namespace.js';
2
+ import type { InputReference } from './hosted-ui.js';
3
+ import type { SubscribeOptions, WsTopicCallback } from './ws-client.js';
4
+ /** The slice of the socket client a subscription uses. */
5
+ export interface DocumentSetSocket {
6
+ subscribe(topic: string, callback: WsTopicCallback, options?: SubscribeOptions): () => void;
7
+ }
8
+ /**
9
+ * The feed topic that covers each reference: `organization:<id>`,
10
+ * `project:<id>`, or `reference:<id>` for a document, which fires when the
11
+ * document or anything filed under it changes.
12
+ */
13
+ export declare function feedTopicsFor(refs: readonly InputReference[]): string[];
14
+ /** Whether a frame on a feed could have moved what a listing answers: any
15
+ * data frame does, whatever its type, since the listing decides. */
16
+ export declare function frameCouldMoveSet(frame: unknown): boolean;
17
+ /** Whether two listings differ, keyed by `doc_id`: a document joined, left,
18
+ * or has a different `updated_at` or work `status`. */
19
+ export declare function listingsDiffer(previous: readonly DocumentListing[], next: readonly DocumentListing[]): boolean;
20
+ /**
21
+ * How long a trigger waits before listing, so a burst of frames (a move
22
+ * stamps the document and nudges both containers) is one listing.
23
+ */
24
+ export declare const RELIST_COALESCE_MS = 250;
25
+ /** The longest the first listing waits for its feeds to be established. */
26
+ export declare const FEED_WAIT_MS = 3000;
27
+ /**
28
+ * Watch the set `query` lists and call `listener` whenever a listing differs
29
+ * from the last one, starting from `initial`. Returns the stop function.
30
+ */
31
+ export declare function watchDocumentSet(args: {
32
+ query: ListDocumentsQuery;
33
+ list: (query: ListDocumentsQuery) => Promise<DocumentListing[]>;
34
+ socket: DocumentSetSocket | undefined;
35
+ listener: () => void;
36
+ initial: DocumentListing[];
37
+ }): () => void;
38
+ /** A listing, as `Brass.documents.list` returns it. */
39
+ export interface DocumentList {
40
+ /** The set as it stood when it was listed. */
41
+ readonly documents: DocumentListing[];
42
+ /** Whether the set has moved since: a document joined it, left it, or
43
+ * changed (its `updated_at` or work `status`). List again to see how. */
44
+ readonly changed: boolean;
45
+ /** Fires once, when the set moves. The set is watched only while a
46
+ * listener is registered and until `close`; throws after `close`. */
47
+ onChanged(cb: () => void): () => void;
48
+ close(): void;
49
+ }
50
+ export declare function createDocumentList(args: {
51
+ documents: DocumentListing[];
52
+ query: ListDocumentsQuery;
53
+ list: (query: ListDocumentsQuery) => Promise<DocumentListing[]>;
54
+ socket: DocumentSetSocket | undefined;
55
+ }): DocumentList;
56
+ //# sourceMappingURL=document-set-subscription.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-set-subscription.d.ts","sourceRoot":"","sources":["../src/document-set-subscription.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,eAAe,EACf,kBAAkB,EACnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAExE,0DAA0D;AAC1D,MAAM,WAAW,iBAAiB;IAChC,SAAS,CACP,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,eAAe,EACzB,OAAO,CAAC,EAAE,gBAAgB,GACzB,MAAM,IAAI,CAAC;CACf;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,cAAc,EAAE,GAAG,MAAM,EAAE,CAYvE;AAcD;qEACqE;AACrE,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAIzD;AAED;wDACwD;AACxD,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,SAAS,eAAe,EAAE,EACpC,IAAI,EAAE,SAAS,eAAe,EAAE,GAC/B,OAAO,CAOT;AASD;;;GAGG;AACH,eAAO,MAAM,kBAAkB,MAAM,CAAC;AAEtC,2EAA2E;AAC3E,eAAO,MAAM,YAAY,OAAQ,CAAC;AAElC;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE;IACrC,KAAK,EAAE,kBAAkB,CAAC;IAC1B,IAAI,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IAChE,MAAM,EAAE,iBAAiB,GAAG,SAAS,CAAC;IACtC,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,EAAE,eAAe,EAAE,CAAC;CAC5B,GAAG,MAAM,IAAI,CA8Fb;AAED,uDAAuD;AACvD,MAAM,WAAW,YAAY;IAC3B,8CAA8C;IAC9C,QAAQ,CAAC,SAAS,EAAE,eAAe,EAAE,CAAC;IACtC;8EAC0E;IAC1E,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B;0EACsE;IACtE,SAAS,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;IACtC,KAAK,IAAI,IAAI,CAAC;CACf;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE;IACvC,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,KAAK,EAAE,kBAAkB,CAAC;IAC1B,IAAI,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IAChE,MAAM,EAAE,iBAAiB,GAAG,SAAS,CAAC;CACvC,GAAG,YAAY,CAwDf"}
@@ -0,0 +1,240 @@
1
+ // What lets a listing notice that its set moved (`DocumentList.onChanged`).
2
+ //
3
+ // A feed frame is a trigger and the listing is the truth. The socket feeds
4
+ // that cover a query's references say THAT something in their scope moved;
5
+ // the listing decides what the set is, so folder ancestry, archive members,
6
+ // type matching and the reader's own access are decided in one place, the
7
+ // server's listing, and never re-derived from frames here.
8
+ /**
9
+ * The feed topic that covers each reference: `organization:<id>`,
10
+ * `project:<id>`, or `reference:<id>` for a document, which fires when the
11
+ * document or anything filed under it changes.
12
+ */
13
+ export function feedTopicsFor(refs) {
14
+ const topics = new Set();
15
+ for (const ref of refs) {
16
+ if (ref.extent === 'organization') {
17
+ topics.add(`organization:${ref.organization_id}`);
18
+ }
19
+ else if (ref.extent === 'project' && ref.project_id) {
20
+ topics.add(`project:${ref.project_id}`);
21
+ }
22
+ else if (ref.extent === 'document' && ref.doc_id) {
23
+ topics.add(`reference:${ref.doc_id}`);
24
+ }
25
+ }
26
+ return [...topics];
27
+ }
28
+ // Frames the socket client hands a topic's callback that report on the
29
+ // subscription itself rather than on anything in its scope.
30
+ const CONTROL_FRAMES = new Set([
31
+ 'subscribed',
32
+ 'subscribed_ack',
33
+ 'unsubscribed',
34
+ 'not_subscribed',
35
+ 'server_ended',
36
+ 'error',
37
+ 'pong',
38
+ ]);
39
+ /** Whether a frame on a feed could have moved what a listing answers: any
40
+ * data frame does, whatever its type, since the listing decides. */
41
+ export function frameCouldMoveSet(frame) {
42
+ if (frame === null || typeof frame !== 'object')
43
+ return false;
44
+ const type = frame.type;
45
+ return typeof type === 'string' && !CONTROL_FRAMES.has(type);
46
+ }
47
+ /** Whether two listings differ, keyed by `doc_id`: a document joined, left,
48
+ * or has a different `updated_at` or work `status`. */
49
+ export function listingsDiffer(previous, next) {
50
+ if (previous.length !== next.length)
51
+ return true;
52
+ const before = new Map(previous.map((d) => [d.doc_id, d]));
53
+ return next.some((doc) => {
54
+ const was = before.get(doc.doc_id);
55
+ return was === undefined || was.updated_at !== doc.updated_at || !sameStatus(was.status, doc.status);
56
+ });
57
+ }
58
+ // An import that fails writes its status without moving the stamp, so the
59
+ // status is compared as well.
60
+ function sameStatus(a, b) {
61
+ if (a === undefined || b === undefined)
62
+ return a === b;
63
+ return a.pending === b.pending && a.blocking === b.blocking && a.message === b.message;
64
+ }
65
+ /**
66
+ * How long a trigger waits before listing, so a burst of frames (a move
67
+ * stamps the document and nudges both containers) is one listing.
68
+ */
69
+ export const RELIST_COALESCE_MS = 250;
70
+ /** The longest the first listing waits for its feeds to be established. */
71
+ export const FEED_WAIT_MS = 3_000;
72
+ /**
73
+ * Watch the set `query` lists and call `listener` whenever a listing differs
74
+ * from the last one, starting from `initial`. Returns the stop function.
75
+ */
76
+ export function watchDocumentSet(args) {
77
+ const { query, list, socket, listener } = args;
78
+ let stopped = false;
79
+ let last = args.initial;
80
+ let inFlight = false;
81
+ let again = false;
82
+ let timer = null;
83
+ const relist = async () => {
84
+ if (stopped)
85
+ return;
86
+ if (inFlight) {
87
+ // A frame that lands while a listing is out may describe a write that
88
+ // listing already missed, so one more follows it.
89
+ again = true;
90
+ return;
91
+ }
92
+ inFlight = true;
93
+ try {
94
+ const next = await list(query);
95
+ if (stopped)
96
+ return;
97
+ const moved = listingsDiffer(last, next);
98
+ last = next;
99
+ if (moved)
100
+ listener();
101
+ }
102
+ catch (error) {
103
+ // The watch keeps its last answer and lists again on the next trigger.
104
+ if (!stopped)
105
+ console.error('Brass.documents.list:', error);
106
+ }
107
+ finally {
108
+ inFlight = false;
109
+ if (again && !stopped) {
110
+ again = false;
111
+ schedule();
112
+ }
113
+ }
114
+ };
115
+ const schedule = () => {
116
+ // Before the first listing, that listing answers whatever moved.
117
+ if (stopped || !firstListed || timer !== null)
118
+ return;
119
+ timer = setTimeout(() => {
120
+ timer = null;
121
+ void relist();
122
+ }, RELIST_COALESCE_MS);
123
+ };
124
+ // The first listing waits for the feeds to be established, so a write
125
+ // landing between that listing and the subscription cannot fall between
126
+ // them. A feed the socket refuses, or one that never answers, stops being
127
+ // waited for rather than holding the first answer back.
128
+ const awaiting = new Set();
129
+ let firstListed = false;
130
+ const listFirst = () => {
131
+ if (firstListed)
132
+ return;
133
+ firstListed = true;
134
+ if (firstTimer !== null)
135
+ clearTimeout(firstTimer);
136
+ void relist();
137
+ };
138
+ const settled = (topic) => {
139
+ awaiting.delete(topic);
140
+ if (awaiting.size === 0)
141
+ listFirst();
142
+ };
143
+ const unsubscribes = [];
144
+ const topics = socket ? feedTopicsFor(query.from ?? []) : [];
145
+ for (const topic of topics)
146
+ awaiting.add(topic);
147
+ let firstTimer = topics.length > 0 ? setTimeout(listFirst, FEED_WAIT_MS) : null;
148
+ for (const topic of topics) {
149
+ unsubscribes.push(socket.subscribe(topic, (frame) => {
150
+ if (frameCouldMoveSet(frame))
151
+ schedule();
152
+ }, {
153
+ onSubscribed: ({ resubscribed }) => {
154
+ // Frames fanned out while the socket was down are gone, so a
155
+ // re-established feed is answered with a listing.
156
+ if (resubscribed)
157
+ schedule();
158
+ else
159
+ settled(topic);
160
+ },
161
+ onEnded: () => settled(topic),
162
+ }));
163
+ }
164
+ if (topics.length === 0)
165
+ listFirst();
166
+ return () => {
167
+ if (stopped)
168
+ return;
169
+ stopped = true;
170
+ if (timer !== null)
171
+ clearTimeout(timer);
172
+ if (firstTimer !== null)
173
+ clearTimeout(firstTimer);
174
+ for (const unsubscribe of unsubscribes)
175
+ unsubscribe();
176
+ };
177
+ }
178
+ export function createDocumentList(args) {
179
+ let changed = false;
180
+ let closed = false;
181
+ let stopWatching = null;
182
+ const listeners = new Set();
183
+ const stopWatch = () => {
184
+ stopWatching?.();
185
+ stopWatching = null;
186
+ };
187
+ const markChanged = () => {
188
+ if (changed || closed)
189
+ return;
190
+ changed = true;
191
+ stopWatch();
192
+ const fire = [...listeners];
193
+ listeners.clear();
194
+ for (const cb of fire) {
195
+ try {
196
+ cb();
197
+ }
198
+ catch (err) {
199
+ console.error('Brass: an onChanged listener threw', err);
200
+ }
201
+ }
202
+ };
203
+ const set = {
204
+ documents: args.documents,
205
+ get changed() {
206
+ return changed;
207
+ },
208
+ onChanged(cb) {
209
+ if (closed)
210
+ throw new Error('DocumentList is closed');
211
+ if (changed) {
212
+ queueMicrotask(() => {
213
+ if (!closed)
214
+ cb();
215
+ });
216
+ return () => { };
217
+ }
218
+ listeners.add(cb);
219
+ stopWatching ??= watchDocumentSet({
220
+ query: args.query,
221
+ list: args.list,
222
+ socket: args.socket,
223
+ initial: args.documents,
224
+ listener: markChanged,
225
+ });
226
+ return () => {
227
+ listeners.delete(cb);
228
+ if (listeners.size === 0)
229
+ stopWatch();
230
+ };
231
+ },
232
+ close() {
233
+ closed = true;
234
+ listeners.clear();
235
+ stopWatch();
236
+ },
237
+ };
238
+ return set;
239
+ }
240
+ //# sourceMappingURL=document-set-subscription.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document-set-subscription.js","sourceRoot":"","sources":["../src/document-set-subscription.ts"],"names":[],"mappings":"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"}
@@ -41,6 +41,7 @@ export interface DrivePublishTarget {
41
41
  detail: string;
42
42
  publishing: boolean;
43
43
  publishFailed: boolean;
44
+ unpublishable: boolean;
44
45
  }
45
46
  export declare class GoneSignal {
46
47
  private readonly _emitter;
@@ -51,9 +52,14 @@ export declare class GoneSignal {
51
52
  }
52
53
  export declare class WorkStatusSignal {
53
54
  private readonly _emitter;
55
+ private _work;
56
+ private _notice;
54
57
  get status(): DocumentWorkStatus | null;
58
+ get work(): DocumentWorkStatus | null;
59
+ get notice(): DocumentWorkStatus | null;
55
60
  on(cb: DocumentStatusListener): DocumentStatusUnsubscribe;
56
61
  emit(status: DocumentWorkStatus): void;
62
+ setNotice(notice: DocumentWorkStatus | null): void;
57
63
  clearListeners(): void;
58
64
  }
59
65
  export declare class DriveStatusSignal {
@@ -1 +1 @@
1
- {"version":3,"file":"document-signals.d.ts","sourceRoot":"","sources":["../src/document-signals.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"document-signals.d.ts","sourceRoot":"","sources":["../src/document-signals.ts"],"names":[],"mappings":"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"}
@@ -41,9 +41,18 @@ export class GoneSignal {
41
41
  this._emitter.clear();
42
42
  }
43
43
  }
44
+ const NO_WORK_STATUS = { message: '', pending: false, blocking: false };
44
45
  // Latest-retained, re-emit-per-phase signal for `doc_status`. Not one-shot:
45
46
  // phases arrive repeatedly until terminal (`pending: false`), and the latest
46
47
  // is retained so a late subscriber still sees the final state.
48
+ //
49
+ // A notice is the SDK's own status, raised over the platform's work rather
50
+ // than replacing it: `status` reads the notice while one is up, and `work`
51
+ // keeps answering what the platform reported, which is what every SDK-side
52
+ // decision about pending work reads. A work status arriving under a notice
53
+ // still reaches the listeners (the SDK's own import waiters attach here and
54
+ // wait for a terminal one), and the notice is re-emitted straight after it so
55
+ // the last thing a listener hears matches `status`.
47
56
  export class WorkStatusSignal {
48
57
  _emitter = createEmitter({
49
58
  fireOnAttach: true,
@@ -52,14 +61,34 @@ export class WorkStatusSignal {
52
61
  console.error('[Brass] onStatus listener threw:', err);
53
62
  },
54
63
  });
64
+ _work = null;
65
+ _notice = null;
55
66
  get status() {
56
- return this._emitter.retained ?? null;
67
+ return this._notice ?? this._work;
68
+ }
69
+ get work() {
70
+ return this._work;
71
+ }
72
+ get notice() {
73
+ return this._notice;
57
74
  }
58
75
  on(cb) {
59
76
  return this._emitter.on(cb);
60
77
  }
61
78
  emit(status) {
79
+ this._work = status;
62
80
  this._emitter.emit(status);
81
+ if (this._notice !== null)
82
+ this._emitter.emit(this._notice);
83
+ }
84
+ // Raise or clear the notice. Clearing hands listeners the work status it
85
+ // covered, or a terminal empty one when there is none, since a listener
86
+ // takes a status rather than `null`.
87
+ setNotice(notice) {
88
+ if (notice === this._notice)
89
+ return;
90
+ this._notice = notice;
91
+ this._emitter.emit(notice ?? this._work ?? NO_WORK_STATUS);
63
92
  }
64
93
  clearListeners() {
65
94
  this._emitter.clear();
@@ -162,6 +191,7 @@ function driveStatusEqual(a, b) {
162
191
  a.detail === b.detail &&
163
192
  a.broken === b.broken &&
164
193
  a.pushReplacesRemote === b.pushReplacesRemote &&
194
+ a.keepsPriorVersions === b.keepsPriorVersions &&
165
195
  a.mirrorDirection === b.mirrorDirection &&
166
196
  a.ref === b.ref &&
167
197
  a.refUpdatedAt === b.refUpdatedAt &&
@@ -1 +1 @@
1
- {"version":3,"file":"document-signals.js","sourceRoot":"","sources":["../src/document-signals.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"document-signals.js","sourceRoot":"","sources":["../src/document-signals.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,9 @@
1
1
  import type { Document, DocumentMutator, DocumentSubscriber, DocumentUnsubscribe, EntityProxy, RootKind } from './documents.js';
2
2
  import type { DocumentStreamInfo } from './documents-namespace.js';
3
3
  import type { DocumentGoneListener, DocumentGoneUnsubscribe, DocumentStatusListener, DocumentStatusUnsubscribe, DocumentWorkStatus } from './document-signals.js';
4
- import type { ListHandle, MapHandle, OrderedMapHandle, TextHandle } from './handle-types.js';
4
+ import type { InputDocumentHandlers, InputDocumentOptions } from './input-documents.js';
5
+ import type { ListHandle, MapHandle, MutateOptions, OrderedMapHandle, TextHandle } from './handle-types.js';
6
+ import type { InputReference } from './hosted-ui.js';
5
7
  export interface StreamRuntime {
6
8
  list(): Promise<DocumentStreamInfo[]>;
7
9
  create(name: string): Promise<DocumentStreamInfo>;
@@ -13,7 +15,11 @@ export declare class DocumentStream {
13
15
  map<T = unknown>(key: string): MapHandle<T>;
14
16
  list<T = unknown>(key: string): ListHandle<T>;
15
17
  orderedMap<T = unknown>(mapKey: string, orderKey: string): OrderedMapHandle<T>;
16
- mutate<E extends object = EntityProxy>(fn: (d: DocumentMutator<E>) => void): void;
18
+ mutate<E extends object = EntityProxy>(fn: (d: DocumentMutator<E>) => void, options?: MutateOptions): void;
19
+ /** Records the documents `key` depends on for this stream; see
20
+ * `Document.dependsOn`. A reference to any stream of this document is
21
+ * refused. */
22
+ dependsOn(key: string, refs: readonly InputReference[] | null): void;
17
23
  roots(): Record<string, RootKind>;
18
24
  text(key: string): TextHandle;
19
25
  toJSON(): Record<string, unknown>;
@@ -21,11 +27,39 @@ export declare class DocumentStream {
21
27
  get readOnly(): boolean;
22
28
  get savingCount(): number;
23
29
  get atCapacity(): boolean;
30
+ /**
31
+ * The work in flight on this stream, or `null` when there is none. Render
32
+ * `message` verbatim.
33
+ */
24
34
  get status(): DocumentWorkStatus | null;
35
+ /**
36
+ * Calls `cb` with every work-status update for this stream, and once on
37
+ * attach when a status is already known. Returns an unsubscribe.
38
+ */
25
39
  onStatus(cb: DocumentStatusListener): DocumentStatusUnsubscribe;
26
40
  onGone(cb: DocumentGoneListener): DocumentGoneUnsubscribe;
41
+ /** The input files of a key this stream records references under;
42
+ * see `Document.subscribeInputDocuments`. A stream's keys are its own,
43
+ * apart from the document's and every other stream's. */
44
+ subscribeInputDocuments(key: string, handlers: InputDocumentHandlers, options?: InputDocumentOptions): () => void;
45
+ /**
46
+ * Reverts this stream's part of the newest undo step that touched it,
47
+ * leaving the document's other streams as they are.
48
+ * @deprecated Call `doc.undo()`, which reverts the newest step in every
49
+ * stream it touched.
50
+ */
27
51
  undo(): boolean;
52
+ /**
53
+ * Re-applies this stream's part of the step it most recently undid.
54
+ * @deprecated Call `doc.redo()`.
55
+ */
28
56
  redo(): boolean;
57
+ /**
58
+ * Ends the document's open undo step, so the next local edit in any stream
59
+ * starts a new one.
60
+ * @deprecated Call `doc.createCheckpoint()` at the end of each user action,
61
+ * which also ends the step.
62
+ */
29
63
  sealUndoStep(): void;
30
64
  }
31
65
  //# sourceMappingURL=document-streams.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"document-streams.d.ts","sourceRoot":"","sources":["../src/document-streams.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACV,QAAQ,EACR,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,WAAW,EACX,QAAQ,EACT,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,KAAK,EACV,oBAAoB,EACpB,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,EACzB,kBAAkB,EACnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EACV,UAAU,EACV,SAAS,EACT,gBAAgB,EAChB,UAAU,EACX,MAAM,mBAAmB,CAAC;AAO3B,MAAM,WAAW,aAAa;IAC5B,IAAI,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACtC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAClD,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;CAC7C;AAED,qBAAa,cAAc;IAGzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAQtB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAU;IAWrC,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IAI3C,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC;IAI7C,UAAU,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC;IAI9E,MAAM,CAAC,CAAC,SAAS,MAAM,GAAG,WAAW,EACnC,EAAE,EAAE,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,KAAK,IAAI,GAClC,IAAI;IAIP,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC;IAIjC,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU;IAI7B,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAIjC,SAAS,CAAC,EAAE,EAAE,kBAAkB,GAAG,mBAAmB;IAWtD,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAMD,IAAI,WAAW,IAAI,MAAM,CAExB;IAKD,IAAI,UAAU,IAAI,OAAO,CAExB;IAID,IAAI,MAAM,IAAI,kBAAkB,GAAG,IAAI,CAEtC;IAID,QAAQ,CAAC,EAAE,EAAE,sBAAsB,GAAG,yBAAyB;IAM/D,MAAM,CAAC,EAAE,EAAE,oBAAoB,GAAG,uBAAuB;IAOzD,IAAI,IAAI,OAAO;IAIf,IAAI,IAAI,OAAO;IAUf,YAAY,IAAI,IAAI;CAoErB"}
1
+ {"version":3,"file":"document-streams.d.ts","sourceRoot":"","sources":["../src/document-streams.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACV,QAAQ,EACR,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,WAAW,EACX,QAAQ,EACT,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,KAAK,EACV,oBAAoB,EACpB,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,EACzB,kBAAkB,EACnB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACxF,OAAO,KAAK,EACV,UAAU,EACV,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,UAAU,EACX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAQrD,MAAM,WAAW,aAAa;IAC5B,IAAI,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACtC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAClD,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;CAC7C;AAED,qBAAa,cAAc;IAGzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAQtB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAU;IAWrC,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IAI3C,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC;IAI7C,UAAU,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC;IAI9E,MAAM,CAAC,CAAC,SAAS,MAAM,GAAG,WAAW,EACnC,EAAE,EAAE,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,KAAK,IAAI,EACnC,OAAO,CAAC,EAAE,aAAa,GACtB,IAAI;IAIP;;mBAEe;IACf,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,cAAc,EAAE,GAAG,IAAI,GAAG,IAAI;IAUpE,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC;IAIjC,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU;IAI7B,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAIjC,SAAS,CAAC,EAAE,EAAE,kBAAkB,GAAG,mBAAmB;IAWtD,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAYD,IAAI,WAAW,IAAI,MAAM,CAExB;IAKD,IAAI,UAAU,IAAI,OAAO,CAExB;IAED;;;OAGG;IACH,IAAI,MAAM,IAAI,kBAAkB,GAAG,IAAI,CAEtC;IAED;;;OAGG;IACH,QAAQ,CAAC,EAAE,EAAE,sBAAsB,GAAG,yBAAyB;IAM/D,MAAM,CAAC,EAAE,EAAE,oBAAoB,GAAG,uBAAuB;IAqBzD;;8DAE0D;IAC1D,uBAAuB,CACrB,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,qBAAqB,EAC/B,OAAO,CAAC,EAAE,oBAAoB,GAC7B,MAAM,IAAI;IASb;;;;;OAKG;IACH,IAAI,IAAI,OAAO;IAIf;;;OAGG;IACH,IAAI,IAAI,OAAO;IAIf;;;;;OAKG;IACH,YAAY,IAAI,IAAI;CAoErB"}
@@ -38,8 +38,19 @@ export class DocumentStream {
38
38
  orderedMap(mapKey, orderKey) {
39
39
  return this._inner.orderedMap(mapKey, orderKey);
40
40
  }
41
- mutate(fn) {
42
- this._inner.mutate(fn);
41
+ mutate(fn, options) {
42
+ this._inner.mutate(fn, options);
43
+ }
44
+ /** Records the documents `key` depends on for this stream; see
45
+ * `Document.dependsOn`. A reference to any stream of this document is
46
+ * refused. */
47
+ dependsOn(key, refs) {
48
+ this._inner.dependsOn(key, refs);
49
+ }
50
+ /** @internal Records what this reader read for the key `status` reports
51
+ * on this stream; see `Document.markRead`. */
52
+ markRead(status, options) {
53
+ this._inner.markRead(status, options);
43
54
  }
44
55
  roots() {
45
56
  return this._inner.roots();
@@ -62,6 +73,11 @@ export class DocumentStream {
62
73
  get readOnly() {
63
74
  return this._inner.readOnly;
64
75
  }
76
+ /** @internal This stream's line's `updated_at` as it was opened; see
77
+ * `Document.updatedAt`. */
78
+ get updatedAt() {
79
+ return this._inner.updatedAt;
80
+ }
65
81
  // Locally-issued ops on this stream the server has not acked yet. This
66
82
  // stream's own line: `doc.savingCount` is the one that adds the streams up,
67
83
  // and the default stream's inner IS the document, so reading that here would
@@ -75,13 +91,17 @@ export class DocumentStream {
75
91
  get atCapacity() {
76
92
  return this._inner.atCapacity;
77
93
  }
78
- // The latest opaque work-status for this stream, or `null` when no slow
79
- // server-side work is in flight. Render `message` verbatim.
94
+ /**
95
+ * The work in flight on this stream, or `null` when there is none. Render
96
+ * `message` verbatim.
97
+ */
80
98
  get status() {
81
99
  return this._inner.status;
82
100
  }
83
- // Subscribe to this stream's work-status updates. Fires once on attach when
84
- // a status is already known.
101
+ /**
102
+ * Calls `cb` with every work-status update for this stream, and once on
103
+ * attach when a status is already known. Returns an unsubscribe.
104
+ */
85
105
  onStatus(cb) {
86
106
  return this._inner.onStatus(cb);
87
107
  }
@@ -90,21 +110,52 @@ export class DocumentStream {
90
110
  onGone(cb) {
91
111
  return this._inner.onGone(cb);
92
112
  }
93
- // Per-stream undo/redo: each stream keeps its own local-edit stack
94
- // (its edits are its own CRDT commits). The doc-level `doc.undo()`
95
- // covers only the default stream.
113
+ /** @internal On a frozen copy: whether this stream has moved since it was
114
+ * read. Each stream is its own line, so each is watched on its own. */
115
+ get changed() {
116
+ return this._inner.changed;
117
+ }
118
+ /** @internal */
119
+ onChanged(cb) {
120
+ return this._inner.onChanged(cb);
121
+ }
122
+ /** @internal Typed on `ReadOnlyStream`: loads this stream as it stands now
123
+ * on a frozen copy. */
124
+ reload() {
125
+ return this._inner.reload();
126
+ }
127
+ /** The input files of a key this stream records references under;
128
+ * see `Document.subscribeInputDocuments`. A stream's keys are its own,
129
+ * apart from the document's and every other stream's. */
130
+ subscribeInputDocuments(key, handlers, options) {
131
+ return this._inner.subscribeInputDocuments(key, handlers, options);
132
+ }
133
+ /** @internal The status of a key this stream records references under. */
134
+ subscribeInputStatus(key, cb) {
135
+ return this._inner.subscribeInputStatus(key, cb);
136
+ }
137
+ /**
138
+ * Reverts this stream's part of the newest undo step that touched it,
139
+ * leaving the document's other streams as they are.
140
+ * @deprecated Call `doc.undo()`, which reverts the newest step in every
141
+ * stream it touched.
142
+ */
96
143
  undo() {
97
- return this._inner.undo();
144
+ return this._inner._replayOwnUndoStep('undo');
98
145
  }
146
+ /**
147
+ * Re-applies this stream's part of the step it most recently undid.
148
+ * @deprecated Call `doc.redo()`.
149
+ */
99
150
  redo() {
100
- return this._inner.redo();
101
- }
102
- // Seal the stream's open undo group, so the next local edit starts a
103
- // fresh undo step. Local and synchronous (no server call). Call it
104
- // when a user operation completes: commits group into one step until
105
- // sealed (the same same-stroke collapsing the doc-level undo has), so
106
- // an app that never seals gets one giant step per session. The
107
- // cross-stream operation recipe in `docs/streams.md` is built on this.
151
+ return this._inner._replayOwnUndoStep('redo');
152
+ }
153
+ /**
154
+ * Ends the document's open undo step, so the next local edit in any stream
155
+ * starts a new one.
156
+ * @deprecated Call `doc.createCheckpoint()` at the end of each user action,
157
+ * which also ends the step.
158
+ */
108
159
  sealUndoStep() {
109
160
  this._inner._sealUndoStep();
110
161
  }