@brass-build/client 0.4.1 → 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 (323) hide show
  1. package/AGENTS.md +124 -45
  2. package/CHANGELOG.md +80 -4
  3. package/README.md +666 -179
  4. package/dist/api-fetch.d.ts +8 -0
  5. package/dist/api-fetch.d.ts.map +1 -1
  6. package/dist/api-fetch.js +35 -8
  7. package/dist/api-fetch.js.map +1 -1
  8. package/dist/batched-get.d.ts +11 -0
  9. package/dist/batched-get.d.ts.map +1 -0
  10. package/dist/batched-get.js +92 -0
  11. package/dist/batched-get.js.map +1 -0
  12. package/dist/call-service.d.ts +4 -0
  13. package/dist/call-service.d.ts.map +1 -1
  14. package/dist/call-service.js +66 -3
  15. package/dist/call-service.js.map +1 -1
  16. package/dist/client.d.ts +48 -2
  17. package/dist/client.d.ts.map +1 -1
  18. package/dist/client.js +918 -115
  19. package/dist/client.js.map +1 -1
  20. package/dist/document-checkpoints.d.ts +25 -2
  21. package/dist/document-checkpoints.d.ts.map +1 -1
  22. package/dist/document-checkpoints.js +258 -61
  23. package/dist/document-checkpoints.js.map +1 -1
  24. package/dist/document-commands.d.ts.map +1 -1
  25. package/dist/document-commands.js +5 -3
  26. package/dist/document-commands.js.map +1 -1
  27. package/dist/document-contents.d.ts +10 -0
  28. package/dist/document-contents.d.ts.map +1 -1
  29. package/dist/document-contents.js +23 -1
  30. package/dist/document-contents.js.map +1 -1
  31. package/dist/document-set-subscription.d.ts +56 -0
  32. package/dist/document-set-subscription.d.ts.map +1 -0
  33. package/dist/document-set-subscription.js +240 -0
  34. package/dist/document-set-subscription.js.map +1 -0
  35. package/dist/document-signals.d.ts +6 -0
  36. package/dist/document-signals.d.ts.map +1 -1
  37. package/dist/document-signals.js +31 -1
  38. package/dist/document-signals.js.map +1 -1
  39. package/dist/document-streams.d.ts +36 -2
  40. package/dist/document-streams.d.ts.map +1 -1
  41. package/dist/document-streams.js +69 -18
  42. package/dist/document-streams.js.map +1 -1
  43. package/dist/document-thumbnail-capture.d.ts +12 -2
  44. package/dist/document-thumbnail-capture.d.ts.map +1 -1
  45. package/dist/document-thumbnail-capture.js +103 -27
  46. package/dist/document-thumbnail-capture.js.map +1 -1
  47. package/dist/documents-namespace.d.ts +92 -10
  48. package/dist/documents-namespace.d.ts.map +1 -1
  49. package/dist/documents-namespace.js +285 -39
  50. package/dist/documents-namespace.js.map +1 -1
  51. package/dist/documents.d.ts +173 -8
  52. package/dist/documents.d.ts.map +1 -1
  53. package/dist/documents.js +1778 -310
  54. package/dist/documents.js.map +1 -1
  55. package/dist/errors.d.ts +3 -3
  56. package/dist/errors.d.ts.map +1 -1
  57. package/dist/errors.js.map +1 -1
  58. package/dist/fetch-retry.d.ts +1 -0
  59. package/dist/fetch-retry.d.ts.map +1 -1
  60. package/dist/fetch-retry.js +2 -0
  61. package/dist/fetch-retry.js.map +1 -1
  62. package/dist/file-choice.d.ts +2 -0
  63. package/dist/file-choice.d.ts.map +1 -0
  64. package/dist/file-choice.js +27 -0
  65. package/dist/file-choice.js.map +1 -0
  66. package/dist/guest-link.d.ts +18 -1
  67. package/dist/guest-link.d.ts.map +1 -1
  68. package/dist/guest-link.js +329 -1
  69. package/dist/guest-link.js.map +1 -1
  70. package/dist/handle-types.d.ts +67 -5
  71. package/dist/handle-types.d.ts.map +1 -1
  72. package/dist/handles.d.ts +15 -19
  73. package/dist/handles.d.ts.map +1 -1
  74. package/dist/handles.js +231 -76
  75. package/dist/handles.js.map +1 -1
  76. package/dist/hosted-ui.d.ts +61 -0
  77. package/dist/hosted-ui.d.ts.map +1 -1
  78. package/dist/hosted-ui.js +94 -42
  79. package/dist/hosted-ui.js.map +1 -1
  80. package/dist/import-contract.d.ts +74 -0
  81. package/dist/import-contract.d.ts.map +1 -0
  82. package/dist/import-contract.js +163 -0
  83. package/dist/import-contract.js.map +1 -0
  84. package/dist/import-guest.d.ts +9 -0
  85. package/dist/import-guest.d.ts.map +1 -0
  86. package/dist/import-guest.js +155 -0
  87. package/dist/import-guest.js.map +1 -0
  88. package/dist/import-report.d.ts +17 -0
  89. package/dist/import-report.d.ts.map +1 -0
  90. package/dist/import-report.js +7 -0
  91. package/dist/import-report.js.map +1 -0
  92. package/dist/importer-wait.d.ts +2 -0
  93. package/dist/importer-wait.d.ts.map +1 -0
  94. package/dist/importer-wait.js +5 -0
  95. package/dist/importer-wait.js.map +1 -0
  96. package/dist/importer.d.ts +18 -4
  97. package/dist/importer.d.ts.map +1 -1
  98. package/dist/importer.js +322 -105
  99. package/dist/importer.js.map +1 -1
  100. package/dist/in-development.d.ts +2 -0
  101. package/dist/in-development.d.ts.map +1 -0
  102. package/dist/in-development.js +10 -0
  103. package/dist/in-development.js.map +1 -0
  104. package/dist/index.d.ts +16 -8
  105. package/dist/index.d.ts.map +1 -1
  106. package/dist/index.js +24 -8
  107. package/dist/index.js.map +1 -1
  108. package/dist/init-keys.d.ts +1 -1
  109. package/dist/init-keys.d.ts.map +1 -1
  110. package/dist/init-keys.js +6 -1
  111. package/dist/init-keys.js.map +1 -1
  112. package/dist/input-documents.d.ts +67 -0
  113. package/dist/input-documents.d.ts.map +1 -0
  114. package/dist/input-documents.js +693 -0
  115. package/dist/input-documents.js.map +1 -0
  116. package/dist/inputs-status.d.ts +80 -0
  117. package/dist/inputs-status.d.ts.map +1 -0
  118. package/dist/inputs-status.js +460 -0
  119. package/dist/inputs-status.js.map +1 -0
  120. package/dist/inputs.d.ts +2 -0
  121. package/dist/inputs.d.ts.map +1 -0
  122. package/dist/inputs.js +793 -0
  123. package/dist/inputs.js.map +1 -0
  124. package/dist/internal.d.ts +6 -1
  125. package/dist/internal.d.ts.map +1 -1
  126. package/dist/internal.js +4 -1
  127. package/dist/internal.js.map +1 -1
  128. package/dist/join-content.d.ts +33 -0
  129. package/dist/join-content.d.ts.map +1 -0
  130. package/dist/join-content.js +114 -0
  131. package/dist/join-content.js.map +1 -0
  132. package/dist/join-stamp.d.ts +3 -0
  133. package/dist/join-stamp.d.ts.map +1 -0
  134. package/dist/join-stamp.js +12 -0
  135. package/dist/join-stamp.js.map +1 -0
  136. package/dist/manifest-drift.d.ts +9 -0
  137. package/dist/manifest-drift.d.ts.map +1 -0
  138. package/dist/manifest-drift.js +46 -0
  139. package/dist/manifest-drift.js.map +1 -0
  140. package/dist/open-document.d.ts +109 -2
  141. package/dist/open-document.d.ts.map +1 -1
  142. package/dist/open-document.js +1822 -811
  143. package/dist/open-document.js.map +1 -1
  144. package/dist/page-restore.d.ts +12 -0
  145. package/dist/page-restore.d.ts.map +1 -0
  146. package/dist/page-restore.js +23 -0
  147. package/dist/page-restore.js.map +1 -0
  148. package/dist/placement.d.ts +13 -0
  149. package/dist/placement.d.ts.map +1 -0
  150. package/dist/placement.js +34 -0
  151. package/dist/placement.js.map +1 -0
  152. package/dist/presence.d.ts +1 -0
  153. package/dist/presence.d.ts.map +1 -1
  154. package/dist/presence.js +16 -4
  155. package/dist/presence.js.map +1 -1
  156. package/dist/read-only-document.d.ts +87 -0
  157. package/dist/read-only-document.d.ts.map +1 -0
  158. package/dist/read-only-document.js +4 -0
  159. package/dist/read-only-document.js.map +1 -0
  160. package/dist/record-paging.d.ts +63 -6
  161. package/dist/record-paging.d.ts.map +1 -1
  162. package/dist/record-paging.js +122 -29
  163. package/dist/record-paging.js.map +1 -1
  164. package/dist/references.d.ts +40 -0
  165. package/dist/references.d.ts.map +1 -0
  166. package/dist/references.js +135 -0
  167. package/dist/references.js.map +1 -0
  168. package/dist/request-lane.d.ts +5 -0
  169. package/dist/request-lane.d.ts.map +1 -0
  170. package/dist/request-lane.js +48 -0
  171. package/dist/request-lane.js.map +1 -0
  172. package/dist/sealed-arrow.d.ts +170 -0
  173. package/dist/sealed-arrow.d.ts.map +1 -0
  174. package/dist/sealed-arrow.js +769 -0
  175. package/dist/sealed-arrow.js.map +1 -0
  176. package/dist/sealed-cache.d.ts +21 -0
  177. package/dist/sealed-cache.d.ts.map +1 -0
  178. package/dist/sealed-cache.js +247 -0
  179. package/dist/sealed-cache.js.map +1 -0
  180. package/dist/sealed-encode.d.ts +87 -0
  181. package/dist/sealed-encode.d.ts.map +1 -0
  182. package/dist/sealed-encode.js +876 -0
  183. package/dist/sealed-encode.js.map +1 -0
  184. package/dist/sealed-handles.d.ts +45 -0
  185. package/dist/sealed-handles.d.ts.map +1 -0
  186. package/dist/sealed-handles.js +408 -0
  187. package/dist/sealed-handles.js.map +1 -0
  188. package/dist/sealed-store.d.ts +242 -0
  189. package/dist/sealed-store.d.ts.map +1 -0
  190. package/dist/sealed-store.js +1155 -0
  191. package/dist/sealed-store.js.map +1 -0
  192. package/dist/serializer.d.ts +6 -15
  193. package/dist/serializer.d.ts.map +1 -1
  194. package/dist/session-toolbar.d.ts +20 -5
  195. package/dist/session-toolbar.d.ts.map +1 -1
  196. package/dist/session-toolbar.js +419 -67
  197. package/dist/session-toolbar.js.map +1 -1
  198. package/dist/session.d.ts +38 -1
  199. package/dist/session.d.ts.map +1 -1
  200. package/dist/session.js +562 -79
  201. package/dist/session.js.map +1 -1
  202. package/dist/sha256.d.ts +3 -0
  203. package/dist/sha256.d.ts.map +1 -0
  204. package/dist/sha256.js +74 -0
  205. package/dist/sha256.js.map +1 -0
  206. package/dist/stable-handles.d.ts +19 -0
  207. package/dist/stable-handles.d.ts.map +1 -0
  208. package/dist/stable-handles.js +193 -0
  209. package/dist/stable-handles.js.map +1 -0
  210. package/dist/staged-seal.d.ts +2 -0
  211. package/dist/staged-seal.d.ts.map +1 -0
  212. package/dist/staged-seal.js +76 -0
  213. package/dist/staged-seal.js.map +1 -0
  214. package/dist/subscriber-delivery.d.ts +8 -0
  215. package/dist/subscriber-delivery.d.ts.map +1 -0
  216. package/dist/subscriber-delivery.js +31 -0
  217. package/dist/subscriber-delivery.js.map +1 -0
  218. package/dist/tail-op-import.d.ts +10 -0
  219. package/dist/tail-op-import.d.ts.map +1 -0
  220. package/dist/tail-op-import.js +33 -0
  221. package/dist/tail-op-import.js.map +1 -0
  222. package/dist/topic-lifecycle.d.ts +6 -0
  223. package/dist/topic-lifecycle.d.ts.map +1 -1
  224. package/dist/topic-lifecycle.js +32 -2
  225. package/dist/topic-lifecycle.js.map +1 -1
  226. package/dist/trial-replace-dialog.d.ts +10 -0
  227. package/dist/trial-replace-dialog.d.ts.map +1 -0
  228. package/dist/trial-replace-dialog.js +153 -0
  229. package/dist/trial-replace-dialog.js.map +1 -0
  230. package/dist/types.d.ts +8 -1
  231. package/dist/types.d.ts.map +1 -1
  232. package/dist/undo.d.ts +60 -5
  233. package/dist/undo.d.ts.map +1 -1
  234. package/dist/undo.js +344 -75
  235. package/dist/undo.js.map +1 -1
  236. package/dist/version-bar.d.ts +1 -0
  237. package/dist/version-bar.d.ts.map +1 -1
  238. package/dist/version-bar.js +2 -1
  239. package/dist/version-bar.js.map +1 -1
  240. package/dist/version.d.ts +2 -2
  241. package/dist/version.js +1 -1
  242. package/dist/ws-client.d.ts +21 -0
  243. package/dist/ws-client.d.ts.map +1 -1
  244. package/dist/ws-client.js +192 -8
  245. package/dist/ws-client.js.map +1 -1
  246. package/dist/ws-frame-limit.d.ts +1 -0
  247. package/dist/ws-frame-limit.d.ts.map +1 -1
  248. package/dist/ws-frame-limit.js.map +1 -1
  249. package/docs/app-manifest.md +121 -17
  250. package/docs/custom-chrome.md +24 -16
  251. package/docs/hosted-ui-advanced.md +38 -6
  252. package/docs/imported-documents.md +104 -51
  253. package/docs/presence.md +16 -4
  254. package/docs/schemas.md +8 -5
  255. package/docs/services.md +6 -6
  256. package/docs/streams.md +139 -150
  257. package/docs/text-fields.md +26 -19
  258. package/package.json +5 -2
  259. package/src/api-fetch.ts +53 -3
  260. package/src/auth-flow.ts +1 -1
  261. package/src/batched-get.ts +117 -0
  262. package/src/call-service.ts +78 -3
  263. package/src/client.ts +1022 -112
  264. package/src/document-checkpoints.ts +307 -65
  265. package/src/document-commands.ts +5 -5
  266. package/src/document-contents.ts +27 -1
  267. package/src/document-set-subscription.ts +274 -0
  268. package/src/document-signals.ts +47 -5
  269. package/src/document-streams.ts +85 -16
  270. package/src/document-thumbnail-capture.ts +118 -32
  271. package/src/documents-namespace.ts +539 -84
  272. package/src/documents.ts +2017 -348
  273. package/src/errors.ts +17 -6
  274. package/src/fetch-retry.ts +5 -0
  275. package/src/file-choice.ts +26 -0
  276. package/src/guest-link.ts +362 -1
  277. package/src/handle-types.ts +73 -47
  278. package/src/handles.ts +253 -83
  279. package/src/hosted-ui.ts +211 -50
  280. package/src/import-contract.ts +227 -0
  281. package/src/import-guest.ts +193 -0
  282. package/src/import-report.ts +24 -0
  283. package/src/importer-wait.ts +4 -0
  284. package/src/importer.ts +386 -131
  285. package/src/in-development.ts +10 -0
  286. package/src/index.ts +76 -16
  287. package/src/init-keys.ts +6 -1
  288. package/src/input-documents.ts +819 -0
  289. package/src/inputs-status.ts +598 -0
  290. package/src/inputs.ts +1090 -0
  291. package/src/internal.ts +7 -0
  292. package/src/join-content.ts +135 -0
  293. package/src/join-stamp.ts +12 -0
  294. package/src/manifest-drift.ts +54 -0
  295. package/src/open-document.ts +2346 -930
  296. package/src/page-restore.ts +38 -0
  297. package/src/placement.ts +54 -0
  298. package/src/presence.ts +21 -5
  299. package/src/read-only-document.ts +133 -0
  300. package/src/record-paging.ts +147 -25
  301. package/src/references.ts +207 -0
  302. package/src/request-lane.ts +59 -0
  303. package/src/sealed-arrow.ts +843 -0
  304. package/src/sealed-cache.ts +267 -0
  305. package/src/sealed-encode.ts +1015 -0
  306. package/src/sealed-handles.ts +486 -0
  307. package/src/sealed-store.ts +1330 -0
  308. package/src/serializer.ts +8 -20
  309. package/src/session-toolbar.ts +463 -72
  310. package/src/session.ts +740 -99
  311. package/src/sha256.ts +65 -0
  312. package/src/stable-handles.ts +235 -0
  313. package/src/staged-seal.ts +90 -0
  314. package/src/subscriber-delivery.ts +37 -0
  315. package/src/tail-op-import.ts +30 -0
  316. package/src/topic-lifecycle.ts +38 -2
  317. package/src/trial-replace-dialog.ts +163 -0
  318. package/src/types.ts +6 -6
  319. package/src/undo.ts +386 -73
  320. package/src/version-bar.ts +5 -1
  321. package/src/version.ts +1 -1
  322. package/src/ws-client.ts +208 -16
  323. package/src/ws-frame-limit.ts +1 -0
