@graview/core 0.1.49 → 0.1.51

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 (255) hide show
  1. package/dist/answer-seen.js +2 -2
  2. package/dist/answer-seen.js.map +1 -1
  3. package/dist/app.d.ts +11 -0
  4. package/dist/app.d.ts.map +1 -1
  5. package/dist/app.js.map +1 -1
  6. package/dist/capabilities.d.ts +7 -1
  7. package/dist/capabilities.d.ts.map +1 -1
  8. package/dist/capabilities.js.map +1 -1
  9. package/dist/cli/check/index.d.ts +1 -0
  10. package/dist/cli/check/index.d.ts.map +1 -1
  11. package/dist/cli/check/index.js +1 -0
  12. package/dist/cli/check/index.js.map +1 -1
  13. package/dist/cli/check/publishing.d.ts +13 -0
  14. package/dist/cli/check/publishing.d.ts.map +1 -0
  15. package/dist/cli/check/publishing.js +36 -0
  16. package/dist/cli/check/publishing.js.map +1 -0
  17. package/dist/cli/check.d.ts.map +1 -1
  18. package/dist/cli/check.js +2 -1
  19. package/dist/cli/check.js.map +1 -1
  20. package/dist/cli/describe.d.ts.map +1 -1
  21. package/dist/cli/describe.js +15 -0
  22. package/dist/cli/describe.js.map +1 -1
  23. package/dist/cli/index.d.ts +1 -0
  24. package/dist/cli/index.d.ts.map +1 -1
  25. package/dist/cli/index.js +3 -1
  26. package/dist/cli/index.js.map +1 -1
  27. package/dist/document/compiled.d.ts.map +1 -1
  28. package/dist/document/compiled.js +5 -0
  29. package/dist/document/compiled.js.map +1 -1
  30. package/dist/document/field-spec.d.ts.map +1 -1
  31. package/dist/document/field-spec.js +8 -2
  32. package/dist/document/field-spec.js.map +1 -1
  33. package/dist/document/format-findings.d.ts.map +1 -1
  34. package/dist/document/format-findings.js +5 -0
  35. package/dist/document/format-findings.js.map +1 -1
  36. package/dist/document/schema.d.ts +13 -0
  37. package/dist/document/schema.d.ts.map +1 -1
  38. package/dist/document/schema.js +16 -0
  39. package/dist/document/schema.js.map +1 -1
  40. package/dist/document/to-document.d.ts.map +1 -1
  41. package/dist/document/to-document.js +1 -0
  42. package/dist/document/to-document.js.map +1 -1
  43. package/dist/document.schema.json +42 -2
  44. package/dist/field-sight.js +5 -4
  45. package/dist/field-sight.js.map +1 -1
  46. package/dist/format-error.d.ts +54 -0
  47. package/dist/format-error.d.ts.map +1 -0
  48. package/dist/format-error.js +73 -0
  49. package/dist/format-error.js.map +1 -0
  50. package/dist/formats.d.ts +16 -13
  51. package/dist/formats.d.ts.map +1 -1
  52. package/dist/formats.js +18 -17
  53. package/dist/formats.js.map +1 -1
  54. package/dist/graph/diff.js +1 -1
  55. package/dist/graph/diff.js.map +1 -1
  56. package/dist/graph/edge-fields.d.ts +20 -0
  57. package/dist/graph/edge-fields.d.ts.map +1 -0
  58. package/dist/graph/edge-fields.js +21 -0
  59. package/dist/graph/edge-fields.js.map +1 -0
  60. package/dist/graph/graph.d.ts +3 -0
  61. package/dist/graph/graph.d.ts.map +1 -1
  62. package/dist/graph/graph.js +57 -4
  63. package/dist/graph/graph.js.map +1 -1
  64. package/dist/graph/primitives.d.ts +22 -2
  65. package/dist/graph/primitives.d.ts.map +1 -1
  66. package/dist/graph/primitives.js +20 -0
  67. package/dist/graph/primitives.js.map +1 -1
  68. package/dist/graph/types.d.ts +15 -1
  69. package/dist/graph/types.d.ts.map +1 -1
  70. package/dist/graph/types.js +0 -0
  71. package/dist/graph/types.js.map +1 -1
  72. package/dist/history.d.ts +68 -3
  73. package/dist/history.d.ts.map +1 -1
  74. package/dist/history.js +68 -8
  75. package/dist/history.js.map +1 -1
  76. package/dist/index.d.ts +17 -7
  77. package/dist/index.d.ts.map +1 -1
  78. package/dist/index.js +11 -2
  79. package/dist/index.js.map +1 -1
  80. package/dist/integrity.d.ts.map +1 -1
  81. package/dist/integrity.js +2 -1
  82. package/dist/integrity.js.map +1 -1
  83. package/dist/linked.d.ts +1 -0
  84. package/dist/linked.d.ts.map +1 -1
  85. package/dist/linked.js +1 -0
  86. package/dist/linked.js.map +1 -1
  87. package/dist/mutations/define-mutation.d.ts +4 -0
  88. package/dist/mutations/define-mutation.d.ts.map +1 -1
  89. package/dist/mutations/define-mutation.js +32 -8
  90. package/dist/mutations/define-mutation.js.map +1 -1
  91. package/dist/mutations/keep-link.d.ts.map +1 -1
  92. package/dist/mutations/keep-link.js +4 -2
  93. package/dist/mutations/keep-link.js.map +1 -1
  94. package/dist/mutations/type-text.d.ts +52 -0
  95. package/dist/mutations/type-text.d.ts.map +1 -0
  96. package/dist/mutations/type-text.js +107 -0
  97. package/dist/mutations/type-text.js.map +1 -0
  98. package/dist/mutations/types.d.ts +8 -0
  99. package/dist/mutations/types.d.ts.map +1 -1
  100. package/dist/mutations/visitor-form.js +1 -1
  101. package/dist/mutations/visitor-form.js.map +1 -1
  102. package/dist/ops/digest.d.ts +40 -6
  103. package/dist/ops/digest.d.ts.map +1 -1
  104. package/dist/ops/digest.js +79 -16
  105. package/dist/ops/digest.js.map +1 -1
  106. package/dist/ops/kept-fields.d.ts +1 -1
  107. package/dist/ops/kept-fields.d.ts.map +1 -1
  108. package/dist/ops/kept-fields.js +4 -1
  109. package/dist/ops/kept-fields.js.map +1 -1
  110. package/dist/ops/log.d.ts.map +1 -1
  111. package/dist/ops/log.js +3 -0
  112. package/dist/ops/log.js.map +1 -1
  113. package/dist/ops/provenance.d.ts.map +1 -1
  114. package/dist/ops/provenance.js +3 -1
  115. package/dist/ops/provenance.js.map +1 -1
  116. package/dist/ops/revisions.d.ts +8 -2
  117. package/dist/ops/revisions.d.ts.map +1 -1
  118. package/dist/ops/revisions.js +12 -3
  119. package/dist/ops/revisions.js.map +1 -1
  120. package/dist/ops/served.d.ts.map +1 -1
  121. package/dist/ops/served.js +30 -4
  122. package/dist/ops/served.js.map +1 -1
  123. package/dist/ops/suggestions.d.ts +14 -0
  124. package/dist/ops/suggestions.d.ts.map +1 -1
  125. package/dist/ops/suggestions.js.map +1 -1
  126. package/dist/ops/types.d.ts +43 -3
  127. package/dist/ops/types.d.ts.map +1 -1
  128. package/dist/ops/types.js +16 -1
  129. package/dist/ops/types.js.map +1 -1
  130. package/dist/ops/undo.d.ts +15 -2
  131. package/dist/ops/undo.d.ts.map +1 -1
  132. package/dist/ops/undo.js +22 -3
  133. package/dist/ops/undo.js.map +1 -1
  134. package/dist/ops/withheld.d.ts.map +1 -1
  135. package/dist/ops/withheld.js +4 -0
  136. package/dist/ops/withheld.js.map +1 -1
  137. package/dist/ops/writers.d.ts.map +1 -1
  138. package/dist/ops/writers.js +3 -0
  139. package/dist/ops/writers.js.map +1 -1
  140. package/dist/past.d.ts +1 -0
  141. package/dist/past.d.ts.map +1 -1
  142. package/dist/past.js +9 -2
  143. package/dist/past.js.map +1 -1
  144. package/dist/persistence/memory.d.ts +1 -1
  145. package/dist/persistence/memory.d.ts.map +1 -1
  146. package/dist/persistence/memory.js +5 -1
  147. package/dist/persistence/memory.js.map +1 -1
  148. package/dist/persistence/sql.d.ts +1 -1
  149. package/dist/persistence/sql.d.ts.map +1 -1
  150. package/dist/persistence/sql.js +45 -5
  151. package/dist/persistence/sql.js.map +1 -1
  152. package/dist/persistence/sqlite.d.ts +1 -0
  153. package/dist/persistence/sqlite.d.ts.map +1 -1
  154. package/dist/persistence/sqlite.js +1 -0
  155. package/dist/persistence/sqlite.js.map +1 -1
  156. package/dist/persistence/types.d.ts +34 -1
  157. package/dist/persistence/types.d.ts.map +1 -1
  158. package/dist/persistence/types.js +35 -1
  159. package/dist/persistence/types.js.map +1 -1
  160. package/dist/presence.d.ts +20 -1
  161. package/dist/presence.d.ts.map +1 -1
  162. package/dist/presence.js +4 -2
  163. package/dist/presence.js.map +1 -1
  164. package/dist/publish.d.ts +78 -0
  165. package/dist/publish.d.ts.map +1 -0
  166. package/dist/publish.js +23 -0
  167. package/dist/publish.js.map +1 -0
  168. package/dist/publishing.d.ts +10 -0
  169. package/dist/publishing.d.ts.map +1 -0
  170. package/dist/publishing.js +168 -0
  171. package/dist/publishing.js.map +1 -0
  172. package/dist/refused.d.ts +13 -6
  173. package/dist/refused.d.ts.map +1 -1
  174. package/dist/refused.js +13 -6
  175. package/dist/refused.js.map +1 -1
  176. package/dist/schema/collaborative-of.d.ts +11 -0
  177. package/dist/schema/collaborative-of.d.ts.map +1 -0
  178. package/dist/schema/collaborative-of.js +45 -0
  179. package/dist/schema/collaborative-of.js.map +1 -0
  180. package/dist/schema/collaborative.d.ts +12 -0
  181. package/dist/schema/collaborative.d.ts.map +1 -0
  182. package/dist/schema/collaborative.js +28 -0
  183. package/dist/schema/collaborative.js.map +1 -0
  184. package/dist/seen.d.ts +44 -1
  185. package/dist/seen.d.ts.map +1 -1
  186. package/dist/seen.js +59 -14
  187. package/dist/seen.js.map +1 -1
  188. package/dist/store.d.ts +79 -5
  189. package/dist/store.d.ts.map +1 -1
  190. package/dist/store.js +138 -32
  191. package/dist/store.js.map +1 -1
  192. package/dist/subscription-shape.d.ts +21 -1
  193. package/dist/subscription-shape.d.ts.map +1 -1
  194. package/dist/subscription-shape.js.map +1 -1
  195. package/dist/subscriptions.d.ts +33 -1
  196. package/dist/subscriptions.d.ts.map +1 -1
  197. package/dist/subscriptions.js +155 -18
  198. package/dist/subscriptions.js.map +1 -1
  199. package/dist/sync/engine.d.ts.map +1 -1
  200. package/dist/sync/engine.js +43 -15
  201. package/dist/sync/engine.js.map +1 -1
  202. package/dist/sync/index.d.ts +1 -1
  203. package/dist/sync/index.d.ts.map +1 -1
  204. package/dist/sync/index.js +1 -1
  205. package/dist/sync/index.js.map +1 -1
  206. package/dist/sync/types.d.ts +10 -0
  207. package/dist/sync/types.d.ts.map +1 -1
  208. package/dist/sync/types.js +8 -0
  209. package/dist/sync/types.js.map +1 -1
  210. package/dist/testing.d.ts.map +1 -1
  211. package/dist/testing.js +1 -0
  212. package/dist/testing.js.map +1 -1
  213. package/dist/text/diff.d.ts +10 -0
  214. package/dist/text/diff.d.ts.map +1 -0
  215. package/dist/text/diff.js +26 -0
  216. package/dist/text/diff.js.map +1 -0
  217. package/dist/text/since.d.ts +38 -0
  218. package/dist/text/since.d.ts.map +1 -0
  219. package/dist/text/since.js +88 -0
  220. package/dist/text/since.js.map +1 -0
  221. package/dist/text/splice.d.ts +39 -0
  222. package/dist/text/splice.d.ts.map +1 -0
  223. package/dist/text/splice.js +46 -0
  224. package/dist/text/splice.js.map +1 -0
  225. package/dist/text/transform.d.ts +14 -0
  226. package/dist/text/transform.d.ts.map +1 -0
  227. package/dist/text/transform.js +59 -0
  228. package/dist/text/transform.js.map +1 -0
  229. package/dist/text/typing-hook.d.ts +43 -0
  230. package/dist/text/typing-hook.d.ts.map +1 -0
  231. package/dist/text/typing-hook.js +16 -0
  232. package/dist/text/typing-hook.js.map +1 -0
  233. package/dist/text/typing-spans.d.ts +11 -0
  234. package/dist/text/typing-spans.d.ts.map +1 -0
  235. package/dist/text/typing-spans.js +35 -0
  236. package/dist/text/typing-spans.js.map +1 -0
  237. package/dist/text/typing-words.d.ts +45 -0
  238. package/dist/text/typing-words.d.ts.map +1 -0
  239. package/dist/text/typing-words.js +85 -0
  240. package/dist/text/typing-words.js.map +1 -0
  241. package/dist/tidying.d.ts +3 -3
  242. package/dist/tidying.d.ts.map +1 -1
  243. package/dist/tidying.js +1 -1
  244. package/dist/tidying.js.map +1 -1
  245. package/dist/typing.d.ts +4 -0
  246. package/dist/typing.d.ts.map +1 -0
  247. package/dist/typing.js +204 -0
  248. package/dist/typing.js.map +1 -0
  249. package/dist/version.d.ts +1 -1
  250. package/dist/version.js +1 -1
  251. package/dist/who.d.ts +1 -1
  252. package/dist/who.d.ts.map +1 -1
  253. package/dist/who.js +5 -2
  254. package/dist/who.js.map +1 -1
  255. package/package.json +12 -2
@@ -8,6 +8,6 @@ export { SyncEngine } from "./engine.js";
8
8
  export type { SettledConflict, SyncOptions, SyncRefusal, SyncReport } from "./engine.js";
9
9
  export { allowTools, doorClient, mcpClient, mcpDoor, mcpRemote, ownHost, sameOrigin } from "./mcp.js";
10
10
  export type { DoorHeaders, DoorRequest, DoorResponse, McpClientOptions, McpDoorOptions, McpRemoteOptions, ToolCall } from "./mcp.js";
11
- export { EMPTY_SYNC_STATE, systemAuthor } from "./types.js";
11
+ export { EMPTY_SYNC_STATE, SYNC_STATE_FORMAT, systemAuthor } from "./types.js";
12
12
  export type { ConflictPolicy, DeletedConflict, FieldConflict, RemoteAck, RemoteChange, RemoteLink, RemoteSystem, RemoteWrite, ResourceMapping, SyncConflict, SyncMapping, SyncState, } from "./types.js";
13
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,UAAU,EAAE,iBAAiB,EAAE,WAAW,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7J,YAAY,EAAE,UAAU,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACxF,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7E,YAAY,EAAE,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/F,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACtE,YAAY,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzF,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtG,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACrI,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC5D,YAAY,EACV,cAAc,EACd,eAAe,EACf,aAAa,EACb,SAAS,EACT,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,WAAW,EACX,eAAe,EACf,YAAY,EACZ,WAAW,EACX,SAAS,GACV,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,UAAU,EAAE,iBAAiB,EAAE,WAAW,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7J,YAAY,EAAE,UAAU,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACxF,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7E,YAAY,EAAE,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/F,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACtE,YAAY,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,YAAY,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzF,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtG,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACrI,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/E,YAAY,EACV,cAAc,EACd,eAAe,EACf,aAAa,EACb,SAAS,EACT,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,WAAW,EACX,eAAe,EACf,YAAY,EACZ,WAAW,EACX,SAAS,GACV,MAAM,YAAY,CAAC"}
@@ -12,5 +12,5 @@ export { googleCalendar, googleCalendarMapping } from "./google-calendar.js";
12
12
  export { syncConflictInvariant, SYNC_CONFLICTS } from "./conflict.js";