@@ -55,8 +55,14 @@ function gunzip(bytes) {
55
55
  * the body. Verbatim so the substrate and SDK name the same fields. */
56
56
  export const TAG_FIELD = 'type';
57
57
  export const BODY_FIELD = 'params';
58
- /** Root container keys the record store occupies on a document. */
58
+ /** Root container keys the record store occupies on a document, and the one
59
+ * `meta` entry that is not paging bookkeeping. Fixed names rather than a
60
+ * document's configurable `rootKey`: a record store is one shape wherever it
61
+ * is written, so the encoding it is written in cannot change where a reader
62
+ * looks for it. */
59
63
  export const META_KEY = 'meta';
64
+ export const SCHEMA_VERSION_KEY = 'schema_version';
65
+ export const HEADER_KEY = 'header';
60
66
  export const RECORDS_KEY = 'instances';
61
67
  export const ORDER_KEY = 'instance_order';
62
68
  /** Prefix on the `meta` key marking ONE root map paged (`meta` holds
@@ -140,9 +146,27 @@ export const PAGE_TAG = '__page__';
140
146
  * call, so no record can be mistaken for a page or a tombstone whatever it
141
147
  * holds. */
142
148
  export const RESERVED_KEY_PREFIX = 'brass:';
143
- /** Whether `key` names one of the store's own entries rather than a record. */
144
- export function isReservedKey(key) {
145
- return key.startsWith(RESERVED_KEY_PREFIX);
149
+ /** Whether `key` in the root map `rootKey` is a paged marker
150
+ * (`PAGED_ROOT_PREFIX`). `meta` is a root an app reads and writes like any
151
+ * other (an import keeps `schema_version` there), so the markers are hidden
152
+ * from every read of it and refused on write: an app that copies or clears
153
+ * `meta` generically would otherwise delete one, and every reader after that
154
+ * takes the unpaged path over a map holding pages, seeing the store's
155
+ * `brass:` keys in place of its records. A `paged:` key in any other root is
156
+ * an ordinary record key. */
157
+ export function isPagedMarkerEntry(rootKey, key) {
158
+ return rootCarriesMarkers(rootKey) && key.startsWith(PAGED_ROOT_PREFIX);
159
+ }
160
+ /** Whether the root map `rootKey` is the one the paged markers are kept in,
161
+ * so a reader can skip the per-key test on every other root. */
162
+ export function rootCarriesMarkers(rootKey) {
163
+ return rootKey === META_KEY;
164
+ }
165
+ /** Whether `key` names one of the platform's own entries rather than a record:
166
+ * the store's bookkeeping under `RESERVED_KEY_PREFIX` in any root, and, when
167
+ * the root is named, a paged marker in `meta`. */
168
+ export function isReservedKey(key, rootKey = null) {
169
+ return key.startsWith(RESERVED_KEY_PREFIX) || isPagedMarkerEntry(rootKey, key);
146
170
  }
147
171
  /** The one key a reader cannot carry as an ordinary object property.
148
172
  *
@@ -163,12 +187,16 @@ const UNCARRIABLE_RECORD_KEY = '__proto__';
163
187
  * is from the key alone. The alternative, escaping, would put the escape on
164
188
  * the read of every key of every map, paged or not, and a store that pages
165
189
  * later cannot escape what it already holds. */
166
- export function assertUsableRecordKey(key) {
190
+ export function assertUsableRecordKey(key, rootKey = null) {
167
191
  if (key === UNCARRIABLE_RECORD_KEY) {
168
192
  throw new Error(`Key "${key}" is reserved: a record key cannot be ` +
169
193
  `"${UNCARRIABLE_RECORD_KEY}", which names an object's prototype ` +
170
194
  `rather than one of its entries.`);
171
195
  }
196
+ if (isPagedMarkerEntry(rootKey, key)) {
197
+ throw new Error(`Key "${key}" is reserved: a key in "${META_KEY}" cannot start with ` +
198
+ `"${PAGED_ROOT_PREFIX}", which marks how a collection is stored.`);
199
+ }
172
200
  if (!isReservedKey(key))
173
201
  return;
174
202
  throw new Error(`Key "${key}" is reserved: a record key cannot start with ` +
@@ -213,12 +241,25 @@ export function repackRecord(packed, value) {
213
241
  record[BODY_FIELD],
214
242
  ];
215
243
  }
216
- /** The stored value a page triple carries: the value itself for a whole-value
217
- * record, else the `{ type, params }` pair a typed one was split into. */
244
+ /**
245
+ * The stored value a tag and a body carry: the body itself when there is no
246
+ * tag, else the `{ type, params }` pair a typed record was split into.
247
+ *
248
+ * A null tag is not an absent field, it is the statement that this record was
249
+ * never split: a map holds whatever its writer assigned and an app's own value
250
+ * has no tag to take off it. Every reader that rebuilds a value from the two
251
+ * comes through here, because a reader that built the pair unconditionally
252
+ * would hand an app `{ type: null, params: 5 }` where the same record read out
253
+ * of a CRDT document is `5`, which is the encoding showing through.
254
+ */
255
+ export function recordValueOf(tag, body) {
256
+ if (tag === null)
257
+ return body;
258
+ return { [TAG_FIELD]: tag, [BODY_FIELD]: body };
259
+ }
260
+ /** The stored value a page triple carries. See `recordValueOf`. */
218
261
  export function unpackRecord(packed) {
219
- if (packed[1] === null)
220
- return packed[2];
221
- return { [TAG_FIELD]: packed[1], [BODY_FIELD]: packed[2] };
262
+ return recordValueOf(packed[1], packed[2]);
222
263
  }
223
264
  /** The tag + body a page triple names, for a reader that walks the two
224
265
  * separately, or null when the triple packs a whole value that is not a
@@ -311,30 +352,54 @@ export function encodeRecordForPage(tag, body) {
311
352
  * records; the split exists only so the writer frees each parsed body
312
353
  * first. */
313
354
  export function encodePageFromEncoded(encoded, keys) {
355
+ const bytes = encodePageBytes(encoded, keys);
356
+ return {
357
+ body: strFromU8(bytes.body, true),
358
+ keys: strFromU8(bytes.keys, true),
359
+ chars: bytes.chars,
360
+ };
361
+ }
362
+ /** Encode a page to the gzip bytes `encodePageFromEncoded` widens into
363
+ * strings. Byte-identical either way, so a page written into a container and
364
+ * a page written into a byte store hold the same compressed run. */
365
+ export function encodePageBytes(encoded, keys) {
314
366
  const body = '[' + encoded.join(',') + ']';
315
367
  return {
316
- body: gzipJson(body),
317
- keys: gzipJson(JSON.stringify(keys)),
368
+ body: gzipJsonBytes(body),
369
+ keys: gzipJsonBytes(JSON.stringify(keys)),
318
370
  chars: body.length,
319
371
  };
320
372
  }
321
- function gzipJson(json) {
322
- return strFromU8(gzip(strToU8(json)), true);
373
+ /** Gzip a JSON string to raw bytes. The latin1 string a page container stores
374
+ * is these bytes widened; a store that holds bytes directly keeps them as
375
+ * they are, so one compressor serves both. */
376
+ export function gzipJsonBytes(json) {
377
+ return gzip(strToU8(json));
323
378
  }
324
- /** Parse one of a page's stored strings. Returns null for anything that does
379
+ /** Gunzip bytes holding UTF-8 text. */
380
+ export function gunzipText(bytes) {
381
+ return strFromU8(gunzip(bytes));
382
+ }
383
+ /** Parse gzipped JSON bytes as an array. Returns null for anything that does
325
384
  * not decompress to a JSON array, so a reader tolerates a corrupt or stray
326
385
  * page rather than throwing. */
327
- function decodePageField(value) {
328
- if (typeof value !== 'string')
329
- return null;
386
+ export function decodeGzippedJsonArray(bytes) {
330
387
  try {
331
- const parsed = JSON.parse(strFromU8(gunzip(strToU8(value, true))));
388
+ const parsed = JSON.parse(strFromU8(gunzip(bytes)));
332
389
  return Array.isArray(parsed) ? parsed : null;
333
390
  }
334
391
  catch {
335
392
  return null;
336
393
  }
337
394
  }
395
+ /** Parse one of a page's stored strings. Returns null for anything that does
396
+ * not decompress to a JSON array, so a reader tolerates a corrupt or stray
397
+ * page rather than throwing. */
398
+ function decodePageField(value) {
399
+ if (typeof value !== 'string')
400
+ return null;
401
+ return decodeGzippedJsonArray(strToU8(value, true));
402
+ }
338
403
  /** The record keys a page holds, from the page's own `keys` string. Reading
339
404
  * this field alone is what makes learning a store's key locations cost the
340
405
  * keys rather than every record body. */
@@ -342,8 +407,45 @@ export function decodePageKeys(keysField) {
342
407
  const parsed = decodePageField(keysField);
343
408
  if (parsed === null)
344
409
  return [];
410
+ return keyStrings(parsed);
411
+ }
412
+ /** The record keys a page holds, from the gzipped bytes of its key list. The
413
+ * same answer `decodePageKeys` gives for a container-stored page. */
414
+ export function decodePageKeyBytes(keysBytes) {
415
+ const parsed = decodeGzippedJsonArray(keysBytes);
416
+ if (parsed === null)
417
+ return [];
418
+ return keyStrings(parsed);
419
+ }
420
+ function keyStrings(parsed) {
345
421
  return parsed.filter((k) => typeof k === 'string');
346
422
  }
423
+ /** Zip a page's decoded key list and `[tag, body]` pairs back into triples. A
424
+ * key with no pair (or a pair with no key) is dropped: the two arrays are
425
+ * written together and index each other, so a length mismatch means a page
426
+ * nothing can read as records. */
427
+ function zipPageRecords(keys, pairs) {
428
+ const out = [];
429
+ for (let i = 0; i < keys.length && i < pairs.length; i += 1) {
430
+ const pair = pairs[i];
431
+ if (!Array.isArray(pair))
432
+ continue;
433
+ if (typeof pair[0] !== 'string' && pair[0] !== null)
434
+ continue;
435
+ out.push([keys[i], pair[0], pair[1]]);
436
+ }
437
+ return out;
438
+ }
439
+ /** A page's records from the gzipped bytes of its two stored strings. */
440
+ export function decodePageRecordBytes(keysBytes, bodyBytes) {
441
+ const keys = decodePageKeyBytes(keysBytes);
442
+ if (keys.length === 0)
443
+ return [];
444
+ const pairs = decodeGzippedJsonArray(bodyBytes);
445
+ if (pairs === null)
446
+ return [];
447
+ return zipPageRecords(keys, pairs);
448
+ }
347
449
  /** A page's records, zipped back into `[key, tag, body]` triples from the two
348
450
  * strings the page stores. A key with no body (or a body with no key) is
349
451
  * dropped: the two arrays are written together and index each other, so a
@@ -358,16 +460,7 @@ export function decodePageRecords(page) {
358
460
  const pairs = decodePageField(fields[BODY_FIELD]);
359
461
  if (pairs === null)
360
462
  return [];
361
- const out = [];
362
- for (let i = 0; i < keys.length && i < pairs.length; i += 1) {
363
- const pair = pairs[i];
364
- if (!Array.isArray(pair))
365
- continue;
366
- if (typeof pair[0] !== 'string' && pair[0] !== null)
367
- continue;
368
- out.push([keys[i], pair[0], pair[1]]);
369
- }
370
- return out;
463
+ return zipPageRecords(keys, pairs);
371
464
  }
372
465
  // How many bodies to weigh when estimating a population's record width. A
373
466
  // stride across the whole population rather than a prefix: a population is
@@ -1 +1 @@
1
- {"version":3,"file":"record-paging.js","sourceRoot":"","sources":["../src/record-paging.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"record-paging.js","sourceRoot":"","sources":["../src/record-paging.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ export declare function isReservedRootName(name: string): boolean;
2
+ /** The part of an input status `markRead` reads. */
3
+ export interface MarkReadStatus {
4
+ readonly key: string;
5
+ readonly changed: ReadonlyArray<{
6
+ readonly doc_id: string;
7
+ readonly change: string;
8
+ readonly updated_at?: string;
9
+ }>;
10
+ /** Each input at the version the status reports. An input `markRead`
11
+ * records from the status is recorded at this version. */
12
+ readonly inputs?: ReadonlyArray<{
13
+ readonly doc_id: string;
14
+ readonly updated_at: string;
15
+ }>;
16
+ }
17
+ /** A document `markRead` records as read: a copy this app opened, recorded at
18
+ * the `updatedAt` it was opened at. */
19
+ export interface MarkReadHandle {
20
+ readonly id: string | null;
21
+ readonly updatedAt: string | null;
22
+ readonly status: {
23
+ readonly pending: boolean;
24
+ } | null;
25
+ }
26
+ /** A file `markRead` records as read from the status that reported it: an
27
+ * entry of its `files` or `changed`, recorded at the version the status
28
+ * reports. */
29
+ export interface MarkReadEntry {
30
+ readonly doc_id: string;
31
+ }
32
+ /** What `markRead` records, and whether it joins the Undo step. */
33
+ export interface MarkReadOptions {
34
+ /** The files to record. Defaults to every file the status lists as added
35
+ * or modified. */
36
+ readonly files?: ReadonlyArray<MarkReadHandle | MarkReadEntry>;
37
+ /** `false` keeps the marks off the Undo stack. Defaults to `true`. */
38
+ readonly undoable?: boolean;
39
+ }
40
+ //# sourceMappingURL=references.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"references.d.ts","sourceRoot":"","sources":["../src/references.ts"],"names":[],"mappings":"AAuBA,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAExD;AA2ID,oDAAoD;AACpD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;QAC9B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;KAC9B,CAAC,CAAC;IACH;+DAC2D;IAC3D,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,CAAC;QAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC3F;AAED;wCACwC;AACxC,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;CACvD;AAED;;eAEe;AACf,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,mEAAmE;AACnE,MAAM,WAAW,eAAe;IAC9B;uBACmB;IACnB,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC,cAAc,GAAG,aAAa,CAAC,CAAC;IAC/D,sEAAsE;IACtE,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B"}
@@ -0,0 +1,135 @@
1
+ // The SDK's side of a document's references and read marks: the root names
2
+ // it keeps from apps, the mark that acknowledges a removed input, and the
3
+ // provisional post that follows an acknowledged change. The shapes and write
4
+ // rules are the platform contract's, through the SDK's copy in `inputs.ts`.
5
+ import { inputReadMarkAfter, isInputLineId, parseInputReadEntryKey, } from './inputs.js';
6
+ /**
7
+ * Root names the platform keeps for itself, the two input roots among them.
8
+ * They are refused as names an app passes to `doc.map` / `doc.list` /
9
+ * `doc.text`, and every app-visible enumeration of a document's roots leaves
10
+ * them out.
11
+ */
12
+ const RESERVED_ROOT_PREFIX = '__brass_';
13
+ export function isReservedRootName(name) {
14
+ return name.startsWith(RESERVED_ROOT_PREFIX);
15
+ }
16
+ /**
17
+ * @internal
18
+ * Posts each key's provisional entry once every op carrying its latest change
19
+ * is acknowledged with a seq. A later change to a key replaces the post an
20
+ * earlier one was waiting to make, and a refused op cancels the post it
21
+ * carried. A post's outcome never reaches the document: the platform
22
+ * projects the key from the document itself either way.
23
+ */
24
+ export class ProvisionalInputsTracker {
25
+ _poster = null;
26
+ _onAnswer = null;
27
+ // One commit can change several keys, so one op can carry several posts.
28
+ _byOp = new Map();
29
+ _byKey = new Map();
30
+ // The post each key last sent, which a retry of an earlier one defers to.
31
+ _sent = new Map();
32
+ setPoster(poster) {
33
+ this._poster = poster;
34
+ }
35
+ /** Hears each answer a post receives: the key's row revision after it. */
36
+ onAnswer(listener) {
37
+ this._onAnswer = listener;
38
+ }
39
+ /** Wait for the ops a commit shipped, then post `state` for `key`. */
40
+ register(key, lineId, state, clientOpIds) {
41
+ if (this._poster === null || !isInputLineId(lineId) || clientOpIds.length === 0)
42
+ return;
43
+ this._drop(this._byKey.get(key));
44
+ const pending = { key, lineId, state, awaiting: new Set(clientOpIds), seq: 0 };
45
+ this._byKey.set(key, pending);
46
+ for (const id of clientOpIds) {
47
+ const posts = this._byOp.get(id) ?? new Set();
48
+ posts.add(pending);
49
+ this._byOp.set(id, posts);
50
+ }
51
+ }
52
+ acked(clientOpId, seq) {
53
+ const posts = this._byOp.get(clientOpId);
54
+ if (posts === undefined)
55
+ return;
56
+ this._byOp.delete(clientOpId);
57
+ for (const pending of posts)
58
+ this._ackedFor(pending, clientOpId, seq);
59
+ }
60
+ _ackedFor(pending, clientOpId, seq) {
61
+ if (seq === undefined) {
62
+ this._drop(pending);
63
+ return;
64
+ }
65
+ pending.awaiting.delete(clientOpId);
66
+ pending.seq = Math.max(pending.seq, seq);
67
+ if (pending.awaiting.size > 0)
68
+ return;
69
+ this._drop(pending);
70
+ const poster = this._poster;
71
+ if (poster === null || pending.seq < 1)
72
+ return;
73
+ const post = {
74
+ key: pending.key,
75
+ body: {
76
+ branch_id: pending.lineId,
77
+ op_seq: pending.seq,
78
+ refs: pending.state.refs,
79
+ read: pending.state.read,
80
+ },
81
+ };
82
+ this._sent.set(post.key, post);
83
+ const superseded = () => this._sent.get(post.key) !== post;
84
+ try {
85
+ void poster(post, { superseded })
86
+ .then((answer) => {
87
+ if (!superseded())
88
+ this._sent.delete(post.key);
89
+ if (answer !== null && answer.key === post.key)
90
+ this._onAnswer?.(answer);
91
+ })
92
+ .catch(() => undefined);
93
+ }
94
+ catch {
95
+ // The post is best-effort; the document already holds the change.
96
+ }
97
+ }
98
+ failed(clientOpId) {
99
+ for (const pending of this._byOp.get(clientOpId) ?? [])
100
+ this._drop(pending);
101
+ }
102
+ clear() {
103
+ this._byOp.clear();
104
+ this._byKey.clear();
105
+ this._sent.clear();
106
+ }
107
+ _drop(pending) {
108
+ if (pending === undefined)
109
+ return;
110
+ for (const id of pending.awaiting) {
111
+ const posts = this._byOp.get(id);
112
+ posts?.delete(pending);
113
+ if (posts?.size === 0)
114
+ this._byOp.delete(id);
115
+ }
116
+ pending.awaiting.clear();
117
+ if (this._byKey.get(pending.key) === pending)
118
+ this._byKey.delete(pending.key);
119
+ }
120
+ }
121
+ /** @internal The latest mark this copy holds for `docId` under `key`, or null. */
122
+ export function latestReadMark(readRoot, key, docId) {
123
+ let latest = null;
124
+ for (const [entryKey, value] of Object.entries(readRoot)) {
125
+ if (value !== true)
126
+ continue;
127
+ const parsed = parseInputReadEntryKey(entryKey);
128
+ if (parsed?.key !== key || parsed.docId !== docId)
129
+ continue;
130
+ if (latest === null || inputReadMarkAfter(parsed.mark, latest))
131
+ latest = parsed.mark;
132
+ }
133
+ return latest;
134
+ }
135
+ //# sourceMappingURL=references.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"references.js","sourceRoot":"","sources":["../src/references.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export interface RequestLane {
2
+ run<T>(key: string, send: () => Promise<T>): Promise<T>;
3
+ }
4
+ export declare function createRequestLane(limit: number): RequestLane;
5
+ //# sourceMappingURL=request-lane.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-lane.d.ts","sourceRoot":"","sources":["../src/request-lane.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CACzD;AASD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,WAAW,CAwC5D"}
@@ -0,0 +1,48 @@
1
+ // A bounded queue for one kind of read. At most `limit` requests run at once
2
+ // and the rest wait in order. Calls with the same key that arrive while one
3
+ // for that key is still WAITING share it, since nothing has been sent yet and
4
+ // the answer it brings back is as fresh as a request of their own would be.
5
+ // A call arriving after its key's request has started sends its own, so a
6
+ // read that follows a write never answers with what the server held before.
7
+ export function createRequestLane(limit) {
8
+ const queue = [];
9
+ const waiting = new Map();
10
+ let running = 0;
11
+ const pump = () => {
12
+ while (running < limit && queue.length > 0) {
13
+ const key = queue.shift();
14
+ const entry = waiting.get(key);
15
+ waiting.delete(key);
16
+ running += 1;
17
+ let sent;
18
+ try {
19
+ sent = entry.send();
20
+ }
21
+ catch (err) {
22
+ sent = Promise.reject(err);
23
+ }
24
+ sent.then(entry.resolve, entry.reject).finally(() => {
25
+ running -= 1;
26
+ pump();
27
+ });
28
+ }
29
+ };
30
+ return {
31
+ run(key, send) {
32
+ const pending = waiting.get(key);
33
+ if (pending !== undefined)
34
+ return pending.promise;
35
+ let resolve;
36
+ let reject;
37
+ const promise = new Promise((res, rej) => {
38
+ resolve = res;
39
+ reject = rej;
40
+ });
41
+ waiting.set(key, { send, promise, resolve, reject });
42
+ queue.push(key);
43
+ pump();
44
+ return promise;
45
+ },
46
+ };
47
+ }
48
+ //# sourceMappingURL=request-lane.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-lane.js","sourceRoot":"","sources":["../src/request-lane.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,4EAA4E;AAC5E,8EAA8E;AAC9E,4EAA4E;AAC5E,0EAA0E;AAC1E,4EAA4E;AAa5E,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAmB,CAAC;IAC3C,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,MAAM,IAAI,GAAG,GAAS,EAAE;QACtB,OAAO,OAAO,GAAG,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3C,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,EAAG,CAAC;YAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;YAChC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACpB,OAAO,IAAI,CAAC,CAAC;YACb,IAAI,IAAsB,CAAC;YAC3B,IAAI,CAAC;gBACH,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;YACtB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7B,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;gBAClD,OAAO,IAAI,CAAC,CAAC;gBACb,IAAI,EAAE,CAAC;YACT,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;IAEF,OAAO;QACL,GAAG,CAAI,GAAW,EAAE,IAAsB;YACxC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACjC,IAAI,OAAO,KAAK,SAAS;gBAAE,OAAO,OAAO,CAAC,OAAqB,CAAC;YAChE,IAAI,OAAkC,CAAC;YACvC,IAAI,MAA+B,CAAC;YACpC,MAAM,OAAO,GAAG,IAAI,OAAO,CAAU,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;gBAChD,OAAO,GAAG,GAAG,CAAC;gBACd,MAAM,GAAG,GAAG,CAAC;YACf,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YACrD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAChB,IAAI,EAAE,CAAC;YACP,OAAO,OAAqB,CAAC;QAC/B,CAAC;KACF,CAAC;AACJ,CAAC"}