13
13
  export { SyncEngine } from "./engine.js";
14
14
  export { allowTools, doorClient, mcpClient, mcpDoor, mcpRemote, ownHost, sameOrigin } from "./mcp.js";
15
- export { EMPTY_SYNC_STATE, systemAuthor } from "./types.js";
15
+ export { EMPTY_SYNC_STATE, SYNC_STATE_FORMAT, systemAuthor } from "./types.js";
16
16
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,UAAU,EAAE,iBAAiB,EAAE,WAAW,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7J,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE7E,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEtE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtG,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,UAAU,EAAE,iBAAiB,EAAE,WAAW,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7J,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE7E,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEtE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtG,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
@@ -120,8 +120,18 @@ export interface RemoteSystem {
120
120
  }>;
121
121
  push(writes: readonly RemoteWrite[]): Promise<readonly RemoteAck[]>;
122
122
  }
123
+ /**
124
+ * THE FORMAT A SYNC STATE IS WRITTEN IN. A host keeps a `SyncState` between
125
+ * runs — a file, a row — so it is a stored format like a snapshot: stamped
126
+ * with the format this build writes, and refused by a build that reads an
127
+ * older one (`NewerFormatError`) rather than run on links it would misread.
128
+ * A state without a stamp, written before it existed, is format 1.
129
+ */
130
+ export declare const SYNC_STATE_FORMAT = 1;
123
131
  /** What the engine remembers between runs. */
124
132
  export interface SyncState {
133
+ /** The format it was written in (`SYNC_STATE_FORMAT`); absent on a state written before stamps, which is format 1. */
134
+ readonly format?: number;
125
135
  readonly cursor?: string;
126
136
  /** Local id → what the remote knows about it. */
127
137
  readonly links: Readonly<Record<string, RemoteLink>>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/sync/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/sync/types.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,11 @@
1
+ /**
2
+ * THE FORMAT A SYNC STATE IS WRITTEN IN. A host keeps a `SyncState` between
3
+ * runs — a file, a row — so it is a stored format like a snapshot: stamped
4
+ * with the format this build writes, and refused by a build that reads an
5
+ * older one (`NewerFormatError`) rather than run on links it would misread.
6
+ * A state without a stamp, written before it existed, is format 1.
7
+ */
8
+ export const SYNC_STATE_FORMAT = 1;
1
9
  export const EMPTY_SYNC_STATE = { links: {}, outbox: [] };
2
10
  /** The author every inbound change is attributed to. */
3
11
  export function systemAuthor(system) {
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/sync/types.ts"],"names":[],"mappings":"AAgKA,MAAM,CAAC,MAAM,gBAAgB,GAAc,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AAErE,wDAAwD;AACxD,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;AACxC,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/sync/types.ts"],"names":[],"mappings":"AAmIA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAiCnC,MAAM,CAAC,MAAM,gBAAgB,GAAc,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AAErE,wDAAwD;AACxD,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;AACxC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAGA,OAAO,EAAa,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;AAMtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGnC,OAAO,EAAe,KAAK,OAAO,IAAI,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEtF;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,MAAM,WAAW,cAAc;IAC7B,4EAA4E;IAC5E,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,iFAAiF;IACjF,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,sEAAsE;IACtE,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,6EAA6E;IAC7E,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACpC;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AA6CD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,OAAO,GAAE,cAAmB,GAAG,UAAU,CAyEnE;AA6CD;;;;;;;;GAQG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACnD;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,GAAE,MAAM,GAAG,mBAAwB,GAAG,aAAa,CA+BvG;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IACzB,4BAA4B;IAC5B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,4CAA4C;IAC5C,QAAQ,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC;IAC9B,2EAA2E;IAC3E,QAAQ,CAAC,QAAQ,EAAE,SAAS,eAAe,EAAE,CAAC;IAC9C,+CAA+C;IAC/C,KAAK,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;CAC3B;AAcD,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG,EAAE,OAAO,GAAE;IAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,MAAM,CAAA;CAAO,GAAG,aAAa,CAoBzJ"}
1
+ {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAGA,OAAO,EAAa,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;AAMtD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGnC,OAAO,EAAe,KAAK,OAAO,IAAI,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEtF;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,MAAM,WAAW,cAAc;IAC7B,4EAA4E;IAC5E,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,iFAAiF;IACjF,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,sEAAsE;IACtE,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,6EAA6E;IAC7E,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACpC;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AA6CD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,OAAO,GAAE,cAAmB,GAAG,UAAU,CAyEnE;AA6CD;;;;;;;;GAQG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACnD;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,UAAU,EAAE,OAAO,GAAE,MAAM,GAAG,mBAAwB,GAAG,aAAa,CA+BvG;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IACzB,4BAA4B;IAC5B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,4CAA4C;IAC5C,QAAQ,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC;IAC9B,2EAA2E;IAC3E,QAAQ,CAAC,QAAQ,EAAE,SAAS,eAAe,EAAE,CAAC;IAC9C,+CAA+C;IAC/C,KAAK,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;CAC3B;AAcD,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG,EAAE,OAAO,GAAE;IAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,MAAM,CAAA;CAAO,GAAG,aAAa,CAqBzJ"}
package/dist/testing.js CHANGED
@@ -228,6 +228,7 @@ export function compileDocumentFiles(document, options = {}) {
228
228
  invariants: (app.invariants ?? []),
229
229
  ...(seed ? { snapshot: structuredClone(seed) } : {}),
230
230
  ...(app.policy ? { policy: app.policy } : {}),
231
+ ...(app.publishing ? { publishing: app.publishing } : {}),
231
232
  }),
232
233
  };
233
234
  }
@@ -1 +1 @@
1
- {"version":3,"file":"testing.js","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"testing.js","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { TextSplice } from "./splice.js";
2
+ /**
3
+ * THE ONE SPLICE THAT TURNS `before` INTO `after`: what they share at the
4
+ * start and at the end is left alone, and the middle is replaced. A page
5
+ * that only knows the field's value before and after a keystroke says the
6
+ * keystroke this way. Never cuts a surrogate pair in two, so an emoji is
7
+ * removed or inserted whole.
8
+ */
9
+ export declare function diffSplice(before: string, after: string): TextSplice;
10
+ //# sourceMappingURL=diff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/text/diff.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAM9C;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,CAUpE"}
@@ -0,0 +1,26 @@
1
+ /** Whether a UTF-16 code unit is the first, or the second, half of a surrogate pair. */
2
+ const high = (code) => code >= 0xd800 && code <= 0xdbff;
3
+ const low = (code) => code >= 0xdc00 && code <= 0xdfff;
4
+ /**
5
+ * THE ONE SPLICE THAT TURNS `before` INTO `after`: what they share at the
6
+ * start and at the end is left alone, and the middle is replaced. A page
7
+ * that only knows the field's value before and after a keystroke says the
8
+ * keystroke this way. Never cuts a surrogate pair in two, so an emoji is
9
+ * removed or inserted whole.
10
+ */
11
+ export function diffSplice(before, after) {
12
+ const most = Math.min(before.length, after.length);
13
+ let start = 0;
14
+ while (start < most && before.charCodeAt(start) === after.charCodeAt(start))
15
+ start++;
16
+ // A shared first half of a pair whose second halves differ: the pair is the change.
17
+ if (start > 0 && high(before.charCodeAt(start - 1)))
18
+ start--;
19
+ let end = 0;
20
+ while (end < most - start && before.charCodeAt(before.length - 1 - end) === after.charCodeAt(after.length - 1 - end))
21
+ end++;
22
+ if (end > 0 && low(before.charCodeAt(before.length - end)))
23
+ end--;
24
+ return { at: start, removed: before.slice(start, before.length - end), inserted: after.slice(start, after.length - end) };
25
+ }
26
+ //# sourceMappingURL=diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/text/diff.ts"],"names":[],"mappings":"AAEA,wFAAwF;AACxF,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC;AAChE,MAAM,GAAG,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC;AAE/D;;;;;;GAMG;AACH,MAAM,UAAU,UAAU,CAAC,MAAc,EAAE,KAAa;IACtD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IACnD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,OAAO,KAAK,GAAG,IAAI,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC;QAAE,KAAK,EAAE,CAAC;IACrF,oFAAoF;IACpF,IAAI,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAAE,KAAK,EAAE,CAAC;IAC7D,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,OAAO,GAAG,GAAG,IAAI,GAAG,KAAK,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC;QAAE,GAAG,EAAE,CAAC;IAC5H,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;QAAE,GAAG,EAAE,CAAC;IAClE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,EAAE,CAAC;AAC5H,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { type Primitive } from "../graph/primitives.js";
2
+ import type { Operation } from "../ops/types.js";
3
+ import { type TextSplice } from "./splice.js";
4
+ /** The text at a revision, and the splices the log took on the field since, oldest first. */
5
+ export interface TextThen {
6
+ readonly then: string;
7
+ readonly since: readonly TextSplice[];
8
+ }
9
+ /** Whether a primitive changes one field of one record otherwise than by a splice: written whole, or its record made or taken out. */
10
+ export declare function writesWhole(primitive: Primitive, node: string, field: string): boolean;
11
+ /**
12
+ * A FIELD'S FIRST TEXT, AS THE INSERT IT IS. The first keystroke into a field
13
+ * holding no text is written whole, a patch from nothing to what was typed
14
+ * (so its inverse is exact); read as a splice it is that text inserted at 0,
15
+ * so a keystroke somebody else made against the empty text at the same time
16
+ * carries over it — the two insertions kept, the earlier in the log first —
17
+ * rather than being refused as made against text written whole since.
18
+ */
19
+ export declare function firstText(primitive: Primitive, node: string, field: string): TextSplice | undefined;
20
+ /** The splices on one field among these primitives, in order. */
21
+ export declare const splicesOn: (primitives: readonly Primitive[], node: string, field: string) => TextSplice[];
22
+ /**
23
+ * One field's text at revision `rev`, read back from its text now
24
+ * (`current`) over the log's ops after it; none when it cannot be: the
25
+ * field does not hold text, was written whole since, or `rev` is behind
26
+ * what the log holds.
27
+ */
28
+ export declare function textAt(ops: readonly Operation[], horizon: number, node: string, field: string, rev: number, current: unknown): TextThen | undefined;
29
+ /** A splice made against an older text, carried over each splice taken since, in order: as it applies to the text now. */
30
+ export declare function carried(splice: TextSplice, since: readonly TextSplice[]): TextSplice;
31
+ /**
32
+ * A WHOLE VALUE WRITTEN OVER TEXT TYPED TOGETHER, AS A SPLICE: against the
33
+ * text its writer read (`then`, a three-way merge — what they changed is
34
+ * carried over what others typed since), or with none, against the text now
35
+ * (the differing range is theirs). None when it changes nothing.
36
+ */
37
+ export declare function wholeAsSplice(current: string, wanted: string, then?: TextThen): TextSplice | undefined;
38
+ //# sourceMappingURL=since.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"since.d.ts","sourceRoot":"","sources":["../../src/text/since.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,KAAK,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAgB3D,6FAA6F;AAC7F,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,CAAC;CACvC;AAED,sIAAsI;AACtI,wBAAgB,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAUtF;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAKnG;AAED,iEAAiE;AACjE,eAAO,MAAM,SAAS,GAAI,YAAY,SAAS,SAAS,EAAE,EAAE,MAAM,MAAM,EAAE,OAAO,MAAM,KAAG,UAAU,EACY,CAAC;AAEjH;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,GAAG,EAAE,SAAS,SAAS,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,QAAQ,GAAG,SAAS,CAyBnJ;AAED,0HAA0H;AAC1H,wBAAgB,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,UAAU,EAAE,GAAG,UAAU,CAIpF;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,CAGtG"}
@@ -0,0 +1,88 @@
1
+ import { isUnset } from "../graph/primitives.js";
2
+ import { diffSplice } from "./diff.js";
3
+ import { applySplice } from "./splice.js";
4
+ import { transform } from "./transform.js";
5
+ /** Whether a primitive changes one field of one record otherwise than by a splice: written whole, or its record made or taken out. */
6
+ export function writesWhole(primitive, node, field) {
7
+ switch (primitive.op) {
8
+ case "patch-node":
9
+ return primitive.id === node && Object.prototype.hasOwnProperty.call(primitive.after, field);
10
+ case "add-node":
11
+ case "remove-node":
12
+ return primitive.node.id === node;
13
+ default:
14
+ return false;
15
+ }
16
+ }
17
+ /**
18
+ * A FIELD'S FIRST TEXT, AS THE INSERT IT IS. The first keystroke into a field
19
+ * holding no text is written whole, a patch from nothing to what was typed
20
+ * (so its inverse is exact); read as a splice it is that text inserted at 0,
21
+ * so a keystroke somebody else made against the empty text at the same time
22
+ * carries over it — the two insertions kept, the earlier in the log first —
23
+ * rather than being refused as made against text written whole since.
24
+ */
25
+ export function firstText(primitive, node, field) {
26
+ if (primitive.op !== "patch-node" || primitive.id !== node || !Object.prototype.hasOwnProperty.call(primitive.after, field))
27
+ return undefined;
28
+ const before = primitive.before[field];
29
+ const after = primitive.after[field];
30
+ return typeof after === "string" && (before === undefined || before === "" || isUnset(before)) ? { at: 0, removed: "", inserted: after } : undefined;
31
+ }
32
+ /** The splices on one field among these primitives, in order. */
33
+ export const splicesOn = (primitives, node, field) => primitives.flatMap((one) => (one.op === "splice-text" && one.id === node && one.field === field ? [one] : []));
34
+ /**
35
+ * One field's text at revision `rev`, read back from its text now
36
+ * (`current`) over the log's ops after it; none when it cannot be: the
37
+ * field does not hold text, was written whole since, or `rev` is behind
38
+ * what the log holds.
39
+ */
40
+ export function textAt(ops, horizon, node, field, rev, current) {
41
+ if (typeof current !== "string" || rev < horizon - 1)
42
+ return undefined;
43
+ const since = [];
44
+ for (const op of ops) {
45
+ if (op.seq <= rev)
46
+ continue;
47
+ for (const primitive of op.primitives) {
48
+ const first = firstText(primitive, node, field);
49
+ if (first) {
50
+ since.push(first);
51
+ continue;
52
+ }
53
+ if (writesWhole(primitive, node, field))
54
+ return undefined;
55
+ if (primitive.op === "splice-text" && primitive.id === node && primitive.field === field)
56
+ since.push(primitive);
57
+ }
58
+ }
59
+ let then = current;
60
+ try {
61
+ for (let at = since.length - 1; at >= 0; at--) {
62
+ const one = since[at];
63
+ then = applySplice(then, { at: one.at, removed: one.inserted, inserted: one.removed });
64
+ }
65
+ }
66
+ catch {
67
+ return undefined;
68
+ }
69
+ return { then, since };
70
+ }
71
+ /** A splice made against an older text, carried over each splice taken since, in order: as it applies to the text now. */
72
+ export function carried(splice, since) {
73
+ let now = splice;
74
+ for (const over of since)
75
+ now = transform(over, now)[1];
76
+ return { at: now.at, removed: now.removed, inserted: now.inserted };
77
+ }
78
+ /**
79
+ * A WHOLE VALUE WRITTEN OVER TEXT TYPED TOGETHER, AS A SPLICE: against the
80
+ * text its writer read (`then`, a three-way merge — what they changed is
81
+ * carried over what others typed since), or with none, against the text now
82
+ * (the differing range is theirs). None when it changes nothing.
83
+ */
84
+ export function wholeAsSplice(current, wanted, then) {
85
+ const splice = then ? carried(diffSplice(then.then, wanted), then.since) : diffSplice(current, wanted);
86
+ return splice.removed === "" && splice.inserted === "" ? undefined : splice;
87
+ }
88
+ //# sourceMappingURL=since.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"since.js","sourceRoot":"","sources":["../../src/text/since.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAkB,MAAM,wBAAwB,CAAC;AAEjE,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,WAAW,EAAmB,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAqB3C,sIAAsI;AACtI,MAAM,UAAU,WAAW,CAAC,SAAoB,EAAE,IAAY,EAAE,KAAa;IAC3E,QAAQ,SAAS,CAAC,EAAE,EAAE,CAAC;QACrB,KAAK,YAAY;YACf,OAAO,SAAS,CAAC,EAAE,KAAK,IAAI,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC/F,KAAK,UAAU,CAAC;QAChB,KAAK,aAAa;YAChB,OAAO,SAAS,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC;QACpC;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,SAAS,CAAC,SAAoB,EAAE,IAAY,EAAE,KAAa;IACzE,IAAI,SAAS,CAAC,EAAE,KAAK,YAAY,IAAI,SAAS,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC9I,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,EAAE,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AACvJ,CAAC;AAED,iEAAiE;AACjE,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,UAAgC,EAAE,IAAY,EAAE,KAAa,EAAgB,EAAE,CACvG,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,aAAa,IAAI,GAAG,CAAC,EAAE,KAAK,IAAI,IAAI,GAAG,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAEjH;;;;;GAKG;AACH,MAAM,UAAU,MAAM,CAAC,GAAyB,EAAE,OAAe,EAAE,IAAY,EAAE,KAAa,EAAE,GAAW,EAAE,OAAgB;IAC3H,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,GAAG,GAAG,OAAO,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IACvE,MAAM,KAAK,GAAiB,EAAE,CAAC;IAC/B,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACrB,IAAI,EAAE,CAAC,GAAG,IAAI,GAAG;YAAE,SAAS;QAC5B,KAAK,MAAM,SAAS,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC;YACtC,MAAM,KAAK,GAAG,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YAChD,IAAI,KAAK,EAAE,CAAC;gBACV,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAClB,SAAS;YACX,CAAC;YACD,IAAI,WAAW,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC;gBAAE,OAAO,SAAS,CAAC;YAC1D,IAAI,SAAS,CAAC,EAAE,KAAK,aAAa,IAAI,SAAS,CAAC,EAAE,KAAK,IAAI,IAAI,SAAS,CAAC,KAAK,KAAK,KAAK;gBAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAClH,CAAC;IACH,CAAC;IACD,IAAI,IAAI,GAAG,OAAO,CAAC;IACnB,IAAI,CAAC;QACH,KAAK,IAAI,EAAE,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;YAC9C,MAAM,GAAG,GAAG,KAAK,CAAC,EAAE,CAAE,CAAC;YACvB,IAAI,GAAG,WAAW,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACzF,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACzB,CAAC;AAED,0HAA0H;AAC1H,MAAM,UAAU,OAAO,CAAC,MAAkB,EAAE,KAA4B;IACtE,IAAI,GAAG,GAAG,MAAM,CAAC;IACjB,KAAK,MAAM,IAAI,IAAI,KAAK;QAAE,GAAG,GAAG,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC;AACtE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,OAAe,EAAE,MAAc,EAAE,IAAe;IAC5E,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACvG,OAAO,MAAM,CAAC,OAAO,KAAK,EAAE,IAAI,MAAM,CAAC,QAAQ,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;AAC9E,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * COLLABORATIVE TEXT, THE CORE (Roadmap f-collab-text, phase 1 of 6).
3
+ *
4
+ * Two people typing in one text field used to be two whole-value writes,
5
+ * and the second refused as stale or written over the first. The decision:
6
+ * operational transformation on the server, in-house, no CRDT, and the
7
+ * field's value stays a plain string. A keystroke is a splice — at a UTF-16
8
+ * offset, the text it removed, the text it inserted — and a splice made
9
+ * against an older text is transformed over the ones the log took since.
10
+ * Keeping `removed` (not only its length) makes a splice its own inverse
11
+ * turned round, so undo and the fields an op writes stay mechanical, and
12
+ * lets a fold refuse a splice whose text is not there.
13
+ *
14
+ * Phase 1 (this module): the `splice-text` primitive (op format 3) and the
15
+ * transform. Then: 2, the `type-text` act, and a whole-value write over a
16
+ * field that moved rewritten as a three-way splice; 3, op format 3 on the
17
+ * wire and a client's in-flight buffer (`compose` over unsent keystrokes);
18
+ * 4, the live editor (`transformCaret` keeps a caret where it was); 5, the
19
+ * words a change is said in, and the harness; 6, hardening.
20
+ *
21
+ * Only TP1 is needed: the server orders every splice, so a client transforms
22
+ * against one sequence and never two concurrent branches at once.
23
+ */
24
+ /** One change to a string: at `at` (UTF-16 code units), `removed` taken out and `inserted` put in. */
25
+ export interface TextSplice {
26
+ readonly at: number;
27
+ readonly removed: string;
28
+ readonly inserted: string;
29
+ }
30
+ /** The text with the splice made; throws when the text does not hold `removed` at `at`. */
31
+ export declare function applySplice(text: string, splice: TextSplice): string;
32
+ /**
33
+ * Where a caret in the text before `splice` is after it. Before the splice
34
+ * it stays, past it it moves by what changed, and on it — text inserted
35
+ * where it stands, or removed around it — `bias` says which side it keeps:
36
+ * `"before"` for a caret of one's own that a remote insertion lands at.
37
+ */
38
+ export declare function transformCaret(caret: number, splice: TextSplice, bias?: "before" | "after"): number;
39
+ //# sourceMappingURL=splice.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"splice.d.ts","sourceRoot":"","sources":["../../src/text/splice.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,sGAAsG;AACtG,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAID,2FAA2F;AAC3F,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,MAAM,CAKpE;AACD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,GAAE,QAAQ,GAAG,OAAiB,GAAG,MAAM,CAI5G"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * COLLABORATIVE TEXT, THE CORE (Roadmap f-collab-text, phase 1 of 6).
3
+ *
4
+ * Two people typing in one text field used to be two whole-value writes,
5
+ * and the second refused as stale or written over the first. The decision:
6
+ * operational transformation on the server, in-house, no CRDT, and the
7
+ * field's value stays a plain string. A keystroke is a splice — at a UTF-16
8
+ * offset, the text it removed, the text it inserted — and a splice made
9
+ * against an older text is transformed over the ones the log took since.
10
+ * Keeping `removed` (not only its length) makes a splice its own inverse
11
+ * turned round, so undo and the fields an op writes stay mechanical, and
12
+ * lets a fold refuse a splice whose text is not there.
13
+ *
14
+ * Phase 1 (this module): the `splice-text` primitive (op format 3) and the
15
+ * transform. Then: 2, the `type-text` act, and a whole-value write over a
16
+ * field that moved rewritten as a three-way splice; 3, op format 3 on the
17
+ * wire and a client's in-flight buffer (`compose` over unsent keystrokes);
18
+ * 4, the live editor (`transformCaret` keeps a caret where it was); 5, the
19
+ * words a change is said in, and the harness; 6, hardening.
20
+ *
21
+ * Only TP1 is needed: the server orders every splice, so a client transforms
22
+ * against one sequence and never two concurrent branches at once.
23
+ */
24
+ /** Where a splice's removed text ends, in the text it was made against. */
25
+ const end = (splice) => splice.at + splice.removed.length;
26
+ /** The text with the splice made; throws when the text does not hold `removed` at `at`. */
27
+ export function applySplice(text, splice) {
28
+ if (!Number.isInteger(splice.at) || splice.at < 0 || splice.at > text.length || text.slice(splice.at, end(splice)) !== splice.removed) {
29
+ throw new RangeError(`The text does not hold ${JSON.stringify(splice.removed)} at ${splice.at}.`);
30
+ }
31
+ return text.slice(0, splice.at) + splice.inserted + text.slice(end(splice));
32
+ }
33
+ /**
34
+ * Where a caret in the text before `splice` is after it. Before the splice
35
+ * it stays, past it it moves by what changed, and on it — text inserted
36
+ * where it stands, or removed around it — `bias` says which side it keeps:
37
+ * `"before"` for a caret of one's own that a remote insertion lands at.
38
+ */
39
+ export function transformCaret(caret, splice, bias = "after") {
40
+ if (caret < splice.at || (caret === splice.at && bias === "before"))
41
+ return caret;
42
+ if (caret >= end(splice))
43
+ return caret + splice.inserted.length - splice.removed.length;
44
+ return bias === "before" ? splice.at : splice.at + splice.inserted.length;
45
+ }
46
+ //# sourceMappingURL=splice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"splice.js","sourceRoot":"","sources":["../../src/text/splice.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AASH,2EAA2E;AAC3E,MAAM,GAAG,GAAG,CAAC,MAAkB,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;AACtE,2FAA2F;AAC3F,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,MAAkB;IAC1D,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC;QACtI,MAAM,IAAI,UAAU,CAAC,0BAA0B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;IACpG,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AAC9E,CAAC;AACD;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,KAAa,EAAE,MAAkB,EAAE,OAA2B,OAAO;IAClG,IAAI,KAAK,GAAG,MAAM,CAAC,EAAE,IAAI,CAAC,KAAK,KAAK,MAAM,CAAC,EAAE,IAAI,IAAI,KAAK,QAAQ,CAAC;QAAE,OAAO,KAAK,CAAC;IAClF,IAAI,KAAK,IAAI,GAAG,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;IACxF,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC5E,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { type TextSplice } from "./splice.js";
2
+ /**
3
+ * Two splices made against the same text, `a` the earlier in the log:
4
+ * `[a', b']`, `a'` to make after `b` and `b'` after `a`, so that both
5
+ * orders give the same text (TP1). Where they touch, both insertions are
6
+ * kept, left to right, `a`'s first at the same offset.
7
+ */
8
+ export declare function transform(a: TextSplice, b: TextSplice): [TextSplice, TextSplice];
9
+ /**
10
+ * `a` then `b` as one splice, when they touch (a run of keystrokes); none
11
+ * when they do not, since what lies between them is in neither.
12
+ */
13
+ export declare function compose(a: TextSplice, b: TextSplice): TextSplice | undefined;
14
+ //# sourceMappingURL=transform.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../src/text/transform.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAoC3D;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAEhF;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,SAAS,CAS5E"}
@@ -0,0 +1,59 @@
1
+ import { diffSplice } from "./diff.js";
2
+ import { applySplice } from "./splice.js";
3
+ /*
4
+ * THE TRANSFORM (Roadmap f-collab-text): a splice carried over another made
5
+ * against the same text, and a run of them made one. Apart from `./splice.ts`,
6
+ * which every page folds a splice with, so a page that never types carries
7
+ * none of it: `@graview/core/typing` exports it, and the store's typing,
8
+ * a server and an editor load it from there.
9
+ */
10
+ /** Where a splice's removed text ends, in the text it was made against. */
11
+ const end = (splice) => splice.at + splice.removed.length;
12
+ /** A splice that says only what changes: what its removed and inserted text share at either end left alone. */
13
+ function trimmed(splice) {
14
+ const said = diffSplice(splice.removed, splice.inserted);
15
+ return { ...said, at: splice.at + said.at };
16
+ }
17
+ /**
18
+ * `splice` as it applies after `over`, both made against the same text.
19
+ * Apart, it only moves by what `over` added. Touching or overlapping, the
20
+ * two take out everything either removed and put in both insertions — the
21
+ * one further left first, and at the same offset the one earlier in the
22
+ * log (`overEarlier`) — so whichever lands first, the text comes out the same.
23
+ */
24
+ function rebase(splice, over, overEarlier) {
25
+ if (end(splice) < over.at)
26
+ return splice;
27
+ if (splice.at > end(over))
28
+ return { ...splice, at: splice.at + over.inserted.length - over.removed.length };
29
+ const from = Math.min(splice.at, over.at);
30
+ const past = end(splice) - end(over);
31
+ const removed = splice.removed.slice(0, over.at - from) + over.inserted + (past > 0 ? splice.removed.slice(splice.removed.length - past) : "");
32
+ const overFirst = over.at < splice.at || (over.at === splice.at && overEarlier);
33
+ return trimmed({ at: from, removed, inserted: overFirst ? over.inserted + splice.inserted : splice.inserted + over.inserted });
34
+ }
35
+ /**
36
+ * Two splices made against the same text, `a` the earlier in the log:
37
+ * `[a', b']`, `a'` to make after `b` and `b'` after `a`, so that both
38
+ * orders give the same text (TP1). Where they touch, both insertions are
39
+ * kept, left to right, `a`'s first at the same offset.
40
+ */
41
+ export function transform(a, b) {
42
+ return [rebase(a, b, false), rebase(b, a, true)];
43
+ }
44
+ /**
45
+ * `a` then `b` as one splice, when they touch (a run of keystrokes); none
46
+ * when they do not, since what lies between them is in neither.
47
+ */
48
+ export function compose(a, b) {
49
+ const made = a.at + a.inserted.length;
50
+ if (end(b) < a.at || b.at > made)
51
+ return undefined;
52
+ const from = Math.min(a.at, b.at);
53
+ const past = end(b) - made;
54
+ const before = b.removed.slice(0, a.at - from);
55
+ const after = past > 0 ? b.removed.slice(b.removed.length - past) : "";
56
+ const inserted = applySplice(before + a.inserted + after, { ...b, at: b.at - from });
57
+ return trimmed({ at: from, removed: before + a.removed + after, inserted });
58
+ }
59
+ //# sourceMappingURL=transform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform.js","sourceRoot":"","sources":["../../src/text/transform.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ import type { Primitive } from "../graph/primitives.js";
2
+ import type { FieldRevision } from "../ops/revisions.js";
3
+ import type { Operation } from "../ops/types.js";
4
+ import type { AnyMutationDefinition, MutationCall } from "../mutations/types.js";
5
+ /** The name of the act that types into a text field typed together. */
6
+ export declare const TYPE_TEXT = "type-text";
7
+ /** What a store hands the hooks: its declaration, graph and log. */
8
+ export interface TypingStore {
9
+ readonly schema: {
10
+ tryDefinition(kind: string): unknown;
11
+ };
12
+ readonly graph: {
13
+ getNode(id: string): unknown;
14
+ };
15
+ readonly log: {
16
+ all(): readonly Operation[];
17
+ readonly horizon: number;
18
+ };
19
+ }
20
+ export declare const TYPING: {
21
+ /** "Type text", for one store: a keystroke carried over the log since the revision it was made at. */
22
+ typeText?: (store: TypingStore) => AnyMutationDefinition<never>;
23
+ /** Who may type into a field of a record of a kind: the acts any one of which permits it. */
24
+ via?: (schema: TypingStore["schema"], mutations: readonly AnyMutationDefinition<never>[], kind: string | undefined, field: unknown) => readonly string[];
25
+ /** Whether one field of a kind is typed together, by the declaration. */
26
+ collaborative?: (schema: TypingStore["schema"], kind: string | undefined, field: string) => boolean;
27
+ /** These primitives with each whole write over text typed together written as a splice. */
28
+ asSplices?: (store: TypingStore, primitives: readonly Primitive[], base?: readonly FieldRevision[]) => Primitive[];
29
+ /** What each op of an undo puts back, newest first, its splices carried over the typing since. */
30
+ undone?: (log: readonly Operation[], ops: readonly Operation[]) => {
31
+ readonly op: Operation;
32
+ readonly primitives: readonly Primitive[];
33
+ }[];
34
+ /** Of a later op, against what an undo takes back: true when it only typed on text the undo only typed, else the records whose typed text it wrote whole. */
35
+ aside?: (targets: readonly Primitive[], later: Operation) => true | readonly string[];
36
+ /**
37
+ * A client's own typing, still pending, carried over what the server
38
+ * says (`Store.rebase`): each pending batch that only types, as the calls
39
+ * that make its keystrokes on the text the landed ops leave.
40
+ */
41
+ carried?: (rolledBack: readonly Operation[], landed: readonly Operation[], pending: readonly string[]) => ReadonlyMap<string, readonly MutationCall[]>;
42
+ };
43
+ //# sourceMappingURL=typing-hook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typing-hook.d.ts","sourceRoot":"","sources":["../../src/text/typing-hook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAejF,uEAAuE;AACvE,eAAO,MAAM,SAAS,cAAc,CAAC;AAErC,oEAAoE;AACpE,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE;QAAE,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IAC1D,QAAQ,CAAC,KAAK,EAAE;QAAE,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC;IACjD,QAAQ,CAAC,GAAG,EAAE;QAAE,GAAG,IAAI,SAAS,SAAS,EAAE,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CACzE;AAED,eAAO,MAAM,MAAM,EAAE;IACnB,sGAAsG;IACtG,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAChE,6FAA6F;IAC7F,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,SAAS,qBAAqB,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,OAAO,KAAK,SAAS,MAAM,EAAE,CAAC;IACzJ,yEAAyE;IACzE,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IACpG,2FAA2F;IAC3F,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,SAAS,EAAE,EAAE,IAAI,CAAC,EAAE,SAAS,aAAa,EAAE,KAAK,SAAS,EAAE,CAAC;IACnH,kGAAkG;IAClG,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,SAAS,SAAS,EAAE,EAAE,GAAG,EAAE,SAAS,SAAS,EAAE,KAAK;QAAE,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC;QAAC,QAAQ,CAAC,UAAU,EAAE,SAAS,SAAS,EAAE,CAAA;KAAE,EAAE,CAAC;IAC3I,6JAA6J;IAC7J,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,SAAS,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,KAAK,IAAI,GAAG,SAAS,MAAM,EAAE,CAAC;IACtF;;;;OAIG;IACH,OAAO,CAAC,EAAE,CAAC,UAAU,EAAE,SAAS,SAAS,EAAE,EAAE,MAAM,EAAE,SAAS,SAAS,EAAE,EAAE,OAAO,EAAE,SAAS,MAAM,EAAE,KAAK,WAAW,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,CAAC,CAAC;CACnJ,CAAC"}
@@ -0,0 +1,16 @@
1
+ /*
2
+ * WHAT TYPING TOGETHER NEEDS THAT A PAGE OPENING AN APP DOES NOT (Roadmap
3
+ * f-collab-text). An app opens far more often than somebody types into a
4
+ * long field, so the store carries only these hooks; `@graview/core/typing`
5
+ * fills them — a keystroke carried over the log since its revision, a whole
6
+ * write merged as a splice, an undo carried over others' typing — and a
7
+ * host that serves seats loads it (`@graview/ship`'s server entry does), as
8
+ * a face does once a field typed together is focused. Unloaded, a store
9
+ * answers to no `type-text`, writes a whole value as a patch, and lets a
10
+ * later keystroke on a field block an undo of typing in it, as any later
11
+ * write does.
12
+ */
13
+ /** The name of the act that types into a text field typed together. */
14
+ export const TYPE_TEXT = "type-text";
15
+ export const TYPING = {};
16
+ //# sourceMappingURL=typing-hook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typing-hook.js","sourceRoot":"","sources":["../../src/text/typing-hook.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;GAWG;AAEH,uEAAuE;AACvE,MAAM,CAAC,MAAM,SAAS,GAAG,WAAW,CAAC;AASrC,MAAM,CAAC,MAAM,MAAM,GAmBf,EAAE,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { Operation } from "../ops/types.js";
2
+ import type { TextSplice } from "./splice.js";
3
+ /** Spans one after another, keystrokes that touch made one. */
4
+ export declare function joinSpans(spans: readonly TextSplice[], more: readonly TextSplice[]): TextSplice[];
5
+ /**
6
+ * WHAT THESE OPS TYPED INTO ONE FIELD, as spans: oldest first, each against
7
+ * the text as the one before it left it, keystrokes that touch made one —
8
+ * " white today" put in at 15, "Paint " taken out at 0 — never the text.
9
+ */
10
+ export declare function typedSpans(ops: readonly Operation[], node: string, field: string): TextSplice[];
11
+ //# sourceMappingURL=typing-spans.d.ts.map